From 16944314fe9f00edad955e6e4e8e9dd5b7583a75 Mon Sep 17 00:00:00 2001 From: zeromus Date: Sun, 11 Apr 2010 03:56:55 +0000 Subject: [PATCH] make 0.9.6 release branch from r3493 as planned. --- desmume/src/Disassembler.cpp | 2 +- desmume/src/GPU.cpp | 18 +- desmume/src/GPU.h | 3 + desmume/src/NDSSystem.cpp | 200 +- desmume/src/NDSSystem.h | 6 - desmume/src/SPU.cpp | 19 +- desmume/src/arm_instructions.cpp | 33 +- desmume/src/armcpu.cpp | 53 +- desmume/src/armcpu.h | 27 - desmume/src/cli/main.cpp | 103 +- desmume/src/cp15.cpp | 47 +- desmume/src/ctrlssdl.cpp | 62 +- desmume/src/ctrlssdl.h | 15 +- desmume/src/debug.cpp | 20 - desmume/src/debug.h | 2 - desmume/src/gtk-glade/Makefile.am | 2 +- desmume/src/instruction_tabdef.inc | 8471 +++++++++-------- desmume/src/saves.cpp | 18 +- desmume/src/thumb_instructions.cpp | 365 +- desmume/src/thumb_tabdef.inc | 64 +- desmume/src/utils/decrypt/header.cpp | 2 +- desmume/src/windows/DeSmuME_2005.vcproj | 670 +- desmume/src/windows/DeSmuME_2008.vcproj | 590 +- desmume/src/windows/main.cpp | 149 +- desmume/src/windows/memView.cpp | 22 +- desmume/src/windows/resource.h | 1 - desmume/src/windows/resources.rc | Bin 913612 -> 913098 bytes .../src/windows/wx/include/msvc/wx/setup.h | 249 - desmume/src/windows/wx/include/wx/aboutdlg.h | 161 - desmume/src/windows/wx/include/wx/accel.h | 171 - desmume/src/windows/wx/include/wx/access.h | 377 - desmume/src/windows/wx/include/wx/afterstd.h | 48 - desmume/src/windows/wx/include/wx/anidecod.h | 77 - desmume/src/windows/wx/include/wx/animate.h | 124 - desmume/src/windows/wx/include/wx/animdecod.h | 146 - desmume/src/windows/wx/include/wx/app.h | 708 -- desmume/src/windows/wx/include/wx/apptrait.h | 272 - desmume/src/windows/wx/include/wx/archive.h | 381 - desmume/src/windows/wx/include/wx/arrimpl.cpp | 120 - desmume/src/windows/wx/include/wx/arrstr.h | 377 - desmume/src/windows/wx/include/wx/artprov.h | 204 - desmume/src/windows/wx/include/wx/aui/aui.h | 23 - .../src/windows/wx/include/wx/aui/auibar.h | 684 -- .../src/windows/wx/include/wx/aui/auibook.h | 753 -- .../src/windows/wx/include/wx/aui/dockart.h | 173 - .../src/windows/wx/include/wx/aui/floatpane.h | 81 - .../windows/wx/include/wx/aui/framemanager.h | 856 -- .../src/windows/wx/include/wx/aui/tabmdi.h | 269 - desmume/src/windows/wx/include/wx/beforestd.h | 65 - desmume/src/windows/wx/include/wx/bitmap.h | 241 - desmume/src/windows/wx/include/wx/bmpbuttn.h | 122 - desmume/src/windows/wx/include/wx/bmpcbox.h | 49 - desmume/src/windows/wx/include/wx/bookctrl.h | 403 - desmume/src/windows/wx/include/wx/brush.h | 54 - desmume/src/windows/wx/include/wx/buffer.h | 314 - desmume/src/windows/wx/include/wx/build.h | 149 - desmume/src/windows/wx/include/wx/busyinfo.h | 21 - desmume/src/windows/wx/include/wx/button.h | 106 - desmume/src/windows/wx/include/wx/calctrl.h | 232 - desmume/src/windows/wx/include/wx/caret.h | 252 - desmume/src/windows/wx/include/wx/checkbox.h | 156 - desmume/src/windows/wx/include/wx/checklst.h | 64 - desmume/src/windows/wx/include/wx/chkconf.h | 1871 ---- desmume/src/windows/wx/include/wx/choicdlg.h | 22 - desmume/src/windows/wx/include/wx/choice.h | 88 - desmume/src/windows/wx/include/wx/choicebk.h | 154 - desmume/src/windows/wx/include/wx/clipbrd.h | 145 - desmume/src/windows/wx/include/wx/clntdata.h | 273 - desmume/src/windows/wx/include/wx/clrpicker.h | 200 - desmume/src/windows/wx/include/wx/cmdline.h | 239 - desmume/src/windows/wx/include/wx/cmdproc.h | 144 - desmume/src/windows/wx/include/wx/cmndata.h | 454 - desmume/src/windows/wx/include/wx/collpane.h | 104 - desmume/src/windows/wx/include/wx/colordlg.h | 41 - desmume/src/windows/wx/include/wx/colour.h | 154 - desmume/src/windows/wx/include/wx/combo.h | 746 -- desmume/src/windows/wx/include/wx/combobox.h | 97 - desmume/src/windows/wx/include/wx/confbase.h | 359 - desmume/src/windows/wx/include/wx/config.h | 31 - desmume/src/windows/wx/include/wx/containr.h | 142 - desmume/src/windows/wx/include/wx/control.h | 117 - desmume/src/windows/wx/include/wx/convauto.h | 108 - desmume/src/windows/wx/include/wx/cpp.h | 57 - desmume/src/windows/wx/include/wx/cppunit.h | 129 - desmume/src/windows/wx/include/wx/cshelp.h | 244 - desmume/src/windows/wx/include/wx/ctrlsub.h | 210 - desmume/src/windows/wx/include/wx/cursor.h | 79 - desmume/src/windows/wx/include/wx/dataobj.h | 540 -- desmume/src/windows/wx/include/wx/dataview.h | 462 - desmume/src/windows/wx/include/wx/datectrl.h | 112 - desmume/src/windows/wx/include/wx/dateevt.h | 69 - desmume/src/windows/wx/include/wx/datetime.h | 2137 ----- desmume/src/windows/wx/include/wx/datstrm.h | 170 - desmume/src/windows/wx/include/wx/db.h | 853 -- desmume/src/windows/wx/include/wx/dbgrid.h | 177 - desmume/src/windows/wx/include/wx/dbkeyg.h | 41 - desmume/src/windows/wx/include/wx/dbtable.h | 377 - desmume/src/windows/wx/include/wx/dc.h | 1003 -- desmume/src/windows/wx/include/wx/dcbuffer.h | 276 - desmume/src/windows/wx/include/wx/dcclient.h | 42 - desmume/src/windows/wx/include/wx/dcgraph.h | 190 - desmume/src/windows/wx/include/wx/dcmemory.h | 76 - desmume/src/windows/wx/include/wx/dcmirror.h | 287 - desmume/src/windows/wx/include/wx/dcprint.h | 33 - desmume/src/windows/wx/include/wx/dcps.h | 18 - desmume/src/windows/wx/include/wx/dcscreen.h | 42 - desmume/src/windows/wx/include/wx/dde.h | 32 - desmume/src/windows/wx/include/wx/debug.h | 316 - desmume/src/windows/wx/include/wx/debugrpt.h | 235 - desmume/src/windows/wx/include/wx/defs.h | 2900 ------ desmume/src/windows/wx/include/wx/dialog.h | 167 - desmume/src/windows/wx/include/wx/dialup.h | 201 - desmume/src/windows/wx/include/wx/dir.h | 161 - desmume/src/windows/wx/include/wx/dirctrl.h | 18 - desmume/src/windows/wx/include/wx/dirdlg.h | 141 - desmume/src/windows/wx/include/wx/display.h | 128 - .../src/windows/wx/include/wx/display_impl.h | 110 - desmume/src/windows/wx/include/wx/dlimpexp.h | 275 - desmume/src/windows/wx/include/wx/dnd.h | 267 - desmume/src/windows/wx/include/wx/docmdi.h | 107 - desmume/src/windows/wx/include/wx/docview.h | 675 -- desmume/src/windows/wx/include/wx/dragimag.h | 54 - desmume/src/windows/wx/include/wx/dynarray.h | 1044 -- desmume/src/windows/wx/include/wx/dynlib.h | 359 - desmume/src/windows/wx/include/wx/dynload.h | 153 - desmume/src/windows/wx/include/wx/effects.h | 75 - desmume/src/windows/wx/include/wx/encconv.h | 159 - desmume/src/windows/wx/include/wx/encinfo.h | 74 - desmume/src/windows/wx/include/wx/event.h | 3116 ------ desmume/src/windows/wx/include/wx/evtloop.h | 229 - desmume/src/windows/wx/include/wx/except.h | 30 - desmume/src/windows/wx/include/wx/fdrepdlg.h | 195 - desmume/src/windows/wx/include/wx/features.h | 64 - desmume/src/windows/wx/include/wx/ffile.h | 115 - desmume/src/windows/wx/include/wx/file.h | 201 - desmume/src/windows/wx/include/wx/fileconf.h | 246 - desmume/src/windows/wx/include/wx/filedlg.h | 226 - desmume/src/windows/wx/include/wx/filefn.h | 741 -- desmume/src/windows/wx/include/wx/filename.h | 541 -- .../src/windows/wx/include/wx/filepicker.h | 398 - desmume/src/windows/wx/include/wx/filesys.h | 300 - desmume/src/windows/wx/include/wx/flags.h | 165 - desmume/src/windows/wx/include/wx/fmappriv.h | 74 - desmume/src/windows/wx/include/wx/font.h | 251 - desmume/src/windows/wx/include/wx/fontdlg.h | 118 - desmume/src/windows/wx/include/wx/fontenc.h | 151 - desmume/src/windows/wx/include/wx/fontenum.h | 88 - desmume/src/windows/wx/include/wx/fontmap.h | 290 - .../src/windows/wx/include/wx/fontpicker.h | 223 - desmume/src/windows/wx/include/wx/fontutil.h | 242 - desmume/src/windows/wx/include/wx/frame.h | 262 - desmume/src/windows/wx/include/wx/fs_arc.h | 56 - desmume/src/windows/wx/include/wx/fs_filter.h | 41 - desmume/src/windows/wx/include/wx/fs_inet.h | 33 - desmume/src/windows/wx/include/wx/fs_mem.h | 127 - desmume/src/windows/wx/include/wx/fs_zip.h | 23 - desmume/src/windows/wx/include/wx/gauge.h | 126 - desmume/src/windows/wx/include/wx/gbsizer.h | 303 - desmume/src/windows/wx/include/wx/gdicmn.h | 755 -- desmume/src/windows/wx/include/wx/gdiobj.h | 51 - .../windows/wx/include/wx/generic/aboutdlgg.h | 87 - .../src/windows/wx/include/wx/generic/accel.h | 50 - .../windows/wx/include/wx/generic/animate.h | 178 - .../windows/wx/include/wx/generic/bmpcbox.h | 170 - .../windows/wx/include/wx/generic/busyinfo.h | 42 - .../windows/wx/include/wx/generic/buttonbar.h | 123 - .../windows/wx/include/wx/generic/calctrl.h | 324 - .../src/windows/wx/include/wx/generic/caret.h | 95 - .../windows/wx/include/wx/generic/choicdgg.h | 320 - .../wx/include/wx/generic/clrpickerg.h | 98 - .../windows/wx/include/wx/generic/collpaneg.h | 105 - .../windows/wx/include/wx/generic/colour.h | 75 - .../windows/wx/include/wx/generic/colrdlgg.h | 120 - .../src/windows/wx/include/wx/generic/combo.h | 140 - .../windows/wx/include/wx/generic/dataview.h | 311 - .../windows/wx/include/wx/generic/datectrl.h | 91 - .../src/windows/wx/include/wx/generic/dcpsg.h | 154 - .../windows/wx/include/wx/generic/dirctrlg.h | 295 - .../windows/wx/include/wx/generic/dirdlgg.h | 89 - .../windows/wx/include/wx/generic/dragimgg.h | 271 - .../windows/wx/include/wx/generic/fdrepdlg.h | 71 - .../windows/wx/include/wx/generic/filedlgg.h | 307 - .../wx/include/wx/generic/filepickerg.h | 213 - .../windows/wx/include/wx/generic/fontdlgg.h | 120 - .../wx/include/wx/generic/fontpickerg.h | 82 - .../src/windows/wx/include/wx/generic/grid.h | 2302 ----- .../windows/wx/include/wx/generic/gridctrl.h | 158 - .../windows/wx/include/wx/generic/gridsel.h | 88 - .../windows/wx/include/wx/generic/helpext.h | 166 - .../src/windows/wx/include/wx/generic/icon.h | 56 - .../windows/wx/include/wx/generic/imaglist.h | 82 - .../windows/wx/include/wx/generic/laywin.h | 222 - .../windows/wx/include/wx/generic/listctrl.h | 281 - .../src/windows/wx/include/wx/generic/logg.h | 129 - .../src/windows/wx/include/wx/generic/mask.h | 54 - .../src/windows/wx/include/wx/generic/mdig.h | 335 - .../windows/wx/include/wx/generic/msgdlgg.h | 44 - .../windows/wx/include/wx/generic/notebook.h | 160 - .../windows/wx/include/wx/generic/numdlgg.h | 79 - .../windows/wx/include/wx/generic/paletteg.h | 49 - .../windows/wx/include/wx/generic/panelg.h | 95 - .../windows/wx/include/wx/generic/printps.h | 68 - .../windows/wx/include/wx/generic/prntdlgg.h | 256 - .../windows/wx/include/wx/generic/progdlgg.h | 172 - .../windows/wx/include/wx/generic/propdlg.h | 163 - .../windows/wx/include/wx/generic/region.h | 79 - .../windows/wx/include/wx/generic/sashwin.h | 261 - .../windows/wx/include/wx/generic/scrolwin.h | 27 - .../windows/wx/include/wx/generic/spinctlg.h | 183 - .../windows/wx/include/wx/generic/splash.h | 92 - .../windows/wx/include/wx/generic/splitter.h | 406 - .../windows/wx/include/wx/generic/srchctlg.h | 275 - .../windows/wx/include/wx/generic/statline.h | 62 - .../windows/wx/include/wx/generic/statusbr.h | 107 - .../src/windows/wx/include/wx/generic/tabg.h | 363 - .../windows/wx/include/wx/generic/textdlgg.h | 113 - .../src/windows/wx/include/wx/generic/timer.h | 45 - .../windows/wx/include/wx/generic/treectlg.h | 383 - .../windows/wx/include/wx/generic/wizard.h | 142 - desmume/src/windows/wx/include/wx/geometry.h | 814 -- desmume/src/windows/wx/include/wx/gifdecod.h | 110 - desmume/src/windows/wx/include/wx/glcanvas.h | 86 - desmume/src/windows/wx/include/wx/graphics.h | 732 -- desmume/src/windows/wx/include/wx/grid.h | 18 - desmume/src/windows/wx/include/wx/gsocket.h | 184 - desmume/src/windows/wx/include/wx/hash.h | 630 -- desmume/src/windows/wx/include/wx/hashmap.h | 739 -- desmume/src/windows/wx/include/wx/hashset.h | 135 - desmume/src/windows/wx/include/wx/help.h | 48 - desmume/src/windows/wx/include/wx/helpbase.h | 106 - desmume/src/windows/wx/include/wx/helphtml.h | 20 - desmume/src/windows/wx/include/wx/helpwin.h | 22 - .../src/windows/wx/include/wx/html/forcelnk.h | 62 - .../src/windows/wx/include/wx/html/helpctrl.h | 153 - .../src/windows/wx/include/wx/html/helpdata.h | 266 - .../src/windows/wx/include/wx/html/helpdlg.h | 90 - .../src/windows/wx/include/wx/html/helpfrm.h | 147 - .../src/windows/wx/include/wx/html/helpwnd.h | 300 - .../src/windows/wx/include/wx/html/htmlcell.h | 673 -- .../src/windows/wx/include/wx/html/htmldefs.h | 104 - .../src/windows/wx/include/wx/html/htmlfilt.h | 82 - .../src/windows/wx/include/wx/html/htmlpars.h | 283 - .../src/windows/wx/include/wx/html/htmlproc.h | 58 - .../src/windows/wx/include/wx/html/htmltag.h | 148 - .../src/windows/wx/include/wx/html/htmlwin.h | 651 -- .../src/windows/wx/include/wx/html/htmprint.h | 298 - .../src/windows/wx/include/wx/html/m_templ.h | 84 - .../src/windows/wx/include/wx/html/webkit.h | 231 - .../src/windows/wx/include/wx/html/winpars.h | 292 - desmume/src/windows/wx/include/wx/htmllbox.h | 325 - desmume/src/windows/wx/include/wx/hyperlink.h | 231 - desmume/src/windows/wx/include/wx/icon.h | 53 - desmume/src/windows/wx/include/wx/iconbndl.h | 69 - desmume/src/windows/wx/include/wx/iconloc.h | 81 - desmume/src/windows/wx/include/wx/imagbmp.h | 165 - desmume/src/windows/wx/include/wx/image.h | 454 - desmume/src/windows/wx/include/wx/imaggif.h | 48 - desmume/src/windows/wx/include/wx/imagiff.h | 44 - desmume/src/windows/wx/include/wx/imagjpeg.h | 48 - desmume/src/windows/wx/include/wx/imaglist.h | 55 - desmume/src/windows/wx/include/wx/imagpcx.h | 47 - desmume/src/windows/wx/include/wx/imagpng.h | 60 - desmume/src/windows/wx/include/wx/imagpnm.h | 46 - desmume/src/windows/wx/include/wx/imagtga.h | 46 - desmume/src/windows/wx/include/wx/imagtiff.h | 49 - desmume/src/windows/wx/include/wx/imagxpm.h | 45 - desmume/src/windows/wx/include/wx/init.h | 95 - desmume/src/windows/wx/include/wx/intl.h | 632 -- desmume/src/windows/wx/include/wx/iosfwrap.h | 26 - desmume/src/windows/wx/include/wx/ioswrap.h | 26 - desmume/src/windows/wx/include/wx/ipc.h | 45 - desmume/src/windows/wx/include/wx/ipcbase.h | 163 - desmume/src/windows/wx/include/wx/isql.h | 248 - desmume/src/windows/wx/include/wx/isqlext.h | 1178 --- desmume/src/windows/wx/include/wx/joystick.h | 38 - desmume/src/windows/wx/include/wx/layout.h | 191 - desmume/src/windows/wx/include/wx/laywin.h | 18 - desmume/src/windows/wx/include/wx/link.h | 32 - desmume/src/windows/wx/include/wx/list.h | 1308 --- desmume/src/windows/wx/include/wx/listbase.h | 491 - desmume/src/windows/wx/include/wx/listbook.h | 152 - desmume/src/windows/wx/include/wx/listbox.h | 166 - desmume/src/windows/wx/include/wx/listctrl.h | 110 - .../src/windows/wx/include/wx/listimpl.cpp | 39 - desmume/src/windows/wx/include/wx/log.h | 653 -- desmume/src/windows/wx/include/wx/longlong.h | 1080 --- desmume/src/windows/wx/include/wx/math.h | 140 - desmume/src/windows/wx/include/wx/matrix.h | 235 - desmume/src/windows/wx/include/wx/mdi.h | 40 - desmume/src/windows/wx/include/wx/mediactrl.h | 422 - desmume/src/windows/wx/include/wx/memconf.h | 54 - desmume/src/windows/wx/include/wx/memory.h | 373 - desmume/src/windows/wx/include/wx/memtext.h | 54 - desmume/src/windows/wx/include/wx/menu.h | 555 -- desmume/src/windows/wx/include/wx/menuitem.h | 203 - desmume/src/windows/wx/include/wx/metafile.h | 62 - desmume/src/windows/wx/include/wx/mimetype.h | 453 - desmume/src/windows/wx/include/wx/minifram.h | 43 - desmume/src/windows/wx/include/wx/module.h | 103 - .../windows/wx/include/wx/msdos/apptrait.h | 27 - .../windows/wx/include/wx/msdos/mimetype.h | 115 - desmume/src/windows/wx/include/wx/msgdlg.h | 79 - desmume/src/windows/wx/include/wx/msgout.h | 113 - desmume/src/windows/wx/include/wx/mstream.h | 92 - desmume/src/windows/wx/include/wx/msw/accel.h | 46 - .../windows/wx/include/wx/msw/amd64.manifest | 22 - desmume/src/windows/wx/include/wx/msw/app.h | 147 - .../src/windows/wx/include/wx/msw/apptbase.h | 46 - .../src/windows/wx/include/wx/msw/apptrait.h | 45 - .../src/windows/wx/include/wx/msw/bitmap.h | 282 - .../src/windows/wx/include/wx/msw/blank.cur | Bin 326 -> 0 bytes .../src/windows/wx/include/wx/msw/bmpbuttn.h | 73 - desmume/src/windows/wx/include/wx/msw/brush.h | 60 - .../windows/wx/include/wx/msw/bullseye.cur | Bin 326 -> 0 bytes .../src/windows/wx/include/wx/msw/button.h | 82 - desmume/src/windows/wx/include/wx/msw/caret.h | 64 - .../src/windows/wx/include/wx/msw/cdrom.ico | Bin 1718 -> 0 bytes .../src/windows/wx/include/wx/msw/checkbox.h | 86 - .../src/windows/wx/include/wx/msw/checklst.h | 96 - .../src/windows/wx/include/wx/msw/child.ico | Bin 1078 -> 0 bytes .../src/windows/wx/include/wx/msw/chkconf.h | 387 - .../src/windows/wx/include/wx/msw/choice.h | 135 - .../src/windows/wx/include/wx/msw/clipbrd.h | 98 - .../src/windows/wx/include/wx/msw/colordlg.h | 56 - .../src/windows/wx/include/wx/msw/colour.h | 88 - .../src/windows/wx/include/wx/msw/colours.bmp | Bin 122 -> 0 bytes desmume/src/windows/wx/include/wx/msw/combo.h | 111 - .../src/windows/wx/include/wx/msw/combobox.h | 138 - .../windows/wx/include/wx/msw/computer.ico | Bin 1718 -> 0 bytes .../src/windows/wx/include/wx/msw/control.h | 141 - .../src/windows/wx/include/wx/msw/crashrpt.h | 120 - .../src/windows/wx/include/wx/msw/cross.cur | Bin 326 -> 0 bytes .../src/windows/wx/include/wx/msw/csquery.bmp | Bin 206 -> 0 bytes .../src/windows/wx/include/wx/msw/cursor.h | 47 - .../src/windows/wx/include/wx/msw/datectrl.h | 70 - desmume/src/windows/wx/include/wx/msw/dc.h | 345 - .../src/windows/wx/include/wx/msw/dcclient.h | 118 - .../src/windows/wx/include/wx/msw/dcmemory.h | 45 - .../src/windows/wx/include/wx/msw/dcprint.h | 70 - .../src/windows/wx/include/wx/msw/dcscreen.h | 40 - desmume/src/windows/wx/include/wx/msw/dde.h | 144 - .../src/windows/wx/include/wx/msw/debughlp.h | 228 - .../src/windows/wx/include/wx/msw/dialog.h | 140 - desmume/src/windows/wx/include/wx/msw/dib.h | 255 - .../src/windows/wx/include/wx/msw/dirdlg.h | 35 - .../src/windows/wx/include/wx/msw/dragimag.h | 274 - .../src/windows/wx/include/wx/msw/drive.ico | Bin 1718 -> 0 bytes .../src/windows/wx/include/wx/msw/enhmeta.h | 184 - .../src/windows/wx/include/wx/msw/evtloop.h | 69 - .../src/windows/wx/include/wx/msw/fdrepdlg.h | 62 - .../src/windows/wx/include/wx/msw/file1.ico | Bin 1718 -> 0 bytes .../src/windows/wx/include/wx/msw/filedlg.h | 55 - .../src/windows/wx/include/wx/msw/floppy.ico | Bin 1718 -> 0 bytes .../src/windows/wx/include/wx/msw/folder1.ico | Bin 1718 -> 0 bytes .../src/windows/wx/include/wx/msw/folder2.ico | Bin 1718 -> 0 bytes desmume/src/windows/wx/include/wx/msw/font.h | 148 - .../src/windows/wx/include/wx/msw/fontdlg.h | 46 - .../src/windows/wx/include/wx/msw/fontenum.h | 40 - desmume/src/windows/wx/include/wx/msw/frame.h | 172 - .../src/windows/wx/include/wx/msw/gauge95.h | 70 - .../src/windows/wx/include/wx/msw/gccpriv.h | 127 - .../src/windows/wx/include/wx/msw/gdiimage.h | 189 - .../src/windows/wx/include/wx/msw/genrcdefs.h | 43 - .../src/windows/wx/include/wx/msw/glcanvas.h | 128 - .../src/windows/wx/include/wx/msw/gsockmsw.h | 145 - .../src/windows/wx/include/wx/msw/hand.cur | Bin 326 -> 0 bytes .../src/windows/wx/include/wx/msw/helpbest.h | 129 - .../src/windows/wx/include/wx/msw/helpchm.h | 60 - .../src/windows/wx/include/wx/msw/helpwin.h | 56 - .../src/windows/wx/include/wx/msw/htmlhelp.h | 465 - .../windows/wx/include/wx/msw/ia64.manifest | 22 - desmume/src/windows/wx/include/wx/msw/icon.h | 95 - .../src/windows/wx/include/wx/msw/imaglist.h | 206 - .../src/windows/wx/include/wx/msw/iniconf.h | 95 - .../src/windows/wx/include/wx/msw/joystick.h | 90 - .../src/windows/wx/include/wx/msw/libraries.h | 27 - .../src/windows/wx/include/wx/msw/listbox.h | 168 - .../src/windows/wx/include/wx/msw/listctrl.h | 449 - .../src/windows/wx/include/wx/msw/magnif1.cur | Bin 326 -> 0 bytes desmume/src/windows/wx/include/wx/msw/mdi.h | 238 - desmume/src/windows/wx/include/wx/msw/mdi.ico | Bin 1078 -> 0 bytes desmume/src/windows/wx/include/wx/msw/menu.h | 241 - .../src/windows/wx/include/wx/msw/menuitem.h | 100 - .../src/windows/wx/include/wx/msw/metafile.h | 171 - .../src/windows/wx/include/wx/msw/microwin.h | 235 - .../src/windows/wx/include/wx/msw/mimetype.h | 122 - .../src/windows/wx/include/wx/msw/minifram.h | 52 - .../src/windows/wx/include/wx/msw/missing.h | 495 - .../src/windows/wx/include/wx/msw/msgdlg.h | 42 - desmume/src/windows/wx/include/wx/msw/mslu.h | 23 - .../src/windows/wx/include/wx/msw/msvcrt.h | 69 - .../src/windows/wx/include/wx/msw/notebook.h | 254 - .../windows/wx/include/wx/msw/ole/access.h | 68 - .../windows/wx/include/wx/msw/ole/activex.h | 221 - .../windows/wx/include/wx/msw/ole/automtn.h | 101 - .../windows/wx/include/wx/msw/ole/dataform.h | 68 - .../windows/wx/include/wx/msw/ole/dataobj.h | 79 - .../windows/wx/include/wx/msw/ole/dataobj2.h | 146 - .../windows/wx/include/wx/msw/ole/dropsrc.h | 79 - .../windows/wx/include/wx/msw/ole/droptgt.h | 72 - .../windows/wx/include/wx/msw/ole/oleutils.h | 256 - .../src/windows/wx/include/wx/msw/ole/uuid.h | 92 - .../src/windows/wx/include/wx/msw/palette.h | 58 - .../src/windows/wx/include/wx/msw/pbrush.cur | Bin 326 -> 0 bytes desmume/src/windows/wx/include/wx/msw/pen.h | 132 - .../src/windows/wx/include/wx/msw/pencil.cur | Bin 326 -> 0 bytes .../src/windows/wx/include/wx/msw/pntleft.cur | Bin 326 -> 0 bytes .../windows/wx/include/wx/msw/pntright.cur | Bin 326 -> 0 bytes .../src/windows/wx/include/wx/msw/popupwin.h | 45 - .../src/windows/wx/include/wx/msw/printdlg.h | 124 - .../src/windows/wx/include/wx/msw/printwin.h | 66 - .../src/windows/wx/include/wx/msw/private.h | 953 -- .../windows/wx/include/wx/msw/question.ico | Bin 2238 -> 0 bytes .../src/windows/wx/include/wx/msw/radiobox.h | 175 - .../src/windows/wx/include/wx/msw/radiobut.h | 70 - .../src/windows/wx/include/wx/msw/rcdefs.h | 44 - .../src/windows/wx/include/wx/msw/regconf.h | 110 - .../src/windows/wx/include/wx/msw/region.h | 102 - .../src/windows/wx/include/wx/msw/registry.h | 247 - .../windows/wx/include/wx/msw/removble.ico | Bin 1718 -> 0 bytes .../windows/wx/include/wx/msw/rightarr.cur | Bin 326 -> 0 bytes .../src/windows/wx/include/wx/msw/roller.cur | Bin 326 -> 0 bytes .../src/windows/wx/include/wx/msw/scrolbar.h | 72 - desmume/src/windows/wx/include/wx/msw/seh.h | 74 - desmume/src/windows/wx/include/wx/msw/setup.h | 1349 --- .../src/windows/wx/include/wx/msw/setup0.h | 1349 --- .../wx/include/wx/msw/setup_microwin.h | 1179 --- .../src/windows/wx/include/wx/msw/slider95.h | 137 - desmume/src/windows/wx/include/wx/msw/sound.h | 52 - .../src/windows/wx/include/wx/msw/spinbutt.h | 72 - .../src/windows/wx/include/wx/msw/spinctrl.h | 142 - .../src/windows/wx/include/wx/msw/stackwalk.h | 103 - .../src/windows/wx/include/wx/msw/statbmp.h | 90 - .../src/windows/wx/include/wx/msw/statbox.h | 73 - .../src/windows/wx/include/wx/msw/statbr95.h | 76 - .../src/windows/wx/include/wx/msw/statline.h | 52 - .../src/windows/wx/include/wx/msw/stattext.h | 56 - desmume/src/windows/wx/include/wx/msw/std.ico | Bin 1078 -> 0 bytes .../src/windows/wx/include/wx/msw/stdpaths.h | 53 - .../src/windows/wx/include/wx/msw/subwin.h | 195 - .../src/windows/wx/include/wx/msw/tabctrl.h | 160 - .../src/windows/wx/include/wx/msw/taskbar.h | 82 - .../src/windows/wx/include/wx/msw/tbar95.h | 156 - .../src/windows/wx/include/wx/msw/textctrl.h | 291 - .../src/windows/wx/include/wx/msw/tglbtn.h | 60 - desmume/src/windows/wx/include/wx/msw/timer.h | 40 - .../src/windows/wx/include/wx/msw/tooltip.h | 71 - .../src/windows/wx/include/wx/msw/toplevel.h | 197 - .../src/windows/wx/include/wx/msw/treectrl.h | 315 - .../src/windows/wx/include/wx/msw/uxtheme.h | 230 - .../src/windows/wx/include/wx/msw/uxthemep.h | 169 - .../wx/include/wx/msw/wince/checklst.h | 95 - .../windows/wx/include/wx/msw/wince/chkconf.h | 100 - .../wx/include/wx/msw/wince/choicece.h | 142 - .../windows/wx/include/wx/msw/wince/helpwce.h | 58 - .../wx/include/wx/msw/wince/libraries.h | 59 - .../windows/wx/include/wx/msw/wince/missing.h | 140 - .../src/windows/wx/include/wx/msw/wince/net.h | 21 - .../wx/include/wx/msw/wince/resources.h | 25 - .../windows/wx/include/wx/msw/wince/setup.h | 1295 --- .../wx/include/wx/msw/wince/smartphone.rc | 67 - .../windows/wx/include/wx/msw/wince/tbarwce.h | 168 - .../wx/include/wx/msw/wince/textctrlce.h | 236 - .../windows/wx/include/wx/msw/wince/time.h | 53 - .../windows/wx/include/wx/msw/wince/wince.rc | 26 - .../src/windows/wx/include/wx/msw/window.h | 601 -- .../src/windows/wx/include/wx/msw/winundef.h | 490 - .../src/windows/wx/include/wx/msw/wrapcctl.h | 62 - .../src/windows/wx/include/wx/msw/wrapcdlg.h | 28 - .../src/windows/wx/include/wx/msw/wrapshl.h | 90 - .../src/windows/wx/include/wx/msw/wrapwin.h | 99 - .../src/windows/wx/include/wx/msw/wx.manifest | 22 - desmume/src/windows/wx/include/wx/msw/wx.rc | 119 - desmume/src/windows/wx/include/wx/notebook.h | 183 - desmume/src/windows/wx/include/wx/numdlg.h | 23 - desmume/src/windows/wx/include/wx/object.h | 569 -- desmume/src/windows/wx/include/wx/odcombo.h | 386 - desmume/src/windows/wx/include/wx/overlay.h | 97 - desmume/src/windows/wx/include/wx/ownerdrw.h | 174 - desmume/src/windows/wx/include/wx/palette.h | 59 - desmume/src/windows/wx/include/wx/panel.h | 18 - desmume/src/windows/wx/include/wx/paper.h | 122 - desmume/src/windows/wx/include/wx/pen.h | 40 - .../src/windows/wx/include/wx/pickerbase.h | 189 - desmume/src/windows/wx/include/wx/platform.h | 662 -- desmume/src/windows/wx/include/wx/platinfo.h | 313 - desmume/src/windows/wx/include/wx/popupwin.h | 192 - desmume/src/windows/wx/include/wx/power.h | 111 - desmume/src/windows/wx/include/wx/print.h | 39 - desmume/src/windows/wx/include/wx/printdlg.h | 122 - .../wx/include/wx/private/browserhack28.h | 20 - .../windows/wx/include/wx/private/fileback.h | 83 - .../windows/wx/include/wx/private/filename.h | 56 - .../windows/wx/include/wx/private/fontmgr.h | 255 - .../windows/wx/include/wx/private/overlay.h | 72 - .../wx/include/wx/private/socketevtdispatch.h | 67 - desmume/src/windows/wx/include/wx/prntbase.h | 665 -- desmume/src/windows/wx/include/wx/process.h | 172 - desmume/src/windows/wx/include/wx/progdlg.h | 36 - desmume/src/windows/wx/include/wx/propdlg.h | 19 - .../src/windows/wx/include/wx/protocol/file.h | 37 - .../src/windows/wx/include/wx/protocol/ftp.h | 182 - .../src/windows/wx/include/wx/protocol/http.h | 91 - .../windows/wx/include/wx/protocol/protocol.h | 131 - desmume/src/windows/wx/include/wx/ptr_scpd.h | 222 - desmume/src/windows/wx/include/wx/quantize.h | 76 - desmume/src/windows/wx/include/wx/radiobox.h | 181 - desmume/src/windows/wx/include/wx/radiobut.h | 61 - desmume/src/windows/wx/include/wx/rawbmp.h | 713 -- desmume/src/windows/wx/include/wx/recguard.h | 53 - desmume/src/windows/wx/include/wx/regex.h | 166 - desmume/src/windows/wx/include/wx/region.h | 300 - desmume/src/windows/wx/include/wx/renderer.h | 436 - .../wx/include/wx/richtext/richtextbuffer.h | 2398 ----- .../include/wx/richtext/richtextbulletspage.h | 217 - .../wx/include/wx/richtext/richtextctrl.h | 978 -- .../wx/include/wx/richtext/richtextfontpage.h | 164 - .../include/wx/richtext/richtextformatdlg.h | 327 - .../wx/include/wx/richtext/richtexthtml.h | 145 - .../include/wx/richtext/richtextindentspage.h | 165 - .../wx/richtext/richtextliststylepage.h | 276 - .../wx/include/wx/richtext/richtextprint.h | 247 - .../wx/include/wx/richtext/richtextstyledlg.h | 241 - .../include/wx/richtext/richtextstylepage.h | 91 - .../wx/include/wx/richtext/richtextstyles.h | 683 -- .../include/wx/richtext/richtextsymboldlg.h | 370 - .../wx/include/wx/richtext/richtexttabspage.h | 129 - .../wx/include/wx/richtext/richtextxml.h | 79 - desmume/src/windows/wx/include/wx/sashwin.h | 18 - desmume/src/windows/wx/include/wx/sckaddr.h | 193 - desmume/src/windows/wx/include/wx/sckipc.h | 150 - desmume/src/windows/wx/include/wx/sckstrm.h | 72 - .../src/windows/wx/include/wx/scopeguard.h | 373 - desmume/src/windows/wx/include/wx/scrolbar.h | 80 - desmume/src/windows/wx/include/wx/scrolwin.h | 314 - desmume/src/windows/wx/include/wx/selstore.h | 104 - desmume/src/windows/wx/include/wx/settings.h | 213 - desmume/src/windows/wx/include/wx/setup.h | 1349 --- desmume/src/windows/wx/include/wx/setup_inc.h | 1198 --- .../windows/wx/include/wx/setup_redirect.h | 18 - desmume/src/windows/wx/include/wx/sizer.h | 1092 --- desmume/src/windows/wx/include/wx/slider.h | 151 - desmume/src/windows/wx/include/wx/snglinst.h | 65 - desmume/src/windows/wx/include/wx/socket.h | 335 - desmume/src/windows/wx/include/wx/sound.h | 98 - desmume/src/windows/wx/include/wx/spinbutt.h | 129 - desmume/src/windows/wx/include/wx/spinctrl.h | 83 - desmume/src/windows/wx/include/wx/splash.h | 18 - desmume/src/windows/wx/include/wx/splitter.h | 47 - desmume/src/windows/wx/include/wx/srchctrl.h | 91 - desmume/src/windows/wx/include/wx/sstream.h | 103 - desmume/src/windows/wx/include/wx/stack.h | 44 - desmume/src/windows/wx/include/wx/stackwalk.h | 156 - desmume/src/windows/wx/include/wx/statbmp.h | 74 - desmume/src/windows/wx/include/wx/statbox.h | 74 - desmume/src/windows/wx/include/wx/statline.h | 103 - desmume/src/windows/wx/include/wx/stattext.h | 69 - desmume/src/windows/wx/include/wx/statusbr.h | 174 - desmume/src/windows/wx/include/wx/stdpaths.h | 179 - desmume/src/windows/wx/include/wx/stockitem.h | 73 - desmume/src/windows/wx/include/wx/stopwatch.h | 102 - desmume/src/windows/wx/include/wx/strconv.h | 553 -- desmume/src/windows/wx/include/wx/stream.h | 609 -- desmume/src/windows/wx/include/wx/string.h | 1653 ---- desmume/src/windows/wx/include/wx/sysopt.h | 71 - desmume/src/windows/wx/include/wx/tab.h | 22 - desmume/src/windows/wx/include/wx/tabctrl.h | 34 - desmume/src/windows/wx/include/wx/tarstrm.h | 352 - desmume/src/windows/wx/include/wx/taskbar.h | 124 - desmume/src/windows/wx/include/wx/tbarbase.h | 607 -- desmume/src/windows/wx/include/wx/textbuf.h | 208 - desmume/src/windows/wx/include/wx/textctrl.h | 601 -- desmume/src/windows/wx/include/wx/textdlg.h | 23 - desmume/src/windows/wx/include/wx/textfile.h | 62 - desmume/src/windows/wx/include/wx/tglbtn.h | 51 - desmume/src/windows/wx/include/wx/thread.h | 762 -- desmume/src/windows/wx/include/wx/thrimpl.cpp | 330 - desmume/src/windows/wx/include/wx/timer.h | 201 - desmume/src/windows/wx/include/wx/tipdlg.h | 84 - desmume/src/windows/wx/include/wx/tipwin.h | 98 - desmume/src/windows/wx/include/wx/tokenzr.h | 135 - desmume/src/windows/wx/include/wx/toolbar.h | 93 - desmume/src/windows/wx/include/wx/toolbook.h | 163 - desmume/src/windows/wx/include/wx/tooltip.h | 39 - desmume/src/windows/wx/include/wx/toplevel.h | 375 - desmume/src/windows/wx/include/wx/treebase.h | 426 - desmume/src/windows/wx/include/wx/treebook.h | 283 - desmume/src/windows/wx/include/wx/treectrl.h | 459 - desmume/src/windows/wx/include/wx/txtstrm.h | 160 - desmume/src/windows/wx/include/wx/types.h | 93 - desmume/src/windows/wx/include/wx/univ/app.h | 21 - .../src/windows/wx/include/wx/univ/bmpbuttn.h | 72 - .../src/windows/wx/include/wx/univ/button.h | 139 - .../src/windows/wx/include/wx/univ/checkbox.h | 150 - .../src/windows/wx/include/wx/univ/checklst.h | 114 - .../src/windows/wx/include/wx/univ/chkconf.h | 117 - .../src/windows/wx/include/wx/univ/choice.h | 64 - .../src/windows/wx/include/wx/univ/colschem.h | 103 - .../src/windows/wx/include/wx/univ/combobox.h | 167 - .../src/windows/wx/include/wx/univ/control.h | 102 - .../src/windows/wx/include/wx/univ/dialog.h | 88 - .../src/windows/wx/include/wx/univ/frame.h | 92 - .../src/windows/wx/include/wx/univ/gauge.h | 75 - .../src/windows/wx/include/wx/univ/inpcons.h | 153 - .../src/windows/wx/include/wx/univ/inphand.h | 116 - .../src/windows/wx/include/wx/univ/listbox.h | 300 - desmume/src/windows/wx/include/wx/univ/menu.h | 282 - .../src/windows/wx/include/wx/univ/menuitem.h | 135 - .../src/windows/wx/include/wx/univ/notebook.h | 257 - .../src/windows/wx/include/wx/univ/radiobox.h | 151 - .../src/windows/wx/include/wx/univ/radiobut.h | 76 - .../src/windows/wx/include/wx/univ/renderer.h | 932 -- .../src/windows/wx/include/wx/univ/scrarrow.h | 112 - .../src/windows/wx/include/wx/univ/scrolbar.h | 283 - .../src/windows/wx/include/wx/univ/scrthumb.h | 140 - .../src/windows/wx/include/wx/univ/scrtimer.h | 51 - .../src/windows/wx/include/wx/univ/setup.h | 1332 --- .../src/windows/wx/include/wx/univ/setup0.h | 1328 --- .../src/windows/wx/include/wx/univ/slider.h | 226 - .../src/windows/wx/include/wx/univ/spinbutt.h | 122 - .../src/windows/wx/include/wx/univ/statbmp.h | 74 - .../src/windows/wx/include/wx/univ/statbox.h | 65 - .../src/windows/wx/include/wx/univ/statline.h | 56 - .../src/windows/wx/include/wx/univ/stattext.h | 66 - .../src/windows/wx/include/wx/univ/statusbr.h | 110 - .../src/windows/wx/include/wx/univ/stdrend.h | 352 - .../src/windows/wx/include/wx/univ/textctrl.h | 534 -- .../src/windows/wx/include/wx/univ/tglbtn.h | 70 - .../src/windows/wx/include/wx/univ/theme.h | 202 - .../src/windows/wx/include/wx/univ/toolbar.h | 138 - .../src/windows/wx/include/wx/univ/toplevel.h | 197 - .../src/windows/wx/include/wx/univ/window.h | 287 - .../src/windows/wx/include/wx/unix/apptbase.h | 54 - .../src/windows/wx/include/wx/unix/apptrait.h | 55 - .../src/windows/wx/include/wx/unix/execute.h | 79 - .../src/windows/wx/include/wx/unix/fontutil.h | 37 - .../src/windows/wx/include/wx/unix/gsockunx.h | 145 - .../src/windows/wx/include/wx/unix/joystick.h | 95 - .../src/windows/wx/include/wx/unix/mimetype.h | 215 - desmume/src/windows/wx/include/wx/unix/pipe.h | 114 - .../src/windows/wx/include/wx/unix/private.h | 47 - .../src/windows/wx/include/wx/unix/sound.h | 161 - .../windows/wx/include/wx/unix/stackwalk.h | 97 - .../src/windows/wx/include/wx/unix/stdpaths.h | 56 - .../windows/wx/include/wx/unix/taskbarx11.h | 46 - .../src/windows/wx/include/wx/unix/utilsx11.h | 53 - desmume/src/windows/wx/include/wx/uri.h | 151 - desmume/src/windows/wx/include/wx/url.h | 129 - desmume/src/windows/wx/include/wx/utils.h | 741 -- desmume/src/windows/wx/include/wx/valgen.h | 69 - desmume/src/windows/wx/include/wx/validate.h | 98 - desmume/src/windows/wx/include/wx/valtext.h | 122 - desmume/src/windows/wx/include/wx/variant.h | 423 - desmume/src/windows/wx/include/wx/vector.h | 212 - desmume/src/windows/wx/include/wx/version.h | 91 - desmume/src/windows/wx/include/wx/vidmode.h | 73 - desmume/src/windows/wx/include/wx/vlbox.h | 296 - desmume/src/windows/wx/include/wx/vms_x_fix.h | 1213 --- desmume/src/windows/wx/include/wx/volume.h | 146 - desmume/src/windows/wx/include/wx/vscroll.h | 223 - desmume/src/windows/wx/include/wx/wave.h | 36 - desmume/src/windows/wx/include/wx/wfstream.h | 204 - desmume/src/windows/wx/include/wx/window.h | 1671 ---- desmume/src/windows/wx/include/wx/wizard.h | 317 - desmume/src/windows/wx/include/wx/wupdlock.h | 37 - desmume/src/windows/wx/include/wx/wx.h | 105 - desmume/src/windows/wx/include/wx/wx_cw.h | 65 - desmume/src/windows/wx/include/wx/wx_cw_cm.h | 88 - desmume/src/windows/wx/include/wx/wx_cw_d.h | 46 - desmume/src/windows/wx/include/wx/wx_cwc.h | 49 - desmume/src/windows/wx/include/wx/wx_cwc_d.h | 38 - .../src/windows/wx/include/wx/wx_cwcocoa.h | 66 - .../src/windows/wx/include/wx/wx_cwcocoa_cm.h | 85 - .../src/windows/wx/include/wx/wx_cwcocoa_d.h | 47 - desmume/src/windows/wx/include/wx/wx_cwu_d.h | 46 - desmume/src/windows/wx/include/wx/wxchar.h | 1393 --- desmume/src/windows/wx/include/wx/wxhtml.h | 22 - desmume/src/windows/wx/include/wx/wxprec.h | 70 - desmume/src/windows/wx/include/wx/wxshlb_cw.h | 65 - .../src/windows/wx/include/wx/wxshlb_cw_d.h | 46 - .../src/windows/wx/include/wx/wxshlb_cwc.h | 45 - .../src/windows/wx/include/wx/wxshlb_cwc_d.h | 38 - .../src/windows/wx/include/wx/wxshlba_cw.h | 65 - .../src/windows/wx/include/wx/wxshlba_cw_d.h | 46 - .../src/windows/wx/include/wx/wxshlba_cwc.h | 45 - .../src/windows/wx/include/wx/wxshlba_cwc_d.h | 38 - desmume/src/windows/wx/include/wx/xml/xml.h | 252 - desmume/src/windows/wx/include/wx/xpmdecod.h | 47 - desmume/src/windows/wx/include/wx/xpmhand.h | 25 - .../src/windows/wx/include/wx/xrc/xh_all.h | 74 - .../windows/wx/include/wx/xrc/xh_animatctrl.h | 30 - .../src/windows/wx/include/wx/xrc/xh_bmp.h | 40 - .../src/windows/wx/include/wx/xrc/xh_bmpbt.h | 30 - .../windows/wx/include/wx/xrc/xh_bmpcbox.h | 36 - .../src/windows/wx/include/wx/xrc/xh_bttn.h | 30 - .../src/windows/wx/include/wx/xrc/xh_cald.h | 30 - .../src/windows/wx/include/wx/xrc/xh_chckb.h | 31 - .../src/windows/wx/include/wx/xrc/xh_chckl.h | 34 - .../src/windows/wx/include/wx/xrc/xh_choic.h | 34 - .../windows/wx/include/wx/xrc/xh_choicbk.h | 34 - .../windows/wx/include/wx/xrc/xh_clrpicker.h | 30 - .../windows/wx/include/wx/xrc/xh_collpane.h | 36 - .../src/windows/wx/include/wx/xrc/xh_combo.h | 34 - .../windows/wx/include/wx/xrc/xh_datectrl.h | 30 - .../windows/wx/include/wx/xrc/xh_dirpicker.h | 30 - .../src/windows/wx/include/wx/xrc/xh_dlg.h | 30 - .../windows/wx/include/wx/xrc/xh_filepicker.h | 30 - .../windows/wx/include/wx/xrc/xh_fontpicker.h | 30 - .../src/windows/wx/include/wx/xrc/xh_frame.h | 30 - .../src/windows/wx/include/wx/xrc/xh_gauge.h | 34 - .../src/windows/wx/include/wx/xrc/xh_gdctl.h | 30 - .../src/windows/wx/include/wx/xrc/xh_grid.h | 31 - .../src/windows/wx/include/wx/xrc/xh_html.h | 30 - .../windows/wx/include/wx/xrc/xh_htmllbox.h | 34 - .../windows/wx/include/wx/xrc/xh_hyperlink.h | 37 - .../src/windows/wx/include/wx/xrc/xh_listb.h | 34 - .../src/windows/wx/include/wx/xrc/xh_listbk.h | 34 - .../src/windows/wx/include/wx/xrc/xh_listc.h | 30 - .../src/windows/wx/include/wx/xrc/xh_mdi.h | 35 - .../src/windows/wx/include/wx/xrc/xh_menu.h | 43 - .../src/windows/wx/include/wx/xrc/xh_notbk.h | 35 - .../windows/wx/include/wx/xrc/xh_odcombo.h | 35 - .../src/windows/wx/include/wx/xrc/xh_panel.h | 30 - .../windows/wx/include/wx/xrc/xh_propdlg.h | 38 - .../src/windows/wx/include/wx/xrc/xh_radbt.h | 30 - .../src/windows/wx/include/wx/xrc/xh_radbx.h | 43 - .../windows/wx/include/wx/xrc/xh_richtext.h | 30 - .../src/windows/wx/include/wx/xrc/xh_scrol.h | 36 - .../src/windows/wx/include/wx/xrc/xh_scwin.h | 30 - .../src/windows/wx/include/wx/xrc/xh_sizer.h | 80 - .../src/windows/wx/include/wx/xrc/xh_slidr.h | 36 - .../src/windows/wx/include/wx/xrc/xh_spin.h | 61 - .../src/windows/wx/include/wx/xrc/xh_split.h | 30 - .../windows/wx/include/wx/xrc/xh_statbar.h | 30 - .../src/windows/wx/include/wx/xrc/xh_stbmp.h | 30 - .../src/windows/wx/include/wx/xrc/xh_stbox.h | 30 - .../src/windows/wx/include/wx/xrc/xh_stlin.h | 30 - .../src/windows/wx/include/wx/xrc/xh_sttxt.h | 30 - .../src/windows/wx/include/wx/xrc/xh_text.h | 30 - .../src/windows/wx/include/wx/xrc/xh_tglbtn.h | 30 - .../src/windows/wx/include/wx/xrc/xh_toolb.h | 36 - .../src/windows/wx/include/wx/xrc/xh_tree.h | 30 - .../src/windows/wx/include/wx/xrc/xh_treebk.h | 83 - .../src/windows/wx/include/wx/xrc/xh_unkwn.h | 30 - .../src/windows/wx/include/wx/xrc/xh_wizrd.h | 37 - .../src/windows/wx/include/wx/xrc/xmlres.h | 528 - desmume/src/windows/wx/include/wx/xti.h | 2102 ---- desmume/src/windows/wx/include/wx/xtistrm.h | 429 - desmume/src/windows/wx/include/wx/xtixml.h | 106 - desmume/src/windows/wx/include/wx/zipstrm.h | 574 -- desmume/src/windows/wx/include/wx/zstream.h | 146 - .../src/windows/wx/wx-2.8.10_from_tastools | 0 desmume/src/windows/wx/wx.7z | Bin 10571634 -> 0 bytes desmume/src/wx/wxMain.cpp | 44 +- desmume/src/xbox/Desmume360.cpp | 954 -- desmume/src/xbox/Desmume360.sln | 32 - desmume/src/xbox/Desmume360.vcproj | 869 -- desmume/src/xbox/ZLIB/ADLER32.C | 48 - desmume/src/xbox/ZLIB/COMPRESS.C | 68 - desmume/src/xbox/ZLIB/CRC32.C | 162 - desmume/src/xbox/ZLIB/DEFLATE.C | 1350 --- desmume/src/xbox/ZLIB/DEFLATE.H | 318 - desmume/src/xbox/ZLIB/GZIO.C | 875 -- desmume/src/xbox/ZLIB/INFBLOCK.C | 398 - desmume/src/xbox/ZLIB/INFBLOCK.H | 39 - desmume/src/xbox/ZLIB/INFCODES.C | 257 - desmume/src/xbox/ZLIB/INFCODES.H | 27 - desmume/src/xbox/ZLIB/INFFAST.C | 170 - desmume/src/xbox/ZLIB/INFFAST.H | 17 - desmume/src/xbox/ZLIB/INFFIXED.H | 151 - desmume/src/xbox/ZLIB/INFLATE.C | 366 - desmume/src/xbox/ZLIB/INFTREES.C | 455 - desmume/src/xbox/ZLIB/INFTREES.H | 58 - desmume/src/xbox/ZLIB/INFUTIL.C | 87 - desmume/src/xbox/ZLIB/INFUTIL.H | 98 - desmume/src/xbox/ZLIB/TREES.C | 1214 --- desmume/src/xbox/ZLIB/TREES.H | 128 - desmume/src/xbox/ZLIB/UNCOMPR.C | 58 - desmume/src/xbox/ZLIB/ZCONF.H | 275 - desmume/src/xbox/ZLIB/ZLIB.H | 893 -- desmume/src/xbox/ZLIB/ZUTIL.C | 225 - desmume/src/xbox/ZLIB/ZUTIL.H | 220 - desmume/src/xbox/ctrls360.h | 80 - 783 files changed, 5486 insertions(+), 164455 deletions(-) delete mode 100644 desmume/src/windows/wx/include/msvc/wx/setup.h delete mode 100644 desmume/src/windows/wx/include/wx/aboutdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/accel.h delete mode 100644 desmume/src/windows/wx/include/wx/access.h delete mode 100644 desmume/src/windows/wx/include/wx/afterstd.h delete mode 100644 desmume/src/windows/wx/include/wx/anidecod.h delete mode 100644 desmume/src/windows/wx/include/wx/animate.h delete mode 100644 desmume/src/windows/wx/include/wx/animdecod.h delete mode 100644 desmume/src/windows/wx/include/wx/app.h delete mode 100644 desmume/src/windows/wx/include/wx/apptrait.h delete mode 100644 desmume/src/windows/wx/include/wx/archive.h delete mode 100644 desmume/src/windows/wx/include/wx/arrimpl.cpp delete mode 100644 desmume/src/windows/wx/include/wx/arrstr.h delete mode 100644 desmume/src/windows/wx/include/wx/artprov.h delete mode 100644 desmume/src/windows/wx/include/wx/aui/aui.h delete mode 100644 desmume/src/windows/wx/include/wx/aui/auibar.h delete mode 100644 desmume/src/windows/wx/include/wx/aui/auibook.h delete mode 100644 desmume/src/windows/wx/include/wx/aui/dockart.h delete mode 100644 desmume/src/windows/wx/include/wx/aui/floatpane.h delete mode 100644 desmume/src/windows/wx/include/wx/aui/framemanager.h delete mode 100644 desmume/src/windows/wx/include/wx/aui/tabmdi.h delete mode 100644 desmume/src/windows/wx/include/wx/beforestd.h delete mode 100644 desmume/src/windows/wx/include/wx/bitmap.h delete mode 100644 desmume/src/windows/wx/include/wx/bmpbuttn.h delete mode 100644 desmume/src/windows/wx/include/wx/bmpcbox.h delete mode 100644 desmume/src/windows/wx/include/wx/bookctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/brush.h delete mode 100644 desmume/src/windows/wx/include/wx/buffer.h delete mode 100644 desmume/src/windows/wx/include/wx/build.h delete mode 100644 desmume/src/windows/wx/include/wx/busyinfo.h delete mode 100644 desmume/src/windows/wx/include/wx/button.h delete mode 100644 desmume/src/windows/wx/include/wx/calctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/caret.h delete mode 100644 desmume/src/windows/wx/include/wx/checkbox.h delete mode 100644 desmume/src/windows/wx/include/wx/checklst.h delete mode 100644 desmume/src/windows/wx/include/wx/chkconf.h delete mode 100644 desmume/src/windows/wx/include/wx/choicdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/choice.h delete mode 100644 desmume/src/windows/wx/include/wx/choicebk.h delete mode 100644 desmume/src/windows/wx/include/wx/clipbrd.h delete mode 100644 desmume/src/windows/wx/include/wx/clntdata.h delete mode 100644 desmume/src/windows/wx/include/wx/clrpicker.h delete mode 100644 desmume/src/windows/wx/include/wx/cmdline.h delete mode 100644 desmume/src/windows/wx/include/wx/cmdproc.h delete mode 100644 desmume/src/windows/wx/include/wx/cmndata.h delete mode 100644 desmume/src/windows/wx/include/wx/collpane.h delete mode 100644 desmume/src/windows/wx/include/wx/colordlg.h delete mode 100644 desmume/src/windows/wx/include/wx/colour.h delete mode 100644 desmume/src/windows/wx/include/wx/combo.h delete mode 100644 desmume/src/windows/wx/include/wx/combobox.h delete mode 100644 desmume/src/windows/wx/include/wx/confbase.h delete mode 100644 desmume/src/windows/wx/include/wx/config.h delete mode 100644 desmume/src/windows/wx/include/wx/containr.h delete mode 100644 desmume/src/windows/wx/include/wx/control.h delete mode 100644 desmume/src/windows/wx/include/wx/convauto.h delete mode 100644 desmume/src/windows/wx/include/wx/cpp.h delete mode 100644 desmume/src/windows/wx/include/wx/cppunit.h delete mode 100644 desmume/src/windows/wx/include/wx/cshelp.h delete mode 100644 desmume/src/windows/wx/include/wx/ctrlsub.h delete mode 100644 desmume/src/windows/wx/include/wx/cursor.h delete mode 100644 desmume/src/windows/wx/include/wx/dataobj.h delete mode 100644 desmume/src/windows/wx/include/wx/dataview.h delete mode 100644 desmume/src/windows/wx/include/wx/datectrl.h delete mode 100644 desmume/src/windows/wx/include/wx/dateevt.h delete mode 100644 desmume/src/windows/wx/include/wx/datetime.h delete mode 100644 desmume/src/windows/wx/include/wx/datstrm.h delete mode 100644 desmume/src/windows/wx/include/wx/db.h delete mode 100644 desmume/src/windows/wx/include/wx/dbgrid.h delete mode 100644 desmume/src/windows/wx/include/wx/dbkeyg.h delete mode 100644 desmume/src/windows/wx/include/wx/dbtable.h delete mode 100644 desmume/src/windows/wx/include/wx/dc.h delete mode 100644 desmume/src/windows/wx/include/wx/dcbuffer.h delete mode 100644 desmume/src/windows/wx/include/wx/dcclient.h delete mode 100644 desmume/src/windows/wx/include/wx/dcgraph.h delete mode 100644 desmume/src/windows/wx/include/wx/dcmemory.h delete mode 100644 desmume/src/windows/wx/include/wx/dcmirror.h delete mode 100644 desmume/src/windows/wx/include/wx/dcprint.h delete mode 100644 desmume/src/windows/wx/include/wx/dcps.h delete mode 100644 desmume/src/windows/wx/include/wx/dcscreen.h delete mode 100644 desmume/src/windows/wx/include/wx/dde.h delete mode 100644 desmume/src/windows/wx/include/wx/debug.h delete mode 100644 desmume/src/windows/wx/include/wx/debugrpt.h delete mode 100644 desmume/src/windows/wx/include/wx/defs.h delete mode 100644 desmume/src/windows/wx/include/wx/dialog.h delete mode 100644 desmume/src/windows/wx/include/wx/dialup.h delete mode 100644 desmume/src/windows/wx/include/wx/dir.h delete mode 100644 desmume/src/windows/wx/include/wx/dirctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/dirdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/display.h delete mode 100644 desmume/src/windows/wx/include/wx/display_impl.h delete mode 100644 desmume/src/windows/wx/include/wx/dlimpexp.h delete mode 100644 desmume/src/windows/wx/include/wx/dnd.h delete mode 100644 desmume/src/windows/wx/include/wx/docmdi.h delete mode 100644 desmume/src/windows/wx/include/wx/docview.h delete mode 100644 desmume/src/windows/wx/include/wx/dragimag.h delete mode 100644 desmume/src/windows/wx/include/wx/dynarray.h delete mode 100644 desmume/src/windows/wx/include/wx/dynlib.h delete mode 100644 desmume/src/windows/wx/include/wx/dynload.h delete mode 100644 desmume/src/windows/wx/include/wx/effects.h delete mode 100644 desmume/src/windows/wx/include/wx/encconv.h delete mode 100644 desmume/src/windows/wx/include/wx/encinfo.h delete mode 100644 desmume/src/windows/wx/include/wx/event.h delete mode 100644 desmume/src/windows/wx/include/wx/evtloop.h delete mode 100644 desmume/src/windows/wx/include/wx/except.h delete mode 100644 desmume/src/windows/wx/include/wx/fdrepdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/features.h delete mode 100644 desmume/src/windows/wx/include/wx/ffile.h delete mode 100644 desmume/src/windows/wx/include/wx/file.h delete mode 100644 desmume/src/windows/wx/include/wx/fileconf.h delete mode 100644 desmume/src/windows/wx/include/wx/filedlg.h delete mode 100644 desmume/src/windows/wx/include/wx/filefn.h delete mode 100644 desmume/src/windows/wx/include/wx/filename.h delete mode 100644 desmume/src/windows/wx/include/wx/filepicker.h delete mode 100644 desmume/src/windows/wx/include/wx/filesys.h delete mode 100644 desmume/src/windows/wx/include/wx/flags.h delete mode 100644 desmume/src/windows/wx/include/wx/fmappriv.h delete mode 100644 desmume/src/windows/wx/include/wx/font.h delete mode 100644 desmume/src/windows/wx/include/wx/fontdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/fontenc.h delete mode 100644 desmume/src/windows/wx/include/wx/fontenum.h delete mode 100644 desmume/src/windows/wx/include/wx/fontmap.h delete mode 100644 desmume/src/windows/wx/include/wx/fontpicker.h delete mode 100644 desmume/src/windows/wx/include/wx/fontutil.h delete mode 100644 desmume/src/windows/wx/include/wx/frame.h delete mode 100644 desmume/src/windows/wx/include/wx/fs_arc.h delete mode 100644 desmume/src/windows/wx/include/wx/fs_filter.h delete mode 100644 desmume/src/windows/wx/include/wx/fs_inet.h delete mode 100644 desmume/src/windows/wx/include/wx/fs_mem.h delete mode 100644 desmume/src/windows/wx/include/wx/fs_zip.h delete mode 100644 desmume/src/windows/wx/include/wx/gauge.h delete mode 100644 desmume/src/windows/wx/include/wx/gbsizer.h delete mode 100644 desmume/src/windows/wx/include/wx/gdicmn.h delete mode 100644 desmume/src/windows/wx/include/wx/gdiobj.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/aboutdlgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/accel.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/animate.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/bmpcbox.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/busyinfo.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/buttonbar.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/calctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/caret.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/choicdgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/clrpickerg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/collpaneg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/colour.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/colrdlgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/combo.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/dataview.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/datectrl.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/dcpsg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/dirctrlg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/dirdlgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/dragimgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/fdrepdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/filedlgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/filepickerg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/fontdlgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/fontpickerg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/grid.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/gridctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/gridsel.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/helpext.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/icon.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/imaglist.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/laywin.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/listctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/logg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/mask.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/mdig.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/msgdlgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/notebook.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/numdlgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/paletteg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/panelg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/printps.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/prntdlgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/progdlgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/propdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/region.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/sashwin.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/scrolwin.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/spinctlg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/splash.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/splitter.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/srchctlg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/statline.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/statusbr.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/tabg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/textdlgg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/timer.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/treectlg.h delete mode 100644 desmume/src/windows/wx/include/wx/generic/wizard.h delete mode 100644 desmume/src/windows/wx/include/wx/geometry.h delete mode 100644 desmume/src/windows/wx/include/wx/gifdecod.h delete mode 100644 desmume/src/windows/wx/include/wx/glcanvas.h delete mode 100644 desmume/src/windows/wx/include/wx/graphics.h delete mode 100644 desmume/src/windows/wx/include/wx/grid.h delete mode 100644 desmume/src/windows/wx/include/wx/gsocket.h delete mode 100644 desmume/src/windows/wx/include/wx/hash.h delete mode 100644 desmume/src/windows/wx/include/wx/hashmap.h delete mode 100644 desmume/src/windows/wx/include/wx/hashset.h delete mode 100644 desmume/src/windows/wx/include/wx/help.h delete mode 100644 desmume/src/windows/wx/include/wx/helpbase.h delete mode 100644 desmume/src/windows/wx/include/wx/helphtml.h delete mode 100644 desmume/src/windows/wx/include/wx/helpwin.h delete mode 100644 desmume/src/windows/wx/include/wx/html/forcelnk.h delete mode 100644 desmume/src/windows/wx/include/wx/html/helpctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/html/helpdata.h delete mode 100644 desmume/src/windows/wx/include/wx/html/helpdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/html/helpfrm.h delete mode 100644 desmume/src/windows/wx/include/wx/html/helpwnd.h delete mode 100644 desmume/src/windows/wx/include/wx/html/htmlcell.h delete mode 100644 desmume/src/windows/wx/include/wx/html/htmldefs.h delete mode 100644 desmume/src/windows/wx/include/wx/html/htmlfilt.h delete mode 100644 desmume/src/windows/wx/include/wx/html/htmlpars.h delete mode 100644 desmume/src/windows/wx/include/wx/html/htmlproc.h delete mode 100644 desmume/src/windows/wx/include/wx/html/htmltag.h delete mode 100644 desmume/src/windows/wx/include/wx/html/htmlwin.h delete mode 100644 desmume/src/windows/wx/include/wx/html/htmprint.h delete mode 100644 desmume/src/windows/wx/include/wx/html/m_templ.h delete mode 100644 desmume/src/windows/wx/include/wx/html/webkit.h delete mode 100644 desmume/src/windows/wx/include/wx/html/winpars.h delete mode 100644 desmume/src/windows/wx/include/wx/htmllbox.h delete mode 100644 desmume/src/windows/wx/include/wx/hyperlink.h delete mode 100644 desmume/src/windows/wx/include/wx/icon.h delete mode 100644 desmume/src/windows/wx/include/wx/iconbndl.h delete mode 100644 desmume/src/windows/wx/include/wx/iconloc.h delete mode 100644 desmume/src/windows/wx/include/wx/imagbmp.h delete mode 100644 desmume/src/windows/wx/include/wx/image.h delete mode 100644 desmume/src/windows/wx/include/wx/imaggif.h delete mode 100644 desmume/src/windows/wx/include/wx/imagiff.h delete mode 100644 desmume/src/windows/wx/include/wx/imagjpeg.h delete mode 100644 desmume/src/windows/wx/include/wx/imaglist.h delete mode 100644 desmume/src/windows/wx/include/wx/imagpcx.h delete mode 100644 desmume/src/windows/wx/include/wx/imagpng.h delete mode 100644 desmume/src/windows/wx/include/wx/imagpnm.h delete mode 100644 desmume/src/windows/wx/include/wx/imagtga.h delete mode 100644 desmume/src/windows/wx/include/wx/imagtiff.h delete mode 100644 desmume/src/windows/wx/include/wx/imagxpm.h delete mode 100644 desmume/src/windows/wx/include/wx/init.h delete mode 100644 desmume/src/windows/wx/include/wx/intl.h delete mode 100644 desmume/src/windows/wx/include/wx/iosfwrap.h delete mode 100644 desmume/src/windows/wx/include/wx/ioswrap.h delete mode 100644 desmume/src/windows/wx/include/wx/ipc.h delete mode 100644 desmume/src/windows/wx/include/wx/ipcbase.h delete mode 100644 desmume/src/windows/wx/include/wx/isql.h delete mode 100644 desmume/src/windows/wx/include/wx/isqlext.h delete mode 100644 desmume/src/windows/wx/include/wx/joystick.h delete mode 100644 desmume/src/windows/wx/include/wx/layout.h delete mode 100644 desmume/src/windows/wx/include/wx/laywin.h delete mode 100644 desmume/src/windows/wx/include/wx/link.h delete mode 100644 desmume/src/windows/wx/include/wx/list.h delete mode 100644 desmume/src/windows/wx/include/wx/listbase.h delete mode 100644 desmume/src/windows/wx/include/wx/listbook.h delete mode 100644 desmume/src/windows/wx/include/wx/listbox.h delete mode 100644 desmume/src/windows/wx/include/wx/listctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/listimpl.cpp delete mode 100644 desmume/src/windows/wx/include/wx/log.h delete mode 100644 desmume/src/windows/wx/include/wx/longlong.h delete mode 100644 desmume/src/windows/wx/include/wx/math.h delete mode 100644 desmume/src/windows/wx/include/wx/matrix.h delete mode 100644 desmume/src/windows/wx/include/wx/mdi.h delete mode 100644 desmume/src/windows/wx/include/wx/mediactrl.h delete mode 100644 desmume/src/windows/wx/include/wx/memconf.h delete mode 100644 desmume/src/windows/wx/include/wx/memory.h delete mode 100644 desmume/src/windows/wx/include/wx/memtext.h delete mode 100644 desmume/src/windows/wx/include/wx/menu.h delete mode 100644 desmume/src/windows/wx/include/wx/menuitem.h delete mode 100644 desmume/src/windows/wx/include/wx/metafile.h delete mode 100644 desmume/src/windows/wx/include/wx/mimetype.h delete mode 100644 desmume/src/windows/wx/include/wx/minifram.h delete mode 100644 desmume/src/windows/wx/include/wx/module.h delete mode 100644 desmume/src/windows/wx/include/wx/msdos/apptrait.h delete mode 100644 desmume/src/windows/wx/include/wx/msdos/mimetype.h delete mode 100644 desmume/src/windows/wx/include/wx/msgdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/msgout.h delete mode 100644 desmume/src/windows/wx/include/wx/mstream.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/accel.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/amd64.manifest delete mode 100644 desmume/src/windows/wx/include/wx/msw/app.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/apptbase.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/apptrait.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/bitmap.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/blank.cur delete mode 100644 desmume/src/windows/wx/include/wx/msw/bmpbuttn.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/brush.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/bullseye.cur delete mode 100644 desmume/src/windows/wx/include/wx/msw/button.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/caret.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/cdrom.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/checkbox.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/checklst.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/child.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/chkconf.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/choice.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/clipbrd.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/colordlg.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/colour.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/colours.bmp delete mode 100644 desmume/src/windows/wx/include/wx/msw/combo.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/combobox.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/computer.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/control.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/crashrpt.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/cross.cur delete mode 100644 desmume/src/windows/wx/include/wx/msw/csquery.bmp delete mode 100644 desmume/src/windows/wx/include/wx/msw/cursor.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/datectrl.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/dc.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/dcclient.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/dcmemory.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/dcprint.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/dcscreen.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/dde.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/debughlp.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/dialog.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/dib.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/dirdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/dragimag.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/drive.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/enhmeta.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/evtloop.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/fdrepdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/file1.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/filedlg.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/floppy.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/folder1.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/folder2.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/font.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/fontdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/fontenum.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/frame.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/gauge95.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/gccpriv.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/gdiimage.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/genrcdefs.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/glcanvas.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/gsockmsw.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/hand.cur delete mode 100644 desmume/src/windows/wx/include/wx/msw/helpbest.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/helpchm.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/helpwin.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/htmlhelp.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/ia64.manifest delete mode 100644 desmume/src/windows/wx/include/wx/msw/icon.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/imaglist.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/iniconf.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/joystick.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/libraries.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/listbox.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/listctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/magnif1.cur delete mode 100644 desmume/src/windows/wx/include/wx/msw/mdi.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/mdi.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/menu.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/menuitem.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/metafile.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/microwin.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/mimetype.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/minifram.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/missing.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/msgdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/mslu.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/msvcrt.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/notebook.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/ole/access.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/ole/activex.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/ole/automtn.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/ole/dataform.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/ole/dataobj.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/ole/dataobj2.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/ole/dropsrc.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/ole/droptgt.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/ole/oleutils.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/ole/uuid.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/palette.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/pbrush.cur delete mode 100644 desmume/src/windows/wx/include/wx/msw/pen.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/pencil.cur delete mode 100644 desmume/src/windows/wx/include/wx/msw/pntleft.cur delete mode 100644 desmume/src/windows/wx/include/wx/msw/pntright.cur delete mode 100644 desmume/src/windows/wx/include/wx/msw/popupwin.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/printdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/printwin.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/private.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/question.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/radiobox.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/radiobut.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/rcdefs.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/regconf.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/region.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/registry.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/removble.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/rightarr.cur delete mode 100644 desmume/src/windows/wx/include/wx/msw/roller.cur delete mode 100644 desmume/src/windows/wx/include/wx/msw/scrolbar.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/seh.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/setup.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/setup0.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/setup_microwin.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/slider95.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/sound.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/spinbutt.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/spinctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/stackwalk.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/statbmp.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/statbox.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/statbr95.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/statline.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/stattext.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/std.ico delete mode 100644 desmume/src/windows/wx/include/wx/msw/stdpaths.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/subwin.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/tabctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/taskbar.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/tbar95.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/textctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/tglbtn.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/timer.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/tooltip.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/toplevel.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/treectrl.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/uxtheme.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/uxthemep.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/checklst.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/chkconf.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/choicece.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/helpwce.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/libraries.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/missing.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/net.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/resources.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/setup.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/smartphone.rc delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/tbarwce.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/textctrlce.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/time.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wince/wince.rc delete mode 100644 desmume/src/windows/wx/include/wx/msw/window.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/winundef.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wrapcctl.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wrapcdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wrapshl.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wrapwin.h delete mode 100644 desmume/src/windows/wx/include/wx/msw/wx.manifest delete mode 100644 desmume/src/windows/wx/include/wx/msw/wx.rc delete mode 100644 desmume/src/windows/wx/include/wx/notebook.h delete mode 100644 desmume/src/windows/wx/include/wx/numdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/object.h delete mode 100644 desmume/src/windows/wx/include/wx/odcombo.h delete mode 100644 desmume/src/windows/wx/include/wx/overlay.h delete mode 100644 desmume/src/windows/wx/include/wx/ownerdrw.h delete mode 100644 desmume/src/windows/wx/include/wx/palette.h delete mode 100644 desmume/src/windows/wx/include/wx/panel.h delete mode 100644 desmume/src/windows/wx/include/wx/paper.h delete mode 100644 desmume/src/windows/wx/include/wx/pen.h delete mode 100644 desmume/src/windows/wx/include/wx/pickerbase.h delete mode 100644 desmume/src/windows/wx/include/wx/platform.h delete mode 100644 desmume/src/windows/wx/include/wx/platinfo.h delete mode 100644 desmume/src/windows/wx/include/wx/popupwin.h delete mode 100644 desmume/src/windows/wx/include/wx/power.h delete mode 100644 desmume/src/windows/wx/include/wx/print.h delete mode 100644 desmume/src/windows/wx/include/wx/printdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/private/browserhack28.h delete mode 100644 desmume/src/windows/wx/include/wx/private/fileback.h delete mode 100644 desmume/src/windows/wx/include/wx/private/filename.h delete mode 100644 desmume/src/windows/wx/include/wx/private/fontmgr.h delete mode 100644 desmume/src/windows/wx/include/wx/private/overlay.h delete mode 100644 desmume/src/windows/wx/include/wx/private/socketevtdispatch.h delete mode 100644 desmume/src/windows/wx/include/wx/prntbase.h delete mode 100644 desmume/src/windows/wx/include/wx/process.h delete mode 100644 desmume/src/windows/wx/include/wx/progdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/propdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/protocol/file.h delete mode 100644 desmume/src/windows/wx/include/wx/protocol/ftp.h delete mode 100644 desmume/src/windows/wx/include/wx/protocol/http.h delete mode 100644 desmume/src/windows/wx/include/wx/protocol/protocol.h delete mode 100644 desmume/src/windows/wx/include/wx/ptr_scpd.h delete mode 100644 desmume/src/windows/wx/include/wx/quantize.h delete mode 100644 desmume/src/windows/wx/include/wx/radiobox.h delete mode 100644 desmume/src/windows/wx/include/wx/radiobut.h delete mode 100644 desmume/src/windows/wx/include/wx/rawbmp.h delete mode 100644 desmume/src/windows/wx/include/wx/recguard.h delete mode 100644 desmume/src/windows/wx/include/wx/regex.h delete mode 100644 desmume/src/windows/wx/include/wx/region.h delete mode 100644 desmume/src/windows/wx/include/wx/renderer.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextbuffer.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextbulletspage.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextfontpage.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextformatdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtexthtml.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextindentspage.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextliststylepage.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextprint.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextstyledlg.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextstylepage.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextstyles.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextsymboldlg.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtexttabspage.h delete mode 100644 desmume/src/windows/wx/include/wx/richtext/richtextxml.h delete mode 100644 desmume/src/windows/wx/include/wx/sashwin.h delete mode 100644 desmume/src/windows/wx/include/wx/sckaddr.h delete mode 100644 desmume/src/windows/wx/include/wx/sckipc.h delete mode 100644 desmume/src/windows/wx/include/wx/sckstrm.h delete mode 100644 desmume/src/windows/wx/include/wx/scopeguard.h delete mode 100644 desmume/src/windows/wx/include/wx/scrolbar.h delete mode 100644 desmume/src/windows/wx/include/wx/scrolwin.h delete mode 100644 desmume/src/windows/wx/include/wx/selstore.h delete mode 100644 desmume/src/windows/wx/include/wx/settings.h delete mode 100644 desmume/src/windows/wx/include/wx/setup.h delete mode 100644 desmume/src/windows/wx/include/wx/setup_inc.h delete mode 100644 desmume/src/windows/wx/include/wx/setup_redirect.h delete mode 100644 desmume/src/windows/wx/include/wx/sizer.h delete mode 100644 desmume/src/windows/wx/include/wx/slider.h delete mode 100644 desmume/src/windows/wx/include/wx/snglinst.h delete mode 100644 desmume/src/windows/wx/include/wx/socket.h delete mode 100644 desmume/src/windows/wx/include/wx/sound.h delete mode 100644 desmume/src/windows/wx/include/wx/spinbutt.h delete mode 100644 desmume/src/windows/wx/include/wx/spinctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/splash.h delete mode 100644 desmume/src/windows/wx/include/wx/splitter.h delete mode 100644 desmume/src/windows/wx/include/wx/srchctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/sstream.h delete mode 100644 desmume/src/windows/wx/include/wx/stack.h delete mode 100644 desmume/src/windows/wx/include/wx/stackwalk.h delete mode 100644 desmume/src/windows/wx/include/wx/statbmp.h delete mode 100644 desmume/src/windows/wx/include/wx/statbox.h delete mode 100644 desmume/src/windows/wx/include/wx/statline.h delete mode 100644 desmume/src/windows/wx/include/wx/stattext.h delete mode 100644 desmume/src/windows/wx/include/wx/statusbr.h delete mode 100644 desmume/src/windows/wx/include/wx/stdpaths.h delete mode 100644 desmume/src/windows/wx/include/wx/stockitem.h delete mode 100644 desmume/src/windows/wx/include/wx/stopwatch.h delete mode 100644 desmume/src/windows/wx/include/wx/strconv.h delete mode 100644 desmume/src/windows/wx/include/wx/stream.h delete mode 100644 desmume/src/windows/wx/include/wx/string.h delete mode 100644 desmume/src/windows/wx/include/wx/sysopt.h delete mode 100644 desmume/src/windows/wx/include/wx/tab.h delete mode 100644 desmume/src/windows/wx/include/wx/tabctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/tarstrm.h delete mode 100644 desmume/src/windows/wx/include/wx/taskbar.h delete mode 100644 desmume/src/windows/wx/include/wx/tbarbase.h delete mode 100644 desmume/src/windows/wx/include/wx/textbuf.h delete mode 100644 desmume/src/windows/wx/include/wx/textctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/textdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/textfile.h delete mode 100644 desmume/src/windows/wx/include/wx/tglbtn.h delete mode 100644 desmume/src/windows/wx/include/wx/thread.h delete mode 100644 desmume/src/windows/wx/include/wx/thrimpl.cpp delete mode 100644 desmume/src/windows/wx/include/wx/timer.h delete mode 100644 desmume/src/windows/wx/include/wx/tipdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/tipwin.h delete mode 100644 desmume/src/windows/wx/include/wx/tokenzr.h delete mode 100644 desmume/src/windows/wx/include/wx/toolbar.h delete mode 100644 desmume/src/windows/wx/include/wx/toolbook.h delete mode 100644 desmume/src/windows/wx/include/wx/tooltip.h delete mode 100644 desmume/src/windows/wx/include/wx/toplevel.h delete mode 100644 desmume/src/windows/wx/include/wx/treebase.h delete mode 100644 desmume/src/windows/wx/include/wx/treebook.h delete mode 100644 desmume/src/windows/wx/include/wx/treectrl.h delete mode 100644 desmume/src/windows/wx/include/wx/txtstrm.h delete mode 100644 desmume/src/windows/wx/include/wx/types.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/app.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/bmpbuttn.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/button.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/checkbox.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/checklst.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/chkconf.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/choice.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/colschem.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/combobox.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/control.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/dialog.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/frame.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/gauge.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/inpcons.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/inphand.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/listbox.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/menu.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/menuitem.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/notebook.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/radiobox.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/radiobut.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/renderer.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/scrarrow.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/scrolbar.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/scrthumb.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/scrtimer.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/setup.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/setup0.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/slider.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/spinbutt.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/statbmp.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/statbox.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/statline.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/stattext.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/statusbr.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/stdrend.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/textctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/tglbtn.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/theme.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/toolbar.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/toplevel.h delete mode 100644 desmume/src/windows/wx/include/wx/univ/window.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/apptbase.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/apptrait.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/execute.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/fontutil.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/gsockunx.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/joystick.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/mimetype.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/pipe.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/private.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/sound.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/stackwalk.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/stdpaths.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/taskbarx11.h delete mode 100644 desmume/src/windows/wx/include/wx/unix/utilsx11.h delete mode 100644 desmume/src/windows/wx/include/wx/uri.h delete mode 100644 desmume/src/windows/wx/include/wx/url.h delete mode 100644 desmume/src/windows/wx/include/wx/utils.h delete mode 100644 desmume/src/windows/wx/include/wx/valgen.h delete mode 100644 desmume/src/windows/wx/include/wx/validate.h delete mode 100644 desmume/src/windows/wx/include/wx/valtext.h delete mode 100644 desmume/src/windows/wx/include/wx/variant.h delete mode 100644 desmume/src/windows/wx/include/wx/vector.h delete mode 100644 desmume/src/windows/wx/include/wx/version.h delete mode 100644 desmume/src/windows/wx/include/wx/vidmode.h delete mode 100644 desmume/src/windows/wx/include/wx/vlbox.h delete mode 100644 desmume/src/windows/wx/include/wx/vms_x_fix.h delete mode 100644 desmume/src/windows/wx/include/wx/volume.h delete mode 100644 desmume/src/windows/wx/include/wx/vscroll.h delete mode 100644 desmume/src/windows/wx/include/wx/wave.h delete mode 100644 desmume/src/windows/wx/include/wx/wfstream.h delete mode 100644 desmume/src/windows/wx/include/wx/window.h delete mode 100644 desmume/src/windows/wx/include/wx/wizard.h delete mode 100644 desmume/src/windows/wx/include/wx/wupdlock.h delete mode 100644 desmume/src/windows/wx/include/wx/wx.h delete mode 100644 desmume/src/windows/wx/include/wx/wx_cw.h delete mode 100644 desmume/src/windows/wx/include/wx/wx_cw_cm.h delete mode 100644 desmume/src/windows/wx/include/wx/wx_cw_d.h delete mode 100644 desmume/src/windows/wx/include/wx/wx_cwc.h delete mode 100644 desmume/src/windows/wx/include/wx/wx_cwc_d.h delete mode 100644 desmume/src/windows/wx/include/wx/wx_cwcocoa.h delete mode 100644 desmume/src/windows/wx/include/wx/wx_cwcocoa_cm.h delete mode 100644 desmume/src/windows/wx/include/wx/wx_cwcocoa_d.h delete mode 100644 desmume/src/windows/wx/include/wx/wx_cwu_d.h delete mode 100644 desmume/src/windows/wx/include/wx/wxchar.h delete mode 100644 desmume/src/windows/wx/include/wx/wxhtml.h delete mode 100644 desmume/src/windows/wx/include/wx/wxprec.h delete mode 100644 desmume/src/windows/wx/include/wx/wxshlb_cw.h delete mode 100644 desmume/src/windows/wx/include/wx/wxshlb_cw_d.h delete mode 100644 desmume/src/windows/wx/include/wx/wxshlb_cwc.h delete mode 100644 desmume/src/windows/wx/include/wx/wxshlb_cwc_d.h delete mode 100644 desmume/src/windows/wx/include/wx/wxshlba_cw.h delete mode 100644 desmume/src/windows/wx/include/wx/wxshlba_cw_d.h delete mode 100644 desmume/src/windows/wx/include/wx/wxshlba_cwc.h delete mode 100644 desmume/src/windows/wx/include/wx/wxshlba_cwc_d.h delete mode 100644 desmume/src/windows/wx/include/wx/xml/xml.h delete mode 100644 desmume/src/windows/wx/include/wx/xpmdecod.h delete mode 100644 desmume/src/windows/wx/include/wx/xpmhand.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_all.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_animatctrl.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_bmp.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_bmpbt.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_bmpcbox.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_bttn.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_cald.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_chckb.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_chckl.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_choic.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_choicbk.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_clrpicker.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_collpane.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_combo.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_datectrl.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_dirpicker.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_dlg.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_filepicker.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_fontpicker.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_frame.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_gauge.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_gdctl.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_grid.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_html.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_htmllbox.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_hyperlink.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_listb.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_listbk.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_listc.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_mdi.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_menu.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_notbk.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_odcombo.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_panel.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_propdlg.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_radbt.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_radbx.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_richtext.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_scrol.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_scwin.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_sizer.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_slidr.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_spin.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_split.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_statbar.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_stbmp.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_stbox.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_stlin.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_sttxt.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_text.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_tglbtn.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_toolb.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_tree.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_treebk.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_unkwn.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xh_wizrd.h delete mode 100644 desmume/src/windows/wx/include/wx/xrc/xmlres.h delete mode 100644 desmume/src/windows/wx/include/wx/xti.h delete mode 100644 desmume/src/windows/wx/include/wx/xtistrm.h delete mode 100644 desmume/src/windows/wx/include/wx/xtixml.h delete mode 100644 desmume/src/windows/wx/include/wx/zipstrm.h delete mode 100644 desmume/src/windows/wx/include/wx/zstream.h delete mode 100644 desmume/src/windows/wx/wx-2.8.10_from_tastools delete mode 100644 desmume/src/windows/wx/wx.7z delete mode 100644 desmume/src/xbox/Desmume360.cpp delete mode 100644 desmume/src/xbox/Desmume360.sln delete mode 100644 desmume/src/xbox/Desmume360.vcproj delete mode 100644 desmume/src/xbox/ZLIB/ADLER32.C delete mode 100644 desmume/src/xbox/ZLIB/COMPRESS.C delete mode 100644 desmume/src/xbox/ZLIB/CRC32.C delete mode 100644 desmume/src/xbox/ZLIB/DEFLATE.C delete mode 100644 desmume/src/xbox/ZLIB/DEFLATE.H delete mode 100644 desmume/src/xbox/ZLIB/GZIO.C delete mode 100644 desmume/src/xbox/ZLIB/INFBLOCK.C delete mode 100644 desmume/src/xbox/ZLIB/INFBLOCK.H delete mode 100644 desmume/src/xbox/ZLIB/INFCODES.C delete mode 100644 desmume/src/xbox/ZLIB/INFCODES.H delete mode 100644 desmume/src/xbox/ZLIB/INFFAST.C delete mode 100644 desmume/src/xbox/ZLIB/INFFAST.H delete mode 100644 desmume/src/xbox/ZLIB/INFFIXED.H delete mode 100644 desmume/src/xbox/ZLIB/INFLATE.C delete mode 100644 desmume/src/xbox/ZLIB/INFTREES.C delete mode 100644 desmume/src/xbox/ZLIB/INFTREES.H delete mode 100644 desmume/src/xbox/ZLIB/INFUTIL.C delete mode 100644 desmume/src/xbox/ZLIB/INFUTIL.H delete mode 100644 desmume/src/xbox/ZLIB/TREES.C delete mode 100644 desmume/src/xbox/ZLIB/TREES.H delete mode 100644 desmume/src/xbox/ZLIB/UNCOMPR.C delete mode 100644 desmume/src/xbox/ZLIB/ZCONF.H delete mode 100644 desmume/src/xbox/ZLIB/ZLIB.H delete mode 100644 desmume/src/xbox/ZLIB/ZUTIL.C delete mode 100644 desmume/src/xbox/ZLIB/ZUTIL.H delete mode 100644 desmume/src/xbox/ctrls360.h diff --git a/desmume/src/Disassembler.cpp b/desmume/src/Disassembler.cpp index 2befc6cfc..039636c50 100644 --- a/desmume/src/Disassembler.cpp +++ b/desmume/src/Disassembler.cpp @@ -3756,7 +3756,7 @@ static char * OP_BL_10(u32 adr, u32 i, char * txt) } -static char * OP_BL_11(u32 adr, u32 i, char * txt) +static char * OP_BL_THUMB(u32 adr, u32 i, char * txt) { sprintf(txt, "BL #%X", (int)(part + ((i&0x7FF)<<1))&0xFFFFFFFC); return txt; diff --git a/desmume/src/GPU.cpp b/desmume/src/GPU.cpp index 395021691..ac7a6a9d6 100644 --- a/desmume/src/GPU.cpp +++ b/desmume/src/GPU.cpp @@ -206,6 +206,7 @@ void GPU_Reset(GPU *g, u8 l) g->core = l; g->BGSize[0][0] = g->BGSize[1][0] = g->BGSize[2][0] = g->BGSize[3][0] = 256; g->BGSize[0][1] = g->BGSize[1][1] = g->BGSize[2][1] = g->BGSize[3][1] = 256; + g->dispOBJ = g->dispBG[0] = g->dispBG[1] = g->dispBG[2] = g->dispBG[3] = TRUE; g->spriteRenderMode = GPU::SPRITE_1D; @@ -246,11 +247,11 @@ static void GPU_resortBGs(GPU *gpu) #define OP ^ ! // if we untick boxes, layers become invisible //#define OP && - gpu->LayersEnable[0] = CommonSettings.dispLayers[gpu->core][0] OP(cnt->BG0_Enable/* && !(cnt->BG0_3D && (gpu->core==0))*/); - gpu->LayersEnable[1] = CommonSettings.dispLayers[gpu->core][1] OP(cnt->BG1_Enable); - gpu->LayersEnable[2] = CommonSettings.dispLayers[gpu->core][2] OP(cnt->BG2_Enable); - gpu->LayersEnable[3] = CommonSettings.dispLayers[gpu->core][3] OP(cnt->BG3_Enable); - gpu->LayersEnable[4] = CommonSettings.dispLayers[gpu->core][4] OP(cnt->OBJ_Enable); + gpu->LayersEnable[0] = gpu->dispBG[0] OP(cnt->BG0_Enable/* && !(cnt->BG0_3D && (gpu->core==0))*/); + gpu->LayersEnable[1] = gpu->dispBG[1] OP(cnt->BG1_Enable); + gpu->LayersEnable[2] = gpu->dispBG[2] OP(cnt->BG2_Enable); + gpu->LayersEnable[3] = gpu->dispBG[3] OP(cnt->BG3_Enable); + gpu->LayersEnable[4] = gpu->dispOBJ OP(cnt->OBJ_Enable); // KISS ! lower priority first, if same then lower num for (i=0;icore][num] = false; + if (num == 4) gpu->dispOBJ = 0; + else gpu->dispBG[num] = 0; GPU_resortBGs(gpu); } void GPU_addBack(GPU * gpu, u8 num) { - CommonSettings.dispLayers[gpu->core][num] = true; + //REG_DISPx_pack_test(gpu); + if (num == 4) gpu->dispOBJ = 1; + else gpu->dispBG[num] = 1; GPU_resortBGs(gpu); } diff --git a/desmume/src/GPU.h b/desmume/src/GPU.h index c3da7f448..018661464 100644 --- a/desmume/src/GPU.h +++ b/desmume/src/GPU.h @@ -691,6 +691,9 @@ struct GPU //FIFO fifo; + BOOL dispBG[4]; + BOOL dispOBJ; + u8 bgPrio[5]; BOOL bg0HasHighestPrio; diff --git a/desmume/src/NDSSystem.cpp b/desmume/src/NDSSystem.cpp index 179a87355..117298f3e 100644 --- a/desmume/src/NDSSystem.cpp +++ b/desmume/src/NDSSystem.cpp @@ -43,16 +43,6 @@ #include "path.h" -//#define LOG_ARM9 -//#define LOG_ARM7 -bool dolog = true; -//#define LOG_TO_FILE -//#define LOG_TO_FILE_REGS - -//=============================================================== -FILE *fp_dis7 = NULL; -FILE *fp_dis9 = NULL; - PathInfo path; TCommonSettings CommonSettings; @@ -157,21 +147,6 @@ void NDS_DeInit(void) { if (cheatSearch) delete cheatSearch; -#ifdef LOG_ARM7 - if (fp_dis7 != NULL) - { - fclose(fp_dis7); - fp_dis7 = NULL; - } -#endif - -#ifdef LOG_ARM9 - if (fp_dis9 != NULL) - { - fclose(fp_dis9); - fp_dis9 = NULL; - } -#endif } BOOL NDS_SetROM(u8 * rom, u32 mask) @@ -380,8 +355,8 @@ static void loadrom(std::string fname) { int NDS_LoadROM(const char *filename, const char *logicalFilename) { - int type = ROM_NDS; - char buf[MAX_PATH]; + int type = ROM_NDS; + char buf[MAX_PATH]; if (filename == NULL) return -1; @@ -416,7 +391,7 @@ int NDS_LoadROM(const char *filename, const char *logicalFilename) if (gameInfo.romsize < 352) { return -1; } - + //decrypt if necessary.. @@ -1702,6 +1677,10 @@ bool nds_loadstate(EMUFILE* is, int size) return temp; } +//#define LOG_ARM9 +//#define LOG_ARM7 +//bool dolog = false; + FORCEINLINE void arm9log() { #ifdef LOG_ARM9 @@ -1713,34 +1692,18 @@ FORCEINLINE void arm9log() else des_arm_instructions_set[INDEX(NDS_ARM9.instruction)](NDS_ARM9.instruct_adr, NDS_ARM9.instruction, dasmbuf); -#ifdef LOG_TO_FILE - if (!fp_dis9) return; -#ifdef LOG_TO_FILE_REGS - fprintf(fp_dis9, "\t\t;R0:%08X R1:%08X R2:%08X R3:%08X R4:%08X R5:%08X R6:%08X R7:%08X R8:%08X R9:%08X\n\t\t;R10:%08X R11:%08X R12:%08X R13:%08X R14:%08X R15:%08X| next %08X, N:%i Z:%i C:%i V:%i\n", - NDS_ARM9.R[0], NDS_ARM9.R[1], NDS_ARM9.R[2], NDS_ARM9.R[3], NDS_ARM9.R[4], NDS_ARM9.R[5], NDS_ARM9.R[6], NDS_ARM9.R[7], - NDS_ARM9.R[8], NDS_ARM9.R[9], NDS_ARM9.R[10], NDS_ARM9.R[11], NDS_ARM9.R[12], NDS_ARM9.R[13], NDS_ARM9.R[14], NDS_ARM9.R[15], - NDS_ARM9.next_instruction, NDS_ARM9.CPSR.bits.N, NDS_ARM9.CPSR.bits.Z, NDS_ARM9.CPSR.bits.C, NDS_ARM9.CPSR.bits.V); -#endif - fprintf(fp_dis9, "%s %08X\t%08X \t%s\n", NDS_ARM9.CPSR.bits.T?"THUMB":"ARM", NDS_ARM9.instruct_adr, NDS_ARM9.instruction, dasmbuf); - /*if (NDS_ARM9.instruction == 0) - { - dolog = false; - INFO("Disassembler is stopped\n"); - }*/ -#else printf("%05d:%03d %12lld 9:%08X %08X %-30s R00:%08X R01:%08X R02:%08X R03:%08X R04:%08X R05:%08X R06:%08X R07:%08X R08:%08X R09:%08X R10:%08X R11:%08X R12:%08X R13:%08X R14:%08X R15:%08X\n", currFrameCounter, nds.VCount, nds_timer, NDS_ARM9.instruct_adr,NDS_ARM9.instruction, dasmbuf, NDS_ARM9.R[0], NDS_ARM9.R[1], NDS_ARM9.R[2], NDS_ARM9.R[3], NDS_ARM9.R[4], NDS_ARM9.R[5], NDS_ARM9.R[6], NDS_ARM9.R[7], NDS_ARM9.R[8], NDS_ARM9.R[9], NDS_ARM9.R[10], NDS_ARM9.R[11], NDS_ARM9.R[12], NDS_ARM9.R[13], NDS_ARM9.R[14], NDS_ARM9.R[15]); -#endif } #endif } FORCEINLINE void arm7log() { -#ifdef LOG_ARM7 + #ifdef LOG_ARM7 if(dolog) { char dasmbuf[4096]; @@ -1748,29 +1711,14 @@ FORCEINLINE void arm7log() des_thumb_instructions_set[((NDS_ARM7.instruction)>>6)&1023](NDS_ARM7.instruct_adr, NDS_ARM7.instruction, dasmbuf); else des_arm_instructions_set[INDEX(NDS_ARM7.instruction)](NDS_ARM7.instruct_adr, NDS_ARM7.instruction, dasmbuf); -#ifdef LOG_TO_FILE - if (!fp_dis7) return; -#ifdef LOG_TO_FILE_REGS - fprintf(fp_dis7, "\t\t;R0:%08X R1:%08X R2:%08X R3:%08X R4:%08X R5:%08X R6:%08X R7:%08X R8:%08X R9:%08X\n\t\t;R10:%08X R11:%08X R12:%08X R13:%08X R14:%08X R15:%08X| next %08X, N:%i Z:%i C:%i V:%i\n", - NDS_ARM7.R[0], NDS_ARM7.R[1], NDS_ARM7.R[2], NDS_ARM7.R[3], NDS_ARM7.R[4], NDS_ARM7.R[5], NDS_ARM7.R[6], NDS_ARM7.R[7], - NDS_ARM7.R[8], NDS_ARM7.R[9], NDS_ARM7.R[10], NDS_ARM7.R[11], NDS_ARM7.R[12], NDS_ARM7.R[13], NDS_ARM7.R[14], NDS_ARM7.R[15], - NDS_ARM7.next_instruction, NDS_ARM7.CPSR.bits.N, NDS_ARM7.CPSR.bits.Z, NDS_ARM7.CPSR.bits.C, NDS_ARM7.CPSR.bits.V); -#endif - fprintf(fp_dis7, "%s %08X\t%08X \t%s\n", NDS_ARM7.CPSR.bits.T?"THUMB":"ARM", NDS_ARM7.instruct_adr, NDS_ARM7.instruction, dasmbuf); - /*if (NDS_ARM7.instruction == 0) - { - dolog = false; - INFO("Disassembler is stopped\n"); - }*/ -#else + printf("%05d:%03d %12lld 7:%08X %08X %-30s R00:%08X R01:%08X R02:%08X R03:%08X R04:%08X R05:%08X R06:%08X R07:%08X R08:%08X R09:%08X R10:%08X R11:%08X R12:%08X R13:%08X R14:%08X R15:%08X\n", currFrameCounter, nds.VCount, nds_timer, NDS_ARM7.instruct_adr,NDS_ARM7.instruction, dasmbuf, NDS_ARM7.R[0], NDS_ARM7.R[1], NDS_ARM7.R[2], NDS_ARM7.R[3], NDS_ARM7.R[4], NDS_ARM7.R[5], NDS_ARM7.R[6], NDS_ARM7.R[7], NDS_ARM7.R[8], NDS_ARM7.R[9], NDS_ARM7.R[10], NDS_ARM7.R[11], NDS_ARM7.R[12], NDS_ARM7.R[13], NDS_ARM7.R[14], NDS_ARM7.R[15]); -#endif } -#endif + #endif } //these have not been tuned very well yet. @@ -2050,17 +1998,8 @@ void NDS_Reset() TotalLagFrames = 0; } - //spu must reset early on, since it will crash due to keeping a pointer into MMU memory for the sample pointers. yuck! - SPU_Reset(); - - MMU_Reset(); - NDS_ARM7.BIOS_loaded = false; - NDS_ARM9.BIOS_loaded = false; - memset(MMU.ARM7_BIOS, 0, sizeof(MMU.ARM7_BIOS)); - memset(MMU.ARM9_BIOS, 0, sizeof(MMU.ARM9_BIOS)); - //ARM7 BIOS IRQ HANDLER if(CommonSettings.UseExtBIOS == true) inf = fopen(CommonSettings.ARM7BIOS,"rb"); @@ -2069,39 +2008,33 @@ void NDS_Reset() if(inf) { - if (fread(MMU.ARM7_BIOS,1,16384,inf) == 16384) NDS_ARM7.BIOS_loaded = true; + fread(MMU.ARM7_BIOS,1,16384,inf); fclose(inf); - if((CommonSettings.SWIFromBIOS) && (NDS_ARM7.BIOS_loaded)) NDS_ARM7.swi_tab = 0; + if(CommonSettings.SWIFromBIOS == true) NDS_ARM7.swi_tab = 0; else NDS_ARM7.swi_tab = ARM7_swi_tab; if (CommonSettings.PatchSWI3) _MMU_write16(0x00002F08, 0x4770); - INFO("ARM7 BIOS is %s.\n", NDS_ARM7.BIOS_loaded?"loaded":"failed"); + INFO("ARM7 BIOS is loaded.\n"); } else { NDS_ARM7.swi_tab = ARM7_swi_tab; -#if 0 - // TODO - T1WriteLong(MMU.ARM7_BIOS, 0x0000, 0xEAFFFFFE); // loop for Reset !!! - T1WriteLong(MMU.ARM7_BIOS, 0x0004, 0xEAFFFFFE); // loop for Undef instr expection - T1WriteLong(MMU.ARM7_BIOS, 0x0008, 0xEA00009C); // SWI - T1WriteLong(MMU.ARM7_BIOS, 0x000C, 0xEAFFFFFE); // loop for Prefetch Abort - T1WriteLong(MMU.ARM7_BIOS, 0x0010, 0xEAFFFFFE); // loop for Data Abort - T1WriteLong(MMU.ARM7_BIOS, 0x0014, 0x00000000); // Reserved - T1WriteLong(MMU.ARM7_BIOS, 0x001C, 0x00000000); // Fast IRQ -#endif - T1WriteLong(MMU.ARM7_BIOS, 0x0000, 0xE25EF002); - T1WriteLong(MMU.ARM7_BIOS, 0x0018, 0xEA000000); - T1WriteLong(MMU.ARM7_BIOS, 0x0020, 0xE92D500F); - T1WriteLong(MMU.ARM7_BIOS, 0x0024, 0xE3A00301); - T1WriteLong(MMU.ARM7_BIOS, 0x0028, 0xE28FE000); - T1WriteLong(MMU.ARM7_BIOS, 0x002C, 0xE510F004); - T1WriteLong(MMU.ARM7_BIOS, 0x0030, 0xE8BD500F); - T1WriteLong(MMU.ARM7_BIOS, 0x0034, 0xE25EF004); + for (int t = 0; t < 16384; t++) + MMU.ARM7_BIOS[t] = 0xFF; + + T1WriteLong(MMU.ARM7_BIOS,0x00, 0xE25EF002); + T1WriteLong(MMU.ARM7_BIOS,0x04, 0xEAFFFFFE); + T1WriteLong(MMU.ARM7_BIOS,0x18, 0xEA000000); + T1WriteLong(MMU.ARM7_BIOS,0x20, 0xE92D500F); + T1WriteLong(MMU.ARM7_BIOS,0x24, 0xE3A00301); + T1WriteLong(MMU.ARM7_BIOS,0x28, 0xE28FE000); + T1WriteLong(MMU.ARM7_BIOS,0x2C, 0xE510F004); + T1WriteLong(MMU.ARM7_BIOS,0x30, 0xE8BD500F); + T1WriteLong(MMU.ARM7_BIOS,0x34, 0xE25EF004); } //ARM9 BIOS IRQ HANDLER @@ -2109,62 +2042,43 @@ void NDS_Reset() inf = fopen(CommonSettings.ARM9BIOS,"rb"); else inf = NULL; + //memcpy(MMU.ARM9_BIOS + 0x20, gba_header_data_0x04, 156); if(inf) { - if (fread(MMU.ARM9_BIOS,1,4096,inf) == 4096) NDS_ARM9.BIOS_loaded = true; + fread(MMU.ARM9_BIOS,1,4096,inf); fclose(inf); - if((CommonSettings.SWIFromBIOS) && (NDS_ARM9.BIOS_loaded)) NDS_ARM9.swi_tab = 0; + if(CommonSettings.SWIFromBIOS == true) NDS_ARM9.swi_tab = 0; else NDS_ARM9.swi_tab = ARM9_swi_tab; if (CommonSettings.PatchSWI3) _MMU_write16(0xFFFF07CC, 0x4770); - INFO("ARM9 BIOS is %s.\n", NDS_ARM9.BIOS_loaded?"loaded":"failed"); + INFO("ARM9 BIOS is loaded.\n"); } else { NDS_ARM9.swi_tab = ARM9_swi_tab; - T1WriteLong(MMU.ARM9_BIOS, 0x0000, 0xEAFFFFFE); // loop for Reset !!! - T1WriteLong(MMU.ARM9_BIOS, 0x0004, 0xEAFFFFFE); // loop for Undef instr expection - T1WriteLong(MMU.ARM9_BIOS, 0x0008, 0xEA00009C); // SWI - T1WriteLong(MMU.ARM9_BIOS, 0x000C, 0xEAFFFFFE); // loop for Prefetch Abort - T1WriteLong(MMU.ARM9_BIOS, 0x0010, 0xEAFFFFFE); // loop for Data Abort - T1WriteLong(MMU.ARM9_BIOS, 0x0014, 0x00000000); // Reserved - T1WriteLong(MMU.ARM9_BIOS, 0x0018, 0xEA000095); // Normal IRQ - T1WriteLong(MMU.ARM9_BIOS, 0x001C, 0x00000000); // Fast IRQ - for (int t = 0; t < 156; t++) // logo + for (int t = 0; t < 4096; t++) + MMU.ARM9_BIOS[t] = 0xFF; + + _MMU_write32(0xFFFF0018, 0xEA000095); + + for (int t = 0; t < 156; t++) // load logo MMU.ARM9_BIOS[t + 0x20] = logo_data[t]; - T1WriteLong(MMU.ARM9_BIOS, 0x0274, 0xE92D500F); - T1WriteLong(MMU.ARM9_BIOS, 0x0278, 0xEE190F11); - T1WriteLong(MMU.ARM9_BIOS, 0x027C, 0xE1A00620); - T1WriteLong(MMU.ARM9_BIOS, 0x0280, 0xE1A00600); - T1WriteLong(MMU.ARM9_BIOS, 0x0284, 0xE2800C40); - T1WriteLong(MMU.ARM9_BIOS, 0x0288, 0xE28FE000); - T1WriteLong(MMU.ARM9_BIOS, 0x028C, 0xE510F004); - T1WriteLong(MMU.ARM9_BIOS, 0x0290, 0xE8BD500F); - T1WriteLong(MMU.ARM9_BIOS, 0x0294, 0xE25EF004); - } -#ifdef LOG_ARM7 - if (fp_dis7 != NULL) - { - fclose(fp_dis7); - fp_dis7 = NULL; + _MMU_write32(0xFFFF0274, 0xE92D500F); + _MMU_write32(0xFFFF0278, 0xEE190F11); + _MMU_write32(0xFFFF027C, 0xE1A00620); + _MMU_write32(0xFFFF0280, 0xE1A00600); + _MMU_write32(0xFFFF0284, 0xE2800C40); + _MMU_write32(0xFFFF0288, 0xE28FE000); + _MMU_write32(0xFFFF028C, 0xE510F004); + _MMU_write32(0xFFFF0290, 0xE8BD500F); + _MMU_write32(0xFFFF0294, 0xE25EF004); } - fp_dis7 = fopen("D:\\desmume_dis7.asm", "w"); -#endif - -#ifdef LOG_ARM9 - if (fp_dis9 != NULL) - { - fclose(fp_dis9); - fp_dis9 = NULL; - } - fp_dis9 = fopen("D:\\desmume_dis9.asm", "w"); -#endif if (firmware) { @@ -2173,7 +2087,7 @@ void NDS_Reset() } firmware = new CFIRMWARE(); fw_success = firmware->load(); - if (NDS_ARM7.BIOS_loaded && NDS_ARM9.BIOS_loaded && CommonSettings.BootFromFirmware && fw_success) + if ((CommonSettings.UseExtBIOS == true) && (CommonSettings.BootFromFirmware == true) && (fw_success == TRUE)) { // Copy secure area to memory if needed if ((header->ARM9src >= 0x4000) && (header->ARM9src < 0x8000)) @@ -2306,8 +2220,8 @@ void NDS_Reset() std::string rompath = "fat:/" + path.RomName; const u32 kCommandline = 0x027E0000; //const u32 kCommandline = 0x027FFF84; - - // + + // _MMU_write32(0x02FFFE70, 0x5f617267); _MMU_write32(0x02FFFE74, kCommandline); //(commandline starts here) _MMU_write32(0x02FFFE78, rompath.size()+1); @@ -2355,6 +2269,7 @@ void NDS_Reset() Screen_Reset(); gfx3d_reset(); gpu3D->NDS_3D_Reset(); + SPU_Reset(); WIFI_Reset(); @@ -2739,25 +2654,6 @@ void NDS_suspendProcessingInput(bool suspend) void emu_halt() { //printf("halting emu: ARM9 PC=%08X/%08X, ARM7 PC=%08X/%08X\n", NDS_ARM9.R[15], NDS_ARM9.instruct_adr, NDS_ARM7.R[15], NDS_ARM7.instruct_adr); execute = false; -#ifdef LOG_ARM9 - if (fp_dis9) - { - char buf[256] = { 0 }; - sprintf(buf, "halting emu: ARM9 PC=%08X/%08X\n", NDS_ARM9.R[15], NDS_ARM9.instruct_adr); - fwrite(buf, 1, strlen(buf), fp_dis9); - INFO("ARM9 halted\n"); - } -#endif - -#ifdef LOG_ARM7 - if (fp_dis7) - { - char buf[256] = { 0 }; - sprintf(buf, "halting emu: ARM7 PC=%08X/%08X\n", NDS_ARM7.R[15], NDS_ARM7.instruct_adr); - fwrite(buf, 1, strlen(buf), fp_dis7); - INFO("ARM7 halted\n"); - } -#endif } //these templates needed to be instantiated manually diff --git a/desmume/src/NDSSystem.h b/desmume/src/NDSSystem.h index 9905c410d..62f4b4861 100644 --- a/desmume/src/NDSSystem.h +++ b/desmume/src/NDSSystem.h @@ -508,10 +508,6 @@ extern struct TCommonSettings { for(int i=0;i<16;i++) spu_muteChannels[i] = false; - - for(int g=0;g<2;g++) - for(int x=0;x<5;x++) - dispLayers[g][x]=true; } bool GFX3D_HighResolutionInterpolateColor; bool GFX3D_EdgeMark; @@ -536,8 +532,6 @@ extern struct TCommonSettings { int num_cores; bool single_core() { return num_cores==1; } bool rigorous_timing; - - bool dispLayers[2][5]; FAST_ALIGN bool advanced_timing; diff --git a/desmume/src/SPU.cpp b/desmume/src/SPU.cpp index 4a8209866..b0fc26eda 100644 --- a/desmume/src/SPU.cpp +++ b/desmume/src/SPU.cpp @@ -250,19 +250,15 @@ void SPU_Reset(void) int i; SPU_core->reset(); + if(SPU_user) SPU_user->reset(); - if(SPU_user) { - if(SNDCore) - { - SNDCore->DeInit(); - SNDCore->Init(SPU_user->bufsize*2); - SNDCore->SetVolume(volume); - } - SPU_user->reset(); + if(SNDCore && SPU_user) { + SNDCore->DeInit(); + SNDCore->Init(SPU_user->bufsize*2); + SNDCore->SetVolume(volume); + //todo - check success? } - //zero - 09-apr-2010: this concerns me, regarding savestate synch. - //After 0.9.6, lets experiment with removing it and just properly zapping the spu instead // Reset Registers for (i = 0x400; i < 0x51D; i++) T1WriteByte(MMU.ARM7_REG, i, 0); @@ -279,8 +275,6 @@ void SPU_struct::reset() memset((void *)channels, 0, sizeof(channel_struct) * 16); - reconstruct(®s); - for(int i = 0; i < 16; i++) { channels[i].num = i; @@ -1672,7 +1666,6 @@ bool spu_loadstate(EMUFILE* is, int size) //fixup the pointers which we had are supposed to keep cached chan.buf8 = (s8*)&MMU.MMU_MEM[1][(chan.addr>>20)&0xFF][(chan.addr & MMU.MMU_MASK[1][(chan.addr >> 20) & 0xFF])]; - chan.buf16 = (s16*)chan.buf8; } if(version>=2) { diff --git a/desmume/src/arm_instructions.cpp b/desmume/src/arm_instructions.cpp index 71562944b..dca41e770 100644 --- a/desmume/src/arm_instructions.cpp +++ b/desmume/src/arm_instructions.cpp @@ -21,11 +21,7 @@ // ARM core TODO: // - Check all the LDM/STM opcodes: quirks when Rb included in Rlist; opcodes -// operating on user registers (LDMXX2/STMXX2) -// - Force User mode memory access for LDRx/STRx opcodes with bit24=0 and bit21=1 -// (has to be done at memory side; once the PU is emulated well enough) -// - Check LDMxx2/STMxx2 (those opcodes that act on User mode registers instead -// of current ones) +// operating on user registers (LDMXX2/STMXX2) #include "cp15.h" #include "debug.h" @@ -4108,6 +4104,33 @@ TEMPLATE static u32 FASTCALL OP_LDR_P_IMM_OFF_POSTIND(const u32 i) return MMU_aluMemAccessCycles(3,adr); } +//------------------------------------------------------------ +TEMPLATE static u32 FASTCALL OP_LDR_P_IMM_OFF_POSTIND2(const u32 i) +{ + + u32 adr = cpu->R[REG_POS(i,16)]; + u32 val = READ32(cpu->mem_if->data, adr); + u32 old; + val = ROR(val, 8*(adr&3)); + + if(REG_POS(i,12)==15) + { + cpu->R[15] = val & (0XFFFFFFFC | (((u32)cpu->LDTBit)<<1)); + cpu->CPSR.bits.T = BIT0(val) & cpu->LDTBit; + cpu->next_instruction = cpu->R[15]; + cpu->R[REG_POS(i,16)] = adr + IMM_OFF_12; + return MMU_aluMemAccessCycles(5,adr); + } + + old = armcpu_switchMode(cpu, USR); + cpu->R[REG_POS(i,12)] = val; + armcpu_switchMode(cpu, old); + + cpu->R[REG_POS(i,16)] = adr + IMM_OFF_12; + + return MMU_aluMemAccessCycles(3,adr); +} + //------------------------------------------------------------ TEMPLATE static u32 FASTCALL OP_LDR_M_IMM_OFF_POSTIND(const u32 i) diff --git a/desmume/src/armcpu.cpp b/desmume/src/armcpu.cpp index 7dbe29367..07ebb15c2 100644 --- a/desmume/src/armcpu.cpp +++ b/desmume/src/armcpu.cpp @@ -230,10 +230,11 @@ void armcpu_init(armcpu_t *armcpu, u32 adr) armcpu->irq_flag = 0; #endif + if(armcpu->coproc[15]) free(armcpu->coproc[15]); + for(i = 0; i < 15; ++i) { armcpu->R[i] = 0; - if(armcpu->coproc[i]) free(armcpu->coproc[i]); armcpu->coproc[i] = NULL; } @@ -257,9 +258,7 @@ void armcpu_init(armcpu_t *armcpu, u32 adr) armcpu->next_instruction = adr; - // only ARM9 have co-processor - if (armcpu->proc_ID==0) - armcpu->coproc[15] = (armcp_t*)armcp15_new(armcpu); + armcpu->coproc[15] = (armcp_t*)armcp15_new(armcpu); #ifndef GDB_STUB armcpu_prefetch(armcpu); @@ -381,10 +380,10 @@ FORCEINLINE static u32 armcpu_prefetch() #ifdef GDB_STUB u32 temp_instruction; #endif - u32 curInstruction = armcpu->next_instruction; if(armcpu->CPSR.bits.T == 0) { + u32 curInstruction = armcpu->next_instruction; #ifdef GDB_STUB temp_instruction = armcpu->mem_if->prefetch32( armcpu->mem_if->data, @@ -397,8 +396,7 @@ FORCEINLINE static u32 armcpu_prefetch() armcpu->R[15] = armcpu->next_instruction + 4; } #else - curInstruction &= 0x0FFFFFFC; - armcpu->instruction = _MMU_read32(curInstruction); + armcpu->instruction = _MMU_read32(curInstruction&0xFFFFFFFC); armcpu->instruct_adr = curInstruction; armcpu->next_instruction = curInstruction + 4; armcpu->R[15] = curInstruction + 8; @@ -407,6 +405,7 @@ FORCEINLINE static u32 armcpu_prefetch() return MMU_codeFetchCycles(curInstruction); } + u32 curInstruction = armcpu->next_instruction; #ifdef GDB_STUB temp_instruction = armcpu->mem_if->prefetch16( armcpu->mem_if->data, @@ -419,8 +418,7 @@ FORCEINLINE static u32 armcpu_prefetch() armcpu->R[15] = armcpu->next_instruction + 2; } #else - curInstruction &= 0x0FFFFFFE; - armcpu->instruction = _MMU_read16(curInstruction); + armcpu->instruction = _MMU_read16(curInstruction&0xFFFFFFFE); armcpu->instruct_adr = curInstruction; armcpu->next_instruction = curInstruction + 2; armcpu->R[15] = curInstruction + 4; @@ -526,43 +524,6 @@ u32 armcpu_exec() //this assert is annoying. but sometimes it is handy. //assert(ARMPROC.instruct_adr!=0x00000000); -#ifdef DEVELOPER - if ((((ARMPROC.instruct_adr & 0x0F000000) == 0x0F000000) && (PROCNUM == 0)) || - (((ARMPROC.instruct_adr & 0x0F000000) == 0x00000000) && (PROCNUM == 1))) - { - switch (ARMPROC.instruct_adr & 0xFFFF) - { - case 0x00000000: - printf("BIOS%c: Reset!!!\n", PROCNUM?'7':'9'); - emu_halt(); - break; - case 0x00000004: - printf("BIOS%c: Undefined instruction\n", PROCNUM?'7':'9'); - emu_halt(); - break; - case 0x00000008: - //printf("BIOS%c: SWI\n", PROCNUM?'7':'9'); - break; - case 0x0000000C: - printf("BIOS%c: Prefetch Abort!!!\n", PROCNUM?'7':'9'); - emu_halt(); - break; - case 0x00000010: - printf("BIOS%c: Data Abort!!!\n", PROCNUM?'7':'9'); - emu_halt(); - break; - case 0x00000014: - printf("BIOS%c: Reserved!!!\n", PROCNUM?'7':'9'); - break; - case 0x00000018: - //printf("BIOS%c: IRQ\n", PROCNUM?'7':'9'); - break; - case 0x0000001C: - printf("BIOS%c: Fast IRQ\n", PROCNUM?'7':'9'); - break; - } - } -#endif #ifdef GDB_STUB if (ARMPROC.stalled) { diff --git a/desmume/src/armcpu.h b/desmume/src/armcpu.h index e5914ed46..3faa5cfe2 100644 --- a/desmume/src/armcpu.h +++ b/desmume/src/armcpu.h @@ -45,31 +45,6 @@ inline T SIGNED_OVERFLOW(T a,T b,T c) { return BIT31(((a)&(b)&(~c)) | ((~a)&(~(b template inline T SIGNED_UNDERFLOW(T a,T b,T c) { return BIT31(((a)&(~(b))&(~c)) | ((~a)&(b)&(c))); } -// ============================= CPRS flags funcs -static bool CarryFrom(s32 left, s32 right) -{ - u32 res = (0xFFFFFFFF - (u32)left); - - return ((u32)right > res); -} - -static bool BorrowFrom(s32 left, s32 right) -{ - return ((u32)right > (u32)left); -} - -static bool OverflowFromADD(s32 alu_out, s32 left, s32 right) -{ - return ((left >= 0 && right >= 0) || (left < 0 && right < 0)) - && ((left < 0 && alu_out >= 0) || (left >= 0 && alu_out < 0)); -} - -static bool OverflowFromSUB(s32 alu_out, s32 left, s32 right) -{ - return ((left < 0 && right >= 0) || (left >= 0 && right < 0)) - && ((left < 0 && alu_out >= 0) || (left >= 0 && alu_out < 0)); -} - //zero 15-feb-2009 - these werent getting used and they were getting in my way //#define EQ 0x0 //#define NE 0x1 @@ -200,8 +175,6 @@ struct armcpu_t BOOL waitIRQ; BOOL wirq; - BOOL BIOS_loaded; - u32 (* *swi_tab)(); // flag indicating if the processor is stalled (for debugging) diff --git a/desmume/src/cli/main.cpp b/desmume/src/cli/main.cpp index 0a6abf5c9..959cb5d31 100644 --- a/desmume/src/cli/main.cpp +++ b/desmume/src/cli/main.cpp @@ -52,6 +52,7 @@ #include "render3D.h" #include "rasterize.h" #include "saves.h" +#include "mic.h" #include "firmware.h" #include "GPU_osd.h" #include "desmume_config.h" @@ -124,6 +125,10 @@ const u16 cli_kb_cfg[NB_KEYS] = SDLK_o // BOOST }; +#ifdef FAKE_MIC +static BOOL enable_fake_mic; +#endif + class configured_features : public CommandLine { public: @@ -454,11 +459,6 @@ opengl_Draw( GLuint *texture, int software_convert) { } #endif -/* this is a stub for resizeWindow_stub in the case of no gl headers or no opengl 2d */ -static void -resizeWindow_stub (u16 width, u16 height) { -} - static void Draw( void) { SDL_Surface *rawImage; @@ -474,23 +474,80 @@ Draw( void) { return; } -static void desmume_cycle(struct ctrls_event_config * cfg) +static void desmume_cycle(int *sdl_quit, int *boost, struct configured_features * my_config) { + static unsigned short keypad; + static int focused = 1; SDL_Event event; - cfg->nds_screen_size_ratio = nds_screen_size_ratio; - /* Look for queued events and update keypad status */ /* IMPORTANT: Reenable joystick events iif needed. */ if(SDL_JoystickEventState(SDL_QUERY) == SDL_IGNORE) SDL_JoystickEventState(SDL_ENABLE); /* There's an event waiting to be processed? */ - while ( !cfg->sdl_quit && - (SDL_PollEvent(&event) || (!cfg->focused && SDL_WaitEvent(&event)))) + while ( !*sdl_quit && + (SDL_PollEvent(&event) || (!focused && SDL_WaitEvent(&event)))) { - process_ctrls_event( event, cfg); - } + process_ctrls_event( event, &keypad, nds_screen_size_ratio); + + switch (event.type) + { +#ifdef INCLUDE_OPENGL_2D + case SDL_VIDEORESIZE: + resizeWindow( event.resize.w, event.resize.h); + break; +#endif + case SDL_ACTIVEEVENT: + if (my_config->auto_pause && (event.active.state & SDL_APPINPUTFOCUS )) + { + if (event.active.gain) + { + focused = 1; + SPU_Pause(0); + osd->addLine("Auto pause disabled\n"); + } + else + { + focused = 0; + SPU_Pause(1); + } + } + break; + + case SDL_KEYUP: + switch (event.key.keysym.sym) + { + case SDLK_ESCAPE: + *sdl_quit = 1; + break; +#ifdef FAKE_MIC + case SDLK_m: + enable_fake_mic = !enable_fake_mic; + Mic_DoNoise(enable_fake_mic); + if (enable_fake_mic) + osd->addLine("Fake mic enabled\n"); + else + osd->addLine("Fake mic disabled\n"); + break; +#endif + case SDLK_o: + *boost = !(*boost); + if (*boost) + osd->addLine("Boost mode enabled\n"); + else + osd->addLine("Boost mode disabled\n"); + break; + default: + break; + } + break; + + case SDL_QUIT: + *sdl_quit = 1; + break; + } + } /* Update mouse position and click */ if(mouse.down) NDS_setTouchPos(mouse.x, mouse.y); @@ -500,14 +557,13 @@ static void desmume_cycle(struct ctrls_event_config * cfg) mouse.click = FALSE; } - update_keypad(cfg->keypad); /* Update keypad */ + update_keypad(keypad); /* Update keypad */ NDS_exec(); SPU_Emulate_user(); } int main(int argc, char ** argv) { struct configured_features my_config; - struct ctrls_event_config ctrls_cfg; #ifdef GDB_STUB gdbstub_handle_t arm9_gdb_stub; gdbstub_handle_t arm7_gdb_stub; @@ -520,6 +576,8 @@ int main(int argc, char ** argv) { int limiter_frame_counter = 0; SDL_sem *fps_limiter_semaphore = NULL; SDL_TimerID limiter_timer = NULL; + int sdl_quit = 0; + int boost = 0; int error; GKeyFile *keyfile; @@ -757,23 +815,14 @@ int main(int argc, char ** argv) { aggDraw.hud->attach(GPU_screen, 256, 384, 512); #endif - ctrls_cfg.boost = 0; - ctrls_cfg.sdl_quit = 0; - ctrls_cfg.auto_pause = my_config.auto_pause; - ctrls_cfg.focused = 1; - ctrls_cfg.fake_mic = 0; - ctrls_cfg.keypad = 0; - ctrls_cfg.resize_cb = &resizeWindow_stub; - - while(!ctrls_cfg.sdl_quit) { - desmume_cycle(&ctrls_cfg); + while(!sdl_quit) { + desmume_cycle(&sdl_quit, &boost, &my_config); osd->update(); DrawHUD(); #ifdef INCLUDE_OPENGL_2D if ( my_config.opengl_2d) { opengl_Draw( screen_texture, my_config.soft_colour_convert); - ctrls_cfg.resize_cb = &resizeWindow; } else #endif @@ -782,10 +831,10 @@ int main(int argc, char ** argv) { for ( int i = 0; i < my_config.frameskip; i++ ) { NDS_SkipNextFrame(); - desmume_cycle(&ctrls_cfg); + desmume_cycle(&sdl_quit, &boost, &my_config); } - if ( !my_config.disable_limiter && !ctrls_cfg.boost) { + if ( !my_config.disable_limiter && !boost) { limiter_frame_counter += 1 + my_config.frameskip; if ( limiter_frame_counter >= my_config.fps_limiter_frame_period) { limiter_frame_counter = 0; diff --git a/desmume/src/cp15.cpp b/desmume/src/cp15.cpp index d793d2f91..e9e29ebbe 100644 --- a/desmume/src/cp15.cpp +++ b/desmume/src/cp15.cpp @@ -31,12 +31,11 @@ armcp15_t *armcp15_new(armcpu_t * c) armcp15_t *armcp15 = (armcp15_t*)malloc(sizeof(armcp15_t)); if(!armcp15) return NULL; - armcp15->cpu = c; armcp15->IDCode = 0x41049460; armcp15->cacheType = 0x0F0D2112; - armcp15->TCMSize = 0x00140180; - armcp15->ctrl = 0x00012078; + armcp15->TCMSize = 0x00140140; + armcp15->ctrl = 0x00000000; armcp15->DCConfig = 0x0; armcp15->ICConfig = 0x0; armcp15->writeBuffCtrl = 0x0; @@ -58,10 +57,6 @@ armcp15_t *armcp15_new(armcpu_t * c) armcp15->DTCMRegion = 0x0080000A; armcp15->processID = 0; - MMU.ARM9_RW_MODE = BIT7(armcp15->ctrl); - armcp15->cpu->intVector = 0xFFFF0000 * (BIT13(armcp15->ctrl)); - armcp15->cpu->LDTBit = !BIT15(armcp15->ctrl); //TBit - /* preset calculated regionmasks */ for (i=0;i<8;i++) { armcp15->regionWriteMask_USR[i] = 0 ; @@ -296,7 +291,6 @@ BOOL armcp15_moveCP2ARM(armcp15_t *armcp15, u32 * R, u8 CRn, u8 CRm, u8 opcode1, if((opcode1==0) && (opcode2==0) && (CRm==0)) { *R = armcp15->ctrl; - //LOG("CP15: CPtoARM ctrl %08X\n", armcp15->ctrl); return TRUE; } return FALSE; @@ -321,7 +315,6 @@ BOOL armcp15_moveCP2ARM(armcp15_t *armcp15, u32 * R, u8 CRn, u8 CRm, u8 opcode1, if((opcode1==0) && (opcode2==0) && (CRm==0)) { *R = armcp15->writeBuffCtrl; - //LOG("CP15: CPtoARM writeBuffer ctrl %08X\n", armcp15->writeBuffCtrl); return TRUE; } return FALSE; @@ -413,38 +406,33 @@ BOOL armcp15_moveCP2ARM(armcp15_t *armcp15, u32 * R, u8 CRn, u8 CRm, u8 opcode1, } } + static u32 CP15wait4IRQ(armcpu_t *cpu) { -#if 1 u32 instructAddr = cpu->instruct_adr; - // on the first call, wirq is not set + /* on the first call, wirq is not set */ if(cpu->wirq) { - // check wether an irq was issued + /* check wether an irq was issued */ if(!cpu->waitIRQ) { cpu->waitIRQ = 0; cpu->wirq = 0; - return 1; // return execution + return 1; /* return execution */ } - // otherwise, repeat this instruction + /* otherwise, repeat this instruction */ cpu->R[15] = instructAddr; cpu->next_instruction = instructAddr; return 1; } - - // first run, set us into waiting state + /* first run, set us into waiting state */ cpu->waitIRQ = 1; cpu->wirq = 1; - // and set next instruction to repeat this + /* and set next instruction to repeat this */ cpu->R[15] = instructAddr; cpu->next_instruction = instructAddr; -#else - //printf("CP15: IME %X, IE %08X, IF %08X res %08X\n", MMU.reg_IME[0], MMU.reg_IE[0], MMU.reg_IF[0], MMU.reg_IE[0] & MMU.reg_IF[0]); - //if ((MMU.reg_IE[0] & MMU.reg_IF[0]) == 0) return 1; - cpu->waitIRQ = 1; -#endif - // only SWI set IME to 1 + /* CHECKME: IME shouldn't be modified (?) */ + MMU.reg_IME[0] = 1; return 1; } @@ -457,9 +445,7 @@ BOOL armcp15_moveARM2CP(armcp15_t *armcp15, u32 val, u8 CRn, u8 CRm, u8 opcode1, case 1 : if((opcode1==0) && (opcode2==0) && (CRm==0)) { - - //On the NDS bit0,2,7,12..19 are R/W, Bit3..6 are always set, all other bits are always zero. - armcp15->ctrl = (val & 0x000FF085) | 0x00000078; + armcp15->ctrl = val; MMU.ARM9_RW_MODE = BIT7(val); //zero 31-jan-2010: change from 0x0FFF0000 to 0xFFFF0000 per gbatek armcp15->cpu->intVector = 0xFFFF0000 * (BIT13(val)); @@ -472,8 +458,6 @@ BOOL armcp15_moveARM2CP(armcp15_t *armcp15, u32 val, u8 CRn, u8 CRm, u8 opcode1, { log::ajouter("outch !!!!!!!"); }*/ - - //LOG("CP15: ARMtoCP ctrl %08X (val %08X)\n", armcp15->ctrl, val); return TRUE; } return FALSE; @@ -497,7 +481,6 @@ BOOL armcp15_moveARM2CP(armcp15_t *armcp15, u32 val, u8 CRn, u8 CRm, u8 opcode1, if((opcode1==0) && (opcode2==0) && (CRm==0)) { armcp15->writeBuffCtrl = val; - //LOG("CP15: ARMtoCP writeBuffer ctrl %08X\n", armcp15->writeBuffCtrl); return TRUE; } return FALSE; @@ -589,10 +572,8 @@ BOOL armcp15_moveARM2CP(armcp15_t *armcp15, u32 val, u8 CRn, u8 CRm, u8 opcode1, switch(opcode2) { case 0 : - MMU.DTCMRegion = armcp15->DTCMRegion = val & 0x0FFFF000; - //MMU.DTCMRegion = val; - //MMU.DTCMRegion = val & 0x0FFFFFFC0; - //LOG("CP15: set DTCM %08X (size %i)\n", MMU.DTCMRegion, 512<<(val & 0x00000FFF)); + armcp15->DTCMRegion = val; + MMU.DTCMRegion = val & 0x0FFFFFFC0; /*sprintf(logbuf, "%08X", val); log::ajouter(logbuf);*/ return TRUE; diff --git a/desmume/src/ctrlssdl.cpp b/desmume/src/ctrlssdl.cpp index 74bb64afc..80aeb23dc 100644 --- a/desmume/src/ctrlssdl.cpp +++ b/desmume/src/ctrlssdl.cpp @@ -25,10 +25,6 @@ #include "SPU.h" #include "commandline.h" #include "NDSSystem.h" -#include "GPU_osd.h" -#ifdef FAKE_MIC -#include "mic.h" -#endif u16 keyboard_cfg[NB_KEYS]; u16 joypad_cfg[NB_KEYS]; @@ -425,30 +421,13 @@ process_joystick_events( u16 *keypad) { u16 shift_pressed; void -process_ctrls_event( SDL_Event& event, - struct ctrls_event_config *cfg) +process_ctrls_event( SDL_Event& event, u16 *keypad, + float nds_screen_size_ratio) { u16 key; - if ( !do_process_joystick_events( &cfg->keypad, &event)) { + if ( !do_process_joystick_events( keypad, &event)) { switch (event.type) { - case SDL_VIDEORESIZE: - cfg->resize_cb( event.resize.w, event.resize.h); - break; - - case SDL_ACTIVEEVENT: - if (cfg->auto_pause && (event.active.state & SDL_APPINPUTFOCUS )) { - if (event.active.gain) { - cfg->focused = 1; - SPU_Pause(0); - osd->addLine("Auto pause disabled\n"); - } else { - cfg->focused = 0; - SPU_Pause(1); - } - } - break; - case SDL_KEYDOWN: switch(event.key.keysym.sym){ case SDLK_LSHIFT: @@ -459,36 +438,13 @@ process_ctrls_event( SDL_Event& event, break; default: key = lookup_key(event.key.keysym.sym); - ADD_KEY( cfg->keypad, key ); + ADD_KEY( *keypad, key ); break; } break; case SDL_KEYUP: switch(event.key.keysym.sym){ - case SDLK_ESCAPE: - cfg->sdl_quit = 1; - break; - -#ifdef FAKE_MIC - case SDLK_m: - cfg->fake_mic = !cfg->fake_mic; - Mic_DoNoise(cfg->fake_mic); - if (cfg->fake_mic) - osd->addLine("Fake mic enabled\n"); - else - osd->addLine("Fake mic disabled\n"); - break; -#endif - - case SDLK_o: - cfg->boost = !cfg->boost; - if (cfg->boost) - osd->addLine("Boost mode enabled\n"); - else - osd->addLine("Boost mode disabled\n"); - break; - case SDLK_LSHIFT: shift_pressed &= ~1; break; @@ -520,7 +476,7 @@ process_ctrls_event( SDL_Event& event, break; default: key = lookup_key(event.key.keysym.sym); - RM_KEY( cfg->keypad, key ); + RM_KEY( *keypad, key ); break; } break; @@ -535,10 +491,10 @@ process_ctrls_event( SDL_Event& event, else { signed long scaled_x = screen_to_touch_range_x( event.button.x, - cfg->nds_screen_size_ratio); + nds_screen_size_ratio); signed long scaled_y = screen_to_touch_range_y( event.button.y, - cfg->nds_screen_size_ratio); + nds_screen_size_ratio); if( scaled_y >= 192) set_mouse_coord( scaled_x, scaled_y - 192); @@ -550,10 +506,6 @@ process_ctrls_event( SDL_Event& event, mouse.down = FALSE; break; - case SDL_QUIT: - cfg->sdl_quit = 1; - break; - default: break; } diff --git a/desmume/src/ctrlssdl.h b/desmume/src/ctrlssdl.h index 6b368cbed..516d64186 100644 --- a/desmume/src/ctrlssdl.h +++ b/desmume/src/ctrlssdl.h @@ -77,17 +77,6 @@ extern mouse_status mouse; void set_mouse_coord(signed long x,signed long y); #endif // !GTK_UI -struct ctrls_event_config { - unsigned short keypad; - float nds_screen_size_ratio; - int auto_pause; - int focused; - int sdl_quit; - int boost; - int fake_mic; - void (*resize_cb)(u16 width, u16 height); -}; - void load_default_config(const u16 kbCfg[]); BOOL init_joy( void); void uninit_joy( void); @@ -102,8 +91,8 @@ u16 get_keypad( void); u16 lookup_key (u16 keyval); u16 lookup_joy_key (u16 keyval); void -process_ctrls_event( SDL_Event& event, - struct ctrls_event_config *cfg); +process_ctrls_event( SDL_Event& event, u16 *keypad, + float nds_screen_size_ratio); void process_joystick_events( u16 *keypad); diff --git a/desmume/src/debug.cpp b/desmume/src/debug.cpp index a0ed879e0..c6255d59c 100644 --- a/desmume/src/debug.cpp +++ b/desmume/src/debug.cpp @@ -208,26 +208,6 @@ void DEBUG_reset() printf("DEBUG_reset: %08X\n",&DebugStatistics::print); //force a reference to this function } -static void DEBUG_dumpMemory_fill(EMUFILE *fp, u32 size) -{ - static std::vector buf; - buf.resize(size); - memset(&buf[0],0,size); - fp->fwrite(&buf[0],size); -} - -void DEBUG_dumpMemory(EMUFILE* fp) -{ - fp->fseek(0x000000,SEEK_SET); fp->fwrite(MMU.MAIN_MEM,0x800000); //arm9 main mem (8192K) - fp->fseek(0x900000,SEEK_SET); fp->fwrite(MMU.ARM9_DTCM,0x4000); //arm9 DTCM (16K) - fp->fseek(0xA00000,SEEK_SET); fp->fwrite(MMU.ARM9_ITCM,0x8000); //arm9 ITCM (32K) - fp->fseek(0xB00000,SEEK_SET); fp->fwrite(MMU.ARM9_LCD,0xA4000); //LCD mem 656K - fp->fseek(0xC00000,SEEK_SET); fp->fwrite(MMU.ARM9_VMEM,0x800); //OAM - fp->fseek(0xD00000,SEEK_SET); fp->fwrite(MMU.ARM7_ERAM,0x10000); //arm7 WRAM (64K) - fp->fseek(0xE00000,SEEK_SET); fp->fwrite(MMU.ARM7_WIRAM,0x10000); //arm7 wifi RAM ? - fp->fseek(0xF00000,SEEK_SET); fp->fwrite(MMU.SWIRAM,0x8000); //arm9/arm7 shared WRAM (32KB) -} - //---------------------------------------------------- std::vector Logger::channels; diff --git a/desmume/src/debug.h b/desmume/src/debug.h index 56bb0e0fc..9a3aeb181 100644 --- a/desmume/src/debug.h +++ b/desmume/src/debug.h @@ -28,7 +28,6 @@ #include "types.h" #include "mem.h" -#include "emufile.h" struct DebugStatistics { @@ -48,7 +47,6 @@ struct DebugStatistics extern DebugStatistics DEBUG_statistics; void DEBUG_reset(); -void DEBUG_dumpMemory(EMUFILE* fp); struct armcpu_t; diff --git a/desmume/src/gtk-glade/Makefile.am b/desmume/src/gtk-glade/Makefile.am index 052ab2ab2..120254885 100644 --- a/desmume/src/gtk-glade/Makefile.am +++ b/desmume/src/gtk-glade/Makefile.am @@ -2,7 +2,7 @@ SUBDIRS = doc include $(top_srcdir)/src/desmume.mk AM_CPPFLAGS += $(SDL_CFLAGS) $(GTKGLEXT_CFLAGS) $(LIBGLADE_CFLAGS) \ - $(GTHREAD_CFLAGS) $(ALSA_CFLAGS) $(LIBAGG_CFLAGS) -DDATADIR=\"$(gladedir)/\" \ + $(GTHREAD_CFLAGS) $(ALSA_CFLAGS) -DDATADIR=\"$(gladedir)/\" \ -DLOCALEDIR=\"$(localedir)\" AM_LDFLAGS += -rdynamic $(INTLLIBS) diff --git a/desmume/src/instruction_tabdef.inc b/desmume/src/instruction_tabdef.inc index 50ccaaa4c..7053b6bca 100644 --- a/desmume/src/instruction_tabdef.inc +++ b/desmume/src/instruction_tabdef.inc @@ -18,4104 +18,4381 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* 0XX000X0 */ +TABDECL( OP_AND_LSL_IMM), // 000 0000 0 0000 +TABDECL( OP_AND_LSL_REG), // 000 0000 0 0001 +TABDECL( OP_AND_LSR_IMM), // 000 0000 0 0010 +TABDECL( OP_AND_LSR_REG), // 000 0000 0 0011 +TABDECL( OP_AND_ASR_IMM), // 000 0000 0 0100 +TABDECL( OP_AND_ASR_REG), // 000 0000 0 0101 +TABDECL( OP_AND_ROR_IMM), // 000 0000 0 0110 +TABDECL( OP_AND_ROR_REG), // 000 0000 0 0111 + +TABDECL( OP_AND_LSL_IMM), // 000 0000 0 1000 +TABDECL( OP_MUL), // 000 0000 0 1001 +TABDECL( OP_AND_LSR_IMM), // 000 0000 0 1010 +TABDECL( OP_STRH_POS_INDE_M_REG_OFF), // 000 0000 0 1011 +TABDECL( OP_AND_ASR_IMM), // 000 0000 0 1100 +TABDECL( OP_LDRD_STRD_POST_INDEX), + // 000 0000 0 1101 +TABDECL( OP_AND_ROR_IMM), // 000 0000 0 1110 +TABDECL( OP_LDRD_STRD_POST_INDEX), + // 000 0000 0 1111 + +TABDECL( OP_AND_S_LSL_IMM), // 000 0000 1 0000 +TABDECL( OP_AND_S_LSL_REG), // 000 0000 1 0001 +TABDECL( OP_AND_S_LSR_IMM), // 000 0000 1 0010 +TABDECL( OP_AND_S_LSR_REG), // 000 0000 1 0011 +TABDECL( OP_AND_S_ASR_IMM), // 000 0000 1 0100 +TABDECL( OP_AND_S_ASR_REG), // 000 0000 1 0101 +TABDECL( OP_AND_S_ROR_IMM), // 000 0000 1 0110 +TABDECL( OP_AND_S_ROR_REG), // 000 0000 1 0111 + +TABDECL( OP_AND_S_LSL_IMM), // 000 0000 1 1000 +TABDECL( OP_MUL_S), // 000 0000 1 1001 +TABDECL( OP_AND_S_LSR_IMM), // 000 0000 1 1010 +TABDECL( OP_LDRH_POS_INDE_M_REG_OFF), // 000 0000 1 1011 +TABDECL( OP_AND_S_ASR_IMM), // 000 0000 1 1100 +TABDECL( OP_LDRSB_POS_INDE_M_REG_OFF),// 000 0000 1 1101 +TABDECL( OP_AND_S_ROR_IMM), // 000 0000 1 1110 +TABDECL( OP_LDRSH_POS_INDE_M_REG_OFF),// 000 0000 1 1111 + +TABDECL( OP_EOR_LSL_IMM), // 000 0001 0 0000 +TABDECL( OP_EOR_LSL_REG), // 000 0001 0 0001 +TABDECL( OP_EOR_LSR_IMM), // 000 0001 0 0010 +TABDECL( OP_EOR_LSR_REG), // 000 0001 0 0011 +TABDECL( OP_EOR_ASR_IMM), // 000 0001 0 0100 +TABDECL( OP_EOR_ASR_REG), // 000 0001 0 0101 +TABDECL( OP_EOR_ROR_IMM), // 000 0001 0 0110 +TABDECL( OP_EOR_ROR_REG), // 000 0001 0 0111 + +TABDECL( OP_EOR_LSL_IMM), // 000 0001 0 1000 +TABDECL( OP_MLA), // 000 0001 0 1001 +TABDECL( OP_EOR_LSR_IMM), // OOO OOO1 O 1010 +TABDECL( OP_UND), // 000 0001 0 1011 +TABDECL( OP_EOR_ASR_IMM), // 000 0001 0 1100 +TABDECL( OP_UND), // 000 0001 0 1101 +TABDECL( OP_EOR_ROR_IMM), // 000 0001 0 1110 +TABDECL( OP_UND), // 000 0001 0 1111 + +TABDECL( OP_EOR_S_LSL_IMM), // 000 0001 1 0000 +TABDECL( OP_EOR_S_LSL_REG), // 000 0001 1 0001 +TABDECL( OP_EOR_S_LSR_IMM), // 000 0001 1 0010 +TABDECL( OP_EOR_S_LSR_REG), // 000 0001 1 0011 +TABDECL( OP_EOR_S_ASR_IMM), // 000 0001 1 0100 +TABDECL( OP_EOR_S_ASR_REG), // 000 0001 1 0101 +TABDECL( OP_EOR_S_ROR_IMM), // 000 0001 1 0110 +TABDECL( OP_EOR_S_ROR_REG), // 000 0001 1 0111 + +TABDECL( OP_EOR_S_LSL_IMM), // 000 0001 1 1000 +TABDECL( OP_MLA_S), // 000 0001 1 1001 +TABDECL( OP_EOR_S_LSR_IMM), // 000 0001 1 1010 +TABDECL( OP_UND), // 000 0001 1 1011 +TABDECL( OP_EOR_S_ASR_IMM), // 000 0001 1 1100 +TABDECL( OP_UND), // 000 0001 1 1101 +TABDECL( OP_EOR_S_ROR_IMM), // 000 0001 1 1110 +TABDECL( OP_UND), // 000 0001 1 1111 -/* 0000 0000 0000 */ TABDECL( OP_AND_LSL_IMM), -/* 0000 0000 0001 */ TABDECL( OP_AND_LSL_REG), -/* 0000 0000 0010 */ TABDECL( OP_AND_LSR_IMM), -/* 0000 0000 0011 */ TABDECL( OP_AND_LSR_REG), -/* 0000 0000 0100 */ TABDECL( OP_AND_ASR_IMM), -/* 0000 0000 0101 */ TABDECL( OP_AND_ASR_REG), -/* 0000 0000 0110 */ TABDECL( OP_AND_ROR_IMM), -/* 0000 0000 0111 */ TABDECL( OP_AND_ROR_REG), -/* 0000 0000 1000 */ TABDECL( OP_AND_LSL_IMM), -/* 0000 0000 1001 */ TABDECL( OP_MUL), -/* 0000 0000 1010 */ TABDECL( OP_AND_LSR_IMM), -/* 0000 0000 1011 */ TABDECL( OP_STRH_POS_INDE_M_REG_OFF), -/* 0000 0000 1100 */ TABDECL( OP_AND_ASR_IMM), -/* 0000 0000 1101 */ TABDECL( OP_LDRD_STRD_POST_INDEX), -/* 0000 0000 1110 */ TABDECL( OP_AND_ROR_IMM), -/* 0000 0000 1111 */ TABDECL( OP_LDRD_STRD_POST_INDEX), -/* 0000 0001 0000 */ TABDECL( OP_AND_S_LSL_IMM), -/* 0000 0001 0001 */ TABDECL( OP_AND_S_LSL_REG), -/* 0000 0001 0010 */ TABDECL( OP_AND_S_LSR_IMM), -/* 0000 0001 0011 */ TABDECL( OP_AND_S_LSR_REG), -/* 0000 0001 0100 */ TABDECL( OP_AND_S_ASR_IMM), -/* 0000 0001 0101 */ TABDECL( OP_AND_S_ASR_REG), -/* 0000 0001 0110 */ TABDECL( OP_AND_S_ROR_IMM), -/* 0000 0001 0111 */ TABDECL( OP_AND_S_ROR_REG), -/* 0000 0001 1000 */ TABDECL( OP_AND_S_LSL_IMM), -/* 0000 0001 1001 */ TABDECL( OP_MUL_S), -/* 0000 0001 1010 */ TABDECL( OP_AND_S_LSR_IMM), -/* 0000 0001 1011 */ TABDECL( OP_LDRH_POS_INDE_M_REG_OFF), -/* 0000 0001 1100 */ TABDECL( OP_AND_S_ASR_IMM), -/* 0000 0001 1101 */ TABDECL( OP_LDRSB_POS_INDE_M_REG_OFF), -/* 0000 0001 1110 */ TABDECL( OP_AND_S_ROR_IMM), -/* 0000 0001 1111 */ TABDECL( OP_LDRSH_POS_INDE_M_REG_OFF), -/* 0000 0010 0000 */ TABDECL( OP_EOR_LSL_IMM), -/* 0000 0010 0001 */ TABDECL( OP_EOR_LSL_REG), -/* 0000 0010 0010 */ TABDECL( OP_EOR_LSR_IMM), -/* 0000 0010 0011 */ TABDECL( OP_EOR_LSR_REG), -/* 0000 0010 0100 */ TABDECL( OP_EOR_ASR_IMM), -/* 0000 0010 0101 */ TABDECL( OP_EOR_ASR_REG), -/* 0000 0010 0110 */ TABDECL( OP_EOR_ROR_IMM), -/* 0000 0010 0111 */ TABDECL( OP_EOR_ROR_REG), -/* 0000 0010 1000 */ TABDECL( OP_EOR_LSL_IMM), -/* 0000 0010 1001 */ TABDECL( OP_MLA), -/* 0000 0010 1010 */ TABDECL( OP_EOR_LSR_IMM), // OOO OOO1 O 1010 -/* 0000 0010 1011 */ TABDECL( OP_UND), -/* 0000 0010 1100 */ TABDECL( OP_EOR_ASR_IMM), -/* 0000 0010 1101 */ TABDECL( OP_UND), -/* 0000 0010 1110 */ TABDECL( OP_EOR_ROR_IMM), -/* 0000 0010 1111 */ TABDECL( OP_UND), -/* 0000 0011 0000 */ TABDECL( OP_EOR_S_LSL_IMM), -/* 0000 0011 0001 */ TABDECL( OP_EOR_S_LSL_REG), -/* 0000 0011 0010 */ TABDECL( OP_EOR_S_LSR_IMM), -/* 0000 0011 0011 */ TABDECL( OP_EOR_S_LSR_REG), -/* 0000 0011 0100 */ TABDECL( OP_EOR_S_ASR_IMM), -/* 0000 0011 0101 */ TABDECL( OP_EOR_S_ASR_REG), -/* 0000 0011 0110 */ TABDECL( OP_EOR_S_ROR_IMM), -/* 0000 0011 0111 */ TABDECL( OP_EOR_S_ROR_REG), -/* 0000 0011 1000 */ TABDECL( OP_EOR_S_LSL_IMM), -/* 0000 0011 1001 */ TABDECL( OP_MLA_S), -/* 0000 0011 1010 */ TABDECL( OP_EOR_S_LSR_IMM), -/* 0000 0011 1011 */ TABDECL( OP_UND), -/* 0000 0011 1100 */ TABDECL( OP_EOR_S_ASR_IMM), -/* 0000 0011 1101 */ TABDECL( OP_UND), -/* 0000 0011 1110 */ TABDECL( OP_EOR_S_ROR_IMM), -/* 0000 0011 1111 */ TABDECL( OP_UND), -/* 0000 0100 0000 */ TABDECL( OP_SUB_LSL_IMM), -/* 0000 0100 0001 */ TABDECL( OP_SUB_LSL_REG), -/* 0000 0100 0010 */ TABDECL( OP_SUB_LSR_IMM), -/* 0000 0100 0011 */ TABDECL( OP_SUB_LSR_REG), -/* 0000 0100 0100 */ TABDECL( OP_SUB_ASR_IMM), -/* 0000 0100 0101 */ TABDECL( OP_SUB_ASR_REG), -/* 0000 0100 0110 */ TABDECL( OP_SUB_ROR_IMM), -/* 0000 0100 0111 */ TABDECL( OP_SUB_ROR_REG), -/* 0000 0100 1000 */ TABDECL( OP_SUB_LSL_IMM), -/* 0000 0100 1001 */ TABDECL( OP_UND), -/* 0000 0100 1010 */ TABDECL( OP_SUB_LSR_IMM), // OOO OO1O O 1010 -/* 0000 0100 1011 */ TABDECL( OP_STRH_POS_INDE_M_IMM_OFF), -/* 0000 0100 1100 */ TABDECL( OP_SUB_ASR_IMM), -/* 0000 0100 1101 */ TABDECL( OP_LDRD_STRD_POST_INDEX), -/* 0000 0100 1110 */ TABDECL( OP_SUB_ROR_IMM), -/* 0000 0100 1111 */ TABDECL( OP_LDRD_STRD_POST_INDEX), -/* 0000 0101 0000 */ TABDECL( OP_SUB_S_LSL_IMM), -/* 0000 0101 0001 */ TABDECL( OP_SUB_S_LSL_REG), -/* 0000 0101 0010 */ TABDECL( OP_SUB_S_LSR_IMM), -/* 0000 0101 0011 */ TABDECL( OP_SUB_S_LSR_REG), -/* 0000 0101 0100 */ TABDECL( OP_SUB_S_ASR_IMM), -/* 0000 0101 0101 */ TABDECL( OP_SUB_S_ASR_REG), -/* 0000 0101 0110 */ TABDECL( OP_SUB_S_ROR_IMM), -/* 0000 0101 0111 */ TABDECL( OP_SUB_S_ROR_REG), -/* 0000 0101 1000 */ TABDECL( OP_SUB_S_LSL_IMM), -/* 0000 0101 1001 */ TABDECL( OP_UND), -/* 0000 0101 1010 */ TABDECL( OP_SUB_S_LSR_IMM), -/* 0000 0101 1011 */ TABDECL( OP_LDRH_POS_INDE_M_IMM_OFF), -/* 0000 0101 1100 */ TABDECL( OP_SUB_S_ASR_IMM), -/* 0000 0101 1101 */ TABDECL( OP_LDRSB_POS_INDE_M_IMM_OFF), -/* 0000 0101 1110 */ TABDECL( OP_SUB_S_ROR_IMM), -/* 0000 0101 1111 */ TABDECL( OP_LDRSH_POS_INDE_M_IMM_OFF), -/* 0000 0110 0000 */ TABDECL( OP_RSB_LSL_IMM), -/* 0000 0110 0001 */ TABDECL( OP_RSB_LSL_REG), -/* 0000 0110 0010 */ TABDECL( OP_RSB_LSR_IMM), -/* 0000 0110 0011 */ TABDECL( OP_RSB_LSR_REG), -/* 0000 0110 0100 */ TABDECL( OP_RSB_ASR_IMM), -/* 0000 0110 0101 */ TABDECL( OP_RSB_ASR_REG), -/* 0000 0110 0110 */ TABDECL( OP_RSB_ROR_IMM), -/* 0000 0110 0111 */ TABDECL( OP_RSB_ROR_REG), -/* 0000 0110 1000 */ TABDECL( OP_RSB_LSL_IMM), -/* 0000 0110 1001 */ TABDECL( OP_UND), -/* 0000 0110 1010 */ TABDECL( OP_RSB_LSR_IMM), // OOO OO11 O 1010 -/* 0000 0110 1011 */ TABDECL( OP_UND), -/* 0000 0110 1100 */ TABDECL( OP_RSB_ASR_IMM), -/* 0000 0110 1101 */ TABDECL( OP_UND), -/* 0000 0110 1110 */ TABDECL( OP_RSB_ROR_IMM), -/* 0000 0110 1111 */ TABDECL( OP_UND), -/* 0000 0111 0000 */ TABDECL( OP_RSB_S_LSL_IMM), -/* 0000 0111 0001 */ TABDECL( OP_RSB_S_LSL_REG), -/* 0000 0111 0010 */ TABDECL( OP_RSB_S_LSR_IMM), -/* 0000 0111 0011 */ TABDECL( OP_RSB_S_LSR_REG), -/* 0000 0111 0100 */ TABDECL( OP_RSB_S_ASR_IMM), -/* 0000 0111 0101 */ TABDECL( OP_RSB_S_ASR_REG), -/* 0000 0111 0110 */ TABDECL( OP_RSB_S_ROR_IMM), -/* 0000 0111 0111 */ TABDECL( OP_RSB_S_ROR_REG), -/* 0000 0111 1000 */ TABDECL( OP_RSB_S_LSL_IMM), -/* 0000 0111 1001 */ TABDECL( OP_UND), -/* 0000 0111 1010 */ TABDECL( OP_RSB_S_LSR_IMM), -/* 0000 0111 1011 */ TABDECL( OP_UND), -/* 0000 0111 1100 */ TABDECL( OP_RSB_S_ASR_IMM), -/* 0000 0111 1101 */ TABDECL( OP_UND), -/* 0000 0111 1110 */ TABDECL( OP_RSB_S_ROR_IMM), -/* 0000 0111 1111 */ TABDECL( OP_UND), -/* 0000 1000 0000 */ TABDECL( OP_ADD_LSL_IMM), -/* 0000 1000 0001 */ TABDECL( OP_ADD_LSL_REG), -/* 0000 1000 0010 */ TABDECL( OP_ADD_LSR_IMM), -/* 0000 1000 0011 */ TABDECL( OP_ADD_LSR_REG), -/* 0000 1000 0100 */ TABDECL( OP_ADD_ASR_IMM), -/* 0000 1000 0101 */ TABDECL( OP_ADD_ASR_REG), -/* 0000 1000 0110 */ TABDECL( OP_ADD_ROR_IMM), -/* 0000 1000 0111 */ TABDECL( OP_ADD_ROR_REG), -/* 0000 1000 1000 */ TABDECL( OP_ADD_LSL_IMM), -/* 0000 1000 1001 */ TABDECL( OP_UMULL), -/* 0000 1000 1010 */ TABDECL( OP_ADD_LSR_IMM), // OOO O10O O 1010 -/* 0000 1000 1011 */ TABDECL( OP_STRH_POS_INDE_P_REG_OFF), -/* 0000 1000 1100 */ TABDECL( OP_ADD_ASR_IMM), -/* 0000 1000 1101 */ TABDECL( OP_LDRD_STRD_POST_INDEX), -/* 0000 1000 1110 */ TABDECL( OP_ADD_ROR_IMM), -/* 0000 1000 1111 */ TABDECL( OP_LDRD_STRD_POST_INDEX), -/* 0000 1001 0000 */ TABDECL( OP_ADD_S_LSL_IMM), -/* 0000 1001 0001 */ TABDECL( OP_ADD_S_LSL_REG), -/* 0000 1001 0010 */ TABDECL( OP_ADD_S_LSR_IMM), -/* 0000 1001 0011 */ TABDECL( OP_ADD_S_LSR_REG), -/* 0000 1001 0100 */ TABDECL( OP_ADD_S_ASR_IMM), -/* 0000 1001 0101 */ TABDECL( OP_ADD_S_ASR_REG), -/* 0000 1001 0110 */ TABDECL( OP_ADD_S_ROR_IMM), -/* 0000 1001 0111 */ TABDECL( OP_ADD_S_ROR_REG), -/* 0000 1001 1000 */ TABDECL( OP_ADD_S_LSL_IMM), -/* 0000 1001 1001 */ TABDECL( OP_UMULL_S), -/* 0000 1001 1010 */ TABDECL( OP_ADD_S_LSR_IMM), -/* 0000 1001 1011 */ TABDECL( OP_LDRH_POS_INDE_P_REG_OFF), -/* 0000 1001 1100 */ TABDECL( OP_ADD_S_ASR_IMM), -/* 0000 1001 1101 */ TABDECL( OP_LDRSB_POS_INDE_P_REG_OFF), -/* 0000 1001 1110 */ TABDECL( OP_ADD_S_ROR_IMM), -/* 0000 1001 1111 */ TABDECL( OP_LDRSH_POS_INDE_P_REG_OFF), -/* 0000 1010 0000 */ TABDECL( OP_ADC_LSL_IMM), -/* 0000 1010 0001 */ TABDECL( OP_ADC_LSL_REG), -/* 0000 1010 0010 */ TABDECL( OP_ADC_LSR_IMM), -/* 0000 1010 0011 */ TABDECL( OP_ADC_LSR_REG), -/* 0000 1010 0100 */ TABDECL( OP_ADC_ASR_IMM), -/* 0000 1010 0101 */ TABDECL( OP_ADC_ASR_REG), -/* 0000 1010 0110 */ TABDECL( OP_ADC_ROR_IMM), -/* 0000 1010 0111 */ TABDECL( OP_ADC_ROR_REG), -/* 0000 1010 1000 */ TABDECL( OP_ADC_LSL_IMM), -/* 0000 1010 1001 */ TABDECL( OP_UMLAL), -/* 0000 1010 1010 */ TABDECL( OP_ADC_LSR_IMM), // OOO O101 O 1010 -/* 0000 1010 1011 */ TABDECL( OP_UND), -/* 0000 1010 1100 */ TABDECL( OP_ADC_ASR_IMM), -/* 0000 1010 1101 */ TABDECL( OP_UND), -/* 0000 1010 1110 */ TABDECL( OP_ADC_ROR_IMM), -/* 0000 1010 1111 */ TABDECL( OP_UND), -/* 0000 1011 0000 */ TABDECL( OP_ADC_S_LSL_IMM), -/* 0000 1011 0001 */ TABDECL( OP_ADC_S_LSL_REG), -/* 0000 1011 0010 */ TABDECL( OP_ADC_S_LSR_IMM), -/* 0000 1011 0011 */ TABDECL( OP_ADC_S_LSR_REG), -/* 0000 1011 0100 */ TABDECL( OP_ADC_S_ASR_IMM), -/* 0000 1011 0101 */ TABDECL( OP_ADC_S_ASR_REG), -/* 0000 1011 0110 */ TABDECL( OP_ADC_S_ROR_IMM), -/* 0000 1011 0111 */ TABDECL( OP_ADC_S_ROR_REG), -/* 0000 1011 1000 */ TABDECL( OP_ADC_S_LSL_IMM), -/* 0000 1011 1001 */ TABDECL( OP_UMLAL_S), -/* 0000 1011 1010 */ TABDECL( OP_ADC_S_LSR_IMM), -/* 0000 1011 1011 */ TABDECL( OP_UND), -/* 0000 1011 1100 */ TABDECL( OP_ADC_S_ASR_IMM), -/* 0000 1011 1101 */ TABDECL( OP_UND), -/* 0000 1011 1110 */ TABDECL( OP_ADC_S_ROR_IMM), -/* 0000 1011 1111 */ TABDECL( OP_UND), -/* 0000 1100 0000 */ TABDECL( OP_SBC_LSL_IMM), -/* 0000 1100 0001 */ TABDECL( OP_SBC_LSL_REG), -/* 0000 1100 0010 */ TABDECL( OP_SBC_LSR_IMM), -/* 0000 1100 0011 */ TABDECL( OP_SBC_LSR_REG), -/* 0000 1100 0100 */ TABDECL( OP_SBC_ASR_IMM), -/* 0000 1100 0101 */ TABDECL( OP_SBC_ASR_REG), -/* 0000 1100 0110 */ TABDECL( OP_SBC_ROR_IMM), -/* 0000 1100 0111 */ TABDECL( OP_SBC_ROR_REG), -/* 0000 1100 1000 */ TABDECL( OP_SBC_LSL_IMM), -/* 0000 1100 1001 */ TABDECL( OP_SMULL), -/* 0000 1100 1010 */ TABDECL( OP_SBC_LSR_IMM), // OOO O11O O 1010 -/* 0000 1100 1011 */ TABDECL( OP_STRH_POS_INDE_P_IMM_OFF), -/* 0000 1100 1100 */ TABDECL( OP_SBC_ASR_IMM), -/* 0000 1100 1101 */ TABDECL( OP_LDRD_STRD_POST_INDEX), -/* 0000 1100 1110 */ TABDECL( OP_SBC_ROR_IMM), -/* 0000 1100 1111 */ TABDECL( OP_LDRD_STRD_POST_INDEX), -/* 0000 1101 0000 */ TABDECL( OP_SBC_S_LSL_IMM), -/* 0000 1101 0001 */ TABDECL( OP_SBC_S_LSL_REG), -/* 0000 1101 0010 */ TABDECL( OP_SBC_S_LSR_IMM), -/* 0000 1101 0011 */ TABDECL( OP_SBC_S_LSR_REG), -/* 0000 1101 0100 */ TABDECL( OP_SBC_S_ASR_IMM), -/* 0000 1101 0101 */ TABDECL( OP_SBC_S_ASR_REG), -/* 0000 1101 0110 */ TABDECL( OP_SBC_S_ROR_IMM), -/* 0000 1101 0111 */ TABDECL( OP_SBC_S_ROR_REG), -/* 0000 1101 1000 */ TABDECL( OP_SBC_S_LSL_IMM), -/* 0000 1101 1001 */ TABDECL( OP_SMULL_S), -/* 0000 1101 1010 */ TABDECL( OP_SBC_S_LSR_IMM), -/* 0000 1101 1011 */ TABDECL( OP_LDRH_POS_INDE_P_IMM_OFF), -/* 0000 1101 1100 */ TABDECL( OP_SBC_S_ASR_IMM), -/* 0000 1101 1101 */ TABDECL( OP_LDRSB_POS_INDE_P_IMM_OFF), -/* 0000 1101 1110 */ TABDECL( OP_SBC_S_ROR_IMM), -/* 0000 1101 1111 */ TABDECL( OP_LDRSH_POS_INDE_P_IMM_OFF), -/* 0000 1110 0000 */ TABDECL( OP_RSC_LSL_IMM), -/* 0000 1110 0001 */ TABDECL( OP_RSC_LSL_REG), -/* 0000 1110 0010 */ TABDECL( OP_RSC_LSR_IMM), -/* 0000 1110 0011 */ TABDECL( OP_RSC_LSR_REG), -/* 0000 1110 0100 */ TABDECL( OP_RSC_ASR_IMM), -/* 0000 1110 0101 */ TABDECL( OP_RSC_ASR_REG), -/* 0000 1110 0110 */ TABDECL( OP_RSC_ROR_IMM), -/* 0000 1110 0111 */ TABDECL( OP_RSC_ROR_REG), -/* 0000 1110 1000 */ TABDECL( OP_RSC_LSL_IMM), -/* 0000 1110 1001 */ TABDECL( OP_SMLAL), -/* 0000 1110 1010 */ TABDECL( OP_RSC_LSR_IMM), // OOO O111 O 1010 -/* 0000 1110 1011 */ TABDECL( OP_UND), -/* 0000 1110 1100 */ TABDECL( OP_RSC_ASR_IMM), -/* 0000 1110 1101 */ TABDECL( OP_UND), -/* 0000 1110 1110 */ TABDECL( OP_RSC_ROR_IMM), -/* 0000 1110 1111 */ TABDECL( OP_UND), -/* 0000 1111 0000 */ TABDECL( OP_RSC_S_LSL_IMM), -/* 0000 1111 0001 */ TABDECL( OP_RSC_S_LSL_REG), -/* 0000 1111 0010 */ TABDECL( OP_RSC_S_LSR_IMM), -/* 0000 1111 0011 */ TABDECL( OP_RSC_S_LSR_REG), -/* 0000 1111 0100 */ TABDECL( OP_RSC_S_ASR_IMM), -/* 0000 1111 0101 */ TABDECL( OP_RSC_S_ASR_REG), -/* 0000 1111 0110 */ TABDECL( OP_RSC_S_ROR_IMM), -/* 0000 1111 0111 */ TABDECL( OP_RSC_S_ROR_REG), -/* 0000 1111 1000 */ TABDECL( OP_RSC_S_LSL_IMM), -/* 0000 1111 1001 */ TABDECL( OP_SMLAL_S), -/* 0000 1111 1010 */ TABDECL( OP_RSC_S_LSR_IMM), -/* 0000 1111 1011 */ TABDECL( OP_UND), -/* 0000 1111 1100 */ TABDECL( OP_RSC_S_ASR_IMM), -/* 0000 1111 1101 */ TABDECL( OP_UND), -/* 0000 1111 1110 */ TABDECL( OP_RSC_S_ROR_IMM), -/* 0000 1111 1111 */ TABDECL( OP_UND), -/* 0001 0000 0000 */ TABDECL( OP_MRS_CPSR), -/* 0001 0000 0001 */ TABDECL( OP_UND), -/* 0001 0000 0010 */ TABDECL( OP_UND), -/* 0001 0000 0011 */ TABDECL( OP_UND), -/* 0001 0000 0100 */ TABDECL( OP_UND), -/* 0001 0000 0101 */ TABDECL( OP_QADD), -/* 0001 0000 0110 */ TABDECL( OP_UND), -/* 0001 0000 0111 */ TABDECL( OP_UND), -/* 0001 0000 1000 */ TABDECL( OP_SMLA_B_B), -/* 0001 0000 1001 */ TABDECL( OP_SWP), -/* 0001 0000 1010 */ TABDECL( OP_SMLA_T_B), -/* 0001 0000 1011 */ TABDECL( OP_STRH_M_REG_OFF), -/* 0001 0000 1100 */ TABDECL( OP_SMLA_B_T), -/* 0001 0000 1101 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 0000 1110 */ TABDECL( OP_SMLA_T_T), -/* 0001 0000 1111 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 0001 0000 */ TABDECL( OP_TST_LSL_IMM), -/* 0001 0001 0001 */ TABDECL( OP_TST_LSL_REG), -/* 0001 0001 0010 */ TABDECL( OP_TST_LSR_IMM), -/* 0001 0001 0011 */ TABDECL( OP_TST_LSR_REG), -/* 0001 0001 0100 */ TABDECL( OP_TST_ASR_IMM), -/* 0001 0001 0101 */ TABDECL( OP_TST_ASR_REG), -/* 0001 0001 0110 */ TABDECL( OP_TST_ROR_IMM), -/* 0001 0001 0111 */ TABDECL( OP_TST_ROR_REG), -/* 0001 0001 1000 */ TABDECL( OP_TST_LSL_IMM), -/* 0001 0001 1001 */ TABDECL( OP_UND), -/* 0001 0001 1010 */ TABDECL( OP_TST_LSR_IMM), // OOO 100O 1 1010 -/* 0001 0001 1011 */ TABDECL( OP_LDRH_M_REG_OFF), -/* 0001 0001 1100 */ TABDECL( OP_TST_ASR_IMM), -/* 0001 0001 1101 */ TABDECL( OP_LDRSB_M_REG_OFF), -/* 0001 0001 1110 */ TABDECL( OP_TST_ROR_IMM), -/* 0001 0001 1111 */ TABDECL( OP_LDRSH_M_REG_OFF), -/* 0001 0010 0000 */ TABDECL( OP_MSR_CPSR), -/* 0001 0010 0001 */ TABDECL( OP_BX), -/* 0001 0010 0010 */ TABDECL( OP_UND), -/* 0001 0010 0011 */ TABDECL( OP_BLX_REG), -/* 0001 0010 0100 */ TABDECL( OP_UND), -/* 0001 0010 0101 */ TABDECL( OP_QSUB), -/* 0001 0010 0110 */ TABDECL( OP_UND), -/* 0001 0010 0111 */ TABDECL( OP_BKPT), -/* 0001 0010 1000 */ TABDECL( OP_SMLAW_B), -/* 0001 0010 1001 */ TABDECL( OP_UND), -/* 0001 0010 1010 */ TABDECL( OP_SMULW_B), -/* 0001 0010 1011 */ TABDECL( OP_STRH_PRE_INDE_M_REG_OFF), -/* 0001 0010 1100 */ TABDECL( OP_SMLAW_T), -/* 0001 0010 1101 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 0010 1110 */ TABDECL( OP_SMULW_T), -/* 0001 0010 1111 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 0011 0000 */ TABDECL( OP_TEQ_LSL_IMM), -/* 0001 0011 0001 */ TABDECL( OP_TEQ_LSL_REG), -/* 0001 0011 0010 */ TABDECL( OP_TEQ_LSR_IMM), -/* 0001 0011 0011 */ TABDECL( OP_TEQ_LSR_REG), -/* 0001 0011 0100 */ TABDECL( OP_TEQ_ASR_IMM), -/* 0001 0011 0101 */ TABDECL( OP_TEQ_ASR_REG), -/* 0001 0011 0110 */ TABDECL( OP_TEQ_ROR_IMM), -/* 0001 0011 0111 */ TABDECL( OP_TEQ_ROR_REG), -/* 0001 0011 1000 */ TABDECL( OP_TEQ_LSL_IMM), -/* 0001 0011 1001 */ TABDECL( OP_UND), -/* 0001 0011 1010 */ TABDECL( OP_TEQ_LSR_IMM), // OOO 1001 1 1010 -/* 0001 0011 1011 */ TABDECL( OP_LDRH_PRE_INDE_M_REG_OFF), -/* 0001 0011 1100 */ TABDECL( OP_TEQ_ASR_IMM), -/* 0001 0011 1101 */ TABDECL( OP_LDRSB_PRE_INDE_M_REG_OFF), -/* 0001 0011 1110 */ TABDECL( OP_TEQ_ROR_IMM), -/* 0001 0011 1111 */ TABDECL( OP_LDRSH_PRE_INDE_M_REG_OFF), -/* 0001 0100 0000 */ TABDECL( OP_MRS_SPSR), -/* 0001 0100 0001 */ TABDECL( OP_UND), -/* 0001 0100 0010 */ TABDECL( OP_UND), -/* 0001 0100 0011 */ TABDECL( OP_UND), -/* 0001 0100 0100 */ TABDECL( OP_UND), -/* 0001 0100 0101 */ TABDECL( OP_QDADD), -/* 0001 0100 0110 */ TABDECL( OP_UND), -/* 0001 0100 0111 */ TABDECL( OP_UND), -/* 0001 0100 1000 */ TABDECL( OP_SMLAL_B_B), -/* 0001 0100 1001 */ TABDECL( OP_SWPB), -/* 0001 0100 1010 */ TABDECL( OP_SMLAL_T_B), -/* 0001 0100 1011 */ TABDECL( OP_STRH_M_IMM_OFF), -/* 0001 0100 1100 */ TABDECL( OP_SMLAL_B_T), -/* 0001 0100 1101 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 0100 1110 */ TABDECL( OP_SMLAL_T_T), -/* 0001 0100 1111 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 0101 0000 */ TABDECL( OP_CMP_LSL_IMM), -/* 0001 0101 0001 */ TABDECL( OP_CMP_LSL_REG), -/* 0001 0101 0010 */ TABDECL( OP_CMP_LSR_IMM), -/* 0001 0101 0011 */ TABDECL( OP_CMP_LSR_REG), -/* 0001 0101 0100 */ TABDECL( OP_CMP_ASR_IMM), -/* 0001 0101 0101 */ TABDECL( OP_CMP_ASR_REG), -/* 0001 0101 0110 */ TABDECL( OP_CMP_ROR_IMM), -/* 0001 0101 0111 */ TABDECL( OP_CMP_ROR_REG), -/* 0001 0101 1000 */ TABDECL( OP_CMP_LSL_IMM), -/* 0001 0101 1001 */ TABDECL( OP_UND), -/* 0001 0101 1010 */ TABDECL( OP_CMP_LSR_IMM), // OOO 1O1O 1 1010 -/* 0001 0101 1011 */ TABDECL( OP_LDRH_M_IMM_OFF), -/* 0001 0101 1100 */ TABDECL( OP_CMP_ASR_IMM), -/* 0001 0101 1101 */ TABDECL( OP_LDRSB_M_IMM_OFF), -/* 0001 0101 1110 */ TABDECL( OP_CMP_ROR_IMM), -/* 0001 0101 1111 */ TABDECL( OP_LDRSH_M_IMM_OFF), -/* 0001 0110 0000 */ TABDECL( OP_MSR_SPSR), -/* 0001 0110 0001 */ TABDECL( OP_CLZ), -/* 0001 0110 0010 */ TABDECL( OP_UND), -/* 0001 0110 0011 */ TABDECL( OP_UND), -/* 0001 0110 0100 */ TABDECL( OP_UND), -/* 0001 0110 0101 */ TABDECL( OP_QDSUB), -/* 0001 0110 0110 */ TABDECL( OP_UND), -/* 0001 0110 0111 */ TABDECL( OP_UND), -/* 0001 0110 1000 */ TABDECL( OP_SMUL_B_B), -/* 0001 0110 1001 */ TABDECL( OP_UND), -/* 0001 0110 1010 */ TABDECL( OP_SMUL_T_B), -/* 0001 0110 1011 */ TABDECL( OP_STRH_PRE_INDE_M_IMM_OFF), -/* 0001 0110 1100 */ TABDECL( OP_SMUL_B_T), -/* 0001 0110 1101 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 0110 1110 */ TABDECL( OP_SMUL_T_T), -/* 0001 0110 1111 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 0111 0000 */ TABDECL( OP_CMN_LSL_IMM), -/* 0001 0111 0001 */ TABDECL( OP_CMN_LSL_REG), -/* 0001 0111 0010 */ TABDECL( OP_CMN_LSR_IMM), -/* 0001 0111 0011 */ TABDECL( OP_CMN_LSR_REG), -/* 0001 0111 0100 */ TABDECL( OP_CMN_ASR_IMM), -/* 0001 0111 0101 */ TABDECL( OP_CMN_ASR_REG), -/* 0001 0111 0110 */ TABDECL( OP_CMN_ROR_IMM), -/* 0001 0111 0111 */ TABDECL( OP_CMN_ROR_REG), -/* 0001 0111 1000 */ TABDECL( OP_CMN_LSL_IMM), -/* 0001 0111 1001 */ TABDECL( OP_UND), -/* 0001 0111 1010 */ TABDECL( OP_CMN_LSR_IMM), // OOO 1O11 1 1010 -/* 0001 0111 1011 */ TABDECL( OP_LDRH_PRE_INDE_M_IMM_OFF), -/* 0001 0111 1100 */ TABDECL( OP_CMN_ASR_IMM), -/* 0001 0111 1101 */ TABDECL( OP_LDRSB_PRE_INDE_M_IMM_OFF), -/* 0001 0111 1110 */ TABDECL( OP_CMN_ROR_IMM), -/* 0001 0111 1111 */ TABDECL( OP_LDRSH_PRE_INDE_M_IMM_OFF), -/* 0001 1000 0000 */ TABDECL( OP_ORR_LSL_IMM), -/* 0001 1000 0001 */ TABDECL( OP_ORR_LSL_REG), -/* 0001 1000 0010 */ TABDECL( OP_ORR_LSR_IMM), -/* 0001 1000 0011 */ TABDECL( OP_ORR_LSR_REG), -/* 0001 1000 0100 */ TABDECL( OP_ORR_ASR_IMM), -/* 0001 1000 0101 */ TABDECL( OP_ORR_ASR_REG), -/* 0001 1000 0110 */ TABDECL( OP_ORR_ROR_IMM), -/* 0001 1000 0111 */ TABDECL( OP_ORR_ROR_REG), -/* 0001 1000 1000 */ TABDECL( OP_ORR_LSL_IMM), -/* 0001 1000 1001 */ TABDECL( OP_UND), -/* 0001 1000 1010 */ TABDECL( OP_ORR_LSR_IMM), // OOO 110O O 1010 -/* 0001 1000 1011 */ TABDECL( OP_STRH_P_REG_OFF), -/* 0001 1000 1100 */ TABDECL( OP_ORR_ASR_IMM), -/* 0001 1000 1101 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 1000 1110 */ TABDECL( OP_ORR_ROR_IMM), -/* 0001 1000 1111 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 1001 0000 */ TABDECL( OP_ORR_S_LSL_IMM), -/* 0001 1001 0001 */ TABDECL( OP_ORR_S_LSL_REG), -/* 0001 1001 0010 */ TABDECL( OP_ORR_S_LSR_IMM), -/* 0001 1001 0011 */ TABDECL( OP_ORR_S_LSR_REG), -/* 0001 1001 0100 */ TABDECL( OP_ORR_S_ASR_IMM), -/* 0001 1001 0101 */ TABDECL( OP_ORR_S_ASR_REG), -/* 0001 1001 0110 */ TABDECL( OP_ORR_S_ROR_IMM), -/* 0001 1001 0111 */ TABDECL( OP_ORR_S_ROR_REG), -/* 0001 1001 1000 */ TABDECL( OP_ORR_S_LSL_IMM), -/* 0001 1001 1001 */ TABDECL( OP_UND), -/* 0001 1001 1010 */ TABDECL( OP_ORR_S_LSR_IMM), -/* 0001 1001 1011 */ TABDECL( OP_LDRH_P_REG_OFF), -/* 0001 1001 1100 */ TABDECL( OP_ORR_S_ASR_IMM), -/* 0001 1001 1101 */ TABDECL( OP_LDRSB_P_REG_OFF), -/* 0001 1001 1110 */ TABDECL( OP_ORR_S_ROR_IMM), -/* 0001 1001 1111 */ TABDECL( OP_LDRSH_P_REG_OFF), -/* 0001 1010 0000 */ TABDECL( OP_MOV_LSL_IMM), -/* 0001 1010 0001 */ TABDECL( OP_MOV_LSL_REG), -/* 0001 1010 0010 */ TABDECL( OP_MOV_LSR_IMM), -/* 0001 1010 0011 */ TABDECL( OP_MOV_LSR_REG), -/* 0001 1010 0100 */ TABDECL( OP_MOV_ASR_IMM), -/* 0001 1010 0101 */ TABDECL( OP_MOV_ASR_REG), -/* 0001 1010 0110 */ TABDECL( OP_MOV_ROR_IMM), -/* 0001 1010 0111 */ TABDECL( OP_MOV_ROR_REG), -/* 0001 1010 1000 */ TABDECL( OP_MOV_LSL_IMM), -/* 0001 1010 1001 */ TABDECL( OP_UND), -/* 0001 1010 1010 */ TABDECL( OP_MOV_LSR_IMM), // OOO 1101 O 1010 -/* 0001 1010 1011 */ TABDECL( OP_STRH_PRE_INDE_P_REG_OFF), -/* 0001 1010 1100 */ TABDECL( OP_MOV_ASR_IMM), -/* 0001 1010 1101 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 1010 1110 */ TABDECL( OP_MOV_ROR_IMM), -/* 0001 1010 1111 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 1011 0000 */ TABDECL( OP_MOV_S_LSL_IMM), -/* 0001 1011 0001 */ TABDECL( OP_MOV_S_LSL_REG), -/* 0001 1011 0010 */ TABDECL( OP_MOV_S_LSR_IMM), -/* 0001 1011 0011 */ TABDECL( OP_MOV_S_LSR_REG), -/* 0001 1011 0100 */ TABDECL( OP_MOV_S_ASR_IMM), -/* 0001 1011 0101 */ TABDECL( OP_MOV_S_ASR_REG), -/* 0001 1011 0110 */ TABDECL( OP_MOV_S_ROR_IMM), -/* 0001 1011 0111 */ TABDECL( OP_MOV_S_ROR_REG), -/* 0001 1011 1000 */ TABDECL( OP_MOV_S_LSL_IMM), -/* 0001 1011 1001 */ TABDECL( OP_UND), -/* 0001 1011 1010 */ TABDECL( OP_MOV_S_LSR_IMM), -/* 0001 1011 1011 */ TABDECL( OP_LDRH_PRE_INDE_P_REG_OFF), -/* 0001 1011 1100 */ TABDECL( OP_MOV_S_ASR_IMM), -/* 0001 1011 1101 */ TABDECL( OP_LDRSB_PRE_INDE_P_REG_OFF), -/* 0001 1011 1110 */ TABDECL( OP_MOV_S_ROR_IMM), -/* 0001 1011 1111 */ TABDECL( OP_LDRSH_PRE_INDE_P_REG_OFF), -/* 0001 1100 0000 */ TABDECL( OP_BIC_LSL_IMM), -/* 0001 1100 0001 */ TABDECL( OP_BIC_LSL_REG), -/* 0001 1100 0010 */ TABDECL( OP_BIC_LSR_IMM), -/* 0001 1100 0011 */ TABDECL( OP_BIC_LSR_REG), -/* 0001 1100 0100 */ TABDECL( OP_BIC_ASR_IMM), -/* 0001 1100 0101 */ TABDECL( OP_BIC_ASR_REG), -/* 0001 1100 0110 */ TABDECL( OP_BIC_ROR_IMM), -/* 0001 1100 0111 */ TABDECL( OP_BIC_ROR_REG), -/* 0001 1100 1000 */ TABDECL( OP_BIC_LSL_IMM), -/* 0001 1100 1001 */ TABDECL( OP_UND), -/* 0001 1100 1010 */ TABDECL( OP_BIC_LSR_IMM), // OOO 111O O 1010 -/* 0001 1100 1011 */ TABDECL( OP_STRH_P_IMM_OFF), -/* 0001 1100 1100 */ TABDECL( OP_BIC_ASR_IMM), -/* 0001 1100 1101 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 1100 1110 */ TABDECL( OP_BIC_ROR_IMM), -/* 0001 1100 1111 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 1101 0000 */ TABDECL( OP_BIC_S_LSL_IMM), -/* 0001 1101 0001 */ TABDECL( OP_BIC_S_LSL_REG), -/* 0001 1101 0010 */ TABDECL( OP_BIC_S_LSR_IMM), -/* 0001 1101 0011 */ TABDECL( OP_BIC_S_LSR_REG), -/* 0001 1101 0100 */ TABDECL( OP_BIC_S_ASR_IMM), -/* 0001 1101 0101 */ TABDECL( OP_BIC_S_ASR_REG), -/* 0001 1101 0110 */ TABDECL( OP_BIC_S_ROR_IMM), -/* 0001 1101 0111 */ TABDECL( OP_BIC_S_ROR_REG), -/* 0001 1101 1000 */ TABDECL( OP_BIC_S_LSL_IMM), -/* 0001 1101 1001 */ TABDECL( OP_UND), -/* 0001 1101 1010 */ TABDECL( OP_BIC_S_LSR_IMM), -/* 0001 1101 1011 */ TABDECL( OP_LDRH_P_IMM_OFF), -/* 0001 1101 1100 */ TABDECL( OP_BIC_S_ASR_IMM), -/* 0001 1101 1101 */ TABDECL( OP_LDRSB_P_IMM_OFF), -/* 0001 1101 1110 */ TABDECL( OP_BIC_S_ROR_IMM), -/* 0001 1101 1111 */ TABDECL( OP_LDRSH_P_IMM_OFF), -/* 0001 1110 0000 */ TABDECL( OP_MVN_LSL_IMM), -/* 0001 1110 0001 */ TABDECL( OP_MVN_LSL_REG), -/* 0001 1110 0010 */ TABDECL( OP_MVN_LSR_IMM), -/* 0001 1110 0011 */ TABDECL( OP_MVN_LSR_REG), -/* 0001 1110 0100 */ TABDECL( OP_MVN_ASR_IMM), -/* 0001 1110 0101 */ TABDECL( OP_MVN_ASR_REG), -/* 0001 1110 0110 */ TABDECL( OP_MVN_ROR_IMM), -/* 0001 1110 0111 */ TABDECL( OP_MVN_ROR_REG), -/* 0001 1110 1000 */ TABDECL( OP_MVN_LSL_IMM), -/* 0001 1110 1001 */ TABDECL( OP_UND), -/* 0001 1110 1010 */ TABDECL( OP_MVN_LSR_IMM), // OOO 1111 O 1010 -/* 0001 1110 1011 */ TABDECL( OP_STRH_PRE_INDE_P_IMM_OFF), -/* 0001 1110 1100 */ TABDECL( OP_MVN_ASR_IMM), -/* 0001 1110 1101 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 1110 1110 */ TABDECL( OP_MVN_ROR_IMM), -/* 0001 1110 1111 */ TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), -/* 0001 1111 0000 */ TABDECL( OP_MVN_S_LSL_IMM), -/* 0001 1111 0001 */ TABDECL( OP_MVN_S_LSL_REG), -/* 0001 1111 0010 */ TABDECL( OP_MVN_S_LSR_IMM), -/* 0001 1111 0011 */ TABDECL( OP_MVN_S_LSR_REG), -/* 0001 1111 0100 */ TABDECL( OP_MVN_S_ASR_IMM), -/* 0001 1111 0101 */ TABDECL( OP_MVN_S_ASR_REG), -/* 0001 1111 0110 */ TABDECL( OP_MVN_S_ROR_IMM), -/* 0001 1111 0111 */ TABDECL( OP_MVN_S_ROR_REG), -/* 0001 1111 1000 */ TABDECL( OP_MVN_S_LSL_IMM), -/* 0001 1111 1001 */ TABDECL( OP_UND), -/* 0001 1111 1010 */ TABDECL( OP_MVN_S_LSR_IMM), -/* 0001 1111 1011 */ TABDECL( OP_LDRH_PRE_INDE_P_IMM_OFF), -/* 0001 1111 1100 */ TABDECL( OP_MVN_S_ASR_IMM), -/* 0001 1111 1101 */ TABDECL( OP_LDRSB_PRE_INDE_P_IMM_OFF), -/* 0001 1111 1110 */ TABDECL( OP_MVN_S_ROR_IMM), -/* 0001 1111 1111 */ TABDECL( OP_LDRSH_PRE_INDE_P_IMM_OFF), -/* 0010 0000 0000 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 0001 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 0010 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 0011 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 0100 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 0101 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 0110 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 0111 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 1000 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 1001 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 1010 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 1011 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 1100 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 1101 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 1110 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0000 1111 */ TABDECL( OP_AND_IMM_VAL), -/* 0010 0001 0000 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 0001 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 0010 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 0011 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 0100 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 0101 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 0110 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 0111 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 1000 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 1001 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 1010 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 1011 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 1100 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 1101 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 1110 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0001 1111 */ TABDECL( OP_AND_S_IMM_VAL), -/* 0010 0010 0000 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 0001 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 0010 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 0011 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 0100 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 0101 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 0110 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 0111 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 1000 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 1001 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 1010 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 1011 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 1100 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 1101 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 1110 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0010 1111 */ TABDECL( OP_EOR_IMM_VAL), -/* 0010 0011 0000 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 0001 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 0010 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 0011 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 0100 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 0101 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 0110 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 0111 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 1000 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 1001 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 1010 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 1011 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 1100 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 1101 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 1110 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0011 1111 */ TABDECL( OP_EOR_S_IMM_VAL), -/* 0010 0100 0000 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 0001 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 0010 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 0011 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 0100 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 0101 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 0110 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 0111 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 1000 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 1001 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 1010 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 1011 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 1100 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 1101 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 1110 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0100 1111 */ TABDECL( OP_SUB_IMM_VAL), -/* 0010 0101 0000 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 0001 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 0010 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 0011 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 0100 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 0101 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 0110 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 0111 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 1000 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 1001 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 1010 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 1011 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 1100 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 1101 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 1110 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0101 1111 */ TABDECL( OP_SUB_S_IMM_VAL), -/* 0010 0110 0000 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 0001 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 0010 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 0011 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 0100 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 0101 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 0110 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 0111 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 1000 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 1001 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 1010 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 1011 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 1100 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 1101 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 1110 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0110 1111 */ TABDECL( OP_RSB_IMM_VAL), -/* 0010 0111 0000 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 0001 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 0010 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 0011 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 0100 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 0101 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 0110 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 0111 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 1000 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 1001 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 1010 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 1011 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 1100 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 1101 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 1110 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 0111 1111 */ TABDECL( OP_RSB_S_IMM_VAL), -/* 0010 1000 0000 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 0001 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 0010 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 0011 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 0100 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 0101 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 0110 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 0111 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 1000 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 1001 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 1010 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 1011 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 1100 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 1101 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 1110 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1000 1111 */ TABDECL( OP_ADD_IMM_VAL), -/* 0010 1001 0000 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 0001 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 0010 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 0011 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 0100 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 0101 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 0110 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 0111 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 1000 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 1001 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 1010 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 1011 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 1100 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 1101 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 1110 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1001 1111 */ TABDECL( OP_ADD_S_IMM_VAL), -/* 0010 1010 0000 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 0001 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 0010 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 0011 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 0100 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 0101 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 0110 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 0111 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 1000 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 1001 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 1010 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 1011 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 1100 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 1101 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 1110 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1010 1111 */ TABDECL( OP_ADC_IMM_VAL), -/* 0010 1011 0000 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 0001 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 0010 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 0011 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 0100 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 0101 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 0110 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 0111 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 1000 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 1001 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 1010 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 1011 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 1100 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 1101 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 1110 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1011 1111 */ TABDECL( OP_ADC_S_IMM_VAL), -/* 0010 1100 0000 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 0001 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 0010 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 0011 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 0100 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 0101 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 0110 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 0111 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 1000 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 1001 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 1010 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 1011 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 1100 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 1101 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 1110 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1100 1111 */ TABDECL( OP_SBC_IMM_VAL), -/* 0010 1101 0000 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 0001 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 0010 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 0011 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 0100 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 0101 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 0110 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 0111 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 1000 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 1001 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 1010 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 1011 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 1100 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 1101 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 1110 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1101 1111 */ TABDECL( OP_SBC_S_IMM_VAL), -/* 0010 1110 0000 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 0001 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 0010 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 0011 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 0100 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 0101 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 0110 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 0111 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 1000 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 1001 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 1010 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 1011 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 1100 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 1101 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 1110 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1110 1111 */ TABDECL( OP_RSC_IMM_VAL), -/* 0010 1111 0000 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 0001 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 0010 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 0011 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 0100 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 0101 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 0110 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 0111 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 1000 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 1001 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 1010 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 1011 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 1100 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 1101 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 1110 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0010 1111 1111 */ TABDECL( OP_RSC_S_IMM_VAL), -/* 0011 0000 0000 */ TABDECL( OP_UND), -/* 0011 0000 0001 */ TABDECL( OP_UND), -/* 0011 0000 0010 */ TABDECL( OP_UND), -/* 0011 0000 0011 */ TABDECL( OP_UND), -/* 0011 0000 0100 */ TABDECL( OP_UND), -/* 0011 0000 0101 */ TABDECL( OP_UND), -/* 0011 0000 0110 */ TABDECL( OP_UND), -/* 0011 0000 0111 */ TABDECL( OP_UND), -/* 0011 0000 1000 */ TABDECL( OP_UND), -/* 0011 0000 1001 */ TABDECL( OP_UND), -/* 0011 0000 1010 */ TABDECL( OP_UND), -/* 0011 0000 1011 */ TABDECL( OP_UND), -/* 0011 0000 1100 */ TABDECL( OP_UND), -/* 0011 0000 1101 */ TABDECL( OP_UND), -/* 0011 0000 1110 */ TABDECL( OP_UND), -/* 0011 0000 1111 */ TABDECL( OP_UND), -/* 0011 0001 0000 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 0001 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 0010 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 0011 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 0100 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 0101 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 0110 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 0111 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 1000 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 1001 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 1010 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 1011 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 1100 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 1101 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 1110 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0001 1111 */ TABDECL( OP_TST_IMM_VAL), -/* 0011 0010 0000 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 0001 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 0010 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 0011 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 0100 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 0101 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 0110 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 0111 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 1000 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 1001 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 1010 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 1011 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 1100 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 1101 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 1110 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0010 1111 */ TABDECL( OP_MSR_CPSR_IMM_VAL), -/* 0011 0011 0000 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 0001 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 0010 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 0011 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 0100 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 0101 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 0110 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 0111 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 1000 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 1001 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 1010 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 1011 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 1100 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 1101 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 1110 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0011 1111 */ TABDECL( OP_TEQ_IMM_VAL), -/* 0011 0100 0000 */ TABDECL( OP_UND), -/* 0011 0100 0001 */ TABDECL( OP_UND), -/* 0011 0100 0010 */ TABDECL( OP_UND), -/* 0011 0100 0011 */ TABDECL( OP_UND), -/* 0011 0100 0100 */ TABDECL( OP_UND), -/* 0011 0100 0101 */ TABDECL( OP_UND), -/* 0011 0100 0110 */ TABDECL( OP_UND), -/* 0011 0100 0111 */ TABDECL( OP_UND), -/* 0011 0100 1000 */ TABDECL( OP_UND), -/* 0011 0100 1001 */ TABDECL( OP_UND), -/* 0011 0100 1010 */ TABDECL( OP_UND), -/* 0011 0100 1011 */ TABDECL( OP_UND), -/* 0011 0100 1100 */ TABDECL( OP_UND), -/* 0011 0100 1101 */ TABDECL( OP_UND), -/* 0011 0100 1110 */ TABDECL( OP_UND), -/* 0011 0100 1111 */ TABDECL( OP_UND), -/* 0011 0101 0000 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 0001 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 0010 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 0011 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 0100 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 0101 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 0110 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 0111 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 1000 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 1001 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 1010 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 1011 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 1100 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 1101 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 1110 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0101 1111 */ TABDECL( OP_CMP_IMM_VAL), -/* 0011 0110 0000 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 0001 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 0010 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 0011 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 0100 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 0101 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 0110 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 0111 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 1000 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 1001 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 1010 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 1011 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 1100 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 1101 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 1110 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0110 1111 */ TABDECL( OP_MSR_SPSR_IMM_VAL), -/* 0011 0111 0000 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 0001 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 0010 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 0011 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 0100 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 0101 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 0110 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 0111 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 1000 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 1001 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 1010 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 1011 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 1100 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 1101 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 1110 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 0111 1111 */ TABDECL( OP_CMN_IMM_VAL), -/* 0011 1000 0000 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 0001 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 0010 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 0011 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 0100 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 0101 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 0110 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 0111 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 1000 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 1001 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 1010 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 1011 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 1100 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 1101 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 1110 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1000 1111 */ TABDECL( OP_ORR_IMM_VAL), -/* 0011 1001 0000 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 0001 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 0010 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 0011 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 0100 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 0101 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 0110 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 0111 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 1000 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 1001 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 1010 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 1011 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 1100 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 1101 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 1110 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1001 1111 */ TABDECL( OP_ORR_S_IMM_VAL), -/* 0011 1010 0000 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 0001 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 0010 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 0011 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 0100 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 0101 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 0110 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 0111 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 1000 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 1001 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 1010 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 1011 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 1100 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 1101 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 1110 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1010 1111 */ TABDECL( OP_MOV_IMM_VAL), -/* 0011 1011 0000 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 0001 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 0010 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 0011 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 0100 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 0101 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 0110 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 0111 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 1000 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 1001 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 1010 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 1011 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 1100 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 1101 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 1110 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1011 1111 */ TABDECL( OP_MOV_S_IMM_VAL), -/* 0011 1100 0000 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 0001 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 0010 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 0011 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 0100 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 0101 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 0110 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 0111 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 1000 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 1001 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 1010 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 1011 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 1100 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 1101 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 1110 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1100 1111 */ TABDECL( OP_BIC_IMM_VAL), -/* 0011 1101 0000 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 0001 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 0010 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 0011 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 0100 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 0101 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 0110 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 0111 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 1000 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 1001 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 1010 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 1011 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 1100 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 1101 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 1110 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1101 1111 */ TABDECL( OP_BIC_S_IMM_VAL), -/* 0011 1110 0000 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 0001 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 0010 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 0011 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 0100 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 0101 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 0110 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 0111 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 1000 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 1001 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 1010 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 1011 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 1100 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 1101 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 1110 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1110 1111 */ TABDECL( OP_MVN_IMM_VAL), -/* 0011 1111 0000 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 0001 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 0010 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 0011 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 0100 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 0101 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 0110 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 0111 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 1000 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 1001 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 1010 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 1011 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 1100 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 1101 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 1110 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0011 1111 1111 */ TABDECL( OP_MVN_S_IMM_VAL), -/* 0100 0000 0000 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 0001 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 0010 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 0011 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 0100 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 0101 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 0110 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 0111 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 1000 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 1001 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 1010 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 1011 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 1100 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 1101 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 1110 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0000 1111 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0001 0000 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 0001 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 0010 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 0011 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 0100 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 0101 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 0110 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 0111 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 1000 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 1001 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 1010 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 1011 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 1100 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 1101 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 1110 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0001 1111 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0010 0000 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 0001 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 0010 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 0011 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 0100 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 0101 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 0110 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 0111 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 1000 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 1001 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 1010 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 1011 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 1100 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 1101 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 1110 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0010 1111 */ TABDECL( OP_STR_M_IMM_OFF_POSTIND), -/* 0100 0011 0000 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 0001 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 0010 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 0011 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 0100 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 0101 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 0110 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 0111 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 1000 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 1001 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 1010 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 1011 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 1100 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 1101 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 1110 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0011 1111 */ TABDECL( OP_LDR_M_IMM_OFF_POSTIND), -/* 0100 0100 0000 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 0001 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 0010 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 0011 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 0100 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 0101 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 0110 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 0111 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 1000 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 1001 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 1010 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 1011 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 1100 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 1101 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 1110 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0100 1111 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0101 0000 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 0001 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 0010 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 0011 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 0100 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 0101 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 0110 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 0111 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 1000 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 1001 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 1010 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 1011 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 1100 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 1101 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 1110 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0101 1111 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0110 0000 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 0001 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 0010 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 0011 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 0100 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 0101 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 0110 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 0111 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 1000 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 1001 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 1010 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 1011 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 1100 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 1101 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 1110 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0110 1111 */ TABDECL( OP_STRB_M_IMM_OFF_POSTIND), -/* 0100 0111 0000 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 0001 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 0010 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 0011 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 0100 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 0101 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 0110 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 0111 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 1000 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 1001 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 1010 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 1011 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 1100 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 1101 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 1110 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 0111 1111 */ TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), -/* 0100 1000 0000 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 0001 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 0010 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 0011 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 0100 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 0101 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 0110 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 0111 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 1000 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 1001 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 1010 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 1011 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 1100 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 1101 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 1110 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1000 1111 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1001 0000 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 0001 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 0010 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 0011 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 0100 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 0101 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 0110 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 0111 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 1000 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 1001 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 1010 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 1011 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 1100 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 1101 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 1110 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1001 1111 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1010 0000 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 0001 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 0010 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 0011 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 0100 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 0101 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 0110 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 0111 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 1000 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 1001 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 1010 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 1011 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 1100 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 1101 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 1110 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1010 1111 */ TABDECL( OP_STR_P_IMM_OFF_POSTIND), -/* 0100 1011 0000 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 0001 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 0010 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 0011 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 0100 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 0101 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 0110 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 0111 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 1000 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 1001 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 1010 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 1011 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 1100 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 1101 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 1110 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1011 1111 */ TABDECL( OP_LDR_P_IMM_OFF_POSTIND), -/* 0100 1100 0000 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 0001 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 0010 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 0011 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 0100 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 0101 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 0110 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 0111 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 1000 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 1001 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 1010 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 1011 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 1100 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 1101 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 1110 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1100 1111 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1101 0000 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 0001 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 0010 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 0011 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 0100 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 0101 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 0110 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 0111 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 1000 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 1001 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 1010 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 1011 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 1100 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 1101 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 1110 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1101 1111 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1110 0000 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 0001 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 0010 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 0011 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 0100 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 0101 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 0110 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 0111 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 1000 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 1001 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 1010 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 1011 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 1100 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 1101 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 1110 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1110 1111 */ TABDECL( OP_STRB_P_IMM_OFF_POSTIND), -/* 0100 1111 0000 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 0001 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 0010 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 0011 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 0100 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 0101 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 0110 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 0111 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 1000 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 1001 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 1010 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 1011 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 1100 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 1101 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 1110 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0100 1111 1111 */ TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), -/* 0101 0000 0000 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 0001 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 0010 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 0011 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 0100 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 0101 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 0110 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 0111 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 1000 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 1001 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 1010 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 1011 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 1100 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 1101 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 1110 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0000 1111 */ TABDECL( OP_STR_M_IMM_OFF), -/* 0101 0001 0000 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 0001 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 0010 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 0011 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 0100 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 0101 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 0110 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 0111 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 1000 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 1001 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 1010 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 1011 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 1100 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 1101 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 1110 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0001 1111 */ TABDECL( OP_LDR_M_IMM_OFF), -/* 0101 0010 0000 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 0001 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 0010 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 0011 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 0100 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 0101 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 0110 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 0111 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 1000 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 1001 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 1010 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 1011 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 1100 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 1101 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 1110 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0010 1111 */ TABDECL( OP_STR_M_IMM_OFF_PREIND), -/* 0101 0011 0000 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 0001 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 0010 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 0011 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 0100 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 0101 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 0110 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 0111 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 1000 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 1001 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 1010 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 1011 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 1100 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 1101 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 1110 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0011 1111 */ TABDECL( OP_LDR_M_IMM_OFF_PREIND), -/* 0101 0100 0000 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 0001 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 0010 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 0011 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 0100 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 0101 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 0110 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 0111 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 1000 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 1001 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 1010 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 1011 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 1100 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 1101 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 1110 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0100 1111 */ TABDECL( OP_STRB_M_IMM_OFF), -/* 0101 0101 0000 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 0001 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 0010 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 0011 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 0100 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 0101 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 0110 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 0111 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 1000 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 1001 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 1010 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 1011 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 1100 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 1101 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 1110 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0101 1111 */ TABDECL( OP_LDRB_M_IMM_OFF), -/* 0101 0110 0000 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 0001 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 0010 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 0011 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 0100 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 0101 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 0110 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 0111 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 1000 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 1001 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 1010 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 1011 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 1100 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 1101 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 1110 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0110 1111 */ TABDECL( OP_STRB_M_IMM_OFF_PREIND), -/* 0101 0111 0000 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 0001 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 0010 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 0011 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 0100 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 0101 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 0110 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 0111 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 1000 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 1001 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 1010 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 1011 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 1100 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 1101 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 1110 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 0111 1111 */ TABDECL( OP_LDRB_M_IMM_OFF_PREIND), -/* 0101 1000 0000 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 0001 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 0010 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 0011 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 0100 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 0101 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 0110 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 0111 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 1000 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 1001 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 1010 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 1011 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 1100 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 1101 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 1110 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1000 1111 */ TABDECL( OP_STR_P_IMM_OFF), -/* 0101 1001 0000 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 0001 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 0010 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 0011 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 0100 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 0101 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 0110 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 0111 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 1000 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 1001 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 1010 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 1011 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 1100 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 1101 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 1110 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1001 1111 */ TABDECL( OP_LDR_P_IMM_OFF), -/* 0101 1010 0000 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 0001 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 0010 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 0011 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 0100 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 0101 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 0110 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 0111 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 1000 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 1001 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 1010 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 1011 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 1100 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 1101 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 1110 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1010 1111 */ TABDECL( OP_STR_P_IMM_OFF_PREIND), -/* 0101 1011 0000 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 0001 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 0010 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 0011 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 0100 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 0101 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 0110 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 0111 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 1000 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 1001 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 1010 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 1011 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 1100 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 1101 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 1110 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1011 1111 */ TABDECL( OP_LDR_P_IMM_OFF_PREIND), -/* 0101 1100 0000 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 0001 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 0010 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 0011 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 0100 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 0101 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 0110 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 0111 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 1000 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 1001 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 1010 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 1011 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 1100 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 1101 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 1110 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1100 1111 */ TABDECL( OP_STRB_P_IMM_OFF), -/* 0101 1101 0000 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 0001 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 0010 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 0011 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 0100 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 0101 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 0110 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 0111 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 1000 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 1001 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 1010 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 1011 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 1100 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 1101 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 1110 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1101 1111 */ TABDECL( OP_LDRB_P_IMM_OFF), -/* 0101 1110 0000 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 0001 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 0010 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 0011 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 0100 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 0101 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 0110 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 0111 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 1000 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 1001 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 1010 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 1011 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 1100 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 1101 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 1110 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1110 1111 */ TABDECL( OP_STRB_P_IMM_OFF_PREIND), -/* 0101 1111 0000 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 0001 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 0010 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 0011 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 0100 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 0101 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 0110 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 0111 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 1000 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 1001 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 1010 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 1011 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 1100 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 1101 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 1110 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0101 1111 1111 */ TABDECL( OP_LDRB_P_IMM_OFF_PREIND), -/* 0110 0000 0000 */ TABDECL( OP_STR_M_LSL_IMM_OFF_POSTIND), -/* 0110 0000 0001 */ TABDECL( OP_UND), -/* 0110 0000 0010 */ TABDECL( OP_STR_M_LSR_IMM_OFF_POSTIND), -/* 0110 0000 0011 */ TABDECL( OP_UND), -/* 0110 0000 0100 */ TABDECL( OP_STR_M_ASR_IMM_OFF_POSTIND), -/* 0110 0000 0101 */ TABDECL( OP_UND), -/* 0110 0000 0110 */ TABDECL( OP_STR_M_ROR_IMM_OFF_POSTIND), -/* 0110 0000 0111 */ TABDECL( OP_UND), -/* 0110 0000 1000 */ TABDECL( OP_STR_M_LSL_IMM_OFF_POSTIND), -/* 0110 0000 1001 */ TABDECL( OP_UND), -/* 0110 0000 1010 */ TABDECL( OP_STR_M_LSR_IMM_OFF_POSTIND), -/* 0110 0000 1011 */ TABDECL( OP_UND), -/* 0110 0000 1100 */ TABDECL( OP_STR_M_ASR_IMM_OFF_POSTIND), -/* 0110 0000 1101 */ TABDECL( OP_UND), -/* 0110 0000 1110 */ TABDECL( OP_STR_M_ROR_IMM_OFF_POSTIND), -/* 0110 0000 1111 */ TABDECL( OP_UND), -/* 0110 0001 0000 */ TABDECL( OP_LDR_M_LSL_IMM_OFF_POSTIND), -/* 0110 0001 0001 */ TABDECL( OP_UND), -/* 0110 0001 0010 */ TABDECL( OP_LDR_M_LSR_IMM_OFF_POSTIND), -/* 0110 0001 0011 */ TABDECL( OP_UND), -/* 0110 0001 0100 */ TABDECL( OP_LDR_M_ASR_IMM_OFF_POSTIND), -/* 0110 0001 0101 */ TABDECL( OP_UND), -/* 0110 0001 0110 */ TABDECL( OP_LDR_M_ROR_IMM_OFF_POSTIND), -/* 0110 0001 0111 */ TABDECL( OP_UND), -/* 0110 0001 1000 */ TABDECL( OP_LDR_M_LSL_IMM_OFF_POSTIND), -/* 0110 0001 1001 */ TABDECL( OP_UND), -/* 0110 0001 1010 */ TABDECL( OP_LDR_M_LSR_IMM_OFF_POSTIND), -/* 0110 0001 1011 */ TABDECL( OP_UND), -/* 0110 0001 1100 */ TABDECL( OP_LDR_M_ASR_IMM_OFF_POSTIND), -/* 0110 0001 1101 */ TABDECL( OP_UND), -/* 0110 0001 1110 */ TABDECL( OP_LDR_M_ROR_IMM_OFF_POSTIND), -/* 0110 0001 1111 */ TABDECL( OP_UND), -/* 0110 0010 0000 */ TABDECL( OP_STR_M_LSL_IMM_OFF_POSTIND), -/* 0110 0010 0001 */ TABDECL( OP_UND), -/* 0110 0010 0010 */ TABDECL( OP_STR_M_LSR_IMM_OFF_POSTIND), -/* 0110 0010 0011 */ TABDECL( OP_UND), -/* 0110 0010 0100 */ TABDECL( OP_STR_M_ASR_IMM_OFF_POSTIND), -/* 0110 0010 0101 */ TABDECL( OP_UND), -/* 0110 0010 0110 */ TABDECL( OP_STR_M_ROR_IMM_OFF_POSTIND), -/* 0110 0010 0111 */ TABDECL( OP_UND), -/* 0110 0010 1000 */ TABDECL( OP_STR_M_LSL_IMM_OFF_POSTIND), -/* 0110 0010 1001 */ TABDECL( OP_UND), -/* 0110 0010 1010 */ TABDECL( OP_STR_M_LSR_IMM_OFF_POSTIND), -/* 0110 0010 1011 */ TABDECL( OP_UND), -/* 0110 0010 1100 */ TABDECL( OP_STR_M_ASR_IMM_OFF_POSTIND), -/* 0110 0010 1101 */ TABDECL( OP_UND), -/* 0110 0010 1110 */ TABDECL( OP_STR_M_ROR_IMM_OFF_POSTIND), -/* 0110 0010 1111 */ TABDECL( OP_UND), -/* 0110 0011 0000 */ TABDECL( OP_LDR_M_LSL_IMM_OFF_POSTIND), -/* 0110 0011 0001 */ TABDECL( OP_UND), -/* 0110 0011 0010 */ TABDECL( OP_LDR_M_LSR_IMM_OFF_POSTIND), -/* 0110 0011 0011 */ TABDECL( OP_UND), -/* 0110 0011 0100 */ TABDECL( OP_LDR_M_ASR_IMM_OFF_POSTIND), -/* 0110 0011 0101 */ TABDECL( OP_UND), -/* 0110 0011 0110 */ TABDECL( OP_LDR_M_ROR_IMM_OFF_POSTIND), -/* 0110 0011 0111 */ TABDECL( OP_UND), -/* 0110 0011 1000 */ TABDECL( OP_LDR_M_LSL_IMM_OFF_POSTIND), -/* 0110 0011 1001 */ TABDECL( OP_UND), -/* 0110 0011 1010 */ TABDECL( OP_LDR_M_LSR_IMM_OFF_POSTIND), -/* 0110 0011 1011 */ TABDECL( OP_UND), -/* 0110 0011 1100 */ TABDECL( OP_LDR_M_ASR_IMM_OFF_POSTIND), -/* 0110 0011 1101 */ TABDECL( OP_UND), -/* 0110 0011 1110 */ TABDECL( OP_LDR_M_ROR_IMM_OFF_POSTIND), -/* 0110 0011 1111 */ TABDECL( OP_UND), -/* 0110 0100 0000 */ TABDECL( OP_STRB_M_LSL_IMM_OFF_POSTIND), -/* 0110 0100 0001 */ TABDECL( OP_UND), -/* 0110 0100 0010 */ TABDECL( OP_STRB_M_LSR_IMM_OFF_POSTIND), -/* 0110 0100 0011 */ TABDECL( OP_UND), -/* 0110 0100 0100 */ TABDECL( OP_STRB_M_ASR_IMM_OFF_POSTIND), -/* 0110 0100 0101 */ TABDECL( OP_UND), -/* 0110 0100 0110 */ TABDECL( OP_STRB_M_ROR_IMM_OFF_POSTIND), -/* 0110 0100 0111 */ TABDECL( OP_UND), -/* 0110 0100 1000 */ TABDECL( OP_STRB_M_LSL_IMM_OFF_POSTIND), -/* 0110 0100 1001 */ TABDECL( OP_UND), -/* 0110 0100 1010 */ TABDECL( OP_STRB_M_LSR_IMM_OFF_POSTIND), -/* 0110 0100 1011 */ TABDECL( OP_UND), -/* 0110 0100 1100 */ TABDECL( OP_STRB_M_ASR_IMM_OFF_POSTIND), -/* 0110 0100 1101 */ TABDECL( OP_UND), -/* 0110 0100 1110 */ TABDECL( OP_STRB_M_ROR_IMM_OFF_POSTIND), -/* 0110 0100 1111 */ TABDECL( OP_UND), -/* 0110 0101 0000 */ TABDECL( OP_LDRB_M_LSL_IMM_OFF_POSTIND), -/* 0110 0101 0001 */ TABDECL( OP_UND), -/* 0110 0101 0010 */ TABDECL( OP_LDRB_M_LSR_IMM_OFF_POSTIND), -/* 0110 0101 0011 */ TABDECL( OP_UND), -/* 0110 0101 0100 */ TABDECL( OP_LDRB_M_ASR_IMM_OFF_POSTIND), -/* 0110 0101 0101 */ TABDECL( OP_UND), -/* 0110 0101 0110 */ TABDECL( OP_LDRB_M_ROR_IMM_OFF_POSTIND), -/* 0110 0101 0111 */ TABDECL( OP_UND), -/* 0110 0101 1000 */ TABDECL( OP_LDRB_M_LSL_IMM_OFF_POSTIND), -/* 0110 0101 1001 */ TABDECL( OP_UND), -/* 0110 0101 1010 */ TABDECL( OP_LDRB_M_LSR_IMM_OFF_POSTIND), -/* 0110 0101 1011 */ TABDECL( OP_UND), -/* 0110 0101 1100 */ TABDECL( OP_LDRB_M_ASR_IMM_OFF_POSTIND), -/* 0110 0101 1101 */ TABDECL( OP_UND), -/* 0110 0101 1110 */ TABDECL( OP_LDRB_M_ROR_IMM_OFF_POSTIND), -/* 0110 0101 1111 */ TABDECL( OP_UND), -/* 0110 0110 0000 */ TABDECL( OP_STRB_M_LSL_IMM_OFF_POSTIND), -/* 0110 0110 0001 */ TABDECL( OP_UND), -/* 0110 0110 0010 */ TABDECL( OP_STRB_M_LSR_IMM_OFF_POSTIND), -/* 0110 0110 0011 */ TABDECL( OP_UND), -/* 0110 0110 0100 */ TABDECL( OP_STRB_M_ASR_IMM_OFF_POSTIND), -/* 0110 0110 0101 */ TABDECL( OP_UND), -/* 0110 0110 0110 */ TABDECL( OP_STRB_M_ROR_IMM_OFF_POSTIND), -/* 0110 0110 0111 */ TABDECL( OP_UND), -/* 0110 0110 1000 */ TABDECL( OP_STRB_M_LSL_IMM_OFF_POSTIND), -/* 0110 0110 1001 */ TABDECL( OP_UND), -/* 0110 0110 1010 */ TABDECL( OP_STRB_M_LSR_IMM_OFF_POSTIND), -/* 0110 0110 1011 */ TABDECL( OP_UND), -/* 0110 0110 1100 */ TABDECL( OP_STRB_M_ASR_IMM_OFF_POSTIND), -/* 0110 0110 1101 */ TABDECL( OP_UND), -/* 0110 0110 1110 */ TABDECL( OP_STRB_M_ROR_IMM_OFF_POSTIND), -/* 0110 0110 1111 */ TABDECL( OP_UND), -/* 0110 0111 0000 */ TABDECL( OP_LDRB_M_LSL_IMM_OFF_POSTIND), -/* 0110 0111 0001 */ TABDECL( OP_UND), -/* 0110 0111 0010 */ TABDECL( OP_LDRB_M_LSR_IMM_OFF_POSTIND), -/* 0110 0111 0011 */ TABDECL( OP_UND), -/* 0110 0111 0100 */ TABDECL( OP_LDRB_M_ASR_IMM_OFF_POSTIND), -/* 0110 0111 0101 */ TABDECL( OP_UND), -/* 0110 0111 0110 */ TABDECL( OP_LDRB_M_ROR_IMM_OFF_POSTIND), -/* 0110 0111 0111 */ TABDECL( OP_UND), -/* 0110 0111 1000 */ TABDECL( OP_LDRB_M_LSL_IMM_OFF_POSTIND), -/* 0110 0111 1001 */ TABDECL( OP_UND), -/* 0110 0111 1010 */ TABDECL( OP_LDRB_M_LSR_IMM_OFF_POSTIND), -/* 0110 0111 1011 */ TABDECL( OP_UND), -/* 0110 0111 1100 */ TABDECL( OP_LDRB_M_ASR_IMM_OFF_POSTIND), -/* 0110 0111 1101 */ TABDECL( OP_UND), -/* 0110 0111 1110 */ TABDECL( OP_LDRB_M_ROR_IMM_OFF_POSTIND), -/* 0110 0111 1111 */ TABDECL( OP_UND), -/* 0110 1000 0000 */ TABDECL( OP_STR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1000 0001 */ TABDECL( OP_UND), -/* 0110 1000 0010 */ TABDECL( OP_STR_P_LSR_IMM_OFF_POSTIND), -/* 0110 1000 0011 */ TABDECL( OP_UND), -/* 0110 1000 0100 */ TABDECL( OP_STR_P_ASR_IMM_OFF_POSTIND), -/* 0110 1000 0101 */ TABDECL( OP_UND), -/* 0110 1000 0110 */ TABDECL( OP_STR_P_ROR_IMM_OFF_POSTIND), -/* 0110 1000 0111 */ TABDECL( OP_UND), -/* 0110 1000 1000 */ TABDECL( OP_STR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1000 1001 */ TABDECL( OP_UND), -/* 0110 1000 1010 */ TABDECL( OP_STR_P_LSR_IMM_OFF_POSTIND), -/* 0110 1000 1011 */ TABDECL( OP_UND), -/* 0110 1000 1100 */ TABDECL( OP_STR_P_ASR_IMM_OFF_POSTIND), -/* 0110 1000 1101 */ TABDECL( OP_UND), -/* 0110 1000 1110 */ TABDECL( OP_STR_P_ROR_IMM_OFF_POSTIND), -/* 0110 1000 1111 */ TABDECL( OP_UND), -/* 0110 1001 0000 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1001 0001 */ TABDECL( OP_UND), -/* 0110 1001 0010 */ TABDECL( OP_LDR_P_LSR_IMM_OFF_POSTIND), -/* 0110 1001 0011 */ TABDECL( OP_UND), -/* 0110 1001 0100 */ TABDECL( OP_LDR_P_ASR_IMM_OFF_POSTIND), -/* 0110 1001 0101 */ TABDECL( OP_UND), -/* 0110 1001 0110 */ TABDECL( OP_LDR_P_ROR_IMM_OFF_POSTIND), -/* 0110 1001 0111 */ TABDECL( OP_UND), -/* 0110 1001 1000 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1001 1001 */ TABDECL( OP_UND), -/* 0110 1001 1010 */ TABDECL( OP_LDR_P_LSR_IMM_OFF_POSTIND), -/* 0110 1001 1011 */ TABDECL( OP_UND), -/* 0110 1001 1100 */ TABDECL( OP_LDR_P_ASR_IMM_OFF_POSTIND), -/* 0110 1001 1101 */ TABDECL( OP_UND), -/* 0110 1001 1110 */ TABDECL( OP_LDR_P_ROR_IMM_OFF_POSTIND), -/* 0110 1001 1111 */ TABDECL( OP_UND), -/* 0110 1010 0000 */ TABDECL( OP_STR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1010 0001 */ TABDECL( OP_UND), -/* 0110 1010 0010 */ TABDECL( OP_STR_P_LSR_IMM_OFF_POSTIND), -/* 0110 1010 0011 */ TABDECL( OP_UND), -/* 0110 1010 0100 */ TABDECL( OP_STR_P_ASR_IMM_OFF_POSTIND), -/* 0110 1010 0101 */ TABDECL( OP_UND), -/* 0110 1010 0110 */ TABDECL( OP_STR_P_ROR_IMM_OFF_POSTIND), -/* 0110 1010 0111 */ TABDECL( OP_UND), -/* 0110 1010 1000 */ TABDECL( OP_STR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1010 1001 */ TABDECL( OP_UND), -/* 0110 1010 1010 */ TABDECL( OP_STR_P_LSR_IMM_OFF_POSTIND), -/* 0110 1010 1011 */ TABDECL( OP_UND), -/* 0110 1010 1100 */ TABDECL( OP_STR_P_ASR_IMM_OFF_POSTIND), -/* 0110 1010 1101 */ TABDECL( OP_UND), -/* 0110 1010 1110 */ TABDECL( OP_STR_P_ROR_IMM_OFF_POSTIND), -/* 0110 1010 1111 */ TABDECL( OP_UND), -/* 0110 1011 0000 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1011 0001 */ TABDECL( OP_UND), -/* 0110 1011 0010 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1011 0011 */ TABDECL( OP_UND), -/* 0110 1011 0100 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1011 0101 */ TABDECL( OP_UND), -/* 0110 1011 0110 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1011 0111 */ TABDECL( OP_UND), -/* 0110 1011 1000 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1011 1001 */ TABDECL( OP_UND), -/* 0110 1011 1010 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1011 1011 */ TABDECL( OP_UND), -/* 0110 1011 1100 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1011 1101 */ TABDECL( OP_UND), -/* 0110 1011 1110 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), -/* 0110 1011 1111 */ TABDECL( OP_UND), -/* 0110 1100 0000 */ TABDECL( OP_STRB_P_LSL_IMM_OFF_POSTIND), -/* 0110 1100 0001 */ TABDECL( OP_UND), -/* 0110 1100 0010 */ TABDECL( OP_STRB_P_LSR_IMM_OFF_POSTIND), -/* 0110 1100 0011 */ TABDECL( OP_UND), -/* 0110 1100 0100 */ TABDECL( OP_STRB_P_ASR_IMM_OFF_POSTIND), -/* 0110 1100 0101 */ TABDECL( OP_UND), -/* 0110 1100 0110 */ TABDECL( OP_STRB_P_ROR_IMM_OFF_POSTIND), -/* 0110 1100 0111 */ TABDECL( OP_UND), -/* 0110 1100 1000 */ TABDECL( OP_STRB_P_LSL_IMM_OFF_POSTIND), -/* 0110 1100 1001 */ TABDECL( OP_UND), -/* 0110 1100 1010 */ TABDECL( OP_STRB_P_LSR_IMM_OFF_POSTIND), -/* 0110 1100 1011 */ TABDECL( OP_UND), -/* 0110 1100 1100 */ TABDECL( OP_STRB_P_ASR_IMM_OFF_POSTIND), -/* 0110 1100 1101 */ TABDECL( OP_UND), -/* 0110 1100 1110 */ TABDECL( OP_STRB_P_ROR_IMM_OFF_POSTIND), -/* 0110 1100 1111 */ TABDECL( OP_UND), -/* 0110 1101 0000 */ TABDECL( OP_LDRB_P_LSL_IMM_OFF_POSTIND), -/* 0110 1101 0001 */ TABDECL( OP_UND), -/* 0110 1101 0010 */ TABDECL( OP_LDRB_P_LSR_IMM_OFF_POSTIND), -/* 0110 1101 0011 */ TABDECL( OP_UND), -/* 0110 1101 0100 */ TABDECL( OP_LDRB_P_ASR_IMM_OFF_POSTIND), -/* 0110 1101 0101 */ TABDECL( OP_UND), -/* 0110 1101 0110 */ TABDECL( OP_LDRB_P_ROR_IMM_OFF_POSTIND), -/* 0110 1101 0111 */ TABDECL( OP_UND), -/* 0110 1101 1000 */ TABDECL( OP_LDRB_P_LSL_IMM_OFF_POSTIND), -/* 0110 1101 1001 */ TABDECL( OP_UND), -/* 0110 1101 1010 */ TABDECL( OP_LDRB_P_LSR_IMM_OFF_POSTIND), -/* 0110 1101 1011 */ TABDECL( OP_UND), -/* 0110 1101 1100 */ TABDECL( OP_LDRB_P_ASR_IMM_OFF_POSTIND), -/* 0110 1101 1101 */ TABDECL( OP_UND), -/* 0110 1101 1110 */ TABDECL( OP_LDRB_P_ROR_IMM_OFF_POSTIND), -/* 0110 1101 1111 */ TABDECL( OP_UND), -/* 0110 1110 0000 */ TABDECL( OP_STRB_P_LSL_IMM_OFF_POSTIND), -/* 0110 1110 0001 */ TABDECL( OP_UND), -/* 0110 1110 0010 */ TABDECL( OP_STRB_P_LSR_IMM_OFF_POSTIND), -/* 0110 1110 0011 */ TABDECL( OP_UND), -/* 0110 1110 0100 */ TABDECL( OP_STRB_P_ASR_IMM_OFF_POSTIND), -/* 0110 1110 0101 */ TABDECL( OP_UND), -/* 0110 1110 0110 */ TABDECL( OP_STRB_P_ROR_IMM_OFF_POSTIND), -/* 0110 1110 0111 */ TABDECL( OP_UND), -/* 0110 1110 1000 */ TABDECL( OP_STRB_P_LSL_IMM_OFF_POSTIND), -/* 0110 1110 1001 */ TABDECL( OP_UND), -/* 0110 1110 1010 */ TABDECL( OP_STRB_P_LSR_IMM_OFF_POSTIND), -/* 0110 1110 1011 */ TABDECL( OP_UND), -/* 0110 1110 1100 */ TABDECL( OP_STRB_P_ASR_IMM_OFF_POSTIND), -/* 0110 1110 1101 */ TABDECL( OP_UND), -/* 0110 1110 1110 */ TABDECL( OP_STRB_P_ROR_IMM_OFF_POSTIND), -/* 0110 1110 1111 */ TABDECL( OP_UND), -/* 0110 1111 0000 */ TABDECL( OP_LDRB_P_LSL_IMM_OFF_POSTIND), -/* 0110 1111 0001 */ TABDECL( OP_UND), -/* 0110 1111 0010 */ TABDECL( OP_LDRB_P_LSR_IMM_OFF_POSTIND), -/* 0110 1111 0011 */ TABDECL( OP_UND), -/* 0110 1111 0100 */ TABDECL( OP_LDRB_P_ASR_IMM_OFF_POSTIND), -/* 0110 1111 0101 */ TABDECL( OP_UND), -/* 0110 1111 0110 */ TABDECL( OP_LDRB_P_ROR_IMM_OFF_POSTIND), -/* 0110 1111 0111 */ TABDECL( OP_UND), -/* 0110 1111 1000 */ TABDECL( OP_LDRB_P_LSL_IMM_OFF_POSTIND), -/* 0110 1111 1001 */ TABDECL( OP_UND), -/* 0110 1111 1010 */ TABDECL( OP_LDRB_P_LSR_IMM_OFF_POSTIND), -/* 0110 1111 1011 */ TABDECL( OP_UND), -/* 0110 1111 1100 */ TABDECL( OP_LDRB_P_ASR_IMM_OFF_POSTIND), -/* 0110 1111 1101 */ TABDECL( OP_UND), -/* 0110 1111 1110 */ TABDECL( OP_LDRB_P_ROR_IMM_OFF_POSTIND), -/* 0110 1111 1111 */ TABDECL( OP_UND), -/* 0111 0000 0000 */ TABDECL( OP_STR_M_LSL_IMM_OFF), -/* 0111 0000 0001 */ TABDECL( OP_UND), -/* 0111 0000 0010 */ TABDECL( OP_STR_M_LSR_IMM_OFF), -/* 0111 0000 0011 */ TABDECL( OP_UND), -/* 0111 0000 0100 */ TABDECL( OP_STR_M_ASR_IMM_OFF), -/* 0111 0000 0101 */ TABDECL( OP_UND), -/* 0111 0000 0110 */ TABDECL( OP_STR_M_ROR_IMM_OFF), -/* 0111 0000 0111 */ TABDECL( OP_UND), -/* 0111 0000 1000 */ TABDECL( OP_STR_M_LSL_IMM_OFF), -/* 0111 0000 1001 */ TABDECL( OP_UND), -/* 0111 0000 1010 */ TABDECL( OP_STR_M_LSR_IMM_OFF), -/* 0111 0000 1011 */ TABDECL( OP_UND), -/* 0111 0000 1100 */ TABDECL( OP_STR_M_ASR_IMM_OFF), -/* 0111 0000 1101 */ TABDECL( OP_UND), -/* 0111 0000 1110 */ TABDECL( OP_STR_M_ROR_IMM_OFF), -/* 0111 0000 1111 */ TABDECL( OP_UND), -/* 0111 0001 0000 */ TABDECL( OP_LDR_M_LSL_IMM_OFF), -/* 0111 0001 0001 */ TABDECL( OP_UND), -/* 0111 0001 0010 */ TABDECL( OP_LDR_M_LSR_IMM_OFF), -/* 0111 0001 0011 */ TABDECL( OP_UND), -/* 0111 0001 0100 */ TABDECL( OP_LDR_M_ASR_IMM_OFF), -/* 0111 0001 0101 */ TABDECL( OP_UND), -/* 0111 0001 0110 */ TABDECL( OP_LDR_M_ROR_IMM_OFF), -/* 0111 0001 0111 */ TABDECL( OP_UND), -/* 0111 0001 1000 */ TABDECL( OP_LDR_M_LSL_IMM_OFF), -/* 0111 0001 1001 */ TABDECL( OP_UND), -/* 0111 0001 1010 */ TABDECL( OP_LDR_M_LSR_IMM_OFF), -/* 0111 0001 1011 */ TABDECL( OP_UND), -/* 0111 0001 1100 */ TABDECL( OP_LDR_M_ASR_IMM_OFF), -/* 0111 0001 1101 */ TABDECL( OP_UND), -/* 0111 0001 1110 */ TABDECL( OP_LDR_M_ROR_IMM_OFF), -/* 0111 0001 1111 */ TABDECL( OP_UND), -/* 0111 0010 0000 */ TABDECL( OP_STR_M_LSL_IMM_OFF_PREIND), -/* 0111 0010 0001 */ TABDECL( OP_UND), -/* 0111 0010 0010 */ TABDECL( OP_STR_M_LSR_IMM_OFF_PREIND), -/* 0111 0010 0011 */ TABDECL( OP_UND), -/* 0111 0010 0100 */ TABDECL( OP_STR_M_ASR_IMM_OFF_PREIND), -/* 0111 0010 0101 */ TABDECL( OP_UND), -/* 0111 0010 0110 */ TABDECL( OP_STR_M_ROR_IMM_OFF_PREIND), -/* 0111 0010 0111 */ TABDECL( OP_UND), -/* 0111 0010 1000 */ TABDECL( OP_STR_M_LSL_IMM_OFF_PREIND), -/* 0111 0010 1001 */ TABDECL( OP_UND), -/* 0111 0010 1010 */ TABDECL( OP_STR_M_LSR_IMM_OFF_PREIND), -/* 0111 0010 1011 */ TABDECL( OP_UND), -/* 0111 0010 1100 */ TABDECL( OP_STR_M_ASR_IMM_OFF_PREIND), -/* 0111 0010 1101 */ TABDECL( OP_UND), -/* 0111 0010 1110 */ TABDECL( OP_STR_M_ROR_IMM_OFF_PREIND), -/* 0111 0010 1111 */ TABDECL( OP_UND), -/* 0111 0011 0000 */ TABDECL( OP_LDR_M_LSL_IMM_OFF_PREIND), -/* 0111 0011 0001 */ TABDECL( OP_UND), -/* 0111 0011 0010 */ TABDECL( OP_LDR_M_LSR_IMM_OFF_PREIND), -/* 0111 0011 0011 */ TABDECL( OP_UND), -/* 0111 0011 0100 */ TABDECL( OP_LDR_M_ASR_IMM_OFF_PREIND), -/* 0111 0011 0101 */ TABDECL( OP_UND), -/* 0111 0011 0110 */ TABDECL( OP_LDR_M_ROR_IMM_OFF_PREIND), -/* 0111 0011 0111 */ TABDECL( OP_UND), -/* 0111 0011 1000 */ TABDECL( OP_LDR_M_LSL_IMM_OFF_PREIND), -/* 0111 0011 1001 */ TABDECL( OP_UND), -/* 0111 0011 1010 */ TABDECL( OP_LDR_M_LSR_IMM_OFF_PREIND), -/* 0111 0011 1011 */ TABDECL( OP_UND), -/* 0111 0011 1100 */ TABDECL( OP_LDR_M_ASR_IMM_OFF_PREIND), -/* 0111 0011 1101 */ TABDECL( OP_UND), -/* 0111 0011 1110 */ TABDECL( OP_LDR_M_ROR_IMM_OFF_PREIND), -/* 0111 0011 1111 */ TABDECL( OP_UND), -/* 0111 0100 0000 */ TABDECL( OP_STRB_M_LSL_IMM_OFF), -/* 0111 0100 0001 */ TABDECL( OP_UND), -/* 0111 0100 0010 */ TABDECL( OP_STRB_M_LSR_IMM_OFF), -/* 0111 0100 0011 */ TABDECL( OP_UND), -/* 0111 0100 0100 */ TABDECL( OP_STRB_M_ASR_IMM_OFF), -/* 0111 0100 0101 */ TABDECL( OP_UND), -/* 0111 0100 0110 */ TABDECL( OP_STRB_M_ROR_IMM_OFF), -/* 0111 0100 0111 */ TABDECL( OP_UND), -/* 0111 0100 1000 */ TABDECL( OP_STRB_M_LSL_IMM_OFF), -/* 0111 0100 1001 */ TABDECL( OP_UND), -/* 0111 0100 1010 */ TABDECL( OP_STRB_M_LSR_IMM_OFF), -/* 0111 0100 1011 */ TABDECL( OP_UND), -/* 0111 0100 1100 */ TABDECL( OP_STRB_M_ASR_IMM_OFF), -/* 0111 0100 1101 */ TABDECL( OP_UND), -/* 0111 0100 1110 */ TABDECL( OP_STRB_M_ROR_IMM_OFF), -/* 0111 0100 1111 */ TABDECL( OP_UND), -/* 0111 0101 0000 */ TABDECL( OP_LDRB_M_LSL_IMM_OFF), -/* 0111 0101 0001 */ TABDECL( OP_UND), -/* 0111 0101 0010 */ TABDECL( OP_LDRB_M_LSR_IMM_OFF), -/* 0111 0101 0011 */ TABDECL( OP_UND), -/* 0111 0101 0100 */ TABDECL( OP_LDRB_M_ASR_IMM_OFF), -/* 0111 0101 0101 */ TABDECL( OP_UND), -/* 0111 0101 0110 */ TABDECL( OP_LDRB_M_ROR_IMM_OFF), -/* 0111 0101 0111 */ TABDECL( OP_UND), -/* 0111 0101 1000 */ TABDECL( OP_LDRB_M_LSL_IMM_OFF), -/* 0111 0101 1001 */ TABDECL( OP_UND), -/* 0111 0101 1010 */ TABDECL( OP_LDRB_M_LSR_IMM_OFF), -/* 0111 0101 1011 */ TABDECL( OP_UND), -/* 0111 0101 1100 */ TABDECL( OP_LDRB_M_ASR_IMM_OFF), -/* 0111 0101 1101 */ TABDECL( OP_UND), -/* 0111 0101 1110 */ TABDECL( OP_LDRB_M_ROR_IMM_OFF), -/* 0111 0101 1111 */ TABDECL( OP_UND), -/* 0111 0110 0000 */ TABDECL( OP_STRB_M_LSL_IMM_OFF_PREIND), -/* 0111 0110 0001 */ TABDECL( OP_UND), -/* 0111 0110 0010 */ TABDECL( OP_STRB_M_LSR_IMM_OFF_PREIND), -/* 0111 0110 0011 */ TABDECL( OP_UND), -/* 0111 0110 0100 */ TABDECL( OP_STRB_M_ASR_IMM_OFF_PREIND), -/* 0111 0110 0101 */ TABDECL( OP_UND), -/* 0111 0110 0110 */ TABDECL( OP_STRB_M_ROR_IMM_OFF_PREIND), -/* 0111 0110 0111 */ TABDECL( OP_UND), -/* 0111 0110 1000 */ TABDECL( OP_STRB_M_LSL_IMM_OFF_PREIND), -/* 0111 0110 1001 */ TABDECL( OP_UND), -/* 0111 0110 1010 */ TABDECL( OP_STRB_M_LSR_IMM_OFF_PREIND), -/* 0111 0110 1011 */ TABDECL( OP_UND), -/* 0111 0110 1100 */ TABDECL( OP_STRB_M_ASR_IMM_OFF_PREIND), -/* 0111 0110 1101 */ TABDECL( OP_UND), -/* 0111 0110 1110 */ TABDECL( OP_STRB_M_ROR_IMM_OFF_PREIND), -/* 0111 0110 1111 */ TABDECL( OP_UND), -/* 0111 0111 0000 */ TABDECL( OP_LDRB_M_LSL_IMM_OFF_PREIND), -/* 0111 0111 0001 */ TABDECL( OP_UND), -/* 0111 0111 0010 */ TABDECL( OP_LDRB_M_LSR_IMM_OFF_PREIND), -/* 0111 0111 0011 */ TABDECL( OP_UND), -/* 0111 0111 0100 */ TABDECL( OP_LDRB_M_ASR_IMM_OFF_PREIND), -/* 0111 0111 0101 */ TABDECL( OP_UND), -/* 0111 0111 0110 */ TABDECL( OP_LDRB_M_ROR_IMM_OFF_PREIND), -/* 0111 0111 0111 */ TABDECL( OP_UND), -/* 0111 0111 1000 */ TABDECL( OP_LDRB_M_LSL_IMM_OFF_PREIND), -/* 0111 0111 1001 */ TABDECL( OP_UND), -/* 0111 0111 1010 */ TABDECL( OP_LDRB_M_LSR_IMM_OFF_PREIND), -/* 0111 0111 1011 */ TABDECL( OP_UND), -/* 0111 0111 1100 */ TABDECL( OP_LDRB_M_ASR_IMM_OFF_PREIND), -/* 0111 0111 1101 */ TABDECL( OP_UND), -/* 0111 0111 1110 */ TABDECL( OP_LDRB_M_ROR_IMM_OFF_PREIND), -/* 0111 0111 1111 */ TABDECL( OP_UND), -/* 0111 1000 0000 */ TABDECL( OP_STR_P_LSL_IMM_OFF), -/* 0111 1000 0001 */ TABDECL( OP_UND), -/* 0111 1000 0010 */ TABDECL( OP_STR_P_LSR_IMM_OFF), -/* 0111 1000 0011 */ TABDECL( OP_UND), -/* 0111 1000 0100 */ TABDECL( OP_STR_P_ASR_IMM_OFF), -/* 0111 1000 0101 */ TABDECL( OP_UND), -/* 0111 1000 0110 */ TABDECL( OP_STR_P_ROR_IMM_OFF), -/* 0111 1000 0111 */ TABDECL( OP_UND), -/* 0111 1000 1000 */ TABDECL( OP_STR_P_LSL_IMM_OFF), -/* 0111 1000 1001 */ TABDECL( OP_UND), -/* 0111 1000 1010 */ TABDECL( OP_STR_P_LSR_IMM_OFF), -/* 0111 1000 1011 */ TABDECL( OP_UND), -/* 0111 1000 1100 */ TABDECL( OP_STR_P_ASR_IMM_OFF), -/* 0111 1000 1101 */ TABDECL( OP_UND), -/* 0111 1000 1110 */ TABDECL( OP_STR_P_ROR_IMM_OFF), -/* 0111 1000 1111 */ TABDECL( OP_UND), -/* 0111 1001 0000 */ TABDECL( OP_LDR_P_LSL_IMM_OFF), -/* 0111 1001 0001 */ TABDECL( OP_UND), -/* 0111 1001 0010 */ TABDECL( OP_LDR_P_LSR_IMM_OFF), -/* 0111 1001 0011 */ TABDECL( OP_UND), -/* 0111 1001 0100 */ TABDECL( OP_LDR_P_ASR_IMM_OFF), -/* 0111 1001 0101 */ TABDECL( OP_UND), -/* 0111 1001 0110 */ TABDECL( OP_LDR_P_ROR_IMM_OFF), -/* 0111 1001 0111 */ TABDECL( OP_UND), -/* 0111 1001 1000 */ TABDECL( OP_LDR_P_LSL_IMM_OFF), -/* 0111 1001 1001 */ TABDECL( OP_UND), -/* 0111 1001 1010 */ TABDECL( OP_LDR_P_LSR_IMM_OFF), -/* 0111 1001 1011 */ TABDECL( OP_UND), -/* 0111 1001 1100 */ TABDECL( OP_LDR_P_ASR_IMM_OFF), -/* 0111 1001 1101 */ TABDECL( OP_UND), -/* 0111 1001 1110 */ TABDECL( OP_LDR_P_ROR_IMM_OFF), -/* 0111 1001 1111 */ TABDECL( OP_UND), -/* 0111 1010 0000 */ TABDECL( OP_STR_P_LSL_IMM_OFF_PREIND), -/* 0111 1010 0001 */ TABDECL( OP_UND), -/* 0111 1010 0010 */ TABDECL( OP_STR_P_LSR_IMM_OFF_PREIND), -/* 0111 1010 0011 */ TABDECL( OP_UND), -/* 0111 1010 0100 */ TABDECL( OP_STR_P_ASR_IMM_OFF_PREIND), -/* 0111 1010 0101 */ TABDECL( OP_UND), -/* 0111 1010 0110 */ TABDECL( OP_STR_P_ROR_IMM_OFF_PREIND), -/* 0111 1010 0111 */ TABDECL( OP_UND), -/* 0111 1010 1000 */ TABDECL( OP_STR_P_LSL_IMM_OFF_PREIND), -/* 0111 1010 1001 */ TABDECL( OP_UND), -/* 0111 1010 1010 */ TABDECL( OP_STR_P_LSR_IMM_OFF_PREIND), -/* 0111 1010 1011 */ TABDECL( OP_UND), -/* 0111 1010 1100 */ TABDECL( OP_STR_P_ASR_IMM_OFF_PREIND), -/* 0111 1010 1101 */ TABDECL( OP_UND), -/* 0111 1010 1110 */ TABDECL( OP_STR_P_ROR_IMM_OFF_PREIND), -/* 0111 1010 1111 */ TABDECL( OP_UND), -/* 0111 1011 0000 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_PREIND), -/* 0111 1011 0001 */ TABDECL( OP_UND), -/* 0111 1011 0010 */ TABDECL( OP_LDR_P_LSR_IMM_OFF_PREIND), -/* 0111 1011 0011 */ TABDECL( OP_UND), -/* 0111 1011 0100 */ TABDECL( OP_LDR_P_ASR_IMM_OFF_PREIND), -/* 0111 1011 0101 */ TABDECL( OP_UND), -/* 0111 1011 0110 */ TABDECL( OP_LDR_P_ROR_IMM_OFF_PREIND), -/* 0111 1011 0111 */ TABDECL( OP_UND), -/* 0111 1011 1000 */ TABDECL( OP_LDR_P_LSL_IMM_OFF_PREIND), -/* 0111 1011 1001 */ TABDECL( OP_UND), -/* 0111 1011 1010 */ TABDECL( OP_LDR_P_LSR_IMM_OFF_PREIND), -/* 0111 1011 1011 */ TABDECL( OP_UND), -/* 0111 1011 1100 */ TABDECL( OP_LDR_P_ASR_IMM_OFF_PREIND), -/* 0111 1011 1101 */ TABDECL( OP_UND), -/* 0111 1011 1110 */ TABDECL( OP_LDR_P_ROR_IMM_OFF_PREIND), -/* 0111 1011 1111 */ TABDECL( OP_UND), -/* 0111 1100 0000 */ TABDECL( OP_STRB_P_LSL_IMM_OFF), -/* 0111 1100 0001 */ TABDECL( OP_UND), -/* 0111 1100 0010 */ TABDECL( OP_STRB_P_LSR_IMM_OFF), -/* 0111 1100 0011 */ TABDECL( OP_UND), -/* 0111 1100 0100 */ TABDECL( OP_STRB_P_ASR_IMM_OFF), -/* 0111 1100 0101 */ TABDECL( OP_UND), -/* 0111 1100 0110 */ TABDECL( OP_STRB_P_ROR_IMM_OFF), -/* 0111 1100 0111 */ TABDECL( OP_UND), -/* 0111 1100 1000 */ TABDECL( OP_STRB_P_LSL_IMM_OFF), -/* 0111 1100 1001 */ TABDECL( OP_UND), -/* 0111 1100 1010 */ TABDECL( OP_STRB_P_LSR_IMM_OFF), -/* 0111 1100 1011 */ TABDECL( OP_UND), -/* 0111 1100 1100 */ TABDECL( OP_STRB_P_ASR_IMM_OFF), -/* 0111 1100 1101 */ TABDECL( OP_UND), -/* 0111 1100 1110 */ TABDECL( OP_STRB_P_ROR_IMM_OFF), -/* 0111 1100 1111 */ TABDECL( OP_UND), -/* 0111 1101 0000 */ TABDECL( OP_LDRB_P_LSL_IMM_OFF), -/* 0111 1101 0001 */ TABDECL( OP_UND), -/* 0111 1101 0010 */ TABDECL( OP_LDRB_P_LSR_IMM_OFF), -/* 0111 1101 0011 */ TABDECL( OP_UND), -/* 0111 1101 0100 */ TABDECL( OP_LDRB_P_ASR_IMM_OFF), -/* 0111 1101 0101 */ TABDECL( OP_UND), -/* 0111 1101 0110 */ TABDECL( OP_LDRB_P_ROR_IMM_OFF), -/* 0111 1101 0111 */ TABDECL( OP_UND), -/* 0111 1101 1000 */ TABDECL( OP_LDRB_P_LSL_IMM_OFF), -/* 0111 1101 1001 */ TABDECL( OP_UND), -/* 0111 1101 1010 */ TABDECL( OP_LDRB_P_LSR_IMM_OFF), -/* 0111 1101 1011 */ TABDECL( OP_UND), -/* 0111 1101 1100 */ TABDECL( OP_LDRB_P_ASR_IMM_OFF), -/* 0111 1101 1101 */ TABDECL( OP_UND), -/* 0111 1101 1110 */ TABDECL( OP_LDRB_P_ROR_IMM_OFF), -/* 0111 1101 1111 */ TABDECL( OP_UND), -/* 0111 1110 0000 */ TABDECL( OP_STRB_P_LSL_IMM_OFF_PREIND), -/* 0111 1110 0001 */ TABDECL( OP_UND), -/* 0111 1110 0010 */ TABDECL( OP_STRB_P_LSR_IMM_OFF_PREIND), -/* 0111 1110 0011 */ TABDECL( OP_UND), -/* 0111 1110 0100 */ TABDECL( OP_STRB_P_ASR_IMM_OFF_PREIND), -/* 0111 1110 0101 */ TABDECL( OP_UND), -/* 0111 1110 0110 */ TABDECL( OP_STRB_P_ROR_IMM_OFF_PREIND), -/* 0111 1110 0111 */ TABDECL( OP_UND), -/* 0111 1110 1000 */ TABDECL( OP_STRB_P_LSL_IMM_OFF_PREIND), -/* 0111 1110 1001 */ TABDECL( OP_UND), -/* 0111 1110 1010 */ TABDECL( OP_STRB_P_LSR_IMM_OFF_PREIND), -/* 0111 1110 1011 */ TABDECL( OP_UND), -/* 0111 1110 1100 */ TABDECL( OP_STRB_P_ASR_IMM_OFF_PREIND), -/* 0111 1110 1101 */ TABDECL( OP_UND), -/* 0111 1110 1110 */ TABDECL( OP_STRB_P_ROR_IMM_OFF_PREIND), -/* 0111 1110 1111 */ TABDECL( OP_UND), -/* 0111 1111 0000 */ TABDECL( OP_LDRB_P_LSL_IMM_OFF_PREIND), -/* 0111 1111 0001 */ TABDECL( OP_UND), -/* 0111 1111 0010 */ TABDECL( OP_LDRB_P_LSR_IMM_OFF_PREIND), -/* 0111 1111 0011 */ TABDECL( OP_UND), -/* 0111 1111 0100 */ TABDECL( OP_LDRB_P_ASR_IMM_OFF_PREIND), -/* 0111 1111 0101 */ TABDECL( OP_UND), -/* 0111 1111 0110 */ TABDECL( OP_LDRB_P_ROR_IMM_OFF_PREIND), -/* 0111 1111 0111 */ TABDECL( OP_UND), -/* 0111 1111 1000 */ TABDECL( OP_LDRB_P_LSL_IMM_OFF_PREIND), -/* 0111 1111 1001 */ TABDECL( OP_UND), -/* 0111 1111 1010 */ TABDECL( OP_LDRB_P_LSR_IMM_OFF_PREIND), -/* 0111 1111 1011 */ TABDECL( OP_UND), -/* 0111 1111 1100 */ TABDECL( OP_LDRB_P_ASR_IMM_OFF_PREIND), -/* 0111 1111 1101 */ TABDECL( OP_UND), -/* 0111 1111 1110 */ TABDECL( OP_LDRB_P_ROR_IMM_OFF_PREIND), -/* 0111 1111 1111 */ TABDECL( OP_UND), -/* 1000 0000 0000 */ TABDECL( OP_STMDA), -/* 1000 0000 0001 */ TABDECL( OP_STMDA), -/* 1000 0000 0010 */ TABDECL( OP_STMDA), -/* 1000 0000 0011 */ TABDECL( OP_STMDA), -/* 1000 0000 0100 */ TABDECL( OP_STMDA), -/* 1000 0000 0101 */ TABDECL( OP_STMDA), -/* 1000 0000 0110 */ TABDECL( OP_STMDA), -/* 1000 0000 0111 */ TABDECL( OP_STMDA), -/* 1000 0000 1000 */ TABDECL( OP_STMDA), -/* 1000 0000 1001 */ TABDECL( OP_STMDA), -/* 1000 0000 1010 */ TABDECL( OP_STMDA), -/* 1000 0000 1011 */ TABDECL( OP_STMDA), -/* 1000 0000 1100 */ TABDECL( OP_STMDA), -/* 1000 0000 1101 */ TABDECL( OP_STMDA), -/* 1000 0000 1110 */ TABDECL( OP_STMDA), -/* 1000 0000 1111 */ TABDECL( OP_STMDA), -/* 1000 0001 0000 */ TABDECL( OP_LDMDA), -/* 1000 0001 0001 */ TABDECL( OP_LDMDA), -/* 1000 0001 0010 */ TABDECL( OP_LDMDA), -/* 1000 0001 0011 */ TABDECL( OP_LDMDA), -/* 1000 0001 0100 */ TABDECL( OP_LDMDA), -/* 1000 0001 0101 */ TABDECL( OP_LDMDA), -/* 1000 0001 0110 */ TABDECL( OP_LDMDA), -/* 1000 0001 0111 */ TABDECL( OP_LDMDA), -/* 1000 0001 1000 */ TABDECL( OP_LDMDA), -/* 1000 0001 1001 */ TABDECL( OP_LDMDA), -/* 1000 0001 1010 */ TABDECL( OP_LDMDA), -/* 1000 0001 1011 */ TABDECL( OP_LDMDA), -/* 1000 0001 1100 */ TABDECL( OP_LDMDA), -/* 1000 0001 1101 */ TABDECL( OP_LDMDA), -/* 1000 0001 1110 */ TABDECL( OP_LDMDA), -/* 1000 0001 1111 */ TABDECL( OP_LDMDA), -/* 1000 0010 0000 */ TABDECL( OP_STMDA_W), -/* 1000 0010 0001 */ TABDECL( OP_STMDA_W), -/* 1000 0010 0010 */ TABDECL( OP_STMDA_W), -/* 1000 0010 0011 */ TABDECL( OP_STMDA_W), -/* 1000 0010 0100 */ TABDECL( OP_STMDA_W), -/* 1000 0010 0101 */ TABDECL( OP_STMDA_W), -/* 1000 0010 0110 */ TABDECL( OP_STMDA_W), -/* 1000 0010 0111 */ TABDECL( OP_STMDA_W), -/* 1000 0010 1000 */ TABDECL( OP_STMDA_W), -/* 1000 0010 1001 */ TABDECL( OP_STMDA_W), -/* 1000 0010 1010 */ TABDECL( OP_STMDA_W), -/* 1000 0010 1011 */ TABDECL( OP_STMDA_W), -/* 1000 0010 1100 */ TABDECL( OP_STMDA_W), -/* 1000 0010 1101 */ TABDECL( OP_STMDA_W), -/* 1000 0010 1110 */ TABDECL( OP_STMDA_W), -/* 1000 0010 1111 */ TABDECL( OP_STMDA_W), -/* 1000 0011 0000 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 0001 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 0010 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 0011 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 0100 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 0101 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 0110 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 0111 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 1000 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 1001 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 1010 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 1011 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 1100 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 1101 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 1110 */ TABDECL( OP_LDMDA_W), -/* 1000 0011 1111 */ TABDECL( OP_LDMDA_W), -/* 1000 0100 0000 */ TABDECL( OP_STMDA2), -/* 1000 0100 0001 */ TABDECL( OP_STMDA2), -/* 1000 0100 0010 */ TABDECL( OP_STMDA2), -/* 1000 0100 0011 */ TABDECL( OP_STMDA2), -/* 1000 0100 0100 */ TABDECL( OP_STMDA2), -/* 1000 0100 0101 */ TABDECL( OP_STMDA2), -/* 1000 0100 0110 */ TABDECL( OP_STMDA2), -/* 1000 0100 0111 */ TABDECL( OP_STMDA2), -/* 1000 0100 1000 */ TABDECL( OP_STMDA2), -/* 1000 0100 1001 */ TABDECL( OP_STMDA2), -/* 1000 0100 1010 */ TABDECL( OP_STMDA2), -/* 1000 0100 1011 */ TABDECL( OP_STMDA2), -/* 1000 0100 1100 */ TABDECL( OP_STMDA2), -/* 1000 0100 1101 */ TABDECL( OP_STMDA2), -/* 1000 0100 1110 */ TABDECL( OP_STMDA2), -/* 1000 0100 1111 */ TABDECL( OP_STMDA2), -/* 1000 0101 0000 */ TABDECL( OP_LDMDA2), -/* 1000 0101 0001 */ TABDECL( OP_LDMDA2), -/* 1000 0101 0010 */ TABDECL( OP_LDMDA2), -/* 1000 0101 0011 */ TABDECL( OP_LDMDA2), -/* 1000 0101 0100 */ TABDECL( OP_LDMDA2), -/* 1000 0101 0101 */ TABDECL( OP_LDMDA2), -/* 1000 0101 0110 */ TABDECL( OP_LDMDA2), -/* 1000 0101 0111 */ TABDECL( OP_LDMDA2), -/* 1000 0101 1000 */ TABDECL( OP_LDMDA2), -/* 1000 0101 1001 */ TABDECL( OP_LDMDA2), -/* 1000 0101 1010 */ TABDECL( OP_LDMDA2), -/* 1000 0101 1011 */ TABDECL( OP_LDMDA2), -/* 1000 0101 1100 */ TABDECL( OP_LDMDA2), -/* 1000 0101 1101 */ TABDECL( OP_LDMDA2), -/* 1000 0101 1110 */ TABDECL( OP_LDMDA2), -/* 1000 0101 1111 */ TABDECL( OP_LDMDA2), -/* 1000 0110 0000 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 0001 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 0010 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 0011 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 0100 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 0101 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 0110 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 0111 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 1000 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 1001 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 1010 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 1011 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 1100 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 1101 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 1110 */ TABDECL( OP_STMDA2_W), -/* 1000 0110 1111 */ TABDECL( OP_STMDA2_W), -/* 1000 0111 0000 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 0001 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 0010 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 0011 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 0100 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 0101 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 0110 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 0111 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 1000 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 1001 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 1010 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 1011 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 1100 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 1101 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 1110 */ TABDECL( OP_LDMDA2_W), -/* 1000 0111 1111 */ TABDECL( OP_LDMDA2_W), -/* 1000 1000 0000 */ TABDECL( OP_STMIA), -/* 1000 1000 0001 */ TABDECL( OP_STMIA), -/* 1000 1000 0010 */ TABDECL( OP_STMIA), -/* 1000 1000 0011 */ TABDECL( OP_STMIA), -/* 1000 1000 0100 */ TABDECL( OP_STMIA), -/* 1000 1000 0101 */ TABDECL( OP_STMIA), -/* 1000 1000 0110 */ TABDECL( OP_STMIA), -/* 1000 1000 0111 */ TABDECL( OP_STMIA), -/* 1000 1000 1000 */ TABDECL( OP_STMIA), -/* 1000 1000 1001 */ TABDECL( OP_STMIA), -/* 1000 1000 1010 */ TABDECL( OP_STMIA), -/* 1000 1000 1011 */ TABDECL( OP_STMIA), -/* 1000 1000 1100 */ TABDECL( OP_STMIA), -/* 1000 1000 1101 */ TABDECL( OP_STMIA), -/* 1000 1000 1110 */ TABDECL( OP_STMIA), -/* 1000 1000 1111 */ TABDECL( OP_STMIA), -/* 1000 1001 0000 */ TABDECL( OP_LDMIA), -/* 1000 1001 0001 */ TABDECL( OP_LDMIA), -/* 1000 1001 0010 */ TABDECL( OP_LDMIA), -/* 1000 1001 0011 */ TABDECL( OP_LDMIA), -/* 1000 1001 0100 */ TABDECL( OP_LDMIA), -/* 1000 1001 0101 */ TABDECL( OP_LDMIA), -/* 1000 1001 0110 */ TABDECL( OP_LDMIA), -/* 1000 1001 0111 */ TABDECL( OP_LDMIA), -/* 1000 1001 1000 */ TABDECL( OP_LDMIA), -/* 1000 1001 1001 */ TABDECL( OP_LDMIA), -/* 1000 1001 1010 */ TABDECL( OP_LDMIA), -/* 1000 1001 1011 */ TABDECL( OP_LDMIA), -/* 1000 1001 1100 */ TABDECL( OP_LDMIA), -/* 1000 1001 1101 */ TABDECL( OP_LDMIA), -/* 1000 1001 1110 */ TABDECL( OP_LDMIA), -/* 1000 1001 1111 */ TABDECL( OP_LDMIA), -/* 1000 1010 0000 */ TABDECL( OP_STMIA_W), -/* 1000 1010 0001 */ TABDECL( OP_STMIA_W), -/* 1000 1010 0010 */ TABDECL( OP_STMIA_W), -/* 1000 1010 0011 */ TABDECL( OP_STMIA_W), -/* 1000 1010 0100 */ TABDECL( OP_STMIA_W), -/* 1000 1010 0101 */ TABDECL( OP_STMIA_W), -/* 1000 1010 0110 */ TABDECL( OP_STMIA_W), -/* 1000 1010 0111 */ TABDECL( OP_STMIA_W), -/* 1000 1010 1000 */ TABDECL( OP_STMIA_W), -/* 1000 1010 1001 */ TABDECL( OP_STMIA_W), -/* 1000 1010 1010 */ TABDECL( OP_STMIA_W), -/* 1000 1010 1011 */ TABDECL( OP_STMIA_W), -/* 1000 1010 1100 */ TABDECL( OP_STMIA_W), -/* 1000 1010 1101 */ TABDECL( OP_STMIA_W), -/* 1000 1010 1110 */ TABDECL( OP_STMIA_W), -/* 1000 1010 1111 */ TABDECL( OP_STMIA_W), -/* 1000 1011 0000 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 0001 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 0010 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 0011 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 0100 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 0101 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 0110 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 0111 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 1000 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 1001 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 1010 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 1011 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 1100 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 1101 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 1110 */ TABDECL( OP_LDMIA_W), -/* 1000 1011 1111 */ TABDECL( OP_LDMIA_W), -/* 1000 1100 0000 */ TABDECL( OP_STMIA2), -/* 1000 1100 0001 */ TABDECL( OP_STMIA2), -/* 1000 1100 0010 */ TABDECL( OP_STMIA2), -/* 1000 1100 0011 */ TABDECL( OP_STMIA2), -/* 1000 1100 0100 */ TABDECL( OP_STMIA2), -/* 1000 1100 0101 */ TABDECL( OP_STMIA2), -/* 1000 1100 0110 */ TABDECL( OP_STMIA2), -/* 1000 1100 0111 */ TABDECL( OP_STMIA2), -/* 1000 1100 1000 */ TABDECL( OP_STMIA2), -/* 1000 1100 1001 */ TABDECL( OP_STMIA2), -/* 1000 1100 1010 */ TABDECL( OP_STMIA2), -/* 1000 1100 1011 */ TABDECL( OP_STMIA2), -/* 1000 1100 1100 */ TABDECL( OP_STMIA2), -/* 1000 1100 1101 */ TABDECL( OP_STMIA2), -/* 1000 1100 1110 */ TABDECL( OP_STMIA2), -/* 1000 1100 1111 */ TABDECL( OP_STMIA2), -/* 1000 1101 0000 */ TABDECL( OP_LDMIA2), -/* 1000 1101 0001 */ TABDECL( OP_LDMIA2), -/* 1000 1101 0010 */ TABDECL( OP_LDMIA2), -/* 1000 1101 0011 */ TABDECL( OP_LDMIA2), -/* 1000 1101 0100 */ TABDECL( OP_LDMIA2), -/* 1000 1101 0101 */ TABDECL( OP_LDMIA2), -/* 1000 1101 0110 */ TABDECL( OP_LDMIA2), -/* 1000 1101 0111 */ TABDECL( OP_LDMIA2), -/* 1000 1101 1000 */ TABDECL( OP_LDMIA2), -/* 1000 1101 1001 */ TABDECL( OP_LDMIA2), -/* 1000 1101 1010 */ TABDECL( OP_LDMIA2), -/* 1000 1101 1011 */ TABDECL( OP_LDMIA2), -/* 1000 1101 1100 */ TABDECL( OP_LDMIA2), -/* 1000 1101 1101 */ TABDECL( OP_LDMIA2), -/* 1000 1101 1110 */ TABDECL( OP_LDMIA2), -/* 1000 1101 1111 */ TABDECL( OP_LDMIA2), -/* 1000 1110 0000 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 0001 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 0010 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 0011 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 0100 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 0101 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 0110 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 0111 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 1000 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 1001 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 1010 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 1011 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 1100 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 1101 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 1110 */ TABDECL( OP_STMIA2_W), -/* 1000 1110 1111 */ TABDECL( OP_STMIA2_W), -/* 1000 1111 0000 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 0001 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 0010 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 0011 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 0100 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 0101 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 0110 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 0111 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 1000 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 1001 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 1010 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 1011 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 1100 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 1101 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 1110 */ TABDECL( OP_LDMIA2_W), -/* 1000 1111 1111 */ TABDECL( OP_LDMIA2_W), -/* 1001 0000 0000 */ TABDECL( OP_STMDB), -/* 1001 0000 0001 */ TABDECL( OP_STMDB), -/* 1001 0000 0010 */ TABDECL( OP_STMDB), -/* 1001 0000 0011 */ TABDECL( OP_STMDB), -/* 1001 0000 0100 */ TABDECL( OP_STMDB), -/* 1001 0000 0101 */ TABDECL( OP_STMDB), -/* 1001 0000 0110 */ TABDECL( OP_STMDB), -/* 1001 0000 0111 */ TABDECL( OP_STMDB), -/* 1001 0000 1000 */ TABDECL( OP_STMDB), -/* 1001 0000 1001 */ TABDECL( OP_STMDB), -/* 1001 0000 1010 */ TABDECL( OP_STMDB), -/* 1001 0000 1011 */ TABDECL( OP_STMDB), -/* 1001 0000 1100 */ TABDECL( OP_STMDB), -/* 1001 0000 1101 */ TABDECL( OP_STMDB), -/* 1001 0000 1110 */ TABDECL( OP_STMDB), -/* 1001 0000 1111 */ TABDECL( OP_STMDB), -/* 1001 0001 0000 */ TABDECL( OP_LDMDB), -/* 1001 0001 0001 */ TABDECL( OP_LDMDB), -/* 1001 0001 0010 */ TABDECL( OP_LDMDB), -/* 1001 0001 0011 */ TABDECL( OP_LDMDB), -/* 1001 0001 0100 */ TABDECL( OP_LDMDB), -/* 1001 0001 0101 */ TABDECL( OP_LDMDB), -/* 1001 0001 0110 */ TABDECL( OP_LDMDB), -/* 1001 0001 0111 */ TABDECL( OP_LDMDB), -/* 1001 0001 1000 */ TABDECL( OP_LDMDB), -/* 1001 0001 1001 */ TABDECL( OP_LDMDB), -/* 1001 0001 1010 */ TABDECL( OP_LDMDB), -/* 1001 0001 1011 */ TABDECL( OP_LDMDB), -/* 1001 0001 1100 */ TABDECL( OP_LDMDB), -/* 1001 0001 1101 */ TABDECL( OP_LDMDB), -/* 1001 0001 1110 */ TABDECL( OP_LDMDB), -/* 1001 0001 1111 */ TABDECL( OP_LDMDB), -/* 1001 0010 0000 */ TABDECL( OP_STMDB_W), -/* 1001 0010 0001 */ TABDECL( OP_STMDB_W), -/* 1001 0010 0010 */ TABDECL( OP_STMDB_W), -/* 1001 0010 0011 */ TABDECL( OP_STMDB_W), -/* 1001 0010 0100 */ TABDECL( OP_STMDB_W), -/* 1001 0010 0101 */ TABDECL( OP_STMDB_W), -/* 1001 0010 0110 */ TABDECL( OP_STMDB_W), -/* 1001 0010 0111 */ TABDECL( OP_STMDB_W), -/* 1001 0010 1000 */ TABDECL( OP_STMDB_W), -/* 1001 0010 1001 */ TABDECL( OP_STMDB_W), -/* 1001 0010 1010 */ TABDECL( OP_STMDB_W), -/* 1001 0010 1011 */ TABDECL( OP_STMDB_W), -/* 1001 0010 1100 */ TABDECL( OP_STMDB_W), -/* 1001 0010 1101 */ TABDECL( OP_STMDB_W), -/* 1001 0010 1110 */ TABDECL( OP_STMDB_W), -/* 1001 0010 1111 */ TABDECL( OP_STMDB_W), -/* 1001 0011 0000 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 0001 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 0010 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 0011 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 0100 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 0101 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 0110 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 0111 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 1000 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 1001 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 1010 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 1011 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 1100 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 1101 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 1110 */ TABDECL( OP_LDMDB_W), -/* 1001 0011 1111 */ TABDECL( OP_LDMDB_W), -/* 1001 0100 0000 */ TABDECL( OP_STMDB2), -/* 1001 0100 0001 */ TABDECL( OP_STMDB2), -/* 1001 0100 0010 */ TABDECL( OP_STMDB2), -/* 1001 0100 0011 */ TABDECL( OP_STMDB2), -/* 1001 0100 0100 */ TABDECL( OP_STMDB2), -/* 1001 0100 0101 */ TABDECL( OP_STMDB2), -/* 1001 0100 0110 */ TABDECL( OP_STMDB2), -/* 1001 0100 0111 */ TABDECL( OP_STMDB2), -/* 1001 0100 1000 */ TABDECL( OP_STMDB2), -/* 1001 0100 1001 */ TABDECL( OP_STMDB2), -/* 1001 0100 1010 */ TABDECL( OP_STMDB2), -/* 1001 0100 1011 */ TABDECL( OP_STMDB2), -/* 1001 0100 1100 */ TABDECL( OP_STMDB2), -/* 1001 0100 1101 */ TABDECL( OP_STMDB2), -/* 1001 0100 1110 */ TABDECL( OP_STMDB2), -/* 1001 0100 1111 */ TABDECL( OP_STMDB2), -/* 1001 0101 0000 */ TABDECL( OP_LDMDB2), -/* 1001 0101 0001 */ TABDECL( OP_LDMDB2), -/* 1001 0101 0010 */ TABDECL( OP_LDMDB2), -/* 1001 0101 0011 */ TABDECL( OP_LDMDB2), -/* 1001 0101 0100 */ TABDECL( OP_LDMDB2), -/* 1001 0101 0101 */ TABDECL( OP_LDMDB2), -/* 1001 0101 0110 */ TABDECL( OP_LDMDB2), -/* 1001 0101 0111 */ TABDECL( OP_LDMDB2), -/* 1001 0101 1000 */ TABDECL( OP_LDMDB2), -/* 1001 0101 1001 */ TABDECL( OP_LDMDB2), -/* 1001 0101 1010 */ TABDECL( OP_LDMDB2), -/* 1001 0101 1011 */ TABDECL( OP_LDMDB2), -/* 1001 0101 1100 */ TABDECL( OP_LDMDB2), -/* 1001 0101 1101 */ TABDECL( OP_LDMDB2), -/* 1001 0101 1110 */ TABDECL( OP_LDMDB2), -/* 1001 0101 1111 */ TABDECL( OP_LDMDB2), -/* 1001 0110 0000 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 0001 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 0010 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 0011 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 0100 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 0101 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 0110 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 0111 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 1000 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 1001 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 1010 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 1011 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 1100 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 1101 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 1110 */ TABDECL( OP_STMDB2_W), -/* 1001 0110 1111 */ TABDECL( OP_STMDB2_W), -/* 1001 0111 0000 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 0001 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 0010 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 0011 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 0100 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 0101 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 0110 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 0111 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 1000 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 1001 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 1010 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 1011 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 1100 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 1101 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 1110 */ TABDECL( OP_LDMDB2_W), -/* 1001 0111 1111 */ TABDECL( OP_LDMDB2_W), -/* 1001 1000 0000 */ TABDECL( OP_STMIB), -/* 1001 1000 0001 */ TABDECL( OP_STMIB), -/* 1001 1000 0010 */ TABDECL( OP_STMIB), -/* 1001 1000 0011 */ TABDECL( OP_STMIB), -/* 1001 1000 0100 */ TABDECL( OP_STMIB), -/* 1001 1000 0101 */ TABDECL( OP_STMIB), -/* 1001 1000 0110 */ TABDECL( OP_STMIB), -/* 1001 1000 0111 */ TABDECL( OP_STMIB), -/* 1001 1000 1000 */ TABDECL( OP_STMIB), -/* 1001 1000 1001 */ TABDECL( OP_STMIB), -/* 1001 1000 1010 */ TABDECL( OP_STMIB), -/* 1001 1000 1011 */ TABDECL( OP_STMIB), -/* 1001 1000 1100 */ TABDECL( OP_STMIB), -/* 1001 1000 1101 */ TABDECL( OP_STMIB), -/* 1001 1000 1110 */ TABDECL( OP_STMIB), -/* 1001 1000 1111 */ TABDECL( OP_STMIB), -/* 1001 1001 0000 */ TABDECL( OP_LDMIB), -/* 1001 1001 0001 */ TABDECL( OP_LDMIB), -/* 1001 1001 0010 */ TABDECL( OP_LDMIB), -/* 1001 1001 0011 */ TABDECL( OP_LDMIB), -/* 1001 1001 0100 */ TABDECL( OP_LDMIB), -/* 1001 1001 0101 */ TABDECL( OP_LDMIB), -/* 1001 1001 0110 */ TABDECL( OP_LDMIB), -/* 1001 1001 0111 */ TABDECL( OP_LDMIB), -/* 1001 1001 1000 */ TABDECL( OP_LDMIB), -/* 1001 1001 1001 */ TABDECL( OP_LDMIB), -/* 1001 1001 1010 */ TABDECL( OP_LDMIB), -/* 1001 1001 1011 */ TABDECL( OP_LDMIB), -/* 1001 1001 1100 */ TABDECL( OP_LDMIB), -/* 1001 1001 1101 */ TABDECL( OP_LDMIB), -/* 1001 1001 1110 */ TABDECL( OP_LDMIB), -/* 1001 1001 1111 */ TABDECL( OP_LDMIB), -/* 1001 1010 0000 */ TABDECL( OP_STMIB_W), -/* 1001 1010 0001 */ TABDECL( OP_STMIB_W), -/* 1001 1010 0010 */ TABDECL( OP_STMIB_W), -/* 1001 1010 0011 */ TABDECL( OP_STMIB_W), -/* 1001 1010 0100 */ TABDECL( OP_STMIB_W), -/* 1001 1010 0101 */ TABDECL( OP_STMIB_W), -/* 1001 1010 0110 */ TABDECL( OP_STMIB_W), -/* 1001 1010 0111 */ TABDECL( OP_STMIB_W), -/* 1001 1010 1000 */ TABDECL( OP_STMIB_W), -/* 1001 1010 1001 */ TABDECL( OP_STMIB_W), -/* 1001 1010 1010 */ TABDECL( OP_STMIB_W), -/* 1001 1010 1011 */ TABDECL( OP_STMIB_W), -/* 1001 1010 1100 */ TABDECL( OP_STMIB_W), -/* 1001 1010 1101 */ TABDECL( OP_STMIB_W), -/* 1001 1010 1110 */ TABDECL( OP_STMIB_W), -/* 1001 1010 1111 */ TABDECL( OP_STMIB_W), -/* 1001 1011 0000 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 0001 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 0010 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 0011 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 0100 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 0101 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 0110 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 0111 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 1000 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 1001 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 1010 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 1011 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 1100 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 1101 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 1110 */ TABDECL( OP_LDMIB_W), -/* 1001 1011 1111 */ TABDECL( OP_LDMIB_W), -/* 1001 1100 0000 */ TABDECL( OP_STMIB2), -/* 1001 1100 0001 */ TABDECL( OP_STMIB2), -/* 1001 1100 0010 */ TABDECL( OP_STMIB2), -/* 1001 1100 0011 */ TABDECL( OP_STMIB2), -/* 1001 1100 0100 */ TABDECL( OP_STMIB2), -/* 1001 1100 0101 */ TABDECL( OP_STMIB2), -/* 1001 1100 0110 */ TABDECL( OP_STMIB2), -/* 1001 1100 0111 */ TABDECL( OP_STMIB2), -/* 1001 1100 1000 */ TABDECL( OP_STMIB2), -/* 1001 1100 1001 */ TABDECL( OP_STMIB2), -/* 1001 1100 1010 */ TABDECL( OP_STMIB2), -/* 1001 1100 1011 */ TABDECL( OP_STMIB2), -/* 1001 1100 1100 */ TABDECL( OP_STMIB2), -/* 1001 1100 1101 */ TABDECL( OP_STMIB2), -/* 1001 1100 1110 */ TABDECL( OP_STMIB2), -/* 1001 1100 1111 */ TABDECL( OP_STMIB2), -/* 1001 1101 0000 */ TABDECL( OP_LDMIB2), -/* 1001 1101 0001 */ TABDECL( OP_LDMIB2), -/* 1001 1101 0010 */ TABDECL( OP_LDMIB2), -/* 1001 1101 0011 */ TABDECL( OP_LDMIB2), -/* 1001 1101 0100 */ TABDECL( OP_LDMIB2), -/* 1001 1101 0101 */ TABDECL( OP_LDMIB2), -/* 1001 1101 0110 */ TABDECL( OP_LDMIB2), -/* 1001 1101 0111 */ TABDECL( OP_LDMIB2), -/* 1001 1101 1000 */ TABDECL( OP_LDMIB2), -/* 1001 1101 1001 */ TABDECL( OP_LDMIB2), -/* 1001 1101 1010 */ TABDECL( OP_LDMIB2), -/* 1001 1101 1011 */ TABDECL( OP_LDMIB2), -/* 1001 1101 1100 */ TABDECL( OP_LDMIB2), -/* 1001 1101 1101 */ TABDECL( OP_LDMIB2), -/* 1001 1101 1110 */ TABDECL( OP_LDMIB2), -/* 1001 1101 1111 */ TABDECL( OP_LDMIB2), -/* 1001 1110 0000 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 0001 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 0010 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 0011 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 0100 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 0101 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 0110 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 0111 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 1000 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 1001 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 1010 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 1011 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 1100 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 1101 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 1110 */ TABDECL( OP_STMIB2_W), -/* 1001 1110 1111 */ TABDECL( OP_STMIB2_W), -/* 1001 1111 0000 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 0001 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 0010 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 0011 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 0100 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 0101 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 0110 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 0111 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 1000 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 1001 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 1010 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 1011 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 1100 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 1101 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 1110 */ TABDECL( OP_LDMIB2_W), -/* 1001 1111 1111 */ TABDECL( OP_LDMIB2_W), -/* 1010 0000 0000 */ TABDECL( OP_B), -/* 1010 0000 0001 */ TABDECL( OP_B), -/* 1010 0000 0010 */ TABDECL( OP_B), -/* 1010 0000 0011 */ TABDECL( OP_B), -/* 1010 0000 0100 */ TABDECL( OP_B), -/* 1010 0000 0101 */ TABDECL( OP_B), -/* 1010 0000 0110 */ TABDECL( OP_B), -/* 1010 0000 0111 */ TABDECL( OP_B), -/* 1010 0000 1000 */ TABDECL( OP_B), -/* 1010 0000 1001 */ TABDECL( OP_B), -/* 1010 0000 1010 */ TABDECL( OP_B), -/* 1010 0000 1011 */ TABDECL( OP_B), -/* 1010 0000 1100 */ TABDECL( OP_B), -/* 1010 0000 1101 */ TABDECL( OP_B), -/* 1010 0000 1110 */ TABDECL( OP_B), -/* 1010 0000 1111 */ TABDECL( OP_B), -/* 1010 0001 0000 */ TABDECL( OP_B), -/* 1010 0001 0001 */ TABDECL( OP_B), -/* 1010 0001 0010 */ TABDECL( OP_B), -/* 1010 0001 0011 */ TABDECL( OP_B), -/* 1010 0001 0100 */ TABDECL( OP_B), -/* 1010 0001 0101 */ TABDECL( OP_B), -/* 1010 0001 0110 */ TABDECL( OP_B), -/* 1010 0001 0111 */ TABDECL( OP_B), -/* 1010 0001 1000 */ TABDECL( OP_B), -/* 1010 0001 1001 */ TABDECL( OP_B), -/* 1010 0001 1010 */ TABDECL( OP_B), -/* 1010 0001 1011 */ TABDECL( OP_B), -/* 1010 0001 1100 */ TABDECL( OP_B), -/* 1010 0001 1101 */ TABDECL( OP_B), -/* 1010 0001 1110 */ TABDECL( OP_B), -/* 1010 0001 1111 */ TABDECL( OP_B), -/* 1010 0010 0000 */ TABDECL( OP_B), -/* 1010 0010 0001 */ TABDECL( OP_B), -/* 1010 0010 0010 */ TABDECL( OP_B), -/* 1010 0010 0011 */ TABDECL( OP_B), -/* 1010 0010 0100 */ TABDECL( OP_B), -/* 1010 0010 0101 */ TABDECL( OP_B), -/* 1010 0010 0110 */ TABDECL( OP_B), -/* 1010 0010 0111 */ TABDECL( OP_B), -/* 1010 0010 1000 */ TABDECL( OP_B), -/* 1010 0010 1001 */ TABDECL( OP_B), -/* 1010 0010 1010 */ TABDECL( OP_B), -/* 1010 0010 1011 */ TABDECL( OP_B), -/* 1010 0010 1100 */ TABDECL( OP_B), -/* 1010 0010 1101 */ TABDECL( OP_B), -/* 1010 0010 1110 */ TABDECL( OP_B), -/* 1010 0010 1111 */ TABDECL( OP_B), -/* 1010 0011 0000 */ TABDECL( OP_B), -/* 1010 0011 0001 */ TABDECL( OP_B), -/* 1010 0011 0010 */ TABDECL( OP_B), -/* 1010 0011 0011 */ TABDECL( OP_B), -/* 1010 0011 0100 */ TABDECL( OP_B), -/* 1010 0011 0101 */ TABDECL( OP_B), -/* 1010 0011 0110 */ TABDECL( OP_B), -/* 1010 0011 0111 */ TABDECL( OP_B), -/* 1010 0011 1000 */ TABDECL( OP_B), -/* 1010 0011 1001 */ TABDECL( OP_B), -/* 1010 0011 1010 */ TABDECL( OP_B), -/* 1010 0011 1011 */ TABDECL( OP_B), -/* 1010 0011 1100 */ TABDECL( OP_B), -/* 1010 0011 1101 */ TABDECL( OP_B), -/* 1010 0011 1110 */ TABDECL( OP_B), -/* 1010 0011 1111 */ TABDECL( OP_B), -/* 1010 0100 0000 */ TABDECL( OP_B), -/* 1010 0100 0001 */ TABDECL( OP_B), -/* 1010 0100 0010 */ TABDECL( OP_B), -/* 1010 0100 0011 */ TABDECL( OP_B), -/* 1010 0100 0100 */ TABDECL( OP_B), -/* 1010 0100 0101 */ TABDECL( OP_B), -/* 1010 0100 0110 */ TABDECL( OP_B), -/* 1010 0100 0111 */ TABDECL( OP_B), -/* 1010 0100 1000 */ TABDECL( OP_B), -/* 1010 0100 1001 */ TABDECL( OP_B), -/* 1010 0100 1010 */ TABDECL( OP_B), -/* 1010 0100 1011 */ TABDECL( OP_B), -/* 1010 0100 1100 */ TABDECL( OP_B), -/* 1010 0100 1101 */ TABDECL( OP_B), -/* 1010 0100 1110 */ TABDECL( OP_B), -/* 1010 0100 1111 */ TABDECL( OP_B), -/* 1010 0101 0000 */ TABDECL( OP_B), -/* 1010 0101 0001 */ TABDECL( OP_B), -/* 1010 0101 0010 */ TABDECL( OP_B), -/* 1010 0101 0011 */ TABDECL( OP_B), -/* 1010 0101 0100 */ TABDECL( OP_B), -/* 1010 0101 0101 */ TABDECL( OP_B), -/* 1010 0101 0110 */ TABDECL( OP_B), -/* 1010 0101 0111 */ TABDECL( OP_B), -/* 1010 0101 1000 */ TABDECL( OP_B), -/* 1010 0101 1001 */ TABDECL( OP_B), -/* 1010 0101 1010 */ TABDECL( OP_B), -/* 1010 0101 1011 */ TABDECL( OP_B), -/* 1010 0101 1100 */ TABDECL( OP_B), -/* 1010 0101 1101 */ TABDECL( OP_B), -/* 1010 0101 1110 */ TABDECL( OP_B), -/* 1010 0101 1111 */ TABDECL( OP_B), -/* 1010 0110 0000 */ TABDECL( OP_B), -/* 1010 0110 0001 */ TABDECL( OP_B), -/* 1010 0110 0010 */ TABDECL( OP_B), -/* 1010 0110 0011 */ TABDECL( OP_B), -/* 1010 0110 0100 */ TABDECL( OP_B), -/* 1010 0110 0101 */ TABDECL( OP_B), -/* 1010 0110 0110 */ TABDECL( OP_B), -/* 1010 0110 0111 */ TABDECL( OP_B), -/* 1010 0110 1000 */ TABDECL( OP_B), -/* 1010 0110 1001 */ TABDECL( OP_B), -/* 1010 0110 1010 */ TABDECL( OP_B), -/* 1010 0110 1011 */ TABDECL( OP_B), -/* 1010 0110 1100 */ TABDECL( OP_B), -/* 1010 0110 1101 */ TABDECL( OP_B), -/* 1010 0110 1110 */ TABDECL( OP_B), -/* 1010 0110 1111 */ TABDECL( OP_B), -/* 1010 0111 0000 */ TABDECL( OP_B), -/* 1010 0111 0001 */ TABDECL( OP_B), -/* 1010 0111 0010 */ TABDECL( OP_B), -/* 1010 0111 0011 */ TABDECL( OP_B), -/* 1010 0111 0100 */ TABDECL( OP_B), -/* 1010 0111 0101 */ TABDECL( OP_B), -/* 1010 0111 0110 */ TABDECL( OP_B), -/* 1010 0111 0111 */ TABDECL( OP_B), -/* 1010 0111 1000 */ TABDECL( OP_B), -/* 1010 0111 1001 */ TABDECL( OP_B), -/* 1010 0111 1010 */ TABDECL( OP_B), -/* 1010 0111 1011 */ TABDECL( OP_B), -/* 1010 0111 1100 */ TABDECL( OP_B), -/* 1010 0111 1101 */ TABDECL( OP_B), -/* 1010 0111 1110 */ TABDECL( OP_B), -/* 1010 0111 1111 */ TABDECL( OP_B), -/* 1010 1000 0000 */ TABDECL( OP_B), -/* 1010 1000 0001 */ TABDECL( OP_B), -/* 1010 1000 0010 */ TABDECL( OP_B), -/* 1010 1000 0011 */ TABDECL( OP_B), -/* 1010 1000 0100 */ TABDECL( OP_B), -/* 1010 1000 0101 */ TABDECL( OP_B), -/* 1010 1000 0110 */ TABDECL( OP_B), -/* 1010 1000 0111 */ TABDECL( OP_B), -/* 1010 1000 1000 */ TABDECL( OP_B), -/* 1010 1000 1001 */ TABDECL( OP_B), -/* 1010 1000 1010 */ TABDECL( OP_B), -/* 1010 1000 1011 */ TABDECL( OP_B), -/* 1010 1000 1100 */ TABDECL( OP_B), -/* 1010 1000 1101 */ TABDECL( OP_B), -/* 1010 1000 1110 */ TABDECL( OP_B), -/* 1010 1000 1111 */ TABDECL( OP_B), -/* 1010 1001 0000 */ TABDECL( OP_B), -/* 1010 1001 0001 */ TABDECL( OP_B), -/* 1010 1001 0010 */ TABDECL( OP_B), -/* 1010 1001 0011 */ TABDECL( OP_B), -/* 1010 1001 0100 */ TABDECL( OP_B), -/* 1010 1001 0101 */ TABDECL( OP_B), -/* 1010 1001 0110 */ TABDECL( OP_B), -/* 1010 1001 0111 */ TABDECL( OP_B), -/* 1010 1001 1000 */ TABDECL( OP_B), -/* 1010 1001 1001 */ TABDECL( OP_B), -/* 1010 1001 1010 */ TABDECL( OP_B), -/* 1010 1001 1011 */ TABDECL( OP_B), -/* 1010 1001 1100 */ TABDECL( OP_B), -/* 1010 1001 1101 */ TABDECL( OP_B), -/* 1010 1001 1110 */ TABDECL( OP_B), -/* 1010 1001 1111 */ TABDECL( OP_B), -/* 1010 1010 0000 */ TABDECL( OP_B), -/* 1010 1010 0001 */ TABDECL( OP_B), -/* 1010 1010 0010 */ TABDECL( OP_B), -/* 1010 1010 0011 */ TABDECL( OP_B), -/* 1010 1010 0100 */ TABDECL( OP_B), -/* 1010 1010 0101 */ TABDECL( OP_B), -/* 1010 1010 0110 */ TABDECL( OP_B), -/* 1010 1010 0111 */ TABDECL( OP_B), -/* 1010 1010 1000 */ TABDECL( OP_B), -/* 1010 1010 1001 */ TABDECL( OP_B), -/* 1010 1010 1010 */ TABDECL( OP_B), -/* 1010 1010 1011 */ TABDECL( OP_B), -/* 1010 1010 1100 */ TABDECL( OP_B), -/* 1010 1010 1101 */ TABDECL( OP_B), -/* 1010 1010 1110 */ TABDECL( OP_B), -/* 1010 1010 1111 */ TABDECL( OP_B), -/* 1010 1011 0000 */ TABDECL( OP_B), -/* 1010 1011 0001 */ TABDECL( OP_B), -/* 1010 1011 0010 */ TABDECL( OP_B), -/* 1010 1011 0011 */ TABDECL( OP_B), -/* 1010 1011 0100 */ TABDECL( OP_B), -/* 1010 1011 0101 */ TABDECL( OP_B), -/* 1010 1011 0110 */ TABDECL( OP_B), -/* 1010 1011 0111 */ TABDECL( OP_B), -/* 1010 1011 1000 */ TABDECL( OP_B), -/* 1010 1011 1001 */ TABDECL( OP_B), -/* 1010 1011 1010 */ TABDECL( OP_B), -/* 1010 1011 1011 */ TABDECL( OP_B), -/* 1010 1011 1100 */ TABDECL( OP_B), -/* 1010 1011 1101 */ TABDECL( OP_B), -/* 1010 1011 1110 */ TABDECL( OP_B), -/* 1010 1011 1111 */ TABDECL( OP_B), -/* 1010 1100 0000 */ TABDECL( OP_B), -/* 1010 1100 0001 */ TABDECL( OP_B), -/* 1010 1100 0010 */ TABDECL( OP_B), -/* 1010 1100 0011 */ TABDECL( OP_B), -/* 1010 1100 0100 */ TABDECL( OP_B), -/* 1010 1100 0101 */ TABDECL( OP_B), -/* 1010 1100 0110 */ TABDECL( OP_B), -/* 1010 1100 0111 */ TABDECL( OP_B), -/* 1010 1100 1000 */ TABDECL( OP_B), -/* 1010 1100 1001 */ TABDECL( OP_B), -/* 1010 1100 1010 */ TABDECL( OP_B), -/* 1010 1100 1011 */ TABDECL( OP_B), -/* 1010 1100 1100 */ TABDECL( OP_B), -/* 1010 1100 1101 */ TABDECL( OP_B), -/* 1010 1100 1110 */ TABDECL( OP_B), -/* 1010 1100 1111 */ TABDECL( OP_B), -/* 1010 1101 0000 */ TABDECL( OP_B), -/* 1010 1101 0001 */ TABDECL( OP_B), -/* 1010 1101 0010 */ TABDECL( OP_B), -/* 1010 1101 0011 */ TABDECL( OP_B), -/* 1010 1101 0100 */ TABDECL( OP_B), -/* 1010 1101 0101 */ TABDECL( OP_B), -/* 1010 1101 0110 */ TABDECL( OP_B), -/* 1010 1101 0111 */ TABDECL( OP_B), -/* 1010 1101 1000 */ TABDECL( OP_B), -/* 1010 1101 1001 */ TABDECL( OP_B), -/* 1010 1101 1010 */ TABDECL( OP_B), -/* 1010 1101 1011 */ TABDECL( OP_B), -/* 1010 1101 1100 */ TABDECL( OP_B), -/* 1010 1101 1101 */ TABDECL( OP_B), -/* 1010 1101 1110 */ TABDECL( OP_B), -/* 1010 1101 1111 */ TABDECL( OP_B), -/* 1010 1110 0000 */ TABDECL( OP_B), -/* 1010 1110 0001 */ TABDECL( OP_B), -/* 1010 1110 0010 */ TABDECL( OP_B), -/* 1010 1110 0011 */ TABDECL( OP_B), -/* 1010 1110 0100 */ TABDECL( OP_B), -/* 1010 1110 0101 */ TABDECL( OP_B), -/* 1010 1110 0110 */ TABDECL( OP_B), -/* 1010 1110 0111 */ TABDECL( OP_B), -/* 1010 1110 1000 */ TABDECL( OP_B), -/* 1010 1110 1001 */ TABDECL( OP_B), -/* 1010 1110 1010 */ TABDECL( OP_B), -/* 1010 1110 1011 */ TABDECL( OP_B), -/* 1010 1110 1100 */ TABDECL( OP_B), -/* 1010 1110 1101 */ TABDECL( OP_B), -/* 1010 1110 1110 */ TABDECL( OP_B), -/* 1010 1110 1111 */ TABDECL( OP_B), -/* 1010 1111 0000 */ TABDECL( OP_B), -/* 1010 1111 0001 */ TABDECL( OP_B), -/* 1010 1111 0010 */ TABDECL( OP_B), -/* 1010 1111 0011 */ TABDECL( OP_B), -/* 1010 1111 0100 */ TABDECL( OP_B), -/* 1010 1111 0101 */ TABDECL( OP_B), -/* 1010 1111 0110 */ TABDECL( OP_B), -/* 1010 1111 0111 */ TABDECL( OP_B), -/* 1010 1111 1000 */ TABDECL( OP_B), -/* 1010 1111 1001 */ TABDECL( OP_B), -/* 1010 1111 1010 */ TABDECL( OP_B), -/* 1010 1111 1011 */ TABDECL( OP_B), -/* 1010 1111 1100 */ TABDECL( OP_B), -/* 1010 1111 1101 */ TABDECL( OP_B), -/* 1010 1111 1110 */ TABDECL( OP_B), -/* 1010 1111 1111 */ TABDECL( OP_B), -/* 1011 0000 0000 */ TABDECL( OP_BL), -/* 1011 0000 0001 */ TABDECL( OP_BL), -/* 1011 0000 0010 */ TABDECL( OP_BL), -/* 1011 0000 0011 */ TABDECL( OP_BL), -/* 1011 0000 0100 */ TABDECL( OP_BL), -/* 1011 0000 0101 */ TABDECL( OP_BL), -/* 1011 0000 0110 */ TABDECL( OP_BL), -/* 1011 0000 0111 */ TABDECL( OP_BL), -/* 1011 0000 1000 */ TABDECL( OP_BL), -/* 1011 0000 1001 */ TABDECL( OP_BL), -/* 1011 0000 1010 */ TABDECL( OP_BL), -/* 1011 0000 1011 */ TABDECL( OP_BL), -/* 1011 0000 1100 */ TABDECL( OP_BL), -/* 1011 0000 1101 */ TABDECL( OP_BL), -/* 1011 0000 1110 */ TABDECL( OP_BL), -/* 1011 0000 1111 */ TABDECL( OP_BL), -/* 1011 0001 0000 */ TABDECL( OP_BL), -/* 1011 0001 0001 */ TABDECL( OP_BL), -/* 1011 0001 0010 */ TABDECL( OP_BL), -/* 1011 0001 0011 */ TABDECL( OP_BL), -/* 1011 0001 0100 */ TABDECL( OP_BL), -/* 1011 0001 0101 */ TABDECL( OP_BL), -/* 1011 0001 0110 */ TABDECL( OP_BL), -/* 1011 0001 0111 */ TABDECL( OP_BL), -/* 1011 0001 1000 */ TABDECL( OP_BL), -/* 1011 0001 1001 */ TABDECL( OP_BL), -/* 1011 0001 1010 */ TABDECL( OP_BL), -/* 1011 0001 1011 */ TABDECL( OP_BL), -/* 1011 0001 1100 */ TABDECL( OP_BL), -/* 1011 0001 1101 */ TABDECL( OP_BL), -/* 1011 0001 1110 */ TABDECL( OP_BL), -/* 1011 0001 1111 */ TABDECL( OP_BL), -/* 1011 0010 0000 */ TABDECL( OP_BL), -/* 1011 0010 0001 */ TABDECL( OP_BL), -/* 1011 0010 0010 */ TABDECL( OP_BL), -/* 1011 0010 0011 */ TABDECL( OP_BL), -/* 1011 0010 0100 */ TABDECL( OP_BL), -/* 1011 0010 0101 */ TABDECL( OP_BL), -/* 1011 0010 0110 */ TABDECL( OP_BL), -/* 1011 0010 0111 */ TABDECL( OP_BL), -/* 1011 0010 1000 */ TABDECL( OP_BL), -/* 1011 0010 1001 */ TABDECL( OP_BL), -/* 1011 0010 1010 */ TABDECL( OP_BL), -/* 1011 0010 1011 */ TABDECL( OP_BL), -/* 1011 0010 1100 */ TABDECL( OP_BL), -/* 1011 0010 1101 */ TABDECL( OP_BL), -/* 1011 0010 1110 */ TABDECL( OP_BL), -/* 1011 0010 1111 */ TABDECL( OP_BL), -/* 1011 0011 0000 */ TABDECL( OP_BL), -/* 1011 0011 0001 */ TABDECL( OP_BL), -/* 1011 0011 0010 */ TABDECL( OP_BL), -/* 1011 0011 0011 */ TABDECL( OP_BL), -/* 1011 0011 0100 */ TABDECL( OP_BL), -/* 1011 0011 0101 */ TABDECL( OP_BL), -/* 1011 0011 0110 */ TABDECL( OP_BL), -/* 1011 0011 0111 */ TABDECL( OP_BL), -/* 1011 0011 1000 */ TABDECL( OP_BL), -/* 1011 0011 1001 */ TABDECL( OP_BL), -/* 1011 0011 1010 */ TABDECL( OP_BL), -/* 1011 0011 1011 */ TABDECL( OP_BL), -/* 1011 0011 1100 */ TABDECL( OP_BL), -/* 1011 0011 1101 */ TABDECL( OP_BL), -/* 1011 0011 1110 */ TABDECL( OP_BL), -/* 1011 0011 1111 */ TABDECL( OP_BL), -/* 1011 0100 0000 */ TABDECL( OP_BL), -/* 1011 0100 0001 */ TABDECL( OP_BL), -/* 1011 0100 0010 */ TABDECL( OP_BL), -/* 1011 0100 0011 */ TABDECL( OP_BL), -/* 1011 0100 0100 */ TABDECL( OP_BL), -/* 1011 0100 0101 */ TABDECL( OP_BL), -/* 1011 0100 0110 */ TABDECL( OP_BL), -/* 1011 0100 0111 */ TABDECL( OP_BL), -/* 1011 0100 1000 */ TABDECL( OP_BL), -/* 1011 0100 1001 */ TABDECL( OP_BL), -/* 1011 0100 1010 */ TABDECL( OP_BL), -/* 1011 0100 1011 */ TABDECL( OP_BL), -/* 1011 0100 1100 */ TABDECL( OP_BL), -/* 1011 0100 1101 */ TABDECL( OP_BL), -/* 1011 0100 1110 */ TABDECL( OP_BL), -/* 1011 0100 1111 */ TABDECL( OP_BL), -/* 1011 0101 0000 */ TABDECL( OP_BL), -/* 1011 0101 0001 */ TABDECL( OP_BL), -/* 1011 0101 0010 */ TABDECL( OP_BL), -/* 1011 0101 0011 */ TABDECL( OP_BL), -/* 1011 0101 0100 */ TABDECL( OP_BL), -/* 1011 0101 0101 */ TABDECL( OP_BL), -/* 1011 0101 0110 */ TABDECL( OP_BL), -/* 1011 0101 0111 */ TABDECL( OP_BL), -/* 1011 0101 1000 */ TABDECL( OP_BL), -/* 1011 0101 1001 */ TABDECL( OP_BL), -/* 1011 0101 1010 */ TABDECL( OP_BL), -/* 1011 0101 1011 */ TABDECL( OP_BL), -/* 1011 0101 1100 */ TABDECL( OP_BL), -/* 1011 0101 1101 */ TABDECL( OP_BL), -/* 1011 0101 1110 */ TABDECL( OP_BL), -/* 1011 0101 1111 */ TABDECL( OP_BL), -/* 1011 0110 0000 */ TABDECL( OP_BL), -/* 1011 0110 0001 */ TABDECL( OP_BL), -/* 1011 0110 0010 */ TABDECL( OP_BL), -/* 1011 0110 0011 */ TABDECL( OP_BL), -/* 1011 0110 0100 */ TABDECL( OP_BL), -/* 1011 0110 0101 */ TABDECL( OP_BL), -/* 1011 0110 0110 */ TABDECL( OP_BL), -/* 1011 0110 0111 */ TABDECL( OP_BL), -/* 1011 0110 1000 */ TABDECL( OP_BL), -/* 1011 0110 1001 */ TABDECL( OP_BL), -/* 1011 0110 1010 */ TABDECL( OP_BL), -/* 1011 0110 1011 */ TABDECL( OP_BL), -/* 1011 0110 1100 */ TABDECL( OP_BL), -/* 1011 0110 1101 */ TABDECL( OP_BL), -/* 1011 0110 1110 */ TABDECL( OP_BL), -/* 1011 0110 1111 */ TABDECL( OP_BL), -/* 1011 0111 0000 */ TABDECL( OP_BL), -/* 1011 0111 0001 */ TABDECL( OP_BL), -/* 1011 0111 0010 */ TABDECL( OP_BL), -/* 1011 0111 0011 */ TABDECL( OP_BL), -/* 1011 0111 0100 */ TABDECL( OP_BL), -/* 1011 0111 0101 */ TABDECL( OP_BL), -/* 1011 0111 0110 */ TABDECL( OP_BL), -/* 1011 0111 0111 */ TABDECL( OP_BL), -/* 1011 0111 1000 */ TABDECL( OP_BL), -/* 1011 0111 1001 */ TABDECL( OP_BL), -/* 1011 0111 1010 */ TABDECL( OP_BL), -/* 1011 0111 1011 */ TABDECL( OP_BL), -/* 1011 0111 1100 */ TABDECL( OP_BL), -/* 1011 0111 1101 */ TABDECL( OP_BL), -/* 1011 0111 1110 */ TABDECL( OP_BL), -/* 1011 0111 1111 */ TABDECL( OP_BL), -/* 1011 1000 0000 */ TABDECL( OP_BL), -/* 1011 1000 0001 */ TABDECL( OP_BL), -/* 1011 1000 0010 */ TABDECL( OP_BL), -/* 1011 1000 0011 */ TABDECL( OP_BL), -/* 1011 1000 0100 */ TABDECL( OP_BL), -/* 1011 1000 0101 */ TABDECL( OP_BL), -/* 1011 1000 0110 */ TABDECL( OP_BL), -/* 1011 1000 0111 */ TABDECL( OP_BL), -/* 1011 1000 1000 */ TABDECL( OP_BL), -/* 1011 1000 1001 */ TABDECL( OP_BL), -/* 1011 1000 1010 */ TABDECL( OP_BL), -/* 1011 1000 1011 */ TABDECL( OP_BL), -/* 1011 1000 1100 */ TABDECL( OP_BL), -/* 1011 1000 1101 */ TABDECL( OP_BL), -/* 1011 1000 1110 */ TABDECL( OP_BL), -/* 1011 1000 1111 */ TABDECL( OP_BL), -/* 1011 1001 0000 */ TABDECL( OP_BL), -/* 1011 1001 0001 */ TABDECL( OP_BL), -/* 1011 1001 0010 */ TABDECL( OP_BL), -/* 1011 1001 0011 */ TABDECL( OP_BL), -/* 1011 1001 0100 */ TABDECL( OP_BL), -/* 1011 1001 0101 */ TABDECL( OP_BL), -/* 1011 1001 0110 */ TABDECL( OP_BL), -/* 1011 1001 0111 */ TABDECL( OP_BL), -/* 1011 1001 1000 */ TABDECL( OP_BL), -/* 1011 1001 1001 */ TABDECL( OP_BL), -/* 1011 1001 1010 */ TABDECL( OP_BL), -/* 1011 1001 1011 */ TABDECL( OP_BL), -/* 1011 1001 1100 */ TABDECL( OP_BL), -/* 1011 1001 1101 */ TABDECL( OP_BL), -/* 1011 1001 1110 */ TABDECL( OP_BL), -/* 1011 1001 1111 */ TABDECL( OP_BL), -/* 1011 1010 0000 */ TABDECL( OP_BL), -/* 1011 1010 0001 */ TABDECL( OP_BL), -/* 1011 1010 0010 */ TABDECL( OP_BL), -/* 1011 1010 0011 */ TABDECL( OP_BL), -/* 1011 1010 0100 */ TABDECL( OP_BL), -/* 1011 1010 0101 */ TABDECL( OP_BL), -/* 1011 1010 0110 */ TABDECL( OP_BL), -/* 1011 1010 0111 */ TABDECL( OP_BL), -/* 1011 1010 1000 */ TABDECL( OP_BL), -/* 1011 1010 1001 */ TABDECL( OP_BL), -/* 1011 1010 1010 */ TABDECL( OP_BL), -/* 1011 1010 1011 */ TABDECL( OP_BL), -/* 1011 1010 1100 */ TABDECL( OP_BL), -/* 1011 1010 1101 */ TABDECL( OP_BL), -/* 1011 1010 1110 */ TABDECL( OP_BL), -/* 1011 1010 1111 */ TABDECL( OP_BL), -/* 1011 1011 0000 */ TABDECL( OP_BL), -/* 1011 1011 0001 */ TABDECL( OP_BL), -/* 1011 1011 0010 */ TABDECL( OP_BL), -/* 1011 1011 0011 */ TABDECL( OP_BL), -/* 1011 1011 0100 */ TABDECL( OP_BL), -/* 1011 1011 0101 */ TABDECL( OP_BL), -/* 1011 1011 0110 */ TABDECL( OP_BL), -/* 1011 1011 0111 */ TABDECL( OP_BL), -/* 1011 1011 1000 */ TABDECL( OP_BL), -/* 1011 1011 1001 */ TABDECL( OP_BL), -/* 1011 1011 1010 */ TABDECL( OP_BL), -/* 1011 1011 1011 */ TABDECL( OP_BL), -/* 1011 1011 1100 */ TABDECL( OP_BL), -/* 1011 1011 1101 */ TABDECL( OP_BL), -/* 1011 1011 1110 */ TABDECL( OP_BL), -/* 1011 1011 1111 */ TABDECL( OP_BL), -/* 1011 1100 0000 */ TABDECL( OP_BL), -/* 1011 1100 0001 */ TABDECL( OP_BL), -/* 1011 1100 0010 */ TABDECL( OP_BL), -/* 1011 1100 0011 */ TABDECL( OP_BL), -/* 1011 1100 0100 */ TABDECL( OP_BL), -/* 1011 1100 0101 */ TABDECL( OP_BL), -/* 1011 1100 0110 */ TABDECL( OP_BL), -/* 1011 1100 0111 */ TABDECL( OP_BL), -/* 1011 1100 1000 */ TABDECL( OP_BL), -/* 1011 1100 1001 */ TABDECL( OP_BL), -/* 1011 1100 1010 */ TABDECL( OP_BL), -/* 1011 1100 1011 */ TABDECL( OP_BL), -/* 1011 1100 1100 */ TABDECL( OP_BL), -/* 1011 1100 1101 */ TABDECL( OP_BL), -/* 1011 1100 1110 */ TABDECL( OP_BL), -/* 1011 1100 1111 */ TABDECL( OP_BL), -/* 1011 1101 0000 */ TABDECL( OP_BL), -/* 1011 1101 0001 */ TABDECL( OP_BL), -/* 1011 1101 0010 */ TABDECL( OP_BL), -/* 1011 1101 0011 */ TABDECL( OP_BL), -/* 1011 1101 0100 */ TABDECL( OP_BL), -/* 1011 1101 0101 */ TABDECL( OP_BL), -/* 1011 1101 0110 */ TABDECL( OP_BL), -/* 1011 1101 0111 */ TABDECL( OP_BL), -/* 1011 1101 1000 */ TABDECL( OP_BL), -/* 1011 1101 1001 */ TABDECL( OP_BL), -/* 1011 1101 1010 */ TABDECL( OP_BL), -/* 1011 1101 1011 */ TABDECL( OP_BL), -/* 1011 1101 1100 */ TABDECL( OP_BL), -/* 1011 1101 1101 */ TABDECL( OP_BL), -/* 1011 1101 1110 */ TABDECL( OP_BL), -/* 1011 1101 1111 */ TABDECL( OP_BL), -/* 1011 1110 0000 */ TABDECL( OP_BL), -/* 1011 1110 0001 */ TABDECL( OP_BL), -/* 1011 1110 0010 */ TABDECL( OP_BL), -/* 1011 1110 0011 */ TABDECL( OP_BL), -/* 1011 1110 0100 */ TABDECL( OP_BL), -/* 1011 1110 0101 */ TABDECL( OP_BL), -/* 1011 1110 0110 */ TABDECL( OP_BL), -/* 1011 1110 0111 */ TABDECL( OP_BL), -/* 1011 1110 1000 */ TABDECL( OP_BL), -/* 1011 1110 1001 */ TABDECL( OP_BL), -/* 1011 1110 1010 */ TABDECL( OP_BL), -/* 1011 1110 1011 */ TABDECL( OP_BL), -/* 1011 1110 1100 */ TABDECL( OP_BL), -/* 1011 1110 1101 */ TABDECL( OP_BL), -/* 1011 1110 1110 */ TABDECL( OP_BL), -/* 1011 1110 1111 */ TABDECL( OP_BL), -/* 1011 1111 0000 */ TABDECL( OP_BL), -/* 1011 1111 0001 */ TABDECL( OP_BL), -/* 1011 1111 0010 */ TABDECL( OP_BL), -/* 1011 1111 0011 */ TABDECL( OP_BL), -/* 1011 1111 0100 */ TABDECL( OP_BL), -/* 1011 1111 0101 */ TABDECL( OP_BL), -/* 1011 1111 0110 */ TABDECL( OP_BL), -/* 1011 1111 0111 */ TABDECL( OP_BL), -/* 1011 1111 1000 */ TABDECL( OP_BL), -/* 1011 1111 1001 */ TABDECL( OP_BL), -/* 1011 1111 1010 */ TABDECL( OP_BL), -/* 1011 1111 1011 */ TABDECL( OP_BL), -/* 1011 1111 1100 */ TABDECL( OP_BL), -/* 1011 1111 1101 */ TABDECL( OP_BL), -/* 1011 1111 1110 */ TABDECL( OP_BL), -/* 1011 1111 1111 */ TABDECL( OP_BL), -/* 1100 0000 0000 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 0001 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 0010 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 0011 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 0100 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 0101 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 0110 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 0111 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 1000 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 1001 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 1010 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 1011 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 1100 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 1101 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 1110 */ TABDECL( OP_STC_OPTION), -/* 1100 0000 1111 */ TABDECL( OP_STC_OPTION), -/* 1100 0001 0000 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 0001 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 0010 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 0011 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 0100 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 0101 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 0110 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 0111 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 1000 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 1001 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 1010 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 1011 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 1100 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 1101 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 1110 */ TABDECL( OP_LDC_OPTION), -/* 1100 0001 1111 */ TABDECL( OP_LDC_OPTION), -/* 1100 0010 0000 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 0001 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 0010 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 0011 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 0100 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 0101 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 0110 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 0111 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 1000 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 1001 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 1010 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 1011 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 1100 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 1101 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 1110 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0010 1111 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0011 0000 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 0001 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 0010 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 0011 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 0100 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 0101 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 0110 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 0111 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 1000 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 1001 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 1010 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 1011 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 1100 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 1101 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 1110 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0011 1111 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0100 0000 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 0001 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 0010 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 0011 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 0100 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 0101 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 0110 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 0111 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 1000 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 1001 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 1010 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 1011 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 1100 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 1101 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 1110 */ TABDECL( OP_STC_OPTION), -/* 1100 0100 1111 */ TABDECL( OP_STC_OPTION), -/* 1100 0101 0000 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 0001 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 0010 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 0011 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 0100 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 0101 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 0110 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 0111 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 1000 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 1001 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 1010 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 1011 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 1100 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 1101 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 1110 */ TABDECL( OP_LDC_OPTION), -/* 1100 0101 1111 */ TABDECL( OP_LDC_OPTION), -/* 1100 0110 0000 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 0001 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 0010 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 0011 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 0100 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 0101 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 0110 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 0111 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 1000 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 1001 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 1010 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 1011 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 1100 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 1101 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 1110 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0110 1111 */ TABDECL( OP_STC_M_POSTIND), -/* 1100 0111 0000 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 0001 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 0010 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 0011 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 0100 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 0101 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 0110 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 0111 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 1000 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 1001 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 1010 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 1011 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 1100 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 1101 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 1110 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 0111 1111 */ TABDECL( OP_LDC_M_POSTIND), -/* 1100 1000 0000 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 0001 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 0010 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 0011 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 0100 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 0101 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 0110 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 0111 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 1000 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 1001 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 1010 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 1011 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 1100 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 1101 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 1110 */ TABDECL( OP_STC_OPTION), -/* 1100 1000 1111 */ TABDECL( OP_STC_OPTION), -/* 1100 1001 0000 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 0001 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 0010 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 0011 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 0100 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 0101 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 0110 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 0111 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 1000 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 1001 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 1010 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 1011 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 1100 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 1101 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 1110 */ TABDECL( OP_LDC_OPTION), -/* 1100 1001 1111 */ TABDECL( OP_LDC_OPTION), -/* 1100 1010 0000 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 0001 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 0010 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 0011 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 0100 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 0101 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 0110 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 0111 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 1000 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 1001 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 1010 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 1011 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 1100 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 1101 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 1110 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1010 1111 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1011 0000 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 0001 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 0010 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 0011 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 0100 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 0101 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 0110 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 0111 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 1000 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 1001 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 1010 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 1011 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 1100 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 1101 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 1110 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1011 1111 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1100 0000 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 0001 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 0010 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 0011 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 0100 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 0101 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 0110 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 0111 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 1000 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 1001 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 1010 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 1011 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 1100 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 1101 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 1110 */ TABDECL( OP_STC_OPTION), -/* 1100 1100 1111 */ TABDECL( OP_STC_OPTION), -/* 1100 1101 0000 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 0001 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 0010 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 0011 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 0100 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 0101 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 0110 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 0111 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 1000 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 1001 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 1010 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 1011 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 1100 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 1101 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 1110 */ TABDECL( OP_LDC_OPTION), -/* 1100 1101 1111 */ TABDECL( OP_LDC_OPTION), -/* 1100 1110 0000 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 0001 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 0010 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 0011 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 0100 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 0101 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 0110 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 0111 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 1000 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 1001 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 1010 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 1011 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 1100 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 1101 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 1110 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1110 1111 */ TABDECL( OP_STC_P_POSTIND), -/* 1100 1111 0000 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 0001 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 0010 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 0011 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 0100 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 0101 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 0110 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 0111 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 1000 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 1001 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 1010 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 1011 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 1100 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 1101 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 1110 */ TABDECL( OP_LDC_P_POSTIND), -/* 1100 1111 1111 */ TABDECL( OP_LDC_P_POSTIND), -/* 1101 0000 0000 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 0001 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 0010 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 0011 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 0100 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 0101 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 0110 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 0111 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 1000 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 1001 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 1010 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 1011 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 1100 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 1101 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 1110 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0000 1111 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0001 0000 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 0001 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 0010 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 0011 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 0100 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 0101 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 0110 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 0111 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 1000 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 1001 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 1010 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 1011 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 1100 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 1101 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 1110 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0001 1111 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0010 0000 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 0001 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 0010 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 0011 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 0100 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 0101 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 0110 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 0111 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 1000 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 1001 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 1010 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 1011 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 1100 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 1101 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 1110 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0010 1111 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0011 0000 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 0001 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 0010 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 0011 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 0100 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 0101 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 0110 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 0111 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 1000 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 1001 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 1010 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 1011 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 1100 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 1101 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 1110 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0011 1111 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0100 0000 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 0001 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 0010 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 0011 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 0100 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 0101 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 0110 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 0111 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 1000 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 1001 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 1010 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 1011 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 1100 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 1101 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 1110 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0100 1111 */ TABDECL( OP_STC_M_IMM_OFF), -/* 1101 0101 0000 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 0001 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 0010 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 0011 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 0100 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 0101 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 0110 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 0111 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 1000 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 1001 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 1010 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 1011 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 1100 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 1101 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 1110 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0101 1111 */ TABDECL( OP_LDC_M_IMM_OFF), -/* 1101 0110 0000 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 0001 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 0010 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 0011 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 0100 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 0101 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 0110 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 0111 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 1000 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 1001 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 1010 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 1011 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 1100 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 1101 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 1110 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0110 1111 */ TABDECL( OP_STC_M_PREIND), -/* 1101 0111 0000 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 0001 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 0010 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 0011 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 0100 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 0101 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 0110 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 0111 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 1000 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 1001 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 1010 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 1011 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 1100 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 1101 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 1110 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 0111 1111 */ TABDECL( OP_LDC_M_PREIND), -/* 1101 1000 0000 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 0001 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 0010 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 0011 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 0100 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 0101 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 0110 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 0111 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 1000 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 1001 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 1010 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 1011 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 1100 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 1101 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 1110 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1000 1111 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1001 0000 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 0001 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 0010 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 0011 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 0100 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 0101 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 0110 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 0111 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 1000 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 1001 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 1010 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 1011 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 1100 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 1101 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 1110 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1001 1111 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1010 0000 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 0001 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 0010 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 0011 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 0100 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 0101 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 0110 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 0111 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 1000 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 1001 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 1010 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 1011 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 1100 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 1101 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 1110 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1010 1111 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1011 0000 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 0001 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 0010 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 0011 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 0100 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 0101 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 0110 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 0111 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 1000 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 1001 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 1010 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 1011 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 1100 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 1101 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 1110 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1011 1111 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1100 0000 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 0001 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 0010 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 0011 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 0100 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 0101 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 0110 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 0111 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 1000 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 1001 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 1010 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 1011 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 1100 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 1101 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 1110 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1100 1111 */ TABDECL( OP_STC_P_IMM_OFF), -/* 1101 1101 0000 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 0001 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 0010 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 0011 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 0100 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 0101 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 0110 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 0111 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 1000 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 1001 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 1010 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 1011 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 1100 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 1101 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 1110 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1101 1111 */ TABDECL( OP_LDC_P_IMM_OFF), -/* 1101 1110 0000 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 0001 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 0010 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 0011 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 0100 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 0101 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 0110 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 0111 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 1000 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 1001 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 1010 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 1011 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 1100 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 1101 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 1110 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1110 1111 */ TABDECL( OP_STC_P_PREIND), -/* 1101 1111 0000 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 0001 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 0010 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 0011 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 0100 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 0101 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 0110 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 0111 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 1000 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 1001 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 1010 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 1011 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 1100 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 1101 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 1110 */ TABDECL( OP_LDC_P_PREIND), -/* 1101 1111 1111 */ TABDECL( OP_LDC_P_PREIND), -/* 1110 0000 0000 */ TABDECL( OP_CDP), -/* 1110 0000 0001 */ TABDECL( OP_MCR), -/* 1110 0000 0010 */ TABDECL( OP_CDP), -/* 1110 0000 0011 */ TABDECL( OP_MCR), -/* 1110 0000 0100 */ TABDECL( OP_CDP), -/* 1110 0000 0101 */ TABDECL( OP_MCR), -/* 1110 0000 0110 */ TABDECL( OP_CDP), -/* 1110 0000 0111 */ TABDECL( OP_MCR), -/* 1110 0000 1000 */ TABDECL( OP_CDP), -/* 1110 0000 1001 */ TABDECL( OP_MCR), -/* 1110 0000 1010 */ TABDECL( OP_CDP), -/* 1110 0000 1011 */ TABDECL( OP_MCR), -/* 1110 0000 1100 */ TABDECL( OP_CDP), -/* 1110 0000 1101 */ TABDECL( OP_MCR), -/* 1110 0000 1110 */ TABDECL( OP_CDP), -/* 1110 0000 1111 */ TABDECL( OP_MCR), -/* 1110 0001 0000 */ TABDECL( OP_CDP), -/* 1110 0001 0001 */ TABDECL( OP_MRC), -/* 1110 0001 0010 */ TABDECL( OP_CDP), -/* 1110 0001 0011 */ TABDECL( OP_MRC), -/* 1110 0001 0100 */ TABDECL( OP_CDP), -/* 1110 0001 0101 */ TABDECL( OP_MRC), -/* 1110 0001 0110 */ TABDECL( OP_CDP), -/* 1110 0001 0111 */ TABDECL( OP_MRC), -/* 1110 0001 1000 */ TABDECL( OP_CDP), -/* 1110 0001 1001 */ TABDECL( OP_MRC), -/* 1110 0001 1010 */ TABDECL( OP_CDP), -/* 1110 0001 1011 */ TABDECL( OP_MRC), -/* 1110 0001 1100 */ TABDECL( OP_CDP), -/* 1110 0001 1101 */ TABDECL( OP_MRC), -/* 1110 0001 1110 */ TABDECL( OP_CDP), -/* 1110 0001 1111 */ TABDECL( OP_MRC), -/* 1110 0010 0000 */ TABDECL( OP_CDP), -/* 1110 0010 0001 */ TABDECL( OP_MCR), -/* 1110 0010 0010 */ TABDECL( OP_CDP), -/* 1110 0010 0011 */ TABDECL( OP_MCR), -/* 1110 0010 0100 */ TABDECL( OP_CDP), -/* 1110 0010 0101 */ TABDECL( OP_MCR), -/* 1110 0010 0110 */ TABDECL( OP_CDP), -/* 1110 0010 0111 */ TABDECL( OP_MCR), -/* 1110 0010 1000 */ TABDECL( OP_CDP), -/* 1110 0010 1001 */ TABDECL( OP_MCR), -/* 1110 0010 1010 */ TABDECL( OP_CDP), -/* 1110 0010 1011 */ TABDECL( OP_MCR), -/* 1110 0010 1100 */ TABDECL( OP_CDP), -/* 1110 0010 1101 */ TABDECL( OP_MCR), -/* 1110 0010 1110 */ TABDECL( OP_CDP), -/* 1110 0010 1111 */ TABDECL( OP_MCR), -/* 1110 0011 0000 */ TABDECL( OP_CDP), -/* 1110 0011 0001 */ TABDECL( OP_MRC), -/* 1110 0011 0010 */ TABDECL( OP_CDP), -/* 1110 0011 0011 */ TABDECL( OP_MRC), -/* 1110 0011 0100 */ TABDECL( OP_CDP), -/* 1110 0011 0101 */ TABDECL( OP_MRC), -/* 1110 0011 0110 */ TABDECL( OP_CDP), -/* 1110 0011 0111 */ TABDECL( OP_MRC), -/* 1110 0011 1000 */ TABDECL( OP_CDP), -/* 1110 0011 1001 */ TABDECL( OP_MRC), -/* 1110 0011 1010 */ TABDECL( OP_CDP), -/* 1110 0011 1011 */ TABDECL( OP_MRC), -/* 1110 0011 1100 */ TABDECL( OP_CDP), -/* 1110 0011 1101 */ TABDECL( OP_MRC), -/* 1110 0011 1110 */ TABDECL( OP_CDP), -/* 1110 0011 1111 */ TABDECL( OP_MRC), -/* 1110 0100 0000 */ TABDECL( OP_CDP), -/* 1110 0100 0001 */ TABDECL( OP_MCR), -/* 1110 0100 0010 */ TABDECL( OP_CDP), -/* 1110 0100 0011 */ TABDECL( OP_MCR), -/* 1110 0100 0100 */ TABDECL( OP_CDP), -/* 1110 0100 0101 */ TABDECL( OP_MCR), -/* 1110 0100 0110 */ TABDECL( OP_CDP), -/* 1110 0100 0111 */ TABDECL( OP_MCR), -/* 1110 0100 1000 */ TABDECL( OP_CDP), -/* 1110 0100 1001 */ TABDECL( OP_MCR), -/* 1110 0100 1010 */ TABDECL( OP_CDP), -/* 1110 0100 1011 */ TABDECL( OP_MCR), -/* 1110 0100 1100 */ TABDECL( OP_CDP), -/* 1110 0100 1101 */ TABDECL( OP_MCR), -/* 1110 0100 1110 */ TABDECL( OP_CDP), -/* 1110 0100 1111 */ TABDECL( OP_MCR), -/* 1110 0101 0000 */ TABDECL( OP_CDP), -/* 1110 0101 0001 */ TABDECL( OP_MRC), -/* 1110 0101 0010 */ TABDECL( OP_CDP), -/* 1110 0101 0011 */ TABDECL( OP_MRC), -/* 1110 0101 0100 */ TABDECL( OP_CDP), -/* 1110 0101 0101 */ TABDECL( OP_MRC), -/* 1110 0101 0110 */ TABDECL( OP_CDP), -/* 1110 0101 0111 */ TABDECL( OP_MRC), -/* 1110 0101 1000 */ TABDECL( OP_CDP), -/* 1110 0101 1001 */ TABDECL( OP_MRC), -/* 1110 0101 1010 */ TABDECL( OP_CDP), -/* 1110 0101 1011 */ TABDECL( OP_MRC), -/* 1110 0101 1100 */ TABDECL( OP_CDP), -/* 1110 0101 1101 */ TABDECL( OP_MRC), -/* 1110 0101 1110 */ TABDECL( OP_CDP), -/* 1110 0101 1111 */ TABDECL( OP_MRC), -/* 1110 0110 0000 */ TABDECL( OP_CDP), -/* 1110 0110 0001 */ TABDECL( OP_MCR), -/* 1110 0110 0010 */ TABDECL( OP_CDP), -/* 1110 0110 0011 */ TABDECL( OP_MCR), -/* 1110 0110 0100 */ TABDECL( OP_CDP), -/* 1110 0110 0101 */ TABDECL( OP_MCR), -/* 1110 0110 0110 */ TABDECL( OP_CDP), -/* 1110 0110 0111 */ TABDECL( OP_MCR), -/* 1110 0110 1000 */ TABDECL( OP_CDP), -/* 1110 0110 1001 */ TABDECL( OP_MCR), -/* 1110 0110 1010 */ TABDECL( OP_CDP), -/* 1110 0110 1011 */ TABDECL( OP_MCR), -/* 1110 0110 1100 */ TABDECL( OP_CDP), -/* 1110 0110 1101 */ TABDECL( OP_MCR), -/* 1110 0110 1110 */ TABDECL( OP_CDP), -/* 1110 0110 1111 */ TABDECL( OP_MCR), -/* 1110 0111 0000 */ TABDECL( OP_CDP), -/* 1110 0111 0001 */ TABDECL( OP_MRC), -/* 1110 0111 0010 */ TABDECL( OP_CDP), -/* 1110 0111 0011 */ TABDECL( OP_MRC), -/* 1110 0111 0100 */ TABDECL( OP_CDP), -/* 1110 0111 0101 */ TABDECL( OP_MRC), -/* 1110 0111 0110 */ TABDECL( OP_CDP), -/* 1110 0111 0111 */ TABDECL( OP_MRC), -/* 1110 0111 1000 */ TABDECL( OP_CDP), -/* 1110 0111 1001 */ TABDECL( OP_MRC), -/* 1110 0111 1010 */ TABDECL( OP_CDP), -/* 1110 0111 1011 */ TABDECL( OP_MRC), -/* 1110 0111 1100 */ TABDECL( OP_CDP), -/* 1110 0111 1101 */ TABDECL( OP_MRC), -/* 1110 0111 1110 */ TABDECL( OP_CDP), -/* 1110 0111 1111 */ TABDECL( OP_MRC), -/* 1110 1000 0000 */ TABDECL( OP_CDP), -/* 1110 1000 0001 */ TABDECL( OP_MCR), -/* 1110 1000 0010 */ TABDECL( OP_CDP), -/* 1110 1000 0011 */ TABDECL( OP_MCR), -/* 1110 1000 0100 */ TABDECL( OP_CDP), -/* 1110 1000 0101 */ TABDECL( OP_MCR), -/* 1110 1000 0110 */ TABDECL( OP_CDP), -/* 1110 1000 0111 */ TABDECL( OP_MCR), -/* 1110 1000 1000 */ TABDECL( OP_CDP), -/* 1110 1000 1001 */ TABDECL( OP_MCR), -/* 1110 1000 1010 */ TABDECL( OP_CDP), -/* 1110 1000 1011 */ TABDECL( OP_MCR), -/* 1110 1000 1100 */ TABDECL( OP_CDP), -/* 1110 1000 1101 */ TABDECL( OP_MCR), -/* 1110 1000 1110 */ TABDECL( OP_CDP), -/* 1110 1000 1111 */ TABDECL( OP_MCR), -/* 1110 1001 0000 */ TABDECL( OP_CDP), -/* 1110 1001 0001 */ TABDECL( OP_MRC), -/* 1110 1001 0010 */ TABDECL( OP_CDP), -/* 1110 1001 0011 */ TABDECL( OP_MRC), -/* 1110 1001 0100 */ TABDECL( OP_CDP), -/* 1110 1001 0101 */ TABDECL( OP_MRC), -/* 1110 1001 0110 */ TABDECL( OP_CDP), -/* 1110 1001 0111 */ TABDECL( OP_MRC), -/* 1110 1001 1000 */ TABDECL( OP_CDP), -/* 1110 1001 1001 */ TABDECL( OP_MRC), -/* 1110 1001 1010 */ TABDECL( OP_CDP), -/* 1110 1001 1011 */ TABDECL( OP_MRC), -/* 1110 1001 1100 */ TABDECL( OP_CDP), -/* 1110 1001 1101 */ TABDECL( OP_MRC), -/* 1110 1001 1110 */ TABDECL( OP_CDP), -/* 1110 1001 1111 */ TABDECL( OP_MRC), -/* 1110 1010 0000 */ TABDECL( OP_CDP), -/* 1110 1010 0001 */ TABDECL( OP_MCR), -/* 1110 1010 0010 */ TABDECL( OP_CDP), -/* 1110 1010 0011 */ TABDECL( OP_MCR), -/* 1110 1010 0100 */ TABDECL( OP_CDP), -/* 1110 1010 0101 */ TABDECL( OP_MCR), -/* 1110 1010 0110 */ TABDECL( OP_CDP), -/* 1110 1010 0111 */ TABDECL( OP_MCR), -/* 1110 1010 1000 */ TABDECL( OP_CDP), -/* 1110 1010 1001 */ TABDECL( OP_MCR), -/* 1110 1010 1010 */ TABDECL( OP_CDP), -/* 1110 1010 1011 */ TABDECL( OP_MCR), -/* 1110 1010 1100 */ TABDECL( OP_CDP), -/* 1110 1010 1101 */ TABDECL( OP_MCR), -/* 1110 1010 1110 */ TABDECL( OP_CDP), -/* 1110 1010 1111 */ TABDECL( OP_MCR), -/* 1110 1011 0000 */ TABDECL( OP_CDP), -/* 1110 1011 0001 */ TABDECL( OP_MRC), -/* 1110 1011 0010 */ TABDECL( OP_CDP), -/* 1110 1011 0011 */ TABDECL( OP_MRC), -/* 1110 1011 0100 */ TABDECL( OP_CDP), -/* 1110 1011 0101 */ TABDECL( OP_MRC), -/* 1110 1011 0110 */ TABDECL( OP_CDP), -/* 1110 1011 0111 */ TABDECL( OP_MRC), -/* 1110 1011 1000 */ TABDECL( OP_CDP), -/* 1110 1011 1001 */ TABDECL( OP_MRC), -/* 1110 1011 1010 */ TABDECL( OP_CDP), -/* 1110 1011 1011 */ TABDECL( OP_MRC), -/* 1110 1011 1100 */ TABDECL( OP_CDP), -/* 1110 1011 1101 */ TABDECL( OP_MRC), -/* 1110 1011 1110 */ TABDECL( OP_CDP), -/* 1110 1011 1111 */ TABDECL( OP_MRC), -/* 1110 1100 0000 */ TABDECL( OP_CDP), -/* 1110 1100 0001 */ TABDECL( OP_MCR), -/* 1110 1100 0010 */ TABDECL( OP_CDP), -/* 1110 1100 0011 */ TABDECL( OP_MCR), -/* 1110 1100 0100 */ TABDECL( OP_CDP), -/* 1110 1100 0101 */ TABDECL( OP_MCR), -/* 1110 1100 0110 */ TABDECL( OP_CDP), -/* 1110 1100 0111 */ TABDECL( OP_MCR), -/* 1110 1100 1000 */ TABDECL( OP_CDP), -/* 1110 1100 1001 */ TABDECL( OP_MCR), -/* 1110 1100 1010 */ TABDECL( OP_CDP), -/* 1110 1100 1011 */ TABDECL( OP_MCR), -/* 1110 1100 1100 */ TABDECL( OP_CDP), -/* 1110 1100 1101 */ TABDECL( OP_MCR), -/* 1110 1100 1110 */ TABDECL( OP_CDP), -/* 1110 1100 1111 */ TABDECL( OP_MCR), -/* 1110 1101 0000 */ TABDECL( OP_CDP), -/* 1110 1101 0001 */ TABDECL( OP_MRC), -/* 1110 1101 0010 */ TABDECL( OP_CDP), -/* 1110 1101 0011 */ TABDECL( OP_MRC), -/* 1110 1101 0100 */ TABDECL( OP_CDP), -/* 1110 1101 0101 */ TABDECL( OP_MRC), -/* 1110 1101 0110 */ TABDECL( OP_CDP), -/* 1110 1101 0111 */ TABDECL( OP_MRC), -/* 1110 1101 1000 */ TABDECL( OP_CDP), -/* 1110 1101 1001 */ TABDECL( OP_MRC), -/* 1110 1101 1010 */ TABDECL( OP_CDP), -/* 1110 1101 1011 */ TABDECL( OP_MRC), -/* 1110 1101 1100 */ TABDECL( OP_CDP), -/* 1110 1101 1101 */ TABDECL( OP_MRC), -/* 1110 1101 1110 */ TABDECL( OP_CDP), -/* 1110 1101 1111 */ TABDECL( OP_MRC), -/* 1110 1110 0000 */ TABDECL( OP_CDP), -/* 1110 1110 0001 */ TABDECL( OP_MCR), -/* 1110 1110 0010 */ TABDECL( OP_CDP), -/* 1110 1110 0011 */ TABDECL( OP_MCR), -/* 1110 1110 0100 */ TABDECL( OP_CDP), -/* 1110 1110 0101 */ TABDECL( OP_MCR), -/* 1110 1110 0110 */ TABDECL( OP_CDP), -/* 1110 1110 0111 */ TABDECL( OP_MCR), -/* 1110 1110 1000 */ TABDECL( OP_CDP), -/* 1110 1110 1001 */ TABDECL( OP_MCR), -/* 1110 1110 1010 */ TABDECL( OP_CDP), -/* 1110 1110 1011 */ TABDECL( OP_MCR), -/* 1110 1110 1100 */ TABDECL( OP_CDP), -/* 1110 1110 1101 */ TABDECL( OP_MCR), -/* 1110 1110 1110 */ TABDECL( OP_CDP), -/* 1110 1110 1111 */ TABDECL( OP_MCR), -/* 1110 1111 0000 */ TABDECL( OP_CDP), -/* 1110 1111 0001 */ TABDECL( OP_MRC), -/* 1110 1111 0010 */ TABDECL( OP_CDP), -/* 1110 1111 0011 */ TABDECL( OP_MRC), -/* 1110 1111 0100 */ TABDECL( OP_CDP), -/* 1110 1111 0101 */ TABDECL( OP_MRC), -/* 1110 1111 0110 */ TABDECL( OP_CDP), -/* 1110 1111 0111 */ TABDECL( OP_MRC), -/* 1110 1111 1000 */ TABDECL( OP_CDP), -/* 1110 1111 1001 */ TABDECL( OP_MRC), -/* 1110 1111 1010 */ TABDECL( OP_CDP), -/* 1110 1111 1011 */ TABDECL( OP_MRC), -/* 1110 1111 1100 */ TABDECL( OP_CDP), -/* 1110 1111 1101 */ TABDECL( OP_MRC), -/* 1110 1111 1110 */ TABDECL( OP_CDP), -/* 1110 1111 1111 */ TABDECL( OP_MRC), -/* 1111 0000 0000 */ TABDECL( OP_SWI), -/* 1111 0000 0001 */ TABDECL( OP_SWI), -/* 1111 0000 0010 */ TABDECL( OP_SWI), -/* 1111 0000 0011 */ TABDECL( OP_SWI), -/* 1111 0000 0100 */ TABDECL( OP_SWI), -/* 1111 0000 0101 */ TABDECL( OP_SWI), -/* 1111 0000 0110 */ TABDECL( OP_SWI), -/* 1111 0000 0111 */ TABDECL( OP_SWI), -/* 1111 0000 1000 */ TABDECL( OP_SWI), -/* 1111 0000 1001 */ TABDECL( OP_SWI), -/* 1111 0000 1010 */ TABDECL( OP_SWI), -/* 1111 0000 1011 */ TABDECL( OP_SWI), -/* 1111 0000 1100 */ TABDECL( OP_SWI), -/* 1111 0000 1101 */ TABDECL( OP_SWI), -/* 1111 0000 1110 */ TABDECL( OP_SWI), -/* 1111 0000 1111 */ TABDECL( OP_SWI), -/* 1111 0001 0000 */ TABDECL( OP_SWI), -/* 1111 0001 0001 */ TABDECL( OP_SWI), -/* 1111 0001 0010 */ TABDECL( OP_SWI), -/* 1111 0001 0011 */ TABDECL( OP_SWI), -/* 1111 0001 0100 */ TABDECL( OP_SWI), -/* 1111 0001 0101 */ TABDECL( OP_SWI), -/* 1111 0001 0110 */ TABDECL( OP_SWI), -/* 1111 0001 0111 */ TABDECL( OP_SWI), -/* 1111 0001 1000 */ TABDECL( OP_SWI), -/* 1111 0001 1001 */ TABDECL( OP_SWI), -/* 1111 0001 1010 */ TABDECL( OP_SWI), -/* 1111 0001 1011 */ TABDECL( OP_SWI), -/* 1111 0001 1100 */ TABDECL( OP_SWI), -/* 1111 0001 1101 */ TABDECL( OP_SWI), -/* 1111 0001 1110 */ TABDECL( OP_SWI), -/* 1111 0001 1111 */ TABDECL( OP_SWI), -/* 1111 0010 0000 */ TABDECL( OP_SWI), -/* 1111 0010 0001 */ TABDECL( OP_SWI), -/* 1111 0010 0010 */ TABDECL( OP_SWI), -/* 1111 0010 0011 */ TABDECL( OP_SWI), -/* 1111 0010 0100 */ TABDECL( OP_SWI), -/* 1111 0010 0101 */ TABDECL( OP_SWI), -/* 1111 0010 0110 */ TABDECL( OP_SWI), -/* 1111 0010 0111 */ TABDECL( OP_SWI), -/* 1111 0010 1000 */ TABDECL( OP_SWI), -/* 1111 0010 1001 */ TABDECL( OP_SWI), -/* 1111 0010 1010 */ TABDECL( OP_SWI), -/* 1111 0010 1011 */ TABDECL( OP_SWI), -/* 1111 0010 1100 */ TABDECL( OP_SWI), -/* 1111 0010 1101 */ TABDECL( OP_SWI), -/* 1111 0010 1110 */ TABDECL( OP_SWI), -/* 1111 0010 1111 */ TABDECL( OP_SWI), -/* 1111 0011 0000 */ TABDECL( OP_SWI), -/* 1111 0011 0001 */ TABDECL( OP_SWI), -/* 1111 0011 0010 */ TABDECL( OP_SWI), -/* 1111 0011 0011 */ TABDECL( OP_SWI), -/* 1111 0011 0100 */ TABDECL( OP_SWI), -/* 1111 0011 0101 */ TABDECL( OP_SWI), -/* 1111 0011 0110 */ TABDECL( OP_SWI), -/* 1111 0011 0111 */ TABDECL( OP_SWI), -/* 1111 0011 1000 */ TABDECL( OP_SWI), -/* 1111 0011 1001 */ TABDECL( OP_SWI), -/* 1111 0011 1010 */ TABDECL( OP_SWI), -/* 1111 0011 1011 */ TABDECL( OP_SWI), -/* 1111 0011 1100 */ TABDECL( OP_SWI), -/* 1111 0011 1101 */ TABDECL( OP_SWI), -/* 1111 0011 1110 */ TABDECL( OP_SWI), -/* 1111 0011 1111 */ TABDECL( OP_SWI), -/* 1111 0100 0000 */ TABDECL( OP_SWI), -/* 1111 0100 0001 */ TABDECL( OP_SWI), -/* 1111 0100 0010 */ TABDECL( OP_SWI), -/* 1111 0100 0011 */ TABDECL( OP_SWI), -/* 1111 0100 0100 */ TABDECL( OP_SWI), -/* 1111 0100 0101 */ TABDECL( OP_SWI), -/* 1111 0100 0110 */ TABDECL( OP_SWI), -/* 1111 0100 0111 */ TABDECL( OP_SWI), -/* 1111 0100 1000 */ TABDECL( OP_SWI), -/* 1111 0100 1001 */ TABDECL( OP_SWI), -/* 1111 0100 1010 */ TABDECL( OP_SWI), -/* 1111 0100 1011 */ TABDECL( OP_SWI), -/* 1111 0100 1100 */ TABDECL( OP_SWI), -/* 1111 0100 1101 */ TABDECL( OP_SWI), -/* 1111 0100 1110 */ TABDECL( OP_SWI), -/* 1111 0100 1111 */ TABDECL( OP_SWI), -/* 1111 0101 0000 */ TABDECL( OP_SWI), -/* 1111 0101 0001 */ TABDECL( OP_SWI), -/* 1111 0101 0010 */ TABDECL( OP_SWI), -/* 1111 0101 0011 */ TABDECL( OP_SWI), -/* 1111 0101 0100 */ TABDECL( OP_SWI), -/* 1111 0101 0101 */ TABDECL( OP_SWI), -/* 1111 0101 0110 */ TABDECL( OP_SWI), -/* 1111 0101 0111 */ TABDECL( OP_SWI), -/* 1111 0101 1000 */ TABDECL( OP_SWI), -/* 1111 0101 1001 */ TABDECL( OP_SWI), -/* 1111 0101 1010 */ TABDECL( OP_SWI), -/* 1111 0101 1011 */ TABDECL( OP_SWI), -/* 1111 0101 1100 */ TABDECL( OP_SWI), -/* 1111 0101 1101 */ TABDECL( OP_SWI), -/* 1111 0101 1110 */ TABDECL( OP_SWI), -/* 1111 0101 1111 */ TABDECL( OP_SWI), -/* 1111 0110 0000 */ TABDECL( OP_SWI), -/* 1111 0110 0001 */ TABDECL( OP_SWI), -/* 1111 0110 0010 */ TABDECL( OP_SWI), -/* 1111 0110 0011 */ TABDECL( OP_SWI), -/* 1111 0110 0100 */ TABDECL( OP_SWI), -/* 1111 0110 0101 */ TABDECL( OP_SWI), -/* 1111 0110 0110 */ TABDECL( OP_SWI), -/* 1111 0110 0111 */ TABDECL( OP_SWI), -/* 1111 0110 1000 */ TABDECL( OP_SWI), -/* 1111 0110 1001 */ TABDECL( OP_SWI), -/* 1111 0110 1010 */ TABDECL( OP_SWI), -/* 1111 0110 1011 */ TABDECL( OP_SWI), -/* 1111 0110 1100 */ TABDECL( OP_SWI), -/* 1111 0110 1101 */ TABDECL( OP_SWI), -/* 1111 0110 1110 */ TABDECL( OP_SWI), -/* 1111 0110 1111 */ TABDECL( OP_SWI), -/* 1111 0111 0000 */ TABDECL( OP_SWI), -/* 1111 0111 0001 */ TABDECL( OP_SWI), -/* 1111 0111 0010 */ TABDECL( OP_SWI), -/* 1111 0111 0011 */ TABDECL( OP_SWI), -/* 1111 0111 0100 */ TABDECL( OP_SWI), -/* 1111 0111 0101 */ TABDECL( OP_SWI), -/* 1111 0111 0110 */ TABDECL( OP_SWI), -/* 1111 0111 0111 */ TABDECL( OP_SWI), -/* 1111 0111 1000 */ TABDECL( OP_SWI), -/* 1111 0111 1001 */ TABDECL( OP_SWI), -/* 1111 0111 1010 */ TABDECL( OP_SWI), -/* 1111 0111 1011 */ TABDECL( OP_SWI), -/* 1111 0111 1100 */ TABDECL( OP_SWI), -/* 1111 0111 1101 */ TABDECL( OP_SWI), -/* 1111 0111 1110 */ TABDECL( OP_SWI), -/* 1111 0111 1111 */ TABDECL( OP_SWI), -/* 1111 1000 0000 */ TABDECL( OP_SWI), -/* 1111 1000 0001 */ TABDECL( OP_SWI), -/* 1111 1000 0010 */ TABDECL( OP_SWI), -/* 1111 1000 0011 */ TABDECL( OP_SWI), -/* 1111 1000 0100 */ TABDECL( OP_SWI), -/* 1111 1000 0101 */ TABDECL( OP_SWI), -/* 1111 1000 0110 */ TABDECL( OP_SWI), -/* 1111 1000 0111 */ TABDECL( OP_SWI), -/* 1111 1000 1000 */ TABDECL( OP_SWI), -/* 1111 1000 1001 */ TABDECL( OP_SWI), -/* 1111 1000 1010 */ TABDECL( OP_SWI), -/* 1111 1000 1011 */ TABDECL( OP_SWI), -/* 1111 1000 1100 */ TABDECL( OP_SWI), -/* 1111 1000 1101 */ TABDECL( OP_SWI), -/* 1111 1000 1110 */ TABDECL( OP_SWI), -/* 1111 1000 1111 */ TABDECL( OP_SWI), -/* 1111 1001 0000 */ TABDECL( OP_SWI), -/* 1111 1001 0001 */ TABDECL( OP_SWI), -/* 1111 1001 0010 */ TABDECL( OP_SWI), -/* 1111 1001 0011 */ TABDECL( OP_SWI), -/* 1111 1001 0100 */ TABDECL( OP_SWI), -/* 1111 1001 0101 */ TABDECL( OP_SWI), -/* 1111 1001 0110 */ TABDECL( OP_SWI), -/* 1111 1001 0111 */ TABDECL( OP_SWI), -/* 1111 1001 1000 */ TABDECL( OP_SWI), -/* 1111 1001 1001 */ TABDECL( OP_SWI), -/* 1111 1001 1010 */ TABDECL( OP_SWI), -/* 1111 1001 1011 */ TABDECL( OP_SWI), -/* 1111 1001 1100 */ TABDECL( OP_SWI), -/* 1111 1001 1101 */ TABDECL( OP_SWI), -/* 1111 1001 1110 */ TABDECL( OP_SWI), -/* 1111 1001 1111 */ TABDECL( OP_SWI), -/* 1111 1010 0000 */ TABDECL( OP_SWI), -/* 1111 1010 0001 */ TABDECL( OP_SWI), -/* 1111 1010 0010 */ TABDECL( OP_SWI), -/* 1111 1010 0011 */ TABDECL( OP_SWI), -/* 1111 1010 0100 */ TABDECL( OP_SWI), -/* 1111 1010 0101 */ TABDECL( OP_SWI), -/* 1111 1010 0110 */ TABDECL( OP_SWI), -/* 1111 1010 0111 */ TABDECL( OP_SWI), -/* 1111 1010 1000 */ TABDECL( OP_SWI), -/* 1111 1010 1001 */ TABDECL( OP_SWI), -/* 1111 1010 1010 */ TABDECL( OP_SWI), -/* 1111 1010 1011 */ TABDECL( OP_SWI), -/* 1111 1010 1100 */ TABDECL( OP_SWI), -/* 1111 1010 1101 */ TABDECL( OP_SWI), -/* 1111 1010 1110 */ TABDECL( OP_SWI), -/* 1111 1010 1111 */ TABDECL( OP_SWI), -/* 1111 1011 0000 */ TABDECL( OP_SWI), -/* 1111 1011 0001 */ TABDECL( OP_SWI), -/* 1111 1011 0010 */ TABDECL( OP_SWI), -/* 1111 1011 0011 */ TABDECL( OP_SWI), -/* 1111 1011 0100 */ TABDECL( OP_SWI), -/* 1111 1011 0101 */ TABDECL( OP_SWI), -/* 1111 1011 0110 */ TABDECL( OP_SWI), -/* 1111 1011 0111 */ TABDECL( OP_SWI), -/* 1111 1011 1000 */ TABDECL( OP_SWI), -/* 1111 1011 1001 */ TABDECL( OP_SWI), -/* 1111 1011 1010 */ TABDECL( OP_SWI), -/* 1111 1011 1011 */ TABDECL( OP_SWI), -/* 1111 1011 1100 */ TABDECL( OP_SWI), -/* 1111 1011 1101 */ TABDECL( OP_SWI), -/* 1111 1011 1110 */ TABDECL( OP_SWI), -/* 1111 1011 1111 */ TABDECL( OP_SWI), -/* 1111 1100 0000 */ TABDECL( OP_SWI), -/* 1111 1100 0001 */ TABDECL( OP_SWI), -/* 1111 1100 0010 */ TABDECL( OP_SWI), -/* 1111 1100 0011 */ TABDECL( OP_SWI), -/* 1111 1100 0100 */ TABDECL( OP_SWI), -/* 1111 1100 0101 */ TABDECL( OP_SWI), -/* 1111 1100 0110 */ TABDECL( OP_SWI), -/* 1111 1100 0111 */ TABDECL( OP_SWI), -/* 1111 1100 1000 */ TABDECL( OP_SWI), -/* 1111 1100 1001 */ TABDECL( OP_SWI), -/* 1111 1100 1010 */ TABDECL( OP_SWI), -/* 1111 1100 1011 */ TABDECL( OP_SWI), -/* 1111 1100 1100 */ TABDECL( OP_SWI), -/* 1111 1100 1101 */ TABDECL( OP_SWI), -/* 1111 1100 1110 */ TABDECL( OP_SWI), -/* 1111 1100 1111 */ TABDECL( OP_SWI), -/* 1111 1101 0000 */ TABDECL( OP_SWI), -/* 1111 1101 0001 */ TABDECL( OP_SWI), -/* 1111 1101 0010 */ TABDECL( OP_SWI), -/* 1111 1101 0011 */ TABDECL( OP_SWI), -/* 1111 1101 0100 */ TABDECL( OP_SWI), -/* 1111 1101 0101 */ TABDECL( OP_SWI), -/* 1111 1101 0110 */ TABDECL( OP_SWI), -/* 1111 1101 0111 */ TABDECL( OP_SWI), -/* 1111 1101 1000 */ TABDECL( OP_SWI), -/* 1111 1101 1001 */ TABDECL( OP_SWI), -/* 1111 1101 1010 */ TABDECL( OP_SWI), -/* 1111 1101 1011 */ TABDECL( OP_SWI), -/* 1111 1101 1100 */ TABDECL( OP_SWI), -/* 1111 1101 1101 */ TABDECL( OP_SWI), -/* 1111 1101 1110 */ TABDECL( OP_SWI), -/* 1111 1101 1111 */ TABDECL( OP_SWI), -/* 1111 1110 0000 */ TABDECL( OP_SWI), -/* 1111 1110 0001 */ TABDECL( OP_SWI), -/* 1111 1110 0010 */ TABDECL( OP_SWI), -/* 1111 1110 0011 */ TABDECL( OP_SWI), -/* 1111 1110 0100 */ TABDECL( OP_SWI), -/* 1111 1110 0101 */ TABDECL( OP_SWI), -/* 1111 1110 0110 */ TABDECL( OP_SWI), -/* 1111 1110 0111 */ TABDECL( OP_SWI), -/* 1111 1110 1000 */ TABDECL( OP_SWI), -/* 1111 1110 1001 */ TABDECL( OP_SWI), -/* 1111 1110 1010 */ TABDECL( OP_SWI), -/* 1111 1110 1011 */ TABDECL( OP_SWI), -/* 1111 1110 1100 */ TABDECL( OP_SWI), -/* 1111 1110 1101 */ TABDECL( OP_SWI), -/* 1111 1110 1110 */ TABDECL( OP_SWI), -/* 1111 1110 1111 */ TABDECL( OP_SWI), -/* 1111 1111 0000 */ TABDECL( OP_SWI), -/* 1111 1111 0001 */ TABDECL( OP_SWI), -/* 1111 1111 0010 */ TABDECL( OP_SWI), -/* 1111 1111 0011 */ TABDECL( OP_SWI), -/* 1111 1111 0100 */ TABDECL( OP_SWI), -/* 1111 1111 0101 */ TABDECL( OP_SWI), -/* 1111 1111 0110 */ TABDECL( OP_SWI), -/* 1111 1111 0111 */ TABDECL( OP_SWI), -/* 1111 1111 1000 */ TABDECL( OP_SWI), -/* 1111 1111 1001 */ TABDECL( OP_SWI), -/* 1111 1111 1010 */ TABDECL( OP_SWI), -/* 1111 1111 1011 */ TABDECL( OP_SWI), -/* 1111 1111 1100 */ TABDECL( OP_SWI), -/* 1111 1111 1101 */ TABDECL( OP_SWI), -/* 1111 1111 1110 */ TABDECL( OP_SWI), -/* 1111 1111 1111 */ TABDECL( OP_SWI), +TABDECL( OP_SUB_LSL_IMM), // 000 0010 0 0000 +TABDECL( OP_SUB_LSL_REG), // 000 0010 0 0001 +TABDECL( OP_SUB_LSR_IMM), // 000 0010 0 0010 +TABDECL( OP_SUB_LSR_REG), // 000 0010 0 0011 +TABDECL( OP_SUB_ASR_IMM), // 000 0010 0 0100 +TABDECL( OP_SUB_ASR_REG), // 000 0010 0 0101 +TABDECL( OP_SUB_ROR_IMM), // 000 0010 0 0110 +TABDECL( OP_SUB_ROR_REG), // 000 0010 0 0111 + +TABDECL( OP_SUB_LSL_IMM), // 000 0010 0 1000 +TABDECL( OP_UND), // 000 0010 0 1001 +TABDECL( OP_SUB_LSR_IMM), // OOO OO1O O 1010 +TABDECL( OP_STRH_POS_INDE_M_IMM_OFF), // 000 0010 0 1011 +TABDECL( OP_SUB_ASR_IMM), // 000 0010 0 1100 +TABDECL( OP_LDRD_STRD_POST_INDEX), + // 000 0010 0 1101 +TABDECL( OP_SUB_ROR_IMM), // 000 0010 0 1110 +TABDECL( OP_LDRD_STRD_POST_INDEX), + // 000 0010 0 1111 + +TABDECL( OP_SUB_S_LSL_IMM), // 000 0010 1 0000 +TABDECL( OP_SUB_S_LSL_REG), // 000 0010 1 0001 +TABDECL( OP_SUB_S_LSR_IMM), // 000 0010 1 0010 +TABDECL( OP_SUB_S_LSR_REG), // 000 0010 1 0011 +TABDECL( OP_SUB_S_ASR_IMM), // 000 0010 1 0100 +TABDECL( OP_SUB_S_ASR_REG), // 000 0010 1 0101 +TABDECL( OP_SUB_S_ROR_IMM), // 000 0010 1 0110 +TABDECL( OP_SUB_S_ROR_REG), // 000 0010 1 0111 + +TABDECL( OP_SUB_S_LSL_IMM), // 000 0010 1 1000 +TABDECL( OP_UND), // 000 0010 1 1001 +TABDECL( OP_SUB_S_LSR_IMM), // 000 0010 1 1010 +TABDECL( OP_LDRH_POS_INDE_M_IMM_OFF), // 000 0010 1 1011 +TABDECL( OP_SUB_S_ASR_IMM), // 000 0010 1 1100 +TABDECL( OP_LDRSB_POS_INDE_M_IMM_OFF),// 000 0010 1 1101 +TABDECL( OP_SUB_S_ROR_IMM), // 000 0010 1 1110 +TABDECL( OP_LDRSH_POS_INDE_M_IMM_OFF),// 000 0010 1 1111 +//-------------------- +TABDECL( OP_RSB_LSL_IMM), // 000 0011 0 0000 +TABDECL( OP_RSB_LSL_REG), // 000 0011 0 0001 +TABDECL( OP_RSB_LSR_IMM), // 000 0011 0 0010 +TABDECL( OP_RSB_LSR_REG), // 000 0011 0 0011 +TABDECL( OP_RSB_ASR_IMM), // 000 0011 0 0100 +TABDECL( OP_RSB_ASR_REG), // 000 0011 0 0101 +TABDECL( OP_RSB_ROR_IMM), // 000 0011 0 0110 +TABDECL( OP_RSB_ROR_REG), // 000 0011 0 0111 + +TABDECL( OP_RSB_LSL_IMM), // 000 0011 0 1000 +TABDECL( OP_UND), // 000 0011 0 1001 +TABDECL( OP_RSB_LSR_IMM), // OOO OO11 O 1010 +TABDECL( OP_UND), // 000 0011 0 1011 +TABDECL( OP_RSB_ASR_IMM), // 000 0011 0 1100 +TABDECL( OP_UND), // 000 0011 0 1101 +TABDECL( OP_RSB_ROR_IMM), // 000 0011 0 1110 +TABDECL( OP_UND), // 000 0011 0 1111 + +TABDECL( OP_RSB_S_LSL_IMM), // 000 0011 1 0000 +TABDECL( OP_RSB_S_LSL_REG), // 000 0011 1 0001 +TABDECL( OP_RSB_S_LSR_IMM), // 000 0011 1 0010 +TABDECL( OP_RSB_S_LSR_REG), // 000 0011 1 0011 +TABDECL( OP_RSB_S_ASR_IMM), // 000 0011 1 0100 +TABDECL( OP_RSB_S_ASR_REG), // 000 0011 1 0101 +TABDECL( OP_RSB_S_ROR_IMM), // 000 0011 1 0110 +TABDECL( OP_RSB_S_ROR_REG), // 000 0011 1 0111 + +TABDECL( OP_RSB_S_LSL_IMM), // 000 0011 1 1000 +TABDECL( OP_UND), // 000 0011 1 1001 +TABDECL( OP_RSB_S_LSR_IMM), // 000 0011 1 1010 +TABDECL( OP_UND), // 000 0011 1 1011 +TABDECL( OP_RSB_S_ASR_IMM), // 000 0011 1 1100 +TABDECL( OP_UND), // 000 0011 1 1101 +TABDECL( OP_RSB_S_ROR_IMM), // 000 0011 1 1110 +TABDECL( OP_UND), // 000 0011 1 1111 +//-------------------------- +TABDECL( OP_ADD_LSL_IMM), // 000 0100 0 0000 +TABDECL( OP_ADD_LSL_REG), // 000 0100 0 0001 +TABDECL( OP_ADD_LSR_IMM), // 000 0100 0 0010 +TABDECL( OP_ADD_LSR_REG), // 000 0100 0 0011 +TABDECL( OP_ADD_ASR_IMM), // 000 0100 0 0100 +TABDECL( OP_ADD_ASR_REG), // 000 0100 0 0101 +TABDECL( OP_ADD_ROR_IMM), // 000 0100 0 0110 +TABDECL( OP_ADD_ROR_REG), // 000 0100 0 0111 + +TABDECL( OP_ADD_LSL_IMM), // 000 0100 0 1000 +TABDECL( OP_UMULL), // 000 0100 0 1001 +TABDECL( OP_ADD_LSR_IMM), // OOO O10O O 1010 +TABDECL( OP_STRH_POS_INDE_P_REG_OFF), // 000 0100 0 1011 +TABDECL( OP_ADD_ASR_IMM), // 000 0100 0 1100 +TABDECL( OP_LDRD_STRD_POST_INDEX), + // 000 0100 0 1101 +TABDECL( OP_ADD_ROR_IMM), // 000 0100 0 1110 +TABDECL( OP_LDRD_STRD_POST_INDEX), + // 000 0100 0 1111 + +TABDECL( OP_ADD_S_LSL_IMM), // 000 0100 1 0000 +TABDECL( OP_ADD_S_LSL_REG), // 000 0100 1 0001 +TABDECL( OP_ADD_S_LSR_IMM), // 000 0100 1 0010 +TABDECL( OP_ADD_S_LSR_REG), // 000 0100 1 0011 +TABDECL( OP_ADD_S_ASR_IMM), // 000 0100 1 0100 +TABDECL( OP_ADD_S_ASR_REG), // 000 0100 1 0101 +TABDECL( OP_ADD_S_ROR_IMM), // 000 0100 1 0110 +TABDECL( OP_ADD_S_ROR_REG), // 000 0100 1 0111 + +TABDECL( OP_ADD_S_LSL_IMM), // 000 0100 1 1000 +TABDECL( OP_UMULL_S), // 000 0100 1 1001 +TABDECL( OP_ADD_S_LSR_IMM), // 000 0100 1 1010 +TABDECL( OP_LDRH_POS_INDE_P_REG_OFF), // 000 0100 1 1011 +TABDECL( OP_ADD_S_ASR_IMM), // 000 0100 1 1100 +TABDECL( OP_LDRSB_POS_INDE_P_REG_OFF),// 000 0100 1 1101 +TABDECL( OP_ADD_S_ROR_IMM), // 000 0100 1 1110 +TABDECL( OP_LDRSH_POS_INDE_P_REG_OFF),// 000 0100 1 1111 +//----------------------------------------- +TABDECL( OP_ADC_LSL_IMM), // 000 0101 0 0000 +TABDECL( OP_ADC_LSL_REG), // 000 0101 0 0001 +TABDECL( OP_ADC_LSR_IMM), // 000 0101 0 0010 +TABDECL( OP_ADC_LSR_REG), // 000 0101 0 0011 +TABDECL( OP_ADC_ASR_IMM), // 000 0101 0 0100 +TABDECL( OP_ADC_ASR_REG), // 000 0101 0 0101 +TABDECL( OP_ADC_ROR_IMM), // 000 0101 0 0110 +TABDECL( OP_ADC_ROR_REG), // 000 0101 0 0111 + +TABDECL( OP_ADC_LSL_IMM), // 000 0101 0 1000 +TABDECL( OP_UMLAL), // 000 0101 0 1001 +TABDECL( OP_ADC_LSR_IMM), // OOO O101 O 1010 +TABDECL( OP_UND), // 000 0101 0 1011 +TABDECL( OP_ADC_ASR_IMM), // 000 0101 0 1100 +TABDECL( OP_UND), // 000 0101 0 1101 +TABDECL( OP_ADC_ROR_IMM), // 000 0101 0 1110 +TABDECL( OP_UND), // 000 0101 0 1111 + +TABDECL( OP_ADC_S_LSL_IMM), // 000 0101 1 0000 +TABDECL( OP_ADC_S_LSL_REG), // 000 0101 1 0001 +TABDECL( OP_ADC_S_LSR_IMM), // 000 0101 1 0010 +TABDECL( OP_ADC_S_LSR_REG), // 000 0101 1 0011 +TABDECL( OP_ADC_S_ASR_IMM), // 000 0101 1 0100 +TABDECL( OP_ADC_S_ASR_REG), // 000 0101 1 0101 +TABDECL( OP_ADC_S_ROR_IMM), // 000 0101 1 0110 +TABDECL( OP_ADC_S_ROR_REG), // 000 0101 1 0111 + +TABDECL( OP_ADC_S_LSL_IMM), // 000 0101 1 1000 +TABDECL( OP_UMLAL_S), // 000 0101 1 1001 +TABDECL( OP_ADC_S_LSR_IMM), // 000 0101 1 1010 +TABDECL( OP_UND), // 000 0101 1 1011 +TABDECL( OP_ADC_S_ASR_IMM), // 000 0101 1 1100 +TABDECL( OP_UND), // 000 0101 1 1101 +TABDECL( OP_ADC_S_ROR_IMM), // 000 0101 1 1110 +TABDECL( OP_UND), // 000 0101 1 1111 +//------------------------------------------ +TABDECL( OP_SBC_LSL_IMM), // 000 0110 0 0000 +TABDECL( OP_SBC_LSL_REG), // 000 0110 0 0001 +TABDECL( OP_SBC_LSR_IMM), // 000 0110 0 0010 +TABDECL( OP_SBC_LSR_REG), // 000 0110 0 0011 +TABDECL( OP_SBC_ASR_IMM), // 000 0110 0 0100 +TABDECL( OP_SBC_ASR_REG), // 000 0110 0 0101 +TABDECL( OP_SBC_ROR_IMM), // 000 0110 0 0110 +TABDECL( OP_SBC_ROR_REG), // 000 0110 0 0111 + +TABDECL( OP_SBC_LSL_IMM), // 000 0110 0 1000 +TABDECL( OP_SMULL), // 000 0110 0 1001 +TABDECL( OP_SBC_LSR_IMM), // OOO O11O O 1010 +TABDECL( OP_STRH_POS_INDE_P_IMM_OFF), // 000 0110 0 1011 +TABDECL( OP_SBC_ASR_IMM), // 000 0110 0 1100 +TABDECL( OP_LDRD_STRD_POST_INDEX), + // 000 0110 0 1101 +TABDECL( OP_SBC_ROR_IMM), // 000 0110 0 1110 +TABDECL( OP_LDRD_STRD_POST_INDEX), + // 000 0110 0 1111 + +TABDECL( OP_SBC_S_LSL_IMM), // 000 0110 1 0000 +TABDECL( OP_SBC_S_LSL_REG), // 000 0110 1 0001 +TABDECL( OP_SBC_S_LSR_IMM), // 000 0110 1 0010 +TABDECL( OP_SBC_S_LSR_REG), // 000 0110 1 0011 +TABDECL( OP_SBC_S_ASR_IMM), // 000 0110 1 0100 +TABDECL( OP_SBC_S_ASR_REG), // 000 0110 1 0101 +TABDECL( OP_SBC_S_ROR_IMM), // 000 0110 1 0110 +TABDECL( OP_SBC_S_ROR_REG), // 000 0110 1 0111 + +TABDECL( OP_SBC_S_LSL_IMM), // 000 0110 1 1000 +TABDECL( OP_SMULL_S), // 000 0110 1 1001 +TABDECL( OP_SBC_S_LSR_IMM), // 000 0110 1 1010 +TABDECL( OP_LDRH_POS_INDE_P_IMM_OFF), // 000 0110 1 1011 +TABDECL( OP_SBC_S_ASR_IMM), // 000 0110 1 1100 +TABDECL( OP_LDRSB_POS_INDE_P_IMM_OFF),// 000 0110 1 1101 +TABDECL( OP_SBC_S_ROR_IMM), // 000 0110 1 1110 +TABDECL( OP_LDRSH_POS_INDE_P_IMM_OFF),// 000 0110 1 1111 +//------------------------------------------ +TABDECL( OP_RSC_LSL_IMM), // 000 0111 0 0000 +TABDECL( OP_RSC_LSL_REG), // 000 0111 0 0001 +TABDECL( OP_RSC_LSR_IMM), // 000 0111 0 0010 +TABDECL( OP_RSC_LSR_REG), // 000 0111 0 0011 +TABDECL( OP_RSC_ASR_IMM), // 000 0111 0 0100 +TABDECL( OP_RSC_ASR_REG), // 000 0111 0 0101 +TABDECL( OP_RSC_ROR_IMM), // 000 0111 0 0110 +TABDECL( OP_RSC_ROR_REG), // 000 0111 0 0111 + +TABDECL( OP_RSC_LSL_IMM), // 000 0111 0 1000 +TABDECL( OP_SMLAL), // 000 0111 0 1001 +TABDECL( OP_RSC_LSR_IMM), // OOO O111 O 1010 +TABDECL( OP_UND), // 000 0111 0 1011 +TABDECL( OP_RSC_ASR_IMM), // 000 0111 0 1100 +TABDECL( OP_UND), // 000 0111 0 1101 +TABDECL( OP_RSC_ROR_IMM), // 000 0111 0 1110 +TABDECL( OP_UND), // 000 0111 0 1111 + +TABDECL( OP_RSC_S_LSL_IMM), // 000 0111 1 0000 +TABDECL( OP_RSC_S_LSL_REG), // 000 0111 1 0001 +TABDECL( OP_RSC_S_LSR_IMM), // 000 0111 1 0010 +TABDECL( OP_RSC_S_LSR_REG), // 000 0111 1 0011 +TABDECL( OP_RSC_S_ASR_IMM), // 000 0111 1 0100 +TABDECL( OP_RSC_S_ASR_REG), // 000 0111 1 0101 +TABDECL( OP_RSC_S_ROR_IMM), // 000 0111 1 0110 +TABDECL( OP_RSC_S_ROR_REG), // 000 0111 1 0111 + +TABDECL( OP_RSC_S_LSL_IMM), // 000 0111 1 1000 +TABDECL( OP_SMLAL_S), // 000 0111 1 1001 +TABDECL( OP_RSC_S_LSR_IMM), // 000 0111 1 1010 +TABDECL( OP_UND), // 000 0111 1 1011 +TABDECL( OP_RSC_S_ASR_IMM), // 000 0111 1 1100 +TABDECL( OP_UND), // 000 0111 1 1101 +TABDECL( OP_RSC_S_ROR_IMM), // 000 0111 1 1110 +TABDECL( OP_UND), // 000 0111 1 1111 +//------------------------------------------ +TABDECL( OP_MRS_CPSR), // 000 1000 0 0000 +TABDECL( OP_UND), // 000 1000 0 0001 +TABDECL( OP_UND), // 000 1000 0 0010 +TABDECL( OP_UND), // 000 1000 0 0011 +TABDECL( OP_UND), // 000 1000 0 0100 +TABDECL( OP_QADD), // 000 1000 0 0101 +TABDECL( OP_UND), // 000 1000 0 0110 +TABDECL( OP_UND), // 000 1000 0 0111 + +TABDECL( OP_SMLA_B_B), // 000 1000 0 1000 +TABDECL( OP_SWP), // 000 1000 0 1001 +TABDECL( OP_SMLA_T_B), // 000 1000 0 1010 +TABDECL( OP_STRH_M_REG_OFF), // 000 1000 0 1011 +TABDECL( OP_SMLA_B_T), // 000 1000 0 1100 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1000 0 1101 +TABDECL( OP_SMLA_T_T), // 000 1000 0 1110 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1000 0 1111 + +TABDECL( OP_TST_LSL_IMM), // 000 1000 1 0000 +TABDECL( OP_TST_LSL_REG), // 000 1000 1 0001 +TABDECL( OP_TST_LSR_IMM), // 000 1000 1 0010 +TABDECL( OP_TST_LSR_REG), // 000 1000 1 0011 +TABDECL( OP_TST_ASR_IMM), // 000 1000 1 0100 +TABDECL( OP_TST_ASR_REG), // 000 1000 1 0101 +TABDECL( OP_TST_ROR_IMM), // 000 1000 1 0110 +TABDECL( OP_TST_ROR_REG), // 000 1000 1 0111 + +TABDECL( OP_TST_LSL_IMM), // 000 1000 1 1000 +TABDECL( OP_UND), // 000 1000 1 1001 +TABDECL( OP_TST_LSR_IMM), // OOO 100O 1 1010 +TABDECL( OP_LDRH_M_REG_OFF), // 000 1000 1 1011 +TABDECL( OP_TST_ASR_IMM), // 000 1000 1 1100 +TABDECL( OP_LDRSB_M_REG_OFF),// 000 1000 1 1101 +TABDECL( OP_TST_ROR_IMM), // 000 1000 1 1110 +TABDECL( OP_LDRSH_M_REG_OFF),// 000 1000 1 1111 +//------------------------------------------ +TABDECL( OP_MSR_CPSR), // 000 1001 0 0000 +TABDECL( OP_BX), // 000 1001 0 0001 +TABDECL( OP_UND), // 000 1001 0 0010 +TABDECL( OP_BLX_REG), // 000 1001 0 0011 +TABDECL( OP_UND), // 000 1001 0 0100 +TABDECL( OP_QSUB), // 000 1001 0 0101 +TABDECL( OP_UND), // 000 1001 0 0110 +TABDECL( OP_BKPT), // 000 1001 0 0111 + +TABDECL( OP_SMLAW_B), // 000 1001 0 1000 +TABDECL( OP_UND), // 000 1001 0 1001 +TABDECL( OP_SMULW_B), // 000 1001 0 1010 +TABDECL( OP_STRH_PRE_INDE_M_REG_OFF), // 000 1001 0 1011 +TABDECL( OP_SMLAW_T), // 000 1001 0 1100 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1001 0 1101 +TABDECL( OP_SMULW_T), // 000 1001 0 1110 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1001 0 1111 + +TABDECL( OP_TEQ_LSL_IMM), // 000 1001 1 0000 +TABDECL( OP_TEQ_LSL_REG), // 000 1001 1 0001 +TABDECL( OP_TEQ_LSR_IMM), // 000 1001 1 0010 +TABDECL( OP_TEQ_LSR_REG), // 000 1001 1 0011 +TABDECL( OP_TEQ_ASR_IMM), // 000 1001 1 0100 +TABDECL( OP_TEQ_ASR_REG), // 000 1001 1 0101 +TABDECL( OP_TEQ_ROR_IMM), // 000 1001 1 0110 +TABDECL( OP_TEQ_ROR_REG), // 000 1001 1 0111 + +TABDECL( OP_TEQ_LSL_IMM), // 000 1001 1 1000 +TABDECL( OP_UND), // 000 1001 1 1001 +TABDECL( OP_TEQ_LSR_IMM), // OOO 1001 1 1010 +TABDECL( OP_LDRH_PRE_INDE_M_REG_OFF), // 000 1001 1 1011 +TABDECL( OP_TEQ_ASR_IMM), // 000 1001 1 1100 +TABDECL( OP_LDRSB_PRE_INDE_M_REG_OFF), // 000 1001 1 1101 +TABDECL( OP_TEQ_ROR_IMM), // 000 1001 1 1110 +TABDECL( OP_LDRSH_PRE_INDE_M_REG_OFF), // 000 1001 1 1111 +//------------------------------------------ +TABDECL( OP_MRS_SPSR), // 000 1010 0 0000 +TABDECL( OP_UND), // 000 1010 0 0001 +TABDECL( OP_UND), // 000 1010 0 0010 +TABDECL( OP_UND), // 000 1010 0 0011 +TABDECL( OP_UND), // 000 1010 0 0100 +TABDECL( OP_QDADD), // 000 1010 0 0101 +TABDECL( OP_UND), // 000 1010 0 0110 +TABDECL( OP_UND), // 000 1010 0 0111 + +TABDECL( OP_SMLAL_B_B), // 000 1010 0 1000 +TABDECL( OP_SWPB), // 000 1010 0 1001 +TABDECL( OP_SMLAL_T_B), // 000 1010 0 1010 +TABDECL( OP_STRH_M_IMM_OFF), // 000 1010 0 1011 +TABDECL( OP_SMLAL_B_T), // 000 1010 0 1100 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1010 0 1101 +TABDECL( OP_SMLAL_T_T), // 000 1010 0 1110 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1010 0 1111 + +TABDECL( OP_CMP_LSL_IMM), // 000 1010 1 0000 +TABDECL( OP_CMP_LSL_REG), // 000 1010 1 0001 +TABDECL( OP_CMP_LSR_IMM), // 000 1010 1 0010 +TABDECL( OP_CMP_LSR_REG), // 000 1010 1 0011 +TABDECL( OP_CMP_ASR_IMM), // 000 1010 1 0100 +TABDECL( OP_CMP_ASR_REG), // 000 1010 1 0101 +TABDECL( OP_CMP_ROR_IMM), // 000 1010 1 0110 +TABDECL( OP_CMP_ROR_REG), // 000 1010 1 0111 + +TABDECL( OP_CMP_LSL_IMM), // 000 1010 1 1000 +TABDECL( OP_UND), // 000 1010 1 1001 +TABDECL( OP_CMP_LSR_IMM), // OOO 1O1O 1 1010 +TABDECL( OP_LDRH_M_IMM_OFF), // 000 1010 1 1011 +TABDECL( OP_CMP_ASR_IMM), // 000 1010 1 1100 +TABDECL( OP_LDRSB_M_IMM_OFF),// 000 1010 1 1101 +TABDECL( OP_CMP_ROR_IMM), // 000 1010 1 1110 +TABDECL( OP_LDRSH_M_IMM_OFF),// 000 1010 1 1111 +//------------------------------------------ +TABDECL( OP_MSR_SPSR), // 000 1011 0 0000 +TABDECL( OP_CLZ), // 000 1011 0 0001 +TABDECL( OP_UND), // 000 1011 0 0010 +TABDECL( OP_UND), // 000 1011 0 0011 +TABDECL( OP_UND), // 000 1011 0 0100 +TABDECL( OP_QDSUB), // 000 1011 0 0101 +TABDECL( OP_UND), // 000 1011 0 0110 +TABDECL( OP_UND), // 000 1011 0 0111 + +TABDECL( OP_SMUL_B_B), // 000 1011 0 1000 +TABDECL( OP_UND), // 000 1011 0 1001 +TABDECL( OP_SMUL_T_B), // 000 1011 0 1010 +TABDECL( OP_STRH_PRE_INDE_M_IMM_OFF), // 000 1011 0 1011 +TABDECL( OP_SMUL_B_T), // 000 1011 0 1100 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1011 0 1101 +TABDECL( OP_SMUL_T_T), // 000 1011 0 1110 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1011 0 1111 + +TABDECL( OP_CMN_LSL_IMM), // 000 1011 1 0000 +TABDECL( OP_CMN_LSL_REG), // 000 1011 1 0001 +TABDECL( OP_CMN_LSR_IMM), // 000 1011 1 0010 +TABDECL( OP_CMN_LSR_REG), // 000 1011 1 0011 +TABDECL( OP_CMN_ASR_IMM), // 000 1011 1 0100 +TABDECL( OP_CMN_ASR_REG), // 000 1011 1 0101 +TABDECL( OP_CMN_ROR_IMM), // 000 1011 1 0110 +TABDECL( OP_CMN_ROR_REG), // 000 1011 1 0111 + +TABDECL( OP_CMN_LSL_IMM), // 000 1011 1 1000 +TABDECL( OP_UND), // 000 1011 1 1001 +TABDECL( OP_CMN_LSR_IMM), // OOO 1O11 1 1010 +TABDECL( OP_LDRH_PRE_INDE_M_IMM_OFF), // 000 1011 1 1011 +TABDECL( OP_CMN_ASR_IMM), // 000 1011 1 1100 +TABDECL( OP_LDRSB_PRE_INDE_M_IMM_OFF), // 000 1011 1 1101 +TABDECL( OP_CMN_ROR_IMM), // 000 1011 1 1110 +TABDECL( OP_LDRSH_PRE_INDE_M_IMM_OFF), // 000 1011 1 1111 +//------------------------------------------ +TABDECL( OP_ORR_LSL_IMM), // 000 1100 0 0000 +TABDECL( OP_ORR_LSL_REG), // 000 1100 0 0001 +TABDECL( OP_ORR_LSR_IMM), // 000 1100 0 0010 +TABDECL( OP_ORR_LSR_REG), // 000 1100 0 0011 +TABDECL( OP_ORR_ASR_IMM), // 000 1100 0 0100 +TABDECL( OP_ORR_ASR_REG), // 000 1100 0 0101 +TABDECL( OP_ORR_ROR_IMM), // 000 1100 0 0110 +TABDECL( OP_ORR_ROR_REG), // 000 1100 0 0111 + +TABDECL( OP_ORR_LSL_IMM), // 000 1100 0 1000 +TABDECL( OP_UND), // 000 1100 0 1001 +TABDECL( OP_ORR_LSR_IMM), // OOO 110O O 1010 +TABDECL( OP_STRH_P_REG_OFF), // 000 1100 0 1011 +TABDECL( OP_ORR_ASR_IMM), // 000 1100 0 1100 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1100 0 1101 +TABDECL( OP_ORR_ROR_IMM), // 000 1100 0 1110 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1100 0 1111 + +TABDECL( OP_ORR_S_LSL_IMM), // 000 1100 1 0000 +TABDECL( OP_ORR_S_LSL_REG), // 000 1100 1 0001 +TABDECL( OP_ORR_S_LSR_IMM), // 000 1100 1 0010 +TABDECL( OP_ORR_S_LSR_REG), // 000 1100 1 0011 +TABDECL( OP_ORR_S_ASR_IMM), // 000 1100 1 0100 +TABDECL( OP_ORR_S_ASR_REG), // 000 1100 1 0101 +TABDECL( OP_ORR_S_ROR_IMM), // 000 1100 1 0110 +TABDECL( OP_ORR_S_ROR_REG), // 000 1100 1 0111 + +TABDECL( OP_ORR_S_LSL_IMM), // 000 1100 1 1000 +TABDECL( OP_UND), // 000 1100 1 1001 +TABDECL( OP_ORR_S_LSR_IMM), // 000 1100 1 1010 +TABDECL( OP_LDRH_P_REG_OFF), // 000 1100 1 1011 +TABDECL( OP_ORR_S_ASR_IMM), // 000 1100 1 1100 +TABDECL( OP_LDRSB_P_REG_OFF),// 000 1100 1 1101 +TABDECL( OP_ORR_S_ROR_IMM), // 000 1100 1 1110 +TABDECL( OP_LDRSH_P_REG_OFF),// 000 1100 1 1111 +//------------------------------------------ +TABDECL( OP_MOV_LSL_IMM), // 000 1101 0 0000 +TABDECL( OP_MOV_LSL_REG), // 000 1101 0 0001 +TABDECL( OP_MOV_LSR_IMM), // 000 1101 0 0010 +TABDECL( OP_MOV_LSR_REG), // 000 1101 0 0011 +TABDECL( OP_MOV_ASR_IMM), // 000 1101 0 0100 +TABDECL( OP_MOV_ASR_REG), // 000 1101 0 0101 +TABDECL( OP_MOV_ROR_IMM), // 000 1101 0 0110 +TABDECL( OP_MOV_ROR_REG), // 000 1101 0 0111 + +TABDECL( OP_MOV_LSL_IMM), // 000 1101 0 1000 +TABDECL( OP_UND), // 000 1101 0 1001 +TABDECL( OP_MOV_LSR_IMM), // OOO 1101 O 1010 +TABDECL( OP_STRH_PRE_INDE_P_REG_OFF), // 000 1101 0 1011 +TABDECL( OP_MOV_ASR_IMM), // 000 1101 0 1100 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1101 0 1101 +TABDECL( OP_MOV_ROR_IMM), // 000 1101 0 1110 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1101 0 1111 + +TABDECL( OP_MOV_S_LSL_IMM), // 000 1101 1 0000 +TABDECL( OP_MOV_S_LSL_REG), // 000 1101 1 0001 +TABDECL( OP_MOV_S_LSR_IMM), // 000 1101 1 0010 +TABDECL( OP_MOV_S_LSR_REG), // 000 1101 1 0011 +TABDECL( OP_MOV_S_ASR_IMM), // 000 1101 1 0100 +TABDECL( OP_MOV_S_ASR_REG), // 000 1101 1 0101 +TABDECL( OP_MOV_S_ROR_IMM), // 000 1101 1 0110 +TABDECL( OP_MOV_S_ROR_REG), // 000 1101 1 0111 + +TABDECL( OP_MOV_S_LSL_IMM), // 000 1101 1 1000 +TABDECL( OP_UND), // 000 1101 1 1001 +TABDECL( OP_MOV_S_LSR_IMM), // 000 1101 1 1010 +TABDECL( OP_LDRH_PRE_INDE_P_REG_OFF), // 000 1101 1 1011 +TABDECL( OP_MOV_S_ASR_IMM), // 000 1101 1 1100 +TABDECL( OP_LDRSB_PRE_INDE_P_REG_OFF),// 000 1101 1 1101 +TABDECL( OP_MOV_S_ROR_IMM), // 000 1101 1 1110 +TABDECL( OP_LDRSH_PRE_INDE_P_REG_OFF),// 000 1101 1 1111 +//------------------------------------------ +TABDECL( OP_BIC_LSL_IMM), // 000 1110 0 0000 +TABDECL( OP_BIC_LSL_REG), // 000 1110 0 0001 +TABDECL( OP_BIC_LSR_IMM), // 000 1110 0 0010 +TABDECL( OP_BIC_LSR_REG), // 000 1110 0 0011 +TABDECL( OP_BIC_ASR_IMM), // 000 1110 0 0100 +TABDECL( OP_BIC_ASR_REG), // 000 1110 0 0101 +TABDECL( OP_BIC_ROR_IMM), // 000 1110 0 0110 +TABDECL( OP_BIC_ROR_REG), // 000 1110 0 0111 + +TABDECL( OP_BIC_LSL_IMM), // 000 1110 0 1000 +TABDECL( OP_UND), // 000 1110 0 1001 +TABDECL( OP_BIC_LSR_IMM), // OOO 111O O 1010 +TABDECL( OP_STRH_P_IMM_OFF), // 000 1110 0 1011 +TABDECL( OP_BIC_ASR_IMM), // 000 1110 0 1100 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1110 0 1101 +TABDECL( OP_BIC_ROR_IMM), // 000 1110 0 1110 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1110 0 1111 + +TABDECL( OP_BIC_S_LSL_IMM), // 000 1110 1 0000 +TABDECL( OP_BIC_S_LSL_REG), // 000 1110 1 0001 +TABDECL( OP_BIC_S_LSR_IMM), // 000 1110 1 0010 +TABDECL( OP_BIC_S_LSR_REG), // 000 1110 1 0011 +TABDECL( OP_BIC_S_ASR_IMM), // 000 1110 1 0100 +TABDECL( OP_BIC_S_ASR_REG), // 000 1110 1 0101 +TABDECL( OP_BIC_S_ROR_IMM), // 000 1110 1 0110 +TABDECL( OP_BIC_S_ROR_REG), // 000 1110 1 0111 + +TABDECL( OP_BIC_S_LSL_IMM), // 000 1110 1 1000 +TABDECL( OP_UND), // 000 1110 1 1001 +TABDECL( OP_BIC_S_LSR_IMM), // 000 1110 1 1010 +TABDECL( OP_LDRH_P_IMM_OFF), // 000 1110 1 1011 +TABDECL( OP_BIC_S_ASR_IMM), // 000 1110 1 1100 +TABDECL( OP_LDRSB_P_IMM_OFF),// 000 1110 1 1101 +TABDECL( OP_BIC_S_ROR_IMM), // 000 1110 1 1110 +TABDECL( OP_LDRSH_P_IMM_OFF),// 000 1110 1 1111 +//------------------------------------------- +TABDECL( OP_MVN_LSL_IMM), // 000 1111 0 0000 +TABDECL( OP_MVN_LSL_REG), // 000 1111 0 0001 +TABDECL( OP_MVN_LSR_IMM), // 000 1111 0 0010 +TABDECL( OP_MVN_LSR_REG), // 000 1111 0 0011 +TABDECL( OP_MVN_ASR_IMM), // 000 1111 0 0100 +TABDECL( OP_MVN_ASR_REG), // 000 1111 0 0101 +TABDECL( OP_MVN_ROR_IMM), // 000 1111 0 0110 +TABDECL( OP_MVN_ROR_REG), // 000 1111 0 0111 + +TABDECL( OP_MVN_LSL_IMM), // 000 1111 0 1000 +TABDECL( OP_UND), // 000 1111 0 1001 +TABDECL( OP_MVN_LSR_IMM), // OOO 1111 O 1010 +TABDECL( OP_STRH_PRE_INDE_P_IMM_OFF), // 000 1111 0 1011 +TABDECL( OP_MVN_ASR_IMM), // 000 1111 0 1100 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1111 0 1101 +TABDECL( OP_MVN_ROR_IMM), // 000 1111 0 1110 +TABDECL( OP_LDRD_STRD_OFFSET_PRE_INDEX), + // 000 1111 0 1111 + +TABDECL( OP_MVN_S_LSL_IMM), // 000 1111 1 0000 +TABDECL( OP_MVN_S_LSL_REG), // 000 1111 1 0001 +TABDECL( OP_MVN_S_LSR_IMM), // 000 1111 1 0010 +TABDECL( OP_MVN_S_LSR_REG), // 000 1111 1 0011 +TABDECL( OP_MVN_S_ASR_IMM), // 000 1111 1 0100 +TABDECL( OP_MVN_S_ASR_REG), // 000 1111 1 0101 +TABDECL( OP_MVN_S_ROR_IMM), // 000 1111 1 0110 +TABDECL( OP_MVN_S_ROR_REG), // 000 1111 1 0111 + +TABDECL( OP_MVN_S_LSL_IMM), // 000 1111 1 1000 +TABDECL( OP_UND), // 000 1111 1 1001 +TABDECL( OP_MVN_S_LSR_IMM), // 000 1111 1 1010 +TABDECL( OP_LDRH_PRE_INDE_P_IMM_OFF), // 000 1111 1 1011 +TABDECL( OP_MVN_S_ASR_IMM), // 000 1111 1 1100 +TABDECL( OP_LDRSB_PRE_INDE_P_IMM_OFF),// 000 1111 1 1101 +TABDECL( OP_MVN_S_ROR_IMM), // 000 1111 1 1110 +TABDECL( OP_LDRSH_PRE_INDE_P_IMM_OFF),// 000 1111 1 1111 +//------------------------------------------- +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 0000 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 0001 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 0010 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 0011 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 0100 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 0101 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 0110 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 0111 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 1000 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 1001 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 1010 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 1011 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 1100 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 1101 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 1110 +TABDECL( OP_AND_IMM_VAL), // 001 0000 0 1111 + +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 0000 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 0001 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 0010 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 0011 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 0100 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 0101 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 0110 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 0111 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 1000 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 1001 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 1010 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 1011 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 1100 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 1101 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 1110 +TABDECL( OP_AND_S_IMM_VAL), // 001 0000 1 1111 +//------------------------------------------ +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 0000 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 0001 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 0010 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 0011 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 0100 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 0101 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 0110 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 0111 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 1000 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 1001 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 1010 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 1011 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 1100 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 1101 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 1110 +TABDECL( OP_EOR_IMM_VAL), // 001 0001 0 1111 + +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 0000 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 0001 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 0010 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 0011 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 0100 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 0101 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 0110 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 0111 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 1000 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 1001 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 1010 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 1011 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 1100 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 1101 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 1110 +TABDECL( OP_EOR_S_IMM_VAL), // 001 0001 1 1111 +//------------------------------------------ +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 0000 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 0001 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 0010 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 0011 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 0100 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 0101 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 0110 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 0111 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 1000 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 1001 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 1010 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 1011 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 1100 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 1101 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 1110 +TABDECL( OP_SUB_IMM_VAL), // 001 0010 0 1111 + +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 0000 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 0001 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 0010 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 0011 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 0100 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 0101 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 0110 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 0111 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 1000 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 1001 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 1010 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 1011 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 1100 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 1101 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 1110 +TABDECL( OP_SUB_S_IMM_VAL), // 001 0010 1 1111 +//------------------------------------------ +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 0000 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 0001 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 0010 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 0011 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 0100 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 0101 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 0110 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 0111 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 1000 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 1001 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 1010 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 1011 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 1100 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 1101 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 1110 +TABDECL( OP_RSB_IMM_VAL), // 001 0011 0 1111 + +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 0000 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 0001 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 0010 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 0011 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 0100 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 0101 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 0110 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 0111 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 1000 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 1001 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 1010 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 1011 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 1100 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 1101 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 1110 +TABDECL( OP_RSB_S_IMM_VAL), // 001 0011 1 1111 +//------------------------------------------ +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 0000 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 0001 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 0010 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 0011 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 0100 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 0101 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 0110 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 0111 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 1000 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 1001 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 1010 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 1011 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 1100 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 1101 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 1110 +TABDECL( OP_ADD_IMM_VAL), // 001 0100 0 1111 + +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 0000 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 0001 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 0010 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 0011 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 0100 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 0101 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 0110 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 0111 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 1000 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 1001 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 1010 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 1011 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 1100 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 1101 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 1110 +TABDECL( OP_ADD_S_IMM_VAL), // 001 0100 1 1111 +//------------------------------------------ +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 0000 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 0001 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 0010 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 0011 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 0100 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 0101 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 0110 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 0111 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 1000 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 1001 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 1010 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 1011 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 1100 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 1101 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 1110 +TABDECL( OP_ADC_IMM_VAL), // 001 0101 0 1111 + +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 0000 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 0001 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 0010 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 0011 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 0100 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 0101 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 0110 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 0111 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 1000 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 1001 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 1010 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 1011 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 1100 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 1101 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 1110 +TABDECL( OP_ADC_S_IMM_VAL), // 001 0101 1 1111 +//------------------------------------------ +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 0000 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 0001 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 0010 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 0011 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 0100 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 0101 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 0110 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 0111 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 1000 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 1001 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 1010 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 1011 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 1100 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 1101 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 1110 +TABDECL( OP_SBC_IMM_VAL), // 001 0110 0 1111 + +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 0000 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 0001 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 0010 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 0011 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 0100 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 0101 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 0110 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 0111 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 1000 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 1001 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 1010 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 1011 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 1100 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 1101 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 1110 +TABDECL( OP_SBC_S_IMM_VAL), // 001 0110 1 1111 +//------------------------------------------ +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 0000 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 0001 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 0010 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 0011 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 0100 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 0101 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 0110 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 0111 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 1000 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 1001 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 1010 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 1011 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 1100 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 1101 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 1110 +TABDECL( OP_RSC_IMM_VAL), // 001 0111 0 1111 + +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 0000 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 0001 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 0010 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 0011 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 0100 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 0101 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 0110 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 0111 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 1000 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 1001 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 1010 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 1011 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 1100 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 1101 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 1110 +TABDECL( OP_RSC_S_IMM_VAL), // 001 0111 1 1111 +//------------------------------------------ +TABDECL( OP_UND), // 001 1000 0 0000 +TABDECL( OP_UND), // 001 1000 0 0001 +TABDECL( OP_UND), // 001 1000 0 0010 +TABDECL( OP_UND), // 001 1000 0 0011 +TABDECL( OP_UND), // 001 1000 0 0100 +TABDECL( OP_UND), // 001 1000 0 0101 +TABDECL( OP_UND), // 001 1000 0 0110 +TABDECL( OP_UND), // 001 1000 0 0111 +TABDECL( OP_UND), // 001 1000 0 1000 +TABDECL( OP_UND), // 001 1000 0 1001 +TABDECL( OP_UND), // 001 1000 0 1010 +TABDECL( OP_UND), // 001 1000 0 1011 +TABDECL( OP_UND), // 001 1000 0 1100 +TABDECL( OP_UND), // 001 1000 0 1101 +TABDECL( OP_UND), // 001 1000 0 1110 +TABDECL( OP_UND), // 001 1000 0 1111 + +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 0000 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 0001 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 0010 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 0011 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 0100 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 0101 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 0110 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 0111 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 1000 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 1001 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 1010 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 1011 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 1100 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 1101 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 1110 +TABDECL( OP_TST_IMM_VAL), // 001 1000 1 1111 +//------------------------------------------ +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 0000 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 0001 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 0010 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 0011 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 0100 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 0101 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 0110 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 0111 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 1000 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 1001 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 1010 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 1011 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 1100 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 1101 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 1110 +TABDECL( OP_MSR_CPSR_IMM_VAL), // 001 1001 0 1111 + +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 0000 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 0001 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 0010 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 0011 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 0100 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 0101 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 0110 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 0111 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 1000 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 1001 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 1010 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 1011 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 1100 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 1101 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 1110 +TABDECL( OP_TEQ_IMM_VAL), // 001 1001 1 1111 +//------------------------------------------ +TABDECL( OP_UND), // 001 1010 0 0000 +TABDECL( OP_UND), // 001 1010 0 0001 +TABDECL( OP_UND), // 001 1010 0 0010 +TABDECL( OP_UND), // 001 1010 0 0011 +TABDECL( OP_UND), // 001 1010 0 0100 +TABDECL( OP_UND), // 001 1010 0 0101 +TABDECL( OP_UND), // 001 1010 0 0110 +TABDECL( OP_UND), // 001 1010 0 0111 +TABDECL( OP_UND), // 001 1010 0 1000 +TABDECL( OP_UND), // 001 1010 0 1001 +TABDECL( OP_UND), // 001 1010 0 1010 +TABDECL( OP_UND), // 001 1010 0 1011 +TABDECL( OP_UND), // 001 1010 0 1100 +TABDECL( OP_UND), // 001 1010 0 1101 +TABDECL( OP_UND), // 001 1010 0 1110 +TABDECL( OP_UND), // 001 1010 0 1111 + +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 0000 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 0001 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 0010 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 0011 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 0100 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 0101 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 0110 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 0111 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 1000 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 1001 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 1010 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 1011 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 1100 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 1101 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 1110 +TABDECL( OP_CMP_IMM_VAL), // 001 1010 1 1111 +//------------------------------------------ +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 0000 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 0001 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 0010 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 0011 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 0100 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 0101 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 0110 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 0111 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 1000 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 1001 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 1010 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 1011 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 1100 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 1101 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 1110 +TABDECL( OP_MSR_SPSR_IMM_VAL), // 001 1011 0 1111 + +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 0000 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 0001 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 0010 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 0011 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 0100 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 0101 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 0110 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 0111 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 1000 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 1001 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 1010 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 1011 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 1100 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 1101 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 1110 +TABDECL( OP_CMN_IMM_VAL), // 001 1011 1 1111 +//------------------------------------------ +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 0000 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 0001 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 0010 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 0011 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 0100 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 0101 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 0110 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 0111 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 1000 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 1001 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 1010 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 1011 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 1100 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 1101 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 1110 +TABDECL( OP_ORR_IMM_VAL), // 001 1100 0 1111 + +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 0000 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 0001 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 0010 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 0011 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 0100 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 0101 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 0110 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 0111 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 1000 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 1001 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 1010 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 1011 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 1100 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 1101 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 1110 +TABDECL( OP_ORR_S_IMM_VAL), // 001 1100 1 1111 +//------------------------------------------ +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 0000 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 0001 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 0010 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 0011 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 0100 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 0101 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 0110 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 0111 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 1000 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 1001 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 1010 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 1011 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 1100 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 1101 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 1110 +TABDECL( OP_MOV_IMM_VAL), // 001 1101 0 1111 + +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 0000 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 0001 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 0010 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 0011 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 0100 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 0101 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 0110 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 0111 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 1000 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 1001 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 1010 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 1011 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 1100 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 1101 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 1110 +TABDECL( OP_MOV_S_IMM_VAL), // 001 1101 1 1111 +//------------------------------------------ +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 0000 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 0001 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 0010 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 0011 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 0100 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 0101 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 0110 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 0111 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 1000 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 1001 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 1010 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 1011 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 1100 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 1101 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 1110 +TABDECL( OP_BIC_IMM_VAL), // 001 1110 0 1111 + +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 0000 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 0001 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 0010 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 0011 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 0100 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 0101 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 0110 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 0111 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 1000 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 1001 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 1010 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 1011 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 1100 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 1101 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 1110 +TABDECL( OP_BIC_S_IMM_VAL), // 001 1110 1 1111 +//------------------------------------------ +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 0000 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 0001 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 0010 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 0011 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 0100 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 0101 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 0110 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 0111 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 1000 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 1001 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 1010 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 1011 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 1100 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 1101 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 1110 +TABDECL( OP_MVN_IMM_VAL), // 001 1111 0 1111 + +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 0000 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 0001 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 0010 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 0011 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 0100 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 0101 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 0110 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 0111 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 1000 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 1001 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 1010 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 1011 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 1100 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 1101 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 1110 +TABDECL( OP_MVN_S_IMM_VAL), // 001 1111 1 1111 +//------------------------------------------ +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 0000 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 0001 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 0010 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 0011 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 0100 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 0101 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 0110 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 0111 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 1000 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 1001 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 1010 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 1011 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 1100 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 1101 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 1110 +TABDECL( OP_STR_M_IMM_OFF_POSTIND), //010 0000 0 1111 + +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 0000 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 0001 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 0010 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 0011 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 0100 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 0101 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 0110 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 0111 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 1000 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 1001 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 1010 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 1011 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 1100 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 1101 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 1110 +TABDECL( OP_LDR_M_IMM_OFF_POSTIND), //010 0000 1 1111 +//------------------------------------------ +TABDECL( OP_UND), //010 0001 0 0000 +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +//------------------------------------------ +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 0000 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 0001 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 0010 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 0011 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 0100 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 0101 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 0110 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 0111 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 1000 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 1001 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 1010 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 1011 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 1100 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 1101 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 1110 +TABDECL( OP_STRB_M_IMM_OFF_POSTIND), //010 0010 0 1111 + +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 0000 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 0001 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 0010 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 0011 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 0100 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 0101 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 0110 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 0111 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 1000 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 1001 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 1010 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 1011 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 1100 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 1101 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 1110 +TABDECL( OP_LDRB_M_IMM_OFF_POSTIND), //010 0010 1 1111 +//------------------------------------------ +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 + +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +TABDECL( OP_UND), //010 0011 0 0000 +//------------------------------------------ +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 + +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +//------------------------------------------ +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STR_P_IMM_OFF_POSTIND), //010 0100 0 0000 + +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +TABDECL( OP_LDR_P_IMM_OFF_POSTIND2), //010 0100 0 0000 +//------------------------------------------ +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0110 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 + +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0110 1 1111 +//------------------------------------------ +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0111 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 + +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0100 0 0000 +TABDECL( OP_LDRB_P_IMM_OFF_POSTIND), //010 0111 1 1111 +//------------------------------------------ +TABDECL( OP_STR_M_IMM_OFF), //010 1000 0 0000 +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), +TABDECL( OP_STR_M_IMM_OFF), + +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), +TABDECL( OP_LDR_M_IMM_OFF), //010 1000 1 1111 +//------------------------------------------ +TABDECL( OP_STR_M_IMM_OFF_PREIND), //010 1001 0 0000 +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), +TABDECL( OP_STR_M_IMM_OFF_PREIND), + +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), +TABDECL( OP_LDR_M_IMM_OFF_PREIND), //010 1001 1 1111 +//------------------------------------------ +TABDECL( OP_STRB_M_IMM_OFF), //010 1010 0 0000 +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), +TABDECL( OP_STRB_M_IMM_OFF), + +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), +TABDECL( OP_LDRB_M_IMM_OFF), //010 1010 1 1111 +//------------------------------------------ +TABDECL( OP_STRB_M_IMM_OFF_PREIND), //010 1011 0 0000 +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), +TABDECL( OP_STRB_M_IMM_OFF_PREIND), + +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), +TABDECL( OP_LDRB_M_IMM_OFF_PREIND), //010 1011 1 1111 +//------------------------------------------ +TABDECL( OP_STR_P_IMM_OFF), //010 1100 0 0000 +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), +TABDECL( OP_STR_P_IMM_OFF), + +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), +TABDECL( OP_LDR_P_IMM_OFF), //010 1100 1 1111 +//------------------------------------------ +TABDECL( OP_STR_P_IMM_OFF_PREIND), //010 1101 0 0000 +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), +TABDECL( OP_STR_P_IMM_OFF_PREIND), + +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), +TABDECL( OP_LDR_P_IMM_OFF_PREIND), //010 1101 1 1111 +//------------------------------------------ +TABDECL( OP_STRB_P_IMM_OFF), //010 1110 0 0000 +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), +TABDECL( OP_STRB_P_IMM_OFF), + +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), +TABDECL( OP_LDRB_P_IMM_OFF), //010 1110 1 1111 +//------------------------------------------ +TABDECL( OP_STRB_P_IMM_OFF_PREIND), //010 1111 0 0000 +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), +TABDECL( OP_STRB_P_IMM_OFF_PREIND), + +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), +TABDECL( OP_LDRB_P_IMM_OFF_PREIND), //010 1111 1 1111 +//------------------------------------------ +TABDECL( OP_STR_M_LSL_IMM_OFF_POSTIND), //011 0000 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STR_M_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), + +TABDECL( OP_LDR_M_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), //011 0000 1 1111 +//------------------------------------------ +TABDECL( OP_UND), //011 0001 0 0000 +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), //011 0001 1 1111 +//------------------------------------------ +TABDECL( OP_STRB_M_LSL_IMM_OFF_POSTIND), //011 0010 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STRB_M_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), + +TABDECL( OP_LDRB_M_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), //011 0010 1 1111 +//------------------------------------------ +TABDECL( OP_UND), //011 0011 0 0000 +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), + +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), //011 0011 1 1111 +//------------------------------------------ +TABDECL( OP_STR_P_LSL_IMM_OFF_POSTIND), //011 0100 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STR_P_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), + +TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), //011 0100 1 1111 +//------------------------------------------ +TABDECL( OP_UND), //011 0101 0 0000 +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), + +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), //011 0101 1 1111 +//------------------------------------------ +TABDECL( OP_STRB_P_LSL_IMM_OFF_POSTIND), //011 0110 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STRB_P_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), + +TABDECL( OP_LDRB_P_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_LSL_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_LSR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ASR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ROR_IMM_OFF_POSTIND), +TABDECL( OP_UND), +//------------------------------------------ +TABDECL( OP_UND), //011 0111 0 0000 //0x6E0 +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), + +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +TABDECL( OP_UND), +//------------------------------------------ +TABDECL( OP_STR_M_LSL_IMM_OFF), //011 1000 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STR_M_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ROR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_M_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_M_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ROR_IMM_OFF), +TABDECL( OP_UND), + +TABDECL( OP_LDR_M_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ROR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ROR_IMM_OFF), +TABDECL( OP_UND), +//------------------------------------------ +TABDECL( OP_STR_M_LSL_IMM_OFF_PREIND), //011 1001 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STR_M_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_M_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), + +TABDECL( OP_LDR_M_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_M_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), +//------------------------------------------ +TABDECL( OP_STRB_M_LSL_IMM_OFF), //011 1010 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STRB_M_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ROR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ROR_IMM_OFF), +TABDECL( OP_UND), + +TABDECL( OP_LDRB_M_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ROR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ROR_IMM_OFF), +TABDECL( OP_UND), +//------------------------------------------ +TABDECL( OP_STRB_M_LSL_IMM_OFF_PREIND), //011 1011 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STRB_M_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_M_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), + +TABDECL( OP_LDRB_M_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_M_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), +//------------------------------------------ +TABDECL( OP_STR_P_LSL_IMM_OFF), //011 1100 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STR_P_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ROR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_P_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_P_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ROR_IMM_OFF), +TABDECL( OP_UND), + +TABDECL( OP_LDR_P_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ROR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ROR_IMM_OFF), +TABDECL( OP_UND), +//------------------------------------------ +TABDECL( OP_STR_P_LSL_IMM_OFF_PREIND), //011 1101 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STR_P_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STR_P_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), + +TABDECL( OP_LDR_P_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDR_P_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), +//------------------------------------------ +TABDECL( OP_STRB_P_LSL_IMM_OFF), //011 1110 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STRB_P_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ROR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ROR_IMM_OFF), +TABDECL( OP_UND), + +TABDECL( OP_LDRB_P_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ROR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_LSL_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_LSR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ASR_IMM_OFF), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ROR_IMM_OFF), +TABDECL( OP_UND), +//------------------------------------------ +TABDECL( OP_STRB_P_LSL_IMM_OFF_PREIND), //011 1111 0 0000 +TABDECL( OP_UND), +TABDECL( OP_STRB_P_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_STRB_P_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), + +TABDECL( OP_LDRB_P_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_LSL_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_LSR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ASR_IMM_OFF_PREIND), +TABDECL( OP_UND), +TABDECL( OP_LDRB_P_ROR_IMM_OFF_PREIND), +TABDECL( OP_UND), //011 1111 1 1111 +//------------------------------------------ +TABDECL( OP_STMDA), //100 0000 0 0000 +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), +TABDECL( OP_STMDA), + +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +TABDECL( OP_LDMDA), +//------------------------------------------ +TABDECL( OP_STMDA_W), //100 0001 0 0000 +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), +TABDECL( OP_STMDA_W), + +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +TABDECL( OP_LDMDA_W), +//------------------------------------------ +TABDECL( OP_STMDA2), //100 0010 0 0000 +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), +TABDECL( OP_STMDA2), + +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +TABDECL( OP_LDMDA2), +//------------------------------------------ +TABDECL( OP_STMDA2_W), //100 0011 0 0000 +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), +TABDECL( OP_STMDA2_W), + +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +TABDECL( OP_LDMDA2_W), +//------------------------------------------ +TABDECL( OP_STMIA), //100 0100 0 0000 +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), +TABDECL( OP_STMIA), + +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +TABDECL( OP_LDMIA), +//------------------------------------------ +TABDECL( OP_STMIA_W), //100 0101 0 0000 +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), +TABDECL( OP_STMIA_W), + +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +TABDECL( OP_LDMIA_W), +//------------------------------------------ +TABDECL( OP_STMIA2), //100 0110 0 0000 +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), +TABDECL( OP_STMIA2), + +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +TABDECL( OP_LDMIA2), +//------------------------------------------ +TABDECL( OP_STMIA2_W), //100 0111 0 0000 +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), +TABDECL( OP_STMIA2_W), + +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +TABDECL( OP_LDMIA2_W), +//------------------------------------------ +TABDECL( OP_STMDB), //100 1000 0 0000 +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), +TABDECL( OP_STMDB), + +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +TABDECL( OP_LDMDB), +//------------------------------------------ +TABDECL( OP_STMDB_W), //100 1001 0 0000 +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), +TABDECL( OP_STMDB_W), + +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +TABDECL( OP_LDMDB_W), +//------------------------------------------ +TABDECL( OP_STMDB2), //100 1010 0 0000 +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), +TABDECL( OP_STMDB2), + +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +TABDECL( OP_LDMDB2), +//------------------------------------------ +TABDECL( OP_STMDB2_W), //100 1011 0 0000 +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), +TABDECL( OP_STMDB2_W), + +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +TABDECL( OP_LDMDB2_W), +//------------------------------------------ +TABDECL( OP_STMIB), //100 1100 0 0000 +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), +TABDECL( OP_STMIB), + +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +TABDECL( OP_LDMIB), +//------------------------------------------ +TABDECL( OP_STMIB_W), //100 1101 0 0000 +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), +TABDECL( OP_STMIB_W), + +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +TABDECL( OP_LDMIB_W), +//------------------------------------------ +TABDECL( OP_STMIB2), //100 1110 0 0000 +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), +TABDECL( OP_STMIB2), + +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +TABDECL( OP_LDMIB2), +//------------------------------------------ +TABDECL( OP_STMIB2_W), //100 1111 0 0000 +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), +TABDECL( OP_STMIB2_W), + +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +TABDECL( OP_LDMIB2_W), +//------------------------------------------ +TABDECL( OP_B), //101 0000 0 0000 +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +//------------------------------------------ +TABDECL( OP_B), //101 0001 0 0000 +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +//------------------------------------------ +TABDECL( OP_B), //101 0010 0 0000 +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +//------------------------------------------ +TABDECL( OP_B), //101 0011 0 0000 +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +//------------------------------------------ +TABDECL( OP_B), //101 0100 0 0000 +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +//------------------------------------------ +TABDECL( OP_B), //101 0101 0 0000 +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +//------------------------------------------ +TABDECL( OP_B), //101 0110 0 0000 +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +//------------------------------------------ +TABDECL( OP_B), //101 0111 0 0000 +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +TABDECL( OP_B), +//------------------------------------------ +TABDECL( OP_BL), //101 1000 0 0000 +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +//------------------------------------------ +TABDECL( OP_BL), //101 1001 0 0000 +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +//------------------------------------------ +TABDECL( OP_BL), //101 1010 0 0000 +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +//------------------------------------------ +TABDECL( OP_BL), //101 1011 0 0000 +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +//------------------------------------------ +TABDECL( OP_BL), //101 1100 0 0000 +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +//------------------------------------------ +TABDECL( OP_BL), //101 1101 0 0000 +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +//------------------------------------------ +TABDECL( OP_BL), //101 1110 0 0000 +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +//------------------------------------------ +TABDECL( OP_BL), //101 1111 0 0000 +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +TABDECL( OP_BL), +//------------------------------------------ +TABDECL( OP_STC_OPTION), //110 0000 0 0000 +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), + +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +//------------------------------------------ +TABDECL( OP_STC_M_POSTIND), //110 0001 0 0000 +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), + +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +//------------------------------------------ +TABDECL( OP_STC_OPTION), //110 0010 0 0000 +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), + +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +//------------------------------------------ +TABDECL( OP_STC_M_POSTIND), //110 0011 0 0000 +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), +TABDECL( OP_STC_M_POSTIND), + +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +TABDECL( OP_LDC_M_POSTIND), +//------------------------------------------ +TABDECL( OP_STC_OPTION), //110 0100 0 0000 +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), + +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +//------------------------------------------ +TABDECL( OP_STC_P_POSTIND), //110 0101 0 0000 +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), + +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +//------------------------------------------ +TABDECL( OP_STC_OPTION), //110 0110 0 0000 +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), +TABDECL( OP_STC_OPTION), + +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +TABDECL( OP_LDC_OPTION), +//------------------------------------------ +TABDECL( OP_STC_P_POSTIND), //110 0111 0 0000 +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), +TABDECL( OP_STC_P_POSTIND), + +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +TABDECL( OP_LDC_P_POSTIND), +//------------------------------------------ +TABDECL( OP_STC_M_IMM_OFF), //110 1000 0 0000 +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), + +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +//------------------------------------------ +TABDECL( OP_STC_M_PREIND), //110 1001 0 0000 +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), + +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +//------------------------------------------ +TABDECL( OP_STC_M_IMM_OFF), //110 1010 0 0000 +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), +TABDECL( OP_STC_M_IMM_OFF), + +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +TABDECL( OP_LDC_M_IMM_OFF), +//------------------------------------------ +TABDECL( OP_STC_M_PREIND), //110 1011 0 0000 +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), +TABDECL( OP_STC_M_PREIND), + +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +TABDECL( OP_LDC_M_PREIND), +//------------------------------------------ +TABDECL( OP_STC_P_IMM_OFF), //110 1100 0 0000 +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), + +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +//------------------------------------------ +TABDECL( OP_STC_P_PREIND), //110 1101 0 0000 +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), + +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +//------------------------------------------ +TABDECL( OP_STC_P_IMM_OFF), //110 1110 0 0000 +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), +TABDECL( OP_STC_P_IMM_OFF), + +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +TABDECL( OP_LDC_P_IMM_OFF), +//------------------------------------------ +TABDECL( OP_STC_P_PREIND), //110 1111 0 0000 +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), +TABDECL( OP_STC_P_PREIND), + +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +TABDECL( OP_LDC_P_PREIND), +//------------------------------------------ +TABDECL( OP_CDP), //111 0000 0 0000 +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), + +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +//--------------------------------------------- +TABDECL( OP_CDP), //111 0001 0 0000 +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), + +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +//--------------------------------------------- +TABDECL( OP_CDP), //111 0010 0 0000 +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), + +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +//--------------------------------------------- +TABDECL( OP_CDP), //111 0011 0 0000 +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), + +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +//--------------------------------------------- +TABDECL( OP_CDP), //111 0100 0 0000 +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), + +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +//--------------------------------------------- +TABDECL( OP_CDP), //111 0101 0 0000 +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), + +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +//--------------------------------------------- +TABDECL( OP_CDP), //111 0110 0 0000 +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), + +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +//--------------------------------------------- +TABDECL( OP_CDP), //111 0111 0 0000 +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), +TABDECL( OP_CDP), +TABDECL( OP_MCR), + +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +TABDECL( OP_CDP), +TABDECL( OP_MRC), +//--------------------------------------------- +TABDECL( OP_SWI), //111 1000 0 0000 +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), +TABDECL( OP_SWI), + diff --git a/desmume/src/saves.cpp b/desmume/src/saves.cpp index 948df4432..80a43b364 100644 --- a/desmume/src/saves.cpp +++ b/desmume/src/saves.cpp @@ -497,11 +497,10 @@ static void cp15_saveone(armcp15_t *cp15, EMUFILE* os) static void cp15_savestate(EMUFILE* os) { //version - write32le(1,os); + write32le(0,os); cp15_saveone((armcp15_t *)NDS_ARM9.coproc[15],os); - //ARM7 not have coprocessor - //cp15_saveone((armcp15_t *)NDS_ARM7.coproc[15],os); + cp15_saveone((armcp15_t *)NDS_ARM7.coproc[15],os); } static bool cp15_loadone(armcp15_t *cp15, EMUFILE* is) @@ -554,19 +553,10 @@ static bool cp15_loadstate(EMUFILE* is, int size) //read version u32 version; if(read32le(&version,is) != 1) return false; - if(version > 1) return false; + if(version != 0) return false; if(!cp15_loadone((armcp15_t *)NDS_ARM9.coproc[15],is)) return false; - - if(version == 0) - { - //ARM7 not have coprocessor - u8 *tmp_buf = new u8 [sizeof(armcp15_t)]; - if (!tmp_buf) return false; - if(!cp15_loadone((armcp15_t *)tmp_buf,is)) return false; - delete [] tmp_buf; - tmp_buf = NULL; - } + if(!cp15_loadone((armcp15_t *)NDS_ARM7.coproc[15],is)) return false; return true; } diff --git a/desmume/src/thumb_instructions.cpp b/desmume/src/thumb_instructions.cpp index a244d64e4..2721d52dc 100644 --- a/desmume/src/thumb_instructions.cpp +++ b/desmume/src/thumb_instructions.cpp @@ -44,7 +44,6 @@ TEMPLATE static u32 FASTCALL OP_UND_THUMB(const u32 i) { - INFO("THUMB%c: Undefined instruction: 0x%08X PC=0x%08X. Stopped!!!\n", cpu->proc_ID?'7':'9', cpu->instruction, cpu->instruct_adr); emu_halt(); return 1; } @@ -75,7 +74,7 @@ TEMPLATE static u32 FASTCALL OP_LSL(const u32 i) TEMPLATE static u32 FASTCALL OP_LSL_REG(const u32 i) { - u32 v = cpu->R[REG_NUM(i, 3)] & 0xFF; + u32 v = cpu->R[REG_NUM(i, 3)]&0xFF; if(v == 0) { @@ -130,7 +129,7 @@ TEMPLATE static u32 FASTCALL OP_LSR(const u32 i) TEMPLATE static u32 FASTCALL OP_LSR_REG(const u32 i) { - u32 v = cpu->R[REG_NUM(i, 3)] & 0xFF; + u32 v = cpu->R[REG_NUM(i, 3)]&0xFF; if(v == 0) { @@ -175,7 +174,7 @@ TEMPLATE static u32 FASTCALL OP_ASR(const u32 i) { u32 v = (i>>6) & 0x1F; cpu->CPSR.bits.C = BIT_N(cpu->R[REG_NUM(i, 3)], v-1); - cpu->R[REG_NUM(i, 0)] = (u32)(((s32)cpu->R[REG_NUM(i, 3)]) >> v); + cpu->R[REG_NUM(i, 0)] = (((s32)cpu->R[REG_NUM(i, 3)]) >> v); cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; @@ -184,7 +183,7 @@ TEMPLATE static u32 FASTCALL OP_ASR(const u32 i) TEMPLATE static u32 FASTCALL OP_ASR_REG(const u32 i) { - u32 v = cpu->R[REG_NUM(i, 3)] & 0xFF; + u32 v = cpu->R[REG_NUM(i, 3)]&0xFF; if(v == 0) { @@ -213,63 +212,47 @@ TEMPLATE static u32 FASTCALL OP_ASR_REG(const u32 i) // ADD //----------------------------------------------------------------------------- -TEMPLATE static u32 FASTCALL OP_ADD_IMM3(const u32 i) +TEMPLATE static u32 FASTCALL OP_ADD_REG(const u32 i) { - u32 imm3 = (i >> 6) & 0x07; - u32 Rn = cpu->R[REG_NUM(i, 3)]; - - if (imm3 == 0) // mov 2 - { - cpu->R[REG_NUM(i, 0)] = Rn; - - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - cpu->CPSR.bits.C = 0; - cpu->CPSR.bits.V = 0; - return 1; - } - - cpu->R[REG_NUM(i, 0)] = Rn + imm3; + u32 a = cpu->R[REG_NUM(i, 3)]; + u32 b = cpu->R[REG_NUM(i, 6)]; + cpu->R[REG_NUM(i, 0)] = a + b; cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - cpu->CPSR.bits.C = CarryFrom(Rn, imm3); - cpu->CPSR.bits.V = OverflowFromADD(cpu->R[REG_NUM(i, 0)], Rn, imm3); + cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(a, b, cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.V = SIGNED_OVERFLOW(a, b, cpu->R[REG_NUM(i, 0)]); + + return 1; +} + +TEMPLATE static u32 FASTCALL OP_ADD_IMM3(const u32 i) +{ + u32 a = cpu->R[REG_NUM(i, 3)]; + + cpu->R[REG_NUM(i, 0)] = a + REG_NUM(i, 6); + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(a, REG_NUM(i, 6), cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.V = SIGNED_OVERFLOW(a, REG_NUM(i, 6), cpu->R[REG_NUM(i, 0)]); return 1; } TEMPLATE static u32 FASTCALL OP_ADD_IMM8(const u32 i) { - u32 imm8 = (i & 0xFF); - u32 Rd = cpu->R[REG_NUM(i, 8)]; - - cpu->R[REG_NUM(i, 8)] = Rd + imm8; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 8)]); - cpu->CPSR.bits.Z = (cpu->R[REG_NUM(i, 8)] == 0); - cpu->CPSR.bits.C = CarryFrom(Rd, imm8); - cpu->CPSR.bits.V = OverflowFromADD(cpu->R[REG_NUM(i, 8)], Rd, imm8); - - return 1; -} - -TEMPLATE static u32 FASTCALL OP_ADD_REG(const u32 i) -{ - u32 Rn = cpu->R[REG_NUM(i, 3)]; - u32 Rm = cpu->R[REG_NUM(i, 6)]; - - cpu->R[REG_NUM(i, 0)] = Rn + Rm; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - cpu->CPSR.bits.C = CarryFrom(Rn, Rm); - cpu->CPSR.bits.V = OverflowFromADD(cpu->R[REG_NUM(i, 0)], Rn, Rm); + u32 tmp = cpu->R[REG_NUM(i, 8)] + (i & 0xFF); + cpu->CPSR.bits.N = BIT31(tmp); + cpu->CPSR.bits.Z = tmp == 0; + cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); + cpu->CPSR.bits.V = SIGNED_OVERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); + cpu->R[REG_NUM(i, 8)] = tmp; return 1; } TEMPLATE static u32 FASTCALL OP_ADD_SPE(const u32 i) { - u32 Rd = REG_NUM(i, 0) | ((i>>4)&8); - + u32 Rd = (i&7) | ((i>>4)&8); cpu->R[Rd] += cpu->R[REG_POS(i, 3)]; if(Rd==15) @@ -281,6 +264,7 @@ TEMPLATE static u32 FASTCALL OP_ADD_SPE(const u32 i) return 1; } + TEMPLATE static u32 FASTCALL OP_ADD_2PC(const u32 i) { cpu->R[REG_NUM(i, 8)] = (cpu->R[15]&0xFFFFFFFC) + ((i&0xFF)<<2); @@ -299,44 +283,39 @@ TEMPLATE static u32 FASTCALL OP_ADD_2SP(const u32 i) // SUB //----------------------------------------------------------------------------- -TEMPLATE static u32 FASTCALL OP_SUB_IMM3(const u32 i) +TEMPLATE static u32 FASTCALL OP_SUB_REG(const u32 i) { - u32 imm3 = (i>>6) & 0x07; - u32 Rn = cpu->R[REG_NUM(i, 3)]; - - cpu->R[REG_NUM(i, 0)] = Rn - imm3; + u32 a = cpu->R[REG_NUM(i, 3)]; + u32 b = cpu->R[REG_NUM(i, 6)]; + cpu->R[REG_NUM(i, 0)] = a - b; cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - cpu->CPSR.bits.C = !BorrowFrom(Rn, imm3); - cpu->CPSR.bits.V = OverflowFromSUB(REG_NUM(i, 0), Rn, imm3); + cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(a, b, cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.V = SIGNED_UNDERFLOW(a, b, cpu->R[REG_NUM(i, 0)]); + + return 1; +} + +TEMPLATE static u32 FASTCALL OP_SUB_IMM3(const u32 i) +{ + u32 a = cpu->R[REG_NUM(i, 3)]; + cpu->R[REG_NUM(i, 0)] = a - REG_NUM(i, 6); + cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(a, REG_NUM(i, 6), cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.V = SIGNED_UNDERFLOW(a, REG_NUM(i, 6), cpu->R[REG_NUM(i, 0)]); return 1; } TEMPLATE static u32 FASTCALL OP_SUB_IMM8(const u32 i) { - u32 imm8 = (i & 0xFF); - u32 Rd = cpu->R[REG_NUM(i, 8)]; - - cpu->R[REG_NUM(i, 8)] = Rd - imm8; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 8)]); - cpu->CPSR.bits.Z = (cpu->R[REG_NUM(i, 8)] == 0); - cpu->CPSR.bits.C = !BorrowFrom(Rd, imm8); - cpu->CPSR.bits.V = OverflowFromSUB(cpu->R[REG_NUM(i, 8)], Rd, imm8); - - return 1; -} - -TEMPLATE static u32 FASTCALL OP_SUB_REG(const u32 i) -{ - u32 Rn = cpu->R[REG_NUM(i, 3)]; - u32 Rm = cpu->R[REG_NUM(i, 6)]; - - cpu->R[REG_NUM(i, 0)] = Rn - Rm; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = (cpu->R[REG_NUM(i, 0)] == 0); - cpu->CPSR.bits.C = !BorrowFrom(Rn, Rm); - cpu->CPSR.bits.V = OverflowFromSUB(cpu->R[REG_NUM(i, 0)], Rn, Rm); + u32 tmp = cpu->R[REG_NUM(i, 8)] - (i & 0xFF); + cpu->CPSR.bits.N = BIT31(tmp); + cpu->CPSR.bits.Z = tmp == 0; + cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); + cpu->CPSR.bits.V = SIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); + cpu->R[REG_NUM(i, 8)] = tmp; return 1; } @@ -347,7 +326,7 @@ TEMPLATE static u32 FASTCALL OP_SUB_REG(const u32 i) TEMPLATE static u32 FASTCALL OP_MOV_IMM8(const u32 i) { - cpu->R[REG_NUM(i, 8)] = (i & 0xFF); + cpu->R[REG_NUM(i, 8)] = i & 0xFF; cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 8)]); cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 8)] == 0; @@ -356,8 +335,7 @@ TEMPLATE static u32 FASTCALL OP_MOV_IMM8(const u32 i) TEMPLATE static u32 FASTCALL OP_MOV_SPE(const u32 i) { - u32 Rd = REG_NUM(i, 0) | ((i>>4)&8); - + u32 Rd = (i&7) | ((i>>4)&8); cpu->R[Rd] = cpu->R[REG_POS(i, 3)]; if(Rd==15) @@ -372,40 +350,40 @@ TEMPLATE static u32 FASTCALL OP_MOV_SPE(const u32 i) //----------------------------------------------------------------------------- // CMP //----------------------------------------------------------------------------- + +TEMPLATE static u32 FASTCALL OP_CMP(const u32 i) +{ + u32 tmp = cpu->R[REG_NUM(i, 0)] -cpu->R[REG_NUM(i, 3)]; + + cpu->CPSR.bits.N = BIT31(tmp); + cpu->CPSR.bits.Z = tmp == 0; + cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)], tmp); + cpu->CPSR.bits.V = SIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)], tmp); + + return 1; +} + TEMPLATE static u32 FASTCALL OP_CMP_IMM8(const u32 i) { u32 tmp = cpu->R[REG_NUM(i, 8)] - (i & 0xFF); cpu->CPSR.bits.N = BIT31(tmp); cpu->CPSR.bits.Z = tmp == 0; - cpu->CPSR.bits.C = !BorrowFrom(cpu->R[REG_NUM(i, 8)], (i & 0xFF)); - cpu->CPSR.bits.V = OverflowFromSUB(tmp, cpu->R[REG_NUM(i, 8)], (i & 0xFF)); + cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); + cpu->CPSR.bits.V = SIGNED_UNDERFLOW(cpu->R[REG_NUM(i, 8)], (i & 0xFF), tmp); return 1; } -TEMPLATE static u32 FASTCALL OP_CMP(const u32 i) -{ - u32 tmp = cpu->R[REG_NUM(i, 0)] - cpu->R[REG_NUM(i, 3)]; - - cpu->CPSR.bits.N = BIT31(tmp); - cpu->CPSR.bits.Z = tmp == 0; - cpu->CPSR.bits.C = !BorrowFrom(cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)]); - cpu->CPSR.bits.V = OverflowFromSUB(tmp, cpu->R[REG_NUM(i, 0)], cpu->R[REG_NUM(i, 3)]); - - return 1; -} - TEMPLATE static u32 FASTCALL OP_CMP_SPE(const u32 i) { u32 Rn = (i&7) | ((i>>4)&8); - - u32 tmp = cpu->R[Rn] - cpu->R[REG_POS(i, 3)]; + u32 tmp = cpu->R[Rn] -cpu->R[REG_POS(i, 3)]; cpu->CPSR.bits.N = BIT31(tmp); cpu->CPSR.bits.Z = tmp == 0; - cpu->CPSR.bits.C = !BorrowFrom(cpu->R[Rn], cpu->R[REG_NUM(i, 3)]); - cpu->CPSR.bits.V = OverflowFromSUB(tmp, cpu->R[Rn], cpu->R[REG_NUM(i, 3)]); + cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(cpu->R[Rn], cpu->R[REG_POS(i, 3)], tmp); + cpu->CPSR.bits.V = SIGNED_UNDERFLOW(cpu->R[Rn], cpu->R[REG_POS(i, 3)], tmp); return 1; } @@ -419,6 +397,7 @@ TEMPLATE static u32 FASTCALL OP_AND(const u32 i) cpu->R[REG_NUM(i, 0)] &= cpu->R[REG_NUM(i, 3)]; cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + return 1; } @@ -441,15 +420,29 @@ TEMPLATE static u32 FASTCALL OP_EOR(const u32 i) TEMPLATE static u32 FASTCALL OP_ADC_REG(const u32 i) { - u32 Rd = cpu->R[REG_NUM(i, 0)]; - u32 Rm = cpu->R[REG_NUM(i, 3)]; + u32 a = cpu->R[REG_NUM(i, 0)]; + u32 b = cpu->R[REG_NUM(i, 3)]; + u32 tmp = b + cpu->CPSR.bits.C; + u32 res = a + tmp; - cpu->R[REG_NUM(i, 0)] = Rd + Rm + cpu->CPSR.bits.C; + cpu->R[REG_NUM(i, 0)] = res; + + cpu->CPSR.bits.N = BIT31(res); + cpu->CPSR.bits.Z = res == 0; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = (cpu->R[REG_NUM(i, 0)] == 0); - cpu->CPSR.bits.V = OverflowFromADD(cpu->R[REG_NUM(i, 0)], Rd, Rm + cpu->CPSR.bits.C); - cpu->CPSR.bits.C = CarryFrom(Rd, Rm + cpu->CPSR.bits.C); +#if 0 + //the below UNSIGNED_OVERFLOW calculation is the clever way of doing it + //but just to keep from making a mistake, lets assert that it matches the precise definition of unsigned overflow + static long passcount = 0; + assert(++passcount); + assert( + ((((u64)a+(u64)b+cpu->CPSR.bits.C)>>32)&1) + == (UNSIGNED_OVERFLOW(b, (u32) cpu->CPSR.bits.C, tmp) | UNSIGNED_OVERFLOW(tmp, a, res)) + ); +#endif + + cpu->CPSR.bits.C = UNSIGNED_OVERFLOW(b, (u32) cpu->CPSR.bits.C, tmp) | UNSIGNED_OVERFLOW(tmp, a, res); + cpu->CPSR.bits.V = SIGNED_OVERFLOW(b, (u32) cpu->CPSR.bits.C, tmp) | SIGNED_OVERFLOW(tmp, a, res); return 1; } @@ -460,15 +453,31 @@ TEMPLATE static u32 FASTCALL OP_ADC_REG(const u32 i) TEMPLATE static u32 FASTCALL OP_SBC_REG(const u32 i) { - u32 Rd = cpu->R[REG_NUM(i, 0)]; - u32 Rm = cpu->R[REG_NUM(i, 3)]; + u32 a = cpu->R[REG_NUM(i, 0)]; + u32 b = cpu->R[REG_NUM(i, 3)]; + u32 tmp = a - (!cpu->CPSR.bits.C); + u32 res = tmp - b; + cpu->R[REG_NUM(i, 0)] = res; + + cpu->CPSR.bits.N = BIT31(res); + cpu->CPSR.bits.Z = res == 0; - cpu->R[REG_NUM(i, 0)] = Rd - Rm - !cpu->CPSR.bits.C; - - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = (cpu->R[REG_NUM(i, 0)] == 0); - cpu->CPSR.bits.V = OverflowFromSUB(cpu->R[REG_NUM(i, 0)], Rd, Rm - !cpu->CPSR.bits.C); - cpu->CPSR.bits.C = !BorrowFrom(Rd, Rm - !cpu->CPSR.bits.C); +#if 0 + //the below UNSIGNED_UNDERFLOW calculation is the clever way of doing it + //but just to keep from making a mistake, lets assert that it matches the precise definition of unsigned overflow + static long passcount = 0; + assert(++passcount); + assert( + ((((u64)a-(u64)b-(!cpu->CPSR.bits.C))>>32)&1) + == UNSIGNED_UNDERFLOW(a, b, res) + ); +#endif + + //zero 31-dec-2008 - apply normatt's fixed logic from the arm SBC instruction + //although it seemed a bit odd to me and to whomever wrote this for SBC not to work similar to ADC.. + //but thats how it is. + cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW(a, b, res); + cpu->CPSR.bits.V = SIGNED_UNDERFLOW(a, b, res); return 1; } @@ -479,7 +488,7 @@ TEMPLATE static u32 FASTCALL OP_SBC_REG(const u32 i) TEMPLATE static u32 FASTCALL OP_ROR_REG(const u32 i) { - u32 v = cpu->R[REG_NUM(i, 3)] & 0xFF; + u32 v = cpu->R[REG_NUM(i, 3)]&0xFF; if(v == 0) { @@ -487,7 +496,6 @@ TEMPLATE static u32 FASTCALL OP_ROR_REG(const u32 i) cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; return 2; } - v &= 0x1F; if(v == 0) { @@ -512,7 +520,7 @@ TEMPLATE static u32 FASTCALL OP_TST(const u32 i) { u32 tmp = cpu->R[REG_NUM(i, 0)] & cpu->R[REG_NUM(i, 3)]; cpu->CPSR.bits.N = BIT31(tmp); - cpu->CPSR.bits.Z = (tmp == 0); + cpu->CPSR.bits.Z = tmp == 0; return 1; } @@ -523,14 +531,13 @@ TEMPLATE static u32 FASTCALL OP_TST(const u32 i) TEMPLATE static u32 FASTCALL OP_NEG(const u32 i) { - u32 Rm = cpu->R[REG_NUM(i, 3)]; - - cpu->R[REG_NUM(i, 0)] = (u32)((s32)0 - (s32)Rm); + u32 a = cpu->R[REG_NUM(i, 3)]; + cpu->R[REG_NUM(i, 0)] = -((signed int)a); cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = (cpu->R[REG_NUM(i, 0)] == 0); - cpu->CPSR.bits.C = !BorrowFrom(0, Rm); - cpu->CPSR.bits.V = OverflowFromSUB(cpu->R[REG_NUM(i, 0)], 0, Rm); + cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; + cpu->CPSR.bits.C = !UNSIGNED_UNDERFLOW((u32)0, a, cpu->R[REG_NUM(i, 0)]); + cpu->CPSR.bits.V = SIGNED_UNDERFLOW((u32)0, a, cpu->R[REG_NUM(i, 0)]); return 1; } @@ -560,9 +567,8 @@ TEMPLATE static u32 FASTCALL OP_CMN(const u32 i) TEMPLATE static u32 FASTCALL OP_ORR(const u32 i) { cpu->R[REG_NUM(i, 0)] |= cpu->R[REG_NUM(i, 3)]; - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = (cpu->R[REG_NUM(i, 0)] == 0); + cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; return 1; } @@ -574,9 +580,8 @@ TEMPLATE static u32 FASTCALL OP_ORR(const u32 i) TEMPLATE static u32 FASTCALL OP_BIC(const u32 i) { cpu->R[REG_NUM(i, 0)] &= (~cpu->R[REG_NUM(i, 3)]); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); - cpu->CPSR.bits.Z = (cpu->R[REG_NUM(i, 0)] == 0); + cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; return 1; } @@ -588,7 +593,6 @@ TEMPLATE static u32 FASTCALL OP_BIC(const u32 i) TEMPLATE static u32 FASTCALL OP_MVN(const u32 i) { cpu->R[REG_NUM(i, 0)] = (~cpu->R[REG_NUM(i, 3)]); - cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; @@ -614,19 +618,9 @@ TEMPLATE static u32 FASTCALL OP_MVN(const u32 i) TEMPLATE static u32 FASTCALL OP_MUL_REG(const u32 i) { u32 v = cpu->R[REG_NUM(i, 3)]; - - // FIXME: - //------ Rd = (Rm * Rd)[31:0] - //------ u64 res = ((u64)cpu->R[REG_NUM(i, 0)] * (u64)v)); - //------ cpu->R[REG_NUM(i, 0)] = (u32)(res & 0xFFFFFFFF); - //------ - cpu->R[REG_NUM(i, 0)] *= v; cpu->CPSR.bits.N = BIT31(cpu->R[REG_NUM(i, 0)]); cpu->CPSR.bits.Z = cpu->R[REG_NUM(i, 0)] == 0; - //The MUL instruction is defined to leave the C flag unchanged in ARMv5 and above. - //In earlier versions of the architecture, the value of the C flag was UNPREDICTABLE - //after a MUL instruction. if (PROCNUM == 1) // ARM4T 1S + mI, m = 3 return 4; @@ -649,7 +643,7 @@ TEMPLATE static u32 FASTCALL OP_STRB_IMM_OFF(const u32 i) TEMPLATE static u32 FASTCALL OP_LDRB_IMM_OFF(const u32 i) { u32 adr = cpu->R[REG_NUM(i, 3)] + ((i>>6)&0x1F); - cpu->R[REG_NUM(i, 0)] = (u32)READ8(cpu->mem_if->data, adr); + cpu->R[REG_NUM(i, 0)] = READ8(cpu->mem_if->data, adr); return MMU_aluMemAccessCycles(3, adr); } @@ -658,7 +652,7 @@ TEMPLATE static u32 FASTCALL OP_LDRB_IMM_OFF(const u32 i) TEMPLATE static u32 FASTCALL OP_STRB_REG_OFF(const u32 i) { u32 adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; - WRITE8(cpu->mem_if->data, adr, (u8)cpu->R[REG_NUM(i, 0)]); + WRITE8(cpu->mem_if->data, adr, ((u8)cpu->R[REG_NUM(i, 0)])); return MMU_aluMemAccessCycles(2, adr); } @@ -678,7 +672,7 @@ TEMPLATE static u32 FASTCALL OP_LDRB_REG_OFF(const u32 i) TEMPLATE static u32 FASTCALL OP_LDRSB_REG_OFF(const u32 i) { u32 adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; - cpu->R[REG_NUM(i, 0)] = (u32)((s8)READ8(cpu->mem_if->data, adr)); + cpu->R[REG_NUM(i, 0)] = (s32)((s8)READ8(cpu->mem_if->data, adr)); return MMU_aluMemAccessCycles(3, adr); } @@ -698,7 +692,7 @@ TEMPLATE static u32 FASTCALL OP_STRH_IMM_OFF(const u32 i) TEMPLATE static u32 FASTCALL OP_LDRH_IMM_OFF(const u32 i) { u32 adr = cpu->R[REG_NUM(i, 3)] + ((i>>5)&0x3E); - cpu->R[REG_NUM(i, 0)] = (u32)READ16(cpu->mem_if->data, adr); + cpu->R[REG_NUM(i, 0)] = READ16(cpu->mem_if->data, adr); return MMU_aluMemAccessCycles(3, adr); } @@ -727,7 +721,7 @@ TEMPLATE static u32 FASTCALL OP_LDRH_REG_OFF(const u32 i) TEMPLATE static u32 FASTCALL OP_LDRSH_REG_OFF(const u32 i) { u32 adr = cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]; - cpu->R[REG_NUM(i, 0)] = (u32)((s16)READ16(cpu->mem_if->data, adr)); + cpu->R[REG_NUM(i, 0)] = (s32)((s16)READ16(cpu->mem_if->data, adr)); return MMU_aluMemAccessCycles(3, adr); } @@ -748,10 +742,10 @@ TEMPLATE static u32 FASTCALL OP_LDR_IMM_OFF(const u32 i) { u32 adr = cpu->R[REG_NUM(i, 3)] + ((i>>4)&0x7C); u32 tempValue = READ32(cpu->mem_if->data, adr); - adr = (adr&3)*8; - tempValue = (tempValue>>adr) | (tempValue<<(32-adr)); - cpu->R[REG_NUM(i, 0)] = tempValue; - + adr = (adr&3)*8; + tempValue = (tempValue>>adr) | (tempValue<<(32-adr)); + cpu->R[REG_NUM(i, 0)] = tempValue; + return MMU_aluMemAccessCycles(3, adr); } @@ -767,14 +761,16 @@ TEMPLATE static u32 FASTCALL OP_STR_REG_OFF(const u32 i) TEMPLATE static u32 FASTCALL OP_LDR_REG_OFF(const u32 i) { u32 adr = (cpu->R[REG_NUM(i, 3)] + cpu->R[REG_NUM(i, 6)]); - u32 tempValue = READ32(cpu->mem_if->data, adr); - adr = (adr&3)*8; - tempValue = (tempValue>>adr) | (tempValue<<(32-adr)); - cpu->R[REG_NUM(i, 0)] = tempValue; + u32 tempValue = READ32(cpu->mem_if->data, adr); + + adr = (adr&3)*8; + tempValue = (tempValue>>adr) | (tempValue<<(32-adr)); + cpu->R[REG_NUM(i, 0)] = tempValue; return MMU_aluMemAccessCycles(3, adr); } + TEMPLATE static u32 FASTCALL OP_STR_SPREL(const u32 i) { u32 adr = cpu->R[13] + ((i&0xFF)<<2); @@ -786,16 +782,16 @@ TEMPLATE static u32 FASTCALL OP_STR_SPREL(const u32 i) TEMPLATE static u32 FASTCALL OP_LDR_SPREL(const u32 i) { u32 adr = cpu->R[13] + ((i&0xFF)<<2); - cpu->R[REG_NUM(i, 8)] = READ32(cpu->mem_if->data, adr); + cpu->R[REG_NUM(i, 8)] = READ32(cpu->mem_if->data, adr); return MMU_aluMemAccessCycles(3, adr); } TEMPLATE static u32 FASTCALL OP_LDR_PCREL(const u32 i) { - u32 adr = (cpu->R[15]&0xFFFFFFFC) + ((i&0xFF)<<2); + u32 adr = (cpu->R[15]&0xFFFFFFFC) + ((cpu->instruction&0xFF)<<2); - cpu->R[REG_NUM(i, 8)] = READ32(cpu->mem_if->data, adr); + cpu->R[REG_NUM(cpu->instruction, 8)] = READ32(cpu->mem_if->data, adr); return MMU_aluMemAccessCycles(3, adr); } @@ -806,14 +802,14 @@ TEMPLATE static u32 FASTCALL OP_LDR_PCREL(const u32 i) TEMPLATE static u32 FASTCALL OP_ADJUST_P_SP(const u32 i) { - cpu->R[13] += ((i&0x7F)<<2); + cpu->R[13] += ((cpu->instruction&0x7F)<<2); return 1; } TEMPLATE static u32 FASTCALL OP_ADJUST_M_SP(const u32 i) { - cpu->R[13] -= ((i&0x7F)<<2); + cpu->R[13] -= ((cpu->instruction&0x7F)<<2); return 1; } @@ -827,7 +823,7 @@ TEMPLATE static u32 FASTCALL OP_PUSH(const u32 i) u32 adr = cpu->R[13] - 4; u32 c = 0, j; - for(j = 0; j<8; j++) + for(j = 0; j<8; ++j) if(BIT_N(i, 7-j)) { WRITE32(cpu->mem_if->data, adr, cpu->R[7-j]); @@ -848,7 +844,7 @@ TEMPLATE static u32 FASTCALL OP_PUSH_LR(const u32 i) c += MMU_memAccessCycles(adr); adr -= 4; - for(j = 0; j<8; j++) + for(j = 0; j<8; ++j) if(BIT_N(i, 7-j)) { WRITE32(cpu->mem_if->data, adr, cpu->R[7-j]); @@ -865,7 +861,7 @@ TEMPLATE static u32 FASTCALL OP_POP(const u32 i) u32 adr = cpu->R[13]; u32 c = 0, j; - for(j = 0; j<8; j++) + for(j = 0; j<8; ++j) if(BIT_N(i, j)) { cpu->R[j] = READ32(cpu->mem_if->data, adr); @@ -881,9 +877,9 @@ TEMPLATE static u32 FASTCALL OP_POP_PC(const u32 i) { u32 adr = cpu->R[13]; u32 c = 0, j; - u32 v = 0; + u32 v; - for(j = 0; j<8; j++) + for(j = 0; j<8; ++j) if(BIT_N(i, j)) { cpu->R[j] = READ32(cpu->mem_if->data, adr); @@ -913,14 +909,10 @@ TEMPLATE static u32 FASTCALL OP_STMIA_THUMB(const u32 i) u32 c = 0, j; u32 erList = 1; //Empty Register List - // ------ ARM_REF: - // ------ If is specified in : - // ------ * If is the lowest-numbered register specified in , the original value of is stored. - // ------ * Otherwise, the stored value of is UNPREDICTABLE. if (BIT_N(i, REG_NUM(i, 8))) printf("STMIA with Rb in Rlist\n"); - for(j = 0; j<8; j++) + for(j = 0; j<8; ++j) { if(BIT_N(i, j)) { @@ -948,7 +940,7 @@ TEMPLATE static u32 FASTCALL OP_LDMIA_THUMB(const u32 i) //if (BIT_N(i, regIndex)) // printf("LDMIA with Rb in Rlist at %08X\n",cpu->instruct_adr); - for(j = 0; j<8; j++) + for(j = 0; j<8; ++j) { if(BIT_N(i, j)) { @@ -962,10 +954,8 @@ TEMPLATE static u32 FASTCALL OP_LDMIA_THUMB(const u32 i) if (erList) printf("LDMIA with Empty Rlist\n"); - // ARM_REF: THUMB: Causes base register write-back, and is not optional - // ARM_REF: If the base register is specified in , the final value of is the loaded value - // (not the written-back value). - if (!BIT_N(i, regIndex)) + // Only over-write if not on the read list + if(!BIT_N(i, regIndex)) cpu->R[regIndex] = adr; return MMU_aluMemCycles(3, c); @@ -977,8 +967,6 @@ TEMPLATE static u32 FASTCALL OP_LDMIA_THUMB(const u32 i) TEMPLATE static u32 FASTCALL OP_BKPT_THUMB(const u32 i) { - // TODO - printf("THUMB%c: Unimplemented opcode BKPT\n", PROCNUM?'7':'9'); return 1; } @@ -988,7 +976,7 @@ TEMPLATE static u32 FASTCALL OP_BKPT_THUMB(const u32 i) TEMPLATE static u32 FASTCALL OP_SWI_THUMB(const u32 i) { - u32 swinum = i & 0xFF; + u32 swinum = cpu->instruction & 0xFF; //ideas-style debug prints (execute this SWI with the null terminated string address in R0) if(swinum==0xFC) { @@ -1038,7 +1026,7 @@ TEMPLATE static u32 FASTCALL OP_B_COND(const u32 i) if(!TEST_COND((i>>8)&0xF, 0, cpu->CPSR)) return 1; - cpu->R[15] += (u32)((s8)(i&0xFF))<<1; + cpu->R[15] += ((s32)((s8)(i&0xFF)))<<1; cpu->next_instruction = cpu->R[15]; return 3; } @@ -1076,7 +1064,7 @@ TEMPLATE static u32 FASTCALL OP_BL_10(const u32 i) return 1; } -TEMPLATE static u32 FASTCALL OP_BL_11(const u32 i) +TEMPLATE static u32 FASTCALL OP_BL_THUMB(const u32 i) { cpu->R[15] = (cpu->R[14] + ((i&0x7FF)<<1)); cpu->R[14] = cpu->next_instruction | 1; @@ -1088,9 +1076,7 @@ TEMPLATE static u32 FASTCALL OP_BX_THUMB(const u32 i) { // When using PC as operand with BX opcode, switch to ARM state and jump to (instruct_adr+4) // Reference: http://nocash.emubase.de/gbatek.htm#thumb5hiregisteroperationsbranchexchange - -#if 0 - if (REG_POS(i, 3) == 15) + if (REG_POS(cpu->instruction, 3) == 15) { cpu->CPSR.bits.T = 0; cpu->R[15] &= 0xFFFFFFFC; @@ -1098,40 +1084,23 @@ TEMPLATE static u32 FASTCALL OP_BX_THUMB(const u32 i) } else { - u32 Rm = cpu->R[REG_POS(i, 3)]; + u32 Rm = cpu->R[REG_POS(cpu->instruction, 3)]; cpu->CPSR.bits.T = BIT0(Rm); cpu->R[15] = (Rm & 0xFFFFFFFE); cpu->next_instruction = cpu->R[15]; } -#else - u32 Rm = cpu->R[REG_POS(i, 3)]; - //----- ARM_REF: - //----- Register 15 can be specified for . If this is done, R15 is read as normal for Thumb code, - //----- that is, it is the address of the BX instruction itself plus 4. If the BX instruction is at a - //----- word-aligned address, this results in a branch to the next word, executing in ARM state. - //----- However, if the BX instruction is not at a word-aligned address, this means that the results of - //----- the instruction are UNPREDICTABLE (because the value read for R15 has bits[1:0]==0b10). - if (Rm == 15) - { - printf("THUMB%c: BX using PC as operand\n", PROCNUM?'7':'9'); - //emu_halt(); - } - cpu->CPSR.bits.T = BIT0(Rm); - cpu->R[15] = (Rm & (0xFFFFFFFC|(1<CPSR.bits.T))); - cpu->next_instruction = cpu->R[15]; -#endif + return 3; } TEMPLATE static u32 FASTCALL OP_BLX_THUMB(const u32 i) { - u32 Rm = cpu->R[REG_POS(i, 3)]; + u32 Rm = cpu->R[REG_POS(cpu->instruction, 3)]; cpu->CPSR.bits.T = BIT0(Rm); cpu->R[14] = cpu->next_instruction | 1; - //cpu->R[15] = (Rm & (0xFFFFFFFC|(1<CPSR.bits.T))); - cpu->R[15] = (Rm & (0xFFFFFFFC|(1<CPSR.bits.T))); + cpu->R[15] = (Rm & 0xFFFFFFFE); cpu->next_instruction = cpu->R[15]; return 4; diff --git a/desmume/src/thumb_tabdef.inc b/desmume/src/thumb_tabdef.inc index d491ee423..bf1e20d19 100644 --- a/desmume/src/thumb_tabdef.inc +++ b/desmume/src/thumb_tabdef.inc @@ -1072,36 +1072,36 @@ TABDECL( OP_BL_10), //11 1101 1101 TABDECL( OP_BL_10), //11 1101 1110 TABDECL( OP_BL_10), //11 1101 1111 -TABDECL( OP_BL_11), //11 1110 0000 -TABDECL( OP_BL_11), //11 1110 0001 -TABDECL( OP_BL_11), //11 1110 0010 -TABDECL( OP_BL_11), //11 1110 0011 -TABDECL( OP_BL_11), //11 1110 0100 -TABDECL( OP_BL_11), //11 1110 0101 -TABDECL( OP_BL_11), //11 1110 0110 -TABDECL( OP_BL_11), //11 1110 0111 -TABDECL( OP_BL_11), //11 1110 1000 -TABDECL( OP_BL_11), //11 1110 1001 -TABDECL( OP_BL_11), //11 1110 1010 -TABDECL( OP_BL_11), //11 1110 1011 -TABDECL( OP_BL_11), //11 1110 1100 -TABDECL( OP_BL_11), //11 1110 1101 -TABDECL( OP_BL_11), //11 1110 1110 -TABDECL( OP_BL_11), //11 1110 1111 +TABDECL( OP_BL_THUMB), //11 1110 0000 +TABDECL( OP_BL_THUMB), //11 1110 0001 +TABDECL( OP_BL_THUMB), //11 1110 0010 +TABDECL( OP_BL_THUMB), //11 1110 0011 +TABDECL( OP_BL_THUMB), //11 1110 0100 +TABDECL( OP_BL_THUMB), //11 1110 0101 +TABDECL( OP_BL_THUMB), //11 1110 0110 +TABDECL( OP_BL_THUMB), //11 1110 0111 +TABDECL( OP_BL_THUMB), //11 1110 1000 +TABDECL( OP_BL_THUMB), //11 1110 1001 +TABDECL( OP_BL_THUMB), //11 1110 1010 +TABDECL( OP_BL_THUMB), //11 1110 1011 +TABDECL( OP_BL_THUMB), //11 1110 1100 +TABDECL( OP_BL_THUMB), //11 1110 1101 +TABDECL( OP_BL_THUMB), //11 1110 1110 +TABDECL( OP_BL_THUMB), //11 1110 1111 -TABDECL( OP_BL_11), //11 1111 0000 -TABDECL( OP_BL_11), //11 1111 0001 -TABDECL( OP_BL_11), //11 1111 0010 -TABDECL( OP_BL_11), //11 1111 0011 -TABDECL( OP_BL_11), //11 1111 0100 -TABDECL( OP_BL_11), //11 1111 0101 -TABDECL( OP_BL_11), //11 1111 0110 -TABDECL( OP_BL_11), //11 1111 0111 -TABDECL( OP_BL_11), //11 1111 1000 -TABDECL( OP_BL_11), //11 1111 1001 -TABDECL( OP_BL_11), //11 1111 1010 -TABDECL( OP_BL_11), //11 1111 1011 -TABDECL( OP_BL_11), //11 1111 1100 -TABDECL( OP_BL_11), //11 1111 1101 -TABDECL( OP_BL_11), //11 1111 1110 -TABDECL( OP_BL_11), //11 1111 1111 +TABDECL( OP_BL_THUMB), //11 1111 0000 +TABDECL( OP_BL_THUMB), //11 1111 0001 +TABDECL( OP_BL_THUMB), //11 1111 0010 +TABDECL( OP_BL_THUMB), //11 1111 0011 +TABDECL( OP_BL_THUMB), //11 1111 0100 +TABDECL( OP_BL_THUMB), //11 1111 0101 +TABDECL( OP_BL_THUMB), //11 1111 0110 +TABDECL( OP_BL_THUMB), //11 1111 0111 +TABDECL( OP_BL_THUMB), //11 1111 1000 +TABDECL( OP_BL_THUMB), //11 1111 1001 +TABDECL( OP_BL_THUMB), //11 1111 1010 +TABDECL( OP_BL_THUMB), //11 1111 1011 +TABDECL( OP_BL_THUMB), //11 1111 1100 +TABDECL( OP_BL_THUMB), //11 1111 1101 +TABDECL( OP_BL_THUMB), //11 1111 1110 +TABDECL( OP_BL_THUMB), //11 1111 1111 diff --git a/desmume/src/utils/decrypt/header.cpp b/desmume/src/utils/decrypt/header.cpp index 1dccd7fa6..c64dd7730 100644 --- a/desmume/src/utils/decrypt/header.cpp +++ b/desmume/src/utils/decrypt/header.cpp @@ -71,7 +71,7 @@ int DetectRomType(const Header& header, char* romdata) unsigned int * data = (unsigned int*)(romdata + 0x4000); //this is attempting to check for an utterly invalid nds header - if(header.unitcode < 0 && header.unitcode > 3) return ROMTYPE_INVALID; + if(header.unitcode != 0 && header.unitcode != 2) return ROMTYPE_INVALID; if (header.arm9_rom_offset < 0x4000) return ROMTYPE_HOMEBREW; if (data[0] == 0x00000000 && data[1] == 0x00000000) return ROMTYPE_MULTIBOOT; diff --git a/desmume/src/windows/DeSmuME_2005.vcproj b/desmume/src/windows/DeSmuME_2005.vcproj index 03b1c7cf1..df910d0df 100644 --- a/desmume/src/windows/DeSmuME_2005.vcproj +++ b/desmume/src/windows/DeSmuME_2005.vcproj @@ -116,206 +116,6 @@ Name="VCPostBuildEventTool" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - @@ -1010,6 +990,16 @@ Outputs=".libs\7z.tag" /> + + + @@ -1020,6 +1010,16 @@ Outputs=".libs\7z.tag" /> + + + @@ -1044,26 +1044,6 @@ Outputs=".libs\directx.tag" /> - - - - - - @@ -1074,6 +1054,16 @@ Outputs=".libs\directx.tag" /> + + + @@ -1084,6 +1074,16 @@ Outputs=".libs\directx.tag" /> + + + @@ -1108,26 +1108,6 @@ Outputs=".libs\glib-vc8.tag" /> - - - - - - @@ -1138,6 +1118,16 @@ Outputs=".libs\glib-vc8.tag" /> + + + @@ -1148,6 +1138,16 @@ Outputs=".libs\glib-vc8.tag" /> + + + @@ -1172,26 +1172,6 @@ Outputs=".libs\lua.tag" /> - - - - - - @@ -1202,6 +1182,16 @@ Outputs=".libs\lua.tag" /> + + + @@ -1213,7 +1203,7 @@ /> - - - - - - - - - - - - - - - - - @@ -1359,24 +1295,6 @@ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc" /> - - - - - - @@ -1386,6 +1304,15 @@ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc" /> + + + @@ -1395,6 +1322,15 @@ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc" /> + + + @@ -1571,26 +1507,6 @@ - - - - - - - - - @@ -1683,7 +1599,7 @@ /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - @@ -1614,6 +1594,16 @@ Outputs=".libs\7z.tag" /> + + + @@ -1624,6 +1614,16 @@ Outputs=".libs\7z.tag" /> + + + @@ -1648,26 +1648,6 @@ Outputs=".libs\directx.tag" /> - - - - - - @@ -1678,6 +1658,16 @@ Outputs=".libs\directx.tag" /> + + + @@ -1688,6 +1678,16 @@ Outputs=".libs\directx.tag" /> + + + @@ -1712,26 +1712,6 @@ Outputs=".libs\glib-vc8.tag" /> - - - - - - @@ -1742,6 +1722,16 @@ Outputs=".libs\glib-vc8.tag" /> + + + @@ -1752,6 +1742,16 @@ Outputs=".libs\glib-vc8.tag" /> + + + @@ -1776,26 +1776,6 @@ Outputs=".libs\lua.tag" /> - - - - - - @@ -1806,6 +1786,16 @@ Outputs=".libs\lua.tag" /> + + + @@ -1817,7 +1807,7 @@ /> - - - - - - - - - - - - - - - - - diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index 7f7ea7af8..e57716e8a 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -3556,23 +3556,6 @@ void SaveWindowPos(HWND hwnd) } -static void TwiddleLayer(UINT ctlid, int core, int layer) -{ - GPU* gpu = core==0?MainScreen.gpu:SubScreen.gpu; - if(CommonSettings.dispLayers[core][layer]) - { - GPU_remove(gpu,layer); - MainWindow->checkMenu(ctlid, false); - } - else - { - GPU_addBack(gpu,layer); - MainWindow->checkMenu(ctlid, true); - } - -} - - //======================================================================================== LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { @@ -4783,16 +4766,128 @@ DOKEYDOWN: WritePrivateProfileInt("Display","SubGpu",CommonSettings.showGpu.sub?1:0,IniName); return 0; - case IDM_MBG0: TwiddleLayer(IDM_MBG0,0,0); return 0; - case IDM_MBG1: TwiddleLayer(IDM_MBG1,0,1); return 0; - case IDM_MBG2: TwiddleLayer(IDM_MBG2,0,2); return 0; - case IDM_MBG3: TwiddleLayer(IDM_MBG3,0,3); return 0; - case IDM_MOBJ: TwiddleLayer(IDM_MOBJ,0,4); return 0; - case IDM_SBG0: TwiddleLayer(IDM_SBG0,0,0); return 0; - case IDM_SBG1: TwiddleLayer(IDM_SBG1,0,1); return 0; - case IDM_SBG2: TwiddleLayer(IDM_SBG2,0,2); return 0; - case IDM_SBG3: TwiddleLayer(IDM_SBG3,0,3); return 0; - case IDM_SOBJ: TwiddleLayer(IDM_SOBJ,0,4); return 0; + case IDM_MOBJ: + if(MainScreen.gpu->dispOBJ) + { + GPU_remove(MainScreen.gpu, 4); + MainWindow->checkMenu(IDM_MOBJ, false); + } + else + { + GPU_addBack(MainScreen.gpu, 4); + MainWindow->checkMenu(IDM_MOBJ, true); + } + return 0; + + case IDM_MBG0 : + if(MainScreen.gpu->dispBG[0]) + { + GPU_remove(MainScreen.gpu, 0); + MainWindow->checkMenu(IDM_MBG0, false); + } + else + { + GPU_addBack(MainScreen.gpu, 0); + MainWindow->checkMenu(IDM_MBG0, true); + } + return 0; + case IDM_MBG1 : + if(MainScreen.gpu->dispBG[1]) + { + GPU_remove(MainScreen.gpu, 1); + MainWindow->checkMenu(IDM_MBG1, false); + } + else + { + GPU_addBack(MainScreen.gpu, 1); + MainWindow->checkMenu(IDM_MBG1, true); + } + return 0; + case IDM_MBG2 : + if(MainScreen.gpu->dispBG[2]) + { + GPU_remove(MainScreen.gpu, 2); + MainWindow->checkMenu(IDM_MBG2, false); + } + else + { + GPU_addBack(MainScreen.gpu, 2); + MainWindow->checkMenu(IDM_MBG2, true); + } + return 0; + case IDM_MBG3 : + if(MainScreen.gpu->dispBG[3]) + { + GPU_remove(MainScreen.gpu, 3); + MainWindow->checkMenu(IDM_MBG3, false); + } + else + { + GPU_addBack(MainScreen.gpu, 3); + MainWindow->checkMenu(IDM_MBG3, true); + } + return 0; + + case IDM_SOBJ: + if(SubScreen.gpu->dispOBJ) + { + GPU_remove(SubScreen.gpu, 4); + MainWindow->checkMenu(IDM_SOBJ, false); + } + else + { + GPU_addBack(SubScreen.gpu, 4); + MainWindow->checkMenu(IDM_SOBJ, true); + } + return 0; + case IDM_SBG0 : + if(SubScreen.gpu->dispBG[0]) + { + GPU_remove(SubScreen.gpu, 0); + MainWindow->checkMenu(IDM_SBG0, false); + } + else + { + GPU_addBack(SubScreen.gpu, 0); + MainWindow->checkMenu(IDM_SBG0, true); + } + return 0; + case IDM_SBG1 : + if(SubScreen.gpu->dispBG[1]) + { + GPU_remove(SubScreen.gpu, 1); + MainWindow->checkMenu(IDM_SBG1, false); + } + else + { + GPU_addBack(SubScreen.gpu, 1); + MainWindow->checkMenu(IDM_SBG1, true); + } + return 0; + case IDM_SBG2 : + if(SubScreen.gpu->dispBG[2]) + { + GPU_remove(SubScreen.gpu, 2); + MainWindow->checkMenu(IDM_SBG2, false); + } + else + { + GPU_addBack(SubScreen.gpu, 2); + MainWindow->checkMenu(IDM_SBG2, true); + } + return 0; + case IDM_SBG3 : + if(SubScreen.gpu->dispBG[3]) + { + GPU_remove(SubScreen.gpu, 3); + MainWindow->checkMenu(IDM_SBG3, false); + } + else + { + GPU_addBack(SubScreen.gpu, 3); + MainWindow->checkMenu(IDM_SBG3, true); + } + return 0; case IDM_PAUSE: TogglePause(); diff --git a/desmume/src/windows/memView.cpp b/desmume/src/windows/memView.cpp index df56e8475..37223c57d 100644 --- a/desmume/src/windows/memView.cpp +++ b/desmume/src/windows/memView.cpp @@ -279,7 +279,6 @@ INT_PTR CALLBACK MemView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPa } return 1; - case IDC_DUMPALL: case IDC_RAWDUMP: { char fileName[256] = ""; @@ -297,19 +296,16 @@ INT_PTR CALLBACK MemView_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPa if(GetSaveFileName(&ofn)) { + FILE *f; + u8 memory[0x100]; - if(LOWORD(wParam) == IDC_RAWDUMP) - { - EMUFILE_FILE f(fileName,"ab"); - u8 memory[0x100]; - MMU_DumpMemBlock(wnd->cpu, wnd->address, 0x100, memory); - f.fwrite(memory, 0x100); - } - else - { - EMUFILE_FILE f(fileName,"wb"); - DEBUG_dumpMemory(&f); - } + MMU_DumpMemBlock(wnd->cpu, wnd->address, 0x100, memory); + + f = fopen(fileName, "ab"); + + fwrite(memory, 0x100, 1, f); + + fclose(f); } } return 1; diff --git a/desmume/src/windows/resource.h b/desmume/src/windows/resource.h index 1c0ddace6..95647a470 100644 --- a/desmume/src/windows/resource.h +++ b/desmume/src/windows/resource.h @@ -336,7 +336,6 @@ #define IDC_SYNCHMODE_SYNCH 1013 #define IDC_FIRMWAREBROWSE 1014 #define IDC_VOLUME 1014 -#define IDC_DUMPALL 1014 #define IDC_SYNCHMETHOD_N 1015 #define IDC_FIRMWAREBOOT 1016 #define IDC_SYNCHMETHOD_Z 1016 diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index bf8492814d8f9438a1ece97c63d2252abedadc32..cbd2ec6d7a4defeda0780d04d9d435d771e7646b 100644 GIT binary patch delta 471 zcmX@}(EQY0^M);q3U<@OY#7C+2QV`#O^>i+)R^8E$-~2J%wRE{v6It5`5cRR+p-R&5co(tB1$YX5d;oio>Jk6d%jMTv zPV=sq?jXUz0hZW)YC6-WkIW_vM$;EgXEvR_pqGPh`y3laKgQ_+-OOsdhG3T)08}!a(x!j7 z$h>TNPa+RT`<*^!AZ7t#*6nxt*hG{WO(t)ACOY{5w-Vfa0gTf<4sz-M-Di$4ZaO0) zJJfwU4su#S-A7tDn=x1-3}mnXyAK%5o7xX-W7~dU8~dA1U|<;|Lbe?kvfH0HaOTya zxKD?1y52iZmF+r*IQtNhJiTr{8^`pT{hVeHFHQT!rb47YM5i}gWhR(Pu(-Y*==$v! z4s$(lK}`wE+6%b2w-<2nICu_HmxGe`ruGLBJlh{c@MaaDhC3uh0~0gXbO9&UZPNv& MFo|pja@QyW06kL%`v3p{ diff --git a/desmume/src/windows/wx/include/msvc/wx/setup.h b/desmume/src/windows/wx/include/msvc/wx/setup.h deleted file mode 100644 index 3f0e0cd5e..000000000 --- a/desmume/src/windows/wx/include/msvc/wx/setup.h +++ /dev/null @@ -1,249 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: msvc/wx/msw/setup.h -// Purpose: wrapper around the real wx/setup.h for Visual C++ -// Author: Vadim Zeitlin -// Modified by: -// Created: 2004-12-12 -// RCS-ID: $Id: setup.h 43687 2006-11-27 15:03:59Z VZ $ -// Copyright: (c) 2004 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -// VC++ IDE predefines _DEBUG and _UNICODE for the new projects itself, but -// the other symbols (WXUSINGDLL, __WXUNIVERSAL__, ...) should be defined -// explicitly! - -#ifdef _MSC_VER - #ifdef _UNICODE - #ifdef WXUSINGDLL - #ifdef _DEBUG - #include "../../../lib/vc_dll/mswud/wx/setup.h" - #else - #include "../../../lib/vc_dll/mswu/wx/setup.h" - #endif - #else - #ifdef _DEBUG - #include "../../../lib/vc_lib/mswud/wx/setup.h" - #else - #include "../../../lib/vc_lib/mswu/wx/setup.h" - #endif - #endif - - #ifdef _DEBUG - #pragma comment(lib,"wxbase28ud") - #pragma comment(lib,"wxbase28ud_net") - #pragma comment(lib,"wxbase28ud_xml") - #if wxUSE_REGEX - #pragma comment(lib,"wxregexud") - #endif - - #if wxUSE_GUI - #if wxUSE_XML - #pragma comment(lib,"wxexpatd") - #endif - #if wxUSE_LIBJPEG - #pragma comment(lib,"wxjpegd") - #endif - #if wxUSE_LIBPNG - #pragma comment(lib,"wxpngd") - #endif - #if wxUSE_LIBTIFF - #pragma comment(lib,"wxtiffd") - #endif - #if wxUSE_ZLIB - #pragma comment(lib,"wxzlibd") - #endif - #pragma comment(lib,"wxmsw28ud_adv") - #pragma comment(lib,"wxmsw28ud_core") - #pragma comment(lib,"wxmsw28ud_html") - #if wxUSE_GLCANVAS - #pragma comment(lib,"wxmsw28ud_gl") - #endif - #if wxUSE_DEBUGREPORT - #pragma comment(lib,"wxmsw28ud_qa") - #endif - #if wxUSE_XRC - #pragma comment(lib,"wxmsw28ud_xrc") - #endif - #if wxUSE_AUI - #pragma comment(lib,"wxmsw28ud_aui") - #endif - #if wxUSE_RICHTEXT - #pragma comment(lib,"wxmsw28ud_richtext") - #endif - #if wxUSE_MEDIACTRL - #pragma comment(lib,"wxmsw28ud_media") - #endif - #if wxUSE_ODBC - #pragma comment(lib,"wxbase28ud_odbc") - #endif - #endif // wxUSE_GUI - #else // release - #pragma comment(lib,"wxbase28u") - #pragma comment(lib,"wxbase28u_net") - #pragma comment(lib,"wxbase28u_xml") - #if wxUSE_REGEX - #pragma comment(lib,"wxregexu") - #endif - - #if wxUSE_GUI - #if wxUSE_XML - #pragma comment(lib,"wxexpat") - #endif - #if wxUSE_LIBJPEG - #pragma comment(lib,"wxjpeg") - #endif - #if wxUSE_LIBPNG - #pragma comment(lib,"wxpng") - #endif - #if wxUSE_LIBTIFF - #pragma comment(lib,"wxtiff") - #endif - #if wxUSE_ZLIB - #pragma comment(lib,"wxzlib") - #endif - #pragma comment(lib,"wxmsw28u_adv") - #pragma comment(lib,"wxmsw28u_core") - #pragma comment(lib,"wxmsw28u_html") - #if wxUSE_GLCANVAS - #pragma comment(lib,"wxmsw28u_gl") - #endif - #if wxUSE_DEBUGREPORT - #pragma comment(lib,"wxmsw28u_qa") - #endif - #if wxUSE_XRC - #pragma comment(lib,"wxmsw28u_xrc") - #endif - #if wxUSE_AUI - #pragma comment(lib,"wxmsw28u_aui") - #endif - #if wxUSE_RICHTEXT - #pragma comment(lib,"wxmsw28u_richtext") - #endif - #if wxUSE_MEDIACTRL - #pragma comment(lib,"wxmsw28u_media") - #endif - #if wxUSE_ODBC - #pragma comment(lib,"wxbase28u_odbc") - #endif - #endif // wxUSE_GUI - #endif // debug/release - #else // !_UNICODE - #ifdef WXUSINGDLL - #ifdef _DEBUG - #include "../../../lib/vc_dll/mswd/wx/setup.h" - #else - #include "../../../lib/vc_dll/msw/wx/setup.h" - #endif - #else // static lib - #ifdef _DEBUG - #include "../../../lib/vc_lib/mswd/wx/setup.h" - #else - #include "../../../lib/vc_lib/msw/wx/setup.h" - #endif - #endif // shared/static - - #ifdef _DEBUG - #pragma comment(lib,"wxbase28d") - #pragma comment(lib,"wxbase28d_net") - #pragma comment(lib,"wxbase28d_xml") - #if wxUSE_REGEX - #pragma comment(lib,"wxregexd") - #endif - - #if wxUSE_GUI - #if wxUSE_XML - #pragma comment(lib,"wxexpatd") - #endif - #if wxUSE_LIBJPEG - #pragma comment(lib,"wxjpegd") - #endif - #if wxUSE_LIBPNG - #pragma comment(lib,"wxpngd") - #endif - #if wxUSE_LIBTIFF - #pragma comment(lib,"wxtiffd") - #endif - #if wxUSE_ZLIB - #pragma comment(lib,"wxzlibd") - #endif - #pragma comment(lib,"wxmsw28d_adv") - #pragma comment(lib,"wxmsw28d_core") - #pragma comment(lib,"wxmsw28d_html") - #if wxUSE_GLCANVAS - #pragma comment(lib,"wxmsw28d_gl") - #endif - #if wxUSE_DEBUGREPORT - #pragma comment(lib,"wxmsw28d_qa") - #endif - #if wxUSE_XRC - #pragma comment(lib,"wxmsw28d_xrc") - #endif - #if wxUSE_AUI - #pragma comment(lib,"wxmsw28d_aui") - #endif - #if wxUSE_RICHTEXT - #pragma comment(lib,"wxmsw28d_richtext") - #endif - #if wxUSE_MEDIACTRL - #pragma comment(lib,"wxmsw28d_media") - #endif - #if wxUSE_ODBC - #pragma comment(lib,"wxbase28d_odbc") - #endif - #endif // wxUSE_GUI - #else // release - #pragma comment(lib,"wxbase28") - #pragma comment(lib,"wxbase28_net") - #pragma comment(lib,"wxbase28_xml") - #if wxUSE_REGEX - #pragma comment(lib,"wxregex") - #endif - - #if wxUSE_GUI - #if wxUSE_XML - #pragma comment(lib,"wxexpat") - #endif - #if wxUSE_LIBJPEG - #pragma comment(lib,"wxjpeg") - #endif - #if wxUSE_LIBPNG - #pragma comment(lib,"wxpng") - #endif - #if wxUSE_LIBTIFF - #pragma comment(lib,"wxtiff") - #endif - #if wxUSE_ZLIB - #pragma comment(lib,"wxzlib") - #endif - #pragma comment(lib,"wxmsw28_adv") - #pragma comment(lib,"wxmsw28_core") - #pragma comment(lib,"wxmsw28_html") - #if wxUSE_GLCANVAS - #pragma comment(lib,"wxmsw28_gl") - #endif - #if wxUSE_DEBUGREPORT - #pragma comment(lib,"wxmsw28_qa") - #endif - #if wxUSE_XRC - #pragma comment(lib,"wxmsw28_xrc") - #endif - #if wxUSE_AUI - #pragma comment(lib,"wxmsw28_aui") - #endif - #if wxUSE_RICHTEXT - #pragma comment(lib,"wxmsw28_richtext") - #endif - #if wxUSE_MEDIACTRL - #pragma comment(lib,"wxmsw28_media") - #endif - #if wxUSE_ODBC - #pragma comment(lib,"wxbase28_odbc") - #endif - #endif // wxUSE_GUI - #endif // debug/release - #endif // _UNICODE/!_UNICODE -#else - #error "This file should only be included when using Microsoft Visual C++" -#endif - diff --git a/desmume/src/windows/wx/include/wx/aboutdlg.h b/desmume/src/windows/wx/include/wx/aboutdlg.h deleted file mode 100644 index 19a6fb949..000000000 --- a/desmume/src/windows/wx/include/wx/aboutdlg.h +++ /dev/null @@ -1,161 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/aboutdlg.h -// Purpose: declaration of wxAboutDialog class -// Author: Vadim Zeitlin -// Created: 2006-10-07 -// RCS-ID: $Id: aboutdlg.h 58748 2009-02-08 09:46:03Z VZ $ -// Copyright: (c) 2006 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ABOUTDLG_H_ -#define _WX_ABOUTDLG_H_ - -#include "wx/defs.h" - -#if wxUSE_ABOUTDLG - -#include "wx/app.h" -#include "wx/icon.h" - -// ---------------------------------------------------------------------------- -// wxAboutDialogInfo: information shown by the standard "About" dialog -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxAboutDialogInfo -{ -public: - // all fields are initially uninitialized - wxAboutDialogInfo() { } - - // accessors for various simply fields - // ----------------------------------- - - // name of the program, if not used defaults wxApp::GetAppName() - void SetName(const wxString& name) { m_name = name; } - wxString GetName() const - { return m_name.empty() ? wxTheApp->GetAppName() : m_name; } - - // version of the program, in free format (but without "version" word) - void SetVersion(const wxString& version) { m_version = version; } - bool HasVersion() const { return !m_version.empty(); } - wxString GetVersion() const { return m_version; } - - // brief, but possibly multiline, description of the program - void SetDescription(const wxString& desc) { m_description = desc; } - bool HasDescription() const { return !m_description.empty(); } - wxString GetDescription() const { return m_description; } - - // short string containing the program copyright information - void SetCopyright(const wxString& copyright) { m_copyright = copyright; } - bool HasCopyright() const { return !m_copyright.empty(); } - wxString GetCopyright() const { return m_copyright; } - - // long, multiline string containing the text of the program licence - void SetLicence(const wxString& licence) { m_licence = licence; } - void SetLicense(const wxString& licence) { m_licence = licence; } - bool HasLicence() const { return !m_licence.empty(); } - wxString GetLicence() const { return m_licence; } - - // 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(); } - wxIcon GetIcon() const; - - // web site for the program and its description (defaults to URL itself if - // empty) - void SetWebSite(const wxString& url, const wxString& desc = wxEmptyString) - { - m_url = url; - m_urlDesc = desc.empty() ? url : desc; - } - - bool HasWebSite() const { return !m_url.empty(); } - - wxString GetWebSiteURL() const { return m_url; } - wxString GetWebSiteDescription() const { return m_urlDesc; } - - // accessors for the arrays - // ------------------------ - - // the list of developers of the program - void SetDevelopers(const wxArrayString& developers) - { m_developers = developers; } - void AddDeveloper(const wxString& developer) - { m_developers.push_back(developer); } - - bool HasDevelopers() const { return !m_developers.empty(); } - const wxArrayString& GetDevelopers() const { return m_developers; } - - // the list of documentation writers - void SetDocWriters(const wxArrayString& docwriters) - { m_docwriters = docwriters; } - void AddDocWriter(const wxString& docwriter) - { m_docwriters.push_back(docwriter); } - - bool HasDocWriters() const { return !m_docwriters.empty(); } - const wxArrayString& GetDocWriters() const { return m_docwriters; } - - // the list of artists for the program art - void SetArtists(const wxArrayString& artists) - { m_artists = artists; } - void AddArtist(const wxString& artist) - { m_artists.push_back(artist); } - - bool HasArtists() const { return !m_artists.empty(); } - const wxArrayString& GetArtists() const { return m_artists; } - - // the list of translators - void SetTranslators(const wxArrayString& translators) - { m_translators = translators; } - void AddTranslator(const wxString& translator) - { m_translators.push_back(translator); } - - bool HasTranslators() const { return !m_translators.empty(); } - const wxArrayString& GetTranslators() const { return m_translators; } - - - // implementation only - // ------------------- - - // "simple" about dialog shows only textual information (with possibly - // default icon but without hyperlink nor any long texts such as the - // licence text) - bool IsSimple() const - { return !HasWebSite() && !HasIcon() && !HasLicence(); } - - // get the description and credits (i.e. all of developers, doc writers, - // artists and translators) as a one long multiline string - wxString GetDescriptionAndCredits() const; - -#if wxABI_VERSION >= 20810 - // returns the copyright with the (C) string substituted by the Unicode - // character U+00A9 - wxString GetCopyrightToDisplay() const; -#endif // wx 2.8.10+ - -private: - wxString m_name, - m_version, - m_description, - m_copyright, - m_licence; - - wxIcon m_icon; - - wxString m_url, - m_urlDesc; - - wxArrayString m_developers, - m_docwriters, - m_artists, - m_translators; -}; - -// functions to show the about dialog box -WXDLLIMPEXP_ADV void wxAboutBox(const wxAboutDialogInfo& info); - -#endif // wxUSE_ABOUTDLG - -#endif // _WX_ABOUTDLG_H_ - diff --git a/desmume/src/windows/wx/include/wx/accel.h b/desmume/src/windows/wx/include/wx/accel.h deleted file mode 100644 index 78c038f34..000000000 --- a/desmume/src/windows/wx/include/wx/accel.h +++ /dev/null @@ -1,171 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/accel.h -// Purpose: wxAcceleratorEntry and wxAcceleratorTable classes -// Author: Julian Smart, Robert Roebling, Vadim Zeitlin -// Modified by: -// Created: 31.05.01 (extracted from other files) -// RCS-ID: $Id: accel.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ACCEL_H_BASE_ -#define _WX_ACCEL_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_ACCEL - -#include "wx/object.h" - -class WXDLLIMPEXP_FWD_CORE wxAcceleratorTable; -class WXDLLIMPEXP_FWD_CORE wxMenuItem; -class WXDLLIMPEXP_FWD_CORE wxKeyEvent; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// wxAcceleratorEntry flags -enum -{ - wxACCEL_NORMAL = 0x0000, // no modifiers - wxACCEL_ALT = 0x0001, // hold Alt key down - 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 -#else - wxACCEL_CMD = wxACCEL_CTRL -#endif -}; - -// ---------------------------------------------------------------------------- -// an entry in wxAcceleratorTable corresponds to one accelerator -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxAcceleratorEntry -{ -public: - wxAcceleratorEntry(int flags = 0, int keyCode = 0, int cmd = 0, - wxMenuItem *item = NULL) - : m_flags(flags) - , m_keyCode(keyCode) - , m_command(cmd) - , m_item(item) - { } - - wxAcceleratorEntry(const wxAcceleratorEntry& entry) - : m_flags(entry.m_flags) - , m_keyCode(entry.m_keyCode) - , m_command(entry.m_command) - , m_item(entry.m_item) - { } - - // create accelerator corresponding to the specified string, return NULL if - // string couldn't be parsed or a pointer to be deleted by the caller - static wxAcceleratorEntry *Create(const wxString& str); - - wxAcceleratorEntry& operator=(const wxAcceleratorEntry& entry) - { - Set(entry.m_flags, entry.m_keyCode, entry.m_command, entry.m_item); - return *this; - } - - void Set(int flags, int keyCode, int cmd, wxMenuItem *item = NULL) - { - m_flags = flags; - m_keyCode = keyCode; - m_command = cmd; - m_item = item; - } - - void SetMenuItem(wxMenuItem *item) { m_item = item; } - - int GetFlags() const { return m_flags; } - int GetKeyCode() const { return m_keyCode; } - int GetCommand() const { return m_command; } - - wxMenuItem *GetMenuItem() const { return m_item; } - - bool operator==(const wxAcceleratorEntry& entry) const - { - return m_flags == entry.m_flags && - m_keyCode == entry.m_keyCode && - m_command == entry.m_command && - m_item == entry.m_item; - } - - bool operator!=(const wxAcceleratorEntry& entry) const - { return !(*this == entry); } - -#if defined(__WXMOTIF__) - // Implementation use only - bool MatchesEvent(const wxKeyEvent& event) const; -#endif - - bool IsOk() const - { - return m_flags != 0 && - m_keyCode != 0; - } - - - // string <-> wxAcceleratorEntry conversion - // ---------------------------------------- - - // returns a wxString for the this accelerator. - // this function formats it using the - format - // where maybe a hyphen-separed list of "shift|alt|ctrl" - wxString ToString() const; - - // returns true if the given string correctly initialized this object - // (i.e. if IsOk() returns true after this call) - bool FromString(const wxString& str); - - -private: - // common part of Create() and FromString() - static bool ParseAccel(const wxString& str, int *flags, int *keycode); - - - int m_flags; // combination of wxACCEL_XXX constants - int m_keyCode; // ASCII or virtual keycode - int m_command; // Command id to generate - - // the menu item this entry corresponds to, may be NULL - wxMenuItem *m_item; - - // for compatibility with old code, use accessors now! - friend class WXDLLIMPEXP_FWD_CORE wxMenu; -}; - -// ---------------------------------------------------------------------------- -// include wxAcceleratorTable class declaration, it is only used by the library -// and so doesn't have any published user visible interface -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - #include "wx/generic/accel.h" -#elif defined(__WXMSW__) - #include "wx/msw/accel.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/accel.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/accel.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/accel.h" -#elif defined(__WXMAC__) - #include "wx/mac/accel.h" -#elif defined(__WXCOCOA__) - #include "wx/generic/accel.h" -#elif defined(__WXPM__) - #include "wx/os2/accel.h" -#endif - -extern WXDLLEXPORT_DATA(wxAcceleratorTable) wxNullAcceleratorTable; - -#endif // wxUSE_ACCEL - -#endif - // _WX_ACCEL_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/access.h b/desmume/src/windows/wx/include/wx/access.h deleted file mode 100644 index 0a83346ab..000000000 --- a/desmume/src/windows/wx/include/wx/access.h +++ /dev/null @@ -1,377 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/access.h -// Purpose: Accessibility classes -// Author: Julian Smart -// Modified by: -// Created: 2003-02-12 -// RCS-ID: $Id: access.h 51246 2008-01-16 12:56:37Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ACCESSBASE_H_ -#define _WX_ACCESSBASE_H_ - -// ---------------------------------------------------------------------------- -// headers we have to include here -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_ACCESSIBILITY - -#include "wx/variant.h" - -typedef enum -{ - wxACC_FAIL, - wxACC_FALSE, - wxACC_OK, - wxACC_NOT_IMPLEMENTED, - wxACC_NOT_SUPPORTED -} wxAccStatus; - -// Child ids are integer identifiers from 1 up. -// So zero represents 'this' object. -#define wxACC_SELF 0 - -// Navigation constants - -typedef enum -{ - wxNAVDIR_DOWN, - wxNAVDIR_FIRSTCHILD, - wxNAVDIR_LASTCHILD, - wxNAVDIR_LEFT, - wxNAVDIR_NEXT, - wxNAVDIR_PREVIOUS, - wxNAVDIR_RIGHT, - wxNAVDIR_UP -} wxNavDir; - -// Role constants - -typedef enum { - wxROLE_NONE, - wxROLE_SYSTEM_ALERT, - wxROLE_SYSTEM_ANIMATION, - wxROLE_SYSTEM_APPLICATION, - wxROLE_SYSTEM_BORDER, - wxROLE_SYSTEM_BUTTONDROPDOWN, - wxROLE_SYSTEM_BUTTONDROPDOWNGRID, - wxROLE_SYSTEM_BUTTONMENU, - wxROLE_SYSTEM_CARET, - wxROLE_SYSTEM_CELL, - wxROLE_SYSTEM_CHARACTER, - wxROLE_SYSTEM_CHART, - wxROLE_SYSTEM_CHECKBUTTON, - wxROLE_SYSTEM_CLIENT, - wxROLE_SYSTEM_CLOCK, - wxROLE_SYSTEM_COLUMN, - wxROLE_SYSTEM_COLUMNHEADER, - wxROLE_SYSTEM_COMBOBOX, - wxROLE_SYSTEM_CURSOR, - wxROLE_SYSTEM_DIAGRAM, - wxROLE_SYSTEM_DIAL, - wxROLE_SYSTEM_DIALOG, - wxROLE_SYSTEM_DOCUMENT, - wxROLE_SYSTEM_DROPLIST, - wxROLE_SYSTEM_EQUATION, - wxROLE_SYSTEM_GRAPHIC, - wxROLE_SYSTEM_GRIP, - wxROLE_SYSTEM_GROUPING, - wxROLE_SYSTEM_HELPBALLOON, - wxROLE_SYSTEM_HOTKEYFIELD, - wxROLE_SYSTEM_INDICATOR, - wxROLE_SYSTEM_LINK, - wxROLE_SYSTEM_LIST, - wxROLE_SYSTEM_LISTITEM, - wxROLE_SYSTEM_MENUBAR, - wxROLE_SYSTEM_MENUITEM, - wxROLE_SYSTEM_MENUPOPUP, - wxROLE_SYSTEM_OUTLINE, - wxROLE_SYSTEM_OUTLINEITEM, - wxROLE_SYSTEM_PAGETAB, - wxROLE_SYSTEM_PAGETABLIST, - wxROLE_SYSTEM_PANE, - wxROLE_SYSTEM_PROGRESSBAR, - wxROLE_SYSTEM_PROPERTYPAGE, - wxROLE_SYSTEM_PUSHBUTTON, - wxROLE_SYSTEM_RADIOBUTTON, - wxROLE_SYSTEM_ROW, - wxROLE_SYSTEM_ROWHEADER, - wxROLE_SYSTEM_SCROLLBAR, - wxROLE_SYSTEM_SEPARATOR, - wxROLE_SYSTEM_SLIDER, - wxROLE_SYSTEM_SOUND, - wxROLE_SYSTEM_SPINBUTTON, - wxROLE_SYSTEM_STATICTEXT, - wxROLE_SYSTEM_STATUSBAR, - wxROLE_SYSTEM_TABLE, - wxROLE_SYSTEM_TEXT, - wxROLE_SYSTEM_TITLEBAR, - wxROLE_SYSTEM_TOOLBAR, - wxROLE_SYSTEM_TOOLTIP, - wxROLE_SYSTEM_WHITESPACE, - wxROLE_SYSTEM_WINDOW -} wxAccRole; - -// Object types - -typedef enum { - wxOBJID_WINDOW = 0x00000000, - wxOBJID_SYSMENU = 0xFFFFFFFF, - wxOBJID_TITLEBAR = 0xFFFFFFFE, - wxOBJID_MENU = 0xFFFFFFFD, - wxOBJID_CLIENT = 0xFFFFFFFC, - wxOBJID_VSCROLL = 0xFFFFFFFB, - wxOBJID_HSCROLL = 0xFFFFFFFA, - wxOBJID_SIZEGRIP = 0xFFFFFFF9, - wxOBJID_CARET = 0xFFFFFFF8, - wxOBJID_CURSOR = 0xFFFFFFF7, - wxOBJID_ALERT = 0xFFFFFFF6, - wxOBJID_SOUND = 0xFFFFFFF5 -} wxAccObject; - -// Accessible states - -#define wxACC_STATE_SYSTEM_ALERT_HIGH 0x00000001 -#define wxACC_STATE_SYSTEM_ALERT_MEDIUM 0x00000002 -#define wxACC_STATE_SYSTEM_ALERT_LOW 0x00000004 -#define wxACC_STATE_SYSTEM_ANIMATED 0x00000008 -#define wxACC_STATE_SYSTEM_BUSY 0x00000010 -#define wxACC_STATE_SYSTEM_CHECKED 0x00000020 -#define wxACC_STATE_SYSTEM_COLLAPSED 0x00000040 -#define wxACC_STATE_SYSTEM_DEFAULT 0x00000080 -#define wxACC_STATE_SYSTEM_EXPANDED 0x00000100 -#define wxACC_STATE_SYSTEM_EXTSELECTABLE 0x00000200 -#define wxACC_STATE_SYSTEM_FLOATING 0x00000400 -#define wxACC_STATE_SYSTEM_FOCUSABLE 0x00000800 -#define wxACC_STATE_SYSTEM_FOCUSED 0x00001000 -#define wxACC_STATE_SYSTEM_HOTTRACKED 0x00002000 -#define wxACC_STATE_SYSTEM_INVISIBLE 0x00004000 -#define wxACC_STATE_SYSTEM_MARQUEED 0x00008000 -#define wxACC_STATE_SYSTEM_MIXED 0x00010000 -#define wxACC_STATE_SYSTEM_MULTISELECTABLE 0x00020000 -#define wxACC_STATE_SYSTEM_OFFSCREEN 0x00040000 -#define wxACC_STATE_SYSTEM_PRESSED 0x00080000 -#define wxACC_STATE_SYSTEM_PROTECTED 0x00100000 -#define wxACC_STATE_SYSTEM_READONLY 0x00200000 -#define wxACC_STATE_SYSTEM_SELECTABLE 0x00400000 -#define wxACC_STATE_SYSTEM_SELECTED 0x00800000 -#define wxACC_STATE_SYSTEM_SELFVOICING 0x01000000 -#define wxACC_STATE_SYSTEM_UNAVAILABLE 0x02000000 - -// Selection flag - -typedef enum -{ - wxACC_SEL_NONE = 0, - wxACC_SEL_TAKEFOCUS = 1, - wxACC_SEL_TAKESELECTION = 2, - wxACC_SEL_EXTENDSELECTION = 4, - wxACC_SEL_ADDSELECTION = 8, - wxACC_SEL_REMOVESELECTION = 16 -} wxAccSelectionFlags; - -// Accessibility event identifiers - -#define wxACC_EVENT_SYSTEM_SOUND 0x0001 -#define wxACC_EVENT_SYSTEM_ALERT 0x0002 -#define wxACC_EVENT_SYSTEM_FOREGROUND 0x0003 -#define wxACC_EVENT_SYSTEM_MENUSTART 0x0004 -#define wxACC_EVENT_SYSTEM_MENUEND 0x0005 -#define wxACC_EVENT_SYSTEM_MENUPOPUPSTART 0x0006 -#define wxACC_EVENT_SYSTEM_MENUPOPUPEND 0x0007 -#define wxACC_EVENT_SYSTEM_CAPTURESTART 0x0008 -#define wxACC_EVENT_SYSTEM_CAPTUREEND 0x0009 -#define wxACC_EVENT_SYSTEM_MOVESIZESTART 0x000A -#define wxACC_EVENT_SYSTEM_MOVESIZEEND 0x000B -#define wxACC_EVENT_SYSTEM_CONTEXTHELPSTART 0x000C -#define wxACC_EVENT_SYSTEM_CONTEXTHELPEND 0x000D -#define wxACC_EVENT_SYSTEM_DRAGDROPSTART 0x000E -#define wxACC_EVENT_SYSTEM_DRAGDROPEND 0x000F -#define wxACC_EVENT_SYSTEM_DIALOGSTART 0x0010 -#define wxACC_EVENT_SYSTEM_DIALOGEND 0x0011 -#define wxACC_EVENT_SYSTEM_SCROLLINGSTART 0x0012 -#define wxACC_EVENT_SYSTEM_SCROLLINGEND 0x0013 -#define wxACC_EVENT_SYSTEM_SWITCHSTART 0x0014 -#define wxACC_EVENT_SYSTEM_SWITCHEND 0x0015 -#define wxACC_EVENT_SYSTEM_MINIMIZESTART 0x0016 -#define wxACC_EVENT_SYSTEM_MINIMIZEEND 0x0017 -#define wxACC_EVENT_OBJECT_CREATE 0x8000 -#define wxACC_EVENT_OBJECT_DESTROY 0x8001 -#define wxACC_EVENT_OBJECT_SHOW 0x8002 -#define wxACC_EVENT_OBJECT_HIDE 0x8003 -#define wxACC_EVENT_OBJECT_REORDER 0x8004 -#define wxACC_EVENT_OBJECT_FOCUS 0x8005 -#define wxACC_EVENT_OBJECT_SELECTION 0x8006 -#define wxACC_EVENT_OBJECT_SELECTIONADD 0x8007 -#define wxACC_EVENT_OBJECT_SELECTIONREMOVE 0x8008 -#define wxACC_EVENT_OBJECT_SELECTIONWITHIN 0x8009 -#define wxACC_EVENT_OBJECT_STATECHANGE 0x800A -#define wxACC_EVENT_OBJECT_LOCATIONCHANGE 0x800B -#define wxACC_EVENT_OBJECT_NAMECHANGE 0x800C -#define wxACC_EVENT_OBJECT_DESCRIPTIONCHANGE 0x800D -#define wxACC_EVENT_OBJECT_VALUECHANGE 0x800E -#define wxACC_EVENT_OBJECT_PARENTCHANGE 0x800F -#define wxACC_EVENT_OBJECT_HELPCHANGE 0x8010 -#define wxACC_EVENT_OBJECT_DEFACTIONCHANGE 0x8011 -#define wxACC_EVENT_OBJECT_ACCELERATORCHANGE 0x8012 - -// ---------------------------------------------------------------------------- -// wxAccessible -// All functions return an indication of success, failure, or not implemented. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxAccessible; -class WXDLLIMPEXP_FWD_CORE wxWindow; -class WXDLLIMPEXP_FWD_CORE wxPoint; -class WXDLLIMPEXP_FWD_CORE wxRect; -class WXDLLEXPORT wxAccessibleBase : public wxObject -{ - DECLARE_NO_COPY_CLASS(wxAccessibleBase) - -public: - wxAccessibleBase(wxWindow* win): m_window(win) {} - virtual ~wxAccessibleBase() {} - -// Overridables - - // Can return either a child object, or an integer - // representing the child element, starting from 1. - // pt is in screen coordinates. - virtual wxAccStatus HitTest(const wxPoint& WXUNUSED(pt), int* WXUNUSED(childId), wxAccessible** WXUNUSED(childObject)) - { return wxACC_NOT_IMPLEMENTED; } - - // Returns the rectangle for this object (id = 0) or a child element (id > 0). - // rect is in screen coordinates. - virtual wxAccStatus GetLocation(wxRect& WXUNUSED(rect), int WXUNUSED(elementId)) - { return wxACC_NOT_IMPLEMENTED; } - - // Navigates from fromId to toId/toObject. - virtual wxAccStatus Navigate(wxNavDir WXUNUSED(navDir), int WXUNUSED(fromId), - int* WXUNUSED(toId), wxAccessible** WXUNUSED(toObject)) - { return wxACC_NOT_IMPLEMENTED; } - - // Gets the name of the specified object. - virtual wxAccStatus GetName(int WXUNUSED(childId), wxString* WXUNUSED(name)) - { return wxACC_NOT_IMPLEMENTED; } - - // Gets the number of children. - virtual wxAccStatus GetChildCount(int* WXUNUSED(childCount)) - { return wxACC_NOT_IMPLEMENTED; } - - // Gets the specified child (starting from 1). - // If *child is NULL and return value is wxACC_OK, - // this means that the child is a simple element and - // not an accessible object. - virtual wxAccStatus GetChild(int WXUNUSED(childId), wxAccessible** WXUNUSED(child)) - { return wxACC_NOT_IMPLEMENTED; } - - // Gets the parent, or NULL. - virtual wxAccStatus GetParent(wxAccessible** WXUNUSED(parent)) - { return wxACC_NOT_IMPLEMENTED; } - - // Performs the default action. childId is 0 (the action for this object) - // or > 0 (the action for a child). - // Return wxACC_NOT_SUPPORTED if there is no default action for this - // window (e.g. an edit control). - virtual wxAccStatus DoDefaultAction(int WXUNUSED(childId)) - { return wxACC_NOT_IMPLEMENTED; } - - // Gets the default action for this object (0) or > 0 (the action for a child). - // Return wxACC_OK even if there is no action. actionName is the action, or the empty - // string if there is no action. - // The retrieved string describes the action that is performed on an object, - // not what the object does as a result. For example, a toolbar button that prints - // a document has a default action of "Press" rather than "Prints the current document." - virtual wxAccStatus GetDefaultAction(int WXUNUSED(childId), wxString* WXUNUSED(actionName)) - { return wxACC_NOT_IMPLEMENTED; } - - // Returns the description for this object or a child. - virtual wxAccStatus GetDescription(int WXUNUSED(childId), wxString* WXUNUSED(description)) - { return wxACC_NOT_IMPLEMENTED; } - - // Returns help text for this object or a child, similar to tooltip text. - virtual wxAccStatus GetHelpText(int WXUNUSED(childId), wxString* WXUNUSED(helpText)) - { return wxACC_NOT_IMPLEMENTED; } - - // Returns the keyboard shortcut for this object or child. - // Return e.g. ALT+K - virtual wxAccStatus GetKeyboardShortcut(int WXUNUSED(childId), wxString* WXUNUSED(shortcut)) - { return wxACC_NOT_IMPLEMENTED; } - - // Returns a role constant. - virtual wxAccStatus GetRole(int WXUNUSED(childId), wxAccRole* WXUNUSED(role)) - { return wxACC_NOT_IMPLEMENTED; } - - // Returns a state constant. - virtual wxAccStatus GetState(int WXUNUSED(childId), long* WXUNUSED(state)) - { return wxACC_NOT_IMPLEMENTED; } - - // Returns a localized string representing the value for the object - // or child. - virtual wxAccStatus GetValue(int WXUNUSED(childId), wxString* WXUNUSED(strValue)) - { return wxACC_NOT_IMPLEMENTED; } - - // Selects the object or child. - virtual wxAccStatus Select(int WXUNUSED(childId), wxAccSelectionFlags WXUNUSED(selectFlags)) - { return wxACC_NOT_IMPLEMENTED; } - - // Gets the window with the keyboard focus. - // If childId is 0 and child is NULL, no object in - // this subhierarchy has the focus. - // If this object has the focus, child should be 'this'. - virtual wxAccStatus GetFocus(int* WXUNUSED(childId), wxAccessible** WXUNUSED(child)) - { return wxACC_NOT_IMPLEMENTED; } - -#if wxUSE_VARIANT - // Gets a variant representing the selected children - // of this object. - // Acceptable values: - // - a null variant (IsNull() returns TRUE) - // - a list variant (GetType() == wxT("list")) - // - an integer representing the selected child element, - // or 0 if this object is selected (GetType() == wxT("long")) - // - a "void*" pointer to a wxAccessible child object - virtual wxAccStatus GetSelections(wxVariant* WXUNUSED(selections)) - { return wxACC_NOT_IMPLEMENTED; } -#endif // wxUSE_VARIANT - -// Accessors - - // Returns the window associated with this object. - - wxWindow* GetWindow() { return m_window; } - - // Sets the window associated with this object. - - void SetWindow(wxWindow* window) { m_window = window; } - -// Operations - - // Each platform's implementation must define this - // static void NotifyEvent(int eventType, wxWindow* window, wxAccObject objectType, - // int objectId); - -private: - -// Data members - - wxWindow* m_window; -}; - - -// ---------------------------------------------------------------------------- -// now include the declaration of the real class -// ---------------------------------------------------------------------------- - -#if defined(__WXMSW__) - #include "wx/msw/ole/access.h" -#endif - -#endif // wxUSE_ACCESSIBILITY - -#endif // _WX_ACCESSBASE_H_ - diff --git a/desmume/src/windows/wx/include/wx/afterstd.h b/desmume/src/windows/wx/include/wx/afterstd.h deleted file mode 100644 index 4c1d4a5a2..000000000 --- a/desmume/src/windows/wx/include/wx/afterstd.h +++ /dev/null @@ -1,48 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: include/wx/afterstd.h -// Purpose: #include after STL headers -// Author: Vadim Zeitlin -// Modified by: -// Created: 07/07/03 -// RCS-ID: $Id: afterstd.h 42906 2006-11-01 14:16:42Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -/** - See the comments in beforestd.h. - */ - -#if defined(__WXMSW__) - #include "wx/msw/winundef.h" -#endif - -// undo what we did in wx/beforestd.h -#if defined(__VISUALC__) && __VISUALC__ <= 1201 - // MSVC 5 does not have this - #if _MSC_VER > 1100 - // don't restore this one for VC6, it gives it in each try/catch which is a - // bit annoying to say the least - #if _MSC_VER >= 0x1300 - // unreachable code - #pragma warning(default:4702) - #endif // VC++ >= 7 - - #pragma warning(pop) - #else - // 'expression' : signed/unsigned mismatch - #pragma warning(default:4018) - - // 'identifier' : unreferenced formal parameter - #pragma warning(default:4100) - - // 'conversion' : conversion from 'type1' to 'type2', - // possible loss of data - #pragma warning(default:4244) - - // C++ language change: to explicitly specialize class template - // 'identifier' use the following syntax - #pragma warning(default:4663) - #endif -#endif - diff --git a/desmume/src/windows/wx/include/wx/anidecod.h b/desmume/src/windows/wx/include/wx/anidecod.h deleted file mode 100644 index 0b664d86b..000000000 --- a/desmume/src/windows/wx/include/wx/anidecod.h +++ /dev/null @@ -1,77 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/anidecod.h -// Purpose: wxANIDecoder, ANI reader for wxImage and wxAnimation -// Author: Francesco Montorsi -// CVS-ID: $Id: anidecod.h 45563 2007-04-21 18:17:50Z VZ $ -// Copyright: (c) 2006 Francesco Montorsi -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ANIDECOD_H -#define _WX_ANIDECOD_H - -#include "wx/defs.h" - -#if wxUSE_STREAMS && wxUSE_ICO_CUR - -#include "wx/stream.h" -#include "wx/image.h" -#include "wx/animdecod.h" -#include "wx/dynarray.h" - - -class /*WXDLLEXPORT*/ wxANIFrameInfo; - -WX_DECLARE_EXPORTED_OBJARRAY(wxANIFrameInfo, wxANIFrameInfoArray); -WX_DECLARE_EXPORTED_OBJARRAY(wxImage, wxImageArray); - -// -------------------------------------------------------------------------- -// wxANIDecoder class -// -------------------------------------------------------------------------- - -class WXDLLEXPORT wxANIDecoder : public wxAnimationDecoder -{ -public: - // constructor, destructor, etc. - wxANIDecoder(); - ~wxANIDecoder(); - - - virtual wxSize GetFrameSize(unsigned int frame) const; - virtual wxPoint GetFramePosition(unsigned int frame) const; - virtual wxAnimationDisposal GetDisposalMethod(unsigned int frame) const; - virtual long GetDelay(unsigned int frame) const; - virtual wxColour GetTransparentColour(unsigned int frame) const; - - // implementation of wxAnimationDecoder's pure virtuals - virtual bool CanRead( wxInputStream& stream ) const; - virtual bool Load( wxInputStream& stream ); - - bool ConvertToImage(unsigned int frame, wxImage *image) const; - - wxAnimationDecoder *Clone() const - { return new wxANIDecoder; } - wxAnimationType GetType() const - { return wxANIMATION_TYPE_ANI; } - -private: - // frames stored as wxImage(s): ANI files are meant to be used mostly for animated - // cursors and thus they do not use any optimization to encode differences between - // two frames: they are just a list of images to display sequentially. - wxImageArray m_images; - - // the info about each image stored in m_images. - // NB: m_info.GetCount() may differ from m_images.GetCount()! - wxANIFrameInfoArray m_info; - - // this is the wxCURHandler used to load the ICON chunk of the ANI files - static wxCURHandler sm_handler; - - - DECLARE_NO_COPY_CLASS(wxANIDecoder) -}; - - -#endif // wxUSE_STREAM && wxUSE_ICO_CUR - -#endif // _WX_ANIDECOD_H diff --git a/desmume/src/windows/wx/include/wx/animate.h b/desmume/src/windows/wx/include/wx/animate.h deleted file mode 100644 index 451cce52f..000000000 --- a/desmume/src/windows/wx/include/wx/animate.h +++ /dev/null @@ -1,124 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/animate.h -// Purpose: wxAnimation and wxAnimationCtrl -// Author: Julian Smart and Guillermo Rodriguez Garcia -// Modified by: Francesco Montorsi -// Created: 13/8/99 -// RCS-ID: $Id: animate.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ANIMATE_H_ -#define _WX_ANIMATE_H_ - -#include "wx/defs.h" - -#if wxUSE_ANIMATIONCTRL - -#include "wx/animdecod.h" -#include "wx/control.h" -#include "wx/timer.h" -#include "wx/bitmap.h" - -class WXDLLIMPEXP_FWD_ADV wxAnimation; - -extern WXDLLIMPEXP_DATA_ADV(wxAnimation) wxNullAnimation; -extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxAnimationCtrlNameStr[]; - - -// ---------------------------------------------------------------------------- -// wxAnimationBase -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxAnimationBase : public wxGDIObject -{ -public: - wxAnimationBase() {} - - virtual bool IsOk() const = 0; - - // can be -1 - virtual int GetDelay(unsigned int frame) const = 0; - - virtual unsigned int GetFrameCount() const = 0; - virtual wxImage GetFrame(unsigned int frame) const = 0; - virtual wxSize GetSize() const = 0; - - virtual bool LoadFile(const wxString& name, - wxAnimationType type = wxANIMATION_TYPE_ANY) = 0; - virtual bool Load(wxInputStream& stream, - wxAnimationType type = wxANIMATION_TYPE_ANY) = 0; - -protected: - DECLARE_ABSTRACT_CLASS(wxAnimationBase) -}; - - - -// ---------------------------------------------------------------------------- -// wxAnimationCtrlBase -// ---------------------------------------------------------------------------- - -// do not autoresize to the animation's size when SetAnimation() is called -#define wxAC_NO_AUTORESIZE (0x0010) - -// default style does not include wxAC_NO_AUTORESIZE, that is, the control -// auto-resizes by default to fit the new animation when SetAnimation() is called -#define wxAC_DEFAULT_STYLE (wxNO_BORDER) - -class WXDLLIMPEXP_ADV wxAnimationCtrlBase : public wxControl -{ -public: - wxAnimationCtrlBase() { } - - // public API - virtual bool LoadFile(const wxString& filename, - wxAnimationType type = wxANIMATION_TYPE_ANY) = 0; - - virtual void SetAnimation(const wxAnimation &anim) = 0; - virtual wxAnimation GetAnimation() const = 0; - - virtual bool Play() = 0; - virtual void Stop() = 0; - - virtual bool IsPlaying() const = 0; - - virtual void SetInactiveBitmap(const wxBitmap &bmp); - - // always return the original bitmap set in this control - wxBitmap GetInactiveBitmap() const - { return m_bmpStatic; } - -protected: - // the inactive bitmap as it was set by the user - wxBitmap m_bmpStatic; - - // the inactive bitmap currently shown in the control - // (may differ in the size from m_bmpStatic) - wxBitmap m_bmpStaticReal; - - // updates m_bmpStaticReal from m_bmpStatic if needed - virtual void UpdateStaticImage(); - - // called by SetInactiveBitmap - virtual void DisplayStaticImage() = 0; - -private: - DECLARE_ABSTRACT_CLASS(wxAnimationCtrlBase) -}; - - -// ---------------------------------------------------------------------------- -// include the platform-specific version of the wxAnimationCtrl class -// ---------------------------------------------------------------------------- - -#if defined(__WXGTK20__) && !defined(__WXUNIVERSAL__) - #include "wx/gtk/animate.h" -#else - #include "wx/generic/animate.h" -#endif - -#endif // wxUSE_ANIMATIONCTRL - -#endif // _WX_ANIMATE_H_ diff --git a/desmume/src/windows/wx/include/wx/animdecod.h b/desmume/src/windows/wx/include/wx/animdecod.h deleted file mode 100644 index d6dc9a48d..000000000 --- a/desmume/src/windows/wx/include/wx/animdecod.h +++ /dev/null @@ -1,146 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/animdecod.h -// Purpose: wxAnimationDecoder -// Author: Francesco Montorsi -// CVS-ID: $Id: animdecod.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 2006 Francesco Montorsi -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ANIMDECOD_H -#define _WX_ANIMDECOD_H - -#include "wx/defs.h" - -#if wxUSE_STREAMS - -#include "wx/colour.h" -#include "wx/gdicmn.h" - -class WXDLLIMPEXP_FWD_BASE wxInputStream; -class WXDLLIMPEXP_FWD_CORE wxImage; - -/* - - Differences between a wxAnimationDecoder and a wxImageHandler: - - 1) wxImageHandlers always load an input stream directly into a given wxImage - object converting from the format-specific data representation to the - wxImage native format (RGB24). - wxAnimationDecoders always load an input stream using some optimized format - to store it which is format-depedent. This allows to store a (possibly big) - animation using a format which is a good compromise between required memory - and time required to blit in on the screen. - - 2) wxAnimationDecoders contain the animation data in some internal var. - That's why they derive from wxObjectRefData: they are data which can be shared. - - 3) wxAnimationDecoders can be used by a wxImageHandler to retrieve a frame - in wxImage format; the viceversa cannot be done. - - 4) wxAnimationDecoders are decoders only, thus do not support save features. - - 5) wxAnimationDecoders are directly used by wxAnimation (generic implementation) - as wxObjectRefData while they need to be 'wrapped' by a wxImageHandler for - wxImage uses. - -*/ - - -// -------------------------------------------------------------------------- -// Constants -// -------------------------------------------------------------------------- - -// NB: the values of these enum items are not casual but coincide with the -// GIF disposal codes. Do not change them !! -enum wxAnimationDisposal -{ - // No disposal specified. The decoder is not required to take any action. - wxANIM_UNSPECIFIED = -1, - - // Do not dispose. The graphic is to be left in place. - wxANIM_DONOTREMOVE = 0, - - // Restore to background color. The area used by the graphic must be - // restored to the background color. - wxANIM_TOBACKGROUND = 1, - - // Restore to previous. The decoder is required to restore the area - // overwritten by the graphic with what was there prior to rendering the graphic. - wxANIM_TOPREVIOUS = 2 -}; - -enum wxAnimationType -{ - wxANIMATION_TYPE_INVALID, - wxANIMATION_TYPE_GIF, - wxANIMATION_TYPE_ANI, - - wxANIMATION_TYPE_ANY -}; - - -// -------------------------------------------------------------------------- -// wxAnimationDecoder class -// -------------------------------------------------------------------------- - -class WXDLLEXPORT wxAnimationDecoder : public wxObjectRefData -{ -public: - wxAnimationDecoder() - { - m_background = wxNullColour; - m_nFrames = 0; - } - virtual ~wxAnimationDecoder() { } - - - virtual bool Load( wxInputStream& stream ) = 0; - virtual bool CanRead( wxInputStream& stream ) const = 0; - - virtual wxAnimationDecoder *Clone() const = 0; - virtual wxAnimationType GetType() const = 0; - - // convert given frame to wxImage - virtual bool ConvertToImage(unsigned int frame, wxImage *image) const = 0; - - - // frame specific data getters - - // not all frames may be of the same size; e.g. GIF allows to - // specify that between two frames only a smaller portion of the - // entire animation has changed. - virtual wxSize GetFrameSize(unsigned int frame) const = 0; - - // the position of this frame in case it's not as big as m_szAnimation - // or wxPoint(0,0) otherwise. - virtual wxPoint GetFramePosition(unsigned int frame) const = 0; - - // what should be done after displaying this frame. - virtual wxAnimationDisposal GetDisposalMethod(unsigned int frame) const = 0; - - // the number of milliseconds this frame should be displayed. - // if returns -1 then the frame must be displayed forever. - virtual long GetDelay(unsigned int frame) const = 0; - - // the transparent colour for this frame if any or wxNullColour. - virtual wxColour GetTransparentColour(unsigned int frame) const = 0; - - // get global data - wxSize GetAnimationSize() const { return m_szAnimation; } - wxColour GetBackgroundColour() const { return m_background; } - unsigned int GetFrameCount() const { return m_nFrames; } - -protected: - wxSize m_szAnimation; - unsigned int m_nFrames; - - // this is the colour to use for the wxANIM_TOBACKGROUND disposal. - // if not specified by the animation, it's set to wxNullColour - wxColour m_background; -}; - - -#endif // wxUSE_STREAM -#endif // _WX_ANIMDECOD_H - diff --git a/desmume/src/windows/wx/include/wx/app.h b/desmume/src/windows/wx/include/wx/app.h deleted file mode 100644 index 1846d563e..000000000 --- a/desmume/src/windows/wx/include/wx/app.h +++ /dev/null @@ -1,708 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/app.h -// Purpose: wxAppBase class and macros used for declaration of wxApp -// derived class in the user code -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: app.h 51592 2008-02-08 08:17:41Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_APP_H_BASE_ -#define _WX_APP_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers we have to include here -// ---------------------------------------------------------------------------- - -#include "wx/event.h" // for the base class -#include "wx/build.h" -#include "wx/init.h" // we must declare wxEntry() -#include "wx/intl.h" // for wxLayoutDirection - -class WXDLLIMPEXP_FWD_BASE wxAppConsole; -class WXDLLIMPEXP_FWD_BASE wxAppTraits; -class WXDLLIMPEXP_FWD_BASE wxCmdLineParser; -class WXDLLIMPEXP_FWD_BASE wxLog; -class WXDLLIMPEXP_FWD_BASE wxMessageOutput; - -#if wxUSE_GUI - class WXDLLIMPEXP_FWD_BASE wxEventLoop; - struct WXDLLIMPEXP_FWD_CORE wxVideoMode; -#endif - -// ---------------------------------------------------------------------------- -// typedefs -// ---------------------------------------------------------------------------- - -// the type of the function used to create a wxApp object on program start up -typedef wxAppConsole* (*wxAppInitializerFunction)(); - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -enum -{ - wxPRINT_WINDOWS = 1, - wxPRINT_POSTSCRIPT = 2 -}; - -// ---------------------------------------------------------------------------- -// wxAppConsole: wxApp for non-GUI applications -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxAppConsole : public wxEvtHandler -{ -public: - // ctor and dtor - wxAppConsole(); - virtual ~wxAppConsole(); - - - // the virtual functions which may/must be overridden in the derived class - // ----------------------------------------------------------------------- - - // This is the very first function called for a newly created wxApp object, - // it is used by the library to do the global initialization. If, for some - // reason, you must override it (instead of just overriding OnInit(), as - // usual, for app-specific initializations), do not forget to call the base - // class version! - virtual bool Initialize(int& argc, wxChar **argv); - - // This gives wxCocoa a chance to call OnInit() with a memory pool in place - virtual bool CallOnInit() { return OnInit(); } - - // Called before OnRun(), this is a good place to do initialization -- if - // anything fails, return false from here to prevent the program from - // continuing. The command line is normally parsed here, call the base - // class OnInit() to do it. - virtual bool OnInit(); - - // this is here only temporary hopefully (FIXME) - virtual bool OnInitGui() { return true; } - - // This is the replacement for the normal main(): all program work should - // be done here. When OnRun() returns, the programs starts shutting down. - virtual int OnRun() = 0; - - // This is only called if OnInit() returned true so it's a good place to do - // any cleanup matching the initializations done there. - virtual int OnExit(); - - // This is the very last function called on wxApp object before it is - // destroyed. If you override it (instead of overriding OnExit() as usual) - // do not forget to call the base class version! - virtual void CleanUp(); - - // Called when a fatal exception occurs, this function should take care not - // to do anything which might provoke a nested exception! It may be - // overridden if you wish to react somehow in non-default way (core dump - // under Unix, application crash under Windows) to fatal program errors, - // however extreme care should be taken if you don't want this function to - // crash. - virtual void OnFatalException() { } - - // Called from wxExit() function, should terminate the application a.s.a.p. - virtual void Exit(); - - - // application info: name, description, vendor - // ------------------------------------------- - - // NB: all these should be set by the application itself, there are no - // reasonable default except for the application name which is taken to - // be argv[0] - - // set/get the application name - wxString GetAppName() const - { - return m_appName.empty() ? m_className : m_appName; - } - void SetAppName(const wxString& name) { m_appName = name; } - - // set/get the app class name - wxString GetClassName() const { return m_className; } - void SetClassName(const wxString& name) { m_className = name; } - - // set/get the vendor name - const wxString& GetVendorName() const { return m_vendorName; } - void SetVendorName(const wxString& name) { m_vendorName = name; } - - - // cmd line parsing stuff - // ---------------------- - - // all of these methods may be overridden in the derived class to - // customize the command line parsing (by default only a few standard - // options are handled) - // - // you also need to call wxApp::OnInit() from YourApp::OnInit() for all - // this to work - -#if wxUSE_CMDLINE_PARSER - // this one is called from OnInit() to add all supported options - // to the given parser (don't forget to call the base class version if you - // override it!) - virtual void OnInitCmdLine(wxCmdLineParser& parser); - - // called after successfully parsing the command line, return true - // to continue and false to exit (don't forget to call the base class - // version if you override it!) - virtual bool OnCmdLineParsed(wxCmdLineParser& parser); - - // called if "--help" option was specified, return true to continue - // and false to exit - virtual bool OnCmdLineHelp(wxCmdLineParser& parser); - - // called if incorrect command line options were given, return - // false to abort and true to continue - virtual bool OnCmdLineError(wxCmdLineParser& parser); -#endif // wxUSE_CMDLINE_PARSER - - - // miscellaneous customization functions - // ------------------------------------- - - // create the app traits object to which we delegate for everything which - // either should be configurable by the user (then he can change the - // default behaviour simply by overriding CreateTraits() and returning his - // own traits object) or which is GUI/console dependent as then wxAppTraits - // allows us to abstract the differences behind the common façade - wxAppTraits *GetTraits(); - - // the functions below shouldn't be used now that we have wxAppTraits -#if WXWIN_COMPATIBILITY_2_4 - -#if wxUSE_LOG - // override this function to create default log target of arbitrary - // user-defined class (default implementation creates a wxLogGui - // object) -- this log object is used by default by all wxLogXXX() - // functions. - wxDEPRECATED( virtual wxLog *CreateLogTarget() ); -#endif // wxUSE_LOG - - // similar to CreateLogTarget() but for the global wxMessageOutput - // object - wxDEPRECATED( virtual wxMessageOutput *CreateMessageOutput() ); - -#endif // WXWIN_COMPATIBILITY_2_4 - - - // 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 - virtual int FilterEvent(wxEvent& event); - -#if wxUSE_EXCEPTIONS - // call the specified handler on the given object with the given event - // - // this method only exists to allow catching the exceptions thrown by any - // event handler, it would lead to an extra (useless) virtual function call - // if the exceptions were not used, so it doesn't even exist in that case - virtual void HandleEvent(wxEvtHandler *handler, - wxEventFunction func, - wxEvent& event) const; - - // Called when an unhandled C++ exception occurs inside OnRun(): note that - // the exception type is lost by now, so if you really want to handle the - // exception you should override OnRun() and put a try/catch around - // MainLoop() call there or use OnExceptionInMainLoop() - virtual void OnUnhandledException() { } -#endif // wxUSE_EXCEPTIONS - - // process all events in the wxPendingEvents list -- it is necessary to - // call this function to process posted events. This happens during each - // event loop iteration in GUI mode but if there is no main loop, it may be - // also called directly. - virtual void ProcessPendingEvents(); - - // doesn't do anything in this class, just a hook for GUI wxApp - virtual bool Yield(bool WXUNUSED(onlyIfNeeded) = false) { return true; } - - // make sure that idle events are sent again - virtual void WakeUpIdle() { } - - // this is just a convenience: by providing its implementation here we - // avoid #ifdefs in the code using it - static bool IsMainLoopRunning() { return false; } - - - // debugging support - // ----------------- - -#ifdef __WXDEBUG__ - // this function is called when an assert failure occurs, the base class - // version does the normal processing (i.e. shows the usual assert failure - // dialog box) - // - // the arguments are the location of the failed assert (func may be empty - // if the compiler doesn't support C99 __FUNCTION__), the text of the - // assert itself and the user-specified message - virtual void OnAssertFailure(const wxChar *file, - int line, - const wxChar *func, - const wxChar *cond, - const wxChar *msg); - - // old version of the function without func parameter, for compatibility - // only, override OnAssertFailure() in the new code - virtual void OnAssert(const wxChar *file, - int line, - const wxChar *cond, - const wxChar *msg); -#endif // __WXDEBUG__ - - // check that the wxBuildOptions object (constructed in the application - // itself, usually the one from IMPLEMENT_APP() macro) matches the build - // options of the library and abort if it doesn't - static bool CheckBuildOptions(const char *optionsSignature, - const char *componentName); -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( static bool CheckBuildOptions(const wxBuildOptions& buildOptions) ); -#endif - - // implementation only from now on - // ------------------------------- - - // helpers for dynamic wxApp construction - static void SetInitializerFunction(wxAppInitializerFunction fn) - { ms_appInitFn = fn; } - static wxAppInitializerFunction GetInitializerFunction() - { return ms_appInitFn; } - - // accessors for ms_appInstance field (external code might wish to modify - // it, this is why we provide a setter here as well, but you should really - // know what you're doing if you call it), wxTheApp is usually used instead - // of GetInstance() - static wxAppConsole *GetInstance() { return ms_appInstance; } - static void SetInstance(wxAppConsole *app) { ms_appInstance = app; } - - - // command line arguments (public for backwards compatibility) - int argc; - wxChar **argv; - -protected: - // the function which creates the traits object when GetTraits() needs it - // for the first time - virtual wxAppTraits *CreateTraits(); - - - // function used for dynamic wxApp creation - static wxAppInitializerFunction ms_appInitFn; - - // the one and only global application object - static wxAppConsole *ms_appInstance; - - - // application info (must be set from the user code) - wxString m_vendorName, // vendor name (ACME Inc) - m_appName, // app name - m_className; // class name - - // the class defining the application behaviour, NULL initially and created - // by GetTraits() when first needed - wxAppTraits *m_traits; - - - // the application object is a singleton anyhow, there is no sense in - // copying it - DECLARE_NO_COPY_CLASS(wxAppConsole) -}; - -// ---------------------------------------------------------------------------- -// wxAppBase: the common part of wxApp implementations for all platforms -// ---------------------------------------------------------------------------- - -#if wxUSE_GUI - -class WXDLLIMPEXP_CORE wxAppBase : public wxAppConsole -{ -public: - wxAppBase(); - virtual ~wxAppBase(); - - // the virtual functions which may/must be overridden in the derived class - // ----------------------------------------------------------------------- - - // very first initialization function - // - // Override: very rarely - virtual bool Initialize(int& argc, wxChar **argv); - - // a platform-dependent version of OnInit(): the code here is likely to - // depend on the toolkit. default version does nothing. - // - // Override: rarely. - virtual bool OnInitGui(); - - // called to start program execution - the default version just enters - // the main GUI loop in which events are received and processed until - // the last window is not deleted (if GetExitOnFrameDelete) or - // ExitMainLoop() is called. In console mode programs, the execution - // of the program really starts here - // - // Override: rarely in GUI applications, always in console ones. - virtual int OnRun(); - - // a matching function for OnInit() - virtual int OnExit(); - - // very last clean up function - // - // Override: very rarely - virtual void CleanUp(); - - - // the worker functions - usually not used directly by the user code - // ----------------------------------------------------------------- - - // return true if we're running main loop, i.e. if the events can - // (already) be dispatched - static bool IsMainLoopRunning() - { - wxAppBase *app = wx_static_cast(wxAppBase *, GetInstance()); - return app && app->m_mainLoop != NULL; - } - - // execute the main GUI loop, the function returns when the loop ends - virtual int MainLoop(); - - // exit the main loop thus terminating the application - virtual void Exit(); - - // exit the main GUI loop during the next iteration (i.e. it does not - // stop the program immediately!) - virtual void ExitMainLoop(); - - // returns true if there are unprocessed events in the event queue - virtual bool Pending(); - - // process the first event in the event queue (blocks until an event - // appears if there are none currently, use Pending() if this is not - // wanted), returns false if the event loop should stop and true - // otherwise - virtual bool Dispatch(); - - // process all currently pending events right now - // - // it is an error to call Yield() recursively unless the value of - // onlyIfNeeded is true - // - // WARNING: this function is dangerous as it can lead to unexpected - // reentrancies (i.e. when called from an event handler it - // may result in calling the same event handler again), use - // with _extreme_ care or, better, don't use at all! - virtual bool Yield(bool onlyIfNeeded = false) = 0; - - // this virtual function is called in the GUI mode when the application - // becomes idle and normally just sends wxIdleEvent to all interested - // parties - // - // it should return true if more idle events are needed, false if not - virtual bool ProcessIdle(); - - // Send idle event to window and all subwindows - // Returns true if more idle time is requested. - virtual bool SendIdleEvents(wxWindow* win, wxIdleEvent& event); - - -#if wxUSE_EXCEPTIONS - // Function called if an uncaught exception is caught inside the main - // event loop: it may return true to continue running the event loop or - // false to stop it (in the latter case it may rethrow the exception as - // well) - virtual bool OnExceptionInMainLoop(); -#endif // wxUSE_EXCEPTIONS - - - // top level window functions - // -------------------------- - - // return true if our app has focus - virtual bool IsActive() const { return m_isActive; } - - // set the "main" top level window - void SetTopWindow(wxWindow *win) { m_topWindow = win; } - - // return the "main" top level window (if it hadn't been set previously - // with SetTopWindow(), will return just some top level window and, if - // there are none, will return NULL) - virtual wxWindow *GetTopWindow() const; - - // control the exit behaviour: by default, the program will exit the - // main loop (and so, usually, terminate) when the last top-level - // program window is deleted. Beware that if you disable this behaviour - // (with SetExitOnFrameDelete(false)), you'll have to call - // ExitMainLoop() explicitly from somewhere. - void SetExitOnFrameDelete(bool flag) - { m_exitOnFrameDelete = flag ? Yes : No; } - bool GetExitOnFrameDelete() const - { return m_exitOnFrameDelete == Yes; } - - - // display mode, visual, printing mode, ... - // ------------------------------------------------------------------------ - - // Get display mode that is used use. This is only used in framebuffer - // wxWin ports (such as wxMGL or 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 - // wxApp::OnInitGui - virtual bool SetDisplayMode(const wxVideoMode& WXUNUSED(info)) { return true; } - - // set use of best visual flag (see below) - void SetUseBestVisual( bool flag, bool forceTrueColour = false ) - { m_useBestVisual = flag; m_forceTrueColour = forceTrueColour; } - bool GetUseBestVisual() const { return m_useBestVisual; } - - // set/get printing mode: see wxPRINT_XXX constants. - // - // default behaviour is the normal one for Unix: always use PostScript - // printing. - virtual void SetPrintMode(int WXUNUSED(mode)) { } - int GetPrintMode() const { return wxPRINT_POSTSCRIPT; } - - // Return the layout direction for the current locale or wxLayout_Default - // if it's unknown - virtual wxLayoutDirection GetLayoutDirection() const; - - - // command line parsing (GUI-specific) - // ------------------------------------------------------------------------ - -#if wxUSE_CMDLINE_PARSER - virtual bool OnCmdLineParsed(wxCmdLineParser& parser); - virtual void OnInitCmdLine(wxCmdLineParser& parser); -#endif - - // miscellaneous other stuff - // ------------------------------------------------------------------------ - - // called by toolkit-specific code to set the app status: active (we have - // focus) or not and also the last window which had focus before we were - // deactivated - virtual void SetActive(bool isActive, wxWindow *lastFocus); - -#if WXWIN_COMPATIBILITY_2_6 - // OBSOLETE: don't use, always returns true - // - // returns true if the program is successfully initialized - wxDEPRECATED( bool Initialized() ); -#endif // WXWIN_COMPATIBILITY_2_6 - - // perform standard OnIdle behaviour, ensure that this is always called - void OnIdle(wxIdleEvent& event); - - -protected: - // delete all objects in wxPendingDelete list - void DeletePendingObjects(); - - // override base class method to use GUI traits - virtual wxAppTraits *CreateTraits(); - - - // the main event loop of the application (may be NULL if the loop hasn't - // been started yet or has already terminated) - wxEventLoop *m_mainLoop; - - // the main top level window (may be NULL) - wxWindow *m_topWindow; - - // if Yes, exit the main loop when the last top level window is deleted, if - // No don't do it and if Later -- only do it once we reach our OnRun() - // - // the explanation for using this strange scheme is given in appcmn.cpp - enum - { - Later = -1, - No, - Yes - } m_exitOnFrameDelete; - - // true if the app wants to use the best visual on systems where - // more than one are available (Sun, SGI, XFree86 4.0 ?) - bool m_useBestVisual; - // force TrueColour just in case "best" isn't TrueColour - bool m_forceTrueColour; - - // does any of our windows have focus? - bool m_isActive; - - - DECLARE_NO_COPY_CLASS(wxAppBase) -}; - -#if WXWIN_COMPATIBILITY_2_6 - inline bool wxAppBase::Initialized() { return true; } -#endif // WXWIN_COMPATIBILITY_2_6 - -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// now include the declaration of the real class -// ---------------------------------------------------------------------------- - -#if wxUSE_GUI - #if defined(__WXPALMOS__) - #include "wx/palmos/app.h" - #elif 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__) - #include "wx/gtk/app.h" - #elif defined(__WXGTK__) - #include "wx/gtk1/app.h" - #elif defined(__WXX11__) - #include "wx/x11/app.h" - #elif defined(__WXMAC__) - #include "wx/mac/app.h" - #elif defined(__WXCOCOA__) - #include "wx/cocoa/app.h" - #elif defined(__WXPM__) - #include "wx/os2/app.h" - #endif -#else // !GUI - // allow using just wxApp (instead of wxAppConsole) in console programs - typedef wxAppConsole wxApp; -#endif // GUI/!GUI - -// ---------------------------------------------------------------------------- -// the global data -// ---------------------------------------------------------------------------- - -// for compatibility, we define this macro to access the global application -// object of type wxApp -// -// note that instead of using of wxTheApp in application code you should -// consider using DECLARE_APP() after which you may call wxGetApp() which will -// return the object of the correct type (i.e. MyApp and not wxApp) -// -// the cast is safe as in GUI build we only use wxApp, not wxAppConsole, and in -// console mode it does nothing at all -#define wxTheApp wx_static_cast(wxApp*, wxApp::GetInstance()) - -// ---------------------------------------------------------------------------- -// global functions -// ---------------------------------------------------------------------------- - -// event loop related functions only work in GUI programs -// ------------------------------------------------------ - -// Force an exit from main loop -extern void WXDLLIMPEXP_BASE wxExit(); - -// avoid redeclaring this function here if it had been already declated by -// wx/utils.h, this results in warnings from g++ with -Wredundant-decls -#ifndef wx_YIELD_DECLARED -#define wx_YIELD_DECLARED - -// Yield to other apps/messages -extern bool WXDLLIMPEXP_BASE wxYield(); - -#endif // wx_YIELD_DECLARED - -// Yield to other apps/messages -extern void WXDLLIMPEXP_BASE wxWakeUpIdle(); - -// ---------------------------------------------------------------------------- -// macros for dynamic creation of the application object -// ---------------------------------------------------------------------------- - -// Having a global instance of this class allows wxApp to be aware of the app -// creator function. wxApp can then call this function to create a new app -// object. Convoluted, but necessary. - -class WXDLLIMPEXP_BASE wxAppInitializer -{ -public: - wxAppInitializer(wxAppInitializerFunction fn) - { wxApp::SetInitializerFunction(fn); } -}; - -// the code below defines a IMPLEMENT_WXWIN_MAIN macro which you can use if -// your compiler really, really wants main() to be in your main program (e.g. -// hello.cpp). Now IMPLEMENT_APP should add this code if required. - -#define IMPLEMENT_WXWIN_MAIN_CONSOLE \ - int main(int argc, char **argv) { return wxEntry(argc, argv); } - -// port-specific header could have defined it already in some special way -#ifndef IMPLEMENT_WXWIN_MAIN - #define IMPLEMENT_WXWIN_MAIN IMPLEMENT_WXWIN_MAIN_CONSOLE -#endif // defined(IMPLEMENT_WXWIN_MAIN) - -#ifdef __WXUNIVERSAL__ - #include "wx/univ/theme.h" - - #ifdef wxUNIV_DEFAULT_THEME - #define IMPLEMENT_WX_THEME_SUPPORT \ - WX_USE_THEME(wxUNIV_DEFAULT_THEME); - #else - #define IMPLEMENT_WX_THEME_SUPPORT - #endif -#else - #define IMPLEMENT_WX_THEME_SUPPORT -#endif - -// Use this macro if you want to define your own main() or WinMain() function -// and call wxEntry() from there. -#define IMPLEMENT_APP_NO_MAIN(appname) \ - wxAppConsole *wxCreateApp() \ - { \ - wxAppConsole::CheckBuildOptions(WX_BUILD_OPTIONS_SIGNATURE, \ - "your program"); \ - return new appname; \ - } \ - wxAppInitializer \ - wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp); \ - DECLARE_APP(appname) \ - appname& wxGetApp() { return *wx_static_cast(appname*, wxApp::GetInstance()); } - -// Same as IMPLEMENT_APP() normally but doesn't include themes support in -// wxUniversal builds -#define IMPLEMENT_APP_NO_THEMES(appname) \ - IMPLEMENT_APP_NO_MAIN(appname) \ - IMPLEMENT_WXWIN_MAIN - -// Use this macro exactly once, the argument is the name of the wxApp-derived -// class which is the class of your application. -#define IMPLEMENT_APP(appname) \ - IMPLEMENT_APP_NO_THEMES(appname) \ - IMPLEMENT_WX_THEME_SUPPORT - -// Same as IMPLEMENT_APP(), but for console applications. -#define IMPLEMENT_APP_CONSOLE(appname) \ - IMPLEMENT_APP_NO_MAIN(appname) \ - IMPLEMENT_WXWIN_MAIN_CONSOLE - -// this macro can be used multiple times and just allows you to use wxGetApp() -// function -#define DECLARE_APP(appname) extern appname& wxGetApp(); - - -// declare the stuff defined by IMPLEMENT_APP() macro, it's not really needed -// anywhere else but at the very least it suppresses icc warnings about -// defining extern symbols without prior declaration, and it shouldn't do any -// harm -extern wxAppConsole *wxCreateApp(); -extern wxAppInitializer wxTheAppInitializer; - -#endif // _WX_APP_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/apptrait.h b/desmume/src/windows/wx/include/wx/apptrait.h deleted file mode 100644 index 3bb91f520..000000000 --- a/desmume/src/windows/wx/include/wx/apptrait.h +++ /dev/null @@ -1,272 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/apptrait.h -// Purpose: declaration of wxAppTraits and derived classes -// Author: Vadim Zeitlin -// Modified by: -// Created: 19.06.2003 -// RCS-ID: $Id: apptrait.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_APPTRAIT_H_ -#define _WX_APPTRAIT_H_ - -#include "wx/string.h" -#include "wx/platinfo.h" - -class WXDLLIMPEXP_FWD_BASE wxObject; -class WXDLLIMPEXP_FWD_BASE wxAppTraits; -#if wxUSE_FONTMAP - class WXDLLIMPEXP_FWD_CORE wxFontMapper; -#endif // wxUSE_FONTMAP -class WXDLLIMPEXP_FWD_BASE wxLog; -class WXDLLIMPEXP_FWD_BASE wxMessageOutput; -class WXDLLIMPEXP_FWD_CORE wxRendererNative; -class WXDLLIMPEXP_FWD_BASE wxString; - -class GSocketGUIFunctionsTable; - - -// ---------------------------------------------------------------------------- -// wxAppTraits: this class defines various configurable aspects of wxApp -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_BASE wxStandardPathsBase; - -class WXDLLIMPEXP_BASE wxAppTraitsBase -{ -public: - // needed since this class declares virtual members - virtual ~wxAppTraitsBase() { } - - // hooks for creating the global objects, may be overridden by the user - // ------------------------------------------------------------------------ - -#if wxUSE_LOG - // create the default log target - virtual wxLog *CreateLogTarget() = 0; -#endif // wxUSE_LOG - - // create the global object used for printing out messages - virtual wxMessageOutput *CreateMessageOutput() = 0; - -#if wxUSE_FONTMAP - // create the global font mapper object used for encodings/charset mapping - virtual wxFontMapper *CreateFontMapper() = 0; -#endif // wxUSE_FONTMAP - - // get the renderer to use for drawing the generic controls (return value - // may be NULL in which case the default renderer for the current platform - // is used); this is used in GUI only and always returns NULL in console - // - // NB: returned pointer will be deleted by the caller - virtual wxRendererNative *CreateRenderer() = 0; - -#if wxUSE_STDPATHS - // wxStandardPaths object is normally the same for wxBase and wxGUI - // except in the case of wxMac and wxCocoa - virtual wxStandardPathsBase& GetStandardPaths(); -#endif // wxUSE_STDPATHS - - // functions abstracting differences between GUI and console modes - // ------------------------------------------------------------------------ - -#ifdef __WXDEBUG__ - // show the assert dialog with the specified message in GUI or just print - // the string to stderr in console mode - // - // base class version has an implementation (in spite of being pure - // virtual) in base/appbase.cpp which can be called as last resort. - // - // return true to suppress subsequent asserts, false to continue as before - virtual bool ShowAssertDialog(const wxString& msg) = 0; -#endif // __WXDEBUG__ - - // return true if fprintf(stderr) goes somewhere, false otherwise - virtual bool HasStderr() = 0; - - // managing "pending delete" list: in GUI mode we can't immediately delete - // some objects because there may be unprocessed events for them and so we - // only do it during the next idle loop iteration while this is, of course, - // unnecessary in wxBase, so we have a few functions to abstract these - // operations - - // add the object to the pending delete list in GUI, delete it immediately - // in wxBase - virtual void ScheduleForDestroy(wxObject *object) = 0; - - // remove this object from the pending delete list in GUI, do nothing in - // wxBase - virtual void RemoveFromPendingDelete(wxObject *object) = 0; - -#if wxUSE_SOCKETS - // return table of GUI callbacks for GSocket code or NULL in wxBase. This - // is needed because networking classes are in their own library and so - // they can't directly call GUI functions (the same net library can be - // used in both GUI and base apps). To complicate it further, GUI library - // ("wxCore") doesn't depend on networking library and so only a functions - // table can be passed around - virtual GSocketGUIFunctionsTable* GetSocketGUIFunctionsTable() = 0; -#endif - - // return information about the (native) toolkit currently used and its - // runtime (not compile-time) version. - // returns wxPORT_BASE for console applications and one of the remaining - // wxPORT_* values for GUI applications. - virtual wxPortId GetToolkitVersion(int *majVer, int *minVer) const = 0; - - // return true if the port is using wxUniversal for the GUI, false if not - virtual bool IsUsingUniversalWidgets() const = 0; - - // return the name of the Desktop Environment such as - // "KDE" or "GNOME". May return an empty string. - virtual wxString GetDesktopEnvironment() const { return wxEmptyString; } - -protected: -#if wxUSE_STACKWALKER && defined( __WXDEBUG__ ) - // utility function: returns the stack frame as a plain wxString - virtual wxString GetAssertStackTrace(); -#endif -}; - -// ---------------------------------------------------------------------------- -// include the platform-specific version of the class -// ---------------------------------------------------------------------------- - -// 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__) - #include "wx/msw/apptbase.h" -#elif defined(__UNIX__) && !defined(__EMX__) - #include "wx/unix/apptbase.h" -#elif defined(__WXMAC__) - #include "wx/mac/apptbase.h" -#elif defined(__OS2__) - #include "wx/os2/apptbase.h" -#else // no platform-specific methods to add to wxAppTraits - // wxAppTraits must be a class because it was forward declared as class - class WXDLLIMPEXP_BASE wxAppTraits : public wxAppTraitsBase - { - }; -#endif // platform - -// ============================================================================ -// standard traits for console and GUI applications -// ============================================================================ - -// ---------------------------------------------------------------------------- -// wxConsoleAppTraitsBase: wxAppTraits implementation for the console apps -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxConsoleAppTraitsBase : public wxAppTraits -{ -public: -#if wxUSE_LOG - virtual wxLog *CreateLogTarget(); -#endif // wxUSE_LOG - virtual wxMessageOutput *CreateMessageOutput(); -#if wxUSE_FONTMAP - virtual wxFontMapper *CreateFontMapper(); -#endif // wxUSE_FONTMAP - virtual wxRendererNative *CreateRenderer(); -#if wxUSE_SOCKETS - virtual GSocketGUIFunctionsTable* GetSocketGUIFunctionsTable(); -#endif - -#ifdef __WXDEBUG__ - virtual bool ShowAssertDialog(const wxString& msg); -#endif // __WXDEBUG__ - virtual bool HasStderr(); - - virtual void ScheduleForDestroy(wxObject *object); - virtual void RemoveFromPendingDelete(wxObject *object); - - // the GetToolkitVersion for console application is always the same - virtual wxPortId GetToolkitVersion(int *verMaj, int *verMin) const - { - // no toolkits (wxBase is for console applications without GUI support) - // NB: zero means "no toolkit", -1 means "not initialized yet" - // so we must use zero here! - if (verMaj) *verMaj = 0; - if (verMin) *verMin = 0; - return wxPORT_BASE; - } - - virtual bool IsUsingUniversalWidgets() const { return false; } -}; - -// ---------------------------------------------------------------------------- -// wxGUIAppTraitsBase: wxAppTraits implementation for the GUI apps -// ---------------------------------------------------------------------------- - -#if wxUSE_GUI - -class WXDLLEXPORT wxGUIAppTraitsBase : public wxAppTraits -{ -public: -#if wxUSE_LOG - virtual wxLog *CreateLogTarget(); -#endif // wxUSE_LOG - virtual wxMessageOutput *CreateMessageOutput(); -#if wxUSE_FONTMAP - virtual wxFontMapper *CreateFontMapper(); -#endif // wxUSE_FONTMAP - virtual wxRendererNative *CreateRenderer(); -#if wxUSE_SOCKETS - virtual GSocketGUIFunctionsTable* GetSocketGUIFunctionsTable(); -#endif - -#ifdef __WXDEBUG__ - virtual bool ShowAssertDialog(const wxString& msg); -#endif // __WXDEBUG__ - virtual bool HasStderr(); - - virtual void ScheduleForDestroy(wxObject *object); - virtual void RemoveFromPendingDelete(wxObject *object); - - virtual bool IsUsingUniversalWidgets() const - { - #ifdef __WXUNIVERSAL__ - return true; - #else - return false; - #endif - } -}; - -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// include the platform-specific version of the classes above -// ---------------------------------------------------------------------------- - -// 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__) - #include "wx/msw/apptrait.h" -#elif defined(__OS2__) - #include "wx/os2/apptrait.h" -#elif defined(__UNIX__) - #include "wx/unix/apptrait.h" -#elif defined(__WXMAC__) - #include "wx/mac/apptrait.h" -#elif defined(__DOS__) - #include "wx/msdos/apptrait.h" -#else - #if wxUSE_GUI - class wxGUIAppTraits : public wxGUIAppTraitsBase - { - }; - #endif // wxUSE_GUI - class wxConsoleAppTraits: public wxConsoleAppTraitsBase - { - }; -#endif // platform - -#endif // _WX_APPTRAIT_H_ - diff --git a/desmume/src/windows/wx/include/wx/archive.h b/desmume/src/windows/wx/include/wx/archive.h deleted file mode 100644 index 43b9ec025..000000000 --- a/desmume/src/windows/wx/include/wx/archive.h +++ /dev/null @@ -1,381 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/archive.h -// Purpose: Streams for archive formats -// Author: Mike Wetherell -// RCS-ID: $Id: archive.h 43445 2006-11-16 14:30:20Z MW $ -// Copyright: (c) 2004 Mike Wetherell -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ARCHIVE_H__ -#define _WX_ARCHIVE_H__ - -#include "wx/defs.h" - -#if wxUSE_STREAMS && wxUSE_ARCHIVE_STREAMS - -#include "wx/stream.h" -#include "wx/filename.h" - - -///////////////////////////////////////////////////////////////////////////// -// wxArchiveNotifier - -class WXDLLIMPEXP_BASE wxArchiveNotifier -{ -public: - virtual ~wxArchiveNotifier() { } - - virtual void OnEntryUpdated(class wxArchiveEntry& entry) = 0; -}; - - -///////////////////////////////////////////////////////////////////////////// -// wxArchiveEntry -// -// Holds an entry's meta data, such as filename and timestamp. - -class WXDLLIMPEXP_BASE wxArchiveEntry : public wxObject -{ -public: - virtual ~wxArchiveEntry() { } - - virtual wxDateTime GetDateTime() const = 0; - virtual wxFileOffset GetSize() const = 0; - virtual wxFileOffset GetOffset() const = 0; - virtual bool IsDir() const = 0; - virtual bool IsReadOnly() const = 0; - virtual wxString GetInternalName() const = 0; - virtual wxPathFormat GetInternalFormat() const = 0; - virtual wxString GetName(wxPathFormat format = wxPATH_NATIVE) const = 0; - - virtual void SetDateTime(const wxDateTime& dt) = 0; - virtual void SetSize(wxFileOffset size) = 0; - virtual void SetIsDir(bool isDir = true) = 0; - virtual void SetIsReadOnly(bool isReadOnly = true) = 0; - virtual void SetName(const wxString& name, - wxPathFormat format = wxPATH_NATIVE) = 0; - - wxArchiveEntry *Clone() const { return DoClone(); } - - void SetNotifier(wxArchiveNotifier& notifier); - virtual void UnsetNotifier() { m_notifier = NULL; } - -protected: - wxArchiveEntry() : m_notifier(NULL) { } - wxArchiveEntry(const wxArchiveEntry& e) : wxObject(e), m_notifier(NULL) { } - - virtual void SetOffset(wxFileOffset offset) = 0; - virtual wxArchiveEntry* DoClone() const = 0; - - wxArchiveNotifier *GetNotifier() const { return m_notifier; } - wxArchiveEntry& operator=(const wxArchiveEntry& entry); - -private: - wxArchiveNotifier *m_notifier; - - DECLARE_ABSTRACT_CLASS(wxArchiveEntry) -}; - - -///////////////////////////////////////////////////////////////////////////// -// wxArchiveInputStream -// -// GetNextEntry() returns an wxArchiveEntry object containing the meta-data -// for the next entry in the archive (and gives away ownership). Reading from -// the wxArchiveInputStream then returns the entry's data. Eof() becomes true -// after an attempt has been made to read past the end of the entry's data. -// -// When there are no more entries, GetNextEntry() returns NULL and sets Eof(). - -class WXDLLIMPEXP_BASE wxArchiveInputStream : public wxFilterInputStream -{ -public: - typedef wxArchiveEntry entry_type; - - virtual ~wxArchiveInputStream() { } - - virtual bool OpenEntry(wxArchiveEntry& entry) = 0; - virtual bool CloseEntry() = 0; - - wxArchiveEntry *GetNextEntry() { return DoGetNextEntry(); } - - virtual char Peek() { return wxInputStream::Peek(); } - -protected: - wxArchiveInputStream(wxInputStream& stream, wxMBConv& conv); - wxArchiveInputStream(wxInputStream *stream, wxMBConv& conv); - - virtual wxArchiveEntry *DoGetNextEntry() = 0; - - wxMBConv& GetConv() const { return m_conv; } - -private: - wxMBConv& m_conv; -}; - - -///////////////////////////////////////////////////////////////////////////// -// wxArchiveOutputStream -// -// PutNextEntry is used to create a new entry in the output archive, then -// the entry's data is written to the wxArchiveOutputStream. -// -// Only one entry can be open for output at a time; another call to -// PutNextEntry closes the current entry and begins the next. -// -// The overload 'bool PutNextEntry(wxArchiveEntry *entry)' takes ownership -// of the entry object. - -class WXDLLIMPEXP_BASE wxArchiveOutputStream : public wxFilterOutputStream -{ -public: - virtual ~wxArchiveOutputStream() { } - - virtual bool PutNextEntry(wxArchiveEntry *entry) = 0; - - virtual bool PutNextEntry(const wxString& name, - const wxDateTime& dt = wxDateTime::Now(), - wxFileOffset size = wxInvalidOffset) = 0; - - virtual bool PutNextDirEntry(const wxString& name, - const wxDateTime& dt = wxDateTime::Now()) = 0; - - virtual bool CopyEntry(wxArchiveEntry *entry, - wxArchiveInputStream& stream) = 0; - - virtual bool CopyArchiveMetaData(wxArchiveInputStream& stream) = 0; - - virtual bool CloseEntry() = 0; - -protected: - wxArchiveOutputStream(wxOutputStream& stream, wxMBConv& conv); - wxArchiveOutputStream(wxOutputStream *stream, wxMBConv& conv); - - wxMBConv& GetConv() const { return m_conv; } - -private: - wxMBConv& m_conv; -}; - - -///////////////////////////////////////////////////////////////////////////// -// wxArchiveIterator -// -// An input iterator that can be used to transfer an archive's catalog to -// a container. - -#if wxUSE_STL || defined WX_TEST_ARCHIVE_ITERATOR -#include -#include - -template inline -void _wxSetArchiveIteratorValue( - X& val, Y entry, void *WXUNUSED(d)) -{ - val = X(entry); -} -template inline -void _wxSetArchiveIteratorValue( - std::pair& val, Z entry, Z WXUNUSED(d)) -{ - val = std::make_pair(X(entry->GetInternalName()), Y(entry)); -} - -#if defined _MSC_VER && _MSC_VER < 1300 -template -#else -template -#endif -class wxArchiveIterator -{ -public: - typedef std::input_iterator_tag iterator_category; - typedef T value_type; - typedef ptrdiff_t difference_type; - typedef T* pointer; - typedef T& reference; - - wxArchiveIterator() : m_rep(NULL) { } - - wxArchiveIterator(Arc& arc) { - typename Arc::entry_type* entry = arc.GetNextEntry(); - m_rep = entry ? new Rep(arc, entry) : NULL; - } - - wxArchiveIterator(const wxArchiveIterator& it) : m_rep(it.m_rep) { - if (m_rep) - m_rep->AddRef(); - } - - ~wxArchiveIterator() { - if (m_rep) - m_rep->UnRef(); - } - - const T& operator *() const { - return m_rep->GetValue(); - } - - const T* operator ->() const { - return &**this; - } - - wxArchiveIterator& operator =(const wxArchiveIterator& it) { - if (it.m_rep) - it.m_rep.AddRef(); - if (m_rep) - m_rep.UnRef(); - m_rep = it.m_rep; - return *this; - } - - wxArchiveIterator& operator ++() { - m_rep = m_rep->Next(); - return *this; - } - - wxArchiveIterator operator ++(int) { - wxArchiveIterator it(*this); - ++(*this); - return it; - } - - bool operator ==(const wxArchiveIterator& j) const { - return m_rep == j.m_rep; - } - - bool operator !=(const wxArchiveIterator& j) const { - return !(*this == j); - } - -private: - class Rep { - Arc& m_arc; - typename Arc::entry_type* m_entry; - T m_value; - int m_ref; - - public: - Rep(Arc& arc, typename Arc::entry_type* entry) - : m_arc(arc), m_entry(entry), m_value(), m_ref(1) { } - ~Rep() - { delete m_entry; } - - void AddRef() { - m_ref++; - } - - void UnRef() { - if (--m_ref == 0) - delete this; - } - - Rep *Next() { - typename Arc::entry_type* entry = m_arc.GetNextEntry(); - if (!entry) { - UnRef(); - return NULL; - } - if (m_ref > 1) { - m_ref--; - return new Rep(m_arc, entry); - } - delete m_entry; - m_entry = entry; - m_value = T(); - return this; - } - - const T& GetValue() { - if (m_entry) { - _wxSetArchiveIteratorValue(m_value, m_entry, m_entry); - m_entry = NULL; - } - return m_value; - } - } *m_rep; -}; - -typedef wxArchiveIterator wxArchiveIter; -typedef wxArchiveIterator > wxArchivePairIter; - -#endif // wxUSE_STL || defined WX_TEST_ARCHIVE_ITERATOR - - -///////////////////////////////////////////////////////////////////////////// -// wxArchiveClassFactory -// -// A wxArchiveClassFactory instance for a particular archive type allows -// the creation of the other classes that may be needed. - -void WXDLLIMPEXP_BASE wxUseArchiveClasses(); - -class WXDLLIMPEXP_BASE wxArchiveClassFactory : public wxFilterClassFactoryBase -{ -public: - typedef wxArchiveEntry entry_type; - typedef wxArchiveInputStream instream_type; - typedef wxArchiveOutputStream outstream_type; - typedef wxArchiveNotifier notifier_type; -#if wxUSE_STL || defined WX_TEST_ARCHIVE_ITERATOR - typedef wxArchiveIter iter_type; - typedef wxArchivePairIter pairiter_type; -#endif - - virtual ~wxArchiveClassFactory() { } - - wxArchiveEntry *NewEntry() const - { return DoNewEntry(); } - wxArchiveInputStream *NewStream(wxInputStream& stream) const - { return DoNewStream(stream); } - wxArchiveOutputStream *NewStream(wxOutputStream& stream) const - { return DoNewStream(stream); } - wxArchiveInputStream *NewStream(wxInputStream *stream) const - { return DoNewStream(stream); } - wxArchiveOutputStream *NewStream(wxOutputStream *stream) const - { return DoNewStream(stream); } - - virtual wxString GetInternalName( - const wxString& name, - wxPathFormat format = wxPATH_NATIVE) const = 0; - - void SetConv(wxMBConv& conv) { m_pConv = &conv; } - wxMBConv& GetConv() const - { if (m_pConv) return *m_pConv; else return wxConvLocal; } - - static const wxArchiveClassFactory *Find(const wxChar *protocol, - wxStreamProtocolType type - = wxSTREAM_PROTOCOL); - - static const wxArchiveClassFactory *GetFirst(); - const wxArchiveClassFactory *GetNext() const { return m_next; } - - void PushFront() { Remove(); m_next = sm_first; sm_first = this; } - void Remove(); - -protected: - // old compilers don't support covarient returns, so 'Do' methods are - // used to simulate them - virtual wxArchiveEntry *DoNewEntry() const = 0; - virtual wxArchiveInputStream *DoNewStream(wxInputStream& stream) const = 0; - virtual wxArchiveOutputStream *DoNewStream(wxOutputStream& stream) const = 0; - virtual wxArchiveInputStream *DoNewStream(wxInputStream *stream) const = 0; - virtual wxArchiveOutputStream *DoNewStream(wxOutputStream *stream) const = 0; - - wxArchiveClassFactory() : m_pConv(NULL), m_next(this) { } - wxArchiveClassFactory& operator=(const wxArchiveClassFactory& WXUNUSED(f)) - { return *this; } - -private: - wxMBConv *m_pConv; - static wxArchiveClassFactory *sm_first; - wxArchiveClassFactory *m_next; - - DECLARE_ABSTRACT_CLASS(wxArchiveClassFactory) -}; - -#endif // wxUSE_STREAMS && wxUSE_ARCHIVE_STREAMS - -#endif // _WX_ARCHIVE_H__ diff --git a/desmume/src/windows/wx/include/wx/arrimpl.cpp b/desmume/src/windows/wx/include/wx/arrimpl.cpp deleted file mode 100644 index 33e25091b..000000000 --- a/desmume/src/windows/wx/include/wx/arrimpl.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/arrimpl.cpp -// Purpose: helper file for implementation of dynamic lists -// Author: Vadim Zeitlin -// Modified by: -// Created: 16.10.97 -// RCS-ID: $Id: arrimpl.cpp 34241 2005-05-22 12:10:55Z JS $ -// Copyright: (c) 1997 Vadim Zeitlin -// Licence: wxWindows license -/////////////////////////////////////////////////////////////////////////////// - -/***************************************************************************** - * Purpose: implements methods of "template" class declared in * - * DECLARE_OBJARRAY macro and which couldn't be implemented inline * - * (because they need the full definition of type T in scope) * - * * - * Usage: 1) #include dynarray.h * - * 2) WX_DECLARE_OBJARRAY * - * 3) #include arrimpl.cpp * - * 4) WX_DEFINE_OBJARRAY * - *****************************************************************************/ - -// needed to resolve the conflict between global T and macro parameter T - -#define _WX_ERROR_REMOVE2(x) wxT("bad index in ") wxT(#x) wxT("::RemoveAt()") - -// macro implements remaining (not inline) methods of template list -// (it's private to this file) -#undef _DEFINE_OBJARRAY -#define _DEFINE_OBJARRAY(T, name) \ -name::~name() \ -{ \ - Empty(); \ -} \ - \ -void name::DoCopy(const name& src) \ -{ \ - for ( size_t ui = 0; ui < src.size(); ui++ ) \ - Add(src[ui]); \ -} \ - \ -name& name::operator=(const name& src) \ -{ \ - Empty(); \ - DoCopy(src); \ - \ - return *this; \ -} \ - \ -name::name(const name& src) : wxArrayPtrVoid() \ -{ \ - DoCopy(src); \ -} \ - \ -void name::DoEmpty() \ -{ \ - for ( size_t ui = 0; ui < size(); ui++ ) \ - delete (T*)base_array::operator[](ui); \ -} \ - \ -void name::RemoveAt(size_t uiIndex, size_t nRemove) \ -{ \ - wxCHECK_RET( uiIndex < size(), _WX_ERROR_REMOVE2(name) ); \ - \ - for (size_t i = 0; i < nRemove; i++ ) \ - delete (T*)base_array::operator[](uiIndex + i); \ - \ - base_array::erase(begin() + uiIndex, begin() + uiIndex + nRemove); \ -} \ - \ -void name::Add(const T& item, size_t nInsert) \ -{ \ - if (nInsert == 0) \ - return; \ - T* pItem = new T(item); \ - size_t nOldSize = size(); \ - if ( pItem != NULL ) \ - base_array::insert(end(), nInsert, pItem); \ - for (size_t i = 1; i < nInsert; i++) \ - base_array::operator[](nOldSize + i) = new T(item); \ -} \ - \ -void name::Insert(const T& item, size_t uiIndex, size_t nInsert) \ -{ \ - if (nInsert == 0) \ - return; \ - T* pItem = new T(item); \ - if ( pItem != NULL ) \ - base_array::insert(begin() + uiIndex, nInsert, pItem); \ - for (size_t i = 1; i < nInsert; i++) \ - base_array::operator[](uiIndex + i) = new T(item); \ -} \ - \ -int name::Index(const T& Item, bool bFromEnd) const \ -{ \ - if ( bFromEnd ) { \ - if ( size() > 0 ) { \ - size_t ui = size() - 1; \ - do { \ - if ( (T*)base_array::operator[](ui) == &Item ) \ - return wx_static_cast(int, ui); \ - ui--; \ - } \ - while ( ui != 0 ); \ - } \ - } \ - else { \ - for( size_t ui = 0; ui < size(); ui++ ) { \ - if( (T*)base_array::operator[](ui) == &Item ) \ - return wx_static_cast(int, ui); \ - } \ - } \ - \ - return wxNOT_FOUND; \ -} - -// redefine the macro so that now it will generate the class implementation -// old value would provoke a compile-time error if this file is not included -#undef WX_DEFINE_OBJARRAY -#define WX_DEFINE_OBJARRAY(name) _DEFINE_OBJARRAY(_wxObjArray##name, name) diff --git a/desmume/src/windows/wx/include/wx/arrstr.h b/desmume/src/windows/wx/include/wx/arrstr.h deleted file mode 100644 index 0f1b90887..000000000 --- a/desmume/src/windows/wx/include/wx/arrstr.h +++ /dev/null @@ -1,377 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: include/wx/arrstr.h -// Purpose: wxArrayString class -// Author: Mattia Barbon and Vadim Zeitlin -// Modified by: -// Created: 07/07/03 -// RCS-ID: $Id: arrstr.h 56758 2008-11-13 22:32:21Z VS $ -// Copyright: (c) 2003 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ARRSTR_H -#define _WX_ARRSTR_H - -#include "wx/defs.h" -#include "wx/string.h" - -WXDLLIMPEXP_BASE int wxCMPFUNC_CONV wxStringSortAscending(wxString*, wxString*); -WXDLLIMPEXP_BASE int wxCMPFUNC_CONV wxStringSortDescending(wxString*, wxString*); - -#if wxUSE_STL - -#include "wx/dynarray.h" - -typedef int (wxCMPFUNC_CONV *CMPFUNCwxString)(wxString*, wxString*); -typedef wxString _wxArraywxBaseArrayStringBase; -_WX_DECLARE_BASEARRAY_2(_wxArraywxBaseArrayStringBase, wxBaseArrayStringBase, - wxArray_SortFunction, - class WXDLLIMPEXP_BASE); -WX_DEFINE_USER_EXPORTED_TYPEARRAY(wxString, wxArrayStringBase, - wxBaseArrayStringBase, WXDLLIMPEXP_BASE); -_WX_DEFINE_SORTED_TYPEARRAY_2(wxString, wxSortedArrayStringBase, - wxBaseArrayStringBase, = wxStringSortAscending, - class WXDLLIMPEXP_BASE, CMPFUNCwxString); - -class WXDLLIMPEXP_BASE wxArrayString : public wxArrayStringBase -{ -public: - // type of function used by wxArrayString::Sort() - typedef int (wxCMPFUNC_CONV *CompareFunction)(const wxString& first, - const wxString& second); - - wxArrayString() { } - wxArrayString(const wxArrayString& a) : wxArrayStringBase(a) { } - wxArrayString(size_t sz, const wxChar** a); - wxArrayString(size_t sz, const wxString* a); - - int Index(const wxChar* sz, bool bCase = true, bool bFromEnd = false) const; - - void Sort(bool reverseOrder = false); - void Sort(CompareFunction function); - void Sort(CMPFUNCwxString function) { wxArrayStringBase::Sort(function); } - - size_t Add(const wxString& string, size_t copies = 1) - { - wxArrayStringBase::Add(string, copies); - return size() - copies; - } -}; - -class WXDLLIMPEXP_BASE wxSortedArrayString : public wxSortedArrayStringBase -{ -public: - wxSortedArrayString() : wxSortedArrayStringBase(wxStringSortAscending) - { } - wxSortedArrayString(const wxSortedArrayString& array) - : wxSortedArrayStringBase(array) - { } - wxSortedArrayString(const wxArrayString& src) - : wxSortedArrayStringBase(wxStringSortAscending) - { - reserve(src.size()); - - for ( size_t n = 0; n < src.size(); n++ ) - Add(src[n]); - } - - int Index(const wxChar* sz, bool bCase = true, bool bFromEnd = false) const; -}; - -#else // if !wxUSE_STL - -// ---------------------------------------------------------------------------- -// The string array uses it's knowledge of internal structure of the wxString -// class to optimize string storage. Normally, we would store pointers to -// string, but as wxString is, in fact, itself a pointer (sizeof(wxString) is -// sizeof(char *)) we store these pointers instead. The cast to "wxString *" is -// really all we need to turn such pointer into a string! -// -// Of course, it can be called a dirty hack, but we use twice less memory and -// this approach is also more speed efficient, so it's probably worth it. -// -// Usage notes: when a string is added/inserted, a new copy of it is created, -// so the original string may be safely deleted. When a string is retrieved -// from the array (operator[] or Item() method), a reference is returned. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxArrayString -{ -public: - // type of function used by wxArrayString::Sort() - typedef int (wxCMPFUNC_CONV *CompareFunction)(const wxString& first, - const wxString& second); - // type of function used by wxArrayString::Sort(), for compatibility with - // wxArray - typedef int (wxCMPFUNC_CONV *CompareFunction2)(wxString* first, - wxString* second); - - // constructors and destructor - // default ctor - wxArrayString() { Init(false); } - // if autoSort is true, the array is always sorted (in alphabetical order) - // - // NB: the reason for using int and not bool is that like this we can avoid - // using this ctor for implicit conversions from "const char *" (which - // we'd like to be implicitly converted to wxString instead!) - // - // of course, using explicit would be even better - if all compilers - // supported it... - wxArrayString(int autoSort) { Init(autoSort != 0); } - // C string array ctor - wxArrayString(size_t sz, const wxChar** a); - // wxString string array ctor - wxArrayString(size_t sz, const wxString* a); - // copy ctor - wxArrayString(const wxArrayString& array); - // assignment operator - wxArrayString& operator=(const wxArrayString& src); - // not virtual, this class should not be derived from - ~wxArrayString(); - - // memory management - // empties the list, but doesn't release memory - void Empty(); - // empties the list and releases memory - void Clear(); - // preallocates memory for given number of items - void Alloc(size_t nCount); - // minimzes the memory usage (by freeing all extra memory) - void Shrink(); - - // simple accessors - // number of elements in the array - size_t GetCount() const { return m_nCount; } - // is it empty? - bool IsEmpty() const { return m_nCount == 0; } - // number of elements in the array (GetCount is preferred API) - size_t Count() const { return m_nCount; } - - // items access (range checking is done in debug version) - // get item at position uiIndex - wxString& Item(size_t nIndex) const - { - wxASSERT_MSG( nIndex < m_nCount, - _T("wxArrayString: index out of bounds") ); - - return *(wxString *)&(m_pItems[nIndex]); - } - - // same as Item() - wxString& operator[](size_t nIndex) const { return Item(nIndex); } - // get last item - wxString& Last() const - { - wxASSERT_MSG( !IsEmpty(), - _T("wxArrayString: index out of bounds") ); - return Item(Count() - 1); - } - - // return a wxString[], useful for the controls which - // take one in their ctor. You must delete[] it yourself - // once you are done with it. Will return NULL if the - // ArrayString was empty. -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( wxString* GetStringArray() const ); -#endif - - // item management - // Search the element in the array, starting from the beginning if - // bFromEnd is false or from end otherwise. If bCase, comparison is case - // sensitive (default). Returns index of the first item matched or - // wxNOT_FOUND - int Index (const wxChar *sz, bool bCase = true, bool bFromEnd = false) const; - // add new element at the end (if the array is not sorted), return its - // index - size_t Add(const wxString& str, size_t nInsert = 1); - // add new element at given position - void Insert(const wxString& str, size_t uiIndex, size_t nInsert = 1); - // expand the array to have count elements - void SetCount(size_t count); - // remove first item matching this value - void Remove(const wxChar *sz); - // remove item by index -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( void Remove(size_t nIndex, size_t nRemove = 1) ); -#endif - void RemoveAt(size_t nIndex, size_t nRemove = 1); - - // sorting - // sort array elements in alphabetical order (or reversed alphabetical - // order if reverseOrder parameter is true) - void Sort(bool reverseOrder = false); - // sort array elements using specified comparaison function - void Sort(CompareFunction compareFunction); - void Sort(CompareFunction2 compareFunction); - - // comparison - // compare two arrays case sensitively - bool operator==(const wxArrayString& a) const; - // compare two arrays case sensitively - bool operator!=(const wxArrayString& a) const { return !(*this == a); } - - // STL-like interface - typedef wxString value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type* iterator; - typedef const value_type* const_iterator; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef int difference_type; - typedef size_t size_type; - - // TODO: this code duplicates the one in dynarray.h - class reverse_iterator - { - typedef wxString value_type; - typedef value_type* pointer; - typedef value_type& reference; - typedef reverse_iterator itor; - friend itor operator+(int o, const itor& it); - friend itor operator+(const itor& it, int o); - friend itor operator-(const itor& it, int o); - friend difference_type operator -(const itor& i1, const itor& i2); - public: - pointer m_ptr; - reverse_iterator() : m_ptr(NULL) { } - reverse_iterator(pointer ptr) : m_ptr(ptr) { } - reverse_iterator(const itor& it) : m_ptr(it.m_ptr) { } - reference operator*() const { return *m_ptr; } - pointer operator->() const { return m_ptr; } - itor& operator++() { --m_ptr; return *this; } - const itor operator++(int) - { reverse_iterator tmp = *this; --m_ptr; return tmp; } - itor& operator--() { ++m_ptr; return *this; } - const itor operator--(int) { itor tmp = *this; ++m_ptr; return tmp; } - bool operator ==(const itor& it) const { return m_ptr == it.m_ptr; } - bool operator !=(const itor& it) const { return m_ptr != it.m_ptr; } - }; - - class const_reverse_iterator - { - typedef wxString value_type; - typedef const value_type* pointer; - typedef const value_type& reference; - typedef const_reverse_iterator itor; - friend itor operator+(int o, const itor& it); - friend itor operator+(const itor& it, int o); - friend itor operator-(const itor& it, int o); - friend difference_type operator -(const itor& i1, const itor& i2); - public: - pointer m_ptr; - const_reverse_iterator() : m_ptr(NULL) { } - const_reverse_iterator(pointer ptr) : m_ptr(ptr) { } - const_reverse_iterator(const itor& it) : m_ptr(it.m_ptr) { } - const_reverse_iterator(const reverse_iterator& it) : m_ptr(it.m_ptr) { } - reference operator*() const { return *m_ptr; } - pointer operator->() const { return m_ptr; } - itor& operator++() { --m_ptr; return *this; } - const itor operator++(int) - { itor tmp = *this; --m_ptr; return tmp; } - itor& operator--() { ++m_ptr; return *this; } - const itor operator--(int) { itor tmp = *this; ++m_ptr; return tmp; } - bool operator ==(const itor& it) const { return m_ptr == it.m_ptr; } - bool operator !=(const itor& it) const { return m_ptr != it.m_ptr; } - }; - - wxArrayString(const_iterator first, const_iterator last) - { Init(false); assign(first, last); } - wxArrayString(size_type n, const_reference v) { Init(false); assign(n, v); } - void assign(const_iterator first, const_iterator last); - void assign(size_type n, const_reference v) - { clear(); Add(v, n); } - reference back() { return *(end() - 1); } - const_reference back() const { return *(end() - 1); } - iterator begin() { return (wxString *)&(m_pItems[0]); } - const_iterator begin() const { return (wxString *)&(m_pItems[0]); } - size_type capacity() const { return m_nSize; } - void clear() { Clear(); } - bool empty() const { return IsEmpty(); } - iterator end() { return begin() + GetCount(); } - const_iterator end() const { return begin() + GetCount(); } - iterator erase(iterator first, iterator last) - { - size_t idx = first - begin(); - RemoveAt(idx, last - first); - return begin() + idx; - } - iterator erase(iterator it) { return erase(it, it + 1); } - reference front() { return *begin(); } - const_reference front() const { return *begin(); } - void insert(iterator it, size_type n, const_reference v) - { Insert(v, it - begin(), n); } - iterator insert(iterator it, const_reference v = value_type()) - { size_t idx = it - begin(); Insert(v, idx); return begin() + idx; } - void insert(iterator it, const_iterator first, const_iterator last); - size_type max_size() const { return INT_MAX; } - void pop_back() { RemoveAt(GetCount() - 1); } - void push_back(const_reference v) { Add(v); } - reverse_iterator rbegin() { return reverse_iterator(end() - 1); } - const_reverse_iterator rbegin() const; - reverse_iterator rend() { return reverse_iterator(begin() - 1); } - const_reverse_iterator rend() const; - void reserve(size_type n) /* base::reserve*/; - void resize(size_type n, value_type v = value_type()); - size_type size() const { return GetCount(); } - -protected: - void Init(bool autoSort); // common part of all ctors - void Copy(const wxArrayString& src); // copies the contents of another array - -private: - void Grow(size_t nIncrement = 0); // makes array bigger if needed - void Free(); // free all the strings stored - - void DoSort(); // common part of all Sort() variants - - size_t m_nSize, // current size of the array - m_nCount; // current number of elements - - wxChar **m_pItems; // pointer to data - - bool m_autoSort; // if true, keep the array always sorted -}; - -class WXDLLIMPEXP_BASE wxSortedArrayString : public wxArrayString -{ -public: - wxSortedArrayString() : wxArrayString(true) - { } - wxSortedArrayString(const wxArrayString& array) : wxArrayString(true) - { Copy(array); } -}; - -#endif // !wxUSE_STL - -// this class provides a temporary wxString* from a -// wxArrayString -class WXDLLIMPEXP_BASE wxCArrayString -{ -public: - wxCArrayString( const wxArrayString& array ) - : m_array( array ), m_strings( NULL ) - { } - ~wxCArrayString() { delete[] m_strings; } - - size_t GetCount() const { return m_array.GetCount(); } - wxString* GetStrings() - { - if( m_strings ) return m_strings; - size_t count = m_array.GetCount(); - m_strings = new wxString[count]; - for( size_t i = 0; i < count; ++i ) - m_strings[i] = m_array[i]; - return m_strings; - } - -#if wxABI_VERSION >= 20810 - wxString* Release(); -#endif // wxABI_VERSION >= 20810 - -private: - const wxArrayString& m_array; - wxString* m_strings; -}; - -#endif diff --git a/desmume/src/windows/wx/include/wx/artprov.h b/desmume/src/windows/wx/include/wx/artprov.h deleted file mode 100644 index 1d026a74d..000000000 --- a/desmume/src/windows/wx/include/wx/artprov.h +++ /dev/null @@ -1,204 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/artprov.h -// Purpose: wxArtProvider class -// Author: Vaclav Slavik -// Modified by: -// Created: 18/03/2002 -// RCS-ID: $Id: artprov.h 57701 2008-12-31 23:40:06Z VS $ -// Copyright: (c) Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ARTPROV_H_ -#define _WX_ARTPROV_H_ - -#include "wx/string.h" -#include "wx/bitmap.h" -#include "wx/icon.h" - -class WXDLLIMPEXP_FWD_CORE wxArtProvidersList; -class WXDLLIMPEXP_FWD_CORE wxArtProviderCache; -class wxArtProviderModule; - -// ---------------------------------------------------------------------------- -// Types -// ---------------------------------------------------------------------------- - -typedef wxString wxArtClient; -typedef wxString wxArtID; - -#define wxART_MAKE_CLIENT_ID_FROM_STR(id) (id + _T("_C")) -#define wxART_MAKE_CLIENT_ID(id) _T(#id) _T("_C") -#define wxART_MAKE_ART_ID_FROM_STR(id) (id) -#define wxART_MAKE_ART_ID(id) _T(#id) - -// ---------------------------------------------------------------------------- -// Art clients -// ---------------------------------------------------------------------------- - -#define wxART_TOOLBAR wxART_MAKE_CLIENT_ID(wxART_TOOLBAR) -#define wxART_MENU wxART_MAKE_CLIENT_ID(wxART_MENU) -#define wxART_FRAME_ICON wxART_MAKE_CLIENT_ID(wxART_FRAME_ICON) - -#define wxART_CMN_DIALOG wxART_MAKE_CLIENT_ID(wxART_CMN_DIALOG) -#define wxART_HELP_BROWSER wxART_MAKE_CLIENT_ID(wxART_HELP_BROWSER) -#define wxART_MESSAGE_BOX wxART_MAKE_CLIENT_ID(wxART_MESSAGE_BOX) -#define wxART_BUTTON wxART_MAKE_CLIENT_ID(wxART_BUTTON) - -#define wxART_OTHER wxART_MAKE_CLIENT_ID(wxART_OTHER) - -// ---------------------------------------------------------------------------- -// Art IDs -// ---------------------------------------------------------------------------- - -#define wxART_ADD_BOOKMARK wxART_MAKE_ART_ID(wxART_ADD_BOOKMARK) -#define wxART_DEL_BOOKMARK wxART_MAKE_ART_ID(wxART_DEL_BOOKMARK) -#define wxART_HELP_SIDE_PANEL wxART_MAKE_ART_ID(wxART_HELP_SIDE_PANEL) -#define wxART_HELP_SETTINGS wxART_MAKE_ART_ID(wxART_HELP_SETTINGS) -#define wxART_HELP_BOOK wxART_MAKE_ART_ID(wxART_HELP_BOOK) -#define wxART_HELP_FOLDER wxART_MAKE_ART_ID(wxART_HELP_FOLDER) -#define wxART_HELP_PAGE wxART_MAKE_ART_ID(wxART_HELP_PAGE) -#define wxART_GO_BACK wxART_MAKE_ART_ID(wxART_GO_BACK) -#define wxART_GO_FORWARD wxART_MAKE_ART_ID(wxART_GO_FORWARD) -#define wxART_GO_UP wxART_MAKE_ART_ID(wxART_GO_UP) -#define wxART_GO_DOWN wxART_MAKE_ART_ID(wxART_GO_DOWN) -#define wxART_GO_TO_PARENT wxART_MAKE_ART_ID(wxART_GO_TO_PARENT) -#define wxART_GO_HOME wxART_MAKE_ART_ID(wxART_GO_HOME) -#define wxART_FILE_OPEN wxART_MAKE_ART_ID(wxART_FILE_OPEN) -#define wxART_FILE_SAVE wxART_MAKE_ART_ID(wxART_FILE_SAVE) -#define wxART_FILE_SAVE_AS wxART_MAKE_ART_ID(wxART_FILE_SAVE_AS) -#define wxART_PRINT wxART_MAKE_ART_ID(wxART_PRINT) -#define wxART_HELP wxART_MAKE_ART_ID(wxART_HELP) -#define wxART_TIP wxART_MAKE_ART_ID(wxART_TIP) -#define wxART_REPORT_VIEW wxART_MAKE_ART_ID(wxART_REPORT_VIEW) -#define wxART_LIST_VIEW wxART_MAKE_ART_ID(wxART_LIST_VIEW) -#define wxART_NEW_DIR wxART_MAKE_ART_ID(wxART_NEW_DIR) -#define wxART_HARDDISK wxART_MAKE_ART_ID(wxART_HARDDISK) -#define wxART_FLOPPY wxART_MAKE_ART_ID(wxART_FLOPPY) -#define wxART_CDROM wxART_MAKE_ART_ID(wxART_CDROM) -#define wxART_REMOVABLE wxART_MAKE_ART_ID(wxART_REMOVABLE) -#define wxART_FOLDER wxART_MAKE_ART_ID(wxART_FOLDER) -#define wxART_FOLDER_OPEN wxART_MAKE_ART_ID(wxART_FOLDER_OPEN) -#define wxART_GO_DIR_UP wxART_MAKE_ART_ID(wxART_GO_DIR_UP) -#define wxART_EXECUTABLE_FILE wxART_MAKE_ART_ID(wxART_EXECUTABLE_FILE) -#define wxART_NORMAL_FILE wxART_MAKE_ART_ID(wxART_NORMAL_FILE) -#define wxART_TICK_MARK wxART_MAKE_ART_ID(wxART_TICK_MARK) -#define wxART_CROSS_MARK wxART_MAKE_ART_ID(wxART_CROSS_MARK) -#define wxART_ERROR wxART_MAKE_ART_ID(wxART_ERROR) -#define wxART_QUESTION wxART_MAKE_ART_ID(wxART_QUESTION) -#define wxART_WARNING wxART_MAKE_ART_ID(wxART_WARNING) -#define wxART_INFORMATION wxART_MAKE_ART_ID(wxART_INFORMATION) -#define wxART_MISSING_IMAGE wxART_MAKE_ART_ID(wxART_MISSING_IMAGE) - -#define wxART_COPY wxART_MAKE_ART_ID(wxART_COPY) -#define wxART_CUT wxART_MAKE_ART_ID(wxART_CUT) -#define wxART_PASTE wxART_MAKE_ART_ID(wxART_PASTE) -#define wxART_DELETE wxART_MAKE_ART_ID(wxART_DELETE) -#define wxART_NEW wxART_MAKE_ART_ID(wxART_NEW) - -#define wxART_UNDO wxART_MAKE_ART_ID(wxART_UNDO) -#define wxART_REDO wxART_MAKE_ART_ID(wxART_REDO) - -#define wxART_QUIT wxART_MAKE_ART_ID(wxART_QUIT) - -#define wxART_FIND wxART_MAKE_ART_ID(wxART_FIND) -#define wxART_FIND_AND_REPLACE wxART_MAKE_ART_ID(wxART_FIND_AND_REPLACE) - - -// ---------------------------------------------------------------------------- -// wxArtProvider class -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxArtProvider : public wxObject -{ -public: - // Dtor removes the provider from providers stack if it's still on it - virtual ~wxArtProvider(); - - - // Add new provider to the top of providers stack (i.e. the provider will - // be queried first of all). - static void Push(wxArtProvider *provider); - - // Add new provider to the bottom of providers stack (i.e. the provider - // will be queried as the last one). -#if wxABI_VERSION >= 20810 - static void PushBack(wxArtProvider *provider); -#endif - // same as PushBack() - static void Insert(wxArtProvider *provider); - - // Remove latest added provider and delete it. - static bool Pop(); - - // Remove provider from providers stack but don't delete it. - static bool Remove(wxArtProvider *provider); - - // Delete the given provider and remove it from the providers stack. - static bool Delete(wxArtProvider *provider); - - - // Query the providers for bitmap with given ID and return it. Return - // wxNullBitmap if no provider provides it. - static wxBitmap GetBitmap(const wxArtID& id, - const wxArtClient& client = wxART_OTHER, - const wxSize& size = wxDefaultSize); - - // Query the providers for icon with given ID and return it. Return - // wxNullIcon if no provider provides it. - static wxIcon GetIcon(const wxArtID& id, - const wxArtClient& client = wxART_OTHER, - const wxSize& size = wxDefaultSize); - - // Get the size hint of an icon from a specific wxArtClient, queries - // the topmost provider if platform_dependent = false - static wxSize GetSizeHint(const wxArtClient& client, bool platform_dependent = false); - -#if WXWIN_COMPATIBILITY_2_6 - // use the corresponding methods without redundant "Provider" suffix - wxDEPRECATED( static void PushProvider(wxArtProvider *provider) ); - wxDEPRECATED( static void InsertProvider(wxArtProvider *provider) ); - wxDEPRECATED( static bool PopProvider() ); - - // use Delete() if this is what you really need, or just delete the - // provider pointer, do not use Remove() as it does not delete the pointer - // unlike RemoveProvider() which does - wxDEPRECATED( static bool RemoveProvider(wxArtProvider *provider) ); -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - friend class wxArtProviderModule; - // Initializes default provider - static void InitStdProvider(); - // Initializes platform's native provider, if available (e.g. GTK2) - static void InitNativeProvider(); - // Destroy caches & all providers - static void CleanUpProviders(); - - // Get the default size of an icon for a specific client - virtual wxSize DoGetSizeHint(const wxArtClient& client) - { - return GetSizeHint(client, true); - } - - // Derived classes must override this method to create requested - // art resource. This method is called only once per instance's - // lifetime for each requested wxArtID. - virtual wxBitmap CreateBitmap(const wxArtID& WXUNUSED(id), - const wxArtClient& WXUNUSED(client), - const wxSize& WXUNUSED(size)) = 0; - -private: - static void CommonAddingProvider(); - -private: - // list of providers: - static wxArtProvidersList *sm_providers; - // art resources cache (so that CreateXXX is not called that often): - static wxArtProviderCache *sm_cache; - - DECLARE_ABSTRACT_CLASS(wxArtProvider) -}; - - -#endif // _WX_ARTPROV_H_ diff --git a/desmume/src/windows/wx/include/wx/aui/aui.h b/desmume/src/windows/wx/include/wx/aui/aui.h deleted file mode 100644 index 72273dd48..000000000 --- a/desmume/src/windows/wx/include/wx/aui/aui.h +++ /dev/null @@ -1,23 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/aui/aui.h -// Purpose: wxaui: wx advanced user interface - docking window manager -// Author: Benjamin I. Williams -// Modified by: -// Created: 2005-05-17 -// RCS-ID: $Id: aui.h 55195 2008-08-23 06:31:01Z BIW $ -// Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. -// Licence: wxWindows Library Licence, Version 3.1 -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_AUI_H_ -#define _WX_AUI_H_ - -#include "wx/aui/framemanager.h" -#include "wx/aui/dockart.h" -#include "wx/aui/floatpane.h" -#include "wx/aui/auibar.h" -#include "wx/aui/auibook.h" -#include "wx/aui/tabmdi.h" - -#endif // _WX_AUI_H_ - diff --git a/desmume/src/windows/wx/include/wx/aui/auibar.h b/desmume/src/windows/wx/include/wx/aui/auibar.h deleted file mode 100644 index 5ca0e2380..000000000 --- a/desmume/src/windows/wx/include/wx/aui/auibar.h +++ /dev/null @@ -1,684 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/aui/toolbar.h -// Purpose: wxaui: wx advanced user interface - docking window manager -// Author: Benjamin I. Williams -// Modified by: -// Created: 2008-08-04 -// RCS-ID: $Id: auibar.h 55522 2008-09-08 09:54:28Z BIW $ -// Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. -// Licence: wxWindows Library Licence, Version 3.1 -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_AUIBAR_H_ -#define _WX_AUIBAR_H_ - -#include "wx/defs.h" - -#if wxUSE_AUI - -#if wxABI_VERSION >= 20809 - -#include "wx/control.h" - -enum wxAuiToolBarStyle -{ - wxAUI_TB_TEXT = 1 << 0, - wxAUI_TB_NO_TOOLTIPS = 1 << 1, - wxAUI_TB_NO_AUTORESIZE = 1 << 2, - wxAUI_TB_GRIPPER = 1 << 3, - wxAUI_TB_OVERFLOW = 1 << 4, - wxAUI_TB_VERTICAL = 1 << 5, - wxAUI_TB_HORZ_LAYOUT = 1 << 6, - wxAUI_TB_HORZ_TEXT = (wxAUI_TB_HORZ_LAYOUT | wxAUI_TB_TEXT), - wxAUI_TB_DEFAULT_STYLE = 0 -}; - -enum wxAuiToolBarArtSetting -{ - wxAUI_TBART_SEPARATOR_SIZE = 0, - wxAUI_TBART_GRIPPER_SIZE = 1, - wxAUI_TBART_OVERFLOW_SIZE = 2 -}; - -enum wxAuiToolBarToolTextOrientation -{ - wxAUI_TBTOOL_TEXT_LEFT = 0, // unused/unimplemented - wxAUI_TBTOOL_TEXT_RIGHT = 1, - wxAUI_TBTOOL_TEXT_TOP = 2, // unused/unimplemented - wxAUI_TBTOOL_TEXT_BOTTOM = 3 -}; - - -// aui toolbar event class - -class WXDLLIMPEXP_AUI wxAuiToolBarEvent : public wxNotifyEvent -{ -public: - wxAuiToolBarEvent(wxEventType command_type = wxEVT_NULL, - int win_id = 0) - : wxNotifyEvent(command_type, win_id) - { - is_dropdown_clicked = false; - click_pt = wxPoint(-1, -1); - rect = wxRect(-1,-1, 0, 0); - tool_id = -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; - } -#endif - wxEvent *Clone() const { return new wxAuiToolBarEvent(*this); } - - bool IsDropDownClicked() const { return is_dropdown_clicked; } - void SetDropDownClicked(bool c) { is_dropdown_clicked = c; } - - wxPoint GetClickPoint() const { return click_pt; } - void SetClickPoint(const wxPoint& p) { click_pt = p; } - - wxRect GetItemRect() const { return rect; } - void SetItemRect(const wxRect& r) { rect = r; } - - int GetToolId() const { return tool_id; } - void SetToolId(int id) { tool_id = id; } - -private: - - bool is_dropdown_clicked; - wxPoint click_pt; - wxRect rect; - int tool_id; - -#ifndef SWIG -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxAuiToolBarEvent) -#endif -}; - - -class WXDLLIMPEXP_AUI wxAuiToolBarItem -{ - friend class wxAuiToolBar; - -public: - - wxAuiToolBarItem() - { - window = NULL; - sizer_item = NULL; - spacer_pixels = 0; - id = 0; - kind = wxITEM_NORMAL; - state = 0; // normal, enabled - proportion = 0; - active = true; - dropdown = true; - sticky = true; - user_data = 0; - } - - wxAuiToolBarItem(const wxAuiToolBarItem& c) - { - Assign(c); - } - - wxAuiToolBarItem& operator=(const wxAuiToolBarItem& c) - { - Assign(c); - return *this; - } - - 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; - id = c.id; - kind = c.kind; - state = c.state; - proportion = c.proportion; - active = c.active; - dropdown = c.dropdown; - sticky = c.sticky; - user_data = c.user_data; - } - - - void SetWindow(wxWindow* w) { window = w; } - wxWindow* GetWindow() { return window; } - - void SetId(int new_id) { id = new_id; } - int GetId() const { return id; } - - void SetKind(int new_kind) { kind = new_kind; } - int GetKind() const { return kind; } - - void SetState(int new_state) { state = new_state; } - int GetState() const { return state; } - - void SetSizerItem(wxSizerItem* s) { sizer_item = s; } - wxSizerItem* GetSizerItem() const { return sizer_item; } - - void SetLabel(const wxString& s) { label = s; } - const wxString& GetLabel() const { return label; } - - void SetBitmap(const wxBitmap& bmp) { bitmap = bmp; } - const wxBitmap& GetBitmap() const { return bitmap; } - - void SetDisabledBitmap(const wxBitmap& bmp) { disabled_bitmap = bmp; } - const wxBitmap& GetDisabledBitmap() const { return disabled_bitmap; } - - void SetHoverBitmap(const wxBitmap& bmp) { hover_bitmap = bmp; } - const wxBitmap& GetHoverBitmap() const { return hover_bitmap; } - - void SetShortHelp(const wxString& s) { short_help = s; } - const wxString& GetShortHelp() const { return short_help; } - - void SetLongHelp(const wxString& s) { long_help = s; } - const wxString& GetLongHelp() const { return long_help; } - - void SetMinSize(const wxSize& s) { min_size = s; } - const wxSize& GetMinSize() const { return min_size; } - - void SetSpacerPixels(int s) { spacer_pixels = s; } - int GetSpacerPixels() const { return spacer_pixels; } - - void SetProportion(int p) { proportion = p; } - int GetProportion() const { return proportion; } - - void SetActive(bool b) { active = b; } - bool IsActive() const { return active; } - - void SetHasDropDown(bool b) { dropdown = b; } - bool HasDropDown() const { return dropdown; } - - void SetSticky(bool b) { sticky = b; } - bool IsSticky() const { return sticky; } - - void SetUserData(long l) { user_data = l; } - long GetUserData() const { return user_data; } - -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 id; // 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 -}; - -#ifndef SWIG -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiToolBarItem, wxAuiToolBarItemArray, WXDLLIMPEXP_AUI); -#endif - - - - -// tab art class - -class WXDLLIMPEXP_AUI wxAuiToolBarArt -{ -public: - - wxAuiToolBarArt() { } - virtual ~wxAuiToolBarArt() { } - - virtual wxAuiToolBarArt* Clone() = 0; - virtual void SetFlags(unsigned int flags) = 0; - virtual void SetFont(const wxFont& font) = 0; - virtual void SetTextOrientation(int orientation) = 0; - - virtual void DrawBackground( - wxDC& dc, - wxWindow* wnd, - const wxRect& rect) = 0; - - virtual void DrawLabel( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item, - const wxRect& rect) = 0; - - virtual void DrawButton( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item, - const wxRect& rect) = 0; - - virtual void DrawDropDownButton( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item, - const wxRect& rect) = 0; - - virtual void DrawControlLabel( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item, - const wxRect& rect) = 0; - - virtual void DrawSeparator( - wxDC& dc, - wxWindow* wnd, - const wxRect& rect) = 0; - - virtual void DrawGripper( - wxDC& dc, - wxWindow* wnd, - const wxRect& rect) = 0; - - virtual void DrawOverflowButton( - wxDC& dc, - wxWindow* wnd, - const wxRect& rect, - int state) = 0; - - virtual wxSize GetLabelSize( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item) = 0; - - virtual wxSize GetToolSize( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item) = 0; - - virtual int GetElementSize(int element_id) = 0; - virtual void SetElementSize(int element_id, int size) = 0; - - virtual int ShowDropDown( - wxWindow* wnd, - const wxAuiToolBarItemArray& items) = 0; -}; - - - -class WXDLLIMPEXP_AUI wxAuiDefaultToolBarArt : public wxAuiToolBarArt -{ - -public: - - wxAuiDefaultToolBarArt(); - virtual ~wxAuiDefaultToolBarArt(); - - virtual wxAuiToolBarArt* Clone(); - virtual void SetFlags(unsigned int flags); - virtual void SetFont(const wxFont& font); - virtual void SetTextOrientation(int orientation); - - virtual void DrawBackground( - wxDC& dc, - wxWindow* wnd, - const wxRect& rect); - - virtual void DrawLabel( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item, - const wxRect& rect); - - virtual void DrawButton( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item, - const wxRect& rect); - - virtual void DrawDropDownButton( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item, - const wxRect& rect); - - virtual void DrawControlLabel( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item, - const wxRect& rect); - - virtual void DrawSeparator( - wxDC& dc, - wxWindow* wnd, - const wxRect& rect); - - virtual void DrawGripper( - wxDC& dc, - wxWindow* wnd, - const wxRect& rect); - - virtual void DrawOverflowButton( - wxDC& dc, - wxWindow* wnd, - const wxRect& rect, - int state); - - virtual wxSize GetLabelSize( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item); - - virtual wxSize GetToolSize( - wxDC& dc, - wxWindow* wnd, - const wxAuiToolBarItem& item); - - virtual int GetElementSize(int element); - virtual void SetElementSize(int element_id, 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; - wxFont m_font; - unsigned int m_flags; - int m_text_orientation; - - wxPen m_gripper_pen1; - wxPen m_gripper_pen2; - wxPen m_gripper_pen3; - - int m_separator_size; - int m_gripper_size; - int m_overflow_size; -}; - - - - -class WXDLLIMPEXP_AUI wxAuiToolBar : public wxControl -{ -public: - - wxAuiToolBar(wxWindow* parent, - wxWindowID id = -1, - const wxPoint& position = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxAUI_TB_DEFAULT_STYLE); - ~wxAuiToolBar(); - - void SetWindowStyleFlag(long style); - - void SetArtProvider(wxAuiToolBarArt* art); - wxAuiToolBarArt* GetArtProvider() const; - - bool SetFont(const wxFont& font); - - - void AddTool(int tool_id, - const wxString& label, - const wxBitmap& bitmap, - const wxString& short_help_string = wxEmptyString, - wxItemKind kind = wxITEM_NORMAL); - - void AddTool(int tool_id, - const wxString& label, - const wxBitmap& bitmap, - const wxBitmap& disabled_bitmap, - wxItemKind kind, - const wxString& short_help_string, - const wxString& long_help_string, - wxObject* client_data); - - void AddTool(int tool_id, - const wxBitmap& bitmap, - const wxBitmap& disabled_bitmap, - bool toggle = false, - wxObject* client_data = NULL, - const wxString& short_help_string = wxEmptyString, - const wxString& long_help_string = wxEmptyString) - { - AddTool(tool_id, - wxEmptyString, - bitmap, - disabled_bitmap, - toggle ? wxITEM_CHECK : wxITEM_NORMAL, - short_help_string, - long_help_string, - client_data); - } - - void AddLabel(int tool_id, - const wxString& label = wxEmptyString, - const int width = -1); - void AddControl(wxControl* control, - const wxString& label = wxEmptyString); - void AddSeparator(); - void AddSpacer(int pixels); - void AddStretchSpacer(int proportion = 1); - - bool Realize(); - - wxControl* FindControl(int window_id); - wxAuiToolBarItem* FindToolByPosition(wxCoord x, wxCoord y) const; - wxAuiToolBarItem* FindToolByIndex(int idx) const; - wxAuiToolBarItem* FindTool(int tool_id) const; - - void ClearTools() { Clear() ; } - void Clear(); - bool DeleteTool(int tool_id); - bool DeleteByIndex(int tool_id); - - 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; - bool GetToolBarFits() const; - - void SetMargins(const wxSize& size) { SetMargins(size.x, size.x, size.y, size.y); } - void SetMargins(int x, int y) { SetMargins(x, x, y, y); } - void SetMargins(int left, int right, int top, int bottom); - - void SetToolBitmapSize(const wxSize& size); - wxSize GetToolBitmapSize() const; - - bool GetOverflowVisible() const; - void SetOverflowVisible(bool visible); - - bool GetGripperVisible() const; - void SetGripperVisible(bool visible); - - void ToggleTool(int tool_id, bool state); - bool GetToolToggled(int tool_id) const; - - void EnableTool(int tool_id, bool state); - bool GetToolEnabled(int tool_id) const; - - void SetToolDropDown(int tool_id, bool dropdown); - bool GetToolDropDown(int tool_id) const; - - void SetToolBorderPadding(int padding); - int GetToolBorderPadding() const; - - void SetToolTextOrientation(int orientation); - int GetToolTextOrientation() const; - - void SetToolPacking(int packing); - int GetToolPacking() const; - - void SetToolProportion(int tool_id, int proportion); - int GetToolProportion(int tool_id) const; - - void SetToolSeparation(int separation); - int GetToolSeparation() const; - - void SetToolSticky(int tool_id, bool sticky); - bool GetToolSticky(int tool_id) const; - - wxString GetToolLabel(int tool_id) const; - void SetToolLabel(int tool_id, const wxString& label); - - wxBitmap GetToolBitmap(int tool_id) const; - void SetToolBitmap(int tool_id, const wxBitmap& bitmap); - - wxString GetToolShortHelp(int tool_id) const; - void SetToolShortHelp(int tool_id, const wxString& help_string); - - wxString GetToolLongHelp(int tool_id) const; - void SetToolLongHelp(int tool_id, const wxString& help_string); - - void SetCustomOverflowItems(const wxAuiToolBarItemArray& prepend, - const wxAuiToolBarItemArray& append); - -protected: - - virtual void OnCustomRender(wxDC& WXUNUSED(dc), - const wxAuiToolBarItem& WXUNUSED(item), - const wxRect& WXUNUSED(rect)) { } - -protected: - - void DoIdleUpdate(); - void SetOrientation(int orientation); - void SetHoverItem(wxAuiToolBarItem* item); - void SetPressedItem(wxAuiToolBarItem* item); - void RefreshOverflowState(); - - int GetOverflowState() const; - wxRect GetOverflowRect() const; - wxSize GetLabelSize(const wxString& label); - wxAuiToolBarItem* FindToolByPositionWithPacking(wxCoord x, wxCoord y) const; - - void DoSetSize(int x, - int y, - int width, - int height, - int sizeFlags = wxSIZE_AUTO); - -protected: // handlers - - void OnSize(wxSizeEvent& evt); - void OnIdle(wxIdleEvent& evt); - void OnPaint(wxPaintEvent& evt); - void OnEraseBackground(wxEraseEvent& evt); - void OnLeftDown(wxMouseEvent& evt); - void OnLeftUp(wxMouseEvent& evt); - void OnRightDown(wxMouseEvent& evt); - void OnRightUp(wxMouseEvent& evt); - void OnMiddleDown(wxMouseEvent& evt); - void OnMiddleUp(wxMouseEvent& evt); - void OnMotion(wxMouseEvent& evt); - void OnLeaveWindow(wxMouseEvent& evt); - void OnSetCursor(wxSetCursorEvent& evt); - -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 - 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; - - 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; - bool m_dragging; - bool m_gripper_visible; - bool m_overflow_visible; - long m_style; - - DECLARE_EVENT_TABLE() - DECLARE_CLASS(wxAuiToolBar) -}; - - - - -// wx event machinery - -#ifndef SWIG - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG, 0) -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxAuiToolBarEventFunction)(wxAuiToolBarEvent&); - -#define wxAuiToolBarEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxAuiToolBarEventFunction, &func) - -#define EVT_AUITOOLBAR_TOOL_DROPDOWN(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, winid, wxAuiToolBarEventHandler(fn)) -#define EVT_AUITOOLBAR_OVERFLOW_CLICK(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK, winid, wxAuiToolBarEventHandler(fn)) -#define EVT_AUITOOLBAR_RIGHT_CLICK(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, winid, wxAuiToolBarEventHandler(fn)) -#define EVT_AUITOOLBAR_MIDDLE_CLICK(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK, winid, wxAuiToolBarEventHandler(fn)) -#define EVT_AUITOOLBAR_BEGIN_DRAG(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG, winid, wxAuiToolBarEventHandler(fn)) - -#else - -// wxpython/swig event work -%constant wxEventType wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN; -%constant wxEventType wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK; -%constant wxEventType wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK; -%constant wxEventType wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK; -%constant wxEventType wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG; - -%pythoncode { - EVT_AUITOOLBAR_TOOL_DROPDOWN = wx.PyEventBinder( wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, 1 ) - EVT_AUITOOLBAR_OVERFLOW_CLICK = wx.PyEventBinder( wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK, 1 ) - EVT_AUITOOLBAR_RIGHT_CLICK = wx.PyEventBinder( wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, 1 ) - EVT_AUITOOLBAR_MIDDLE_CLICK = wx.PyEventBinder( wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK, 1 ) - EVT_AUITOOLBAR_BEGIN_DRAG = wx.PyEventBinder( wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG, 1 ) -} -#endif // SWIG - -#endif // wxABI_VERSION >= 20809 - -#endif // wxUSE_AUI - -#endif // _WX_AUIBAR_H_ - diff --git a/desmume/src/windows/wx/include/wx/aui/auibook.h b/desmume/src/windows/wx/include/wx/aui/auibook.h deleted file mode 100644 index 0fc290a3c..000000000 --- a/desmume/src/windows/wx/include/wx/aui/auibook.h +++ /dev/null @@ -1,753 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/aui/auibook.h -// Purpose: wxaui: wx advanced user interface - notebook -// Author: Benjamin I. Williams -// Modified by: -// Created: 2006-06-28 -// Copyright: (C) Copyright 2006, Kirix Corporation, All Rights Reserved. -// Licence: wxWindows Library Licence, Version 3.1 -/////////////////////////////////////////////////////////////////////////////// - - - -#ifndef _WX_AUINOTEBOOK_H_ -#define _WX_AUINOTEBOOK_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_AUI - -#include "wx/aui/framemanager.h" -#include "wx/aui/dockart.h" -#include "wx/aui/floatpane.h" -#include "wx/control.h" - - -class wxAuiNotebook; - - -enum wxAuiNotebookOption -{ - wxAUI_NB_TOP = 1 << 0, - wxAUI_NB_LEFT = 1 << 1, // not implemented yet - wxAUI_NB_RIGHT = 1 << 2, // not implemented yet - wxAUI_NB_BOTTOM = 1 << 3, - wxAUI_NB_TAB_SPLIT = 1 << 4, - wxAUI_NB_TAB_MOVE = 1 << 5, - wxAUI_NB_TAB_EXTERNAL_MOVE = 1 << 6, - wxAUI_NB_TAB_FIXED_WIDTH = 1 << 7, - wxAUI_NB_SCROLL_BUTTONS = 1 << 8, - wxAUI_NB_WINDOWLIST_BUTTON = 1 << 9, - wxAUI_NB_CLOSE_BUTTON = 1 << 10, - wxAUI_NB_CLOSE_ON_ACTIVE_TAB = 1 << 11, - wxAUI_NB_CLOSE_ON_ALL_TABS = 1 << 12, - wxAUI_NB_MIDDLE_CLICK_CLOSE = 1 << 13, - - wxAUI_NB_DEFAULT_STYLE = wxAUI_NB_TOP | - wxAUI_NB_TAB_SPLIT | - wxAUI_NB_TAB_MOVE | - wxAUI_NB_SCROLL_BUTTONS | - wxAUI_NB_CLOSE_ON_ACTIVE_TAB | - wxAUI_NB_MIDDLE_CLICK_CLOSE -}; - - - - -// aui notebook event class - -class WXDLLIMPEXP_AUI wxAuiNotebookEvent : public wxNotifyEvent -{ -public: - wxAuiNotebookEvent(wxEventType command_type = wxEVT_NULL, - int win_id = 0) - : wxNotifyEvent(command_type, win_id) - { - old_selection = -1; - selection = -1; - drag_source = NULL; - } -#ifndef SWIG - wxAuiNotebookEvent(const wxAuiNotebookEvent& c) : wxNotifyEvent(c) - { - old_selection = c.old_selection; - selection = c.selection; - drag_source = c.drag_source; - } -#endif - wxEvent *Clone() const { return new wxAuiNotebookEvent(*this); } - - void SetSelection(int s) { selection = s; m_commandInt = s; } - int GetSelection() const { return selection; } - - 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; - -#ifndef SWIG -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxAuiNotebookEvent) -#endif -}; - - -class WXDLLIMPEXP_AUI wxAuiNotebookPage -{ -public: - wxWindow* window; // page's associated window - wxString caption; // caption displayed on the tab - wxBitmap bitmap; // tab's bitmap - wxRect rect; // tab's hit rectangle - bool active; // true if the page is currently active -}; - -class WXDLLIMPEXP_AUI wxAuiTabContainerButton -{ -public: - - int id; // button's id - int cur_state; // 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 - wxRect rect; // button's hit rectangle -}; - - -#ifndef SWIG -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiNotebookPage, wxAuiNotebookPageArray, WXDLLIMPEXP_AUI); -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiTabContainerButton, wxAuiTabContainerButtonArray, WXDLLIMPEXP_AUI); -#endif - - -// tab art class - -class WXDLLIMPEXP_AUI wxAuiTabArt -{ -public: - - wxAuiTabArt() { } - virtual ~wxAuiTabArt() { } - - 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 SetNormalFont(const wxFont& font) = 0; - virtual void SetSelectedFont(const wxFont& font) = 0; - virtual void SetMeasuringFont(const wxFont& font) = 0; - - virtual void DrawBackground( - wxDC& dc, - wxWindow* wnd, - const wxRect& rect) = 0; - - 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; - - virtual void DrawButton( - wxDC& dc, - wxWindow* wnd, - const wxRect& in_rect, - int bitmap_id, - int button_state, - int orientation, - wxRect* out_rect) = 0; - - virtual wxSize GetTabSize( - wxDC& dc, - wxWindow* wnd, - const wxString& caption, - const wxBitmap& bitmap, - bool active, - int close_button_state, - int* x_extent) = 0; - - virtual int ShowDropDown( - wxWindow* wnd, - const wxAuiNotebookPageArray& items, - int active_idx) = 0; - - virtual int GetIndentSize() = 0; - - virtual int GetBestTabCtrlSize( - wxWindow* wnd, - const wxAuiNotebookPageArray& pages, - const wxSize& required_bmp_size) = 0; -}; - - -class WXDLLIMPEXP_AUI wxAuiDefaultTabArt : public wxAuiTabArt -{ - -public: - - wxAuiDefaultTabArt(); - virtual ~wxAuiDefaultTabArt(); - - wxAuiTabArt* Clone(); - void SetFlags(unsigned int flags); - void SetSizingInfo(const wxSize& tab_ctrl_size, - size_t tab_count); - - void SetNormalFont(const wxFont& font); - void SetSelectedFont(const wxFont& font); - void SetMeasuringFont(const wxFont& font); - - void DrawBackground( - wxDC& dc, - wxWindow* wnd, - const wxRect& rect); - - 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); - - void DrawButton( - wxDC& dc, - wxWindow* wnd, - const wxRect& in_rect, - int bitmap_id, - int button_state, - int orientation, - wxRect* out_rect); - - int GetIndentSize(); - - wxSize GetTabSize( - wxDC& dc, - wxWindow* wnd, - const wxString& caption, - const wxBitmap& bitmap, - bool active, - int close_button_state, - int* x_extent); - - int ShowDropDown( - wxWindow* wnd, - const wxAuiNotebookPageArray& items, - int active_idx); - - int GetBestTabCtrlSize(wxWindow* wnd, - const wxAuiNotebookPageArray& pages, - const wxSize& required_bmp_size); - -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; - - int m_fixed_tab_width; - int m_tab_ctrl_height; - unsigned int m_flags; -}; - - -class WXDLLIMPEXP_AUI wxAuiSimpleTabArt : public wxAuiTabArt -{ - -public: - - wxAuiSimpleTabArt(); - virtual ~wxAuiSimpleTabArt(); - - wxAuiTabArt* Clone(); - void SetFlags(unsigned int flags); - - void SetSizingInfo(const wxSize& tab_ctrl_size, - size_t tab_count); - - void SetNormalFont(const wxFont& font); - void SetSelectedFont(const wxFont& font); - void SetMeasuringFont(const wxFont& font); - - void DrawBackground( - wxDC& dc, - wxWindow* wnd, - const wxRect& rect); - - 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); - - void DrawButton( - wxDC& dc, - wxWindow* wnd, - const wxRect& in_rect, - int bitmap_id, - int button_state, - int orientation, - wxRect* out_rect); - - int GetIndentSize(); - - wxSize GetTabSize( - wxDC& dc, - wxWindow* wnd, - const wxString& caption, - const wxBitmap& bitmap, - bool active, - int close_button_state, - int* x_extent); - - int ShowDropDown( - wxWindow* wnd, - const wxAuiNotebookPageArray& items, - int active_idx); - - int GetBestTabCtrlSize(wxWindow* wnd, - const wxAuiNotebookPageArray& pages, - const wxSize& required_bmp_size); - -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; - - int m_fixed_tab_width; - unsigned int m_flags; -}; - - - - - - - - - -class WXDLLIMPEXP_AUI wxAuiTabContainer -{ -public: - - wxAuiTabContainer(); - virtual ~wxAuiTabContainer(); - - void SetArtProvider(wxAuiTabArt* art); - wxAuiTabArt* GetArtProvider() const; - - void SetFlags(unsigned int flags); - unsigned int GetFlags() const; - - 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 RemovePage(wxWindow* page); - bool SetActivePage(wxWindow* page); - bool SetActivePage(size_t page); - void SetNoneActive(); - int GetActivePage() const; - bool TabHitTest(int x, int y, wxWindow** hit) const; - bool ButtonHitTest(int x, int y, wxAuiTabContainerButton** hit) const; - wxWindow* GetWindowFromIdx(size_t idx) const; - int GetIdxFromWindow(wxWindow* page) const; - size_t GetPageCount() const; - 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 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); - - size_t GetTabOffset() const; - void SetTabOffset(size_t offset); - - // Is the tab visible? - bool IsTabVisible(int tabPage, int tabOffset, wxDC* dc, wxWindow* wnd); - - // Make the tab visible if it wasn't already - void MakeTabVisible(int tabPage, wxWindow* win); - -protected: - - virtual void Render(wxDC* dc, wxWindow* wnd); - -protected: - - wxAuiTabArt* m_art; - wxAuiNotebookPageArray m_pages; - wxAuiTabContainerButtonArray m_buttons; - wxAuiTabContainerButtonArray m_tab_close_buttons; - wxRect m_rect; - size_t m_tab_offset; - unsigned int m_flags; -}; - - - -class WXDLLIMPEXP_AUI wxAuiTabCtrl : public wxControl, - public wxAuiTabContainer -{ -public: - - wxAuiTabCtrl(wxWindow* parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0); - - ~wxAuiTabCtrl(); - -#if wxABI_VERSION >= 20805 - bool IsDragging() const { return m_is_dragging; } -#endif - -protected: - - void OnPaint(wxPaintEvent& evt); - void OnEraseBackground(wxEraseEvent& evt); - void OnSize(wxSizeEvent& evt); - void OnLeftDown(wxMouseEvent& evt); - void OnLeftUp(wxMouseEvent& evt); -#if wxABI_VERSION >= 20805 - void OnMiddleDown(wxMouseEvent& evt); - void OnMiddleUp(wxMouseEvent& evt); - void OnRightDown(wxMouseEvent& evt); - void OnRightUp(wxMouseEvent& evt); - void OnLeftDClick(wxMouseEvent& evt); - void OnSetFocus(wxFocusEvent& evt); - void OnKillFocus(wxFocusEvent& evt); - void OnChar(wxKeyEvent& evt); -#endif -#if wxABI_VERSION >= 20809 - void OnCaptureLost(wxMouseCaptureLostEvent& evt); -#endif - void OnMotion(wxMouseEvent& evt); - void OnLeaveWindow(wxMouseEvent& evt); - void OnButton(wxAuiNotebookEvent& evt); - -protected: - - wxPoint m_click_pt; - wxWindow* m_click_tab; - bool m_is_dragging; - wxAuiTabContainerButton* m_hover_button; - wxAuiTabContainerButton* m_pressed_button; - -#ifndef SWIG - DECLARE_CLASS(wxAuiTabCtrl) - DECLARE_EVENT_TABLE() -#endif -}; - - - - -class WXDLLIMPEXP_AUI wxAuiNotebook : public wxControl -{ - -public: - - wxAuiNotebook(); - - wxAuiNotebook(wxWindow* parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxAUI_NB_DEFAULT_STYLE); - - virtual ~wxAuiNotebook(); - - bool Create(wxWindow* parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0); - - void SetWindowStyleFlag(long style); - void SetArtProvider(wxAuiTabArt* art); - wxAuiTabArt* GetArtProvider() const; - - virtual void SetUniformBitmapSize(const wxSize& size); - virtual void SetTabCtrlHeight(int height); - - bool AddPage(wxWindow* page, - const wxString& caption, - bool select = false, - const wxBitmap& bitmap = wxNullBitmap); - - bool InsertPage(size_t page_idx, - wxWindow* page, - const wxString& caption, - bool select = false, - const wxBitmap& bitmap = wxNullBitmap); - - bool DeletePage(size_t page); - bool RemovePage(size_t page); - - size_t GetPageCount() const; - wxWindow* GetPage(size_t page_idx) const; - int GetPageIndex(wxWindow* page_wnd) const; - - bool SetPageText(size_t page, const wxString& text); - wxString GetPageText(size_t page_idx) const; - - bool SetPageBitmap(size_t page, const wxBitmap& bitmap); - wxBitmap GetPageBitmap(size_t page_idx) const; - - size_t SetSelection(size_t new_page); - int GetSelection() const; - - virtual void Split(size_t page, int direction); - -#if wxABI_VERSION >= 20801 - const wxAuiManager& GetAuiManager() const { return m_mgr; } -#endif - -#if wxABI_VERSION >= 20805 - // Sets the normal font - void SetNormalFont(const wxFont& font); - - // Sets the selected tab font - void SetSelectedFont(const wxFont& font); - - // Sets the measuring font - void SetMeasuringFont(const wxFont& font); - - // Sets the tab font - virtual bool SetFont(const wxFont& font); - - // Gets the tab control height - int GetTabCtrlHeight() const; - - // Gets the height of the notebook for a given page height - int GetHeightForPageHeight(int pageHeight); - - // Advances the selection, generation page selection events - void AdvanceSelection(bool forward = true); - - // Shows the window menu - bool ShowWindowMenu(); -#endif - -protected: - - // these can be overridden - virtual void UpdateTabCtrlHeight(); - virtual int CalculateTabCtrlHeight(); - virtual wxSize CalculateNewSplitSize(); - -protected: - - void DoSizing(); - void InitNotebook(long style); - wxAuiTabCtrl* GetTabCtrlFromPoint(const wxPoint& pt); - wxWindow* GetTabFrameFromTabCtrl(wxWindow* tab_ctrl); - wxAuiTabCtrl* GetActiveTabCtrl(); - bool FindTab(wxWindow* page, wxAuiTabCtrl** ctrl, int* idx); - void RemoveEmptyTabFrames(); - void UpdateHintWindowSize(); - -protected: - - void OnChildFocus(wxChildFocusEvent& evt); - void OnRender(wxAuiManagerEvent& evt); - void OnSize(wxSizeEvent& evt); - void OnTabClicked(wxCommandEvent& evt); - void OnTabBeginDrag(wxCommandEvent& evt); - void OnTabDragMotion(wxCommandEvent& evt); - void OnTabEndDrag(wxCommandEvent& evt); - void OnTabButton(wxCommandEvent& evt); -#if wxABI_VERSION >= 20805 - void OnTabMiddleDown(wxCommandEvent& evt); - void OnTabMiddleUp(wxCommandEvent& evt); - void OnTabRightDown(wxCommandEvent& evt); - void OnTabRightUp(wxCommandEvent& evt); - void OnNavigationKey(wxNavigationKeyEvent& event); - void OnTabBgDClick(wxCommandEvent& evt); -#endif - -protected: - - wxAuiManager m_mgr; - wxAuiTabContainer m_tabs; - int m_curpage; - int m_tab_id_counter; - wxWindow* m_dummy_wnd; - - wxSize m_requested_bmp_size; - int m_requested_tabctrl_height; - wxFont m_selected_font; - wxFont m_normal_font; - int m_tab_ctrl_height; - - int m_last_drag_x; - unsigned int m_flags; - -#ifndef SWIG - DECLARE_CLASS(wxAuiNotebook) - DECLARE_EVENT_TABLE() -#endif -}; - - - - -// wx event machinery - -#ifndef SWIG - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_BUTTON, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, 0) -#if wxABI_VERSION >= 20805 - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_DRAG_DONE, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK, 0) -#endif -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxAuiNotebookEventFunction)(wxAuiNotebookEvent&); - -#define wxAuiNotebookEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxAuiNotebookEventFunction, &func) - -#define EVT_AUINOTEBOOK_PAGE_CLOSE(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_PAGE_CLOSED(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_PAGE_CHANGED(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_PAGE_CHANGING(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_BUTTON(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_BUTTON, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_BEGIN_DRAG(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_END_DRAG(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_DRAG_MOTION(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_ALLOW_DND(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, winid, wxAuiNotebookEventHandler(fn)) - -#if wxABI_VERSION >= 20805 -#define EVT_AUINOTEBOOK_TAB_MIDDLE_DOWN(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_TAB_MIDDLE_UP(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_TAB_RIGHT_DOWN(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_TAB_RIGHT_UP(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_DRAG_DONE(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_DRAG_DONE, winid, wxAuiNotebookEventHandler(fn)) -#define EVT_AUINOTEBOOK_BG_DCLICK(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK, winid, wxAuiNotebookEventHandler(fn)) -#endif - -#else - -// wxpython/swig event work -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_BUTTON; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_END_DRAG; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_DRAG_DONE; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN; -%constant wxEventType wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP; - -%pythoncode { - EVT_AUINOTEBOOK_PAGE_CLOSE = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, 1 ) - EVT_AUINOTEBOOK_PAGE_CLOSED = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED, 1 ) - EVT_AUINOTEBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, 1 ) - EVT_AUINOTEBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, 1 ) - EVT_AUINOTEBOOK_BUTTON = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_BUTTON, 1 ) - EVT_AUINOTEBOOK_BEGIN_DRAG = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, 1 ) - EVT_AUINOTEBOOK_END_DRAG = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, 1 ) - EVT_AUINOTEBOOK_DRAG_MOTION = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, 1 ) - EVT_AUINOTEBOOK_ALLOW_DND = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, 1 ) - EVT_AUINOTEBOOK_DRAG_DONE = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_DRAG_DONE, 1 ) - EVT_AUINOTEBOOK_BG_DCLICK = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK, 1 ) - EVT_AUINOTEBOOK_TAB_MIDDLE_DOWN = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, 1 ) - EVT_AUINOTEBOOK_TAB_MIDDLE_UP = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP , 1 ) - EVT_AUINOTEBOOK_TAB_RIGHT_DOWN = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, 1 ) - EVT_AUINOTEBOOK_TAB_RIGHT_UP = wx.PyEventBinder( wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, 1 ) -} -#endif - - -#endif // wxUSE_AUI -#endif // _WX_AUINOTEBOOK_H_ diff --git a/desmume/src/windows/wx/include/wx/aui/dockart.h b/desmume/src/windows/wx/include/wx/aui/dockart.h deleted file mode 100644 index 0c5bfe2a6..000000000 --- a/desmume/src/windows/wx/include/wx/aui/dockart.h +++ /dev/null @@ -1,173 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/aui/dockart.h -// Purpose: wxaui: wx advanced user interface - docking window manager -// Author: Benjamin I. Williams -// Modified by: -// Created: 2005-05-17 -// RCS-ID: $Id: dockart.h 43154 2006-11-07 10:29:02Z BIW $ -// Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. -// Licence: wxWindows Library Licence, Version 3.1 -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DOCKART_H_ -#define _WX_DOCKART_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_AUI - -#include "wx/pen.h" -#include "wx/brush.h" -#include "wx/bitmap.h" -#include "wx/colour.h" - -// dock art provider code - a dock provider provides all drawing -// functionality to the wxAui dock manager. This allows the dock -// manager to have plugable look-and-feels - -class WXDLLIMPEXP_AUI wxAuiDockArt -{ -public: - - wxAuiDockArt() { } - virtual ~wxAuiDockArt() { } - - virtual int GetMetric(int id) = 0; - virtual void SetMetric(int id, int new_val) = 0; - virtual void SetFont(int id, const wxFont& font) = 0; - virtual wxFont GetFont(int id) = 0; - virtual wxColour GetColour(int id) = 0; - virtual void SetColour(int id, const wxColor& colour) = 0; - wxColour GetColor(int id) { return GetColour(id); } - void SetColor(int id, const wxColour& color) { SetColour(id, color); } - - virtual void DrawSash(wxDC& dc, - wxWindow* window, - int orientation, - const wxRect& rect) = 0; - - virtual void DrawBackground(wxDC& dc, - wxWindow* window, - int orientation, - const wxRect& rect) = 0; - - virtual void DrawCaption(wxDC& dc, - wxWindow* window, - const wxString& text, - const wxRect& rect, - wxAuiPaneInfo& pane) = 0; - - virtual void DrawGripper(wxDC& dc, - wxWindow* window, - const wxRect& rect, - wxAuiPaneInfo& pane) = 0; - - virtual void DrawBorder(wxDC& dc, - wxWindow* window, - const wxRect& rect, - wxAuiPaneInfo& pane) = 0; - - virtual void DrawPaneButton(wxDC& dc, - wxWindow* window, - int button, - int button_state, - const wxRect& rect, - wxAuiPaneInfo& pane) = 0; -}; - - -// this is the default art provider for wxAuiManager. Dock art -// can be customized by creating a class derived from this one, -// or replacing this class entirely - -class WXDLLIMPEXP_AUI wxAuiDefaultDockArt : public wxAuiDockArt -{ -public: - - wxAuiDefaultDockArt(); - - int GetMetric(int metric_id); - void SetMetric(int metric_id, int new_val); - wxColour GetColour(int id); - void SetColour(int id, const wxColor& colour); - void SetFont(int id, const wxFont& font); - wxFont GetFont(int id); - - void DrawSash(wxDC& dc, - wxWindow *window, - int orientation, - const wxRect& rect); - - void DrawBackground(wxDC& dc, - wxWindow *window, - int orientation, - const wxRect& rect); - - void DrawCaption(wxDC& dc, - wxWindow *window, - const wxString& text, - const wxRect& rect, - wxAuiPaneInfo& pane); - - void DrawGripper(wxDC& dc, - wxWindow *window, - const wxRect& rect, - wxAuiPaneInfo& pane); - - void DrawBorder(wxDC& dc, - wxWindow *window, - const wxRect& rect, - wxAuiPaneInfo& pane); - - void DrawPaneButton(wxDC& dc, - wxWindow *window, - int button, - int button_state, - const wxRect& rect, - wxAuiPaneInfo& pane); - -protected: - - void DrawCaptionBackground(wxDC& dc, const wxRect& rect, bool active); - -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; -}; - - - -#endif // wxUSE_AUI -#endif //_WX_DOCKART_H_ diff --git a/desmume/src/windows/wx/include/wx/aui/floatpane.h b/desmume/src/windows/wx/include/wx/aui/floatpane.h deleted file mode 100644 index 752959477..000000000 --- a/desmume/src/windows/wx/include/wx/aui/floatpane.h +++ /dev/null @@ -1,81 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/aui/floatpane.h -// Purpose: wxaui: wx advanced user interface - docking window manager -// Author: Benjamin I. Williams -// Modified by: -// Created: 2005-05-17 -// RCS-ID: $Id: floatpane.h 43467 2006-11-17 13:07:01Z BIW $ -// Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. -// Licence: wxWindows Library Licence, Version 3.1 -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FLOATPANE_H_ -#define _WX_FLOATPANE_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_AUI - -#include "wx/frame.h" - -#if defined( __WXMSW__ ) || defined( __WXMAC__ ) || defined( __WXGTK__ ) -#include "wx/minifram.h" -#define wxAuiFloatingFrameBaseClass wxMiniFrame -#else -#define wxAuiFloatingFrameBaseClass wxFrame -#endif - -class WXDLLIMPEXP_AUI wxAuiFloatingFrame : public wxAuiFloatingFrameBaseClass -{ -public: - wxAuiFloatingFrame(wxWindow* parent, - wxAuiManager* owner_mgr, - const wxAuiPaneInfo& pane, - wxWindowID id = wxID_ANY, - long style = wxRESIZE_BORDER | wxSYSTEM_MENU | wxCAPTION | - wxFRAME_NO_TASKBAR | wxFRAME_FLOAT_ON_PARENT | - wxCLIP_CHILDREN - ); - virtual ~wxAuiFloatingFrame(); - void SetPaneWindow(const wxAuiPaneInfo& pane); - wxAuiManager* GetOwnerManager() const; - -protected: - virtual void OnMoveStart(); - virtual void OnMoving(const wxRect& window_rect, wxDirection dir); - virtual void OnMoveFinished(); - -private: - void OnSize(wxSizeEvent& event); - void OnClose(wxCloseEvent& event); - void OnMoveEvent(wxMoveEvent& event); - void OnIdle(wxIdleEvent& event); - void OnActivate(wxActivateEvent& event); - static bool isMouseDown(); - -private: - wxWindow* m_pane_window; // pane window being managed - bool m_solid_drag; // 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; - wxDirection m_lastDirection; - - wxAuiManager* m_owner_mgr; - wxAuiManager m_mgr; - -#ifndef SWIG - DECLARE_EVENT_TABLE() - DECLARE_CLASS(wxAuiFloatingFrame) -#endif // SWIG -}; - -#endif // wxUSE_AUI -#endif //_WX_FLOATPANE_H_ - diff --git a/desmume/src/windows/wx/include/wx/aui/framemanager.h b/desmume/src/windows/wx/include/wx/aui/framemanager.h deleted file mode 100644 index c267ad233..000000000 --- a/desmume/src/windows/wx/include/wx/aui/framemanager.h +++ /dev/null @@ -1,856 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/aui/framemanager.h -// Purpose: wxaui: wx advanced user interface - docking window manager -// Author: Benjamin I. Williams -// Modified by: -// Created: 2005-05-17 -// RCS-ID: $Id: framemanager.h 57885 2009-01-07 14:51:49Z JS $ -// Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. -// Licence: wxWindows Library Licence, Version 3.1 -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FRAMEMANAGER_H_ -#define _WX_FRAMEMANAGER_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_AUI - -#include "wx/dynarray.h" -#include "wx/gdicmn.h" -#include "wx/window.h" -#include "wx/timer.h" -#include "wx/sizer.h" - -enum wxAuiManagerDock -{ - wxAUI_DOCK_NONE = 0, - wxAUI_DOCK_TOP = 1, - wxAUI_DOCK_RIGHT = 2, - wxAUI_DOCK_BOTTOM = 3, - wxAUI_DOCK_LEFT = 4, - wxAUI_DOCK_CENTER = 5, - wxAUI_DOCK_CENTRE = wxAUI_DOCK_CENTER -}; - -enum wxAuiManagerOption -{ - wxAUI_MGR_ALLOW_FLOATING = 1 << 0, - wxAUI_MGR_ALLOW_ACTIVE_PANE = 1 << 1, - wxAUI_MGR_TRANSPARENT_DRAG = 1 << 2, - wxAUI_MGR_TRANSPARENT_HINT = 1 << 3, - wxAUI_MGR_VENETIAN_BLINDS_HINT = 1 << 4, - wxAUI_MGR_RECTANGLE_HINT = 1 << 5, - wxAUI_MGR_HINT_FADE = 1 << 6, - wxAUI_MGR_NO_VENETIAN_BLINDS_FADE = 1 << 7, - wxAUI_MGR_LIVE_RESIZE = 1 << 8, - - wxAUI_MGR_DEFAULT = wxAUI_MGR_ALLOW_FLOATING | - wxAUI_MGR_TRANSPARENT_HINT | - wxAUI_MGR_HINT_FADE | - wxAUI_MGR_NO_VENETIAN_BLINDS_FADE -}; - - -enum wxAuiPaneDockArtSetting -{ - wxAUI_DOCKART_SASH_SIZE = 0, - wxAUI_DOCKART_CAPTION_SIZE = 1, - wxAUI_DOCKART_GRIPPER_SIZE = 2, - wxAUI_DOCKART_PANE_BORDER_SIZE = 3, - wxAUI_DOCKART_PANE_BUTTON_SIZE = 4, - wxAUI_DOCKART_BACKGROUND_COLOUR = 5, - wxAUI_DOCKART_SASH_COLOUR = 6, - wxAUI_DOCKART_ACTIVE_CAPTION_COLOUR = 7, - wxAUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR = 8, - wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR = 9, - wxAUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR = 10, - wxAUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR = 11, - wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR = 12, - wxAUI_DOCKART_BORDER_COLOUR = 13, - wxAUI_DOCKART_GRIPPER_COLOUR = 14, - wxAUI_DOCKART_CAPTION_FONT = 15, - wxAUI_DOCKART_GRADIENT_TYPE = 16 -}; - -enum wxAuiPaneDockArtGradients -{ - wxAUI_GRADIENT_NONE = 0, - wxAUI_GRADIENT_VERTICAL = 1, - wxAUI_GRADIENT_HORIZONTAL = 2 -}; - -enum wxAuiPaneButtonState -{ - wxAUI_BUTTON_STATE_NORMAL = 0, - wxAUI_BUTTON_STATE_HOVER = 1 << 1, - wxAUI_BUTTON_STATE_PRESSED = 1 << 2, - wxAUI_BUTTON_STATE_DISABLED = 1 << 3, - wxAUI_BUTTON_STATE_HIDDEN = 1 << 4, - wxAUI_BUTTON_STATE_CHECKED = 1 << 5 -}; - -enum wxAuiButtonId -{ - wxAUI_BUTTON_CLOSE = 101, - wxAUI_BUTTON_MAXIMIZE_RESTORE = 102, - wxAUI_BUTTON_MINIMIZE = 103, - wxAUI_BUTTON_PIN = 104, - wxAUI_BUTTON_OPTIONS = 105, - wxAUI_BUTTON_WINDOWLIST = 106, - wxAUI_BUTTON_LEFT = 107, - wxAUI_BUTTON_RIGHT = 108, - wxAUI_BUTTON_UP = 109, - wxAUI_BUTTON_DOWN = 110, - wxAUI_BUTTON_CUSTOM1 = 201, - wxAUI_BUTTON_CUSTOM2 = 202, - wxAUI_BUTTON_CUSTOM3 = 203 -}; - -enum wxAuiPaneInsertLevel -{ - wxAUI_INSERT_PANE = 0, - wxAUI_INSERT_ROW = 1, - wxAUI_INSERT_DOCK = 2 -}; - - - - -// forwards and array declarations -class wxAuiDockUIPart; -class wxAuiPaneButton; -class wxAuiPaneInfo; -class wxAuiDockInfo; -class wxAuiDockArt; -class wxAuiManagerEvent; - -#ifndef SWIG -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiDockInfo, wxAuiDockInfoArray, WXDLLIMPEXP_AUI); -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiDockUIPart, wxAuiDockUIPartArray, WXDLLIMPEXP_AUI); -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiPaneButton, wxAuiPaneButtonArray, WXDLLIMPEXP_AUI); -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiPaneInfo, wxAuiPaneInfoArray, WXDLLIMPEXP_AUI); -WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxAuiPaneInfo*, wxAuiPaneInfoPtrArray, class WXDLLIMPEXP_AUI); -WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxAuiDockInfo*, wxAuiDockInfoPtrArray, class WXDLLIMPEXP_AUI); -#endif // SWIG - -extern WXDLLIMPEXP_AUI wxAuiDockInfo wxAuiNullDockInfo; -extern WXDLLIMPEXP_AUI wxAuiPaneInfo wxAuiNullPaneInfo; - - - -class WXDLLIMPEXP_AUI wxAuiPaneInfo -{ -public: - - wxAuiPaneInfo() - { - window = NULL; - frame = NULL; - state = 0; - dock_direction = wxAUI_DOCK_LEFT; - dock_layer = 0; - dock_row = 0; - dock_pos = 0; - floating_pos = wxDefaultPosition; - floating_size = wxDefaultSize; - best_size = wxDefaultSize; - min_size = wxDefaultSize; - max_size = wxDefaultSize; - dock_proportion = 0; - - DefaultPane(); - } - - ~wxAuiPaneInfo() {} - -#ifndef SWIG - wxAuiPaneInfo(const wxAuiPaneInfo& c) - { - name = c.name; - caption = c.caption; - window = c.window; - frame = c.frame; - state = c.state; - dock_direction = c.dock_direction; - dock_layer = c.dock_layer; - dock_row = c.dock_row; - dock_pos = c.dock_pos; - best_size = c.best_size; - min_size = c.min_size; - max_size = c.max_size; - floating_pos = c.floating_pos; - floating_size = c.floating_size; - dock_proportion = c.dock_proportion; - buttons = c.buttons; - rect = c.rect; - } - - wxAuiPaneInfo& operator=(const wxAuiPaneInfo& c) - { - name = c.name; - caption = c.caption; - window = c.window; - frame = c.frame; - state = c.state; - dock_direction = c.dock_direction; - dock_layer = c.dock_layer; - dock_row = c.dock_row; - dock_pos = c.dock_pos; - best_size = c.best_size; - min_size = c.min_size; - max_size = c.max_size; - floating_pos = c.floating_pos; - floating_size = c.floating_size; - dock_proportion = c.dock_proportion; - buttons = c.buttons; - rect = c.rect; - return *this; - } -#endif // SWIG - - // Write the safe parts of a newly loaded PaneInfo structure "source" into "this" - // used on loading perspectives etc. - void SafeSet(wxAuiPaneInfo source) - { - // note source is not passed by reference so we can overwrite, to keep the - // unsafe bits of "dest" - source.window = window; - source.frame = frame; - source.buttons = buttons; - // now assign - *this = source; - } - - bool IsOk() const { return (window != NULL) ? true : false; } - bool IsFixed() const { return !HasFlag(optionResizable); } - bool IsResizable() const { return HasFlag(optionResizable); } - bool IsShown() const { return !HasFlag(optionHidden); } - bool IsFloating() const { return HasFlag(optionFloating); } - bool IsDocked() const { return !HasFlag(optionFloating); } - bool IsToolbar() const { return HasFlag(optionToolbar); } - bool IsTopDockable() const { return HasFlag(optionTopDockable); } - bool IsBottomDockable() const { return HasFlag(optionBottomDockable); } - bool IsLeftDockable() const { return HasFlag(optionLeftDockable); } - bool IsRightDockable() const { return HasFlag(optionRightDockable); } - bool IsFloatable() const { return HasFlag(optionFloatable); } - bool IsMovable() const { return HasFlag(optionMovable); } - bool IsDestroyOnClose() const { return HasFlag(optionDestroyOnClose); } - bool IsMaximized() const { return HasFlag(optionMaximized); } - bool HasCaption() const { return HasFlag(optionCaption); } - bool HasGripper() const { return HasFlag(optionGripper); } - bool HasBorder() const { return HasFlag(optionPaneBorder); } - bool HasCloseButton() const { return HasFlag(buttonClose); } - bool HasMaximizeButton() const { return HasFlag(buttonMaximize); } - bool HasMinimizeButton() const { return HasFlag(buttonMinimize); } - bool HasPinButton() const { return HasFlag(buttonPin); } - bool HasGripperTop() const { return HasFlag(optionGripperTop); } - -#ifdef SWIG - %typemap(out) wxAuiPaneInfo& { $result = $self; Py_INCREF($result); } -#endif - wxAuiPaneInfo& Window(wxWindow* w) { window = w; return *this; } - wxAuiPaneInfo& Name(const wxString& n) { name = n; return *this; } - wxAuiPaneInfo& Caption(const wxString& c) { caption = c; return *this; } - wxAuiPaneInfo& Left() { dock_direction = wxAUI_DOCK_LEFT; return *this; } - wxAuiPaneInfo& Right() { dock_direction = wxAUI_DOCK_RIGHT; return *this; } - wxAuiPaneInfo& Top() { dock_direction = wxAUI_DOCK_TOP; return *this; } - wxAuiPaneInfo& Bottom() { dock_direction = wxAUI_DOCK_BOTTOM; return *this; } - wxAuiPaneInfo& Center() { dock_direction = wxAUI_DOCK_CENTER; return *this; } - wxAuiPaneInfo& Centre() { dock_direction = wxAUI_DOCK_CENTRE; return *this; } - wxAuiPaneInfo& Direction(int direction) { dock_direction = direction; return *this; } - wxAuiPaneInfo& Layer(int layer) { dock_layer = layer; return *this; } - wxAuiPaneInfo& Row(int row) { dock_row = row; return *this; } - wxAuiPaneInfo& Position(int pos) { dock_pos = pos; return *this; } - wxAuiPaneInfo& BestSize(const wxSize& size) { best_size = size; return *this; } - wxAuiPaneInfo& MinSize(const wxSize& size) { min_size = size; return *this; } - wxAuiPaneInfo& MaxSize(const wxSize& size) { max_size = size; return *this; } - wxAuiPaneInfo& BestSize(int x, int y) { best_size.Set(x,y); return *this; } - wxAuiPaneInfo& MinSize(int x, int y) { min_size.Set(x,y); return *this; } - wxAuiPaneInfo& MaxSize(int x, int y) { max_size.Set(x,y); return *this; } - wxAuiPaneInfo& FloatingPosition(const wxPoint& pos) { floating_pos = pos; return *this; } - wxAuiPaneInfo& FloatingPosition(int x, int y) { floating_pos.x = x; floating_pos.y = y; return *this; } - wxAuiPaneInfo& FloatingSize(const wxSize& size) { floating_size = size; return *this; } - wxAuiPaneInfo& FloatingSize(int x, int y) { floating_size.Set(x,y); return *this; } - wxAuiPaneInfo& Fixed() { return SetFlag(optionResizable, false); } - wxAuiPaneInfo& Resizable(bool resizable = true) { return SetFlag(optionResizable, resizable); } - wxAuiPaneInfo& Dock() { return SetFlag(optionFloating, false); } - wxAuiPaneInfo& Float() { return SetFlag(optionFloating, true); } - wxAuiPaneInfo& Hide() { return SetFlag(optionHidden, true); } - wxAuiPaneInfo& Show(bool show = true) { return SetFlag(optionHidden, !show); } - wxAuiPaneInfo& CaptionVisible(bool visible = true) { return SetFlag(optionCaption, visible); } - wxAuiPaneInfo& Maximize() { return SetFlag(optionMaximized, true); } - wxAuiPaneInfo& Restore() { return SetFlag(optionMaximized, false); } - wxAuiPaneInfo& PaneBorder(bool visible = true) { return SetFlag(optionPaneBorder, visible); } - wxAuiPaneInfo& Gripper(bool visible = true) { return SetFlag(optionGripper, visible); } - wxAuiPaneInfo& GripperTop(bool attop = true) { return SetFlag(optionGripperTop, attop); } - wxAuiPaneInfo& CloseButton(bool visible = true) { return SetFlag(buttonClose, visible); } - wxAuiPaneInfo& MaximizeButton(bool visible = true) { return SetFlag(buttonMaximize, visible); } - wxAuiPaneInfo& MinimizeButton(bool visible = true) { return SetFlag(buttonMinimize, visible); } - wxAuiPaneInfo& PinButton(bool visible = true) { return SetFlag(buttonPin, visible); } - wxAuiPaneInfo& DestroyOnClose(bool b = true) { return SetFlag(optionDestroyOnClose, b); } - wxAuiPaneInfo& TopDockable(bool b = true) { return SetFlag(optionTopDockable, b); } - wxAuiPaneInfo& BottomDockable(bool b = true) { return SetFlag(optionBottomDockable, b); } - wxAuiPaneInfo& LeftDockable(bool b = true) { return SetFlag(optionLeftDockable, b); } - wxAuiPaneInfo& RightDockable(bool b = true) { return SetFlag(optionRightDockable, b); } - wxAuiPaneInfo& Floatable(bool b = true) { return SetFlag(optionFloatable, b); } - wxAuiPaneInfo& Movable(bool b = true) { return SetFlag(optionMovable, b); } -#if wxABI_VERSION >= 20807 - wxAuiPaneInfo& DockFixed(bool b = true) { return SetFlag(optionDockFixed, b); } -#endif - - wxAuiPaneInfo& Dockable(bool b = true) - { - return TopDockable(b).BottomDockable(b).LeftDockable(b).RightDockable(b); - } - - wxAuiPaneInfo& DefaultPane() - { - state |= optionTopDockable | optionBottomDockable | - optionLeftDockable | optionRightDockable | - optionFloatable | optionMovable | optionResizable | - optionCaption | optionPaneBorder | buttonClose; - return *this; - } - - wxAuiPaneInfo& CentrePane() { return CenterPane(); } - wxAuiPaneInfo& CenterPane() - { - state = 0; - return Center().PaneBorder().Resizable(); - } - - wxAuiPaneInfo& ToolbarPane() - { - DefaultPane(); - state |= (optionToolbar | optionGripper); - state &= ~(optionResizable | optionCaption); - if (dock_layer == 0) - dock_layer = 10; - return *this; - } - - wxAuiPaneInfo& SetFlag(unsigned int flag, bool option_state) - { - if (option_state) - state |= flag; - else - state &= ~flag; - return *this; - } - - bool HasFlag(unsigned int flag) const - { - return (state & flag) ? true:false; - } - -#ifdef SWIG - %typemap(out) wxAuiPaneInfo& ; -#endif - -public: - - // NOTE: You can add and subtract flags from this list, - // but do not change the values of the flags, because - // they are stored in a binary integer format in the - // perspective string. If you really need to change the - // values around, you'll have to ensure backwards-compatibility - // in the perspective loading code. - enum wxAuiPaneState - { - optionFloating = 1 << 0, - optionHidden = 1 << 1, - optionLeftDockable = 1 << 2, - optionRightDockable = 1 << 3, - optionTopDockable = 1 << 4, - optionBottomDockable = 1 << 5, - optionFloatable = 1 << 6, - optionMovable = 1 << 7, - optionResizable = 1 << 8, - optionPaneBorder = 1 << 9, - optionCaption = 1 << 10, - optionGripper = 1 << 11, - optionDestroyOnClose = 1 << 12, - optionToolbar = 1 << 13, - optionActive = 1 << 14, - optionGripperTop = 1 << 15, - optionMaximized = 1 << 16, - optionDockFixed = 1 << 17, - - buttonClose = 1 << 21, - buttonMaximize = 1 << 22, - buttonMinimize = 1 << 23, - buttonPin = 1 << 24, - - buttonCustom1 = 1 << 26, - buttonCustom2 = 1 << 27, - buttonCustom3 = 1 << 28, - - savedHiddenState = 1 << 30, // used internally - actionPane = 1 << 31 // used internally - }; - -public: - wxString name; // name of the pane - wxString caption; // caption displayed on the window - - wxWindow* window; // window that is in this pane - wxFrame* frame; // floating frame window that holds the pane - unsigned int state; // a combination of wxPaneState values - - int dock_direction; // dock direction (top, bottom, left, right, center) - int dock_layer; // layer number (0 = innermost layer) - int dock_row; // row number on the docking bar (0 = first row) - int dock_pos; // position inside the row (0 = first position) - - wxSize best_size; // size that the layout engine will prefer - wxSize min_size; // minimum size the pane window can tolerate - wxSize max_size; // maximum size the pane window can tolerate - - wxPoint floating_pos; // position while floating - wxSize floating_size; // size while floating - int dock_proportion; // proportion while docked - - wxAuiPaneButtonArray buttons; // buttons on the pane - - wxRect rect; // current rectangle (populated by wxAUI) -}; - - - -class WXDLLIMPEXP_FWD_AUI wxAuiFloatingFrame; - -class WXDLLIMPEXP_AUI wxAuiManager : public wxEvtHandler -{ -friend class wxAuiFloatingFrame; - -public: - - wxAuiManager(wxWindow* managed_wnd = NULL, - unsigned int flags = wxAUI_MGR_DEFAULT); - virtual ~wxAuiManager(); - void UnInit(); - - void SetFlags(unsigned int flags); - unsigned int GetFlags() const; - - void SetManagedWindow(wxWindow* managed_wnd); - wxWindow* GetManagedWindow() const; - - static wxAuiManager* GetManager(wxWindow* window); - - void SetArtProvider(wxAuiDockArt* art_provider); - wxAuiDockArt* GetArtProvider() const; - - wxAuiPaneInfo& GetPane(wxWindow* window); - wxAuiPaneInfo& GetPane(const wxString& name); - wxAuiPaneInfoArray& GetAllPanes(); - - bool AddPane(wxWindow* window, - const wxAuiPaneInfo& pane_info); - - bool AddPane(wxWindow* window, - const wxAuiPaneInfo& pane_info, - const wxPoint& drop_pos); - - 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); - - bool DetachPane(wxWindow* window); - - void Update(); - - wxString SavePaneInfo(wxAuiPaneInfo& pane); - void LoadPaneInfo(wxString pane_part, 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 ClosePane(wxAuiPaneInfo& pane_info); - void MaximizePane(wxAuiPaneInfo& pane_info); - void RestorePane(wxAuiPaneInfo& pane_info); - void RestoreMaximizedPane(); - -public: - - virtual wxAuiFloatingFrame* CreateFloatingFrame(wxWindow* parent, const wxAuiPaneInfo& p); - - void StartPaneDrag( - wxWindow* pane_window, - const wxPoint& offset); - - wxRect CalculateHintRect( - wxWindow* pane_window, - const wxPoint& pt, - const wxPoint& offset); - - void DrawHintRect( - wxWindow* pane_window, - const wxPoint& pt, - const wxPoint& offset); - - virtual void ShowHint(const wxRect& rect); - virtual void HideHint(); - -public: - - // deprecated -- please use SetManagedWindow() and - // and GetManagedWindow() instead - - wxDEPRECATED( void SetFrame(wxFrame* frame) ); - wxDEPRECATED( wxFrame* GetFrame() const ); - -protected: - - void UpdateHintWindowConfig(); - - void DoFrameLayout(); - - void LayoutAddPane(wxSizer* container, - wxAuiDockInfo& dock, - wxAuiPaneInfo& pane, - wxAuiDockUIPartArray& uiparts, - bool spacer_only); - - void LayoutAddDock(wxSizer* container, - wxAuiDockInfo& dock, - wxAuiDockUIPartArray& uiparts, - bool spacer_only); - - wxSizer* LayoutAll(wxAuiPaneInfoArray& panes, - wxAuiDockInfoArray& docks, - wxAuiDockUIPartArray& uiparts, - bool spacer_only = false); - - virtual bool ProcessDockResult(wxAuiPaneInfo& target, - const wxAuiPaneInfo& new_pos); - - bool DoDrop(wxAuiDockInfoArray& docks, - wxAuiPaneInfoArray& panes, - wxAuiPaneInfo& drop, - const wxPoint& pt, - const wxPoint& action_offset = wxPoint(0,0)); - - wxAuiDockUIPart* HitTest(int x, int y); - wxAuiDockUIPart* GetPanePart(wxWindow* pane); - int GetDockPixelOffset(wxAuiPaneInfo& test); - void OnFloatingPaneMoveStart(wxWindow* window); - void OnFloatingPaneMoving(wxWindow* window, wxDirection dir ); - void OnFloatingPaneMoved(wxWindow* window, wxDirection dir); - void OnFloatingPaneActivated(wxWindow* window); - void OnFloatingPaneClosed(wxWindow* window, wxCloseEvent& evt); - void OnFloatingPaneResized(wxWindow* window, const wxSize& size); - void Render(wxDC* dc); - void Repaint(wxDC* dc = NULL); - void ProcessMgrEvent(wxAuiManagerEvent& event); - void UpdateButtonOnScreen(wxAuiDockUIPart* button_ui_part, - const wxMouseEvent& event); - void GetPanePositionsAndSizes(wxAuiDockInfo& dock, - wxArrayInt& positions, - wxArrayInt& sizes); - -#if wxABI_VERSION >= 20810 - /// Ends a resize action, or for live update, resizes the sash - bool DoEndResizeAction(wxMouseEvent& event); -#endif - -public: - - // public events (which can be invoked externally) - void OnRender(wxAuiManagerEvent& evt); - void OnPaneButton(wxAuiManagerEvent& evt); - -protected: - - // protected events - void OnPaint(wxPaintEvent& evt); - void OnEraseBackground(wxEraseEvent& evt); - void OnSize(wxSizeEvent& evt); - void OnSetCursor(wxSetCursorEvent& evt); - void OnLeftDown(wxMouseEvent& evt); - void OnLeftUp(wxMouseEvent& evt); - void OnMotion(wxMouseEvent& evt); - void OnLeaveWindow(wxMouseEvent& evt); - void OnChildFocus(wxChildFocusEvent& evt); - void OnHintFadeTimer(wxTimerEvent& evt); - void OnFindManager(wxAuiManagerEvent& evt); - -protected: - - enum - { - actionNone = 0, - actionResize, - actionClickButton, - actionClickCaption, - actionDragToolbarPane, - actionDragFloatingPane - }; - -protected: - - wxWindow* m_frame; // the window being managed - wxAuiDockArt* m_art; // dock art object which does all drawing - unsigned int m_flags; // manager flags wxAUI_MGR_* - - wxAuiPaneInfoArray m_panes; // array of panes structures - wxAuiDockInfoArray m_docks; // array of docks structures - 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) - bool m_skipping; - bool m_has_maximized; - - 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 - - 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 - - void* m_reserved; - -#ifndef SWIG - DECLARE_EVENT_TABLE() - DECLARE_CLASS(wxAuiManager) -#endif // SWIG -}; - - - -// event declarations/classes - -class WXDLLIMPEXP_AUI wxAuiManagerEvent : public wxEvent -{ -public: - wxAuiManagerEvent(wxEventType type=wxEVT_NULL) : wxEvent(0, type) - { - manager = NULL; - pane = NULL; - button = 0; - veto_flag = false; - canveto_flag = true; - dc = NULL; - } -#ifndef SWIG - wxAuiManagerEvent(const wxAuiManagerEvent& c) : wxEvent(c) - { - manager = c.manager; - pane = c.pane; - button = c.button; - veto_flag = c.veto_flag; - canveto_flag = c.canveto_flag; - dc = c.dc; - } -#endif - wxEvent *Clone() const { return new wxAuiManagerEvent(*this); } - - void SetManager(wxAuiManager* mgr) { manager = mgr; } - void SetPane(wxAuiPaneInfo* p) { pane = p; } - void SetButton(int b) { button = b; } - void SetDC(wxDC* pdc) { dc = pdc; } - - wxAuiManager* GetManager() const { return manager; } - wxAuiPaneInfo* GetPane() const { return pane; } - int GetButton() const { return button; } - wxDC* GetDC() const { return dc; } - - void Veto(bool veto = true) { veto_flag = veto; } - bool GetVeto() const { return veto_flag; } - void SetCanVeto(bool can_veto) { canveto_flag = can_veto; } - bool CanVeto() const { return canveto_flag && veto_flag; } - -public: - wxAuiManager* manager; - wxAuiPaneInfo* pane; - int button; - bool veto_flag; - bool canveto_flag; - wxDC* dc; - -#ifndef SWIG -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxAuiManagerEvent) -#endif -}; - - -class WXDLLIMPEXP_AUI wxAuiDockInfo -{ -public: - wxAuiDockInfo() - { - dock_direction = 0; - dock_layer = 0; - dock_row = 0; - size = 0; - min_size = 0; - resizable = true; - fixed = false; - toolbar = false; - reserved1 = false; - } - -#ifndef SWIG - wxAuiDockInfo(const wxAuiDockInfo& c) - { - dock_direction = c.dock_direction; - dock_layer = c.dock_layer; - dock_row = c.dock_row; - size = c.size; - min_size = c.min_size; - resizable = c.resizable; - fixed = c.fixed; - toolbar = c.toolbar; - panes = c.panes; - rect = c.rect; - reserved1 = c.reserved1; - } - - wxAuiDockInfo& operator=(const wxAuiDockInfo& c) - { - dock_direction = c.dock_direction; - dock_layer = c.dock_layer; - dock_row = c.dock_row; - size = c.size; - min_size = c.min_size; - resizable = c.resizable; - fixed = c.fixed; - toolbar = c.toolbar; - panes = c.panes; - rect = c.rect; - reserved1 = c.reserved1; - return *this; - } -#endif // SWIG - - bool IsOk() const { return (dock_direction != 0) ? true : false; } - bool IsHorizontal() const { return (dock_direction == wxAUI_DOCK_TOP || - dock_direction == wxAUI_DOCK_BOTTOM) ? true:false; } - bool IsVertical() const { return (dock_direction == wxAUI_DOCK_LEFT || - dock_direction == wxAUI_DOCK_RIGHT || - dock_direction == wxAUI_DOCK_CENTER) ? true:false; } -public: - wxAuiPaneInfoPtrArray panes; // array of panes - wxRect rect; // current rectangle - int dock_direction; // dock direction (top, bottom, left, right, center) - int dock_layer; // layer number (0 = innermost layer) - int dock_row; // row number on the docking bar (0 = first row) - int size; // size of the dock - int min_size; // minimum size of a dock (0 if there is no min) - bool resizable; // flag indicating whether the dock is resizable - bool toolbar; // flag indicating dock contains only toolbars - bool fixed; // flag indicating that the dock operates on - // absolute coordinates as opposed to proportional - bool reserved1; -}; - - -class WXDLLIMPEXP_AUI wxAuiDockUIPart -{ -public: - enum - { - typeCaption, - typeGripper, - typeDock, - typeDockSizer, - typePane, - typePaneSizer, - typeBackground, - typePaneBorder, - typePaneButton - }; - - int type; // ui part type (see enum above) - int orientation; // orientation (either wxHORIZONTAL or wxVERTICAL) - wxAuiDockInfo* dock; // which dock the item is associated with - wxAuiPaneInfo* pane; // which pane the item is associated with - wxAuiPaneButton* button; // which pane button the item is associated with - wxSizer* cont_sizer; // the part's containing sizer - wxSizerItem* sizer_item; // the sizer item of the part - wxRect rect; // client coord rectangle of the part itself -}; - - -class WXDLLIMPEXP_AUI wxAuiPaneButton -{ -public: - int button_id; // id of the button (e.g. buttonClose) -}; - - - -#ifndef SWIG -// wx event machinery - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_BUTTON, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_CLOSE, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_MAXIMIZE, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_AUI_PANE_RESTORE, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_AUI_RENDER, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_AUI_FIND_MANAGER, 0) -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxAuiManagerEventFunction)(wxAuiManagerEvent&); - -#define wxAuiManagerEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxAuiManagerEventFunction, &func) - -#define EVT_AUI_PANE_BUTTON(func) \ - wx__DECLARE_EVT0(wxEVT_AUI_PANE_BUTTON, wxAuiManagerEventHandler(func)) -#define EVT_AUI_PANE_CLOSE(func) \ - wx__DECLARE_EVT0(wxEVT_AUI_PANE_CLOSE, wxAuiManagerEventHandler(func)) -#define EVT_AUI_PANE_MAXIMIZE(func) \ - 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_RENDER(func) \ - wx__DECLARE_EVT0(wxEVT_AUI_RENDER, wxAuiManagerEventHandler(func)) -#define EVT_AUI_FIND_MANAGER(func) \ - wx__DECLARE_EVT0(wxEVT_AUI_FIND_MANAGER, wxAuiManagerEventHandler(func)) - -#else - -%constant wxEventType wxEVT_AUI_PANE_BUTTON; -%constant wxEventType wxEVT_AUI_PANE_CLOSE; -%constant wxEventType wxEVT_AUI_PANE_MAXIMIZE; -%constant wxEventType wxEVT_AUI_PANE_RESTORE; -%constant wxEventType wxEVT_AUI_RENDER; -%constant wxEventType wxEVT_AUI_FIND_MANAGER; - -%pythoncode { - EVT_AUI_PANE_BUTTON = wx.PyEventBinder( wxEVT_AUI_PANE_BUTTON ) - 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_RENDER = wx.PyEventBinder( wxEVT_AUI_RENDER ) - EVT_AUI_FIND_MANAGER = wx.PyEventBinder( wxEVT_AUI_FIND_MANAGER ) -} -#endif // SWIG - -#endif // wxUSE_AUI -#endif //_WX_FRAMEMANAGER_H_ - diff --git a/desmume/src/windows/wx/include/wx/aui/tabmdi.h b/desmume/src/windows/wx/include/wx/aui/tabmdi.h deleted file mode 100644 index 6fa7ac095..000000000 --- a/desmume/src/windows/wx/include/wx/aui/tabmdi.h +++ /dev/null @@ -1,269 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/tabmdi.h -// Purpose: Generic MDI (Multiple Document Interface) classes -// Author: Hans Van Leemputten -// Modified by: Benjamin I. Williams / Kirix Corporation -// Created: 29/07/2002 -// RCS-ID: $Id: tabmdi.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Hans Van Leemputten -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_AUITABMDI_H_ -#define _WX_AUITABMDI_H_ - -#if wxUSE_AUI - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/frame.h" -#include "wx/panel.h" -#include "wx/notebook.h" -#include "wx/icon.h" -#include "wx/aui/auibook.h" - -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_AUI wxAuiMDIParentFrame; -class WXDLLIMPEXP_FWD_AUI wxAuiMDIClientWindow; -class WXDLLIMPEXP_FWD_AUI wxAuiMDIChildFrame; - -//----------------------------------------------------------------------------- -// wxAuiMDIParentFrame -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_AUI wxAuiMDIParentFrame : public wxFrame -{ -public: - wxAuiMDIParentFrame(); - wxAuiMDIParentFrame(wxWindow *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, - const wxString& name = wxFrameNameStr); - - ~wxAuiMDIParentFrame(); - - bool Create(wxWindow *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, - const wxString& name = wxFrameNameStr ); - - void SetArtProvider(wxAuiTabArt* provider); - wxAuiTabArt* GetArtProvider(); - wxAuiNotebook* GetNotebook() const; - -#if wxUSE_MENUS - wxMenu* GetWindowMenu() const { return m_pWindowMenu; } - void SetWindowMenu(wxMenu* pMenu); - - virtual void SetMenuBar(wxMenuBar *pMenuBar); -#endif // wxUSE_MENUS - - void SetChildMenuBar(wxAuiMDIChildFrame *pChild); - - virtual bool ProcessEvent(wxEvent& event); - - wxAuiMDIChildFrame *GetActiveChild() const; - void SetActiveChild(wxAuiMDIChildFrame* pChildFrame); - - wxAuiMDIClientWindow *GetClientWindow() const; - virtual wxAuiMDIClientWindow *OnCreateClient(); - - virtual void Cascade() { /* Has no effect */ } - virtual void Tile(wxOrientation orient = wxHORIZONTAL); - virtual void ArrangeIcons() { /* Has no effect */ } - virtual void ActivateNext(); - virtual void ActivatePrevious(); - -protected: - wxAuiMDIClientWindow* m_pClientWindow; - wxAuiMDIChildFrame* m_pActiveChild; - wxEvent* m_pLastEvt; - -#if wxUSE_MENUS - wxMenu *m_pWindowMenu; - wxMenuBar *m_pMyMenuBar; -#endif // wxUSE_MENUS - -protected: - void Init(); - -#if wxUSE_MENUS - void RemoveWindowMenu(wxMenuBar *pMenuBar); - void AddWindowMenu(wxMenuBar *pMenuBar); - - void DoHandleMenu(wxCommandEvent &event); -#endif // wxUSE_MENUS - - virtual void DoGetClientSize(int *width, int *height) const; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxAuiMDIParentFrame) -}; - -//----------------------------------------------------------------------------- -// wxAuiMDIChildFrame -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_AUI wxAuiMDIChildFrame : public wxPanel -{ -public: - wxAuiMDIChildFrame(); - wxAuiMDIChildFrame(wxAuiMDIParentFrame *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr); - - virtual ~wxAuiMDIChildFrame(); - bool Create(wxAuiMDIParentFrame *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr); - -#if wxUSE_MENUS - virtual void SetMenuBar(wxMenuBar *menu_bar); - virtual wxMenuBar *GetMenuBar() const; -#endif // wxUSE_MENUS - - virtual void SetTitle(const wxString& title); - virtual wxString GetTitle() const; - - virtual void SetIcons(const wxIconBundle& icons); - virtual const wxIconBundle& GetIcons() const; - - virtual void SetIcon(const wxIcon& icon); - virtual const wxIcon& GetIcon() const; - - virtual void Activate(); - virtual bool Destroy(); - -#if wxUSE_STATUSBAR - // no status bars - virtual wxStatusBar* CreateStatusBar(int WXUNUSED(number) = 1, - long WXUNUSED(style) = 1, - wxWindowID WXUNUSED(winid) = 1, - const wxString& WXUNUSED(name) = wxEmptyString) - { return (wxStatusBar*)NULL; } - - virtual wxStatusBar *GetStatusBar() const { return (wxStatusBar*)NULL; } - virtual void SetStatusText( const wxString &WXUNUSED(text), int WXUNUSED(number)=0 ) {} - virtual void SetStatusWidths( int WXUNUSED(n), const int WXUNUSED(widths_field)[] ) {} -#endif - - // no size hints - virtual void DoSetSizeHints(int WXUNUSED(minW), - int WXUNUSED(minH), - int WXUNUSED(maxW) = wxDefaultCoord, - int WXUNUSED(maxH) = wxDefaultCoord, - int WXUNUSED(incW) = wxDefaultCoord, - int WXUNUSED(incH) = wxDefaultCoord) {} -#if wxUSE_TOOLBAR - // no toolbar bars - virtual wxToolBar* CreateToolBar(long WXUNUSED(style), - wxWindowID WXUNUSED(winid), - const wxString& WXUNUSED(name)) - { return (wxToolBar*)NULL; } - virtual wxToolBar *GetToolBar() const { return (wxToolBar*)NULL; } -#endif - - - // no maximize etc - virtual void Maximize(bool WXUNUSED(maximize) = true) { /* Has no effect */ } - virtual void Restore() { /* Has no effect */ } - virtual void Iconize(bool WXUNUSED(iconize) = true) { /* Has no effect */ } - virtual bool IsMaximized() const { return true; } - virtual bool IsIconized() const { return false; } - virtual bool ShowFullScreen(bool WXUNUSED(show), long WXUNUSED(style)) { return false; } - virtual bool IsFullScreen() const { return false; } - - virtual bool IsTopLevel() const { return false; } - - void OnMenuHighlight(wxMenuEvent& evt); - void OnActivate(wxActivateEvent& evt); - void OnCloseWindow(wxCloseEvent& evt); - - void SetMDIParentFrame(wxAuiMDIParentFrame* parent); - wxAuiMDIParentFrame* GetMDIParentFrame() const; - -protected: - void Init(); - virtual bool Show(bool show = true); - virtual void DoSetSize(int x, int y, int width, int height, int size_flags); - virtual void DoMoveWindow(int x, int y, int width, int height); - -public: - // This function needs to be called when a size change is confirmed, - // we needed this function to prevent anybody from the outside - // changing the panel... it messes the UI layout when we would allow it. - void ApplyMDIChildFrameRect(); - void DoShow(bool show); - -protected: - wxAuiMDIParentFrame* m_pMDIParentFrame; - wxRect m_mdi_newrect; - wxRect m_mdi_currect; - wxString m_title; - wxIcon m_icon; - wxIconBundle m_icon_bundle; - bool m_activate_on_create; - -#if wxUSE_MENUS - wxMenuBar* m_pMenuBar; -#endif // wxUSE_MENUS - - - -private: - DECLARE_DYNAMIC_CLASS(wxAuiMDIChildFrame) - DECLARE_EVENT_TABLE() - - friend class wxAuiMDIClientWindow; -}; - -//----------------------------------------------------------------------------- -// wxAuiMDIClientWindow -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_AUI wxAuiMDIClientWindow : public wxAuiNotebook -{ -public: - wxAuiMDIClientWindow(); - wxAuiMDIClientWindow(wxAuiMDIParentFrame *parent, long style = 0); - ~wxAuiMDIClientWindow(); - - virtual bool CreateClient(wxAuiMDIParentFrame *parent, - long style = wxVSCROLL | wxHSCROLL); - - virtual int SetSelection(size_t page); - -protected: - - void PageChanged(int old_selection, int new_selection); - void OnPageClose(wxAuiNotebookEvent& evt); - void OnPageChanged(wxAuiNotebookEvent& evt); - void OnSize(wxSizeEvent& evt); - -private: - DECLARE_DYNAMIC_CLASS(wxAuiMDIClientWindow) - DECLARE_EVENT_TABLE() -}; -#endif // wxUSE_AUI - -#endif // _WX_AUITABMDI_H_ diff --git a/desmume/src/windows/wx/include/wx/beforestd.h b/desmume/src/windows/wx/include/wx/beforestd.h deleted file mode 100644 index aacfc7c41..000000000 --- a/desmume/src/windows/wx/include/wx/beforestd.h +++ /dev/null @@ -1,65 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: include/wx/beforestd.h -// Purpose: #include before STL headers -// Author: Vadim Zeitlin -// Modified by: -// Created: 07/07/03 -// RCS-ID: $Id: beforestd.h 42906 2006-11-01 14:16:42Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -/** - Unfortunately, when compiling at maximum warning level, the standard - headers themselves may generate warnings -- and really lots of them. So - before including them, this header should be included to temporarily - suppress the warnings and after this the header afterstd.h should be - included to enable them back again. - - Note that there are intentionally no inclusion guards in this file, because - it can be included several times. - */ - -// VC 7.x isn't as bad as VC6 and doesn't give these warnings but eVC (which -// defines _MSC_VER as 1201) does need to be included as it's VC6-like -#if defined(__VISUALC__) && __VISUALC__ <= 1201 - // MSVC 5 does not have this - #if __VISUALC__ > 1100 - // we have to disable (and reenable in afterstd.h) this one because, - // even though it is of level 4, it is not disabled by warning(push, 1) - // below for VC7.1! - - // unreachable code - #pragma warning(disable:4702) - - #pragma warning(push, 1) - #else // VC 5 - // 'expression' : signed/unsigned mismatch - #pragma warning(disable:4018) - - // 'identifier' : unreferenced formal parameter - #pragma warning(disable:4100) - - // 'conversion' : conversion from 'type1' to 'type2', - // possible loss of data - #pragma warning(disable:4244) - - // C++ language change: to explicitly specialize class template - // 'identifier' use the following syntax - #pragma warning(disable:4663) - #endif - - // these warning have to be disabled and not just temporarily disabled - // because they will be given at the end of the compilation of the - // current source and there is absolutely nothing we can do about them - - // 'foo': unreferenced inline function has been removed - #pragma warning(disable:4514) - - // 'function' : function not inlined - #pragma warning(disable:4710) - - // 'id': identifier was truncated to 'num' characters in the debug info - #pragma warning(disable:4786) -#endif // VC++ < 7 - diff --git a/desmume/src/windows/wx/include/wx/bitmap.h b/desmume/src/windows/wx/include/wx/bitmap.h deleted file mode 100644 index 92d456478..000000000 --- a/desmume/src/windows/wx/include/wx/bitmap.h +++ /dev/null @@ -1,241 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/bitmap.h -// Purpose: wxBitmap class interface -// Author: Vaclav Slavik -// Modified by: -// Created: 22.04.01 -// RCS-ID: $Id: bitmap.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BITMAP_H_BASE_ -#define _WX_BITMAP_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/string.h" -#include "wx/gdicmn.h" // for wxBitmapType -#include "wx/colour.h" - -class WXDLLIMPEXP_FWD_CORE wxBitmap; -class WXDLLIMPEXP_FWD_CORE wxBitmapHandler; -class WXDLLIMPEXP_FWD_CORE wxIcon; -class WXDLLIMPEXP_FWD_CORE wxImage; -class WXDLLIMPEXP_FWD_CORE wxMask; -class WXDLLIMPEXP_FWD_CORE wxPalette; - -// ---------------------------------------------------------------------------- -// wxVariant support -// ---------------------------------------------------------------------------- - -#if wxUSE_VARIANT -#include "wx/variant.h" -DECLARE_VARIANT_OBJECT_EXPORTED(wxBitmap,WXDLLEXPORT) -#endif - -// ---------------------------------------------------------------------------- -// wxMask represents the transparent area of the bitmap -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMaskBase : public wxObject -{ -public: - // create the mask from bitmap pixels of the given colour - bool Create(const wxBitmap& bitmap, const wxColour& colour); - -#if wxUSE_PALETTE - // create the mask from bitmap pixels with the given palette index - bool Create(const wxBitmap& bitmap, int paletteIndex); -#endif // wxUSE_PALETTE - - // create the mask from the given mono bitmap - bool Create(const wxBitmap& bitmap); - -protected: - // this function is called from Create() to free the existing mask data - virtual void FreeData() = 0; - - // these functions must be overridden to implement the corresponding public - // Create() methods, they shouldn't call FreeData() as it's already called - // by the public wrappers - virtual bool InitFromColour(const wxBitmap& bitmap, - const wxColour& colour) = 0; - virtual bool InitFromMonoBitmap(const wxBitmap& bitmap) = 0; -}; - -#if defined(__WXMGL__) || \ - defined(__WXDFB__) || \ - defined(__WXMAC__) || \ - defined(__WXGTK__) || \ - defined(__WXCOCOA__) || \ - defined(__WXMOTIF__) || \ - defined(__WXX11__) - #define wxUSE_BITMAP_BASE 1 -#else - #define wxUSE_BITMAP_BASE 0 -#endif - -// Only used by some ports -// FIXME -- make all ports (but MSW which uses wxGDIImage) use these base classes -#if wxUSE_BITMAP_BASE - -// ---------------------------------------------------------------------------- -// wxBitmapHandler: class which knows how to create/load/save bitmaps in -// different formats -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxBitmapHandlerBase : public wxObject -{ -public: - wxBitmapHandlerBase() { m_type = wxBITMAP_TYPE_INVALID; } - virtual ~wxBitmapHandlerBase() { } - - virtual bool Create(wxBitmap *bitmap, const void* data, long flags, - int width, int height, int depth = 1); - virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags, - int desiredWidth, int desiredHeight); - virtual bool SaveFile(const wxBitmap *bitmap, const wxString& name, - int type, const wxPalette *palette = NULL); - - void SetName(const wxString& name) { m_name = name; } - void SetExtension(const wxString& ext) { m_extension = ext; } - void SetType(wxBitmapType type) { m_type = type; } - const wxString& GetName() const { return m_name; } - const wxString& GetExtension() const { return m_extension; } - wxBitmapType GetType() const { return m_type; } - -private: - wxString m_name; - wxString m_extension; - wxBitmapType m_type; - - DECLARE_ABSTRACT_CLASS(wxBitmapHandlerBase) -}; - -class WXDLLEXPORT wxBitmapBase : public wxGDIObject -{ -public: - /* - Derived class must implement these: - - wxBitmap(); - wxBitmap(int width, int height, int depth = -1); - wxBitmap(const char bits[], int width, int height, int depth = 1); - wxBitmap(const char* const* bits); - wxBitmap(const wxString &filename, wxBitmapType type = wxBITMAP_TYPE_XPM); - wxBitmap(const wxImage& image, int depth = -1); - - bool Create(int width, int height, int depth = -1); - - static void InitStandardHandlers(); - */ - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const = 0; - - virtual int GetHeight() const = 0; - virtual int GetWidth() const = 0; - virtual int GetDepth() const = 0; - - virtual wxImage ConvertToImage() const = 0; - - virtual wxMask *GetMask() const = 0; - virtual void SetMask(wxMask *mask) = 0; - - virtual wxBitmap GetSubBitmap(const wxRect& rect) const = 0; - - virtual bool SaveFile(const wxString &name, wxBitmapType type, - const wxPalette *palette = (wxPalette *)NULL) const = 0; - virtual bool LoadFile(const wxString &name, wxBitmapType type) = 0; - - /* - If raw bitmap access is supported (see wx/rawbmp.h), the following - methods should be implemented: - - virtual bool GetRawData(wxRawBitmapData *data) = 0; - virtual void UngetRawData(wxRawBitmapData *data) = 0; - */ - -#if wxUSE_PALETTE - virtual wxPalette *GetPalette() const = 0; - virtual void SetPalette(const wxPalette& palette) = 0; -#endif // wxUSE_PALETTE - - // copies the contents and mask of the given (colour) icon to the bitmap - virtual bool CopyFromIcon(const wxIcon& icon) = 0; - - // implementation: - virtual void SetHeight(int height) = 0; - virtual void SetWidth(int width) = 0; - virtual void SetDepth(int depth) = 0; - - // Format handling - static inline wxList& GetHandlers() { return sm_handlers; } - static void AddHandler(wxBitmapHandlerBase *handler); - static void InsertHandler(wxBitmapHandlerBase *handler); - static bool RemoveHandler(const wxString& name); - static wxBitmapHandler *FindHandler(const wxString& name); - static wxBitmapHandler *FindHandler(const wxString& extension, wxBitmapType bitmapType); - static wxBitmapHandler *FindHandler(wxBitmapType bitmapType); - - //static void InitStandardHandlers(); - // (wxBitmap must implement this one) - - static void CleanUpHandlers(); - - // this method is only used by the generic implementation of wxMask - // currently but could be useful elsewhere in the future: it can be - // overridden to quantize the colour to correspond to bitmap colour depth - // if necessary; default implementation simply returns the colour as is - virtual wxColour QuantizeColour(const wxColour& colour) const - { - return colour; - } - -protected: - static wxList sm_handlers; - - DECLARE_ABSTRACT_CLASS(wxBitmapBase) -}; - -#endif // wxUSE_BITMAP_BASE - -#if defined(__WXPALMOS__) - #include "wx/palmos/bitmap.h" -#elif defined(__WXMSW__) - #include "wx/msw/bitmap.h" -#elif defined(__WXMOTIF__) - #include "wx/x11/bitmap.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/bitmap.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/bitmap.h" -#elif defined(__WXX11__) - #include "wx/x11/bitmap.h" -#elif defined(__WXMGL__) - #include "wx/mgl/bitmap.h" -#elif defined(__WXDFB__) - #include "wx/dfb/bitmap.h" -#elif defined(__WXMAC__) - #include "wx/mac/bitmap.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/bitmap.h" -#elif defined(__WXPM__) - #include "wx/os2/bitmap.h" -#endif - -// we must include generic mask.h after wxBitmap definition -#if defined(__WXMGL__) || defined(__WXDFB__) - #define wxUSE_GENERIC_MASK 1 -#else - #define wxUSE_GENERIC_MASK 0 -#endif - -#if wxUSE_GENERIC_MASK - #include "wx/generic/mask.h" -#endif - -#endif // _WX_BITMAP_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/bmpbuttn.h b/desmume/src/windows/wx/include/wx/bmpbuttn.h deleted file mode 100644 index c37d2cd7c..000000000 --- a/desmume/src/windows/wx/include/wx/bmpbuttn.h +++ /dev/null @@ -1,122 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/bmpbutton.h -// Purpose: wxBitmapButton class interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 25.08.00 -// RCS-ID: $Id: bmpbuttn.h 45498 2007-04-16 13:03:05Z VZ $ -// Copyright: (c) 2000 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BMPBUTTON_H_BASE_ -#define _WX_BMPBUTTON_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_BMPBUTTON - -#include "wx/bitmap.h" -#include "wx/button.h" - -extern WXDLLEXPORT_DATA(const wxChar) wxButtonNameStr[]; - -// ---------------------------------------------------------------------------- -// wxBitmapButton: a button which shows bitmaps instead of the usual string. -// It has different bitmaps for different states (focused/disabled/pressed) -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxBitmapButtonBase : public wxButton -{ -public: - wxBitmapButtonBase() - { - m_marginX = - m_marginY = 0; - } - - // set the bitmaps - void SetBitmapLabel(const wxBitmap& bitmap) - { m_bmpNormal = bitmap; OnSetBitmap(); } - void SetBitmapSelected(const wxBitmap& sel) - { m_bmpSelected = sel; OnSetBitmap(); } - void SetBitmapFocus(const wxBitmap& focus) - { m_bmpFocus = focus; OnSetBitmap(); } - void SetBitmapDisabled(const wxBitmap& disabled) - { m_bmpDisabled = disabled; OnSetBitmap(); } - void SetBitmapHover(const wxBitmap& hover) - { m_bmpHover = hover; OnSetBitmap(); } - - // retrieve the bitmaps - const wxBitmap& GetBitmapLabel() const { return m_bmpNormal; } - const wxBitmap& GetBitmapSelected() const { return m_bmpSelected; } - const wxBitmap& GetBitmapFocus() const { return m_bmpFocus; } - const wxBitmap& GetBitmapDisabled() const { return m_bmpDisabled; } - const wxBitmap& GetBitmapHover() const { return m_bmpHover; } - wxBitmap& GetBitmapLabel() { return m_bmpNormal; } - wxBitmap& GetBitmapSelected() { return m_bmpSelected; } - wxBitmap& GetBitmapFocus() { return m_bmpFocus; } - wxBitmap& GetBitmapDisabled() { return m_bmpDisabled; } - wxBitmap& GetBitmapHover() { return m_bmpHover; } - - // set/get the margins around the button - virtual void SetMargins(int x, int y) { m_marginX = x; m_marginY = y; } - int GetMarginX() const { return m_marginX; } - int GetMarginY() const { return m_marginY; } - - // deprecated synonym for SetBitmapLabel() -#if WXWIN_COMPATIBILITY_2_6 - wxDEPRECATED( void SetLabel(const wxBitmap& bitmap) ); - - // prevent virtual function hiding - virtual void SetLabel(const wxString& label) - { wxWindow::SetLabel(label); } -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - // function called when any of the bitmaps changes - virtual void OnSetBitmap() { InvalidateBestSize(); Refresh(); } - - // the bitmaps for various states - wxBitmap m_bmpNormal, - m_bmpSelected, - m_bmpFocus, - m_bmpDisabled, - m_bmpHover; - - // the margins around the bitmap - int m_marginX, - m_marginY; - - - DECLARE_NO_COPY_CLASS(wxBitmapButtonBase) -}; - -#if WXWIN_COMPATIBILITY_2_6 -inline void wxBitmapButtonBase::SetLabel(const wxBitmap& bitmap) -{ - SetBitmapLabel(bitmap); -} -#endif // WXWIN_COMPATIBILITY_2_6 - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/bmpbuttn.h" -#elif defined(__WXMSW__) - #include "wx/msw/bmpbuttn.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/bmpbuttn.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/bmpbuttn.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/bmpbuttn.h" -#elif defined(__WXMAC__) - #include "wx/mac/bmpbuttn.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/bmpbuttn.h" -#elif defined(__WXPM__) - #include "wx/os2/bmpbuttn.h" -#endif - -#endif // wxUSE_BMPBUTTON - -#endif // _WX_BMPBUTTON_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/bmpcbox.h b/desmume/src/windows/wx/include/wx/bmpcbox.h deleted file mode 100644 index 09fb32c4c..000000000 --- a/desmume/src/windows/wx/include/wx/bmpcbox.h +++ /dev/null @@ -1,49 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/bmpcbox.h -// Purpose: wxBitmapComboBox base header -// Author: Jaakko Salli -// Modified by: -// Created: Aug-31-2006 -// Copyright: (c) Jaakko Salli -// RCS-ID: $Id: bmpcbox.h 42046 2006-10-16 09:30:01Z ABX $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BMPCBOX_H_BASE_ -#define _WX_BMPCBOX_H_BASE_ - - -#include "wx/defs.h" - -#if wxUSE_BITMAPCOMBOBOX - -#include "wx/bitmap.h" - - -extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxBitmapComboBoxNameStr[]; - - -class WXDLLIMPEXP_ADV wxBitmapComboBoxBase -{ -public: - // ctors and such - wxBitmapComboBoxBase() { } - - virtual ~wxBitmapComboBoxBase() { } - - // Returns the image of the item with the given index. - virtual wxBitmap GetItemBitmap(unsigned int n) const = 0; - - // Sets the image for the given item. - virtual void SetItemBitmap(unsigned int n, const wxBitmap& bitmap) = 0; - - // Returns size of the image used in list - virtual wxSize GetBitmapSize() const = 0; -}; - - -#include "wx/generic/bmpcbox.h" - -#endif // wxUSE_BITMAPCOMBOBOX - -#endif // _WX_BMPCBOX_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/bookctrl.h b/desmume/src/windows/wx/include/wx/bookctrl.h deleted file mode 100644 index ba1bdfe5b..000000000 --- a/desmume/src/windows/wx/include/wx/bookctrl.h +++ /dev/null @@ -1,403 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/bookctrl.h -// Purpose: wxBookCtrlBase: common base class for wxList/Tree/Notebook -// Author: Vadim Zeitlin -// Modified by: -// Created: 19.08.03 -// RCS-ID: $Id: bookctrl.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BOOKCTRL_H_ -#define _WX_BOOKCTRL_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_BOOKCTRL - -#include "wx/control.h" -#include "wx/dynarray.h" - -WX_DEFINE_EXPORTED_ARRAY_PTR(wxWindow *, wxArrayPages); - -class WXDLLIMPEXP_FWD_CORE wxImageList; -class WXDLLIMPEXP_FWD_CORE wxBookCtrlBaseEvent; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// wxBookCtrl hit results -enum -{ - wxBK_HITTEST_NOWHERE = 1, // not on tab - wxBK_HITTEST_ONICON = 2, // on icon - wxBK_HITTEST_ONLABEL = 4, // on label - wxBK_HITTEST_ONITEM = wxBK_HITTEST_ONICON | wxBK_HITTEST_ONLABEL, - wxBK_HITTEST_ONPAGE = 8 // not on tab control, but over the selected page -}; - -// wxBookCtrl flags (common for wxNotebook, wxListbook, wxChoicebook, wxTreebook) -#define wxBK_DEFAULT 0x0000 -#define wxBK_TOP 0x0010 -#define wxBK_BOTTOM 0x0020 -#define wxBK_LEFT 0x0040 -#define wxBK_RIGHT 0x0080 -#define wxBK_ALIGN_MASK (wxBK_TOP | wxBK_BOTTOM | wxBK_LEFT | wxBK_RIGHT) - -// ---------------------------------------------------------------------------- -// wxBookCtrlBase -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxBookCtrlBase : public wxControl -{ -public: - // construction - // ------------ - - wxBookCtrlBase() - { - Init(); - } - - wxBookCtrlBase(wxWindow *parent, - wxWindowID winid, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxEmptyString) - { - Init(); - - (void)Create(parent, winid, pos, size, style, name); - } - - // quasi ctor - bool Create(wxWindow *parent, - wxWindowID winid, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxEmptyString); - - // dtor - virtual ~wxBookCtrlBase(); - - - // accessors - // --------- - - // get number of pages in the dialog - virtual size_t GetPageCount() const { return m_pages.size(); } - - // get the panel which represents the given page - wxWindow *GetPage(size_t n) { return m_pages[n]; } - wxWindow *GetPage(size_t n) const { return m_pages[n]; } - - // get the current page or NULL if none - wxWindow *GetCurrentPage() const - { - const int n = GetSelection(); - return n == wxNOT_FOUND ? NULL : GetPage(n); - } - - // get the currently selected page or wxNOT_FOUND if none - virtual int GetSelection() const = 0; - - // set/get the title of a page - virtual bool SetPageText(size_t n, const wxString& strText) = 0; - virtual wxString GetPageText(size_t n) const = 0; - - - // image list stuff: each page may have an image associated with it (all - // 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; - - - // geometry - // -------- - - // resize the notebook so that all pages will have the specified size - virtual void SetPageSize(const wxSize& size); - - // calculate the size of the control from the size of its page - virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const = 0; - - // get/set size of area between book control area and page area - unsigned int GetInternalBorder() const { return m_internalBorder; } - void SetInternalBorder(unsigned int border) { m_internalBorder = border; } - - // Sets/gets the margin around the controller - void SetControlMargin(int margin) { m_controlMargin = margin; } - int GetControlMargin() const { return m_controlMargin; } - - // returns true if we have wxBK_TOP or wxBK_BOTTOM style - bool IsVertical() const { return HasFlag(wxBK_BOTTOM | wxBK_TOP); } - - // set/get option to shrink to fit current page - void SetFitToCurrentPage(bool fit) { m_fitToCurrentPage = fit; } - bool GetFitToCurrentPage() const { return m_fitToCurrentPage; } - - // returns the sizer containing the control, if any - wxSizer* GetControlSizer() const { return m_controlSizer; } - - // operations - // ---------- - - // remove one page from the control and delete it - virtual bool DeletePage(size_t n); - - // remove one page from the notebook, without deleting it - virtual bool RemovePage(size_t n) - { - DoInvalidateBestSize(); - return DoRemovePage(n) != NULL; - } - - // remove all pages and delete them - virtual bool DeleteAllPages() - { - DoInvalidateBestSize(); - WX_CLEAR_ARRAY(m_pages); - return true; - } - - // adds a new page to the control - virtual bool AddPage(wxWindow *page, - const wxString& text, - bool bSelect = false, - int imageId = -1) - { - DoInvalidateBestSize(); - return InsertPage(GetPageCount(), page, text, bSelect, imageId); - } - - // the same as AddPage(), but adds the page at the specified position - virtual bool InsertPage(size_t n, - wxWindow *page, - const wxString& text, - bool bSelect = false, - int imageId = -1) = 0; - - // set the currently selected page, return the index of the previously - // selected one (or -1 on error) - // - // NB: this function will generate PAGE_CHANGING/ED events - virtual int SetSelection(size_t n) = 0; - - // acts as SetSelection but does not generate events - virtual int ChangeSelection(size_t n) = 0; - - - // cycle thru the pages - void AdvanceSelection(bool forward = true) - { - int nPage = GetNextPage(forward); - if ( nPage != -1 ) - { - // cast is safe because of the check above - SetSelection((size_t)nPage); - } - } - - // hit test: returns which page is hit and, optionally, where (icon, label) - virtual int HitTest(const wxPoint& WXUNUSED(pt), - long * WXUNUSED(flags) = NULL) const - { - return wxNOT_FOUND; - } - - - // we do have multiple pages - virtual bool HasMultiplePages() const { return true; } - - -protected: - // flags for DoSetSelection() - enum - { - SetSelection_SendEvent = 1 - }; - - // set the selection to the given page, sending the events (which can - // possibly prevent the page change from taking place) if SendEvent flag is - // included - virtual int DoSetSelection(size_t nPage, int flags = 0); - - // if the derived class uses DoSetSelection() for implementing - // [Set|Change]Selection, it must override UpdateSelectedPage(), - // CreatePageChangingEvent() and MakeChangedEvent(), but as it might not - // use it, these functions are not pure virtual - - // called to notify the control about a new current page - virtual void UpdateSelectedPage(size_t WXUNUSED(newsel)) - { wxFAIL_MSG(wxT("Override this function!")); } - - // create a new "page changing" event - virtual wxBookCtrlBaseEvent* CreatePageChangingEvent() const - { wxFAIL_MSG(wxT("Override this function!")); return NULL; } - - // modify the event created by CreatePageChangingEvent() to "page changed" - // event, usually by just calling SetEventType() on it - virtual void MakeChangedEvent(wxBookCtrlBaseEvent& WXUNUSED(event)) - { wxFAIL_MSG(wxT("Override this function!")); } - - - // Should we accept NULL page pointers in Add/InsertPage()? - // - // Default is no but derived classes may override it if they can treat NULL - // pages in some sensible way (e.g. wxTreebook overrides this to allow - // having nodes without any associated page) - virtual bool AllowNullPage() const { return false; } - - // remove the page and return a pointer to it - virtual wxWindow *DoRemovePage(size_t page) = 0; - - // our best size is the size which fits all our pages - virtual wxSize DoGetBestSize() const; - - // helper: get the next page wrapping if we reached the end - int GetNextPage(bool forward) const; - - // Lay out controls - void DoSize(); - - // This method also invalidates the size of the controller and should be - // called instead of just InvalidateBestSize() whenever pages are added or - // removed as this also affects the controller - void DoInvalidateBestSize(); - -#if wxUSE_HELP - // Show the help for the corresponding page - void OnHelp(wxHelpEvent& event); -#endif // wxUSE_HELP - - - // 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 - wxRect GetPageRect() const; - - // event handlers - virtual wxSize GetControllerSize() const; - void OnSize(wxSizeEvent& event); - - // controller buddy if available, NULL otherwise (usually for native book controls like wxNotebook) - wxControl *m_bookctrl; - - // Whether to shrink to fit current page - bool m_fitToCurrentPage; - - // the sizer containing the choice control - wxSizer *m_controlSizer; - - // the margin around the choice control - int m_controlMargin; - -private: - - // common part of all ctors - void Init(); - - // internal border - unsigned int m_internalBorder; - - DECLARE_ABSTRACT_CLASS(wxBookCtrlBase) - DECLARE_NO_COPY_CLASS(wxBookCtrlBase) - DECLARE_EVENT_TABLE() -}; - -// ---------------------------------------------------------------------------- -// wxBookCtrlBaseEvent: page changing events generated by derived classes -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxBookCtrlBaseEvent : public wxNotifyEvent -{ -public: - wxBookCtrlBaseEvent(wxEventType commandType = wxEVT_NULL, int winid = 0, - int nSel = -1, int nOldSel = -1) - : wxNotifyEvent(commandType, winid) - { - m_nSel = nSel; - m_nOldSel = nOldSel; - } - - wxBookCtrlBaseEvent(const wxBookCtrlBaseEvent& event) - : wxNotifyEvent(event) - { - m_nSel = event.m_nSel; - m_nOldSel = event.m_nOldSel; - } - - // accessors - // the currently selected page (-1 if none) - int GetSelection() const { return m_nSel; } - void SetSelection(int nSel) { m_nSel = nSel; } - // the page that was selected before the change (-1 if none) - int GetOldSelection() const { return m_nOldSel; } - void SetOldSelection(int nOldSel) { m_nOldSel = nOldSel; } - -private: - int m_nSel, // currently selected page - m_nOldSel; // previously selected page -}; - -// make a default book control for given platform -#if wxUSE_NOTEBOOK - // dedicated to majority of desktops - #include "wx/notebook.h" - #define wxBookCtrl wxNotebook - #define wxBookCtrlEvent wxNotebookEvent - #define wxEVT_COMMAND_BOOKCTRL_PAGE_CHANGED wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED - #define wxEVT_COMMAND_BOOKCTRL_PAGE_CHANGING wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING - #define EVT_BOOKCTRL_PAGE_CHANGED(id, fn) EVT_NOTEBOOK_PAGE_CHANGED(id, fn) - #define EVT_BOOKCTRL_PAGE_CHANGING(id, fn) EVT_NOTEBOOK_PAGE_CHANGING(id, fn) - #define wxBookctrlEventHandler(func) wxNotebookEventHandler(func) -#else - // dedicated to Smartphones - #include "wx/choicebk.h" - #define wxBookCtrl wxChoicebook - #define wxBookCtrlEvent wxChoicebookEvent - #define wxEVT_COMMAND_BOOKCTRL_PAGE_CHANGED wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED - #define wxEVT_COMMAND_BOOKCTRL_PAGE_CHANGING wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING - #define EVT_BOOKCTRL_PAGE_CHANGED(id, fn) EVT_CHOICEBOOK_PAGE_CHANGED(id, fn) - #define EVT_BOOKCTRL_PAGE_CHANGING(id, fn) EVT_CHOICEBOOK_PAGE_CHANGING(id, fn) - #define wxBookctrlEventHandler(func) wxChoicebookEventHandler(func) -#endif - -#if WXWIN_COMPATIBILITY_2_6 - #define wxBC_TOP wxBK_TOP - #define wxBC_BOTTOM wxBK_BOTTOM - #define wxBC_LEFT wxBK_LEFT - #define wxBC_RIGHT wxBK_RIGHT - #define wxBC_DEFAULT wxBK_DEFAULT -#endif - -#endif // wxUSE_BOOKCTRL - -#endif // _WX_BOOKCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/brush.h b/desmume/src/windows/wx/include/wx/brush.h deleted file mode 100644 index cbf728728..000000000 --- a/desmume/src/windows/wx/include/wx/brush.h +++ /dev/null @@ -1,54 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/brush.h -// Purpose: Includes platform-specific wxBrush file -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: brush.h 40865 2006-08-27 09:42:42Z VS $ -// Copyright: Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BRUSH_H_BASE_ -#define _WX_BRUSH_H_BASE_ - -#include "wx/defs.h" -#include "wx/object.h" -#include "wx/gdiobj.h" - -// wxBrushBase -class WXDLLEXPORT wxBrushBase: public wxGDIObject -{ -public: - virtual ~wxBrushBase() { } - - virtual int GetStyle() const = 0; - - virtual bool IsHatch() const - { return (GetStyle()>=wxFIRST_HATCH) && (GetStyle()<=wxLAST_HATCH); } -}; - -#if defined(__WXPALMOS__) - #include "wx/palmos/brush.h" -#elif defined(__WXMSW__) - #include "wx/msw/brush.h" -#elif defined(__WXMOTIF__) || defined(__WXX11__) - #include "wx/x11/brush.h" -#elif defined(__WXGTK20__) - #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__) - #include "wx/mac/brush.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/brush.h" -#elif defined(__WXPM__) - #include "wx/os2/brush.h" -#endif - -#endif - // _WX_BRUSH_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/buffer.h b/desmume/src/windows/wx/include/wx/buffer.h deleted file mode 100644 index 605f4f19c..000000000 --- a/desmume/src/windows/wx/include/wx/buffer.h +++ /dev/null @@ -1,314 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/buffer.h -// Purpose: auto buffer classes: buffers which automatically free memory -// Author: Vadim Zeitlin -// Modified by: -// Created: 12.04.99 -// RCS-ID: $Id: buffer.h 45761 2007-05-02 17:09:30Z VS $ -// Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BUFFER_H -#define _WX_BUFFER_H - -#include "wx/wxchar.h" - -#include // malloc() and free() - -// ---------------------------------------------------------------------------- -// Special classes for (wide) character strings: they use malloc/free instead -// of new/delete -// ---------------------------------------------------------------------------- - -#define DEFINE_BUFFER(classname, chartype, strdupfunc) \ -class WXDLLIMPEXP_BASE classname \ -{ \ -public: \ - classname(const chartype *str = NULL) \ - : m_str(str ? strdupfunc(str) : NULL) \ - { \ - } \ - \ - classname(size_t len) \ - : m_str((chartype *)malloc((len + 1)*sizeof(chartype))) \ - { \ - m_str[len] = (chartype)0; \ - } \ - \ - /* no need to check for NULL, free() does it */ \ - ~classname() { free(m_str); } \ - \ - /* \ - WARNING: \ - \ - the copy ctor and assignment operators change the passed in object \ - even although it is declared as "const", so: \ - \ - a) it shouldn't be really const \ - b) you shouldn't use it afterwards (or know that it was reset) \ - \ - This is very ugly but is unfortunately needed to make the normal use\ - of classname buffer objects possible and is very similar to what \ - std::auto_ptr<> does (as if it were an excuse...) \ - */ \ - \ - /* \ - because of the remark above, release() is declared const even if it \ - isn't really const \ - */ \ - chartype *release() const \ - { \ - chartype *p = m_str; \ - ((classname *)this)->m_str = NULL; \ - return p; \ - } \ - \ - void reset() \ - { \ - free(m_str); \ - m_str = NULL; \ - } \ - \ - classname(const classname& src) \ - : m_str(src.release()) \ - { \ - } \ - \ - classname& operator=(const chartype *str) \ - { \ - free(m_str); \ - m_str = str ? strdupfunc(str) : NULL; \ - return *this; \ - } \ - \ - classname& operator=(const classname& src) \ - { \ - free(m_str); \ - m_str = src.release(); \ - \ - return *this; \ - } \ - \ - bool extend(size_t len) \ - { \ - chartype * \ - str = (chartype *)realloc(m_str, (len + 1)*sizeof(chartype)); \ - if ( !str ) \ - return false; \ - \ - m_str = str; \ - \ - return true; \ - } \ - \ - chartype *data() { return m_str; } \ - const chartype *data() const { return m_str; } \ - operator const chartype *() const { return m_str; } \ - chartype operator[](size_t n) const { return m_str[n]; } \ - \ -private: \ - chartype *m_str; \ -} - -#if wxABI_VERSION >= 20804 -// needed for wxString::char_str() and wchar_str() -#define DEFINE_WRITABLE_BUFFER(classname, baseclass, chartype) \ -class WXDLLIMPEXP_BASE classname : public baseclass \ -{ \ -public: \ - classname(const baseclass& src) : baseclass(src) {} \ - classname(const chartype *str = NULL) : baseclass(str) {} \ - \ - operator chartype*() { return this->data(); } \ -} -#endif // wxABI_VERSION >= 20804 - -DEFINE_BUFFER(wxCharBuffer, char, wxStrdupA); -#if wxABI_VERSION >= 20804 -DEFINE_WRITABLE_BUFFER(wxWritableCharBuffer, wxCharBuffer, char); -#endif - -#if wxUSE_WCHAR_T - -DEFINE_BUFFER(wxWCharBuffer, wchar_t, wxStrdupW); -#if wxABI_VERSION >= 20804 -DEFINE_WRITABLE_BUFFER(wxWritableWCharBuffer, wxWCharBuffer, wchar_t); -#endif - -#endif // wxUSE_WCHAR_T - -#undef DEFINE_BUFFER -#undef DEFINE_WRITABLE_BUFFER - -#if wxUSE_UNICODE - typedef wxWCharBuffer wxWxCharBuffer; - - #define wxMB2WXbuf wxWCharBuffer - #define wxWX2MBbuf wxCharBuffer - #define wxWC2WXbuf wxChar* - #define wxWX2WCbuf wxChar* -#else // ANSI - typedef wxCharBuffer wxWxCharBuffer; - - #define wxMB2WXbuf wxChar* - #define wxWX2MBbuf wxChar* - #define wxWC2WXbuf wxCharBuffer - #define wxWX2WCbuf wxWCharBuffer -#endif // Unicode/ANSI - -// ---------------------------------------------------------------------------- -// A class for holding growable data buffers (not necessarily strings) -// ---------------------------------------------------------------------------- - -// This class manages the actual data buffer pointer and is ref-counted. -class wxMemoryBufferData -{ -public: - // the initial size and also the size added by ResizeIfNeeded() - enum { DefBufSize = 1024 }; - - friend class wxMemoryBuffer; - - // everyting is private as it can only be used by wxMemoryBuffer -private: - wxMemoryBufferData(size_t size = wxMemoryBufferData::DefBufSize) - : m_data(size ? malloc(size) : NULL), m_size(size), m_len(0), m_ref(0) - { - } - ~wxMemoryBufferData() { free(m_data); } - - - void ResizeIfNeeded(size_t newSize) - { - if (newSize > m_size) - { - void *dataOld = m_data; - m_data = realloc(m_data, newSize + wxMemoryBufferData::DefBufSize); - if ( !m_data ) - { - free(dataOld); - } - - m_size = newSize + wxMemoryBufferData::DefBufSize; - } - } - - void IncRef() { m_ref += 1; } - void DecRef() - { - m_ref -= 1; - if (m_ref == 0) // are there no more references? - delete this; - } - - - // the buffer containing the data - void *m_data; - - // the size of the buffer - size_t m_size; - - // the amount of data currently in the buffer - size_t m_len; - - // the reference count - size_t m_ref; - - DECLARE_NO_COPY_CLASS(wxMemoryBufferData) -}; - - -class wxMemoryBuffer -{ -public: - // ctor and dtor - wxMemoryBuffer(size_t size = wxMemoryBufferData::DefBufSize) - { - m_bufdata = new wxMemoryBufferData(size); - m_bufdata->IncRef(); - } - - ~wxMemoryBuffer() { m_bufdata->DecRef(); } - - - // copy and assignment - wxMemoryBuffer(const wxMemoryBuffer& src) - : m_bufdata(src.m_bufdata) - { - m_bufdata->IncRef(); - } - - wxMemoryBuffer& operator=(const wxMemoryBuffer& src) - { - m_bufdata->DecRef(); - m_bufdata = src.m_bufdata; - m_bufdata->IncRef(); - return *this; - } - - - // Accessors - void *GetData() const { return m_bufdata->m_data; } - size_t GetBufSize() const { return m_bufdata->m_size; } - size_t GetDataLen() const { return m_bufdata->m_len; } - - void SetBufSize(size_t size) { m_bufdata->ResizeIfNeeded(size); } - void SetDataLen(size_t len) - { - wxASSERT(len <= m_bufdata->m_size); - m_bufdata->m_len = len; - } - - // Ensure the buffer is big enough and return a pointer to it - void *GetWriteBuf(size_t sizeNeeded) - { - m_bufdata->ResizeIfNeeded(sizeNeeded); - return m_bufdata->m_data; - } - - // Update the length after the write - void UngetWriteBuf(size_t sizeUsed) { SetDataLen(sizeUsed); } - - // Like the above, but appends to the buffer - void *GetAppendBuf(size_t sizeNeeded) - { - m_bufdata->ResizeIfNeeded(m_bufdata->m_len + sizeNeeded); - return (char*)m_bufdata->m_data + m_bufdata->m_len; - } - - // Update the length after the append - void UngetAppendBuf(size_t sizeUsed) - { - SetDataLen(m_bufdata->m_len + sizeUsed); - } - - // Other ways to append to the buffer - void AppendByte(char data) - { - wxCHECK_RET( m_bufdata->m_data, _T("invalid wxMemoryBuffer") ); - - m_bufdata->ResizeIfNeeded(m_bufdata->m_len + 1); - *(((char*)m_bufdata->m_data) + m_bufdata->m_len) = data; - m_bufdata->m_len += 1; - } - - void AppendData(const void *data, size_t len) - { - memcpy(GetAppendBuf(len), data, len); - UngetAppendBuf(len); - } - - operator const char *() const { return (const char*)GetData(); } - -private: - wxMemoryBufferData* m_bufdata; -}; - -// ---------------------------------------------------------------------------- -// template class for any kind of data -// ---------------------------------------------------------------------------- - -// TODO - -#endif // _WX_BUFFER_H diff --git a/desmume/src/windows/wx/include/wx/build.h b/desmume/src/windows/wx/include/wx/build.h deleted file mode 100644 index 989d5e611..000000000 --- a/desmume/src/windows/wx/include/wx/build.h +++ /dev/null @@ -1,149 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/build.h -// Purpose: Runtime build options checking -// Author: Vadim Zeitlin, Vaclav Slavik -// Modified by: -// Created: 07.05.02 -// RCS-ID: $Id: build.h 35858 2005-10-09 15:48:42Z MBN $ -// Copyright: (c) 2002 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BUILD_H_ -#define _WX_BUILD_H_ - -#include "wx/version.h" - -// NB: This file contains macros for checking binary compatibility of libraries -// in multilib buildm, plugins and user components. -// The WX_BUILD_OPTIONS_SIGNATURE macro expands into string that should -// uniquely identify binary compatible builds: i.e. if two builds of the -// library are binary compatible, their signature string should be the -// same; if two builds are binary incompatible, their signatures should -// be different. -// -// Therefore, wxUSE_XXX flags that affect binary compatibility (vtables, -// function signatures) should be accounted for here. So should compilers -// and compiler versions (but note that binary compatible compiler versions -// such as gcc-2.95.2 and gcc-2.95.3 should have same signature!). - -// ---------------------------------------------------------------------------- -// WX_BUILD_OPTIONS_SIGNATURE -// ---------------------------------------------------------------------------- - -#define __WX_BO_STRINGIZE(x) __WX_BO_STRINGIZE0(x) -#define __WX_BO_STRINGIZE0(x) #x - -#if (wxMINOR_VERSION % 2) == 0 - #define __WX_BO_VERSION(x,y,z) \ - __WX_BO_STRINGIZE(x) "." __WX_BO_STRINGIZE(y) -#else - #define __WX_BO_VERSION(x,y,z) \ - __WX_BO_STRINGIZE(x) "." __WX_BO_STRINGIZE(y) "." __WX_BO_STRINGIZE(z) -#endif - -#ifdef __WXDEBUG__ - #define __WX_BO_DEBUG "debug" -#else - #define __WX_BO_DEBUG "no debug" -#endif - -#if wxUSE_UNICODE - #define __WX_BO_UNICODE "Unicode" -#else - #define __WX_BO_UNICODE "ANSI" -#endif - -// GCC and Intel C++ share same C++ ABI (and possibly others in the future), -// check if compiler versions are compatible: -#if defined(__GXX_ABI_VERSION) - #define __WX_BO_COMPILER \ - ",compiler with C++ ABI " __WX_BO_STRINGIZE(__GXX_ABI_VERSION) -#elif defined(__INTEL_COMPILER) - #define __WX_BO_COMPILER ",Intel C++" -#elif defined(__GNUG__) - #define __WX_BO_COMPILER ",GCC " \ - __WX_BO_STRINGIZE(__GNUC__) "." __WX_BO_STRINGIZE(__GNUC_MINOR__) -#elif defined(__VISUALC__) - #define __WX_BO_COMPILER ",Visual C++" -#elif defined(__BORLANDC__) - #define __WX_BO_COMPILER ",Borland C++" -#elif defined(__DIGITALMARS__) - #define __WX_BO_COMPILER ",DigitalMars" -#elif defined(__WATCOMC__) - #define __WX_BO_COMPILER ",Watcom C++" -#else - #define __WX_BO_COMPILER -#endif - -// WXWIN_COMPATIBILITY macros affect presence of virtual functions -#if WXWIN_COMPATIBILITY_2_4 - #define __WX_BO_WXWIN_COMPAT_2_4 ",compatible with 2.4" -#else - #define __WX_BO_WXWIN_COMPAT_2_4 -#endif -#if WXWIN_COMPATIBILITY_2_6 - #define __WX_BO_WXWIN_COMPAT_2_6 ",compatible with 2.6" -#else - #define __WX_BO_WXWIN_COMPAT_2_6 -#endif - -// deriving wxWin containers from STL ones changes them completely: -#if wxUSE_STL - #define __WX_BO_STL ",STL containers" -#else - #define __WX_BO_STL ",wx containers" -#endif - -// This macro is passed as argument to wxConsoleApp::CheckBuildOptions() -#define WX_BUILD_OPTIONS_SIGNATURE \ - __WX_BO_VERSION(wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER) \ - " (" __WX_BO_DEBUG "," __WX_BO_UNICODE \ - __WX_BO_COMPILER \ - __WX_BO_STL \ - __WX_BO_WXWIN_COMPAT_2_4 __WX_BO_WXWIN_COMPAT_2_6 \ - ")" - - -// ---------------------------------------------------------------------------- -// WX_CHECK_BUILD_OPTIONS -// ---------------------------------------------------------------------------- - -// Use this macro to check build options. Adding it to a file in DLL will -// ensure that the DLL checks build options in same way IMPLEMENT_APP() does. -#define WX_CHECK_BUILD_OPTIONS(libName) \ - static struct wxBuildOptionsChecker \ - { \ - wxBuildOptionsChecker() \ - { \ - wxAppConsole::CheckBuildOptions(WX_BUILD_OPTIONS_SIGNATURE, \ - libName); \ - } \ - } gs_buildOptionsCheck; - - -#if WXWIN_COMPATIBILITY_2_4 - -// ---------------------------------------------------------------------------- -// wxBuildOptions -// ---------------------------------------------------------------------------- - -// NB: Don't use this class in new code, it relies on the ctor being always -// inlined. WX_BUILD_OPTIONS_SIGNATURE always works. -class wxBuildOptions -{ -public: - // the ctor must be inline to get the compilation settings of the code - // which included this header - wxBuildOptions() : m_signature(WX_BUILD_OPTIONS_SIGNATURE) {} - -private: - const char *m_signature; - - // actually only CheckBuildOptions() should be our friend but well... - friend class wxAppConsole; -}; - -#endif // WXWIN_COMPATIBILITY_2_4 - -#endif // _WX_BUILD_H_ diff --git a/desmume/src/windows/wx/include/wx/busyinfo.h b/desmume/src/windows/wx/include/wx/busyinfo.h deleted file mode 100644 index ae6355287..000000000 --- a/desmume/src/windows/wx/include/wx/busyinfo.h +++ /dev/null @@ -1,21 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/busyinfo.h -// Purpose: Information window (when app is busy) -// Author: Vaclav Slavik -// Copyright: (c) 1999 Vaclav Slavik -// RCS-ID: $Id: busyinfo.h 37158 2006-01-26 15:40:46Z ABX $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __BUSYINFO_H_BASE__ -#define __BUSYINFO_H_BASE__ - -#include "wx/defs.h" - -#if wxUSE_BUSYINFO - -#include "wx/generic/busyinfo.h" - -#endif // wxUSE_BUSYINFO - -#endif // __BUSYINFO_H_BASE__ diff --git a/desmume/src/windows/wx/include/wx/button.h b/desmume/src/windows/wx/include/wx/button.h deleted file mode 100644 index a4448f81f..000000000 --- a/desmume/src/windows/wx/include/wx/button.h +++ /dev/null @@ -1,106 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/button.h -// Purpose: wxButtonBase class -// Author: Vadim Zetlin -// Modified by: -// Created: 15.08.00 -// RCS-ID: $Id: button.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Vadim Zetlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BUTTON_H_BASE_ -#define _WX_BUTTON_H_BASE_ - -#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 - -#include "wx/control.h" - -class WXDLLIMPEXP_FWD_CORE wxBitmap; - -extern WXDLLEXPORT_DATA(const wxChar) wxButtonNameStr[]; - -// ---------------------------------------------------------------------------- -// wxButton: a push button -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxButtonBase : public wxControl -{ -public: - wxButtonBase() { } - - // show the image in the button in addition to the label - virtual void SetImageLabel(const wxBitmap& WXUNUSED(bitmap)) { } - - // set the margins around the image - virtual void SetImageMargins(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y)) { } - - // this wxButton method is called when the button becomes the default one - // on its panel - virtual void 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(); - -protected: - DECLARE_NO_COPY_CLASS(wxButtonBase) -}; - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/button.h" -#elif defined(__WXMSW__) - #include "wx/msw/button.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/button.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/button.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/button.h" -#elif defined(__WXMAC__) - #include "wx/mac/button.h" -#elif defined(__WXCOCOA__) - #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_ diff --git a/desmume/src/windows/wx/include/wx/calctrl.h b/desmume/src/windows/wx/include/wx/calctrl.h deleted file mode 100644 index ace3b2262..000000000 --- a/desmume/src/windows/wx/include/wx/calctrl.h +++ /dev/null @@ -1,232 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/calctrl.h -// Purpose: date-picker control -// Author: Vadim Zeitlin -// Modified by: -// Created: 29.12.99 -// RCS-ID: $Id: calctrl.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1999 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -/* - TODO - - 1. implement multiple selections for date ranges - 2. background bitmap for the calendar? - */ - -#ifndef _WX_CALCTRL_H_ -#define _WX_CALCTRL_H_ - -#include "wx/defs.h" - -#if wxUSE_CALENDARCTRL - -#include "wx/dateevt.h" -#include "wx/colour.h" -#include "wx/font.h" - -// ---------------------------------------------------------------------------- -// wxCalendarCtrl flags -// ---------------------------------------------------------------------------- - -enum -{ - // show Sunday as the first day of the week (default) - wxCAL_SUNDAY_FIRST = 0x0000, - - // show Monder as the first day of the week - wxCAL_MONDAY_FIRST = 0x0001, - - // highlight holidays - wxCAL_SHOW_HOLIDAYS = 0x0002, - - // disable the year change control, show only the month change one - wxCAL_NO_YEAR_CHANGE = 0x0004, - - // don't allow changing neither month nor year (implies - // wxCAL_NO_YEAR_CHANGE) - wxCAL_NO_MONTH_CHANGE = 0x000c, - - // use MS-style month-selection instead of combo-spin combination - wxCAL_SEQUENTIAL_MONTH_SELECTION = 0x0010, - - // show the neighbouring weeks in the previous and next month - wxCAL_SHOW_SURROUNDING_WEEKS = 0x0020 -}; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// return values for the HitTest() method -enum wxCalendarHitTestResult -{ - wxCAL_HITTEST_NOWHERE, // outside of anything - wxCAL_HITTEST_HEADER, // on the header (weekdays) - wxCAL_HITTEST_DAY, // on a day in the calendar - wxCAL_HITTEST_INCMONTH, - wxCAL_HITTEST_DECMONTH, - wxCAL_HITTEST_SURROUNDING_WEEK -}; - -// border types for a date -enum wxCalendarDateBorder -{ - wxCAL_BORDER_NONE, // no border (default) - wxCAL_BORDER_SQUARE, // a rectangular border - wxCAL_BORDER_ROUND // a round border -}; - -// ---------------------------------------------------------------------------- -// wxCalendarDateAttr: custom attributes for a calendar date -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxCalendarDateAttr -{ -#if !defined(__VISAGECPP__) -protected: - // This has to be before the use of Init(), for MSVC++ 1.5 - // But dorks up Visualage! - void Init(wxCalendarDateBorder border = wxCAL_BORDER_NONE) - { - m_border = border; - m_holiday = false; - } -#endif -public: - // ctors - wxCalendarDateAttr() { Init(); } - wxCalendarDateAttr(const wxColour& colText, - const wxColour& colBack = wxNullColour, - const wxColour& colBorder = wxNullColour, - const wxFont& font = wxNullFont, - wxCalendarDateBorder border = wxCAL_BORDER_NONE) - : m_colText(colText), m_colBack(colBack), - m_colBorder(colBorder), m_font(font) - { - Init(border); - } - wxCalendarDateAttr(wxCalendarDateBorder border, - const wxColour& colBorder = wxNullColour) - : m_colBorder(colBorder) - { - Init(border); - } - - // setters - void SetTextColour(const wxColour& colText) { m_colText = colText; } - void SetBackgroundColour(const wxColour& colBack) { m_colBack = colBack; } - void SetBorderColour(const wxColour& col) { m_colBorder = col; } - void SetFont(const wxFont& font) { m_font = font; } - void SetBorder(wxCalendarDateBorder border) { m_border = border; } - 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 HasBorder() const { return m_border != wxCAL_BORDER_NONE; } - - bool IsHoliday() const { return m_holiday; } - - const wxColour& GetTextColour() const { return m_colText; } - const wxColour& GetBackgroundColour() const { return m_colBack; } - const wxColour& GetBorderColour() const { return m_colBorder; } - const wxFont& GetFont() const { return m_font; } - wxCalendarDateBorder GetBorder() const { return m_border; } -#if defined(__VISAGECPP__) -protected: - // This has to be here for VisualAge - void Init(wxCalendarDateBorder border = wxCAL_BORDER_NONE) - { - m_border = border; - m_holiday = false; - } -#endif -private: - wxColour m_colText, - m_colBack, - m_colBorder; - wxFont m_font; - wxCalendarDateBorder m_border; - bool m_holiday; -}; - -// ---------------------------------------------------------------------------- -// wxCalendarCtrl events -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_ADV wxCalendarCtrl; - -class WXDLLIMPEXP_ADV wxCalendarEvent : public wxDateEvent -{ -friend class wxCalendarCtrl; -public: - wxCalendarEvent() { Init(); } - inline wxCalendarEvent(wxCalendarCtrl *cal, wxEventType type); - - void SetWeekDay(const wxDateTime::WeekDay wd) { m_wday = wd; } - wxDateTime::WeekDay GetWeekDay() const { return m_wday; } - -protected: - void Init() - { - m_wday = wxDateTime::Inv_WeekDay; - } - -private: - wxDateTime::WeekDay m_wday; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxCalendarEvent) -}; - -// ---------------------------------------------------------------------------- -// wxCalendarCtrl -// ---------------------------------------------------------------------------- - -// so far we only have a generic version, so keep it simple -#include "wx/generic/calctrl.h" - - -// now we can define the inline ctor using wxCalendarCtrl -inline -wxCalendarEvent::wxCalendarEvent(wxCalendarCtrl *cal, wxEventType type) - : wxDateEvent(cal, cal->GetDate(), type) -{ -} - -// ---------------------------------------------------------------------------- -// calendar event types and macros for handling them -// ---------------------------------------------------------------------------- - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_CALENDAR_SEL_CHANGED, 950) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_CALENDAR_DAY_CHANGED, 951) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_CALENDAR_MONTH_CHANGED, 952) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_CALENDAR_YEAR_CHANGED, 953) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_CALENDAR_DOUBLECLICKED, 954) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_CALENDAR_WEEKDAY_CLICKED, 955) -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxCalendarEventFunction)(wxCalendarEvent&); - -#define wxCalendarEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCalendarEventFunction, &func) - -#define wx__DECLARE_CALEVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_CALENDAR_ ## evt, id, wxCalendarEventHandler(fn)) - -#define EVT_CALENDAR(id, fn) wx__DECLARE_CALEVT(DOUBLECLICKED, id, fn) -#define EVT_CALENDAR_SEL_CHANGED(id, fn) wx__DECLARE_CALEVT(SEL_CHANGED, id, fn) -#define EVT_CALENDAR_DAY(id, fn) wx__DECLARE_CALEVT(DAY_CHANGED, id, fn) -#define EVT_CALENDAR_MONTH(id, fn) wx__DECLARE_CALEVT(MONTH_CHANGED, id, fn) -#define EVT_CALENDAR_YEAR(id, fn) wx__DECLARE_CALEVT(YEAR_CHANGED, id, fn) -#define EVT_CALENDAR_WEEKDAY_CLICKED(id, fn) wx__DECLARE_CALEVT(WEEKDAY_CLICKED, id, fn) - -#endif // wxUSE_CALENDARCTRL - -#endif // _WX_CALCTRL_H_ - diff --git a/desmume/src/windows/wx/include/wx/caret.h b/desmume/src/windows/wx/include/wx/caret.h deleted file mode 100644 index 25b606699..000000000 --- a/desmume/src/windows/wx/include/wx/caret.h +++ /dev/null @@ -1,252 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/caret.h -// Purpose: wxCaretBase class - the interface of wxCaret -// Author: Vadim Zeitlin -// Modified by: -// Created: 23.05.99 -// RCS-ID: $Id: caret.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CARET_H_BASE_ -#define _WX_CARET_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_CARET - -// --------------------------------------------------------------------------- -// forward declarations -// --------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxWindow; -class WXDLLIMPEXP_FWD_CORE wxWindowBase; - -// ---------------------------------------------------------------------------- -// headers we have to include -// ---------------------------------------------------------------------------- - -#include "wx/gdicmn.h" // for wxPoint, wxSize - -// ---------------------------------------------------------------------------- -// A caret is a blinking cursor showing the position where the typed text will -// appear. It can be either a solid block or a custom bitmap (TODO) -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxCaretBase -{ -public: - // ctors - // ----- - // default - use Create - wxCaretBase() { Init(); } - // create the caret of given (in pixels) width and height and associate - // with the given window - wxCaretBase(wxWindowBase *window, int width, int height) - { - Init(); - - (void)Create(window, width, height); - } - // same as above - wxCaretBase(wxWindowBase *window, const wxSize& size) - { - Init(); - - (void)Create(window, size); - } - - // a virtual dtor has been provided since this class has virtual members - virtual ~wxCaretBase() { } - - // Create() functions - same as ctor but returns the success code - // -------------------------------------------------------------- - - // same as ctor - bool Create(wxWindowBase *window, int width, int height) - { return DoCreate(window, width, height); } - // same as ctor - bool Create(wxWindowBase *window, const wxSize& size) - { return DoCreate(window, size.x, size.y); } - - // accessors - // --------- - - // is the caret valid? - bool IsOk() const { return m_width != 0 && m_height != 0; } - - // is the caret currently shown? - bool IsVisible() const { return m_countVisible > 0; } - - // get the caret position - void GetPosition(int *x, int *y) const - { - if ( x ) *x = m_x; - if ( y ) *y = m_y; - } - wxPoint GetPosition() const { return wxPoint(m_x, m_y); } - - // get the caret size - void GetSize(int *width, int *height) const - { - if ( width ) *width = m_width; - if ( height ) *height = m_height; - } - wxSize GetSize() const { return wxSize(m_width, m_height); } - - // get the window we're associated with - wxWindow *GetWindow() const { return (wxWindow *)m_window; } - - // change the size of the caret - void SetSize(int width, int height) { - m_width = width; - m_height = height; - DoSize(); - } - void SetSize(const wxSize& size) { SetSize(size.x, size.y); } - - - // operations - // ---------- - - // move the caret to given position (in logical coords) - void Move(int x, int y) { m_x = x; m_y = y; DoMove(); } - void Move(const wxPoint& pt) { m_x = pt.x; m_y = pt.y; DoMove(); } - - // show/hide the caret (should be called by wxWindow when needed): - // Show() must be called as many times as Hide() + 1 to make the caret - // visible - virtual void Show(bool show = true) - { - if ( show ) - { - if ( m_countVisible++ == 0 ) - DoShow(); - } - else - { - if ( --m_countVisible == 0 ) - DoHide(); - } - } - virtual void Hide() { Show(false); } - - // blink time is measured in milliseconds and is the time elapsed - // between 2 inversions of the caret (blink time of the caret is common - // to all carets in the Universe, so these functions are static) - static int GetBlinkTime(); - static void SetBlinkTime(int milliseconds); - - // implementation from now on - // -------------------------- - - // these functions should be called by wxWindow when the window gets/loses - // the focus - we create/show and hide/destroy the caret here - virtual void OnSetFocus() { } - virtual void OnKillFocus() { } - -protected: - // these functions may be overriden in the derived classes, but they - // should call the base class version first - virtual bool DoCreate(wxWindowBase *window, int width, int height) - { - m_window = window; - m_width = width; - m_height = height; - - return true; - } - - // pure virtuals to implement in the derived class - virtual void DoShow() = 0; - virtual void DoHide() = 0; - virtual void DoMove() = 0; - virtual void DoSize() { } - - // the common initialization - void Init() - { - m_window = (wxWindowBase *)NULL; - m_x = m_y = 0; - m_width = m_height = 0; - m_countVisible = 0; - } - - // the size of the caret - int m_width, m_height; - - // the position of the caret - int m_x, m_y; - - // the window we're associated with - wxWindowBase *m_window; - - // visibility count: the caret is visible only if it's positive - int m_countVisible; - -private: - DECLARE_NO_COPY_CLASS(wxCaretBase) -}; - -// --------------------------------------------------------------------------- -// now include the real thing -// --------------------------------------------------------------------------- - -#if defined(__WXMSW__) - #include "wx/msw/caret.h" -#else - #include "wx/generic/caret.h" -#endif // platform - -// ---------------------------------------------------------------------------- -// wxCaretSuspend: a simple class which hides the caret in its ctor and -// restores it in the dtor, this should be used when drawing on the screen to -// avoid overdrawing the caret -// ---------------------------------------------------------------------------- - -#ifdef wxHAS_CARET_USING_OVERLAYS - -// we don't need to hide the caret if it's rendered using overlays -class WXDLLEXPORT wxCaretSuspend -{ -public: - wxCaretSuspend(wxWindow *WXUNUSED(win)) {} - - DECLARE_NO_COPY_CLASS(wxCaretSuspend) -}; - -#else // !wxHAS_CARET_USING_OVERLAYS - -class WXDLLEXPORT wxCaretSuspend -{ -public: - wxCaretSuspend(wxWindow *win) - { - m_caret = win->GetCaret(); - m_show = false; - if ( m_caret && m_caret->IsVisible() ) - { - m_caret->Hide(); - m_show = true; - } - } - - ~wxCaretSuspend() - { - if ( m_caret && m_show ) - m_caret->Show(); - } - -private: - wxCaret *m_caret; - bool m_show; - - DECLARE_NO_COPY_CLASS(wxCaretSuspend) -}; - -#endif // wxHAS_CARET_USING_OVERLAYS/!wxHAS_CARET_USING_OVERLAYS - -#endif // wxUSE_CARET - -#endif // _WX_CARET_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/checkbox.h b/desmume/src/windows/wx/include/wx/checkbox.h deleted file mode 100644 index 3d76b4a19..000000000 --- a/desmume/src/windows/wx/include/wx/checkbox.h +++ /dev/null @@ -1,156 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/checkbox.h -// Purpose: wxCheckBox class interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 07.09.00 -// RCS-ID: $Id: checkbox.h 39901 2006-06-30 10:51:44Z VS $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CHECKBOX_H_BASE_ -#define _WX_CHECKBOX_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_CHECKBOX - -#include "wx/control.h" - - -/* - * wxCheckBox style flags - * (Using wxCHK_* because wxCB_* is used by wxComboBox). - * Determine whether to use a 3-state or 2-state - * checkbox. 3-state enables to differentiate - * between 'unchecked', 'checked' and 'undetermined'. - */ -#define wxCHK_2STATE 0x0000 -#define wxCHK_3STATE 0x1000 - -/* - * If this style is set the user can set the checkbox to the - * undetermined state. If not set the undetermined set can only - * be set programmatically. - * This style can only be used with 3 state checkboxes. - */ -#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 WXDLLEXPORT_DATA(const wxChar) wxCheckBoxNameStr[]; - -// ---------------------------------------------------------------------------- -// wxCheckBox: a control which shows a label and a box which may be checked -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxCheckBoxBase : public wxControl -{ -public: - wxCheckBoxBase() { } - - // set/get the checked status of the listbox - virtual void SetValue(bool value) = 0; - virtual bool GetValue() const = 0; - - bool IsChecked() const - { - wxASSERT_MSG( !Is3State(), wxT("Calling IsChecked() doesn't make sense for") - wxT(" a three state checkbox, Use Get3StateValue() instead") ); - - return GetValue(); - } - - wxCheckBoxState Get3StateValue() const - { - wxCheckBoxState state = DoGet3StateValue(); - - if ( state == wxCHK_UNDETERMINED && !Is3State() ) - { - // Undetermined state with a 2-state checkbox?? - wxFAIL_MSG( wxT("DoGet3StateValue() says the 2-state checkbox is ") - wxT("in an undetermined/third state") ); - - state = wxCHK_UNCHECKED; - } - - return state; - } - - void Set3StateValue(wxCheckBoxState state) - { - if ( state == wxCHK_UNDETERMINED && !Is3State() ) - { - wxFAIL_MSG(wxT("Setting a 2-state checkbox to undetermined state")); - state = wxCHK_UNCHECKED; - } - - DoSet3StateValue(state); - } - - bool Is3State() const { return HasFlag(wxCHK_3STATE); } - - bool Is3rdStateAllowedForUser() const - { - return HasFlag(wxCHK_ALLOW_3RD_STATE_FOR_USER); - } - - virtual bool HasTransparentBackground() { return true; } - - // wxCheckBox-specific processing after processing the update event - virtual void DoUpdateWindowUI(wxUpdateUIEvent& event) - { - wxControl::DoUpdateWindowUI(event); - - if ( event.GetSetChecked() ) - SetValue(event.GetChecked()); - } - -protected: - virtual void DoSet3StateValue(wxCheckBoxState WXUNUSED(state)) { wxFAIL; } - - virtual wxCheckBoxState DoGet3StateValue() const - { - wxFAIL; - return wxCHK_UNCHECKED; - } - -private: - DECLARE_NO_COPY_CLASS(wxCheckBoxBase) -}; - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/checkbox.h" -#elif defined(__WXMSW__) - #include "wx/msw/checkbox.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/checkbox.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/checkbox.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/checkbox.h" -#elif defined(__WXMAC__) - #include "wx/mac/checkbox.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/checkbox.h" -#elif defined(__WXPM__) - #include "wx/os2/checkbox.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/checkbox.h" -#endif - -#endif // wxUSE_CHECKBOX - -#endif - // _WX_CHECKBOX_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/checklst.h b/desmume/src/windows/wx/include/wx/checklst.h deleted file mode 100644 index b83c8536f..000000000 --- a/desmume/src/windows/wx/include/wx/checklst.h +++ /dev/null @@ -1,64 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/checklst.h -// Purpose: wxCheckListBox class interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 12.09.00 -// RCS-ID: $Id: checklst.h 38319 2006-03-23 22:05:23Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CHECKLST_H_BASE_ -#define _WX_CHECKLST_H_BASE_ - -#if wxUSE_CHECKLISTBOX - -#include "wx/listbox.h" - -// ---------------------------------------------------------------------------- -// wxCheckListBox: a listbox whose items may be checked -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxCheckListBoxBase : public - #ifdef __WXWINCE__ - // keep virtuals synchronised - wxListBoxBase - #else - wxListBox - #endif -{ -public: - wxCheckListBoxBase() { } - - // check list box specific methods - virtual bool IsChecked(unsigned int item) const = 0; - virtual void Check(unsigned int item, bool check = true) = 0; - - DECLARE_NO_COPY_CLASS(wxCheckListBoxBase) -}; - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/checklst.h" -#elif defined(__WXWINCE__) - #include "wx/msw/wince/checklst.h" -#elif defined(__WXMSW__) - #include "wx/msw/checklst.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/checklst.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/checklst.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/checklst.h" -#elif defined(__WXMAC__) - #include "wx/mac/checklst.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/checklst.h" -#elif defined(__WXPM__) - #include "wx/os2/checklst.h" -#endif - -#endif // wxUSE_CHECKLISTBOX - -#endif - // _WX_CHECKLST_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/chkconf.h b/desmume/src/windows/wx/include/wx/chkconf.h deleted file mode 100644 index e0717b9d5..000000000 --- a/desmume/src/windows/wx/include/wx/chkconf.h +++ /dev/null @@ -1,1871 +0,0 @@ -/* - * Name: wx/chkconf.h - * Purpose: check the config settings for consistency - * Author: Vadim Zeitlin - * Modified by: - * Created: 09.08.00 - * RCS-ID: $Id: chkconf.h 48113 2007-08-15 17:43:50Z DE $ - * Copyright: (c) 2000 Vadim Zeitlin - * Licence: wxWindows licence - */ - -/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ - -/* - Platform-specific checking. - */ - -#if defined(__WXPALMOS__) -# include "wx/palmos/chkconf.h" -#elif defined(__WXWINCE__) -# include "wx/msw/wince/chkconf.h" -#elif defined(__WXMSW__) -# include "wx/msw/chkconf.h" -#elif defined(__WXMAC__) -# include "wx/mac/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" -#endif - -#ifdef __WXUNIVERSAL__ -# include "wx/univ/chkconf.h" -#endif - -/* - this global setting determines what should we do if the setting FOO - requires BAR and BAR is not set: we can either silently unset FOO as well - (do this if you're trying to build the smallest possible library) or give an - error and abort (default as leads to least surprizing behaviour) - */ -#define wxABORT_ON_CONFIG_ERROR - -/* - global features - */ - -/* GUI build by default */ -#if !defined(wxUSE_GUI) -# define wxUSE_GUI 1 -#endif /* !defined(wxUSE_GUI) */ - -/* Turn off wxUSE_ABI_INCOMPATIBLE_FEATURES if not specified. */ -#if !defined(wxUSE_ABI_INCOMPATIBLE_FEATURES) -# define wxUSE_ABI_INCOMPATIBLE_FEATURES 0 -#endif /* !defined(wxUSE_ABI_INCOMPATIBLE_FEATURES) */ - -/* - If we're compiling without support for threads/exceptions we have to - disable the corresponding features. - */ -#ifdef wxNO_THREADS -# undef wxUSE_THREADS -# define wxUSE_THREADS 0 -#endif /* wxNO_THREADS */ - -#ifdef wxNO_EXCEPTIONS -# undef wxUSE_EXCEPTIONS -# define wxUSE_EXCEPTIONS 0 -#endif /* wxNO_EXCEPTIONS */ - -/* we also must disable exceptions if compiler doesn't support them */ -#if defined(_MSC_VER) && !defined(_CPPUNWIND) -# undef wxUSE_EXCEPTIONS -# define wxUSE_EXCEPTIONS 0 -#endif /* VC++ without exceptions support */ - - -/* - tests for non GUI features - - please keep the options in alphabetical order! - */ - -#ifndef wxUSE_CRASHREPORT - /* this one is special: as currently it is Windows-only, don't force it - to be defined on other platforms */ -# if defined(wxABORT_ON_CONFIG_ERROR) && defined(__WXMSW__) -# error "wxUSE_CRASHREPORT must be defined." -# else -# define wxUSE_CRASHREPORT 0 -# endif -#endif /* !defined(wxUSE_CRASHREPORT) */ - -#ifndef wxUSE_DYNLIB_CLASS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DYNLIB_CLASS must be defined." -# else -# define wxUSE_DYNLIB_CLASS 0 -# endif -#endif /* !defined(wxUSE_DYNLIB_CLASS) */ - -#ifndef wxUSE_EXCEPTIONS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_EXCEPTIONS must be defined." -# else -# define wxUSE_EXCEPTIONS 0 -# endif -#endif /* !defined(wxUSE_EXCEPTIONS) */ - -#ifndef wxUSE_FILESYSTEM -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_FILESYSTEM must be defined." -# else -# define wxUSE_FILESYSTEM 0 -# endif -#endif /* !defined(wxUSE_FILESYSTEM) */ - -#ifndef wxUSE_FS_ARCHIVE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_FS_ARCHIVE must be defined." -# else -# define wxUSE_FS_ARCHIVE 0 -# endif -#endif /* !defined(wxUSE_FS_ARCHIVE) */ - -/* don't give an error about this one yet, it's not fully implemented */ -#ifndef wxUSE_FSVOLUME -# define wxUSE_FSVOLUME 0 -#endif /* !defined(wxUSE_FSVOLUME) */ - -#ifndef wxUSE_DYNAMIC_LOADER -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DYNAMIC_LOADER must be defined." -# else -# define wxUSE_DYNAMIC_LOADER 0 -# endif -#endif /* !defined(wxUSE_DYNAMIC_LOADER) */ - -#ifndef wxUSE_LOG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LOG must be defined." -# else -# define wxUSE_LOG 0 -# endif -#endif /* !defined(wxUSE_LOG) */ - -#ifndef wxUSE_LONGLONG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LONGLONG must be defined." -# else -# define wxUSE_LONGLONG 0 -# endif -#endif /* !defined(wxUSE_LONGLONG) */ - -#ifndef wxUSE_MIMETYPE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_MIMETYPE must be defined." -# else -# define wxUSE_MIMETYPE 0 -# endif -#endif /* !defined(wxUSE_MIMETYPE) */ - -#ifndef wxUSE_ON_FATAL_EXCEPTION -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_ON_FATAL_EXCEPTION must be defined." -# else -# define wxUSE_ON_FATAL_EXCEPTION 0 -# endif -#endif /* !defined(wxUSE_ON_FATAL_EXCEPTION) */ - -#ifndef wxUSE_PRINTF_POS_PARAMS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PRINTF_POS_PARAMS must be defined." -# else -# define wxUSE_PRINTF_POS_PARAMS 0 -# endif -#endif /* !defined(wxUSE_PRINTF_POS_PARAMS) */ - -#ifndef wxUSE_PROTOCOL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PROTOCOL must be defined." -# else -# define wxUSE_PROTOCOL 0 -# endif -#endif /* !defined(wxUSE_PROTOCOL) */ - -/* we may not define wxUSE_PROTOCOL_XXX if wxUSE_PROTOCOL is set to 0 */ -#if !wxUSE_PROTOCOL -# undef wxUSE_PROTOCOL_HTTP -# undef wxUSE_PROTOCOL_FTP -# undef wxUSE_PROTOCOL_FILE -# define wxUSE_PROTOCOL_HTTP 0 -# define wxUSE_PROTOCOL_FTP 0 -# define wxUSE_PROTOCOL_FILE 0 -#endif /* wxUSE_PROTOCOL */ - -#ifndef wxUSE_PROTOCOL_HTTP -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PROTOCOL_HTTP must be defined." -# else -# define wxUSE_PROTOCOL_HTTP 0 -# endif -#endif /* !defined(wxUSE_PROTOCOL_HTTP) */ - -#ifndef wxUSE_PROTOCOL_FTP -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PROTOCOL_FTP must be defined." -# else -# define wxUSE_PROTOCOL_FTP 0 -# endif -#endif /* !defined(wxUSE_PROTOCOL_FTP) */ - -#ifndef wxUSE_PROTOCOL_FILE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PROTOCOL_FILE must be defined." -# else -# define wxUSE_PROTOCOL_FILE 0 -# endif -#endif /* !defined(wxUSE_PROTOCOL_FILE) */ - -#ifndef wxUSE_REGEX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_REGEX must be defined." -# else -# define wxUSE_REGEX 0 -# endif -#endif /* !defined(wxUSE_REGEX) */ - -#ifndef wxUSE_STDPATHS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_STDPATHS must be defined." -# else -# define wxUSE_STDPATHS 1 -# endif -#endif /* !defined(wxUSE_STDPATHS) */ - -#ifndef wxUSE_XML -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_XML must be defined." -# else -# define wxUSE_XML 0 -# endif -#endif /* !defined(wxUSE_XML) */ - -#ifndef wxUSE_SOCKETS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_SOCKETS must be defined." -# else -# define wxUSE_SOCKETS 0 -# endif -#endif /* !defined(wxUSE_SOCKETS) */ - -#ifndef wxUSE_STREAMS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_STREAMS must be defined." -# else -# define wxUSE_STREAMS 0 -# endif -#endif /* !defined(wxUSE_STREAMS) */ - -#ifndef wxUSE_STOPWATCH -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_STOPWATCH must be defined." -# else -# define wxUSE_STOPWATCH 0 -# endif -#endif /* !defined(wxUSE_STOPWATCH) */ - -#ifndef wxUSE_TEXTBUFFER -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TEXTBUFFER must be defined." -# else -# define wxUSE_TEXTBUFFER 0 -# endif -#endif /* !defined(wxUSE_TEXTBUFFER) */ - -#ifndef wxUSE_TEXTFILE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TEXTFILE must be defined." -# else -# define wxUSE_TEXTFILE 0 -# endif -#endif /* !defined(wxUSE_TEXTFILE) */ - -#ifndef wxUSE_UNICODE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_UNICODE must be defined." -# else -# define wxUSE_UNICODE 0 -# endif -#endif /* !defined(wxUSE_UNICODE) */ - -#ifndef wxUSE_URL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_URL must be defined." -# else -# define wxUSE_URL 0 -# endif -#endif /* !defined(wxUSE_URL) */ - -#ifndef wxUSE_VARIANT -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_VARIANT must be defined." -# else -# define wxUSE_VARIANT 0 -# endif -#endif /* wxUSE_VARIANT */ - -/* - all these tests are for GUI only - - please keep the options in alphabetical order! - */ -#if wxUSE_GUI - -/* - all of the settings tested below must be defined or we'd get an error from - preprocessor about invalid integer expression - */ - -#ifndef wxUSE_ABOUTDLG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_ABOUTDLG must be defined." -# else -# define wxUSE_ABOUTDLG 0 -# endif -#endif /* !defined(wxUSE_ABOUTDLG) */ - -#ifndef wxUSE_ACCEL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_ACCEL must be defined." -# else -# define wxUSE_ACCEL 0 -# endif -#endif /* !defined(wxUSE_ACCEL) */ - -#ifndef wxUSE_ANIMATIONCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_ANIMATIONCTRL must be defined." -# else -# define wxUSE_ANIMATIONCTRL 0 -# endif -#endif /* !defined(wxUSE_ANIMATIONCTRL) */ - -#ifndef wxUSE_BITMAPCOMBOBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_BITMAPCOMBOBOX must be defined." -# else -# define wxUSE_BITMAPCOMBOBOX 0 -# endif -#endif /* !defined(wxUSE_BITMAPCOMBOBOX) */ - -#ifndef wxUSE_BMPBUTTON -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_BMPBUTTON must be defined." -# else -# define wxUSE_BMPBUTTON 0 -# endif -#endif /* !defined(wxUSE_BMPBUTTON) */ - -#ifndef wxUSE_BUTTON -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_BUTTON must be defined." -# else -# define wxUSE_BUTTON 0 -# endif -#endif /* !defined(wxUSE_BUTTON) */ - -#ifndef wxUSE_CALENDARCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_CALENDARCTRL must be defined." -# else -# define wxUSE_CALENDARCTRL 0 -# endif -#endif /* !defined(wxUSE_CALENDARCTRL) */ - -#ifndef wxUSE_CARET -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_CARET must be defined." -# else -# define wxUSE_CARET 0 -# endif -#endif /* !defined(wxUSE_CARET) */ - -#ifndef wxUSE_CHECKBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_CHECKBOX must be defined." -# else -# define wxUSE_CHECKBOX 0 -# endif -#endif /* !defined(wxUSE_CHECKBOX) */ - -#ifndef wxUSE_CHECKLISTBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_CHECKLISTBOX must be defined." -# else -# define wxUSE_CHECKLISTBOX 0 -# endif -#endif /* !defined(wxUSE_CHECKLISTBOX) */ - -#ifndef wxUSE_CHOICE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_CHOICE must be defined." -# else -# define wxUSE_CHOICE 0 -# endif -#endif /* !defined(wxUSE_CHOICE) */ - -#ifndef wxUSE_CHOICEBOOK -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_CHOICEBOOK must be defined." -# else -# define wxUSE_CHOICEBOOK 0 -# endif -#endif /* !defined(wxUSE_CHOICEBOOK) */ - -#ifndef wxUSE_CHOICEDLG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_CHOICEDLG must be defined." -# else -# define wxUSE_CHOICEDLG 0 -# endif -#endif /* !defined(wxUSE_CHOICEDLG) */ - -#ifndef wxUSE_CLIPBOARD -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_CLIPBOARD must be defined." -# else -# define wxUSE_CLIPBOARD 0 -# endif -#endif /* !defined(wxUSE_CLIPBOARD) */ - -#ifndef wxUSE_COLLPANE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_COLLPANE must be defined." -# else -# define wxUSE_COLLPANE 0 -# endif -#endif /* !defined(wxUSE_COLLPANE) */ - -#ifndef wxUSE_COLOURDLG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_COLOURDLG must be defined." -# else -# define wxUSE_COLOURDLG 0 -# endif -#endif /* !defined(wxUSE_COLOURDLG) */ - -#ifndef wxUSE_COLOURPICKERCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_COLOURPICKERCTRL must be defined." -# else -# define wxUSE_COLOURPICKERCTRL 0 -# endif -#endif /* !defined(wxUSE_COLOURPICKERCTRL) */ - -#ifndef wxUSE_COMBOBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_COMBOBOX must be defined." -# else -# define wxUSE_COMBOBOX 0 -# endif -#endif /* !defined(wxUSE_COMBOBOX) */ - -#ifndef wxUSE_COMBOCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_COMBOCTRL must be defined." -# else -# define wxUSE_COMBOCTRL 0 -# endif -#endif /* !defined(wxUSE_COMBOCTRL) */ - -#ifndef wxUSE_DATAOBJ -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DATAOBJ must be defined." -# else -# define wxUSE_DATAOBJ 0 -# endif -#endif /* !defined(wxUSE_DATAOBJ) */ - -#ifndef wxUSE_DATAVIEWCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DATAVIEWCTRL must be defined." -# else -# define wxUSE_DATAVIEWCTRL 0 -# endif -#endif /* !defined(wxUSE_DATAVIEWCTRL) */ - -#ifndef wxUSE_DATEPICKCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DATEPICKCTRL must be defined." -# else -# define wxUSE_DATEPICKCTRL 0 -# endif -#endif /* !defined(wxUSE_DATEPICKCTRL) */ - -#ifndef wxUSE_DIRPICKERCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DIRPICKERCTRL must be defined." -# else -# define wxUSE_DIRPICKERCTRL 0 -# endif -#endif /* !defined(wxUSE_DIRPICKERCTRL) */ - -#ifndef wxUSE_DISPLAY -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DISPLAY must be defined." -# else -# define wxUSE_DISPLAY 0 -# endif -#endif /* !defined(wxUSE_DISPLAY) */ - -#ifndef wxUSE_DOC_VIEW_ARCHITECTURE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DOC_VIEW_ARCHITECTURE must be defined." -# else -# define wxUSE_DOC_VIEW_ARCHITECTURE 0 -# endif -#endif /* !defined(wxUSE_DOC_VIEW_ARCHITECTURE) */ - -#ifndef wxUSE_FILEDLG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_FILEDLG must be defined." -# else -# define wxUSE_FILEDLG 0 -# endif -#endif /* !defined(wxUSE_FILEDLG) */ - -#ifndef wxUSE_FILEPICKERCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_FILEPICKERCTRL must be defined." -# else -# define wxUSE_FILEPICKERCTRL 0 -# endif -#endif /* !defined(wxUSE_FILEPICKERCTRL) */ - -#ifndef wxUSE_FONTDLG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_FONTDLG must be defined." -# else -# define wxUSE_FONTDLG 0 -# endif -#endif /* !defined(wxUSE_FONTDLG) */ - -#ifndef wxUSE_FONTMAP -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_FONTMAP must be defined." -# else -# define wxUSE_FONTMAP 0 -# endif -#endif /* !defined(wxUSE_FONTMAP) */ - -#ifndef wxUSE_FONTPICKERCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_FONTPICKERCTRL must be defined." -# else -# define wxUSE_FONTPICKERCTRL 0 -# endif -#endif /* !defined(wxUSE_FONTPICKERCTRL) */ - -#ifndef wxUSE_GAUGE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_GAUGE must be defined." -# else -# define wxUSE_GAUGE 0 -# endif -#endif /* !defined(wxUSE_GAUGE) */ - -#ifndef wxUSE_GRAPHICS_CONTEXT -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_GRAPHICS_CONTEXT must be defined." -# else -# define wxUSE_GRAPHICS_CONTEXT 0 -# endif -#endif /* !defined(wxUSE_GRAPHICS_CONTEXT) */ - - -#ifndef wxUSE_GRID -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_GRID must be defined." -# else -# define wxUSE_GRID 0 -# endif -#endif /* !defined(wxUSE_GRID) */ - -#ifndef wxUSE_HELP -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_HELP must be defined." -# else -# define wxUSE_HELP 0 -# endif -#endif /* !defined(wxUSE_HELP) */ - -#ifndef wxUSE_HYPERLINKCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_HYPERLINKCTRL must be defined." -# else -# define wxUSE_HYPERLINKCTRL 0 -# endif -#endif /* !defined(wxUSE_HYPERLINKCTRL) */ - -#ifndef wxUSE_HTML -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_HTML must be defined." -# else -# define wxUSE_HTML 0 -# endif -#endif /* !defined(wxUSE_HTML) */ - -#ifndef wxUSE_LIBMSPACK -# ifndef __UNIX__ - /* set to 0 on platforms that don't have libmspack */ -# define wxUSE_LIBMSPACK 0 -# else -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LIBMSPACK must be defined." -# else -# define wxUSE_LIBMSPACK 0 -# endif -# endif -#endif /* !defined(wxUSE_LIBMSPACK) */ - -#ifndef wxUSE_ICO_CUR -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_ICO_CUR must be defined." -# else -# define wxUSE_ICO_CUR 0 -# endif -#endif /* !defined(wxUSE_ICO_CUR) */ - -#ifndef wxUSE_IFF -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_IFF must be defined." -# else -# define wxUSE_IFF 0 -# endif -#endif /* !defined(wxUSE_IFF) */ - -#ifndef wxUSE_IMAGLIST -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_IMAGLIST must be defined." -# else -# define wxUSE_IMAGLIST 0 -# endif -#endif /* !defined(wxUSE_IMAGLIST) */ - -#ifndef wxUSE_JOYSTICK -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_JOYSTICK must be defined." -# else -# define wxUSE_JOYSTICK 0 -# endif -#endif /* !defined(wxUSE_JOYSTICK) */ - -#ifndef wxUSE_LISTBOOK -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LISTBOOK must be defined." -# else -# define wxUSE_LISTBOOK 0 -# endif -#endif /* !defined(wxUSE_LISTBOOK) */ - -#ifndef wxUSE_LISTBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LISTBOX must be defined." -# else -# define wxUSE_LISTBOX 0 -# endif -#endif /* !defined(wxUSE_LISTBOX) */ - -#ifndef wxUSE_LISTCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LISTCTRL must be defined." -# else -# define wxUSE_LISTCTRL 0 -# endif -#endif /* !defined(wxUSE_LISTCTRL) */ - -#ifndef wxUSE_LOGGUI -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LOGGUI must be defined." -# else -# define wxUSE_LOGGUI 0 -# endif -#endif /* !defined(wxUSE_LOGGUI) */ - -#ifndef wxUSE_LOGWINDOW -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LOGWINDOW must be defined." -# else -# define wxUSE_LOGWINDOW 0 -# endif -#endif /* !defined(wxUSE_LOGWINDOW) */ - -#ifndef wxUSE_LOG_DIALOG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LOG_DIALOG must be defined." -# else -# define wxUSE_LOG_DIALOG 0 -# endif -#endif /* !defined(wxUSE_LOG_DIALOG) */ - -#ifndef wxUSE_MDI -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_MDI must be defined." -# else -# define wxUSE_MDI 0 -# endif -#endif /* !defined(wxUSE_MDI) */ - -#ifndef wxUSE_MDI_ARCHITECTURE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_MDI_ARCHITECTURE must be defined." -# else -# define wxUSE_MDI_ARCHITECTURE 0 -# endif -#endif /* !defined(wxUSE_MDI_ARCHITECTURE) */ - -#ifndef wxUSE_MENUS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_MENUS must be defined." -# else -# define wxUSE_MENUS 0 -# endif -#endif /* !defined(wxUSE_MENUS) */ - -#ifndef wxUSE_MSGDLG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_MSGDLG must be defined." -# else -# define wxUSE_MSGDLG 0 -# endif -#endif /* !defined(wxUSE_MSGDLG) */ - -#ifndef wxUSE_NOTEBOOK -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_NOTEBOOK must be defined." -# else -# define wxUSE_NOTEBOOK 0 -# endif -#endif /* !defined(wxUSE_NOTEBOOK) */ - -#ifndef wxUSE_ODCOMBOBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_ODCOMBOBOX must be defined." -# else -# define wxUSE_ODCOMBOBOX 0 -# endif -#endif /* !defined(wxUSE_ODCOMBOBOX) */ - -#ifndef wxUSE_PALETTE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PALETTE must be defined." -# else -# define wxUSE_PALETTE 0 -# endif -#endif /* !defined(wxUSE_PALETTE) */ - -#ifndef wxUSE_POPUPWIN -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_POPUPWIN must be defined." -# else -# define wxUSE_POPUPWIN 0 -# endif -#endif /* !defined(wxUSE_POPUPWIN) */ - -#ifndef wxUSE_PRINTING_ARCHITECTURE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PRINTING_ARCHITECTURE must be defined." -# else -# define wxUSE_PRINTING_ARCHITECTURE 0 -# endif -#endif /* !defined(wxUSE_PRINTING_ARCHITECTURE) */ - -#ifndef wxUSE_RADIOBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_RADIOBOX must be defined." -# else -# define wxUSE_RADIOBOX 0 -# endif -#endif /* !defined(wxUSE_RADIOBOX) */ - -#ifndef wxUSE_RADIOBTN -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_RADIOBTN must be defined." -# else -# define wxUSE_RADIOBTN 0 -# endif -#endif /* !defined(wxUSE_RADIOBTN) */ - -#ifndef wxUSE_SASH -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_SASH must be defined." -# else -# define wxUSE_SASH 0 -# endif -#endif /* !defined(wxUSE_SASH) */ - -#ifndef wxUSE_SCROLLBAR -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_SCROLLBAR must be defined." -# else -# define wxUSE_SCROLLBAR 0 -# endif -#endif /* !defined(wxUSE_SCROLLBAR) */ - -#ifndef wxUSE_SLIDER -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_SLIDER must be defined." -# else -# define wxUSE_SLIDER 0 -# endif -#endif /* !defined(wxUSE_SLIDER) */ - -#ifndef wxUSE_SOUND -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_SOUND must be defined." -# else -# define wxUSE_SOUND 0 -# endif -#endif /* !defined(wxUSE_SOUND) */ - -#ifndef wxUSE_SPINBTN -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_SPINBTN must be defined." -# else -# define wxUSE_SPINBTN 0 -# endif -#endif /* !defined(wxUSE_SPINBTN) */ - -#ifndef wxUSE_SPINCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_SPINCTRL must be defined." -# else -# define wxUSE_SPINCTRL 0 -# endif -#endif /* !defined(wxUSE_SPINCTRL) */ - -#ifndef wxUSE_SPLASH -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_SPLASH must be defined." -# else -# define wxUSE_SPLASH 0 -# endif -#endif /* !defined(wxUSE_SPLASH) */ - -#ifndef wxUSE_SPLITTER -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_SPLITTER must be defined." -# else -# define wxUSE_SPLITTER 0 -# endif -#endif /* !defined(wxUSE_SPLITTER) */ - -#ifndef wxUSE_STATBMP -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_STATBMP must be defined." -# else -# define wxUSE_STATBMP 0 -# endif -#endif /* !defined(wxUSE_STATBMP) */ - -#ifndef wxUSE_STATBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_STATBOX must be defined." -# else -# define wxUSE_STATBOX 0 -# endif -#endif /* !defined(wxUSE_STATBOX) */ - -#ifndef wxUSE_STATLINE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_STATLINE must be defined." -# else -# define wxUSE_STATLINE 0 -# endif -#endif /* !defined(wxUSE_STATLINE) */ - -#ifndef wxUSE_STATTEXT -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_STATTEXT must be defined." -# else -# define wxUSE_STATTEXT 0 -# endif -#endif /* !defined(wxUSE_STATTEXT) */ - -#ifndef wxUSE_STATUSBAR -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_STATUSBAR must be defined." -# else -# define wxUSE_STATUSBAR 0 -# endif -#endif /* !defined(wxUSE_STATUSBAR) */ - -#ifndef wxUSE_TAB_DIALOG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TAB_DIALOG must be defined." -# else -# define wxUSE_TAB_DIALOG 0 -# endif -#endif /* !defined(wxUSE_TAB_DIALOG) */ - -#ifndef wxUSE_TEXTCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TEXTCTRL must be defined." -# else -# define wxUSE_TEXTCTRL 0 -# endif -#endif /* !defined(wxUSE_TEXTCTRL) */ - -#ifndef wxUSE_TIPWINDOW -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TIPWINDOW must be defined." -# else -# define wxUSE_TIPWINDOW 0 -# endif -#endif /* !defined(wxUSE_TIPWINDOW) */ - -#ifndef wxUSE_TOOLBAR -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TOOLBAR must be defined." -# else -# define wxUSE_TOOLBAR 0 -# endif -#endif /* !defined(wxUSE_TOOLBAR) */ - -#ifndef wxUSE_TOOLTIPS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TOOLTIPS must be defined." -# else -# define wxUSE_TOOLTIPS 0 -# endif -#endif /* !defined(wxUSE_TOOLTIPS) */ - -#ifndef wxUSE_TREECTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TREECTRL must be defined." -# else -# define wxUSE_TREECTRL 0 -# endif -#endif /* !defined(wxUSE_TREECTRL) */ - -#ifndef wxUSE_VALIDATORS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_VALIDATORS must be defined." -# else -# define wxUSE_VALIDATORS 0 -# endif -#endif /* !defined(wxUSE_VALIDATORS) */ - -#ifndef wxUSE_WXHTML_HELP -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_WXHTML_HELP must be defined." -# else -# define wxUSE_WXHTML_HELP 0 -# endif -#endif /* !defined(wxUSE_WXHTML_HELP) */ - -#ifndef wxUSE_XRC -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_XRC must be defined." -# else -# define wxUSE_XRC 0 -# endif -#endif /* !defined(wxUSE_XRC) */ - -#endif /* wxUSE_GUI */ - -/* - check consistency of the settings - */ - -#if WXWIN_COMPATIBILITY_2_4 -# if !WXWIN_COMPATIBILITY_2_6 -# ifdef wxABORT_ON_CONFIG_ERROR -# error "2.4.X compatibility requires 2.6.X compatibility" -# else -# undef WXWIN_COMPATIBILITY_2_6 -# define WXWIN_COMPATIBILITY_2_6 1 -# endif -# endif -#endif /* WXWIN_COMPATIBILITY_2_4 */ - -#if wxUSE_ARCHIVE_STREAMS -# if !wxUSE_DATETIME -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxArchive requires wxUSE_DATETIME" -# else -# undef wxUSE_ARCHIVE_STREAMS -# define wxUSE_ARCHIVE_STREAMS 0 -# endif -# endif -#endif /* wxUSE_ARCHIVE_STREAMS */ - -#if wxUSE_CRASHREPORT && !wxUSE_ON_FATAL_EXCEPTION -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_CRASHREPORT requires wxUSE_ON_FATAL_EXCEPTION" -# else -# undef wxUSE_CRASHREPORT -# define wxUSE_CRASHREPORT 0 -# endif -#endif /* wxUSE_CRASHREPORT */ - -#if wxUSE_PROTOCOL_FILE || wxUSE_PROTOCOL_FTP || wxUSE_PROTOCOL_HTTP -# if !wxUSE_PROTOCOL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PROTOCOL_XXX requires wxUSE_PROTOCOL" -# else -# undef wxUSE_PROTOCOL -# define wxUSE_PROTOCOL 1 -# endif -# endif -#endif /* wxUSE_PROTOCOL_XXX */ - -#if wxUSE_URL -# if !wxUSE_PROTOCOL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_URL requires wxUSE_PROTOCOL" -# else -# undef wxUSE_PROTOCOL -# define wxUSE_PROTOCOL 1 -# endif -# endif -#endif /* wxUSE_URL */ - -#if wxUSE_PROTOCOL -# if !wxUSE_SOCKETS -# if wxUSE_PROTOCOL_HTTP || wxUSE_PROTOCOL_FTP -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PROTOCOL_FTP/HTTP requires wxUSE_SOCKETS" -# else -# undef wxUSE_SOCKETS -# define wxUSE_SOCKETS 1 -# endif -# endif -# endif - -# if !wxUSE_STREAMS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PROTOCOL requires wxUSE_STREAMS" -# else -# undef wxUSE_STREAMS -# define wxUSE_STREAMS 1 -# endif -# endif -#endif /* wxUSE_PROTOCOL */ - -/* have to test for wxUSE_HTML before wxUSE_FILESYSTEM */ -#if wxUSE_HTML -# if !wxUSE_FILESYSTEM -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxHTML requires wxFileSystem" -# else -# undef wxUSE_FILESYSTEM -# define wxUSE_FILESYSTEM 1 -# endif -# endif -#endif /* wxUSE_HTML */ - -#if wxUSE_FS_ARCHIVE -# if !wxUSE_FILESYSTEM -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxArchiveFSHandler requires wxFileSystem" -# else -# undef wxUSE_FILESYSTEM -# define wxUSE_FILESYSTEM 1 -# endif -# endif -# if !wxUSE_ARCHIVE_STREAMS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxArchiveFSHandler requires wxArchive" -# else -# undef wxUSE_ARCHIVE_STREAMS -# define wxUSE_ARCHIVE_STREAMS 1 -# endif -# endif -#endif /* wxUSE_FS_ARCHIVE */ - -#if wxUSE_FILESYSTEM -# if !wxUSE_STREAMS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_FILESYSTEM requires wxUSE_STREAMS" -# else -# undef wxUSE_STREAMS -# define wxUSE_STREAMS 1 -# endif -# endif -# if !wxUSE_FILE && !wxUSE_FFILE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_FILESYSTEM requires either wxUSE_FILE or wxUSE_FFILE" -# else -# undef wxUSE_FILE -# define wxUSE_FILE 1 -# undef wxUSE_FFILE -# define wxUSE_FFILE 1 -# endif -# endif -#endif /* wxUSE_FILESYSTEM */ - -#if wxUSE_FS_INET -# if !wxUSE_PROTOCOL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_FS_INET requires wxUSE_PROTOCOL" -# else -# undef wxUSE_PROTOCOL -# define wxUSE_PROTOCOL 1 -# endif -# endif -#endif /* wxUSE_FS_INET */ - -#if wxUSE_STOPWATCH || wxUSE_DATETIME -# if !wxUSE_LONGLONG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_STOPWATCH and wxUSE_DATETIME require wxUSE_LONGLONG" -# else -# undef wxUSE_LONGLONG -# define wxUSE_LONGLONG 1 -# endif -# endif -#endif /* wxUSE_STOPWATCH */ - -#if wxUSE_MIMETYPE && !wxUSE_TEXTFILE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_MIMETYPE requires wxUSE_TEXTFILE" -# else -# undef wxUSE_TEXTFILE -# define wxUSE_TEXTFILE 1 -# endif -#endif /* wxUSE_MIMETYPE */ - -#if wxUSE_ODBC -# if !wxUSE_DATETIME -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxODBC requires wxUSE_DATETIME" -# else -# undef wxUSE_ODBC -# define wxUSE_ODBC 0 -# endif -# endif -#endif /* wxUSE_ODBC */ - -#if wxUSE_TEXTFILE && !wxUSE_TEXTBUFFER -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TEXTFILE requires wxUSE_TEXTBUFFER" -# else -# undef wxUSE_TEXTBUFFER -# define wxUSE_TEXTBUFFER 1 -# endif -#endif /* wxUSE_TEXTFILE */ - -#if wxUSE_TEXTFILE && !wxUSE_FILE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TEXTFILE requires wxUSE_FILE" -# else -# undef wxUSE_FILE -# define wxUSE_FILE 1 -# endif -#endif /* wxUSE_TEXTFILE */ - -#if wxUSE_XML && !wxUSE_WCHAR_T -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_XML requires wxUSE_WCHAR_T" -# else -# undef wxUSE_XML -# define wxUSE_XML 0 -# endif -#endif /* wxUSE_XML */ - -#if !wxUSE_DYNLIB_CLASS -# if wxUSE_DYNAMIC_LOADER -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DYNAMIC_LOADER requires wxUSE_DYNLIB_CLASS." -# else -# define wxUSE_DYNLIB_CLASS 1 -# endif -# endif -#endif /* wxUSE_DYNLIB_CLASS */ - -#if wxUSE_ZIPSTREAM -# if !wxUSE_ZLIB -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxZip requires wxZlib" -# else -# undef wxUSE_ZLIB -# define wxUSE_ZLIB 1 -# endif -# endif -# if !wxUSE_ARCHIVE_STREAMS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxZip requires wxArchive" -# else -# undef wxUSE_ARCHIVE_STREAMS -# define wxUSE_ARCHIVE_STREAMS 1 -# endif -# endif -#endif /* wxUSE_ZIPSTREAM */ - -#if wxUSE_TARSTREAM - /* wxTar doesn't currently compile without wchar_t */ -# if !wxUSE_WCHAR_T -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxTar requires wchar_t" -# else -# undef wxUSE_TARSTREAM -# define wxUSE_TARSTREAM 0 -# endif -# endif -#endif /* wxUSE_TARSTREAM */ - -#if wxUSE_TARSTREAM -# if !wxUSE_ARCHIVE_STREAMS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxTar requires wxArchive" -# else -# undef wxUSE_ARCHIVE_STREAMS -# define wxUSE_ARCHIVE_STREAMS 1 -# endif -# endif -#endif /* wxUSE_TARSTREAM */ - -/* the rest of the tests is for the GUI settings only */ -#if wxUSE_GUI - -#if wxUSE_BUTTON || \ - wxUSE_CALENDARCTRL || \ - wxUSE_CARET || \ - wxUSE_COMBOBOX || \ - wxUSE_BMPBUTTON || \ - wxUSE_CHECKBOX || \ - wxUSE_CHECKLISTBOX || \ - wxUSE_CHOICE || \ - wxUSE_GAUGE || \ - wxUSE_GRID || \ - wxUSE_LISTBOX || \ - wxUSE_LISTCTRL || \ - wxUSE_NOTEBOOK || \ - wxUSE_RADIOBOX || \ - wxUSE_RADIOBTN || \ - wxUSE_SCROLLBAR || \ - wxUSE_SLIDER || \ - wxUSE_SPINBTN || \ - wxUSE_SPINCTRL || \ - wxUSE_STATBMP || \ - wxUSE_STATBOX || \ - wxUSE_STATLINE || \ - wxUSE_STATTEXT || \ - wxUSE_STATUSBAR || \ - wxUSE_TEXTCTRL || \ - wxUSE_TOOLBAR || \ - wxUSE_TREECTRL -# if !wxUSE_CONTROLS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_CONTROLS unset but some controls used" -# else -# undef wxUSE_CONTROLS -# define wxUSE_CONTROLS 1 -# endif -# endif -#endif /* controls */ - -#if wxUSE_BMPBUTTON -# if !wxUSE_BUTTON -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_BMPBUTTON requires wxUSE_BUTTON" -# else -# undef wxUSE_BUTTON -# define wxUSE_BUTTON 1 -# endif -# endif -#endif /* wxUSE_BMPBUTTON */ - -/* - wxUSE_BOOKCTRL should be only used if any of the controls deriving from it - are used - */ -#ifdef wxUSE_BOOKCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_BOOKCTRL is defined automatically, don't define it" -# else -# undef wxUSE_BOOKCTRL -# endif -#endif - -#define wxUSE_BOOKCTRL (wxUSE_NOTEBOOK || \ - wxUSE_LISTBOOK || \ - wxUSE_CHOICEBOOK || \ - wxUSE_TOOLBOOK || \ - wxUSE_TREEBOOK) - -#if wxUSE_COLLPANE -# if !wxUSE_BUTTON || !wxUSE_STATLINE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_COLLPANE requires wxUSE_BUTTON and wxUSE_STATLINE" -# else -# undef wxUSE_COLLPANE -# define wxUSE_COLLPANE 0 -# endif -# endif -#endif /* wxUSE_COLLPANE */ - -#if wxUSE_LISTBOOK -# if !wxUSE_LISTCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxListbook requires wxListCtrl" -# else -# undef wxUSE_LISTCTRL -# define wxUSE_LISTCTRL 1 -# endif -# endif -#endif /* wxUSE_LISTBOOK */ - -#if wxUSE_CHOICEBOOK -# if !wxUSE_CHOICE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxChoicebook requires wxChoice" -# else -# undef wxUSE_CHOICE -# define wxUSE_CHOICE 1 -# endif -# endif -#endif /* wxUSE_CHOICEBOOK */ - -#if wxUSE_TOOLBOOK -# if !wxUSE_TOOLBAR -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxToolbook requires wxToolBar" -# else -# undef wxUSE_TOOLBAR -# define wxUSE_TOOLBAR 1 -# endif -# endif -#endif /* wxUSE_TOOLBOOK */ - -#if !wxUSE_ODCOMBOBOX -# if wxUSE_BITMAPCOMBOBOX -# error "wxBitmapComboBox requires wxOwnerDrawnComboBox" -# else -# undef wxUSE_BITMAPCOMBOBOX -# define wxUSE_BITMAPCOMBOBOX 0 -# endif -#endif /* !wxUSE_ODCOMBOBOX */ - -/* don't attempt to use native status bar on the platforms not having it */ -#ifndef wxUSE_NATIVE_STATUSBAR -# define wxUSE_NATIVE_STATUSBAR 0 -#elif wxUSE_NATIVE_STATUSBAR -# if defined(__WXUNIVERSAL__) || !( defined(__WXMSW__) || \ - defined(__WXMAC__) || \ - defined(__WXPALMOS__) ) -# undef wxUSE_NATIVE_STATUSBAR -# define wxUSE_NATIVE_STATUSBAR 0 -# endif -#endif - -#if wxUSE_GRAPHICS_CONTEXT && !wxUSE_GEOMETRY -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_GRAPHICS_CONTEXT requires wxUSE_GEOMETRY" -# else -# undef wxUSE_GRAPHICS_CONTEXT -# define wxUSE_GRAPHICS_CONTEXT 0 -# endif -#endif /* wxUSE_GRAPHICS_CONTEXT */ - - -/* wxGTK-specific dependencies */ -#ifdef __WXGTK__ -# ifndef __WXUNIVERSAL__ -# if wxUSE_MDI_ARCHITECTURE && !wxUSE_MENUS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "MDI requires wxUSE_MENUS in wxGTK" -# else -# undef wxUSE_MENUS -# define wxUSE_MENUS 1 -# endif -# endif -# endif /* !__WXUNIVERSAL__ */ - -# if wxUSE_JOYSTICK -# if !wxUSE_THREADS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxJoystick requires threads in wxGTK" -# else -# undef wxUSE_JOYSTICK -# define wxUSE_JOYSTICK 0 -# endif -# endif -# endif -#endif /* wxGTK && !wxUniv */ - -/* Hopefully we can emulate these dialogs in due course */ -#if defined(__SMARTPHONE__) && defined(__WXWINCE__) -# ifdef wxUSE_COLOURDLG -# undef wxUSE_COLOURDLG -# define wxUSE_COLOURDLG 0 -# endif -#endif /* __SMARTPHONE__ && __WXWINCE__ */ - - -/* generic controls dependencies */ -#if !defined(__WXMSW__) || defined(__WXUNIVERSAL__) -# if wxUSE_FONTDLG || wxUSE_FILEDLG || wxUSE_CHOICEDLG - /* all common controls are needed by these dialogs */ -# if !defined(wxUSE_CHOICE) || \ - !defined(wxUSE_TEXTCTRL) || \ - !defined(wxUSE_BUTTON) || \ - !defined(wxUSE_CHECKBOX) || \ - !defined(wxUSE_STATTEXT) -# ifdef wxABORT_ON_CONFIG_ERROR -# error "These common controls are needed by common dialogs" -# else -# undef wxUSE_CHOICE -# define wxUSE_CHOICE 1 -# undef wxUSE_TEXTCTRL -# define wxUSE_TEXTCTRL 1 -# undef wxUSE_BUTTON -# define wxUSE_BUTTON 1 -# undef wxUSE_CHECKBOX -# define wxUSE_CHECKBOX 1 -# undef wxUSE_STATTEXT -# define wxUSE_STATTEXT 1 -# endif -# endif -# endif -#endif /* !wxMSW || wxUniv */ - -/* common dependencies */ -#if wxUSE_CALENDARCTRL -# if !(wxUSE_SPINBTN && wxUSE_COMBOBOX) -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxCalendarCtrl requires wxSpinButton and wxComboBox" -# else -# undef wxUSE_SPINBTN -# undef wxUSE_COMBOBOX -# define wxUSE_SPINBTN 1 -# define wxUSE_COMBOBOX 1 -# endif -# endif - -# if !wxUSE_DATETIME -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxCalendarCtrl requires wxUSE_DATETIME" -# else -# undef wxUSE_DATETIME -# define wxUSE_DATETIME 1 -# endif -# endif -#endif /* wxUSE_CALENDARCTRL */ - -#if wxUSE_DATEPICKCTRL -# if !wxUSE_DATETIME -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxDatePickerCtrl requires wxUSE_DATETIME" -# else -# undef wxUSE_DATETIME -# define wxUSE_DATETIME 1 -# endif -# endif -#endif /* wxUSE_DATEPICKCTRL */ - -#if wxUSE_CHECKLISTBOX -# if !wxUSE_LISTBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxCheckListBox requires wxListBox" -# else -# undef wxUSE_LISTBOX -# define wxUSE_LISTBOX 1 -# endif -# endif -#endif /* wxUSE_CHECKLISTBOX */ - -#if wxUSE_CHOICEDLG -# if !wxUSE_LISTBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "Choice dialogs requires wxListBox" -# else -# undef wxUSE_LISTBOX -# define wxUSE_LISTBOX 1 -# endif -# endif -#endif /* wxUSE_CHOICEDLG */ - -#if wxUSE_HELP -# if !wxUSE_BMPBUTTON -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_HELP requires wxUSE_BMPBUTTON" -# else -# undef wxUSE_BMPBUTTON -# define wxUSE_BMPBUTTON 1 -# endif -# endif - -# if !wxUSE_CHOICEDLG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_HELP requires wxUSE_CHOICEDLG" -# else -# undef wxUSE_CHOICEDLG -# define wxUSE_CHOICEDLG 1 -# endif -# endif -#endif /* wxUSE_HELP */ - -#if wxUSE_MS_HTML_HELP - /* - this doesn't make sense for platforms other than MSW but we still - define it in wx/setup_inc.h so don't complain if it happens to be - defined under another platform but just silently fix it. - */ -# ifndef __WXMSW__ -# undef wxUSE_MS_HTML_HELP -# define wxUSE_MS_HTML_HELP 0 -# endif -#endif /* wxUSE_MS_HTML_HELP */ - -#if wxUSE_WXHTML_HELP -# if !wxUSE_HELP || !wxUSE_HTML || !wxUSE_COMBOBOX || !wxUSE_NOTEBOOK || !wxUSE_SPINCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "Built in help controller can't be compiled" -# else -# undef wxUSE_HELP -# define wxUSE_HELP 1 -# undef wxUSE_HTML -# define wxUSE_HTML 1 -# undef wxUSE_COMBOBOX -# define wxUSE_COMBOBOX 1 -# undef wxUSE_NOTEBOOK -# define wxUSE_NOTEBOOK 1 -# undef wxUSE_SPINCTRL -# define wxUSE_SPINCTRL 1 -# endif -# endif -#endif /* wxUSE_WXHTML_HELP */ - -#if !wxUSE_IMAGE -/* - The default wxUSE_IMAGE setting is 1, so if it's set to 0 we assume the - user explicitly wants this and disable all other features that require - wxUSE_IMAGE. - */ -# if wxUSE_DRAGIMAGE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DRAGIMAGE requires wxUSE_IMAGE" -# else -# undef wxUSE_DRAGIMAGE -# define wxUSE_DRAGIMAGE 0 -# endif -# endif - -# if wxUSE_LIBPNG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LIBPNG requires wxUSE_IMAGE" -# else -# undef wxUSE_LIBPNG -# define wxUSE_LIBPNG 0 -# endif -# endif - -# if wxUSE_LIBJPEG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LIBJPEG requires wxUSE_IMAGE" -# else -# undef wxUSE_LIBJPEG -# define wxUSE_LIBJPEG 0 -# endif -# endif - -# if wxUSE_LIBTIFF -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LIBTIFF requires wxUSE_IMAGE" -# else -# undef wxUSE_LIBTIFF -# define wxUSE_LIBTIFF 0 -# endif -# endif - -# if wxUSE_GIF -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_GIF requires wxUSE_IMAGE" -# else -# undef wxUSE_GIF -# define wxUSE_GIF 0 -# endif -# endif - -# if wxUSE_PNM -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PNM requires wxUSE_IMAGE" -# else -# undef wxUSE_PNM -# define wxUSE_PNM 0 -# endif -# endif - -# if wxUSE_PCX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_PCX requires wxUSE_IMAGE" -# else -# undef wxUSE_PCX -# define wxUSE_PCX 0 -# endif -# endif - -# if wxUSE_IFF -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_IFF requires wxUSE_IMAGE" -# else -# undef wxUSE_IFF -# define wxUSE_IFF 0 -# endif -# endif - -# if wxUSE_TOOLBAR -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TOOLBAR requires wxUSE_IMAGE" -# else -# undef wxUSE_TOOLBAR -# define wxUSE_TOOLBAR 0 -# endif -# endif - -# if wxUSE_XPM -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_XPM requires wxUSE_IMAGE" -# else -# undef wxUSE_XPM -# define wxUSE_XPM 0 -# endif -# endif - -#endif /* !wxUSE_IMAGE */ - -#if wxUSE_DOC_VIEW_ARCHITECTURE -# if !wxUSE_MENUS -# ifdef wxABORT_ON_CONFIG_ERROR -# error "DocView requires wxUSE_MENUS" -# else -# undef wxUSE_MENUS -# define wxUSE_MENUS 1 -# endif -# endif - -# if !wxUSE_CHOICEDLG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "DocView requires wxUSE_CHOICEDLG" -# else -# undef wxUSE_CHOICEDLG -# define wxUSE_CHOICEDLG 1 -# endif -# endif - -# if !wxUSE_STREAMS && !wxUSE_STD_IOSTREAM -# ifdef wxABORT_ON_CONFIG_ERROR -# error "DocView requires wxUSE_STREAMS or wxUSE_STD_IOSTREAM" -# else -# undef wxUSE_STREAMS -# define wxUSE_STREAMS 1 -# endif -# endif -#endif /* wxUSE_DOC_VIEW_ARCHITECTURE */ - -#if wxUSE_PRINTING_ARCHITECTURE -# if !wxUSE_COMBOBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "Print dialog requires wxUSE_COMBOBOX" -# else -# undef wxUSE_COMBOBOX -# define wxUSE_COMBOBOX 1 -# endif -# endif -#endif /* wxUSE_PRINTING_ARCHITECTURE */ - -#if wxUSE_MDI_ARCHITECTURE -# if !wxUSE_MDI -# ifdef wxABORT_ON_CONFIG_ERROR -# error "MDI requires wxUSE_MDI" -# else -# undef wxUSE_MDI -# define wxUSE_MDI 1 -# endif -# endif - -# if !wxUSE_DOC_VIEW_ARCHITECTURE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_MDI_ARCHITECTURE requires wxUSE_DOC_VIEW_ARCHITECTURE" -# else -# undef wxUSE_DOC_VIEW_ARCHITECTURE -# define wxUSE_DOC_VIEW_ARCHITECTURE 1 -# endif -# endif -#endif /* wxUSE_MDI_ARCHITECTURE */ - -#if !wxUSE_FILEDLG -# if wxUSE_DOC_VIEW_ARCHITECTURE || wxUSE_WXHTML_HELP -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_FILEDLG is required by wxUSE_DOC_VIEW_ARCHITECTURE and wxUSE_WXHTML_HELP!" -# else -# undef wxUSE_FILEDLG -# define wxUSE_FILEDLG 1 -# endif -# endif -#endif /* wxUSE_FILEDLG */ - -#if !wxUSE_GAUGE || !wxUSE_BUTTON -# if wxUSE_PROGRESSDLG && !defined(__WXPALMOS__) -# ifdef wxABORT_ON_CONFIG_ERROR -# error "Generic progress dialog requires wxUSE_GAUGE and wxUSE_BUTTON" -# else -# undef wxUSE_GAUGE -# undef wxUSE_BUTTON -# define wxUSE_GAUGE 1 -# define wxUSE_BUTTON 1 -# endif -# endif -#endif /* !wxUSE_GAUGE */ - -#if !wxUSE_BUTTON -# if wxUSE_FONTDLG || \ - wxUSE_FILEDLG || \ - wxUSE_CHOICEDLG || \ - wxUSE_NUMBERDLG || \ - wxUSE_TEXTDLG || \ - wxUSE_DIRDLG || \ - wxUSE_STARTUP_TIPS || \ - wxUSE_WIZARDDLG -# ifdef wxABORT_ON_CONFIG_ERROR -# error "Common and generic dialogs require wxUSE_BUTTON" -# else -# undef wxUSE_BUTTON -# define wxUSE_BUTTON 1 -# endif -# endif -#endif /* !wxUSE_BUTTON */ - -#if !wxUSE_TOOLBAR -# if wxUSE_TOOLBAR_NATIVE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_TOOLBAR is set to 0 but wxUSE_TOOLBAR_NATIVE is set to 1" -# else -# undef wxUSE_TOOLBAR_NATIVE -# define wxUSE_TOOLBAR_NATIVE 0 -# endif -# endif -#endif - -#if !wxUSE_IMAGLIST -# if wxUSE_TREECTRL || wxUSE_NOTEBOOK || wxUSE_LISTCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxImageList must be compiled as well" -# else -# undef wxUSE_IMAGLIST -# define wxUSE_IMAGLIST 1 -# endif -# endif -#endif /* !wxUSE_IMAGLIST */ - -#if !wxUSE_MSGDLG -# ifdef wxABORT_ON_CONFIG_ERROR - /* FIXME: should compile without it, of course, but doesn't */ -# error "wxMessageBox is always needed" -# else -# undef wxUSE_MSGDLG -# define wxUSE_MSGDLG 1 -# endif -#endif - -#if wxUSE_RADIOBOX -# if !wxUSE_RADIOBTN -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_RADIOBOX requires wxUSE_RADIOBTN" -# else -# undef wxUSE_RADIOBTN -# define wxUSE_RADIOBTN 1 -# endif -# endif -# if !wxUSE_STATBOX && !defined(__WXPALMOS__) -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_RADIOBOX requires wxUSE_STATBOX" -# else -# undef wxUSE_STATBOX -# define wxUSE_STATBOX 1 -# endif -# endif -#endif /* wxUSE_RADIOBOX */ - -#if wxUSE_LOGWINDOW -# if !wxUSE_TEXTCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LOGWINDOW requires wxUSE_TEXTCTRL" -# else -# undef wxUSE_TEXTCTRL -# define wxUSE_TEXTCTRL 1 -# endif -# endif -#endif /* wxUSE_LOGWINDOW */ - -#if wxUSE_LOG_DIALOG -# if !wxUSE_LISTCTRL || !wxUSE_BUTTON -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_LOG_DIALOG requires wxUSE_LISTCTRL and wxUSE_BUTTON" -# else -# undef wxUSE_LISTCTRL -# define wxUSE_LISTCTRL 1 -# undef wxUSE_BUTTON -# define wxUSE_BUTTON 1 -# endif -# endif -#endif /* wxUSE_LOG_DIALOG */ - -#if wxUSE_CLIPBOARD && !wxUSE_DATAOBJ -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxClipboard requires wxDataObject" -# else -# undef wxUSE_DATAOBJ -# define wxUSE_DATAOBJ 1 -# endif -#endif /* wxUSE_CLIPBOARD */ - -#if wxUSE_WX_RESOURCES && !wxUSE_PROLOGIO -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxr resources require PrologIO" -# else -# undef wxUSE_PROLOGIO -# define wxUSE_PROLOGIO 1 -# endif -#endif /* wxUSE_WX_RESOURCES */ - -#if wxUSE_XRC && !wxUSE_XML -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_XRC requires wxUSE_XML" -# else -# undef wxUSE_XRC -# define wxUSE_XRC 0 -# endif -#endif /* wxUSE_XRC */ - -#if wxUSE_SOCKETS && !wxUSE_STOPWATCH -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_SOCKETS requires wxUSE_STOPWATCH" -# else -# undef wxUSE_SOCKETS -# define wxUSE_SOCKETS 0 -# endif -#endif /* wxUSE_SOCKETS */ - -#if !wxUSE_VARIANT -# if wxUSE_DATAVIEWCTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxDataViewCtrl requires wxVariant" -# else -# undef wxUSE_DATAVIEWCTRL -# define wxUSE_DATAVIEWCTRL 0 -# endif -# endif - -# if wxUSE_ODBC -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_ODBC requires wxVariant" -# else -# undef wxUSE_ODBC -# define wxUSE_ODBC 0 -# endif -# endif -#endif /* wxUSE_VARIANT */ - -#endif /* wxUSE_GUI */ diff --git a/desmume/src/windows/wx/include/wx/choicdlg.h b/desmume/src/windows/wx/include/wx/choicdlg.h deleted file mode 100644 index 29cd37867..000000000 --- a/desmume/src/windows/wx/include/wx/choicdlg.h +++ /dev/null @@ -1,22 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/choicdgg.h -// Purpose: Includes generic choice dialog file -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: choicdlg.h 33948 2005-05-04 18:57:50Z JS $ -// Copyright: Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CHOICDLG_H_BASE_ -#define _WX_CHOICDLG_H_BASE_ - -#if wxUSE_CHOICEDLG - -#include "wx/generic/choicdgg.h" - -#endif - -#endif - // _WX_CHOICDLG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/choice.h b/desmume/src/windows/wx/include/wx/choice.h deleted file mode 100644 index 5c4ebb0cc..000000000 --- a/desmume/src/windows/wx/include/wx/choice.h +++ /dev/null @@ -1,88 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/choice.h -// Purpose: wxChoice class interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 26.07.99 -// RCS-ID: $Id: choice.h 42727 2006-10-30 16:04:27Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CHOICE_H_BASE_ -#define _WX_CHOICE_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_CHOICE - -#include "wx/ctrlsub.h" // the base class - -// ---------------------------------------------------------------------------- -// global data -// ---------------------------------------------------------------------------- - -extern WXDLLEXPORT_DATA(const wxChar) wxChoiceNameStr[]; - -// ---------------------------------------------------------------------------- -// wxChoice allows to select one of a non-modifiable list of strings -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxChoiceBase : public wxControlWithItems -{ -public: - wxChoiceBase() { } - virtual ~wxChoiceBase(); - - // all generic methods are in wxControlWithItems - - // get the current selection: this can only be different from the normal - // selection if the popup items list is currently opened and the user - // selected some item in it but didn't close the list yet; otherwise (and - // currently always on platforms other than MSW) this is the same as - // GetSelection() - virtual int GetCurrentSelection() const { return GetSelection(); } - - // set/get the number of columns in the control (as they're not supported on - // most platforms, they do nothing by default) - virtual void SetColumns(int WXUNUSED(n) = 1 ) { } - virtual int GetColumns() const { return 1 ; } - - // emulate selecting the item event.GetInt() - void Command(wxCommandEvent& event); - -private: - DECLARE_NO_COPY_CLASS(wxChoiceBase) -}; - -// ---------------------------------------------------------------------------- -// include the platform-dependent class definition -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/choice.h" -#elif defined(__SMARTPHONE__) && defined(__WXWINCE__) - #include "wx/msw/wince/choicece.h" -#elif defined(__WXMSW__) - #include "wx/msw/choice.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/choice.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/choice.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/choice.h" -#elif defined(__WXMAC__) - #include "wx/mac/choice.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/choice.h" -#elif defined(__WXPM__) - #include "wx/os2/choice.h" -#endif - -#endif // wxUSE_CHOICE - -#endif // _WX_CHOICE_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/choicebk.h b/desmume/src/windows/wx/include/wx/choicebk.h deleted file mode 100644 index 85182ccbc..000000000 --- a/desmume/src/windows/wx/include/wx/choicebk.h +++ /dev/null @@ -1,154 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/choicebk.h -// Purpose: wxChoicebook: wxChoice and wxNotebook combination -// Author: Vadim Zeitlin -// Modified by: Wlodzimierz ABX Skiba from wx/listbook.h -// Created: 15.09.04 -// RCS-ID: $Id: choicebk.h 56623 2008-10-31 23:07:49Z VZ $ -// Copyright: (c) Vadim Zeitlin, Wlodzimierz Skiba -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CHOICEBOOK_H_ -#define _WX_CHOICEBOOK_H_ - -#include "wx/defs.h" - -#if wxUSE_CHOICEBOOK - -#include "wx/bookctrl.h" -#include "wx/choice.h" - -class WXDLLIMPEXP_FWD_CORE wxChoice; - -extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED; -extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING; - -// wxChoicebook flags -#define wxCHB_DEFAULT wxBK_DEFAULT -#define wxCHB_TOP wxBK_TOP -#define wxCHB_BOTTOM wxBK_BOTTOM -#define wxCHB_LEFT wxBK_LEFT -#define wxCHB_RIGHT wxBK_RIGHT -#define wxCHB_ALIGN_MASK wxBK_ALIGN_MASK - -// ---------------------------------------------------------------------------- -// wxChoicebook -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxChoicebook : public wxBookCtrlBase -{ -public: - wxChoicebook() - { - Init(); - } - - wxChoicebook(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxEmptyString) - { - Init(); - - (void)Create(parent, id, pos, size, style, name); - } - - // quasi ctor - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxEmptyString); - - - virtual int GetSelection() const; - virtual bool SetPageText(size_t n, const wxString& strText); - virtual wxString GetPageText(size_t n) const; - virtual int GetPageImage(size_t n) const; - virtual bool SetPageImage(size_t n, int imageId); - virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; - virtual bool InsertPage(size_t n, - wxWindow *page, - const wxString& text, - bool bSelect = false, - int imageId = -1); - 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); - - virtual bool DeleteAllPages(); - - // returns the choice control - wxChoice* GetChoiceCtrl() const { return (wxChoice*)m_bookctrl; } - -protected: - virtual wxWindow *DoRemovePage(size_t page); - - // get the size which the choice control should have - virtual wxSize GetControllerSize() const; - - void UpdateSelectedPage(size_t newsel) - { - m_selection = wx_static_cast(int, newsel); - GetChoiceCtrl()->Select(newsel); - } - - wxBookCtrlBaseEvent* CreatePageChangingEvent() const; - void MakeChangedEvent(wxBookCtrlBaseEvent &event); - - // event handlers - void OnChoiceSelected(wxCommandEvent& event); - - // the currently selected page or wxNOT_FOUND if none - int m_selection; - -private: - // common part of all constructors - void Init(); - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxChoicebook) -}; - -// ---------------------------------------------------------------------------- -// choicebook event class and related stuff -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxChoicebookEvent : public wxBookCtrlBaseEvent -{ -public: - wxChoicebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0, - int nSel = -1, int nOldSel = -1) - : wxBookCtrlBaseEvent(commandType, id, nSel, nOldSel) - { - } - - wxChoicebookEvent(const wxChoicebookEvent& event) - : wxBookCtrlBaseEvent(event) - { - } - - virtual wxEvent *Clone() const { return new wxChoicebookEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxChoicebookEvent) -}; - -typedef void (wxEvtHandler::*wxChoicebookEventFunction)(wxChoicebookEvent&); - -#define wxChoicebookEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxChoicebookEventFunction, &func) - -#define EVT_CHOICEBOOK_PAGE_CHANGED(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED, winid, wxChoicebookEventHandler(fn)) - -#define EVT_CHOICEBOOK_PAGE_CHANGING(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, winid, wxChoicebookEventHandler(fn)) - -#endif // wxUSE_CHOICEBOOK - -#endif // _WX_CHOICEBOOK_H_ diff --git a/desmume/src/windows/wx/include/wx/clipbrd.h b/desmume/src/windows/wx/include/wx/clipbrd.h deleted file mode 100644 index 6f6ab4bf9..000000000 --- a/desmume/src/windows/wx/include/wx/clipbrd.h +++ /dev/null @@ -1,145 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/clipbrd.h -// Purpose: wxClipboad class and clipboard functions -// Author: Vadim Zeitlin -// Modified by: -// Created: 19.10.99 -// RCS-ID: $Id: clipbrd.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) wxWidgets Team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CLIPBRD_H_BASE_ -#define _WX_CLIPBRD_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_CLIPBOARD - - -#include "wx/object.h" -#include "wx/wxchar.h" - -class WXDLLIMPEXP_FWD_CORE wxDataFormat; -class WXDLLIMPEXP_FWD_CORE wxDataObject; -class WXDLLIMPEXP_FWD_CORE wxClipboard; - -// ---------------------------------------------------------------------------- -// wxClipboard represents the system clipboard. Normally, you should use -// wxTheClipboard which is a global pointer to the (unique) clipboard. -// -// Clipboard can be used to copy data to/paste data from. It works together -// with wxDataObject. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxClipboardBase : public wxObject -{ -public: - wxClipboardBase() {} - - // open the clipboard before Add/SetData() and GetData() - virtual bool Open() = 0; - - // close the clipboard after Add/SetData() and GetData() - virtual void Close() = 0; - - // query whether the clipboard is opened - virtual bool IsOpened() const = 0; - - // add to the clipboard data - // - // NB: the clipboard owns the pointer and will delete it, so data must be - // allocated on the heap - virtual bool AddData( wxDataObject *data ) = 0; - - // set the clipboard data, this is the same as Clear() followed by - // AddData() - virtual bool SetData( wxDataObject *data ) = 0; - - // ask if data in correct format is available - virtual bool IsSupported( const wxDataFormat& format ) = 0; - - // fill data with data on the clipboard (if available) - virtual bool GetData( wxDataObject& data ) = 0; - - // clears wxTheClipboard and the system's clipboard if possible - virtual void Clear() = 0; - - // flushes the clipboard: this means that the data which is currently on - // clipboard will stay available even after the application exits (possibly - // eating memory), otherwise the clipboard will be emptied on exit - virtual bool Flush() { return false; } - - // X11 has two clipboards which get selected by this call. Empty on MSW. - virtual void UsePrimarySelection( bool WXUNUSED(primary) = false ) { } - - // Returns global instance (wxTheClipboard) of the object: - static wxClipboard *Get(); -}; - -// ---------------------------------------------------------------------------- -// globals -// ---------------------------------------------------------------------------- - -// The global clipboard object - backward compatible access macro: -#define wxTheClipboard (wxClipboard::Get()) - -// ---------------------------------------------------------------------------- -// include platform-specific class declaration -// ---------------------------------------------------------------------------- - -#if defined(__WXMSW__) - #include "wx/msw/clipbrd.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/clipbrd.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/clipbrd.h" -#elif defined(__WXGTK__) - #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/mac/clipbrd.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/clipbrd.h" -#elif defined(__WXPM__) - #include "wx/os2/clipbrd.h" -#endif - -// ---------------------------------------------------------------------------- -// helpful class for opening the clipboard and automatically closing it -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxClipboardLocker -{ -public: - wxClipboardLocker(wxClipboard *clipboard = (wxClipboard *)NULL) - { - m_clipboard = clipboard ? clipboard : wxTheClipboard; - if ( m_clipboard ) - { - m_clipboard->Open(); - } - } - - bool operator!() const { return !m_clipboard->IsOpened(); } - - ~wxClipboardLocker() - { - if ( m_clipboard ) - { - m_clipboard->Close(); - } - } - -private: - wxClipboard *m_clipboard; - - DECLARE_NO_COPY_CLASS(wxClipboardLocker) -}; - -#endif // wxUSE_CLIPBOARD - -#endif // _WX_CLIPBRD_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/clntdata.h b/desmume/src/windows/wx/include/wx/clntdata.h deleted file mode 100644 index 1707ac764..000000000 --- a/desmume/src/windows/wx/include/wx/clntdata.h +++ /dev/null @@ -1,273 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/clntdata.h -// Purpose: A mixin class for holding a wxClientData or void pointer -// Author: Robin Dunn -// Modified by: -// Created: 9-Oct-2001 -// RCS-ID: $Id: clntdata.h 36973 2006-01-18 16:45:41Z JS $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CLNTDATAH__ -#define _WX_CLNTDATAH__ - -#include "wx/defs.h" -#include "wx/string.h" -#include "wx/hashmap.h" - -typedef int (*wxShadowObjectMethod)(void*, void*); -WX_DECLARE_STRING_HASH_MAP_WITH_DECL( - wxShadowObjectMethod, - wxShadowObjectMethods, - class WXDLLIMPEXP_BASE -); -WX_DECLARE_STRING_HASH_MAP_WITH_DECL( - void *, - wxShadowObjectFields, - class WXDLLIMPEXP_BASE -); - -class WXDLLIMPEXP_BASE wxShadowObject -{ -public: - wxShadowObject() { } - - void AddMethod( const wxString &name, wxShadowObjectMethod method ) - { - wxShadowObjectMethods::iterator it = m_methods.find( name ); - if (it == m_methods.end()) - m_methods[ name ] = method; - else - it->second = method; - } - - bool InvokeMethod( const wxString &name, void* window, void* param, int* returnValue ) - { - wxShadowObjectMethods::iterator it = m_methods.find( name ); - if (it == m_methods.end()) - return false; - wxShadowObjectMethod method = it->second; - int ret = (*method)(window, param); - if (returnValue) - *returnValue = ret; - return true; - } - - void AddField( const wxString &name, void* initialValue = NULL ) - { - wxShadowObjectFields::iterator it = m_fields.find( name ); - if (it == m_fields.end()) - m_fields[ name ] = initialValue; - else - it->second = initialValue; - } - - void SetField( const wxString &name, void* value ) - { - wxShadowObjectFields::iterator it = m_fields.find( name ); - if (it == m_fields.end()) - return; - it->second = value; - } - - void* GetField( const wxString &name, void *defaultValue = NULL ) - { - wxShadowObjectFields::iterator it = m_fields.find( name ); - if (it == m_fields.end()) - return defaultValue; - return it->second; - } - -private: - wxShadowObjectMethods m_methods; - wxShadowObjectFields m_fields; -}; - - -// ---------------------------------------------------------------------------- - -// what kind of client data do we have? -enum wxClientDataType -{ - wxClientData_None, // we don't know yet because we don't have it at all - wxClientData_Object, // our client data is typed and we own it - wxClientData_Void // client data is untyped and we don't own it -}; - -class WXDLLIMPEXP_BASE wxClientData -{ -public: - wxClientData() { } - virtual ~wxClientData() { } -}; - -class WXDLLIMPEXP_BASE wxStringClientData : public wxClientData -{ -public: - wxStringClientData() : m_data() { } - wxStringClientData( const wxString &data ) : m_data(data) { } - void SetData( const wxString &data ) { m_data = data; } - const wxString& GetData() const { return m_data; } - -private: - wxString m_data; -}; - -// This class is a mixin that provides storage and management of "client -// data." The client data stored can either be a pointer to a wxClientData -// object in which case it is managed by the container (i.e. it will delete -// the data when it's destroyed) or an untyped pointer which won't be deleted -// by the container - but not both of them -// -// NOTE: This functionality is currently duplicated in wxEvtHandler in order -// to avoid having more than one vtable in that class hierarchy. - -class WXDLLIMPEXP_BASE wxClientDataContainer -{ -public: - wxClientDataContainer(); - virtual ~wxClientDataContainer(); - - void SetClientObject( wxClientData *data ) { DoSetClientObject(data); } - wxClientData *GetClientObject() const { return DoGetClientObject(); } - - void SetClientData( void *data ) { DoSetClientData(data); } - void *GetClientData() const { return DoGetClientData(); } - -protected: - // The user data: either an object which will be deleted by the container - // when it's deleted or some raw pointer which we do nothing with. Only - // one type of data can be used with the given window, i.e. you cannot set - // the void data and then associate the container with wxClientData or vice - // versa. - union - { - wxClientData *m_clientObject; - void *m_clientData; - }; - - // client data accessors - virtual void DoSetClientObject( wxClientData *data ); - virtual wxClientData *DoGetClientObject() const; - - virtual void DoSetClientData( void *data ); - virtual void *DoGetClientData() const; - - // what kind of data do we have? - wxClientDataType m_clientDataType; - -}; - -#include "wx/vector.h" - -struct WXDLLIMPEXP_BASE wxClientDataDictionaryPair -{ - wxClientDataDictionaryPair( size_t idx ) : index( idx ), data( 0 ) { } - - size_t index; - wxClientData* data; -}; - -_WX_DECLARE_VECTOR( - wxClientDataDictionaryPair, - wxClientDataDictionaryPairVector, - WXDLLIMPEXP_BASE -); - -// this class is used internally to maintain the association between items -// of (some subclasses of) wxControlWithItems and their client data -// NOTE: this class does not keep track of whether it contains -// wxClientData or void*. The client must ensure that -// it does not contain a mix of the two, and that -// DestroyData is called if it contains wxClientData -class WXDLLIMPEXP_BASE wxClientDataDictionary -{ -public: - wxClientDataDictionary() {} - - // deletes all the data - void DestroyData() - { - for( size_t i = 0, end = m_vec.size(); i != end; ++i ) - delete m_vec[i].data; - m_vec.clear(); - } - - // if data for the given index is not present, add it, - // if it is present, delete the old data and replace it with - // the new one - void Set( size_t index, wxClientData* data, bool doDelete ) - { - size_t ptr = Find( index ); - - if( !data ) - { - if( ptr == m_vec.size() ) return; - if( doDelete ) - delete m_vec[ptr].data; - m_vec.erase( ptr ); - } - else - { - if( ptr == m_vec.size() ) - { - m_vec.push_back( wxClientDataDictionaryPair( index ) ); - ptr = m_vec.size() - 1; - } - - if( doDelete ) - delete m_vec[ptr].data; - m_vec[ptr].data = data; - } - } - - // get the data associated with the given index, - // return 0 if not found - wxClientData* Get( size_t index ) const - { - size_t it = Find( index ); - if( it == m_vec.size() ) return 0; - return (wxClientData*)m_vec[it].data; // const cast - } - - // delete the data associated with the given index - // it also decreases by one the indices of all the elements - // with an index greater than the given index - void Delete( size_t index, bool doDelete ) - { - size_t todel = m_vec.size(); - - for( size_t i = 0, end = m_vec.size(); i != end; ++i ) - { - if( m_vec[i].index == index ) - todel = i; - else if( m_vec[i].index > index ) - --(m_vec[i].index); - } - - if( todel != m_vec.size() ) - { - if( doDelete ) - delete m_vec[todel].data; - m_vec.erase( todel ); - } - } -private: - // returns MyVec.size() if not found - size_t Find( size_t index ) const - { - for( size_t i = 0, end = m_vec.size(); i != end; ++i ) - { - if( m_vec[i].index == index ) - return i; - } - - return m_vec.size(); - } - - wxClientDataDictionaryPairVector m_vec; -}; - -#endif // _WX_CLNTDATAH__ - diff --git a/desmume/src/windows/wx/include/wx/clrpicker.h b/desmume/src/windows/wx/include/wx/clrpicker.h deleted file mode 100644 index 1dd2c4b3d..000000000 --- a/desmume/src/windows/wx/include/wx/clrpicker.h +++ /dev/null @@ -1,200 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/clrpicker.h -// Purpose: wxColourPickerCtrl base header -// Author: Francesco Montorsi (based on Vadim Zeitlin's code) -// Modified by: -// Created: 14/4/2006 -// Copyright: (c) Vadim Zeitlin, Francesco Montorsi -// RCS-ID: $Id: clrpicker.h 53135 2008-04-12 02:31:04Z VZ $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CLRPICKER_H_BASE_ -#define _WX_CLRPICKER_H_BASE_ - -#include "wx/defs.h" - - -#if wxUSE_COLOURPICKERCTRL - -#include "wx/pickerbase.h" - - -class WXDLLIMPEXP_FWD_CORE wxColourPickerEvent; - -extern WXDLLEXPORT_DATA(const wxChar) wxColourPickerWidgetNameStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxColourPickerCtrlNameStr[]; - - -// ---------------------------------------------------------------------------- -// wxColourPickerWidgetBase: a generic abstract interface which must be -// implemented by controls used by wxColourPickerCtrl -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxColourPickerWidgetBase -{ -public: - wxColourPickerWidgetBase() { m_colour = *wxBLACK; } - virtual ~wxColourPickerWidgetBase() {} - - wxColour GetColour() const - { return m_colour; } - virtual void SetColour(const wxColour &col) - { m_colour = col; UpdateColour(); } - virtual void SetColour(const wxString &col) - { m_colour.Set(col); UpdateColour(); } - -protected: - - virtual void UpdateColour() = 0; - - // the current colour (may be invalid if none) - wxColour m_colour; -}; - - -// Styles which must be supported by all controls implementing wxColourPickerWidgetBase -// NB: these styles must be defined to carefully-chosen values to -// avoid conflicts with wxButton's styles - -// show the colour in HTML form (#AABBCC) as colour button label -// (instead of no label at all) -// NOTE: this style is supported just by wxColourButtonGeneric and -// thus is not exposed in wxColourPickerCtrl -#define wxCLRP_SHOW_LABEL 0x0008 - -// map platform-dependent controls which implement the wxColourPickerWidgetBase -// under the name "wxColourPickerWidget". -// NOTE: wxColourPickerCtrl allocates a wxColourPickerWidget and relies on the -// fact that all classes being mapped as wxColourPickerWidget have the -// same prototype for their contructor (and also explains why we use -// define instead of a typedef) -// since GTK > 2.4, there is GtkColorButton -#if defined(__WXGTK24__) && !defined(__WXUNIVERSAL__) - #include "wx/gtk/clrpicker.h" - #define wxColourPickerWidget wxColourButton -#else - #include "wx/generic/clrpickerg.h" - #define wxColourPickerWidget wxGenericColourButton -#endif - - -// ---------------------------------------------------------------------------- -// wxColourPickerCtrl: platform-independent class which embeds a -// platform-dependent wxColourPickerWidget and, if wxCLRP_USE_TEXTCTRL style is -// used, a textctrl next to it. -// ---------------------------------------------------------------------------- - -#define wxCLRP_USE_TEXTCTRL (wxPB_USE_TEXTCTRL) -#define wxCLRP_DEFAULT_STYLE 0 - -class WXDLLIMPEXP_CORE wxColourPickerCtrl : public wxPickerBase -{ -public: - wxColourPickerCtrl() : m_bIgnoreNextTextCtrlUpdate(false) {} - virtual ~wxColourPickerCtrl() {} - - - wxColourPickerCtrl(wxWindow *parent, wxWindowID id, - const wxColour& col = *wxBLACK, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxCLRP_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxColourPickerCtrlNameStr) - : m_bIgnoreNextTextCtrlUpdate(false) - { Create(parent, id, col, pos, size, style, validator, name); } - - bool Create(wxWindow *parent, wxWindowID id, - const wxColour& col = *wxBLACK, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCLRP_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxColourPickerCtrlNameStr); - - -public: // public API - - // get the colour chosen - wxColour GetColour() const - { return ((wxColourPickerWidget *)m_picker)->GetColour(); } - - // set currently displayed color - void SetColour(const wxColour& col); - - // set colour using RGB(r,g,b) syntax or considering given text as a colour name; - // returns true if the given text was successfully recognized. - bool SetColour(const wxString& text); - - -public: // internal functions - - // update the button colour to match the text control contents - void UpdatePickerFromTextCtrl(); - - // update the text control to match the button's colour - void UpdateTextCtrlFromPicker(); - - // event handler for our picker - void OnColourChange(wxColourPickerEvent &); - -protected: - virtual long GetPickerStyle(long style) const - { return (style & wxCLRP_SHOW_LABEL); } - - // true if the next UpdateTextCtrl() call is to ignore - bool m_bIgnoreNextTextCtrlUpdate; - -private: - DECLARE_DYNAMIC_CLASS(wxColourPickerCtrl) -}; - - -// ---------------------------------------------------------------------------- -// wxColourPickerEvent: used by wxColourPickerCtrl only -// ---------------------------------------------------------------------------- - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COLOURPICKER_CHANGED, 1102) -END_DECLARE_EVENT_TYPES() - -class WXDLLIMPEXP_CORE wxColourPickerEvent : public wxCommandEvent -{ -public: - wxColourPickerEvent() {} - wxColourPickerEvent(wxObject *generator, int id, const wxColour &col) - : wxCommandEvent(wxEVT_COMMAND_COLOURPICKER_CHANGED, id), - m_colour(col) - { - SetEventObject(generator); - } - - wxColour GetColour() const { return m_colour; } - void SetColour(const wxColour &c) { m_colour = c; } - - - // default copy ctor, assignment operator and dtor are ok - virtual wxEvent *Clone() const { return new wxColourPickerEvent(*this); } - -private: - wxColour m_colour; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxColourPickerEvent) -}; - -// ---------------------------------------------------------------------------- -// event types and macros -// ---------------------------------------------------------------------------- - -typedef void (wxEvtHandler::*wxColourPickerEventFunction)(wxColourPickerEvent&); - -#define wxColourPickerEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxColourPickerEventFunction, &func) - -#define EVT_COLOURPICKER_CHANGED(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_COLOURPICKER_CHANGED, id, wxColourPickerEventHandler(fn)) - - -#endif // wxUSE_COLOURPICKERCTRL - -#endif // _WX_CLRPICKER_H_BASE_ - diff --git a/desmume/src/windows/wx/include/wx/cmdline.h b/desmume/src/windows/wx/include/wx/cmdline.h deleted file mode 100644 index 50a17ce7a..000000000 --- a/desmume/src/windows/wx/include/wx/cmdline.h +++ /dev/null @@ -1,239 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/cmdline.h -// Purpose: wxCmdLineParser and related classes for parsing the command -// line options -// Author: Vadim Zeitlin -// Modified by: -// Created: 04.01.00 -// RCS-ID: $Id: cmdline.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 2000 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CMDLINE_H_ -#define _WX_CMDLINE_H_ - -#include "wx/defs.h" - -#include "wx/string.h" -#include "wx/arrstr.h" - -#if wxUSE_CMDLINE_PARSER - -class WXDLLIMPEXP_FWD_BASE wxDateTime; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// by default, options are optional (sic) and each call to AddParam() allows -// one more parameter - this may be changed by giving non-default flags to it -enum -{ - wxCMD_LINE_OPTION_MANDATORY = 0x01, // this option must be given - wxCMD_LINE_PARAM_OPTIONAL = 0x02, // the parameter may be omitted - wxCMD_LINE_PARAM_MULTIPLE = 0x04, // the parameter may be repeated - wxCMD_LINE_OPTION_HELP = 0x08, // this option is a help request - wxCMD_LINE_NEEDS_SEPARATOR = 0x10 // must have sep before the value -}; - -// an option value or parameter may be a string (the most common case), a -// number or a date -enum wxCmdLineParamType -{ - wxCMD_LINE_VAL_STRING, // should be 0 (default) - wxCMD_LINE_VAL_NUMBER, - wxCMD_LINE_VAL_DATE, - wxCMD_LINE_VAL_NONE -}; - -// for constructing the cmd line description using Init() -enum wxCmdLineEntryType -{ - wxCMD_LINE_SWITCH, - wxCMD_LINE_OPTION, - wxCMD_LINE_PARAM, - wxCMD_LINE_NONE // to terminate the list -}; - -// ---------------------------------------------------------------------------- -// wxCmdLineEntryDesc is a description of one command line -// switch/option/parameter -// ---------------------------------------------------------------------------- - -struct wxCmdLineEntryDesc -{ - wxCmdLineEntryType kind; - const wxChar *shortName; - const wxChar *longName; - const wxChar *description; - wxCmdLineParamType type; - int flags; -}; - -// ---------------------------------------------------------------------------- -// wxCmdLineParser is a class for parsing command line. -// -// It has the following features: -// -// 1. distinguishes options, switches and parameters; allows option grouping -// 2. allows both short and long options -// 3. automatically generates the usage message from the cmd line description -// 4. does type checks on the options values (number, date, ...) -// -// To use it you should: -// -// 1. construct it giving it the cmd line to parse and optionally its desc -// 2. construct the cmd line description using AddXXX() if not done in (1) -// 3. call Parse() -// 4. use GetXXX() to retrieve the parsed info -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxCmdLineParser -{ -public: - // ctors and initializers - // ---------------------- - - // default ctor or ctor giving the cmd line in either Unix or Win form - wxCmdLineParser() { Init(); } - wxCmdLineParser(int argc, char **argv) { Init(); SetCmdLine(argc, argv); } -#if wxUSE_UNICODE - wxCmdLineParser(int argc, wxChar **argv) { Init(); SetCmdLine(argc, argv); } -#endif // wxUSE_UNICODE - wxCmdLineParser(const wxString& cmdline) { Init(); SetCmdLine(cmdline); } - - // the same as above, but also gives the cmd line description - otherwise, - // use AddXXX() later - wxCmdLineParser(const wxCmdLineEntryDesc *desc) - { Init(); SetDesc(desc); } - wxCmdLineParser(const wxCmdLineEntryDesc *desc, int argc, char **argv) - { Init(); SetCmdLine(argc, argv); SetDesc(desc); } -#if wxUSE_UNICODE - wxCmdLineParser(const wxCmdLineEntryDesc *desc, int argc, wxChar **argv) - { Init(); SetCmdLine(argc, argv); SetDesc(desc); } -#endif // wxUSE_UNICODE - wxCmdLineParser(const wxCmdLineEntryDesc *desc, const wxString& cmdline) - { Init(); SetCmdLine(cmdline); SetDesc(desc); } - - // set cmd line to parse after using one of the ctors which don't do it - void SetCmdLine(int argc, char **argv); -#if wxUSE_UNICODE - void SetCmdLine(int argc, wxChar **argv); -#endif // wxUSE_UNICODE - void SetCmdLine(const wxString& cmdline); - - // not virtual, don't use this class polymorphically - ~wxCmdLineParser(); - - // set different parser options - // ---------------------------- - - // by default, '-' is switch char under Unix, '-' or '/' under Win: - // switchChars contains all characters with which an option or switch may - // start - void SetSwitchChars(const wxString& switchChars); - - // long options are not POSIX-compliant, this option allows to disable them - void EnableLongOptions(bool enable = true); - void DisableLongOptions() { EnableLongOptions(false); } - - bool AreLongOptionsEnabled(); - - // extra text may be shown by Usage() method if set by this function - void SetLogo(const wxString& logo); - - // construct the cmd line description - // ---------------------------------- - - // take the cmd line description from the wxCMD_LINE_NONE terminated table - void SetDesc(const wxCmdLineEntryDesc *desc); - - // a switch: i.e. an option without value - void AddSwitch(const wxString& name, const wxString& lng = wxEmptyString, - const wxString& desc = wxEmptyString, - int flags = 0); - - // 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); - - // a parameter - void AddParam(const wxString& desc = wxEmptyString, - wxCmdLineParamType type = wxCMD_LINE_VAL_STRING, - int flags = 0); - - // actions - // ------- - - // parse the command line, return 0 if ok, -1 if "-h" or "--help" option - // was encountered and the help message was given or a positive value if a - // syntax error occurred - // - // if showUsage is true, Usage() is called in case of syntax error or if - // help was requested - int Parse(bool showUsage = true); - - // give the usage message describing all program options - void Usage(); - - // get the command line arguments - // ------------------------------ - - // returns true if the given switch was found - bool Found(const wxString& name) const; - - // returns true if an option taking a string value was found and stores the - // value in the provided pointer - bool Found(const wxString& name, wxString *value) const; - - // returns true if an option taking an integer value was found and stores - // the value in the provided pointer - bool Found(const wxString& name, long *value) const; - -#if wxUSE_DATETIME - // returns true if an option taking a date value was found and stores the - // value in the provided pointer - bool Found(const wxString& name, wxDateTime *value) const; -#endif // wxUSE_DATETIME - - // gets the number of parameters found - size_t GetParamCount() const; - - // gets the value of Nth parameter (as string only for now) - wxString GetParam(size_t n = 0u) const; - - // Resets switches and options - void Reset(); - - // break down the command line in arguments - static wxArrayString ConvertStringToArgs(const wxChar *cmdline); - -private: - // get usage string - wxString GetUsageString(); - - // common part of all ctors - void Init(); - - struct wxCmdLineParserData *m_data; - - DECLARE_NO_COPY_CLASS(wxCmdLineParser) -}; - -#else // !wxUSE_CMDLINE_PARSER - -// this function is always available (even if !wxUSE_CMDLINE_PARSER) because it -// is used by wxWin itself under Windows -class WXDLLIMPEXP_BASE wxCmdLineParser -{ -public: - static wxArrayString ConvertStringToArgs(const wxChar *cmdline); -}; - -#endif // wxUSE_CMDLINE_PARSER/!wxUSE_CMDLINE_PARSER - -#endif // _WX_CMDLINE_H_ - diff --git a/desmume/src/windows/wx/include/wx/cmdproc.h b/desmume/src/windows/wx/include/wx/cmdproc.h deleted file mode 100644 index 0b101a14a..000000000 --- a/desmume/src/windows/wx/include/wx/cmdproc.h +++ /dev/null @@ -1,144 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/cmdproc.h -// Purpose: undo/redo capable command processing framework -// Author: Julian Smart (extracted from docview.h by VZ) -// Modified by: -// Created: 05.11.00 -// RCS-ID: $Id: cmdproc.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CMDPROC_H_ -#define _WX_CMDPROC_H_ - -#include "wx/defs.h" -#include "wx/object.h" -#include "wx/list.h" - -class WXDLLIMPEXP_FWD_CORE wxMenu; - -// ---------------------------------------------------------------------------- -// wxCommand: a single command capable of performing itself -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxCommand : public wxObject -{ -public: - wxCommand(bool canUndoIt = false, const wxString& name = wxEmptyString); - virtual ~wxCommand(){} - - // Override this to perform a command - virtual bool Do() = 0; - - // Override this to undo a command - virtual bool Undo() = 0; - - virtual bool CanUndo() const { return m_canUndo; } - virtual wxString GetName() const { return m_commandName; } - -protected: - bool m_canUndo; - wxString m_commandName; - -private: - DECLARE_CLASS(wxCommand) -}; - -// ---------------------------------------------------------------------------- -// wxCommandProcessor: wxCommand manager -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxCommandProcessor : public wxObject -{ -public: - // if max number of commands is -1, it is unlimited - wxCommandProcessor(int maxCommands = -1); - virtual ~wxCommandProcessor(); - - // Pass a command to the processor. The processor calls Do(); if - // successful, is appended to the command history unless storeIt is false. - virtual bool Submit(wxCommand *command, bool storeIt = true); - - // just store the command without executing it - virtual void Store(wxCommand *command); - - virtual bool Undo(); - virtual bool Redo(); - virtual bool CanUndo() const; - virtual bool CanRedo() const; - - // Initialises the current command and menu strings. - virtual void Initialize(); - - // Sets the Undo/Redo menu strings for the current menu. - virtual void SetMenuStrings(); - - // Gets the current Undo menu label. - wxString GetUndoMenuLabel() const; - - // Gets the current Undo menu label. - wxString GetRedoMenuLabel() const; - -#if wxUSE_MENUS - // Call this to manage an edit menu. - void SetEditMenu(wxMenu *menu) { m_commandEditMenu = menu; } - wxMenu *GetEditMenu() const { return m_commandEditMenu; } -#endif // wxUSE_MENUS - - // command list access - wxList& GetCommands() { return m_commands; } - const wxList& GetCommands() const { return m_commands; } - wxCommand *GetCurrentCommand() const - { - return (wxCommand *)(m_currentCommand ? m_currentCommand->GetData() : NULL); - } - int GetMaxCommands() const { return m_maxNoCommands; } - virtual void ClearCommands(); - - // Has the current project been changed? - virtual bool IsDirty() const - { - return m_currentCommand && (m_lastSavedCommand != m_currentCommand); - } - - // Mark the current command as the one where the last save took place - void MarkAsSaved() - { - m_lastSavedCommand = m_currentCommand; - } - - - // By default, the accelerators are "\tCtrl+Z" and "\tCtrl+Y" - const wxString& GetUndoAccelerator() const { return m_undoAccelerator; } - const wxString& GetRedoAccelerator() const { return m_redoAccelerator; } - - void SetUndoAccelerator(const wxString& accel) { m_undoAccelerator = accel; } - void SetRedoAccelerator(const wxString& accel) { m_redoAccelerator = accel; } - -protected: - // for further flexibility, command processor doesn't call wxCommand::Do() - // and Undo() directly but uses these functions which can be overridden in - // the derived class - virtual bool DoCommand(wxCommand& cmd); - virtual bool UndoCommand(wxCommand& cmd); - - int m_maxNoCommands; - wxList m_commands; - wxList::compatibility_iterator m_currentCommand, - m_lastSavedCommand; - -#if wxUSE_MENUS - wxMenu* m_commandEditMenu; -#endif // wxUSE_MENUS - - wxString m_undoAccelerator; - wxString m_redoAccelerator; - -private: - DECLARE_DYNAMIC_CLASS(wxCommandProcessor) - DECLARE_NO_COPY_CLASS(wxCommandProcessor) -}; - -#endif // _WX_CMDPROC_H_ - diff --git a/desmume/src/windows/wx/include/wx/cmndata.h b/desmume/src/windows/wx/include/wx/cmndata.h deleted file mode 100644 index 30310e21c..000000000 --- a/desmume/src/windows/wx/include/wx/cmndata.h +++ /dev/null @@ -1,454 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/cmndata.h -// Purpose: Common GDI data classes -// Author: Julian Smart and others -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: cmndata.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CMNDATA_H_BASE_ -#define _WX_CMNDATA_H_BASE_ - -#include "wx/window.h" -#include "wx/font.h" -#include "wx/encinfo.h" -#include "wx/colour.h" -#include "wx/gdicmn.h" - -#if wxUSE_STREAMS -#include "wx/stream.h" -#endif - - -class WXDLLIMPEXP_FWD_CORE wxPrintNativeDataBase; - - -class WXDLLEXPORT wxColourData: public wxObject -{ -public: - wxColourData(); - wxColourData(const wxColourData& data); - virtual ~wxColourData(); - - void SetChooseFull(bool flag) { m_chooseFull = flag; } - bool GetChooseFull() const { return m_chooseFull; } - void SetColour(const wxColour& colour) { m_dataColour = colour; } - const wxColour& GetColour() const { return m_dataColour; } - wxColour& GetColour() { return m_dataColour; } - - // Array of 16 custom colours - void SetCustomColour(int i, const wxColour& colour); - wxColour GetCustomColour(int i); - - void operator=(const wxColourData& data); - -public: - wxColour m_dataColour; - wxColour m_custColours[16]; - bool m_chooseFull; - -private: - DECLARE_DYNAMIC_CLASS(wxColourData) -}; - -class WXDLLEXPORT wxFontData : public wxObject -{ -public: - wxFontData(); - virtual ~wxFontData(); - - wxFontData(const wxFontData& data) - : wxObject(), - m_fontColour(data.m_fontColour), - m_showHelp(data.m_showHelp), - m_allowSymbols(data.m_allowSymbols), - m_enableEffects(data.m_enableEffects), - m_initialFont(data.m_initialFont), - m_chosenFont(data.m_chosenFont), - m_minSize(data.m_minSize), - m_maxSize(data.m_maxSize), - m_encoding(data.m_encoding), - m_encodingInfo(data.m_encodingInfo) - { - } - - wxFontData& operator=(const wxFontData& data) - { - wxObject::operator=(data); - m_fontColour = data.m_fontColour; - m_showHelp = data.m_showHelp; - m_allowSymbols = data.m_allowSymbols; - m_enableEffects = data.m_enableEffects; - m_initialFont = data.m_initialFont; - m_chosenFont = data.m_chosenFont; - m_minSize = data.m_minSize; - m_maxSize = data.m_maxSize; - m_encoding = data.m_encoding; - m_encodingInfo = data.m_encodingInfo; - return *this; - } - - void SetAllowSymbols(bool flag) { m_allowSymbols = flag; } - bool GetAllowSymbols() const { return m_allowSymbols; } - - void SetColour(const wxColour& colour) { m_fontColour = colour; } - const wxColour& GetColour() const { return m_fontColour; } - - void SetShowHelp(bool flag) { m_showHelp = flag; } - bool GetShowHelp() const { return m_showHelp; } - - void EnableEffects(bool flag) { m_enableEffects = flag; } - bool GetEnableEffects() const { return m_enableEffects; } - - void SetInitialFont(const wxFont& font) { m_initialFont = font; } - wxFont GetInitialFont() const { return m_initialFont; } - - void SetChosenFont(const wxFont& font) { m_chosenFont = font; } - wxFont GetChosenFont() const { return m_chosenFont; } - - void SetRange(int minRange, int maxRange) { m_minSize = minRange; m_maxSize = maxRange; } - - // encoding info is split into 2 parts: the logical wxWin encoding - // (wxFontEncoding) and a structure containing the native parameters for - // it (wxNativeEncodingInfo) - wxFontEncoding GetEncoding() const { return m_encoding; } - void SetEncoding(wxFontEncoding encoding) { m_encoding = encoding; } - - wxNativeEncodingInfo& EncodingInfo() { return m_encodingInfo; } - - - // public for backwards compatibility only: don't use directly -public: - wxColour m_fontColour; - bool m_showHelp; - bool m_allowSymbols; - bool m_enableEffects; - wxFont m_initialFont; - wxFont m_chosenFont; - int m_minSize; - int m_maxSize; - -private: - wxFontEncoding m_encoding; - wxNativeEncodingInfo m_encodingInfo; - -private: - DECLARE_DYNAMIC_CLASS(wxFontData) -}; - -#if wxUSE_PRINTING_ARCHITECTURE -/* - * wxPrintData - * Encapsulates printer information (not printer dialog information) - */ - -enum wxPrintBin -{ - wxPRINTBIN_DEFAULT, - - wxPRINTBIN_ONLYONE, - wxPRINTBIN_LOWER, - wxPRINTBIN_MIDDLE, - wxPRINTBIN_MANUAL, - wxPRINTBIN_ENVELOPE, - wxPRINTBIN_ENVMANUAL, - wxPRINTBIN_AUTO, - wxPRINTBIN_TRACTOR, - wxPRINTBIN_SMALLFMT, - wxPRINTBIN_LARGEFMT, - wxPRINTBIN_LARGECAPACITY, - wxPRINTBIN_CASSETTE, - wxPRINTBIN_FORMSOURCE, - - wxPRINTBIN_USER -}; - -const int wxPRINTMEDIA_DEFAULT = 0; - -class WXDLLEXPORT wxPrintData: public wxObject -{ -public: - wxPrintData(); - wxPrintData(const wxPrintData& printData); - virtual ~wxPrintData(); - - int GetNoCopies() const { return m_printNoCopies; } - bool GetCollate() const { return m_printCollate; } - int GetOrientation() const { return m_printOrientation; } - bool IsOrientationReversed() const { return m_printOrientationReversed; } - - // Is this data OK for showing the print dialog? - bool Ok() const { return IsOk(); } - bool IsOk() const ; - - const wxString& GetPrinterName() const { return m_printerName; } - bool GetColour() const { return m_colour; } - wxDuplexMode GetDuplex() const { return m_duplexMode; } - wxPaperSize GetPaperId() const { return m_paperId; } - const wxSize& GetPaperSize() const { return m_paperSize; } // Not used yet: confusable with paper size - // in wxPageSetupDialogData - wxPrintQuality GetQuality() const { return m_printQuality; } - wxPrintBin GetBin() const { return m_bin; } - wxPrintMode GetPrintMode() const { return m_printMode; } - int GetMedia() const { return m_media; } - - void SetNoCopies(int v) { m_printNoCopies = v; } - void SetCollate(bool flag) { m_printCollate = flag; } - void SetOrientation(int orient) { m_printOrientation = orient; } - void SetOrientationReversed(bool reversed) { m_printOrientationReversed = reversed; } - - void SetPrinterName(const wxString& name) { m_printerName = name; } - void SetColour(bool colour) { m_colour = colour; } - void SetDuplex(wxDuplexMode duplex) { m_duplexMode = duplex; } - void SetPaperId(wxPaperSize sizeId) { m_paperId = sizeId; } - void SetPaperSize(const wxSize& sz) { m_paperSize = sz; } - void SetQuality(wxPrintQuality quality) { m_printQuality = quality; } - void SetBin(wxPrintBin bin) { m_bin = bin; } - void SetMedia(int media) { m_media = media; } - void SetPrintMode(wxPrintMode printMode) { m_printMode = printMode; } - - wxString GetFilename() const { return m_filename; } - void SetFilename( const wxString &filename ) { m_filename = filename; } - - void operator=(const wxPrintData& data); - - char* GetPrivData() const { return m_privData; } - int GetPrivDataLen() const { return m_privDataLen; } - void SetPrivData( char *privData, int len ); - - -#if WXWIN_COMPATIBILITY_2_4 - // PostScript-specific data - wxString GetPrinterCommand() const; - wxString GetPrinterOptions() const; - wxString GetPreviewCommand() const; - wxString GetFontMetricPath() const; - double GetPrinterScaleX() const; - double GetPrinterScaleY() const; - long GetPrinterTranslateX() const; - long GetPrinterTranslateY() const; - - void SetPrinterCommand(const wxString& command); - void SetPrinterOptions(const wxString& options); - void SetPreviewCommand(const wxString& command); - void SetFontMetricPath(const wxString& path); - void SetPrinterScaleX(double x); - void SetPrinterScaleY(double y); - void SetPrinterScaling(double x, double y); - void SetPrinterTranslateX(long x); - void SetPrinterTranslateY(long y); - void SetPrinterTranslation(long x, long y); -#endif - - // Convert between wxPrintData and native data - void ConvertToNative(); - void ConvertFromNative(); - // Holds the native print data - wxPrintNativeDataBase *GetNativeData() const { return m_nativeData; } - -private: - wxPrintBin m_bin; - int m_media; - wxPrintMode m_printMode; - - int m_printNoCopies; - int m_printOrientation; - bool m_printOrientationReversed; - bool m_printCollate; - - wxString m_printerName; - bool m_colour; - wxDuplexMode m_duplexMode; - wxPrintQuality m_printQuality; - wxPaperSize m_paperId; - wxSize m_paperSize; - - wxString m_filename; - - char* m_privData; - int m_privDataLen; - - wxPrintNativeDataBase *m_nativeData; - -private: - DECLARE_DYNAMIC_CLASS(wxPrintData) -}; - -/* - * wxPrintDialogData - * Encapsulates information displayed and edited in the printer dialog box. - * Contains a wxPrintData object which is filled in according to the values retrieved - * from the dialog. - */ - -class WXDLLEXPORT wxPrintDialogData: public wxObject -{ -public: - wxPrintDialogData(); - wxPrintDialogData(const wxPrintDialogData& dialogData); - wxPrintDialogData(const wxPrintData& printData); - virtual ~wxPrintDialogData(); - - int GetFromPage() const { return m_printFromPage; } - int GetToPage() const { return m_printToPage; } - int GetMinPage() const { return m_printMinPage; } - int GetMaxPage() const { return m_printMaxPage; } - int GetNoCopies() const { return m_printNoCopies; } - bool GetAllPages() const { return m_printAllPages; } - bool GetSelection() const { return m_printSelection; } - bool GetCollate() const { return m_printCollate; } - bool GetPrintToFile() const { return m_printToFile; } -#if WXWIN_COMPATIBILITY_2_4 - bool GetSetupDialog() const { return m_printSetupDialog; } -#endif - void SetFromPage(int v) { m_printFromPage = v; } - void SetToPage(int v) { m_printToPage = v; } - void SetMinPage(int v) { m_printMinPage = v; } - void SetMaxPage(int v) { m_printMaxPage = v; } - void SetNoCopies(int v) { m_printNoCopies = v; } - void SetAllPages(bool flag) { m_printAllPages = flag; } - void SetSelection(bool flag) { m_printSelection = flag; } - void SetCollate(bool flag) { m_printCollate = flag; } - void SetPrintToFile(bool flag) { m_printToFile = flag; } -#if WXWIN_COMPATIBILITY_2_4 - void SetSetupDialog(bool flag) { m_printSetupDialog = flag; } -#endif - void EnablePrintToFile(bool flag) { m_printEnablePrintToFile = flag; } - void EnableSelection(bool flag) { m_printEnableSelection = flag; } - void EnablePageNumbers(bool flag) { m_printEnablePageNumbers = flag; } - void EnableHelp(bool flag) { m_printEnableHelp = flag; } - - bool GetEnablePrintToFile() const { return m_printEnablePrintToFile; } - bool GetEnableSelection() const { return m_printEnableSelection; } - bool GetEnablePageNumbers() const { return m_printEnablePageNumbers; } - bool GetEnableHelp() const { return m_printEnableHelp; } - - // Is this data OK for showing the print dialog? - bool Ok() const { return IsOk(); } - bool IsOk() const { return m_printData.Ok() ; } - - wxPrintData& GetPrintData() { return m_printData; } - void SetPrintData(const wxPrintData& printData) { m_printData = printData; } - - void operator=(const wxPrintDialogData& data); - void operator=(const wxPrintData& data); // Sets internal m_printData member - -private: - int m_printFromPage; - int m_printToPage; - int m_printMinPage; - int m_printMaxPage; - int m_printNoCopies; - bool m_printAllPages; - bool m_printCollate; - bool m_printToFile; - bool m_printSelection; - bool m_printEnableSelection; - bool m_printEnablePageNumbers; - bool m_printEnableHelp; - bool m_printEnablePrintToFile; -#if WXWIN_COMPATIBILITY_2_4 - bool m_printSetupDialog; -#endif - wxPrintData m_printData; - -private: - DECLARE_DYNAMIC_CLASS(wxPrintDialogData) -}; - -/* -* This is the data used (and returned) by the wxPageSetupDialog. -*/ - -// Compatibility with old name -#define wxPageSetupData wxPageSetupDialogData - -class WXDLLEXPORT wxPageSetupDialogData: public wxObject -{ -public: - wxPageSetupDialogData(); - wxPageSetupDialogData(const wxPageSetupDialogData& dialogData); - wxPageSetupDialogData(const wxPrintData& printData); - virtual ~wxPageSetupDialogData(); - - wxSize GetPaperSize() const { return m_paperSize; } - wxPaperSize GetPaperId() const { return m_printData.GetPaperId(); } - wxPoint GetMinMarginTopLeft() const { return m_minMarginTopLeft; } - wxPoint GetMinMarginBottomRight() const { return m_minMarginBottomRight; } - wxPoint GetMarginTopLeft() const { return m_marginTopLeft; } - wxPoint GetMarginBottomRight() const { return m_marginBottomRight; } - - bool GetDefaultMinMargins() const { return m_defaultMinMargins; } - bool GetEnableMargins() const { return m_enableMargins; } - bool GetEnableOrientation() const { return m_enableOrientation; } - bool GetEnablePaper() const { return m_enablePaper; } - bool GetEnablePrinter() const { return m_enablePrinter; } - bool GetDefaultInfo() const { return m_getDefaultInfo; } - bool GetEnableHelp() const { return m_enableHelp; } - - // Is this data OK for showing the page setup dialog? - bool Ok() const { return IsOk(); } - bool IsOk() const { return m_printData.Ok() ; } - - // If a corresponding paper type is found in the paper database, will set the m_printData - // paper size id member as well. - void SetPaperSize(const wxSize& sz); - - void SetPaperId(wxPaperSize id) { m_printData.SetPaperId(id); } - - // Sets the wxPrintData id, plus the paper width/height if found in the paper database. - void SetPaperSize(wxPaperSize id); - - void SetMinMarginTopLeft(const wxPoint& pt) { m_minMarginTopLeft = pt; } - void SetMinMarginBottomRight(const wxPoint& pt) { m_minMarginBottomRight = pt; } - void SetMarginTopLeft(const wxPoint& pt) { m_marginTopLeft = pt; } - void SetMarginBottomRight(const wxPoint& pt) { m_marginBottomRight = pt; } - void SetDefaultMinMargins(bool flag) { m_defaultMinMargins = flag; } - void SetDefaultInfo(bool flag) { m_getDefaultInfo = flag; } - - void EnableMargins(bool flag) { m_enableMargins = flag; } - void EnableOrientation(bool flag) { m_enableOrientation = flag; } - void EnablePaper(bool flag) { m_enablePaper = flag; } - void EnablePrinter(bool flag) { m_enablePrinter = flag; } - void EnableHelp(bool flag) { m_enableHelp = flag; } - - // Use paper size defined in this object to set the wxPrintData - // paper id - void CalculateIdFromPaperSize(); - - // Use paper id in wxPrintData to set this object's paper size - void CalculatePaperSizeFromId(); - - wxPageSetupDialogData& operator=(const wxPageSetupData& data); - wxPageSetupDialogData& operator=(const wxPrintData& data); - - wxPrintData& GetPrintData() { return m_printData; } - const wxPrintData& GetPrintData() const { return m_printData; } - void SetPrintData(const wxPrintData& printData); - -private: - wxSize m_paperSize; // The dimensions selected by the user (on return, same as in wxPrintData?) - wxPoint m_minMarginTopLeft; - wxPoint m_minMarginBottomRight; - wxPoint m_marginTopLeft; - wxPoint m_marginBottomRight; - bool m_defaultMinMargins; - bool m_enableMargins; - bool m_enableOrientation; - bool m_enablePaper; - bool m_enablePrinter; - bool m_getDefaultInfo; // Equiv. to PSD_RETURNDEFAULT - bool m_enableHelp; - wxPrintData m_printData; - -private: - DECLARE_DYNAMIC_CLASS(wxPageSetupDialogData) -}; - -#endif // wxUSE_PRINTING_ARCHITECTURE - -#endif -// _WX_CMNDATA_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/collpane.h b/desmume/src/windows/wx/include/wx/collpane.h deleted file mode 100644 index 1db6bfb54..000000000 --- a/desmume/src/windows/wx/include/wx/collpane.h +++ /dev/null @@ -1,104 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/collpane.h -// Purpose: wxCollapsiblePane -// Author: Francesco Montorsi -// Modified by: -// Created: 8/10/2006 -// RCS-ID: $Id: collpane.h 43300 2006-11-11 07:32:08Z RD $ -// Copyright: (c) Francesco Montorsi -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_COLLAPSABLE_PANE_H_BASE_ -#define _WX_COLLAPSABLE_PANE_H_BASE_ - -#include "wx/defs.h" - - -#if wxUSE_COLLPANE - -#include "wx/control.h" - - -// ---------------------------------------------------------------------------- -// wxCollapsiblePaneBase: interface for wxCollapsiblePane -// ---------------------------------------------------------------------------- - -#define wxCP_DEFAULT_STYLE (wxTAB_TRAVERSAL | wxNO_BORDER) -#define wxCP_NO_TLW_RESIZE (0x0002) - -class WXDLLIMPEXP_CORE wxCollapsiblePaneBase : public wxControl -{ -public: - wxCollapsiblePaneBase() {} - - virtual void Collapse(bool collapse = true) = 0; - void Expand() { Collapse(false); } - - virtual bool IsCollapsed() const = 0; - bool IsExpanded() const { return !IsCollapsed(); } - - virtual wxWindow *GetPane() const = 0; - - virtual wxString GetLabel() const = 0; - virtual void SetLabel(const wxString& label) = 0; -}; - - -// ---------------------------------------------------------------------------- -// event types and macros -// ---------------------------------------------------------------------------- - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COLLPANE_CHANGED, 1102) -END_DECLARE_EVENT_TYPES() - -class WXDLLIMPEXP_CORE wxCollapsiblePaneEvent : public wxCommandEvent -{ -public: - wxCollapsiblePaneEvent() {} - wxCollapsiblePaneEvent(wxObject *generator, int id, bool collapsed) - : wxCommandEvent(wxEVT_COMMAND_COLLPANE_CHANGED, id), - m_bCollapsed(collapsed) - { - SetEventObject(generator); - } - - bool GetCollapsed() const { return m_bCollapsed; } - void SetCollapsed(bool c) { m_bCollapsed = c; } - - - // default copy ctor, assignment operator and dtor are ok - virtual wxEvent *Clone() const { return new wxCollapsiblePaneEvent(*this); } - -private: - bool m_bCollapsed; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCollapsiblePaneEvent) -}; - -// ---------------------------------------------------------------------------- -// event types and macros -// ---------------------------------------------------------------------------- - -typedef void (wxEvtHandler::*wxCollapsiblePaneEventFunction)(wxCollapsiblePaneEvent&); - -#define wxCollapsiblePaneEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCollapsiblePaneEventFunction, &func) - -#define EVT_COLLAPSIBLEPANE_CHANGED(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_COLLPANE_CHANGED, id, wxCollapsiblePaneEventHandler(fn)) - - -#if defined(__WXGTK24__) && !defined(__WXUNIVERSAL__) - #include "wx/gtk/collpane.h" -#else - #include "wx/generic/collpaneg.h" - - // use #define and not a typedef to allow forward declaring the class - #define wxCollapsiblePane wxGenericCollapsiblePane -#endif - -#endif // wxUSE_COLLPANE - -#endif // _WX_COLLAPSABLE_PANE_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/colordlg.h b/desmume/src/windows/wx/include/wx/colordlg.h deleted file mode 100644 index 83e416dcb..000000000 --- a/desmume/src/windows/wx/include/wx/colordlg.h +++ /dev/null @@ -1,41 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/colrdlgg.h -// Purpose: wxColourDialog -// Author: Vadim Zeitiln -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: colordlg.h 36623 2006-01-02 14:26:36Z JS $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_COLORDLG_H_BASE_ -#define _WX_COLORDLG_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_COLOURDLG - -#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) - #include "wx/msw/colordlg.h" -#elif defined(__WXMAC__) && !defined(__WXUNIVERSAL__) - #include "wx/mac/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" - - #define wxColourDialog wxGenericColourDialog -#endif - -// get the colour from user and return it -wxColour WXDLLEXPORT -wxGetColourFromUser(wxWindow *parent = (wxWindow *)NULL, - const wxColour& colInit = wxNullColour, const wxString& caption = wxEmptyString); - -#endif // wxUSE_COLOURDLG - -#endif - // _WX_COLORDLG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/colour.h b/desmume/src/windows/wx/include/wx/colour.h deleted file mode 100644 index bb396f0fe..000000000 --- a/desmume/src/windows/wx/include/wx/colour.h +++ /dev/null @@ -1,154 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/colour.h -// Purpose: wxColourBase definition -// Author: Julian Smart -// Modified by: Francesco Montorsi -// Created: -// RCS-ID: $Id: colour.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_COLOUR_H_BASE_ -#define _WX_COLOUR_H_BASE_ - -#include "wx/defs.h" -#include "wx/gdiobj.h" - - -class WXDLLIMPEXP_FWD_CORE wxColour; - -// the standard wxColour constructors; -// this macro avoids to repeat these lines across all colour.h files, since -// Set() is a virtual function and thus cannot be called by wxColourBase -// constructors -#define DEFINE_STD_WXCOLOUR_CONSTRUCTORS \ - wxColour( ChannelType red, ChannelType green, ChannelType blue, \ - ChannelType alpha = wxALPHA_OPAQUE ) \ - { Set(red, green, blue, alpha); } \ - wxColour( unsigned long colRGB ) { Set(colRGB); } \ - wxColour(const wxString &colourName) { Set(colourName); } \ - wxColour(const wxChar *colourName) { Set(colourName); } - - -// flags for wxColour -> wxString conversion (see wxColour::GetAsString) -#define wxC2S_NAME 1 // return colour name, when possible -#define wxC2S_CSS_SYNTAX 2 // return colour in rgb(r,g,b) syntax -#define wxC2S_HTML_SYNTAX 4 // return colour in #rrggbb syntax - - -const unsigned char wxALPHA_TRANSPARENT = 0; -const unsigned char wxALPHA_OPAQUE = 0xff; - -// ---------------------------------------------------------------------------- -// wxVariant support -// ---------------------------------------------------------------------------- - -#if wxUSE_VARIANT -#include "wx/variant.h" -DECLARE_VARIANT_OBJECT_EXPORTED(wxColour,WXDLLEXPORT) -#endif - -//----------------------------------------------------------------------------- -// wxColourBase: this class has no data members, just some functions to avoid -// code redundancy in all native wxColour implementations -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxColourBase : public wxGDIObject -{ -public: - // type of a single colour component - typedef unsigned char ChannelType; - - wxColourBase() {} - virtual ~wxColourBase() {} - - - // Set() functions - // --------------- - - void Set(ChannelType red, - ChannelType green, - ChannelType blue, - ChannelType alpha = wxALPHA_OPAQUE) - { InitRGBA(red,green,blue, alpha); } - - // implemented in colourcmn.cpp - bool Set(const wxChar *str) - { return FromString(str); } - - bool Set(const wxString &str) - { return FromString(str); } - - void Set(unsigned long colRGB) - { - // we don't need to know sizeof(long) here because we assume that the three - // least significant bytes contain the R, G and B values - Set((ChannelType)(0xFF & colRGB), - (ChannelType)(0xFF & (colRGB >> 8)), - (ChannelType)(0xFF & (colRGB >> 16))); - } - - - - // accessors - // --------- - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const = 0; - - virtual ChannelType Red() const = 0; - virtual ChannelType Green() const = 0; - virtual ChannelType Blue() const = 0; - virtual ChannelType Alpha() const - { return wxALPHA_OPAQUE ; } - - // implemented in colourcmn.cpp - virtual wxString GetAsString(long flags = wxC2S_NAME | wxC2S_CSS_SYNTAX) const; - - - - // old, deprecated - // --------------- - -#if WXWIN_COMPATIBILITY_2_6 - wxDEPRECATED( static wxColour CreateByName(const wxString& name) ); - wxDEPRECATED( void InitFromName(const wxString& col) ); -#endif - -protected: - virtual void - InitRGBA(ChannelType r, ChannelType g, ChannelType b, ChannelType a) = 0; - - virtual bool FromString(const wxChar *s); -}; - - - -#if defined(__WXPALMOS__) - #include "wx/generic/colour.h" -#elif defined(__WXMSW__) - #include "wx/msw/colour.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/colour.h" -#elif defined(__WXGTK20__) - #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__) - #include "wx/x11/colour.h" -#elif defined(__WXMAC__) - #include "wx/mac/colour.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/colour.h" -#elif defined(__WXPM__) - #include "wx/os2/colour.h" -#endif - -#define wxColor wxColour - -#endif // _WX_COLOUR_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/combo.h b/desmume/src/windows/wx/include/wx/combo.h deleted file mode 100644 index 52c8af4fb..000000000 --- a/desmume/src/windows/wx/include/wx/combo.h +++ /dev/null @@ -1,746 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/combo.h -// Purpose: wxComboCtrl declaration -// Author: Jaakko Salli -// Modified by: -// Created: Apr-30-2006 -// RCS-ID: $Id: combo.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) Jaakko Salli -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_COMBOCONTROL_H_BASE_ -#define _WX_COMBOCONTROL_H_BASE_ - - -/* - A few words about all the classes defined in this file are probably in - order: why do we need extra wxComboCtrl and wxComboPopup classes? - - This is because a traditional combobox is a combination of a text control - (with a button allowing to open the pop down list) with a listbox and - wxComboBox class is exactly such control, however we want to also have other - combinations - in fact, we want to allow anything at all to be used as pop - down list, not just a wxListBox. - - So we define a base wxComboCtrl which can use any control as pop down - list and wxComboBox deriving from it which implements the standard wxWidgets - combobox API. wxComboCtrl needs to be told somehow which control to use - and this is done by SetPopupControl(). However, we need something more than - just a wxControl in this method as, for example, we need to call - SetSelection("initial text value") and wxControl doesn't have such method. - So we also need a wxComboPopup which is just a very simple interface which - must be implemented by a control to be usable as a popup. - - We couldn't derive wxComboPopup from wxControl as this would make it - impossible to have a class deriving from both wxListBx and from it, so - instead it is just a mix-in. - */ - - -#include "wx/defs.h" - -#if wxUSE_COMBOCTRL - -#include "wx/control.h" -#include "wx/renderer.h" // this is needed for wxCONTROL_XXX flags -#include "wx/bitmap.h" // wxBitmap used by-value - -class WXDLLIMPEXP_FWD_CORE wxTextCtrl; -class WXDLLIMPEXP_FWD_CORE wxComboPopup; - -// -// New window styles for wxComboCtrlBase -// -enum -{ - // Double-clicking a read-only combo triggers call to popup's OnComboPopup. - // In wxOwnerDrawnComboBox, for instance, it cycles item. - wxCC_SPECIAL_DCLICK = 0x0100, - - // Dropbutton acts like standard push button. - wxCC_STD_BUTTON = 0x0200 -}; - - -// wxComboCtrl internal flags -enum -{ - // First those that can be passed to Customize. - // It is Windows style for all flags to be clear. - - // Button is preferred outside the border (GTK style) - wxCC_BUTTON_OUTSIDE_BORDER = 0x0001, - // Show popup on mouse up instead of mouse down (which is the Windows style) - wxCC_POPUP_ON_MOUSE_UP = 0x0002, - // All text is not automatically selected on click - wxCC_NO_TEXT_AUTO_SELECT = 0x0004, - - // Internal use: signals creation is complete - wxCC_IFLAG_CREATED = 0x0100, - // Internal use: really put button outside - wxCC_IFLAG_BUTTON_OUTSIDE = 0x0200, - // Internal use: SetTextIndent has been called - wxCC_IFLAG_INDENT_SET = 0x0400, - // Internal use: Set wxTAB_TRAVERSAL to parent when popup is dismissed - wxCC_IFLAG_PARENT_TAB_TRAVERSAL = 0x0800, - // Internal use: Secondary popup window type should be used (if available). - wxCC_IFLAG_USE_ALT_POPUP = 0x1000, - // Internal use: Skip popup animation. - wxCC_IFLAG_DISABLE_POPUP_ANIM = 0x2000 -}; - - -// Flags used by PreprocessMouseEvent and HandleButtonMouseEvent -enum -{ - wxCC_MF_ON_BUTTON = 0x0001, // cursor is on dropbutton area - wxCC_MF_ON_CLICK_AREA = 0x0002 // cursor is on dropbutton or other area - // that can be clicked to show the popup. -}; - - -// Namespace for wxComboCtrl feature flags -struct wxComboCtrlFeatures -{ - enum - { - MovableButton = 0x0001, // Button can be on either side of control - BitmapButton = 0x0002, // Button may be replaced with bitmap - ButtonSpacing = 0x0004, // Button can have spacing from the edge - // of the control - TextIndent = 0x0008, // SetTextIndent can be used - PaintControl = 0x0010, // Combo control itself can be custom painted - PaintWritable = 0x0020, // A variable-width area in front of writable - // combo control's textctrl can be custom - // painted - Borderless = 0x0040, // wxNO_BORDER window style works - - // There are no feature flags for... - // PushButtonBitmapBackground - if its in wxRendererNative, then it should be - // not an issue to have it automatically under the bitmap. - - All = MovableButton|BitmapButton| - ButtonSpacing|TextIndent| - PaintControl|PaintWritable| - Borderless - }; -}; - - -class WXDLLEXPORT wxComboCtrlBase : public wxControl -{ - friend class wxComboPopup; -public: - // ctors and such - wxComboCtrlBase() : wxControl() { Init(); } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - long style, - const wxValidator& validator, - const wxString& name); - - virtual ~wxComboCtrlBase(); - - // show/hide popup window - virtual void ShowPopup(); - virtual void HidePopup(); - - // Override for totally custom combo action - virtual void OnButtonClick(); - - // return true if the popup is currently shown - bool IsPopupShown() const { return m_popupWinState == Visible; } - - // set interface class instance derived from wxComboPopup - // NULL popup can be used to indicate default in a derived class - void SetPopupControl( wxComboPopup* popup ) - { - DoSetPopupControl(popup); - } - - // get interface class instance derived from wxComboPopup - wxComboPopup* GetPopupControl() - { - EnsurePopupControl(); - return m_popupInterface; - } - - // get the popup window containing the popup control - wxWindow *GetPopupWindow() const { return m_winPopup; } - - // Get the text control which is part of the combobox. - wxTextCtrl *GetTextCtrl() const { return m_text; } - - // get the dropdown button which is part of the combobox - // note: its not necessarily a wxButton or wxBitmapButton - wxWindow *GetButton() const { return m_btn; } - - // forward these methods to all subcontrols - virtual bool Enable(bool enable = true); - virtual bool Show(bool show = true); - virtual bool SetFont(const wxFont& font); -#if wxUSE_VALIDATORS - virtual void SetValidator(const wxValidator &validator); - virtual wxValidator *GetValidator(); -#endif // wxUSE_VALIDATORS - - // wxTextCtrl methods - for readonly combo they should return - // without errors. - virtual wxString GetValue() const; - virtual void SetValue(const wxString& value); - virtual void Copy(); - virtual void Cut(); - virtual void Paste(); - virtual void SetInsertionPoint(long pos); - virtual void SetInsertionPointEnd(); - virtual long GetInsertionPoint() const; - virtual long GetLastPosition() const; - virtual void Replace(long from, long to, const wxString& value); - virtual void Remove(long from, long to); - virtual void SetSelection(long from, long to); - virtual void Undo(); - - // This method sets the text without affecting list selection - // (ie. wxComboPopup::SetStringValue doesn't get called). - void SetText(const wxString& value); - - // This method sets value and also optionally sends EVT_TEXT - // (needed by combo popups) - void SetValueWithEvent(const wxString& value, bool withEvent = true); - - // - // Popup customization methods - // - - // Sets minimum width of the popup. If wider than combo control, it will extend to the left. - // Remarks: - // * Value -1 indicates the default. - // * Custom popup may choose to ignore this (wxOwnerDrawnComboBox does not). - void SetPopupMinWidth( int width ) - { - m_widthMinPopup = width; - } - - // Sets preferred maximum height of the popup. - // Remarks: - // * Value -1 indicates the default. - // * Custom popup may choose to ignore this (wxOwnerDrawnComboBox does not). - void SetPopupMaxHeight( int height ) - { - m_heightPopup = height; - } - - // Extends popup size horizontally, relative to the edges of the combo control. - // Remarks: - // * Popup minimum width may override extLeft (ie. it has higher precedence). - // * Values 0 indicate default. - // * Custom popup may not take this fully into account (wxOwnerDrawnComboBox takes). - void SetPopupExtents( int extLeft, int extRight ) - { - m_extLeft = extLeft; - m_extRight = extRight; - } - - // Set width, in pixels, of custom paint area in writable combo. - // In read-only, used to indicate area that is not covered by the - // focus rectangle (which may or may not be drawn, depending on the - // popup type). - void SetCustomPaintWidth( int width ); - int GetCustomPaintWidth() const { return m_widthCustomPaint; } - - // Set side of the control to which the popup will align itself. - // Valid values are wxLEFT, wxRIGHT and 0. The default value 0 wmeans - // that the side of the button will be used. - void SetPopupAnchor( int anchorSide ) - { - m_anchorSide = anchorSide; - } - - // Set position of dropdown button. - // width: button width. <= 0 for default. - // height: button height. <= 0 for default. - // side: wxLEFT or wxRIGHT, indicates on which side the button will be placed. - // spacingX: empty space on sides of the button. Default is 0. - // Remarks: - // There is no spacingY - the button will be centered vertically. - void SetButtonPosition( int width = -1, - int height = -1, - int side = wxRIGHT, - int spacingX = 0 ); - - // Returns current size of the dropdown button. - wxSize GetButtonSize(); - - // - // Sets dropbutton to be drawn with custom bitmaps. - // - // bmpNormal: drawn when cursor is not on button - // pushButtonBg: Draw push button background below the image. - // NOTE! This is usually only properly supported on platforms with appropriate - // method in wxRendererNative. - // bmpPressed: drawn when button is depressed - // bmpHover: drawn when cursor hovers on button. This is ignored on platforms - // that do not generally display hover differently. - // bmpDisabled: drawn when combobox is disabled. - void SetButtonBitmaps( const wxBitmap& bmpNormal, - bool pushButtonBg = false, - const wxBitmap& bmpPressed = wxNullBitmap, - const wxBitmap& bmpHover = wxNullBitmap, - const wxBitmap& bmpDisabled = wxNullBitmap ); - - // - // This will set the space in pixels between left edge of the control and the - // text, regardless whether control is read-only (ie. no wxTextCtrl) or not. - // Platform-specific default can be set with value-1. - // Remarks - // * This method may do nothing on some native implementations. - void SetTextIndent( int indent ); - - // Returns actual indentation in pixels. - wxCoord GetTextIndent() const - { - return m_absIndent; - } - - // Returns area covered by the text field. - const wxRect& GetTextRect() const - { - return m_tcArea; - } - - // Call with enable as true to use a type of popup window that guarantees ability - // to focus the popup control, and normal function of common native controls. - // This alternative popup window is usually a wxDialog, and as such it's parent - // frame will appear as if the focus has been lost from it. - void UseAltPopupWindow( bool enable = true ) - { - wxASSERT_MSG( !m_winPopup, - wxT("call this only before SetPopupControl") ); - - if ( enable ) - m_iFlags |= wxCC_IFLAG_USE_ALT_POPUP; - else - m_iFlags &= ~wxCC_IFLAG_USE_ALT_POPUP; - } - - // Call with false to disable popup animation, if any. - void EnablePopupAnimation( bool enable = true ) - { - if ( enable ) - m_iFlags &= ~wxCC_IFLAG_DISABLE_POPUP_ANIM; - else - m_iFlags |= wxCC_IFLAG_DISABLE_POPUP_ANIM; - } - - // - // Utilies needed by the popups or native implementations - // - - // Returns true if given key combination should toggle the popup. - // NB: This is a separate from other keyboard handling because: - // 1) Replaceability. - // 2) Centralized code (otherwise it'd be split up between - // wxComboCtrl key handler and wxVListBoxComboPopup's - // key handler). - virtual bool IsKeyPopupToggle(const wxKeyEvent& event) const = 0; - - // Prepare background of combo control or an item in a dropdown list - // in a way typical on platform. This includes painting the focus/disabled - // background and setting the clipping region. - // Unless you plan to paint your own focus indicator, you should always call this - // in your wxComboPopup::PaintComboControl implementation. - // In addition, it sets pen and text colour to what looks good and proper - // against the background. - // flags: wxRendererNative flags: wxCONTROL_ISSUBMENU: is drawing a list item instead of combo control - // wxCONTROL_SELECTED: list item is selected - // wxCONTROL_DISABLED: control/item is disabled - virtual void PrepareBackground( wxDC& dc, const wxRect& rect, int flags ) const; - - // Returns true if focus indicator should be drawn in the control. - bool ShouldDrawFocus() const - { - const wxWindow* curFocus = FindFocus(); - return ( !IsPopupShown() && - (curFocus == this || (m_btn && curFocus == m_btn)) && - (m_windowStyle & wxCB_READONLY) ); - } - - // These methods return references to appropriate dropbutton bitmaps - const wxBitmap& GetBitmapNormal() const { return m_bmpNormal; } - const wxBitmap& GetBitmapPressed() const { return m_bmpPressed; } - const wxBitmap& GetBitmapHover() const { return m_bmpHover; } - const wxBitmap& GetBitmapDisabled() const { return m_bmpDisabled; } - - // Return internal flags - wxUint32 GetInternalFlags() const { return m_iFlags; } - - // Return true if Create has finished - bool IsCreated() const { return m_iFlags & wxCC_IFLAG_CREATED ? true : false; } - - // common code to be called on popup hide/dismiss - void OnPopupDismiss(); - - // PopupShown states - enum - { - Hidden = 0, - //Closing = 1, - Animating = 2, - Visible = 3 - }; - - bool IsPopupWindowState( int state ) const { return (state == m_popupWinState) ? true : false; } - - wxByte GetPopupWindowState() const { return m_popupWinState; } - - // Set value returned by GetMainWindowOfCompositeControl - void SetCtrlMainWnd( wxWindow* wnd ) { m_mainCtrlWnd = wnd; } - -protected: - - // - // Override these for customization purposes - // - - // called from wxSizeEvent handler - virtual void OnResize() = 0; - - // Return native text identation (for pure text, not textctrl) - virtual wxCoord GetNativeTextIndent() const; - - // Called in syscolourchanged handler and base create - virtual void OnThemeChange(); - - // Creates wxTextCtrl. - // extraStyle: Extra style parameters - void CreateTextCtrl( int extraStyle, const wxValidator& validator ); - - // Installs standard input handler to combo (and optionally to the textctrl) - void InstallInputHandlers(); - - // flags for DrawButton() - enum - { - Draw_PaintBg = 1 - }; - - // Draws dropbutton. Using wxRenderer or bitmaps, as appropriate. - void DrawButton( wxDC& dc, const wxRect& rect, int flags = Draw_PaintBg ); - - // Call if cursor is on button area or mouse is captured for the button. - //bool HandleButtonMouseEvent( wxMouseEvent& event, bool isInside ); - bool HandleButtonMouseEvent( wxMouseEvent& event, int flags ); - - // returns true if event was consumed or filtered (event type is also set to 0 in this case) - bool PreprocessMouseEvent( wxMouseEvent& event, int flags ); - - // - // This will handle left_down and left_dclick events outside button in a Windows-like manner. - // If you need alternate behaviour, it is recommended you manipulate and filter events to it - // instead of building your own handling routine (for reference, on wxEVT_LEFT_DOWN it will - // toggle popup and on wxEVT_LEFT_DCLICK it will do the same or run the popup's dclick method, - // if defined - you should pass events of other types of it for common processing). - void HandleNormalMouseEvent( wxMouseEvent& event ); - - // Creates popup window, calls interface->Create(), etc - void CreatePopup(); - - // Destroy popup window and all related constructs - void DestroyPopup(); - - // override the base class virtuals involved in geometry calculations - virtual wxSize DoGetBestSize() const; - - // NULL popup can be used to indicate default in a derived class - virtual void DoSetPopupControl(wxComboPopup* popup); - - // ensures there is atleast the default popup - void EnsurePopupControl(); - - // Recalculates button and textctrl areas. Called when size or button setup change. - // btnWidth: default/calculated width of the dropbutton. 0 means unchanged, - // just recalculate. - void CalculateAreas( int btnWidth = 0 ); - - // Standard textctrl positioning routine. Just give it platform-dependant - // textctrl coordinate adjustment. - void PositionTextCtrl( int textCtrlXAdjust, int textCtrlYAdjust ); - - // event handlers - void OnSizeEvent( wxSizeEvent& event ); - void OnFocusEvent(wxFocusEvent& event); - void OnIdleEvent(wxIdleEvent& event); - void OnTextCtrlEvent(wxCommandEvent& event); - void OnSysColourChanged(wxSysColourChangedEvent& event); - void OnKeyEvent(wxKeyEvent& event); - - // Set customization flags (directs how wxComboCtrlBase helpers behave) - void Customize( wxUint32 flags ) { m_iFlags |= flags; } - - // Dispatches size event and refreshes - void RecalcAndRefresh(); - - // Flags for DoShowPopup and AnimateShow - enum - { - ShowBelow = 0x0000, // Showing popup below the control - ShowAbove = 0x0001, // Showing popup above the control - CanDeferShow = 0x0002 // Can only return true from AnimateShow if this is set - }; - - // Shows and positions the popup. - virtual void DoShowPopup( const wxRect& rect, int flags ); - - // Implement in derived class to create a drop-down animation. - // Return true if finished immediately. Otherwise popup is only - // shown when the derived class call DoShowPopup. - // Flags are same as for DoShowPopup. - virtual bool AnimateShow( const wxRect& rect, int flags ); - -#if wxUSE_TOOLTIPS - virtual void DoSetToolTip( wxToolTip *tip ); -#endif - - virtual wxWindow *GetMainWindowOfCompositeControl() - { return m_mainCtrlWnd; } - - // This is used when m_text is hidden (readonly). - wxString m_valueString; - - // the text control and button we show all the time - wxTextCtrl* m_text; - wxWindow* m_btn; - - // wxPopupWindow or similar containing the window managed by the interface. - wxWindow* m_winPopup; - - // the popup control/panel - wxWindow* m_popup; - - // popup interface - wxComboPopup* m_popupInterface; - - // this is input etc. handler for the text control - wxEvtHandler* m_textEvtHandler; - - // this is for the top level window - wxEvtHandler* m_toplevEvtHandler; - - // this is for the control in popup - wxEvtHandler* m_popupExtraHandler; - - // this is for the popup window - wxEvtHandler* m_popupWinEvtHandler; - - // main (ie. topmost) window of a composite control (default = this) - wxWindow* m_mainCtrlWnd; - - // used to prevent immediate re-popupping incase closed popup - // by clicking on the combo control (needed because of inconsistent - // transient implementation across platforms). - wxLongLong m_timeCanAcceptClick; - - // how much popup should expand to the left/right of the control - wxCoord m_extLeft; - wxCoord m_extRight; - - // minimum popup width - wxCoord m_widthMinPopup; - - // preferred popup height - wxCoord m_heightPopup; - - // how much of writable combo is custom-paint by callback? - // also used to indicate area that is not covered by "blue" - // selection indicator. - wxCoord m_widthCustomPaint; - - // absolute text indentation, in pixels - wxCoord m_absIndent; - - // side on which the popup is aligned - int m_anchorSide; - - // Width of the "fake" border - wxCoord m_widthCustomBorder; - - // The button and textctrl click/paint areas - wxRect m_tcArea; - wxRect m_btnArea; - - // current button state (uses renderer flags) - int m_btnState; - - // button position - int m_btnWid; - int m_btnHei; - int m_btnSide; - int m_btnSpacingX; - - // last default button width - int m_btnWidDefault; - - // custom dropbutton bitmaps - wxBitmap m_bmpNormal; - wxBitmap m_bmpPressed; - wxBitmap m_bmpHover; - wxBitmap m_bmpDisabled; - - // area used by the button - wxSize m_btnSize; - - // platform-dependant customization and other flags - wxUint32 m_iFlags; - - // draw blank button background under bitmap? - bool m_blankButtonBg; - - // is the popup window currenty shown? - wxByte m_popupWinState; - - // should the focus be reset to the textctrl in idle time? - bool m_resetFocus; - -private: - void Init(); - - wxByte m_ignoreEvtText; // Number of next EVT_TEXTs to ignore - - // Is popup window wxPopupTransientWindow, wxPopupWindow or wxDialog? - wxByte m_popupWinType; - - DECLARE_EVENT_TABLE() - - DECLARE_ABSTRACT_CLASS(wxComboCtrlBase) -}; - - -// ---------------------------------------------------------------------------- -// wxComboPopup is the interface which must be implemented by a control to be -// used as a popup by wxComboCtrl -// ---------------------------------------------------------------------------- - - -// wxComboPopup internal flags -enum -{ - wxCP_IFLAG_CREATED = 0x0001 // Set by wxComboCtrlBase after Create is called -}; - - -class WXDLLEXPORT wxComboPopup -{ - friend class wxComboCtrlBase; -public: - wxComboPopup() - { - m_combo = (wxComboCtrlBase*) NULL; - m_iFlags = 0; - } - - // This is called immediately after construction finishes. m_combo member - // variable has been initialized before the call. - // NOTE: It is not in constructor so the derived class doesn't need to redefine - // a default constructor of its own. - virtual void Init() { } - - virtual ~wxComboPopup(); - - // Create the popup child control. - // Return true for success. - virtual bool Create(wxWindow* parent) = 0; - - // We must have an associated control which is subclassed by the combobox. - virtual wxWindow *GetControl() = 0; - - // Called immediately after the popup is shown - virtual void OnPopup(); - - // Called when popup is dismissed - virtual void OnDismiss(); - - // Called just prior to displaying popup. - // Default implementation does nothing. - virtual void SetStringValue( const wxString& value ); - - // Gets displayed string representation of the value. - virtual wxString GetStringValue() const = 0; - - // This is called to custom paint in the combo control itself (ie. not the popup). - // Default implementation draws value as string. - virtual void PaintComboControl( wxDC& dc, const wxRect& rect ); - - // Receives key events from the parent wxComboCtrl. - // Events not handled should be skipped, as usual. - virtual void OnComboKeyEvent( wxKeyEvent& event ); - - // Implement if you need to support special action when user - // double-clicks on the parent wxComboCtrl. - virtual void OnComboDoubleClick(); - - // Return final size of popup. Called on every popup, just prior to OnShow. - // minWidth = preferred minimum width for window - // prefHeight = preferred height. Only applies if > 0, - // maxHeight = max height for window, as limited by screen size - // and should only be rounded down, if necessary. - virtual wxSize GetAdjustedSize( int minWidth, int prefHeight, int maxHeight ); - - // Return true if you want delay call to Create until the popup is shown - // for the first time. It is more efficient, but note that it is often - // more convenient to have the control created immediately. - // Default returns false. - virtual bool LazyCreate(); - - // - // Utilies - // - - // Hides the popup - void Dismiss(); - - // Returns true if Create has been called. - bool IsCreated() const - { - return (m_iFlags & wxCP_IFLAG_CREATED) ? true : false; - } - - // Default PaintComboControl behaviour - static void DefaultPaintComboControl( wxComboCtrlBase* combo, - wxDC& dc, - const wxRect& rect ); - -protected: - wxComboCtrlBase* m_combo; - wxUint32 m_iFlags; - -private: - // Called in wxComboCtrlBase::SetPopupControl - void InitBase(wxComboCtrlBase *combo) - { - m_combo = combo; - } -}; - - -// ---------------------------------------------------------------------------- -// include the platform-dependent header defining the real class -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - // No native universal (but it must still be first in the list) -#elif defined(__WXMSW__) - #include "wx/msw/combo.h" -#endif - -// Any ports may need generic as an alternative -#include "wx/generic/combo.h" - -#endif // wxUSE_COMBOCTRL - -#endif - // _WX_COMBOCONTROL_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/combobox.h b/desmume/src/windows/wx/include/wx/combobox.h deleted file mode 100644 index 1b3170567..000000000 --- a/desmume/src/windows/wx/include/wx/combobox.h +++ /dev/null @@ -1,97 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/combobox.h -// Purpose: wxComboBox declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 24.12.00 -// RCS-ID: $Id: combobox.h 42727 2006-10-30 16:04:27Z VZ $ -// Copyright: (c) 1996-2000 wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_COMBOBOX_H_BASE_ -#define _WX_COMBOBOX_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_COMBOBOX - -extern WXDLLEXPORT_DATA(const wxChar) wxComboBoxNameStr[]; - -// ---------------------------------------------------------------------------- -// wxComboBoxBase: this interface defines the methods wxComboBox must implement -// ---------------------------------------------------------------------------- - -#include "wx/textctrl.h" -#include "wx/ctrlsub.h" - -class WXDLLEXPORT wxComboBoxBase : public wxItemContainer -{ -public: - // wxTextCtrl-like methods wxComboBox must implement - virtual wxString GetValue() const = 0; - virtual void SetValue(const wxString& value) = 0; - - virtual void Copy() = 0; - virtual void Cut() = 0; - virtual void Paste() = 0; - virtual void SetInsertionPoint(long pos) = 0; - virtual long GetInsertionPoint() const = 0; - virtual wxTextPos GetLastPosition() const = 0; - virtual void Replace(long from, long to, const wxString& value) = 0; - virtual void SetSelection(long from, long to) = 0; - virtual void SetEditable(bool editable) = 0; - - virtual void SetInsertionPointEnd() - { SetInsertionPoint(GetLastPosition()); } - virtual void Remove(long from, long to) - { Replace(from, to, wxEmptyString); } - - virtual bool IsEditable() const = 0; - - virtual void Undo() = 0; - virtual void Redo() = 0; - virtual void SelectAll() = 0; - - virtual bool CanCopy() const = 0; - virtual bool CanCut() const = 0; - virtual bool CanPaste() const = 0; - virtual bool CanUndo() const = 0; - virtual bool CanRedo() const = 0; - - // may return value different from GetSelection() when the combobox - // dropdown is shown and the user selected, but not yet accepted, a value - // different from the old one in it - virtual int GetCurrentSelection() const { return GetSelection(); } - - // redeclare inherited SetSelection() overload here as well to avoid - // virtual function hiding - virtual void SetSelection(int n) = 0; -}; - -// ---------------------------------------------------------------------------- -// include the platform-dependent header defining the real class -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/combobox.h" -#elif defined(__WXMSW__) - #include "wx/msw/combobox.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/combobox.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/combobox.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/combobox.h" -#elif defined(__WXMAC__) - #include "wx/mac/combobox.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/combobox.h" -#elif defined(__WXPM__) - #include "wx/os2/combobox.h" -#endif - -#endif // wxUSE_COMBOBOX - -#endif - // _WX_COMBOBOX_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/confbase.h b/desmume/src/windows/wx/include/wx/confbase.h deleted file mode 100644 index 9e0cf54b5..000000000 --- a/desmume/src/windows/wx/include/wx/confbase.h +++ /dev/null @@ -1,359 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: confbase.h -// Purpose: declaration of the base class of all config implementations -// (see also: fileconf.h and msw/regconf.h and iniconf.h) -// Author: Karsten Ballueder & Vadim Zeitlin -// Modified by: -// Created: 07.04.98 (adapted from appconf.h) -// RCS-ID: $Id: confbase.h 50711 2007-12-15 02:57:58Z VZ $ -// Copyright: (c) 1997 Karsten Ballueder Ballueder@usa.net -// Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CONFBASE_H_ -#define _WX_CONFBASE_H_ - -#include "wx/defs.h" -#include "wx/string.h" - -class WXDLLIMPEXP_FWD_BASE wxArrayString; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -/// shall we be case sensitive in parsing variable names? -#ifndef wxCONFIG_CASE_SENSITIVE - #define wxCONFIG_CASE_SENSITIVE 0 -#endif - -/// separates group and entry names (probably shouldn't be changed) -#ifndef wxCONFIG_PATH_SEPARATOR - #define wxCONFIG_PATH_SEPARATOR _T('/') -#endif - -/// introduces immutable entries -// (i.e. the ones which can't be changed from the local config file) -#ifndef wxCONFIG_IMMUTABLE_PREFIX - #define wxCONFIG_IMMUTABLE_PREFIX _T('!') -#endif - -#if wxUSE_CONFIG - -#include "wx/string.h" - -/// should we use registry instead of configuration files under Windows? -// (i.e. whether wxConfigBase::Create() will create a wxFileConfig (if it's -// false) or wxRegConfig (if it's true and we're under Win32)) -#ifndef wxUSE_CONFIG_NATIVE - #define wxUSE_CONFIG_NATIVE 1 -#endif - -// Style flags for constructor style parameter -enum -{ - wxCONFIG_USE_LOCAL_FILE = 1, - wxCONFIG_USE_GLOBAL_FILE = 2, - wxCONFIG_USE_RELATIVE_PATH = 4, - wxCONFIG_USE_NO_ESCAPE_CHARACTERS = 8, - wxCONFIG_USE_SUBDIR = 16 -}; - -// ---------------------------------------------------------------------------- -// abstract base class wxConfigBase which defines the interface for derived -// classes -// -// wxConfig organizes the items in a tree-like structure (modeled after the -// Unix/Dos filesystem). There are groups (directories) and keys (files). -// There is always one current group given by the current path. -// -// Keys are pairs "key_name = value" where value may be of string or integer -// (long) type (TODO doubles and other types such as wxDate coming soon). -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxConfigBase -{ -public: - // constants - // the type of an entry - enum EntryType - { - Type_Unknown, - Type_String, - Type_Boolean, - Type_Integer, // use Read(long *) - Type_Float // use Read(double *) - }; - - // static functions - // sets the config object, returns the previous pointer - static wxConfigBase *Set(wxConfigBase *pConfig); - // get the config object, creates it on demand unless DontCreateOnDemand - // was called - static wxConfigBase *Get(bool createOnDemand = true) - { if ( createOnDemand && (!ms_pConfig) ) Create(); return ms_pConfig; } - // create a new config object: this function will create the "best" - // implementation of wxConfig available for the current platform, see - // comments near definition wxUSE_CONFIG_NATIVE for details. It returns - // the created object and also sets it as ms_pConfig. - static wxConfigBase *Create(); - // should Get() try to create a new log object if the current one is NULL? - static void DontCreateOnDemand() { ms_bAutoCreate = false; } - - // ctor & virtual dtor - // ctor (can be used as default ctor too) - // - // Not all args will always be used by derived classes, but including - // them all in each class ensures compatibility. If appName is empty, - // uses wxApp name - wxConfigBase(const wxString& appName = wxEmptyString, - const wxString& vendorName = wxEmptyString, - const wxString& localFilename = wxEmptyString, - const wxString& globalFilename = wxEmptyString, - long style = 0); - - // empty but ensures that dtor of all derived classes is virtual - virtual ~wxConfigBase(); - - // path management - // set current path: if the first character is '/', it's the absolute path, - // otherwise it's a relative path. '..' is supported. If the strPath - // doesn't exist it is created. - virtual void SetPath(const wxString& strPath) = 0; - // retrieve the current path (always as absolute path) - virtual const wxString& GetPath() const = 0; - - // enumeration: all functions here return false when there are no more items. - // you must pass the same lIndex to GetNext and GetFirst (don't modify it) - // enumerate subgroups - virtual bool GetFirstGroup(wxString& str, long& lIndex) const = 0; - virtual bool GetNextGroup (wxString& str, long& lIndex) const = 0; - // enumerate entries - virtual bool GetFirstEntry(wxString& str, long& lIndex) const = 0; - virtual bool GetNextEntry (wxString& str, long& lIndex) const = 0; - // get number of entries/subgroups in the current group, with or without - // it's subgroups - virtual size_t GetNumberOfEntries(bool bRecursive = false) const = 0; - virtual size_t GetNumberOfGroups(bool bRecursive = false) const = 0; - - // tests of existence - // returns true if the group by this name exists - virtual bool HasGroup(const wxString& strName) const = 0; - // same as above, but for an entry - virtual bool HasEntry(const wxString& strName) const = 0; - // returns true if either a group or an entry with a given name exist - bool Exists(const wxString& strName) const - { return HasGroup(strName) || HasEntry(strName); } - - // get the entry type - virtual EntryType GetEntryType(const wxString& name) const - { - // by default all entries are strings - return HasEntry(name) ? Type_String : Type_Unknown; - } - - // key access: returns true if value was really read, false if default used - // (and if the key is not found the default value is returned.) - - // read a string from the key - bool Read(const wxString& key, wxString *pStr) const; - bool Read(const wxString& key, wxString *pStr, const wxString& defVal) const; - - // read a number (long) - bool Read(const wxString& key, long *pl) const; - bool Read(const wxString& key, long *pl, long defVal) const; - - // read an int - bool Read(const wxString& key, int *pi) const; - bool Read(const wxString& key, int *pi, int defVal) const; - - // read a double - bool Read(const wxString& key, double* val) const; - bool Read(const wxString& key, double* val, double defVal) const; - - // read a bool - bool Read(const wxString& key, bool* val) const; - bool Read(const wxString& key, bool* val, bool defVal) const; - - // convenience functions returning directly the value (we don't have them for - // int/double/bool as there would be ambiguities with the long one then) - wxString Read(const wxString& key, - const wxString& defVal = wxEmptyString) const - { wxString s; (void)Read(key, &s, defVal); return s; } - - long Read(const wxString& key, long defVal) const - { long l; (void)Read(key, &l, defVal); return l; } - - // write the value (return true on success) - bool Write(const wxString& key, const wxString& value) - { return DoWriteString(key, value); } - - bool Write(const wxString& key, long value) - { return DoWriteLong(key, value); } - - bool Write(const wxString& key, int value) - { return DoWriteInt(key, value); } - - bool Write(const wxString& key, double value) - { return DoWriteDouble(key, value); } - - bool Write(const wxString& key, bool value) - { return DoWriteBool(key, value); } - - // we have to provide a separate version for C strings as otherwise they - // would be converted to bool and not to wxString as expected! - bool Write(const wxString& key, const wxChar *value) - { return Write(key, wxString(value)); } - - // permanently writes all changes - virtual bool Flush(bool bCurrentOnly = false) = 0; - - // renaming, all functions return false on failure (probably because the new - // name is already taken by an existing entry) - // rename an entry - virtual bool RenameEntry(const wxString& oldName, - const wxString& newName) = 0; - // rename a group - virtual bool RenameGroup(const wxString& oldName, - const wxString& newName) = 0; - - // delete entries/groups - // deletes the specified entry and the group it belongs to if - // it was the last key in it and the second parameter is true - virtual bool DeleteEntry(const wxString& key, - bool bDeleteGroupIfEmpty = true) = 0; - // delete the group (with all subgroups) - virtual bool DeleteGroup(const wxString& key) = 0; - // delete the whole underlying object (disk file, registry key, ...) - // primarily for use by uninstallation routine. - virtual bool DeleteAll() = 0; - - // options - // we can automatically expand environment variables in the config entries - // (this option is on by default, you can turn it on/off at any time) - bool IsExpandingEnvVars() const { return m_bExpandEnvVars; } - void SetExpandEnvVars(bool bDoIt = true) { m_bExpandEnvVars = bDoIt; } - // recording of default values - void SetRecordDefaults(bool bDoIt = true) { m_bRecordDefaults = bDoIt; } - bool IsRecordingDefaults() const { return m_bRecordDefaults; } - // does expansion only if needed - wxString ExpandEnvVars(const wxString& str) const; - - // misc accessors - wxString GetAppName() const { return m_appName; } - wxString GetVendorName() const { return m_vendorName; } - - // Used wxIniConfig to set members in constructor - void SetAppName(const wxString& appName) { m_appName = appName; } - void SetVendorName(const wxString& vendorName) { m_vendorName = vendorName; } - - void SetStyle(long style) { m_style = style; } - long GetStyle() const { return m_style; } - -protected: - static bool IsImmutable(const wxString& key) - { return !key.IsEmpty() && key[0] == wxCONFIG_IMMUTABLE_PREFIX; } - - // return the path without trailing separator, if any: this should be called - // to sanitize paths referring to the group names before passing them to - // wxConfigPathChanger as "/foo/bar/" should be the same as "/foo/bar" and it - // isn't interpreted in the same way by it (and this can't be changed there - // as it's not the same for the entries names) - static wxString RemoveTrailingSeparator(const wxString& key); - - // do read/write the values of different types - virtual bool DoReadString(const wxString& key, wxString *pStr) const = 0; - virtual bool DoReadLong(const wxString& key, long *pl) const = 0; - virtual bool DoReadInt(const wxString& key, int *pi) const; - virtual bool DoReadDouble(const wxString& key, double* val) const; - virtual bool DoReadBool(const wxString& key, bool* val) const; - - virtual bool DoWriteString(const wxString& key, const wxString& value) = 0; - virtual bool DoWriteLong(const wxString& key, long value) = 0; - virtual bool DoWriteInt(const wxString& key, int value); - virtual bool DoWriteDouble(const wxString& key, double value); - virtual bool DoWriteBool(const wxString& key, bool value); - -private: - // are we doing automatic environment variable expansion? - bool m_bExpandEnvVars; - // do we record default values? - bool m_bRecordDefaults; - - // static variables - static wxConfigBase *ms_pConfig; - static bool ms_bAutoCreate; - - // Application name and organisation name - wxString m_appName; - wxString m_vendorName; - - // Style flag - long m_style; -}; - -// a handy little class which changes current path to the path of given entry -// and restores it in dtor: so if you declare a local variable of this type, -// you work in the entry directory and the path is automatically restored -// when the function returns -// Taken out of wxConfig since not all compilers can cope with nested classes. -class WXDLLIMPEXP_BASE wxConfigPathChanger -{ -public: - // ctor/dtor do path changing/restoring of the path - wxConfigPathChanger(const wxConfigBase *pContainer, const wxString& strEntry); - ~wxConfigPathChanger(); - - // get the key name - const wxString& Name() const { return m_strName; } - - // this method must be called if the original path (i.e. the current path at - // the moment of creation of this object) could have been deleted to prevent - // us from restoring the not existing (any more) path - // - // if the original path doesn't exist any more, the path will be restored to - // the deepest still existing component of the old path - void UpdateIfDeleted(); - -private: - wxConfigBase *m_pContainer; // object we live in - wxString m_strName, // name of entry (i.e. name only) - m_strOldPath; // saved path - bool m_bChanged; // was the path changed? - - DECLARE_NO_COPY_CLASS(wxConfigPathChanger) -}; - - -// ---------------------------------------------------------------------------- -// the native wxConfigBase implementation -// ---------------------------------------------------------------------------- - -// under Windows we prefer to use the native implementation -// wxIniConfig isn't native anywhere after droping win16 in wxWidgets 2.6 -#if defined(__WXMSW__) && wxUSE_CONFIG_NATIVE - #define wxConfig wxRegConfig -#else // either we're under Unix or wish to use files even under Windows - #define wxConfig wxFileConfig -#endif - -#endif // wxUSE_CONFIG - -/* - Replace environment variables ($SOMETHING) with their values. The format is - $VARNAME or ${VARNAME} where VARNAME contains alphanumeric characters and - '_' only. '$' must be escaped ('\$') in order to be taken literally. -*/ - -WXDLLIMPEXP_BASE wxString wxExpandEnvVars(const wxString &sz); - -/* - Split path into parts removing '..' in progress - */ -WXDLLIMPEXP_BASE void wxSplitPath(wxArrayString& aParts, const wxChar *sz); - - -#endif - // _WX_CONFIG_H_ - diff --git a/desmume/src/windows/wx/include/wx/config.h b/desmume/src/windows/wx/include/wx/config.h deleted file mode 100644 index 2ef3efcab..000000000 --- a/desmume/src/windows/wx/include/wx/config.h +++ /dev/null @@ -1,31 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: config.h -// Purpose: wxConfig base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: config.h 33948 2005-05-04 18:57:50Z JS $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CONFIG_H_BASE_ -#define _WX_CONFIG_H_BASE_ - -#include "wx/defs.h" -#include "wx/confbase.h" - -#if defined(__WXMSW__) && wxUSE_CONFIG_NATIVE -# ifdef __WIN32__ -# include "wx/msw/regconf.h" -# else -# include "wx/msw/iniconf.h" -# endif -#elif defined(__WXPALMOS__) && wxUSE_CONFIG_NATIVE -# include "wx/palmos/prefconf.h" -#else -# include "wx/fileconf.h" -#endif - -#endif - // _WX_CONFIG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/containr.h b/desmume/src/windows/wx/include/wx/containr.h deleted file mode 100644 index 79eb4f4b8..000000000 --- a/desmume/src/windows/wx/include/wx/containr.h +++ /dev/null @@ -1,142 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/containr.h -// Purpose: wxControlContainer class declration: a "mix-in" class which -// implements the TAB navigation between the controls -// Author: Vadim Zeitlin -// Modified by: -// Created: 06.08.01 -// RCS-ID: $Id: containr.h 50863 2007-12-20 18:32:55Z VS $ -// Copyright: (c) 2001 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CONTAINR_H_ -#define _WX_CONTAINR_H_ - -class WXDLLIMPEXP_FWD_CORE wxFocusEvent; -class WXDLLIMPEXP_FWD_CORE wxNavigationKeyEvent; -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 agregated 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. - */ - -// ---------------------------------------------------------------------------- -// wxControlContainer -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxControlContainer -{ -public: - // ctors and such - wxControlContainer(wxWindow *winParent = NULL); - void SetContainerWindow(wxWindow *winParent) { m_winParent = winParent; } - - // the methods to be called from the window event handlers - void HandleOnNavigationKey(wxNavigationKeyEvent& event); - void HandleOnFocus(wxFocusEvent& event); - void HandleOnWindowDestroy(wxWindowBase *child); - - // should be called from SetFocus(), returns false if we did nothing with - // the focus and the default processing should take place - bool DoSetFocus(); - - // can our child get the focus? - bool AcceptsFocus() const; - - // called from OnChildFocus() handler, i.e. when one of our (grand) - // children gets the focus - void SetLastFocus(wxWindow *win); - -protected: - // set the focus to the child which had it the last time - bool SetFocusToChild(); - - // the parent window we manage the children for - wxWindow *m_winParent; - - // the child which had the focus last time this panel was activated - wxWindow *m_winLastFocused; - - // a guard against infinite recursion - bool m_inSetFocus; - - DECLARE_NO_COPY_CLASS(wxControlContainer) -}; - -// this function is for wxWidgets internal use only -extern bool wxSetFocusToChild(wxWindow *win, wxWindow **child); - -// ---------------------------------------------------------------------------- -// 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() \ -public: \ - void OnNavigationKey(wxNavigationKeyEvent& event); \ - void OnFocus(wxFocusEvent& event); \ - virtual void OnChildFocus(wxChildFocusEvent& event); \ - virtual void SetFocus(); \ - virtual void SetFocusIgnoringChildren(); \ - virtual void RemoveChild(wxWindowBase *child); \ - virtual bool AcceptsFocus() const; \ -\ -protected: \ - wxControlContainer m_container - -// implement the event table entries for wxControlContainer -#define WX_EVENT_TABLE_CONTROL_CONTAINER(classname) \ - EVT_SET_FOCUS(classname::OnFocus) \ - EVT_CHILD_FOCUS(classname::OnChildFocus) \ - EVT_NAVIGATION_KEY(classname::OnNavigationKey) - -// implement the methods forwarding to the wxControlContainer -#define WX_DELEGATE_TO_CONTROL_CONTAINER(classname, basename) \ -void classname::OnNavigationKey( wxNavigationKeyEvent& event ) \ -{ \ - m_container.HandleOnNavigationKey(event); \ -} \ - \ -void classname::RemoveChild(wxWindowBase *child) \ -{ \ - m_container.HandleOnWindowDestroy(child); \ - \ - basename::RemoveChild(child); \ -} \ - \ -void classname::SetFocus() \ -{ \ - if ( !m_container.DoSetFocus() ) \ - basename::SetFocus(); \ -} \ - \ -void classname::SetFocusIgnoringChildren() \ -{ \ - basename::SetFocus(); \ -} \ - \ -void classname::OnChildFocus(wxChildFocusEvent& event) \ -{ \ - m_container.SetLastFocus(event.GetWindow()); \ - event.Skip(); \ -} \ - \ -void classname::OnFocus(wxFocusEvent& event) \ -{ \ - m_container.HandleOnFocus(event); \ -} \ -bool classname::AcceptsFocus() const \ -{ \ - return m_container.AcceptsFocus(); \ -} - - -#endif // _WX_CONTAINR_H_ diff --git a/desmume/src/windows/wx/include/wx/control.h b/desmume/src/windows/wx/include/wx/control.h deleted file mode 100644 index b5208d07d..000000000 --- a/desmume/src/windows/wx/include/wx/control.h +++ /dev/null @@ -1,117 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/control.h -// Purpose: wxControl common interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 26.07.99 -// RCS-ID: $Id: control.h 42816 2006-10-31 08:50:17Z RD $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CONTROL_H_BASE_ -#define _WX_CONTROL_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_CONTROLS - -#include "wx/window.h" // base class - -extern WXDLLEXPORT_DATA(const wxChar) wxControlNameStr[]; - -// ---------------------------------------------------------------------------- -// wxControl is the base class for all controls -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxControlBase : public wxWindow -{ -public: - wxControlBase() { } - - virtual ~wxControlBase(); - - // Create() function adds the validator parameter - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxControlNameStr); - - // get the control alignment (left/right/centre, top/bottom/centre) - int GetAlignment() const { return m_windowStyle & wxALIGN_MASK; } - - // get the string without mnemonic characters ('&') - static wxString GetLabelText(const wxString& label); - - // get just the text of the label, without mnemonic characters ('&') - wxString GetLabelText() const { return GetLabelText(GetLabel()); } - - // controls by default inherit the colours of their parents, if a - // particular control class doesn't want to do it, it can override - // ShouldInheritColours() to return false - virtual bool ShouldInheritColours() const { return true; } - - - // WARNING: this doesn't work for all controls nor all platforms! - // - // simulates the event of given type (i.e. wxButton::Command() is just as - // if the button was clicked) - virtual void Command(wxCommandEvent &event); - - virtual void SetLabel( const wxString &label ); - virtual bool SetFont(const wxFont& font); - - // wxControl-specific processing after processing the update event - virtual void DoUpdateWindowUI(wxUpdateUIEvent& event); - -protected: - // creates the control (calls wxWindowBase::CreateBase inside) and adds it - // to the list of parents children - bool CreateControl(wxWindowBase *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - long style, - const wxValidator& validator, - const wxString& name); - - // initialize the common fields of wxCommandEvent - void InitCommandEvent(wxCommandEvent& event) const; - - DECLARE_NO_COPY_CLASS(wxControlBase) -}; - -// ---------------------------------------------------------------------------- -// include platform-dependent wxControl declarations -// ---------------------------------------------------------------------------- - -#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__) - #include "wx/motif/control.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/control.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/control.h" -#elif defined(__WXMAC__) - #include "wx/mac/control.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/control.h" -#elif defined(__WXPM__) - #include "wx/os2/control.h" -#endif - -#endif // wxUSE_CONTROLS - -#endif - // _WX_CONTROL_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/convauto.h b/desmume/src/windows/wx/include/wx/convauto.h deleted file mode 100644 index 8d96afa55..000000000 --- a/desmume/src/windows/wx/include/wx/convauto.h +++ /dev/null @@ -1,108 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/convauto.h -// Purpose: wxConvAuto class declaration -// Author: Vadim Zeitlin -// Created: 2006-04-03 -// RCS-ID: $Id: convauto.h 45893 2007-05-08 20:05:16Z VZ $ -// Copyright: (c) 2006 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CONVAUTO_H_ -#define _WX_CONVAUTO_H_ - -#include "wx/strconv.h" - -#if wxUSE_WCHAR_T - -// ---------------------------------------------------------------------------- -// wxConvAuto: uses BOM to automatically detect input encoding -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxConvAuto : public wxMBConv -{ -public: - // default ctor, the real conversion will be created on demand - wxConvAuto() { m_conv = NULL; /* the rest will be initialized later */ } - - // copy ctor doesn't initialize anything neither as conversion can only be - // deduced on first use - wxConvAuto(const wxConvAuto& WXUNUSED(other)) : wxMBConv() { m_conv = NULL; } - - virtual ~wxConvAuto() { if ( m_conv && m_ownsConv ) delete m_conv; } - - // override the base class virtual function(s) to use our m_conv - virtual size_t ToWChar(wchar_t *dst, size_t dstLen, - const char *src, size_t srcLen = wxNO_LEN) const; - - virtual size_t FromWChar(char *dst, size_t dstLen, - const wchar_t *src, size_t srcLen = wxNO_LEN) const; - - virtual size_t GetMBNulLen() const { return m_conv->GetMBNulLen(); } - - virtual wxMBConv *Clone() const { return new wxConvAuto(*this); } - -private: - // all currently recognized BOM values - enum BOMType - { - 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); - - // initialize m_conv with the conversion to use by default (UTF-8) - void InitWithDefault() - { - m_conv = &wxConvUTF8; - m_ownsConv = false; - } - - // create the correct conversion object for the given BOM type - void InitFromBOM(BOMType bomType); - - // create the correct conversion object for the BOM present in the - // beginning of the buffer; adjust the buffer to skip the BOM if found - void InitFromInput(const char **src, size_t *len); - - // adjust src and len to skip over the BOM (identified by m_bomType) at the - // start of the buffer - void SkipBOM(const char **src, size_t *len) const; - - - // conversion object which we really use, NULL until the first call to - // either ToWChar() or FromWChar() - wxMBConv *m_conv; - - // our BOM type - BOMType m_bomType; - - // true if we allocated m_conv ourselves, false if we just use an existing - // global conversion - bool m_ownsConv; - - // true if we already skipped BOM when converting (and not just calculating - // the size) - bool m_consumedBOM; - - - DECLARE_NO_ASSIGN_CLASS(wxConvAuto) -}; - -#else // !wxUSE_WCHAR_T - -// it doesn't matter how we define it in this case as it's unused anyhow, but -// do define it to allow the code using wxConvAuto() as default argument (this -// is done in many places) to compile -typedef wxMBConv wxConvAuto; - -#endif // wxUSE_WCHAR_T/!wxUSE_WCHAR_T - -#endif // _WX_CONVAUTO_H_ - diff --git a/desmume/src/windows/wx/include/wx/cpp.h b/desmume/src/windows/wx/include/wx/cpp.h deleted file mode 100644 index 3e23273ac..000000000 --- a/desmume/src/windows/wx/include/wx/cpp.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Name: wx/cpp.h - * Purpose: Various preprocessor helpers - * Author: Vadim Zeitlin - * Created: 2006-09-30 - * RCS-ID: $Id: cpp.h 42993 2006-11-03 21:06:57Z VZ $ - * Copyright: (c) 2006 Vadim Zeitlin - * Licence: wxWindows licence - */ - -/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ - -#ifndef _WX_CPP_H_ -#define _WX_CPP_H_ - -/* wxCONCAT works like preprocessor ## operator but also works with macros */ -#define wxCONCAT_HELPER(text, line) text ## line -#define wxCONCAT(text, line) wxCONCAT_HELPER(text, line) - -/* wxSTRINGIZE works as the preprocessor # operator but also works with macros */ -#define wxSTRINGIZE_HELPER(x) #x -#define wxSTRINGIZE(x) wxSTRINGIZE_HELPER(x) - -/* a Unicode-friendly version of wxSTRINGIZE_T */ -#define wxSTRINGIZE_T(x) wxAPPLY_T(wxSTRINGIZE(x)) - -/* - Helper macros for wxMAKE_UNIQUE_NAME: normally this works by appending the - current line number to the given identifier to reduce the probability of the - conflict (it may still happen if this is used in the headers, hence you - should avoid doing it or provide unique prefixes then) but we have to do it - differently for VC++ - */ -#if defined(__VISUALC__) && (__VISUALC__ >= 1300) - /* - __LINE__ handling is completely broken in VC++ when using "Edit and - Continue" (/ZI option) and results in preprocessor errors if we use it - inside the macros. Luckily VC7 has another standard macro which can be - used like this and is even better than __LINE__ because it is globally - unique. - */ -# define wxCONCAT_LINE(text) wxCONCAT(text, __COUNTER__) -#else /* normal compilers */ -# define wxCONCAT_LINE(text) wxCONCAT(text, __LINE__) -#endif - -/* Create a "unique" name with the given prefix */ -#define wxMAKE_UNIQUE_NAME(text) wxCONCAT_LINE(text) - -/* - This macro can be passed as argument to another macro when you don't have - anything to pass in fact. - */ -#define wxEMPTY_PARAMETER_VALUE /* Fake macro parameter value */ - -#endif // _WX_CPP_H_ - diff --git a/desmume/src/windows/wx/include/wx/cppunit.h b/desmume/src/windows/wx/include/wx/cppunit.h deleted file mode 100644 index c70cfbd80..000000000 --- a/desmume/src/windows/wx/include/wx/cppunit.h +++ /dev/null @@ -1,129 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/cppunit.h -// Purpose: wrapper header for CppUnit headers -// Author: Vadim Zeitlin -// Created: 15.02.04 -// RCS-ID: $Id: cppunit.h 53917 2008-06-01 20:32:26Z VZ $ -// Copyright: (c) 2004 Vadim Zeitlin -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CPPUNIT_H_ -#define _WX_CPPUNIT_H_ - -/////////////////////////////////////////////////////////////////////////////// -// using CPPUNIT_TEST() macro results in this warning, disable it as there is -// no other way to get rid of it and it's not very useful anyhow -#ifdef __VISUALC__ - // typedef-name 'foo' used as synonym for class-name 'bar' - #pragma warning(disable:4097) - - // unreachable code: we don't care about warnings in CppUnit headers - #pragma warning(disable:4702) - - // 'id': identifier was truncated to 'num' characters in the debug info - #pragma warning(disable:4786) -#endif // __VISUALC__ - -#ifdef __BORLANDC__ - #pragma warn -8022 -#endif - -#ifndef CPPUNIT_STD_NEED_ALLOCATOR - #define CPPUNIT_STD_NEED_ALLOCATOR 0 -#endif - -/////////////////////////////////////////////////////////////////////////////// -// Set the default format for the errors, which can be used by an IDE to jump -// to the error location. This default gets overridden by the cppunit headers -// for some compilers (e.g. VC++). - -#ifndef CPPUNIT_COMPILER_LOCATION_FORMAT - #define CPPUNIT_COMPILER_LOCATION_FORMAT "%p:%l:" -#endif - - -/////////////////////////////////////////////////////////////////////////////// -// Include all needed cppunit headers. -// - -#include "wx/beforestd.h" -#include -#include -#include -#include -#include -#include "wx/afterstd.h" - - -/////////////////////////////////////////////////////////////////////////////// -// Set of helpful test macros. -// - -// Base macro for wrapping CPPUNIT_TEST macros and so making them conditional -// tests, meaning that the test only get registered and thus run when a given -// runtime condition is true. -// In case the condition is evaluated as false a skip message is logged -// (the message will only be shown in verbose mode). -#define WXTEST_ANY_WITH_CONDITION(suiteName, Condition, testMethod, anyTest) \ - if (Condition) \ - { anyTest; } \ - else \ - wxLogInfo(wxString::Format(_T("skipping: %s.%s\n reason: %s equals false\n"), \ - wxString(suiteName, wxConvUTF8).c_str(), \ - wxString(#testMethod, wxConvUTF8).c_str(), \ - wxString(#Condition, wxConvUTF8).c_str())) - -// Conditional CPPUNIT_TEST macro. -#define WXTEST_WITH_CONDITION(suiteName, Condition, testMethod) \ - WXTEST_ANY_WITH_CONDITION(suiteName, Condition, testMethod, CPPUNIT_TEST(testMethod)) -// Conditional CPPUNIT_TEST_FAIL macro. -#define WXTEST_FAIL_WITH_CONDITION(suiteName, Condition, testMethod) \ - WXTEST_ANY_WITH_CONDITION(suiteName, Condition, testMethod, CPPUNIT_TEST_FAIL(testMethod)) - -// Use this macro to compare a wxString with a literal string. -#define WX_ASSERT_STR_EQUAL(p, s) CPPUNIT_ASSERT_EQUAL(wxString(p), s) - -// Use this macro to compare a size_t with a literal integer -#define WX_ASSERT_SIZET_EQUAL(n, m) CPPUNIT_ASSERT_EQUAL(((size_t)n), m) - -// Use this macro to compare the expected time_t value with the result of not -// necessarily time_t type -#define WX_ASSERT_TIME_T_EQUAL(t, n) CPPUNIT_ASSERT_EQUAL((t), (time_t)(n)) - - -/////////////////////////////////////////////////////////////////////////////// -// stream inserter for wxString -// - -#include "wx/string.h" - -inline std::ostream& operator<<(std::ostream& o, const wxString& s) -{ - return o << s.mb_str(); -} - - -/////////////////////////////////////////////////////////////////////////////// -// Some more compiler warning tweaking and auto linking. -// - -#ifdef __BORLANDC__ - #pragma warn .8022 -#endif - -#ifdef _MSC_VER - #pragma warning(default:4702) -#endif // _MSC_VER - -// for VC++ automatically link in cppunit library -#ifdef __VISUALC__ - #ifdef NDEBUG - #pragma comment(lib, "cppunit.lib") - #else // Debug - #pragma comment(lib, "cppunitd.lib") - #endif // Release/Debug -#endif - -#endif // _WX_CPPUNIT_H_ - diff --git a/desmume/src/windows/wx/include/wx/cshelp.h b/desmume/src/windows/wx/include/wx/cshelp.h deleted file mode 100644 index f77ac4f67..000000000 --- a/desmume/src/windows/wx/include/wx/cshelp.h +++ /dev/null @@ -1,244 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/cshelp.h -// Purpose: Context-sensitive help support classes -// Author: Julian Smart, Vadim Zeitlin -// Modified by: -// Created: 08/09/2000 -// RCS-ID: $Id: cshelp.h 39675 2006-06-11 21:10:32Z VZ $ -// Copyright: (c) 2000 Julian Smart, Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CSHELP_H_ -#define _WX_CSHELP_H_ - -#include "wx/defs.h" - -#if wxUSE_HELP - -#include "wx/help.h" - -#include "wx/hashmap.h" -#if wxUSE_BMPBUTTON -#include "wx/bmpbuttn.h" -#endif - -#include "wx/event.h" - -// ---------------------------------------------------------------------------- -// classes used to implement context help UI -// ---------------------------------------------------------------------------- - -/* - * wxContextHelp - * Invokes context-sensitive help. When the user - * clicks on a window, a wxEVT_HELP event will be sent to that - * window for the application to display help for. - */ - -class WXDLLEXPORT wxContextHelp : public wxObject -{ -public: - wxContextHelp(wxWindow* win = NULL, bool beginHelp = true); - virtual ~wxContextHelp(); - - bool BeginContextHelp(wxWindow* win); - bool EndContextHelp(); - - bool EventLoop(); - bool DispatchEvent(wxWindow* win, const wxPoint& pt); - - void SetStatus(bool status) { m_status = status; } - -protected: - bool m_inHelp; - bool m_status; // true if the user left-clicked - -private: - DECLARE_DYNAMIC_CLASS(wxContextHelp) -}; - -#if wxUSE_BMPBUTTON -/* - * wxContextHelpButton - * You can add this to your dialogs (especially on non-Windows platforms) - * to put the application into context help mode. - */ - -class WXDLLEXPORT wxContextHelpButton : public wxBitmapButton -{ -public: - wxContextHelpButton(wxWindow* parent, - wxWindowID id = wxID_CONTEXT_HELP, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxBU_AUTODRAW); - - void OnContextHelp(wxCommandEvent& event); - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxContextHelpButton) - DECLARE_EVENT_TABLE() -}; - -#endif - -// ---------------------------------------------------------------------------- -// classes used to implement context help support -// ---------------------------------------------------------------------------- - -// wxHelpProvider is an abstract class used by the program implementing context help to -// show the help text (or whatever: it may be HTML page or anything else) for -// the given window. -// -// The current help provider must be explicitly set by the application using -// wxHelpProvider::Set(). -// -// Special note about ShowHelpAtPoint() and ShowHelp(): we want to be able to -// override ShowHelpAtPoint() when we need to use different help messages for -// different parts of the window, but it should also be possible to override -// just ShowHelp() both for backwards compatibility and just because most -// often the help does not, in fact, depend on the position and so -// implementing just ShowHelp() is simpler and more natural, so by default -// ShowHelpAtPoint() forwards to ShowHelp(). But this means that -// wxSimpleHelpProvider has to override ShowHelp() and not ShowHelpAtPoint() -// for backwards compatibility as otherwise the existing code deriving from it -// and overriding ShowHelp() but calling the base class version wouldn't work -// any more, which forces us to use a rather ugly hack and pass the extra -// parameters of ShowHelpAtPoint() to ShowHelp() via member variables. -class WXDLLEXPORT wxHelpProvider -{ -public: - // get/set the current (application-global) help provider (Set() returns - // the previous one) - static wxHelpProvider *Set(wxHelpProvider *helpProvider) - { - wxHelpProvider *helpProviderOld = ms_helpProvider; - ms_helpProvider = helpProvider; - return helpProviderOld; - } - - // unlike some other class, the help provider is not created on demand, - // this must be explicitly done by the application - static wxHelpProvider *Get() { return ms_helpProvider; } - - // get the help string (whose interpretation is help provider dependent - // except that empty string always means that no help is associated with - // the window) for this window - virtual wxString GetHelp(const wxWindowBase *window) = 0; - - // do show help for the given window (uses window->GetHelpAtPoint() - // internally if applicable), return true if it was done or false - // if no help available for this window - virtual bool ShowHelpAtPoint(wxWindowBase *window, - const wxPoint& pt, - wxHelpEvent::Origin origin) - { - wxCHECK_MSG( window, false, _T("window must not be NULL") ); - - m_helptextAtPoint = pt; - m_helptextOrigin = origin; - - return ShowHelp(window); - } - - // show help for the given window, see ShowHelpAtPoint() above - virtual bool ShowHelp(wxWindowBase * WXUNUSED(window)) { return false; } - - // associate the text with the given window or id: although all help - // providers have these functions to allow making wxWindow::SetHelpText() - // work, not all of them implement them - virtual void AddHelp(wxWindowBase *window, const wxString& text); - - // this version associates the given text with all window with this id - // (may be used to set the same help string for all [Cancel] buttons in - // the application, for example) - virtual void AddHelp(wxWindowID id, const wxString& text); - - // removes the association - virtual void RemoveHelp(wxWindowBase* window); - - // virtual dtor for any base class - virtual ~wxHelpProvider(); - -protected: - wxHelpProvider() - : m_helptextAtPoint(wxDefaultPosition), - m_helptextOrigin(wxHelpEvent::Origin_Unknown) - { - } - - // helper method used by ShowHelp(): returns the help string to use by - // using m_helptextAtPoint/m_helptextOrigin if they're set or just GetHelp - // otherwise - wxString GetHelpTextMaybeAtPoint(wxWindowBase *window); - - - // parameters of the last ShowHelpAtPoint() call, used by ShowHelp() - wxPoint m_helptextAtPoint; - wxHelpEvent::Origin m_helptextOrigin; - -private: - static wxHelpProvider *ms_helpProvider; -}; - -WX_DECLARE_EXPORTED_HASH_MAP( wxUIntPtr, wxString, wxIntegerHash, - wxIntegerEqual, wxSimpleHelpProviderHashMap ); - -// wxSimpleHelpProvider is an implementation of wxHelpProvider which supports -// only plain text help strings and shows the string associated with the -// control (if any) in a tooltip -class WXDLLEXPORT wxSimpleHelpProvider : public wxHelpProvider -{ -public: - // implement wxHelpProvider methods - virtual wxString GetHelp(const wxWindowBase *window); - - // override ShowHelp() and not ShowHelpAtPoint() as explained above - virtual bool ShowHelp(wxWindowBase *window); - - virtual void AddHelp(wxWindowBase *window, const wxString& text); - virtual void AddHelp(wxWindowID id, const wxString& text); - virtual void RemoveHelp(wxWindowBase* window); - -protected: - // we use 2 hashes for storing the help strings associated with windows - // and the ids - wxSimpleHelpProviderHashMap m_hashWindows, - m_hashIds; -}; - -// wxHelpControllerHelpProvider is an implementation of wxHelpProvider which supports -// both context identifiers and plain text help strings. If the help text is an integer, -// it is passed to wxHelpController::DisplayContextPopup. Otherwise, it shows the string -// in a tooltip as per wxSimpleHelpProvider. -class WXDLLEXPORT wxHelpControllerHelpProvider : public wxSimpleHelpProvider -{ -public: - // Note that it doesn't own the help controller. The help controller - // should be deleted separately. - wxHelpControllerHelpProvider(wxHelpControllerBase* hc = (wxHelpControllerBase*) NULL); - - // implement wxHelpProvider methods - - // again (see above): this should be ShowHelpAtPoint() but we need to - // override ShowHelp() to avoid breaking existing code - virtual bool ShowHelp(wxWindowBase *window); - - // Other accessors - void SetHelpController(wxHelpControllerBase* hc) { m_helpController = hc; } - wxHelpControllerBase* GetHelpController() const { return m_helpController; } - -protected: - wxHelpControllerBase* m_helpController; - - DECLARE_NO_COPY_CLASS(wxHelpControllerHelpProvider) -}; - -// Convenience function for turning context id into wxString -WXDLLEXPORT wxString wxContextId(int id); - -#endif // wxUSE_HELP - -#endif // _WX_CSHELP_H_ - diff --git a/desmume/src/windows/wx/include/wx/ctrlsub.h b/desmume/src/windows/wx/include/wx/ctrlsub.h deleted file mode 100644 index 6697bb6b3..000000000 --- a/desmume/src/windows/wx/include/wx/ctrlsub.h +++ /dev/null @@ -1,210 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/ctrlsub.h (read: "wxConTRoL with SUBitems") -// Purpose: wxControlWithItems interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 22.10.99 -// RCS-ID: $Id: ctrlsub.h 42816 2006-10-31 08:50:17Z RD $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CTRLSUB_H_BASE_ -#define _WX_CTRLSUB_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_CONTROLS - -#include "wx/control.h" // base class - -// ---------------------------------------------------------------------------- -// wxItemContainer defines an interface which is implemented by all controls -// which have string subitems each of which may be selected. -// -// It is decomposed in wxItemContainerImmutable which omits all methods -// adding/removing items and is used by wxRadioBox and wxItemContainer itself. -// -// Examples: wxListBox, wxCheckListBox, wxChoice and wxComboBox (which -// implements an extended interface deriving from this one) -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxItemContainerImmutable -{ -public: - wxItemContainerImmutable() { } - virtual ~wxItemContainerImmutable(); - - // accessing strings - // ----------------- - - virtual unsigned int GetCount() const = 0; - bool IsEmpty() const { return GetCount() == 0; } - - virtual wxString GetString(unsigned int n) const = 0; - wxArrayString GetStrings() const; - virtual void SetString(unsigned int n, const wxString& s) = 0; - - // finding string natively is either case sensitive or insensitive - // but never both so fall back to this base version for not - // supported search type - virtual int FindString(const wxString& s, bool bCase = false) const - { - unsigned int count = GetCount(); - - for ( unsigned int i = 0; i < count ; ++i ) - { - if (GetString(i).IsSameAs( s , bCase )) - return (int)i; - } - - return wxNOT_FOUND; - } - - - // selection - // --------- - - virtual void SetSelection(int n) = 0; - virtual int GetSelection() const = 0; - - // set selection to the specified string, return false if not found - bool SetStringSelection(const wxString& s); - - // return the selected string or empty string if none - wxString GetStringSelection() const; - - // this is the same as SetSelection( for single-selection controls but - // reads better for multi-selection ones - void Select(int n) { SetSelection(n); } - - -protected: - - // check that the index is valid - inline bool IsValid(unsigned int n) const { return n < GetCount(); } - inline bool IsValidInsert(unsigned int n) const { return n <= GetCount(); } -}; - -class WXDLLEXPORT wxItemContainer : public wxItemContainerImmutable -{ -public: - wxItemContainer() { m_clientDataItemsType = wxClientData_None; } - virtual ~wxItemContainer(); - - // adding items - // ------------ - - int Append(const wxString& item) - { return DoAppend(item); } - int Append(const wxString& item, void *clientData) - { int n = DoAppend(item); SetClientData(n, clientData); return n; } - int Append(const wxString& item, wxClientData *clientData) - { int n = DoAppend(item); SetClientObject(n, clientData); return n; } - - // only for rtti needs (separate name) - void AppendString( const wxString& item) - { Append( item ); } - - // append several items at once to the control - void Append(const wxArrayString& strings); - - int Insert(const wxString& item, unsigned int pos) - { return DoInsert(item, pos); } - int Insert(const wxString& item, unsigned int pos, void *clientData); - int Insert(const wxString& item, unsigned int pos, wxClientData *clientData); - - // deleting items - // -------------- - - virtual void Clear() = 0; - virtual void Delete(unsigned int n) = 0; - - // misc - // ---- - - // client data stuff - void SetClientData(unsigned int n, void* clientData); - void* GetClientData(unsigned int n) const; - - void SetClientObject(unsigned int n, wxClientData* clientData); - wxClientData* GetClientObject(unsigned int n) const; - - bool HasClientObjectData() const - { return m_clientDataItemsType == wxClientData_Object; } - bool HasClientUntypedData() const - { return m_clientDataItemsType == wxClientData_Void; } - -protected: - virtual int DoAppend(const wxString& item) = 0; - virtual int DoInsert(const wxString& item, unsigned int pos) = 0; - - virtual void DoSetItemClientData(unsigned int n, void* clientData) = 0; - virtual void* DoGetItemClientData(unsigned int n) const = 0; - virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData) = 0; - virtual wxClientData* DoGetItemClientObject(unsigned int n) const = 0; - - - // the type of the client data for the items - 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); } - -class WXDLLEXPORT wxControlWithItems : public wxControl, public wxItemContainer -{ -public: - wxControlWithItems() { } - virtual ~wxControlWithItems(); - - // 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; } - -protected: - // fill in the client object or data field of the event as appropriate - // - // calls InitCommandEvent() and, if n != wxNOT_FOUND, also sets the per - // item client data - void InitCommandEventWithItems(wxCommandEvent& event, int n); - -private: - DECLARE_ABSTRACT_CLASS(wxControlWithItems) - DECLARE_NO_COPY_CLASS(wxControlWithItems) -}; - - -// ---------------------------------------------------------------------------- -// inline functions -// ---------------------------------------------------------------------------- - -#endif // wxUSE_CONTROLS - -#endif // _WX_CTRLSUB_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/cursor.h b/desmume/src/windows/wx/include/wx/cursor.h deleted file mode 100644 index 39b4e2194..000000000 --- a/desmume/src/windows/wx/include/wx/cursor.h +++ /dev/null @@ -1,79 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/cursor.h -// Purpose: wxCursor base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: cursor.h 40865 2006-08-27 09:42:42Z VS $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CURSOR_H_BASE_ -#define _WX_CURSOR_H_BASE_ - -#include "wx/defs.h" - -#if defined(__WXPALMOS__) - #include "wx/palmos/cursor.h" -#elif defined(__WXMSW__) - #include "wx/msw/cursor.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/cursor.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/cursor.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/cursor.h" -#elif defined(__WXX11__) - #include "wx/x11/cursor.h" -#elif defined(__WXMGL__) - #include "wx/mgl/cursor.h" -#elif defined(__WXDFB__) - #include "wx/dfb/cursor.h" -#elif defined(__WXMAC__) - #include "wx/mac/cursor.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/cursor.h" -#elif defined(__WXPM__) - #include "wx/os2/cursor.h" -#endif - -#include "wx/utils.h" - -/* This is a small class which can be used by all ports - to temporarily suspend the busy cursor. Useful in modal - dialogs. - - Actually that is not (any longer) quite true.. currently it is - only used in wxGTK Dialog::ShowModal() and now uses static - wxBusyCursor methods that are only implemented for wxGTK so far. - The BusyCursor handling code should probably be implemented in - common code somewhere instead of the separate implementations we - currently have. Also the name BusyCursorSuspender is a little - misleading since it doesn't actually suspend the BusyCursor, just - masks one that is already showing. - If another call to wxBeginBusyCursor is made while this is active - the Busy Cursor will again be shown. But at least now it doesn't - interfere with the state of wxIsBusy() -- RL - -*/ -class wxBusyCursorSuspender -{ -public: - wxBusyCursorSuspender() - { - if( wxIsBusy() ) - { - wxSetCursor( wxBusyCursor::GetStoredCursor() ); - } - } - ~wxBusyCursorSuspender() - { - if( wxIsBusy() ) - { - wxSetCursor( wxBusyCursor::GetBusyCursor() ); - } - } -}; -#endif - // _WX_CURSOR_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/dataobj.h b/desmume/src/windows/wx/include/wx/dataobj.h deleted file mode 100644 index 4c290dc34..000000000 --- a/desmume/src/windows/wx/include/wx/dataobj.h +++ /dev/null @@ -1,540 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/dataobj.h -// Purpose: common data object classes -// Author: Vadim Zeitlin, Robert Roebling -// Modified by: -// Created: 26.05.99 -// RCS-ID: $Id: dataobj.h 40772 2006-08-23 13:38:45Z VZ $ -// Copyright: (c) wxWidgets Team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DATAOBJ_H_BASE_ -#define _WX_DATAOBJ_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- -#include "wx/defs.h" - -#if wxUSE_DATAOBJ - -#include "wx/string.h" -#include "wx/bitmap.h" -#include "wx/list.h" -#include "wx/arrstr.h" - -// ============================================================================ -/* - Generic data transfer related classes. The class hierarchy is as follows: - - - wxDataObject- - / \ - / \ - wxDataObjectSimple wxDataObjectComposite - / | \ - / | \ - wxTextDataObject | wxBitmapDataObject - | - wxCustomDataObject - -*/ -// ============================================================================ - -// ---------------------------------------------------------------------------- -// wxDataFormat class is declared in platform-specific headers: it represents -// a format for data which may be either one of the standard ones (text, -// bitmap, ...) or a custom one which is then identified by a unique string. -// ---------------------------------------------------------------------------- - -/* the class interface looks like this (pseudo code): - -class wxDataFormat -{ -public: - typedef NativeFormat; - - wxDataFormat(NativeFormat format = wxDF_INVALID); - wxDataFormat(const wxChar *format); - - wxDataFormat& operator=(NativeFormat format); - wxDataFormat& operator=(const wxDataFormat& format); - - bool operator==(NativeFormat format) const; - bool operator!=(NativeFormat format) const; - - void SetType(NativeFormat format); - NativeFormat GetType() const; - - wxString GetId() const; - void SetId(const wxChar *format); -}; - -*/ - -#if defined(__WXMSW__) - #include "wx/msw/ole/dataform.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/dataform.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/dataform.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/dataform.h" -#elif defined(__WXX11__) - #include "wx/x11/dataform.h" -#elif defined(__WXMAC__) - #include "wx/mac/dataform.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/dataform.h" -#elif defined(__WXPM__) - #include "wx/os2/dataform.h" -#endif - -// the value for default argument to some functions (corresponds to -// wxDF_INVALID) -extern WXDLLEXPORT const wxDataFormat& wxFormatInvalid; - -// ---------------------------------------------------------------------------- -// wxDataObject represents a piece of data which knows which formats it -// supports and knows how to render itself in each of them - GetDataHere(), -// and how to restore data from the buffer (SetData()). -// -// Although this class may be used directly (i.e. custom classes may be -// derived from it), in many cases it might be simpler to use either -// wxDataObjectSimple or wxDataObjectComposite classes. -// -// A data object may be "read only", i.e. support only GetData() functions or -// "read-write", i.e. support both GetData() and SetData() (in principle, it -// might be "write only" too, but this is rare). Moreover, it doesn't have to -// support the same formats in Get() and Set() directions: for example, a data -// object containing JPEG image might accept BMPs in GetData() because JPEG -// image may be easily transformed into BMP but not in SetData(). Accordingly, -// all methods dealing with formats take an additional "direction" argument -// which is either SET or GET and which tells the function if the format needs -// to be supported by SetData() or GetDataHere(). -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDataObjectBase -{ -public: - enum Direction - { - Get = 0x01, // format is supported by GetDataHere() - Set = 0x02, // format is supported by SetData() - Both = 0x03 // format is supported by both (unused currently) - }; - - // this class is polymorphic, hence it needs a virtual dtor - virtual ~wxDataObjectBase(); - - // get the best suited format for rendering our data - virtual wxDataFormat GetPreferredFormat(Direction dir = Get) const = 0; - - // get the number of formats we support - virtual size_t GetFormatCount(Direction dir = Get) const = 0; - - // return all formats in the provided array (of size GetFormatCount()) - virtual void GetAllFormats(wxDataFormat *formats, - Direction dir = Get) const = 0; - - // get the (total) size of data for the given format - virtual size_t GetDataSize(const wxDataFormat& format) const = 0; - - // copy raw data (in the specified format) to the provided buffer, return - // true if data copied successfully, false otherwise - virtual bool GetDataHere(const wxDataFormat& format, void *buf) const = 0; - - // get data from the buffer of specified length (in the given format), - // return true if the data was read successfully, false otherwise - virtual bool SetData(const wxDataFormat& WXUNUSED(format), - size_t WXUNUSED(len), const void * WXUNUSED(buf)) - { - return false; - } - - // returns true if this format is supported - bool IsSupported(const wxDataFormat& format, Direction dir = Get) const; -}; - -// ---------------------------------------------------------------------------- -// include the platform-specific declarations of wxDataObject -// ---------------------------------------------------------------------------- - -#if defined(__WXMSW__) - #include "wx/msw/ole/dataobj.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/dataobj.h" -#elif defined(__WXX11__) - #include "wx/x11/dataobj.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/dataobj.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/dataobj.h" -#elif defined(__WXMAC__) - #include "wx/mac/dataobj.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/dataobj.h" -#elif defined(__WXPM__) - #include "wx/os2/dataobj.h" -#endif - -// ---------------------------------------------------------------------------- -// wxDataObjectSimple is a wxDataObject which only supports one format (in -// both Get and Set directions, but you may return false from GetDataHere() or -// SetData() if one of them is not supported). This is the simplest possible -// wxDataObject implementation. -// -// This is still an "abstract base class" (although it doesn't have any pure -// virtual functions), to use it you should derive from it and implement -// GetDataSize(), GetDataHere() and SetData() functions because the base class -// versions don't do anything - they just return "not implemented". -// -// This class should be used when you provide data in only one format (no -// conversion to/from other formats), either a standard or a custom one. -// Otherwise, you should use wxDataObjectComposite or wxDataObject directly. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDataObjectSimple : public wxDataObject -{ -public: - // ctor takes the format we support, but it can also be set later with - // SetFormat() - wxDataObjectSimple(const wxDataFormat& format = wxFormatInvalid) - : m_format(format) - { - } - - // get/set the format we support - const wxDataFormat& GetFormat() const { return m_format; } - void SetFormat(const wxDataFormat& format) { m_format = format; } - - // virtual functions to override in derived class (the base class versions - // just return "not implemented") - // ----------------------------------------------------------------------- - - // get the size of our data - virtual size_t GetDataSize() const - { return 0; } - - // copy our data to the buffer - virtual bool GetDataHere(void *WXUNUSED(buf)) const - { return false; } - - // copy data from buffer to our data - virtual bool SetData(size_t WXUNUSED(len), const void *WXUNUSED(buf)) - { return false; } - - // implement base class pure virtuals - // ---------------------------------- - virtual wxDataFormat GetPreferredFormat(wxDataObjectBase::Direction WXUNUSED(dir) = Get) const - { return m_format; } - virtual size_t GetFormatCount(wxDataObjectBase::Direction WXUNUSED(dir) = Get) const - { return 1; } - virtual void GetAllFormats(wxDataFormat *formats, - wxDataObjectBase::Direction WXUNUSED(dir) = Get) const - { *formats = m_format; } - virtual size_t GetDataSize(const wxDataFormat& WXUNUSED(format)) const - { return GetDataSize(); } - virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format), - void *buf) const - { return GetDataHere(buf); } - virtual bool SetData(const wxDataFormat& WXUNUSED(format), - size_t len, const void *buf) - { return SetData(len, buf); } - -private: - // the one and only format we support - wxDataFormat m_format; - - DECLARE_NO_COPY_CLASS(wxDataObjectSimple) -}; - -// ---------------------------------------------------------------------------- -// wxDataObjectComposite is the simplest way to implement wxDataObject -// supporting multiple formats. It contains several wxDataObjectSimple and -// supports all formats supported by any of them. -// -// This class shouldn't be (normally) derived from, but may be used directly. -// If you need more flexibility than what it provides, you should probably use -// wxDataObject directly. -// ---------------------------------------------------------------------------- - -WX_DECLARE_EXPORTED_LIST(wxDataObjectSimple, wxSimpleDataObjectList); - -class WXDLLEXPORT wxDataObjectComposite : public wxDataObject -{ -public: - // ctor - wxDataObjectComposite(); - virtual ~wxDataObjectComposite(); - - // add data object (it will be deleted by wxDataObjectComposite, hence it - // must be allocated on the heap) whose format will become the preferred - // one if preferred == true - void Add(wxDataObjectSimple *dataObject, bool preferred = false); - - // Report the format passed to the SetData method. This should be the - // format of the data object within the composite that recieved data from - // the clipboard or the DnD operation. You can use this method to find - // out what kind of data object was recieved. - wxDataFormat GetReceivedFormat() const; - - // implement base class pure virtuals - // ---------------------------------- - virtual wxDataFormat GetPreferredFormat(wxDataObjectBase::Direction dir = Get) const; - virtual size_t GetFormatCount(wxDataObjectBase::Direction dir = Get) const; - virtual void GetAllFormats(wxDataFormat *formats, wxDataObjectBase::Direction dir = Get) const; - virtual size_t GetDataSize(const wxDataFormat& format) const; - virtual bool GetDataHere(const wxDataFormat& format, void *buf) const; - virtual bool SetData(const wxDataFormat& format, size_t len, const void *buf); -#if defined(__WXMSW__) - virtual const void* GetSizeFromBuffer( const void* buffer, size_t* size, - const wxDataFormat& format ); - virtual void* SetSizeInBuffer( void* buffer, size_t size, - const wxDataFormat& format ); - virtual size_t GetBufferOffset( const wxDataFormat& format ); -#endif - -protected: - // returns the pointer to the object which supports this format or NULL - wxDataObjectSimple *GetObject(const wxDataFormat& format) const; - -private: - // the list of all (simple) data objects whose formats we support - wxSimpleDataObjectList m_dataObjects; - - // the index of the preferred one (0 initially, so by default the first - // one is the preferred) - size_t m_preferred; - - wxDataFormat m_receivedFormat; - - DECLARE_NO_COPY_CLASS(wxDataObjectComposite) -}; - -// ============================================================================ -// Standard implementations of wxDataObjectSimple which can be used directly -// (i.e. without having to derive from them) for standard data type transfers. -// -// Note that although all of them can work with provided data, you can also -// override their virtual GetXXX() functions to only provide data on demand. -// ============================================================================ - -// ---------------------------------------------------------------------------- -// wxTextDataObject contains text data -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTextDataObject : public wxDataObjectSimple -{ -public: - // ctor: you can specify the text here or in SetText(), or override - // GetText() - wxTextDataObject(const wxString& text = wxEmptyString) - : wxDataObjectSimple( -#if wxUSE_UNICODE - wxDF_UNICODETEXT -#else - wxDF_TEXT -#endif - ), - m_text(text) - { - } - - // virtual functions which you may override if you want to provide text on - // demand only - otherwise, the trivial default versions will be used - virtual size_t GetTextLength() const { return m_text.Len() + 1; } - virtual wxString GetText() const { return m_text; } - virtual void SetText(const wxString& text) { m_text = text; } - - // implement base class pure virtuals - // ---------------------------------- - - // some platforms have 2 and not 1 format for text data -#if wxUSE_UNICODE && (defined(__WXGTK20__) || defined(__WXMAC__)) - virtual size_t GetFormatCount(Direction WXUNUSED(dir) = Get) const { return 2; } - virtual void GetAllFormats(wxDataFormat *formats, - wxDataObjectBase::Direction WXUNUSED(dir) = Get) const; - - virtual size_t GetDataSize() const { return GetDataSize(GetPreferredFormat()); } - virtual bool GetDataHere(void *buf) const { return GetDataHere(GetPreferredFormat(), buf); } - virtual bool SetData(size_t len, const void *buf) { return SetData(GetPreferredFormat(), len, buf); } - - size_t GetDataSize(const wxDataFormat& format) const; - bool GetDataHere(const wxDataFormat& format, void *pBuf) const; - bool SetData(const wxDataFormat& format, size_t nLen, const void* pBuf); -#else - virtual size_t GetDataSize() const; - virtual bool GetDataHere(void *buf) const; - virtual bool SetData(size_t len, const void *buf); - // Must provide overloads to avoid hiding them (and warnings about it) - virtual size_t GetDataSize(const wxDataFormat&) const - { - return GetDataSize(); - } - virtual bool GetDataHere(const wxDataFormat&, void *buf) const - { - return GetDataHere(buf); - } - virtual bool SetData(const wxDataFormat&, size_t len, const void *buf) - { - return SetData(len, buf); - } -#endif - -private: - wxString m_text; - - DECLARE_NO_COPY_CLASS(wxTextDataObject) -}; - -// ---------------------------------------------------------------------------- -// wxBitmapDataObject contains a bitmap -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxBitmapDataObjectBase : public wxDataObjectSimple -{ -public: - // ctor: you can specify the bitmap here or in SetBitmap(), or override - // GetBitmap() - wxBitmapDataObjectBase(const wxBitmap& bitmap = wxNullBitmap) - : wxDataObjectSimple(wxDF_BITMAP), m_bitmap(bitmap) - { - } - - // virtual functions which you may override if you want to provide data on - // demand only - otherwise, the trivial default versions will be used - virtual wxBitmap GetBitmap() const { return m_bitmap; } - virtual void SetBitmap(const wxBitmap& bitmap) { m_bitmap = bitmap; } - -protected: - wxBitmap m_bitmap; - - DECLARE_NO_COPY_CLASS(wxBitmapDataObjectBase) -}; - -// ---------------------------------------------------------------------------- -// wxFileDataObject contains a list of filenames -// -// NB: notice that this is a "write only" object, it can only be filled with -// data from drag and drop operation. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFileDataObjectBase : public wxDataObjectSimple -{ -public: - // ctor: use AddFile() later to fill the array - wxFileDataObjectBase() : wxDataObjectSimple(wxDF_FILENAME) { } - - // get a reference to our array - const wxArrayString& GetFilenames() const { return m_filenames; } - -protected: - wxArrayString m_filenames; - - DECLARE_NO_COPY_CLASS(wxFileDataObjectBase) -}; - -// ---------------------------------------------------------------------------- -// wxCustomDataObject contains arbitrary untyped user data. -// -// It is understood that this data can be copied bitwise. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxCustomDataObject : public wxDataObjectSimple -{ -public: - // if you don't specify the format in the ctor, you can still use - // SetFormat() later - wxCustomDataObject(const wxDataFormat& format = wxFormatInvalid); - - // the dtor calls Free() - virtual ~wxCustomDataObject(); - - // you can call SetData() to set m_data: it will make a copy of the data - // you pass - or you can use TakeData() which won't copy anything, but - // will take ownership of data (i.e. will call Free() on it later) - void TakeData(size_t size, void *data); - - // this function is called to allocate "size" bytes of memory from - // SetData(). The default version uses operator new[]. - virtual void *Alloc(size_t size); - - // this function is called when the data is freed, you may override it to - // anything you want (or may be nothing at all). The default version calls - // operator delete[] on m_data - virtual void Free(); - - // get data: you may override these functions if you wish to provide data - // only when it's requested - virtual size_t GetSize() const { return m_size; } - virtual void *GetData() const { return m_data; } - - // implement base class pure virtuals - // ---------------------------------- - virtual size_t GetDataSize() const; - virtual bool GetDataHere(void *buf) const; - virtual bool SetData(size_t size, const void *buf); - // Must provide overloads to avoid hiding them (and warnings about it) - virtual size_t GetDataSize(const wxDataFormat&) const - { - return GetDataSize(); - } - virtual bool GetDataHere(const wxDataFormat&, void *buf) const - { - return GetDataHere(buf); - } - virtual bool SetData(const wxDataFormat&, size_t len, const void *buf) - { - return SetData(len, buf); - } - -private: - size_t m_size; - void *m_data; - - DECLARE_NO_COPY_CLASS(wxCustomDataObject) -}; - -// ---------------------------------------------------------------------------- -// include platform-specific declarations of wxXXXBase classes -// ---------------------------------------------------------------------------- - -#if defined(__WXMSW__) - #include "wx/msw/ole/dataobj2.h" - - // wxURLDataObject defined in msw/ole/dataobj2.h -#else // !__WXMSW__ - #if defined(__WXGTK20__) - #include "wx/gtk/dataobj2.h" - #elif defined(__WXGTK__) - #include "wx/gtk1/dataobj2.h" - #elif defined(__WXX11__) - #include "wx/x11/dataobj2.h" - #elif defined(__WXMOTIF__) - #include "wx/motif/dataobj2.h" - #elif defined(__WXMAC__) - #include "wx/mac/dataobj2.h" - #elif defined(__WXCOCOA__) - #include "wx/cocoa/dataobj2.h" - #elif defined(__WXPM__) - #include "wx/os2/dataobj2.h" - #endif - - // wxURLDataObject is simply wxTextDataObject with a different name - class WXDLLEXPORT wxURLDataObject : public wxTextDataObject - { - public: - wxURLDataObject(const wxString& url = wxEmptyString) - : wxTextDataObject(url) - { - } - - wxString GetURL() const { return GetText(); } - void SetURL(const wxString& url) { SetText(url); } - }; -#endif // __WXMSW__/!__WXMSW__ - -#endif // wxUSE_DATAOBJ - -#endif // _WX_DATAOBJ_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/dataview.h b/desmume/src/windows/wx/include/wx/dataview.h deleted file mode 100644 index 249eff71d..000000000 --- a/desmume/src/windows/wx/include/wx/dataview.h +++ /dev/null @@ -1,462 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dataview.h -// Purpose: wxDataViewCtrl base classes -// Author: Robert Roebling -// Modified by: -// Created: 08.01.06 -// RCS-ID: $Id: dataview.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DATAVIEW_H_BASE_ -#define _WX_DATAVIEW_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_DATAVIEWCTRL - -#include "wx/control.h" -#include "wx/textctrl.h" -#include "wx/bitmap.h" -#include "wx/variant.h" - - -#if defined(__WXGTK20__) - // for testing - // #define wxUSE_GENERICDATAVIEWCTRL 1 -#elif defined(__WXMAC__) - #define wxUSE_GENERICDATAVIEWCTRL 1 -#else - #define wxUSE_GENERICDATAVIEWCTRL 1 -#endif - -// ---------------------------------------------------------------------------- -// wxDataViewCtrl flags -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// wxDataViewCtrl globals -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_ADV wxDataViewModel; -class WXDLLIMPEXP_FWD_ADV wxDataViewListModel; -class WXDLLIMPEXP_FWD_ADV wxDataViewCtrl; -class WXDLLIMPEXP_FWD_ADV wxDataViewColumn; -class WXDLLIMPEXP_FWD_ADV wxDataViewRenderer; - -extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxDataViewCtrlNameStr[]; - -// --------------------------------------------------------- -// wxDataViewModel -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewModel: public wxObject -{ -public: - wxDataViewModel() { } - virtual ~wxDataViewModel() { } - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewModel) -}; - -// --------------------------------------------------------- -// wxDataViewListModelNotifier -// --------------------------------------------------------- - - -class WXDLLIMPEXP_ADV wxDataViewListModelNotifier: public wxObject -{ -public: - wxDataViewListModelNotifier() { } - virtual ~wxDataViewListModelNotifier() { } - - virtual bool RowAppended() = 0; - virtual bool RowPrepended() = 0; - virtual bool RowInserted( unsigned int before ) = 0; - virtual bool RowDeleted( unsigned int row ) = 0; - virtual bool RowChanged( unsigned int row ) = 0; - virtual bool ValueChanged( unsigned int col, unsigned int row ) = 0; - virtual bool RowsReordered( unsigned int *new_order ) = 0; - virtual bool Cleared() = 0; - - void SetOwner( wxDataViewListModel *owner ) { m_owner = owner; } - wxDataViewListModel *GetOwner() { return m_owner; } - -private: - wxDataViewListModel *m_owner; -}; - -// --------------------------------------------------------- -// wxDataViewListModel -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewViewingColumn: public wxObject -{ -public: - wxDataViewViewingColumn( wxDataViewColumn *view_column, unsigned int model_column ) - { - m_viewColumn = view_column; - m_modelColumn = model_column; - } - - wxDataViewColumn *m_viewColumn; - unsigned int m_modelColumn; -}; - -class WXDLLIMPEXP_ADV wxDataViewListModel: public wxDataViewModel -{ -public: - wxDataViewListModel(); - virtual ~wxDataViewListModel(); - - virtual unsigned int GetNumberOfRows() = 0; - virtual unsigned int GetNumberOfCols() = 0; - // return type as reported by wxVariant - virtual wxString GetColType( unsigned int col ) = 0; - // get value into a wxVariant - virtual void GetValue( wxVariant &variant, unsigned int col, unsigned int row ) = 0; - // set value, call ValueChanged() afterwards! - virtual bool SetValue( wxVariant &variant, unsigned int col, unsigned int row ) = 0; - - // delegated notifiers - virtual bool RowAppended(); - virtual bool RowPrepended(); - virtual bool RowInserted( unsigned int before ); - virtual bool RowDeleted( unsigned int row ); - virtual bool RowChanged( unsigned int row ); - virtual bool ValueChanged( unsigned int col, unsigned int row ); - virtual bool RowsReordered( unsigned int *new_order ); - virtual bool Cleared(); - - // Used internally - void AddViewingColumn( wxDataViewColumn *view_column, unsigned int model_column ); - void RemoveViewingColumn( wxDataViewColumn *column ); - - void AddNotifier( wxDataViewListModelNotifier *notifier ); - void RemoveNotifier( wxDataViewListModelNotifier *notifier ); - - wxList m_notifiers; - wxList m_viewingColumns; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewListModel) -}; - -// --------------------------------------------------------- -// wxDataViewSortedListModel -// --------------------------------------------------------- - -typedef int (wxCALLBACK *wxDataViewListModelCompare) - (unsigned int row1, unsigned int row2, unsigned int col, wxDataViewListModel* model ); - -WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_SIZE_T(unsigned int, wxDataViewSortedIndexArray, WXDLLIMPEXP_ADV); - -class WXDLLIMPEXP_ADV wxDataViewSortedListModel: public wxDataViewListModel -{ -public: - wxDataViewSortedListModel( wxDataViewListModel *child ); - virtual ~wxDataViewSortedListModel(); - - void SetAscending( bool ascending ) { m_ascending = ascending; } - bool GetAscending() { return m_ascending; } - - virtual unsigned int GetNumberOfRows(); - virtual unsigned int GetNumberOfCols(); - // return type as reported by wxVariant - virtual wxString GetColType( unsigned int col ); - // get value into a wxVariant - virtual void GetValue( wxVariant &variant, unsigned int col, unsigned int row ); - // set value, call ValueChanged() afterwards! - virtual bool SetValue( wxVariant &variant, unsigned int col, unsigned int row ); - - // called from user - virtual bool RowAppended(); - virtual bool RowPrepended(); - virtual bool RowInserted( unsigned int before ); - virtual bool RowDeleted( unsigned int row ); - virtual bool RowChanged( unsigned int row ); - virtual bool ValueChanged( unsigned int col, unsigned int row ); - virtual bool RowsReordered( unsigned int *new_order ); - virtual bool Cleared(); - - // called if child's notifiers are called - bool ChildRowAppended(); - bool ChildRowPrepended(); - bool ChildRowInserted( unsigned int before ); - bool ChildRowDeleted( unsigned int row ); - bool ChildRowChanged( unsigned int row ); - bool ChildValueChanged( unsigned int col, unsigned int row ); - bool ChildRowsReordered( unsigned int *new_order ); - bool ChildCleared(); - - virtual void Resort(); - -private: - bool m_ascending; - wxDataViewListModel *m_child; - wxDataViewSortedIndexArray m_array; - wxDataViewListModelNotifier *m_notifierOnChild; - - void InitStatics(); // BAD - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewSortedListModel) -}; - -// --------------------------------------------------------- -// wxDataViewRendererBase -// --------------------------------------------------------- - -enum wxDataViewCellMode -{ - wxDATAVIEW_CELL_INERT, - wxDATAVIEW_CELL_ACTIVATABLE, - wxDATAVIEW_CELL_EDITABLE -}; - -enum wxDataViewCellRenderState -{ - wxDATAVIEW_CELL_SELECTED = 1, - wxDATAVIEW_CELL_PRELIT = 2, - wxDATAVIEW_CELL_INSENSITIVE = 4, - wxDATAVIEW_CELL_FOCUSED = 8 -}; - -class WXDLLIMPEXP_ADV wxDataViewRendererBase: public wxObject -{ -public: - wxDataViewRendererBase( const wxString &varianttype, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); - - virtual bool SetValue( const wxVariant& WXUNUSED(value) ) { return true; } - virtual bool GetValue( wxVariant& WXUNUSED(value) ) { return true; } - virtual bool Validate( wxVariant& WXUNUSED(value) ) { return true; } - - wxString GetVariantType() { return m_variantType; } - wxDataViewCellMode GetMode() { return m_mode; } - - void SetOwner( wxDataViewColumn *owner ) { m_owner = owner; } - wxDataViewColumn* GetOwner() { return m_owner; } - -protected: - wxDataViewCellMode m_mode; - wxString m_variantType; - wxDataViewColumn *m_owner; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRendererBase) -}; - -// --------------------------------------------------------- -// wxDataViewColumnBase -// --------------------------------------------------------- - -enum wxDataViewColumnFlags -{ - wxDATAVIEW_COL_RESIZABLE = 1, - wxDATAVIEW_COL_SORTABLE = 2, - wxDATAVIEW_COL_HIDDEN = 4 -}; - -class WXDLLIMPEXP_ADV wxDataViewColumnBase: public wxObject -{ -public: - wxDataViewColumnBase( const wxString &title, wxDataViewRenderer *renderer, unsigned int model_column, - int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE ); - wxDataViewColumnBase( const wxBitmap &bitmap, wxDataViewRenderer *renderer, unsigned int model_column, - int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE ); - virtual ~wxDataViewColumnBase(); - - virtual void SetTitle( const wxString &title ); - virtual wxString GetTitle(); - - virtual void SetBitmap( const wxBitmap &bitmap ); - virtual const wxBitmap &GetBitmap(); - - virtual void SetAlignment( wxAlignment align ) = 0; - - virtual void SetSortable( bool sortable ) = 0; - virtual bool GetSortable() = 0; - virtual void SetSortOrder( bool ascending ) = 0; - virtual bool IsSortOrderAscending() = 0; - - wxDataViewRenderer* GetRenderer() { return m_renderer; } - - unsigned int GetModelColumn() { return m_model_column; } - - virtual void SetOwner( wxDataViewCtrl *owner ) { m_owner = owner; } - wxDataViewCtrl *GetOwner() { return m_owner; } - - virtual int GetWidth() = 0; - -private: - wxDataViewCtrl *m_ctrl; - wxDataViewRenderer *m_renderer; - int m_model_column; - int m_flags; - wxString m_title; - wxBitmap m_bitmap; - wxDataViewCtrl *m_owner; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumnBase) -}; - -// --------------------------------------------------------- -// wxDataViewCtrlBase -// --------------------------------------------------------- - -#define wxDV_SINGLE 0x0000 // for convenience -#define wxDV_MULTIPLE 0x0020 // can select multiple items - -class WXDLLIMPEXP_ADV wxDataViewCtrlBase: public wxControl -{ -public: - wxDataViewCtrlBase(); - virtual ~wxDataViewCtrlBase(); - - virtual bool AssociateModel( wxDataViewListModel *model ); - wxDataViewListModel* GetModel(); - - // short cuts - bool AppendTextColumn( const wxString &label, unsigned int model_column, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1 ); - bool AppendToggleColumn( const wxString &label, unsigned int model_column, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = 30 ); - bool AppendProgressColumn( const wxString &label, unsigned int model_column, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = 80 ); - bool AppendDateColumn( const wxString &label, unsigned int model_column, - wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1 ); - bool AppendBitmapColumn( const wxString &label, unsigned int model_column, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1 ); - bool AppendTextColumn( const wxBitmap &label, unsigned int model_column, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1 ); - bool AppendToggleColumn( const wxBitmap &label, unsigned int model_column, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = 30 ); - bool AppendProgressColumn( const wxBitmap &label, unsigned int model_column, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = 80 ); - bool AppendDateColumn( const wxBitmap &label, unsigned int model_column, - wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE, int width = -1 ); - bool AppendBitmapColumn( const wxBitmap &label, unsigned int model_column, - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, int width = -1 ); - - virtual bool AppendColumn( wxDataViewColumn *col ); - virtual unsigned int GetNumberOfColumns(); - virtual bool DeleteColumn( unsigned int pos ); - virtual bool ClearColumns(); - virtual wxDataViewColumn* GetColumn( unsigned int pos ); - - virtual void SetSelection( int row ) = 0; // -1 for unselect - inline void ClearSelection() { SetSelection( -1 ); } - virtual void Unselect( unsigned int row ) = 0; - virtual void SetSelectionRange( unsigned int from, unsigned int to ) = 0; - virtual void SetSelections( const wxArrayInt& aSelections) = 0; - - virtual bool IsSelected( unsigned int row ) const = 0; - virtual int GetSelection() const = 0; - virtual int GetSelections(wxArrayInt& aSelections) const = 0; - -private: - wxDataViewListModel *m_model; - wxList m_cols; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCtrlBase) -}; - - -// ---------------------------------------------------------------------------- -// wxDataViewEvent - the event class for the wxDataViewCtrl notifications -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewEvent : public wxNotifyEvent -{ -public: - wxDataViewEvent(wxEventType commandType = wxEVT_NULL, int winid = 0) - : wxNotifyEvent(commandType, winid), - m_col(-1), - m_row(-1), - m_model(NULL), - m_value(wxNullVariant), - m_editCancelled(false), - m_column(NULL) - { } - - wxDataViewEvent(const wxDataViewEvent& event) - : wxNotifyEvent(event), - m_col(event.m_col), - m_row(event.m_col), - m_model(event.m_model), - m_value(event.m_value), - m_editCancelled(event.m_editCancelled), - m_column(event.m_column) - { } - - int GetColumn() const { return m_col; } - void SetColumn( int col ) { m_col = col; } - int GetRow() const { return m_row; } - void SetRow( int row ) { m_row = row; } - wxDataViewModel* GetModel() const { return m_model; } - void SetModel( wxDataViewModel *model ) { m_model = model; } - const wxVariant &GetValue() const { return m_value; } - void SetValue( const wxVariant &value ) { m_value = value; } - - // for wxEVT_DATAVIEW_COLUMN_HEADER_CLICKED only - void SetDataViewColumn( wxDataViewColumn *col ) { m_column = col; } - wxDataViewColumn *GetDataViewColumn() { return m_column; } - - // was label editing canceled? (for wxEVT_COMMAND_DATVIEW_END_LABEL_EDIT only) - bool IsEditCancelled() const { return m_editCancelled; } - void SetEditCanceled(bool editCancelled) { m_editCancelled = editCancelled; } - - virtual wxEvent *Clone() const { return new wxDataViewEvent(*this); } - -protected: - int m_col; - int m_row; - wxDataViewModel *m_model; - wxVariant m_value; - bool m_editCancelled; - wxDataViewColumn *m_column; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDataViewEvent) -}; - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ROW_SELECTED, -1) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ROW_ACTIVATED, -1) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, -1) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, -1) -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); - -#define wxDataViewEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxDataViewEventFunction, &func) - -#define wx__DECLARE_DATAVIEWEVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_DATAVIEW_ ## evt, id, wxDataViewEventHandler(fn)) - -#define EVT_DATAVIEW_ROW_SELECTED(id, fn) wx__DECLARE_DATAVIEWEVT(ROW_SELECTED, id, fn) -#define EVT_DATAVIEW_ROW_ACTIVATED(id, fn) wx__DECLARE_DATAVIEWEVT(ROW_ACTIVATED, id, fn) -#define EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_CLICK, id, fn) -#define EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_RIGHT_CLICK, id, fn) - - -#if defined(wxUSE_GENERICDATAVIEWCTRL) - #include "wx/generic/dataview.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/dataview.h" -#elif defined(__WXMAC__) - // TODO - // #include "wx/mac/dataview.h" -#else - #include "wx/generic/dataview.h" -#endif - -#endif // wxUSE_DATAVIEWCTRL - -#endif - // _WX_DATAVIEW_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/datectrl.h b/desmume/src/windows/wx/include/wx/datectrl.h deleted file mode 100644 index 0da12775b..000000000 --- a/desmume/src/windows/wx/include/wx/datectrl.h +++ /dev/null @@ -1,112 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/datectrl.h -// Purpose: implements wxDatePickerCtrl -// Author: Vadim Zeitlin -// Modified by: -// Created: 2005-01-09 -// RCS-ID: $Id: datectrl.h 37663 2006-02-21 22:14:31Z MR $ -// Copyright: (c) 2005 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DATECTRL_H_ -#define _WX_DATECTRL_H_ - -#include "wx/defs.h" - -#if wxUSE_DATEPICKCTRL - -#include "wx/control.h" // the base class -#include "wx/datetime.h" - -#define wxDatePickerCtrlNameStr _T("datectrl") - -// wxDatePickerCtrl styles -enum -{ - // default style on this platform, either wxDP_SPIN or wxDP_DROPDOWN - wxDP_DEFAULT = 0, - - // a spin control-like date picker (not supported in generic version) - wxDP_SPIN = 1, - - // a combobox-like date picker (not supported in mac version) - wxDP_DROPDOWN = 2, - - // always show century in the default date display (otherwise it depends on - // the system date format which may include the century or not) - wxDP_SHOWCENTURY = 4, - - // allow not having any valid date in the control (by default it always has - // some date, today initially if no valid date specified in ctor) - wxDP_ALLOWNONE = 8 -}; - -// ---------------------------------------------------------------------------- -// wxDatePickerCtrl: allow the user to enter the date -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDatePickerCtrlBase : public wxControl -{ -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 = wxDP_DEFAULT | wxDP_SHOWCENTURY, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxDatePickerCtrlNameStr); - */ - - // set/get the date - virtual void SetValue(const wxDateTime& dt) = 0; - virtual wxDateTime GetValue() const = 0; - - // 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" - - #define wxHAS_NATIVE_DATEPICKCTRL -#elif defined(__WXMSW__) && !defined(__WXUNIVERSAL__) - #include "wx/msw/datectrl.h" - - #define wxHAS_NATIVE_DATEPICKCTRL -#else - #include "wx/generic/datectrl.h" - - class WXDLLIMPEXP_ADV wxDatePickerCtrl : public wxDatePickerCtrlGeneric - { - public: - wxDatePickerCtrl() { } - wxDatePickerCtrl(wxWindow *parent, - wxWindowID id, - const wxDateTime& date = wxDefaultDateTime, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDP_DEFAULT | wxDP_SHOWCENTURY, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxDatePickerCtrlNameStr) - : wxDatePickerCtrlGeneric(parent, id, date, pos, size, style, validator, name) - { - } - - private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDatePickerCtrl) - }; -#endif - -#endif // wxUSE_DATEPICKCTRL - -#endif // _WX_DATECTRL_H_ - diff --git a/desmume/src/windows/wx/include/wx/dateevt.h b/desmume/src/windows/wx/include/wx/dateevt.h deleted file mode 100644 index ba6295440..000000000 --- a/desmume/src/windows/wx/include/wx/dateevt.h +++ /dev/null @@ -1,69 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/dateevt.h -// Purpose: declares wxDateEvent class -// Author: Vadim Zeitlin -// Modified by: -// Created: 2005-01-10 -// RCS-ID: $Id: dateevt.h 39637 2006-06-08 18:27:44Z RD $ -// Copyright: (c) 2005 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DATEEVT_H_ -#define _WX_DATEEVT_H_ - -#include "wx/event.h" -#include "wx/datetime.h" -#include "wx/window.h" - -// ---------------------------------------------------------------------------- -// wxDateEvent: used by wxCalendarCtrl and wxDatePickerCtrl -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDateEvent : public wxCommandEvent -{ -public: - wxDateEvent() { } - wxDateEvent(wxWindow *win, const wxDateTime& dt, wxEventType type) - : wxCommandEvent(type, win->GetId()), - m_date(dt) - { - SetEventObject(win); - } - - const wxDateTime& GetDate() const { return m_date; } - void SetDate(const wxDateTime &date) { m_date = date; } - - // default copy ctor, assignment operator and dtor are ok - virtual wxEvent *Clone() const { return new wxDateEvent(*this); } - -private: - wxDateTime m_date; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDateEvent) -}; - -// ---------------------------------------------------------------------------- -// event types and macros for handling them -// ---------------------------------------------------------------------------- - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_DATE_CHANGED, 1101) -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxDateEventFunction)(wxDateEvent&); - -#define wxDateEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxDateEventFunction, &func) - -#define EVT_DATE_CHANGED(id, fn) \ - wx__DECLARE_EVT1(wxEVT_DATE_CHANGED, id, wxDateEventHandler(fn)) - -#ifdef _WX_DEFINE_DATE_EVENTS_ - DEFINE_EVENT_TYPE(wxEVT_DATE_CHANGED) - - IMPLEMENT_DYNAMIC_CLASS(wxDateEvent, wxCommandEvent) -#endif - -#endif // _WX_DATEEVT_H_ - diff --git a/desmume/src/windows/wx/include/wx/datetime.h b/desmume/src/windows/wx/include/wx/datetime.h deleted file mode 100644 index e74dde1c7..000000000 --- a/desmume/src/windows/wx/include/wx/datetime.h +++ /dev/null @@ -1,2137 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/datetime.h -// Purpose: declarations of time/date related classes (wxDateTime, -// wxTimeSpan) -// Author: Vadim Zeitlin -// Modified by: -// Created: 10.02.99 -// RCS-ID: $Id: datetime.h 57502 2008-12-22 19:52:20Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DATETIME_H -#define _WX_DATETIME_H - -#include "wx/defs.h" - -#if wxUSE_DATETIME - -#ifndef __WXWINCE__ -#include -#else -#include "wx/msw/wince/time.h" -#endif - -#include // for INT_MIN - -#include "wx/longlong.h" - -class WXDLLIMPEXP_FWD_BASE wxDateTime; -class WXDLLIMPEXP_FWD_BASE wxTimeSpan; -class WXDLLIMPEXP_FWD_BASE wxDateSpan; - -#include "wx/dynarray.h" - -// not all c-runtimes are based on 1/1/1970 being (time_t) 0 -// set this to the corresponding value in seconds 1/1/1970 has on your -// systems c-runtime - -#if defined(__WXMAC__) && !defined(__DARWIN__) && __MSL__ < 0x6000 - #define WX_TIME_BASE_OFFSET ( 2082844800L + 126144000L ) -#else - #define WX_TIME_BASE_OFFSET 0 -#endif -/* - * TODO - * - * + 1. Time zones with minutes (make TimeZone a class) - * ? 2. getdate() function like under Solaris - * + 3. text conversion for wxDateSpan - * + 4. pluggable modules for the workdays calculations - * 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: - - 1. An absolute moment in the time (wxDateTime) - 2. A difference between two moments in the time, positive or negative - (wxTimeSpan) - 3. A logical difference between two dates expressed in - years/months/weeks/days (wxDateSpan) - - The following arithmetic operations are permitted (all others are not): - - addition - -------- - - wxDateTime + wxTimeSpan = wxDateTime - wxDateTime + wxDateSpan = wxDateTime - wxTimeSpan + wxTimeSpan = wxTimeSpan - wxDateSpan + wxDateSpan = wxDateSpan - - subtraction - ------------ - wxDateTime - wxDateTime = wxTimeSpan - wxDateTime - wxTimeSpan = wxDateTime - wxDateTime - wxDateSpan = wxDateTime - wxTimeSpan - wxTimeSpan = wxTimeSpan - wxDateSpan - wxDateSpan = wxDateSpan - - multiplication - -------------- - wxTimeSpan * number = wxTimeSpan - number * wxTimeSpan = wxTimeSpan - wxDateSpan * number = wxDateSpan - number * wxDateSpan = wxDateSpan - - unitary minus - ------------- - -wxTimeSpan = wxTimeSpan - -wxDateSpan = wxDateSpan - - For each binary operation OP (+, -, *) we have the following operatorOP=() as - a method and the method with a symbolic name OPER (Add, Subtract, Multiply) - as a synonym for it and another const method with the same name which returns - the changed copy of the object and operatorOP() as a global function which is - implemented in terms of the const version of OPEN. For the unary - we have - operator-() as a method, Neg() as synonym for it and Negate() which returns - the copy of the object with the changed sign. -*/ - -// an invalid/default date time object which may be used as the default -// argument for arguments of type wxDateTime; it is also returned by all -// functions returning wxDateTime on failure (this is why it is also called -// wxInvalidDateTime) -class WXDLLIMPEXP_FWD_BASE wxDateTime; - -extern WXDLLIMPEXP_DATA_BASE(const wxChar*) wxDefaultDateTimeFormat; -extern WXDLLIMPEXP_DATA_BASE(const wxChar*) wxDefaultTimeSpanFormat; -extern WXDLLIMPEXP_DATA_BASE(const wxDateTime) wxDefaultDateTime; - -#define wxInvalidDateTime wxDefaultDateTime - -// ---------------------------------------------------------------------------- -// wxDateTime represents an absolute moment in the time -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxDateTime -{ -public: - // types - // ------------------------------------------------------------------------ - - // a small unsigned integer type for storing things like minutes, - // seconds &c. It should be at least short (i.e. not char) to contain - // the number of milliseconds - it may also be 'int' because there is - // no size penalty associated with it in our code, we don't store any - // data in this format - typedef unsigned short wxDateTime_t; - - // constants - // ------------------------------------------------------------------------ - - // the timezones - enum TZ - { - // the time in the current time zone - Local, - - // zones from GMT (= Greenwhich Mean Time): they're guaranteed to be - // consequent numbers, so writing something like `GMT0 + offset' is - // safe if abs(offset) <= 12 - - // underscore stands for minus - GMT_12, GMT_11, GMT_10, GMT_9, GMT_8, GMT_7, - GMT_6, GMT_5, GMT_4, GMT_3, GMT_2, GMT_1, - GMT0, - GMT1, GMT2, GMT3, GMT4, GMT5, GMT6, - GMT7, GMT8, GMT9, GMT10, GMT11, GMT12, GMT13, - // Note that GMT12 and GMT_12 are not the same: there is a difference - // of exactly one day between them - - // some symbolic names for TZ - - // Europe - WET = GMT0, // Western Europe Time - WEST = GMT1, // Western Europe Summer Time - CET = GMT1, // Central Europe Time - CEST = GMT2, // Central Europe Summer Time - EET = GMT2, // Eastern Europe Time - EEST = GMT3, // Eastern Europe Summer Time - MSK = GMT3, // Moscow Time - MSD = GMT4, // Moscow Summer Time - - // US and Canada - AST = GMT_4, // Atlantic Standard Time - ADT = GMT_3, // Atlantic Daylight Time - EST = GMT_5, // Eastern Standard Time - EDT = GMT_4, // Eastern Daylight Saving Time - CST = GMT_6, // Central Standard Time - CDT = GMT_5, // Central Daylight Saving Time - MST = GMT_7, // Mountain Standard Time - MDT = GMT_6, // Mountain Daylight Saving Time - PST = GMT_8, // Pacific Standard Time - PDT = GMT_7, // Pacific Daylight Saving Time - HST = GMT_10, // Hawaiian Standard Time - AKST = GMT_9, // Alaska Standard Time - AKDT = GMT_8, // Alaska Daylight Saving Time - - // Australia - - A_WST = GMT8, // Western Standard Time - A_CST = GMT13 + 1, // Central Standard Time (+9.5) - A_EST = GMT10, // Eastern Standard Time - A_ESST = GMT11, // Eastern Summer Time - - // New Zealand - NZST = GMT12, // Standard Time - NZDT = GMT13, // Daylight Saving Time - - // TODO add more symbolic timezone names here - - // Universal Coordinated Time = the new and politically correct name - // for GMT - UTC = GMT0 - }; - - // the calendar systems we know about: notice that it's valid (for - // this classes purpose anyhow) to work with any of these calendars - // even with the dates before the historical appearance of the - // calendar - enum Calendar - { - Gregorian, // current calendar - Julian // calendar in use since -45 until the 1582 (or later) - - // TODO Hebrew, Chinese, Maya, ... (just kidding) (or then may be not?) - }; - - // these values only are used to identify the different dates of - // adoption of the Gregorian calendar (see IsGregorian()) - // - // All data and comments taken verbatim from "The Calendar FAQ (v 2.0)" - // by Claus Tøndering, http://www.pip.dknet.dk/~c-t/calendar.html - // except for the comments "we take". - // - // Symbol "->" should be read as "was followed by" in the comments - // which follow. - enum GregorianAdoption - { - Gr_Unknown, // no data for this country or it's too uncertain to use - Gr_Standard, // on the day 0 of Gregorian calendar: 15 Oct 1582 - - Gr_Alaska, // Oct 1867 when Alaska became part of the USA - Gr_Albania, // Dec 1912 - - Gr_Austria = Gr_Unknown, // Different regions on different dates - Gr_Austria_Brixen, // 5 Oct 1583 -> 16 Oct 1583 - Gr_Austria_Salzburg = Gr_Austria_Brixen, - Gr_Austria_Tyrol = Gr_Austria_Brixen, - Gr_Austria_Carinthia, // 14 Dec 1583 -> 25 Dec 1583 - Gr_Austria_Styria = Gr_Austria_Carinthia, - - Gr_Belgium, // Then part of the Netherlands - - Gr_Bulgaria = Gr_Unknown, // Unknown precisely (from 1915 to 1920) - Gr_Bulgaria_1, // 18 Mar 1916 -> 1 Apr 1916 - Gr_Bulgaria_2, // 31 Mar 1916 -> 14 Apr 1916 - Gr_Bulgaria_3, // 3 Sep 1920 -> 17 Sep 1920 - - Gr_Canada = Gr_Unknown, // Different regions followed the changes in - // Great Britain or France - - Gr_China = Gr_Unknown, // Different authorities say: - Gr_China_1, // 18 Dec 1911 -> 1 Jan 1912 - Gr_China_2, // 18 Dec 1928 -> 1 Jan 1929 - - Gr_Czechoslovakia, // (Bohemia and Moravia) 6 Jan 1584 -> 17 Jan 1584 - Gr_Denmark, // (including Norway) 18 Feb 1700 -> 1 Mar 1700 - Gr_Egypt, // 1875 - Gr_Estonia, // 1918 - Gr_Finland, // Then part of Sweden - - Gr_France, // 9 Dec 1582 -> 20 Dec 1582 - Gr_France_Alsace, // 4 Feb 1682 -> 16 Feb 1682 - Gr_France_Lorraine, // 16 Feb 1760 -> 28 Feb 1760 - Gr_France_Strasbourg, // February 1682 - - Gr_Germany = Gr_Unknown, // Different states on different dates: - Gr_Germany_Catholic, // 1583-1585 (we take 1584) - Gr_Germany_Prussia, // 22 Aug 1610 -> 2 Sep 1610 - Gr_Germany_Protestant, // 18 Feb 1700 -> 1 Mar 1700 - - Gr_GreatBritain, // 2 Sep 1752 -> 14 Sep 1752 (use 'cal(1)') - - Gr_Greece, // 9 Mar 1924 -> 23 Mar 1924 - Gr_Hungary, // 21 Oct 1587 -> 1 Nov 1587 - Gr_Ireland = Gr_GreatBritain, - Gr_Italy = Gr_Standard, - - Gr_Japan = Gr_Unknown, // Different authorities say: - Gr_Japan_1, // 19 Dec 1872 -> 1 Jan 1873 - Gr_Japan_2, // 19 Dec 1892 -> 1 Jan 1893 - Gr_Japan_3, // 18 Dec 1918 -> 1 Jan 1919 - - Gr_Latvia, // 1915-1918 (we take 1915) - Gr_Lithuania, // 1915 - Gr_Luxemburg, // 14 Dec 1582 -> 25 Dec 1582 - Gr_Netherlands = Gr_Belgium, // (including Belgium) 1 Jan 1583 - - // this is too weird to take into account: the Gregorian calendar was - // introduced twice in Groningen, first time 28 Feb 1583 was followed - // by 11 Mar 1583, then it has gone back to Julian in the summer of - // 1584 and then 13 Dec 1700 -> 12 Jan 1701 - which is - // the date we take here - Gr_Netherlands_Groningen, // 13 Dec 1700 -> 12 Jan 1701 - Gr_Netherlands_Gelderland, // 30 Jun 1700 -> 12 Jul 1700 - Gr_Netherlands_Utrecht, // (and Overijssel) 30 Nov 1700->12 Dec 1700 - Gr_Netherlands_Friesland, // (and Drenthe) 31 Dec 1700 -> 12 Jan 1701 - - Gr_Norway = Gr_Denmark, // Then part of Denmark - Gr_Poland = Gr_Standard, - Gr_Portugal = Gr_Standard, - Gr_Romania, // 31 Mar 1919 -> 14 Apr 1919 - Gr_Russia, // 31 Jan 1918 -> 14 Feb 1918 - Gr_Scotland = Gr_GreatBritain, - Gr_Spain = Gr_Standard, - - // Sweden has a curious history. Sweden decided to make a gradual - // change from the Julian to the Gregorian calendar. By dropping every - // leap year from 1700 through 1740 the eleven superfluous days would - // be omitted and from 1 Mar 1740 they would be in sync with the - // Gregorian calendar. (But in the meantime they would be in sync with - // nobody!) - // - // So 1700 (which should have been a leap year in the Julian calendar) - // was not a leap year in Sweden. However, by mistake 1704 and 1708 - // became leap years. This left Sweden out of synchronisation with - // both the Julian and the Gregorian world, so they decided to go back - // to the Julian calendar. In order to do this, they inserted an extra - // day in 1712, making that year a double leap year! So in 1712, - // February had 30 days in Sweden. - // - // Later, in 1753, Sweden changed to the Gregorian calendar by - // dropping 11 days like everyone else. - Gr_Sweden = Gr_Finland, // 17 Feb 1753 -> 1 Mar 1753 - - Gr_Switzerland = Gr_Unknown,// Different cantons used different dates - Gr_Switzerland_Catholic, // 1583, 1584 or 1597 (we take 1584) - Gr_Switzerland_Protestant, // 31 Dec 1700 -> 12 Jan 1701 - - Gr_Turkey, // 1 Jan 1927 - Gr_USA = Gr_GreatBritain, - Gr_Wales = Gr_GreatBritain, - Gr_Yugoslavia // 1919 - }; - - // the country parameter is used so far for calculating the start and - // the end of DST period and for deciding whether the date is a work - // day or not - // - // TODO move this to intl.h - -// Required for WinCE -#ifdef USA -#undef USA -#endif - - enum Country - { - Country_Unknown, // no special information for this country - Country_Default, // set the default country with SetCountry() method - // or use the default country with any other - - // TODO add more countries (for this we must know about DST and/or - // holidays for this country) - - // Western European countries: we assume that they all follow the same - // DST rules (true or false?) - Country_WesternEurope_Start, - Country_EEC = Country_WesternEurope_Start, - France, - Germany, - UK, - Country_WesternEurope_End = UK, - - Russia, - USA - }; - // symbolic names for the months - enum Month - { - Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec, Inv_Month - }; - - // symbolic names for the weekdays - enum WeekDay - { - Sun, Mon, Tue, Wed, Thu, Fri, Sat, Inv_WeekDay - }; - - // invalid value for the year - enum Year - { - Inv_Year = SHRT_MIN // should hold in wxDateTime_t - }; - - // flags for GetWeekDayName and GetMonthName - enum NameFlags - { - Name_Full = 0x01, // return full name - Name_Abbr = 0x02 // return abbreviated name - }; - - // flags for GetWeekOfYear and GetWeekOfMonth - enum WeekFlags - { - Default_First, // Sunday_First for US, Monday_First for the rest - Monday_First, // week starts with a Monday - Sunday_First // week starts with a Sunday - }; - - // helper classes - // ------------------------------------------------------------------------ - - // a class representing a time zone: basicly, this is just an offset - // (in seconds) from GMT - class WXDLLIMPEXP_BASE TimeZone - { - public: - TimeZone(TZ tz); - - // don't use this ctor, it doesn't work for negative offsets (but can't - // be removed or changed to avoid breaking ABI in 2.8) - TimeZone(wxDateTime_t offset = 0) { m_offset = offset; } - -#if wxABI_VERSION >= 20808 - // create time zone object with the given offset - static TimeZone Make(long offset) - { - TimeZone tz; - tz.m_offset = offset; - return tz; - } -#endif // wxABI 2.8.8+ - - long GetOffset() const { return m_offset; } - - private: - // offset for this timezone from GMT in seconds - long m_offset; - }; - - // standard struct tm is limited to the years from 1900 (because - // tm_year field is the offset from 1900), so we use our own struct - // instead to represent broken down time - // - // NB: this struct should always be kept normalized (i.e. mon should - // be < 12, 1 <= day <= 31 &c), so use AddMonths(), AddDays() - // instead of modifying the member fields directly! - struct WXDLLIMPEXP_BASE Tm - { - wxDateTime_t msec, sec, min, hour, mday; - Month mon; - int year; - - // default ctor inits the object to an invalid value - Tm(); - - // ctor from struct tm and the timezone - Tm(const struct tm& tm, const TimeZone& tz); - - // check that the given date/time is valid (in Gregorian calendar) - bool IsValid() const; - - // get the week day - WeekDay GetWeekDay() // not const because wday may be changed - { - if ( wday == Inv_WeekDay ) - ComputeWeekDay(); - - return (WeekDay)wday; - } - - // add the given number of months to the date keeping it normalized - void AddMonths(int monDiff); - - // add the given number of months to the date keeping it normalized - void AddDays(int dayDiff); - - private: - // compute the weekday from other fields - void ComputeWeekDay(); - - // the timezone we correspond to - TimeZone m_tz; - - // these values can't be accessed directly because they're not always - // computed and we calculate them on demand - wxDateTime_t wday, yday; - }; - - // static methods - // ------------------------------------------------------------------------ - - // set the current country - static void SetCountry(Country country); - // get the current country - static Country GetCountry(); - - // return true if the country is a West European one (in practice, - // this means that the same DST rules as for EEC apply) - static bool IsWestEuropeanCountry(Country country = Country_Default); - - // return the current year - static int GetCurrentYear(Calendar cal = Gregorian); - - // convert the year as returned by wxDateTime::GetYear() to a year - // suitable for BC/AD notation. The difference is that BC year 1 - // corresponds to the year 0 (while BC year 0 didn't exist) and AD - // year N is just year N. - static int ConvertYearToBC(int year); - - // return the current month - static Month GetCurrentMonth(Calendar cal = Gregorian); - - // returns true if the given year is a leap year in the given calendar - static bool IsLeapYear(int year = Inv_Year, Calendar cal = Gregorian); - - // get the century (19 for 1999, 20 for 2000 and -5 for 492 BC) - static int GetCentury(int year); - - // returns the number of days in this year (356 or 355 for Gregorian - // calendar usually :-) - static wxDateTime_t GetNumberOfDays(int year, Calendar cal = Gregorian); - - // get the number of the days in the given month (default value for - // the year means the current one) - static wxDateTime_t GetNumberOfDays(Month month, - int year = Inv_Year, - Calendar cal = Gregorian); - - // get the full (default) or abbreviated month name in the current - // locale, returns empty string on error - static wxString GetMonthName(Month month, - NameFlags flags = Name_Full); - - // get the full (default) or abbreviated weekday name in the current - // locale, returns empty string on error - static wxString GetWeekDayName(WeekDay weekday, - NameFlags flags = Name_Full); - - // get the AM and PM strings in the current locale (may be empty) - static void GetAmPmStrings(wxString *am, wxString *pm); - - // return true if the given country uses DST for this year - static bool IsDSTApplicable(int year = Inv_Year, - Country country = Country_Default); - - // get the beginning of DST for this year, will return invalid object - // if no DST applicable in this year. The default value of the - // parameter means to take the current year. - static wxDateTime GetBeginDST(int year = Inv_Year, - Country country = Country_Default); - // get the end of DST for this year, will return invalid object - // if no DST applicable in this year. The default value of the - // parameter means to take the current year. - static wxDateTime GetEndDST(int year = Inv_Year, - Country country = Country_Default); - - // return the wxDateTime object for the current time - static inline wxDateTime Now(); - - // return the wxDateTime object for the current time with millisecond - // precision (if available on this platform) - static wxDateTime UNow(); - - // return the wxDateTime object for today midnight: i.e. as Now() but - // with time set to 0 - static inline wxDateTime Today(); - - // constructors: you should test whether the constructor succeeded with - // IsValid() function. The values Inv_Month and Inv_Year for the - // parameters mean take current month and/or year values. - // ------------------------------------------------------------------------ - - // default ctor does not initialize the object, use Set()! - wxDateTime() { m_time = wxLongLong((wxInt32)UINT_MAX, UINT_MAX); } - - // from time_t: seconds since the Epoch 00:00:00 UTC, Jan 1, 1970) -#if (!(defined(__VISAGECPP__) && __IBMCPP__ >= 400)) -// VA C++ confuses this with wxDateTime(double jdn) thinking it is a duplicate declaration - inline wxDateTime(time_t timet); -#endif - // from broken down time/date (only for standard Unix range) - inline wxDateTime(const struct tm& tm); - // from broken down time/date (any range) - inline wxDateTime(const Tm& tm); - - // from JDN (beware of rounding errors) - inline wxDateTime(double jdn); - - // from separate values for each component, date set to today - inline wxDateTime(wxDateTime_t hour, - wxDateTime_t minute = 0, - wxDateTime_t second = 0, - wxDateTime_t millisec = 0); - // from separate values for each component with explicit date - inline wxDateTime(wxDateTime_t day, // day of the month - Month month, - int year = Inv_Year, // 1999, not 99 please! - wxDateTime_t hour = 0, - wxDateTime_t minute = 0, - wxDateTime_t second = 0, - wxDateTime_t millisec = 0); - - // default copy ctor ok - - // no dtor - - // assignment operators and Set() functions: all non const methods return - // the reference to this object. IsValid() should be used to test whether - // the function succeeded. - // ------------------------------------------------------------------------ - - // set to the current time - inline wxDateTime& SetToCurrent(); - -#if (!(defined(__VISAGECPP__) && __IBMCPP__ >= 400)) -// VA C++ confuses this with wxDateTime(double jdn) thinking it is a duplicate declaration - // set to given time_t value - inline wxDateTime& Set(time_t timet); -#endif - - // set to given broken down time/date - wxDateTime& Set(const struct tm& tm); - - // set to given broken down time/date - inline wxDateTime& Set(const Tm& tm); - - // set to given JDN (beware of rounding errors) - wxDateTime& Set(double jdn); - - // set to given time, date = today - wxDateTime& Set(wxDateTime_t hour, - wxDateTime_t minute = 0, - wxDateTime_t second = 0, - wxDateTime_t millisec = 0); - - // from separate values for each component with explicit date - // (defaults for month and year are the current values) - wxDateTime& Set(wxDateTime_t day, - Month month, - int year = Inv_Year, // 1999, not 99 please! - wxDateTime_t hour = 0, - wxDateTime_t minute = 0, - wxDateTime_t second = 0, - wxDateTime_t millisec = 0); - - // resets time to 00:00:00, doesn't change the date - wxDateTime& ResetTime(); - -#if wxABI_VERSION >= 20802 - // get the date part of this object only, i.e. the object which has the - // same date as this one but time of 00:00:00 - wxDateTime GetDateOnly() const; -#endif // wxABI 2.8.1+ - - // the following functions don't change the values of the other - // fields, i.e. SetMinute() won't change either hour or seconds value - - // set the year - wxDateTime& SetYear(int year); - // set the month - wxDateTime& SetMonth(Month month); - // set the day of the month - wxDateTime& SetDay(wxDateTime_t day); - // set hour - wxDateTime& SetHour(wxDateTime_t hour); - // set minute - wxDateTime& SetMinute(wxDateTime_t minute); - // set second - wxDateTime& SetSecond(wxDateTime_t second); - // set millisecond - wxDateTime& SetMillisecond(wxDateTime_t millisecond); - - // assignment operator from time_t - wxDateTime& operator=(time_t timet) { return Set(timet); } - - // assignment operator from broken down time/date - wxDateTime& operator=(const struct tm& tm) { return Set(tm); } - - // assignment operator from broken down time/date - wxDateTime& operator=(const Tm& tm) { return Set(tm); } - - // default assignment operator is ok - - // calendar calculations (functions which set the date only leave the time - // unchanged, e.g. don't explictly zero it): SetXXX() functions modify the - // object itself, GetXXX() ones return a new object. - // ------------------------------------------------------------------------ - - // set to the given week day in the same week as this one - wxDateTime& SetToWeekDayInSameWeek(WeekDay weekday, - WeekFlags flags = Monday_First); - inline wxDateTime GetWeekDayInSameWeek(WeekDay weekday, - WeekFlags flags = Monday_First) const; - - // set to the next week day following this one - wxDateTime& SetToNextWeekDay(WeekDay weekday); - inline wxDateTime GetNextWeekDay(WeekDay weekday) const; - - // set to the previous week day before this one - wxDateTime& SetToPrevWeekDay(WeekDay weekday); - inline wxDateTime GetPrevWeekDay(WeekDay weekday) const; - - // set to Nth occurence of given weekday in the given month of the - // given year (time is set to 0), return true on success and false on - // failure. n may be positive (1..5) or negative to count from the end - // of the month (see helper function SetToLastWeekDay()) - bool SetToWeekDay(WeekDay weekday, - int n = 1, - Month month = Inv_Month, - int year = Inv_Year); - inline wxDateTime GetWeekDay(WeekDay weekday, - int n = 1, - Month month = Inv_Month, - int year = Inv_Year) const; - - // sets to the last weekday in the given month, year - inline bool SetToLastWeekDay(WeekDay weekday, - Month month = Inv_Month, - int year = Inv_Year); - inline wxDateTime GetLastWeekDay(WeekDay weekday, - Month month = Inv_Month, - int year = Inv_Year); - -#if WXWIN_COMPATIBILITY_2_6 - // sets the date to the given day of the given week in the year, - // returns true on success and false if given date doesn't exist (e.g. - // numWeek is > 53) - // - // these functions are badly defined as they're not the reverse of - // GetWeekOfYear(), use SetToTheWeekOfYear() instead - wxDEPRECATED( bool SetToTheWeek(wxDateTime_t numWeek, - WeekDay weekday = Mon, - WeekFlags flags = Monday_First) ); - wxDEPRECATED( wxDateTime GetWeek(wxDateTime_t numWeek, - WeekDay weekday = Mon, - WeekFlags flags = Monday_First) const ); -#endif // WXWIN_COMPATIBILITY_2_6 - - // returns the date corresponding to the given week day of the given - // week (in ISO notation) of the specified year - static wxDateTime SetToWeekOfYear(int year, - wxDateTime_t numWeek, - WeekDay weekday = Mon); - - // sets the date to the last day of the given (or current) month or the - // given (or current) year - wxDateTime& SetToLastMonthDay(Month month = Inv_Month, - int year = Inv_Year); - inline wxDateTime GetLastMonthDay(Month month = Inv_Month, - int year = Inv_Year) const; - - // sets to the given year day (1..365 or 366) - wxDateTime& SetToYearDay(wxDateTime_t yday); - inline wxDateTime GetYearDay(wxDateTime_t yday) const; - - // The definitions below were taken verbatim from - // - // http://www.capecod.net/~pbaum/date/date0.htm - // - // (Peter Baum's home page) - // - // definition: The Julian Day Number, Julian Day, or JD of a - // particular instant of time is the number of days and fractions of a - // day since 12 hours Universal Time (Greenwich mean noon) on January - // 1 of the year -4712, where the year is given in the Julian - // proleptic calendar. The idea of using this reference date was - // originally proposed by Joseph Scalizer in 1582 to count years but - // it was modified by 19th century astronomers to count days. One - // could have equivalently defined the reference time to be noon of - // November 24, -4713 if were understood that Gregorian calendar rules - // were applied. Julian days are Julian Day Numbers and are not to be - // confused with Julian dates. - // - // definition: The Rata Die number is a date specified as the number - // of days relative to a base date of December 31 of the year 0. Thus - // January 1 of the year 1 is Rata Die day 1. - - // get the Julian Day number (the fractional part specifies the time of - // the day, related to noon - beware of rounding errors!) - double GetJulianDayNumber() const; - double GetJDN() const { return GetJulianDayNumber(); } - - // get the Modified Julian Day number: it is equal to JDN - 2400000.5 - // and so integral MJDs correspond to the midnights (and not noons). - // MJD 0 is Nov 17, 1858 - double GetModifiedJulianDayNumber() const { return GetJDN() - 2400000.5; } - double GetMJD() const { return GetModifiedJulianDayNumber(); } - - // get the Rata Die number - double GetRataDie() const; - - // TODO algorithms for calculating some important dates, such as - // religious holidays (Easter...) or moon/solar eclipses? Some - // algorithms can be found in the calendar FAQ - - - // Timezone stuff: a wxDateTime object constructed using given - // day/month/year/hour/min/sec values is interpreted as this moment in - // local time. Using the functions below, it may be converted to another - // time zone (e.g., the Unix epoch is wxDateTime(1, Jan, 1970).ToGMT()). - // - // These functions try to handle DST internally, but there is no magical - // way to know all rules for it in all countries in the world, so if the - // program can handle it itself (or doesn't want to handle it at all for - // whatever reason), the DST handling can be disabled with noDST. - // ------------------------------------------------------------------------ - - // transform to any given timezone - inline wxDateTime ToTimezone(const TimeZone& tz, bool noDST = false) const; - wxDateTime& MakeTimezone(const TimeZone& tz, bool noDST = false); - - // interpret current value as being in another timezone and transform - // it to local one - inline wxDateTime FromTimezone(const TimeZone& tz, bool noDST = false) const; - wxDateTime& MakeFromTimezone(const TimeZone& tz, bool noDST = false); - - // transform to/from GMT/UTC - wxDateTime ToUTC(bool noDST = false) const { return ToTimezone(UTC, noDST); } - wxDateTime& MakeUTC(bool noDST = false) { return MakeTimezone(UTC, noDST); } - - wxDateTime ToGMT(bool noDST = false) const { return ToUTC(noDST); } - wxDateTime& MakeGMT(bool noDST = false) { return MakeUTC(noDST); } - - wxDateTime FromUTC(bool noDST = false) const - { return FromTimezone(UTC, noDST); } - wxDateTime& MakeFromUTC(bool noDST = false) - { return MakeFromTimezone(UTC, noDST); } - - // is daylight savings time in effect at this moment according to the - // rules of the specified country? - // - // Return value is > 0 if DST is in effect, 0 if it is not and -1 if - // the information is not available (this is compatible with ANSI C) - int IsDST(Country country = Country_Default) const; - - - // accessors: many of them take the timezone parameter which indicates the - // timezone for which to make the calculations and the default value means - // to do it for the current timezone of this machine (even if the function - // only operates with the date it's necessary because a date may wrap as - // result of timezone shift) - // ------------------------------------------------------------------------ - - // is the date valid? - inline bool IsValid() const { return m_time != wxInvalidDateTime.m_time; } - - // get the broken down date/time representation in the given timezone - // - // If you wish to get several time components (day, month and year), - // consider getting the whole Tm strcuture first and retrieving the - // value from it - this is much more efficient - Tm GetTm(const TimeZone& tz = Local) const; - - // get the number of seconds since the Unix epoch - returns (time_t)-1 - // if the value is out of range - inline time_t GetTicks() const; - - // get the century, same as GetCentury(GetYear()) - int GetCentury(const TimeZone& tz = Local) const - { return GetCentury(GetYear(tz)); } - // get the year (returns Inv_Year if date is invalid) - int GetYear(const TimeZone& tz = Local) const - { return GetTm(tz).year; } - // get the month (Inv_Month if date is invalid) - Month GetMonth(const TimeZone& tz = Local) const - { return (Month)GetTm(tz).mon; } - // get the month day (in 1..31 range, 0 if date is invalid) - wxDateTime_t GetDay(const TimeZone& tz = Local) const - { return GetTm(tz).mday; } - // get the day of the week (Inv_WeekDay if date is invalid) - WeekDay GetWeekDay(const TimeZone& tz = Local) const - { return GetTm(tz).GetWeekDay(); } - // get the hour of the day - wxDateTime_t GetHour(const TimeZone& tz = Local) const - { return GetTm(tz).hour; } - // get the minute - wxDateTime_t GetMinute(const TimeZone& tz = Local) const - { return GetTm(tz).min; } - // get the second - wxDateTime_t GetSecond(const TimeZone& tz = Local) const - { return GetTm(tz).sec; } - // get milliseconds - wxDateTime_t GetMillisecond(const TimeZone& tz = Local) const - { return GetTm(tz).msec; } - - // get the day since the year start (1..366, 0 if date is invalid) - wxDateTime_t GetDayOfYear(const TimeZone& tz = Local) const; - // get the week number since the year start (1..52 or 53, 0 if date is - // invalid) - wxDateTime_t GetWeekOfYear(WeekFlags flags = Monday_First, - const TimeZone& tz = Local) const; - // get the week number since the month start (1..5, 0 if date is - // invalid) - wxDateTime_t GetWeekOfMonth(WeekFlags flags = Monday_First, - const TimeZone& tz = Local) const; - - // is this date a work day? This depends on a country, of course, - // because the holidays are different in different countries - bool IsWorkDay(Country country = Country_Default) const; - - // is this date later than Gregorian calendar introduction for the - // given country (see enum GregorianAdoption)? - // - // NB: this function shouldn't be considered as absolute authority in - // the matter. Besides, for some countries the exact date of - // adoption of the Gregorian calendar is simply unknown. - bool IsGregorianDate(GregorianAdoption country = Gr_Standard) const; - - // dos date and time format - // ------------------------------------------------------------------------ - - // set from the DOS packed format - wxDateTime& SetFromDOS(unsigned long ddt); - - // pack the date in DOS format - unsigned long GetAsDOS() const; - - // comparison (see also functions below for operator versions) - // ------------------------------------------------------------------------ - - // returns true if the two moments are strictly identical - inline bool IsEqualTo(const wxDateTime& datetime) const; - - // returns true if the date is strictly earlier than the given one - inline bool IsEarlierThan(const wxDateTime& datetime) const; - - // returns true if the date is strictly later than the given one - inline bool IsLaterThan(const wxDateTime& datetime) const; - - // returns true if the date is strictly in the given range - inline bool IsStrictlyBetween(const wxDateTime& t1, - const wxDateTime& t2) const; - - // returns true if the date is in the given range - inline bool IsBetween(const wxDateTime& t1, const wxDateTime& t2) const; - - // do these two objects refer to the same date? - inline bool IsSameDate(const wxDateTime& dt) const; - - // do these two objects have the same time? - inline bool IsSameTime(const wxDateTime& dt) const; - - // are these two objects equal up to given timespan? - inline bool IsEqualUpTo(const wxDateTime& dt, const wxTimeSpan& ts) const; - - inline bool operator<(const wxDateTime& dt) const - { - wxASSERT_MSG( IsValid() && dt.IsValid(), _T("invalid wxDateTime") ); - return GetValue() < dt.GetValue(); - } - - inline bool operator<=(const wxDateTime& dt) const - { - wxASSERT_MSG( IsValid() && dt.IsValid(), _T("invalid wxDateTime") ); - return GetValue() <= dt.GetValue(); - } - - inline bool operator>(const wxDateTime& dt) const - { - wxASSERT_MSG( IsValid() && dt.IsValid(), _T("invalid wxDateTime") ); - return GetValue() > dt.GetValue(); - } - - inline bool operator>=(const wxDateTime& dt) const - { - wxASSERT_MSG( IsValid() && dt.IsValid(), _T("invalid wxDateTime") ); - return GetValue() >= dt.GetValue(); - } - - inline bool operator==(const wxDateTime& dt) const - { - wxASSERT_MSG( IsValid() && dt.IsValid(), _T("invalid wxDateTime") ); - return GetValue() == dt.GetValue(); - } - - inline bool operator!=(const wxDateTime& dt) const - { - wxASSERT_MSG( IsValid() && dt.IsValid(), _T("invalid wxDateTime") ); - return GetValue() != dt.GetValue(); - } - - // arithmetics with dates (see also below for more operators) - // ------------------------------------------------------------------------ - - // return the sum of the date with a time span (positive or negative) - inline wxDateTime Add(const wxTimeSpan& diff) const; - // add a time span (positive or negative) - inline wxDateTime& Add(const wxTimeSpan& diff); - // add a time span (positive or negative) - inline wxDateTime& operator+=(const wxTimeSpan& diff); - inline wxDateTime operator+(const wxTimeSpan& ts) const - { - wxDateTime dt(*this); - dt.Add(ts); - return dt; - } - - // return the difference of the date with a time span - inline wxDateTime Subtract(const wxTimeSpan& diff) const; - // subtract a time span (positive or negative) - inline wxDateTime& Subtract(const wxTimeSpan& diff); - // subtract a time span (positive or negative) - inline wxDateTime& operator-=(const wxTimeSpan& diff); - inline wxDateTime operator-(const wxTimeSpan& ts) const - { - wxDateTime dt(*this); - dt.Subtract(ts); - return dt; - } - - // return the sum of the date with a date span - inline wxDateTime Add(const wxDateSpan& diff) const; - // add a date span (positive or negative) - wxDateTime& Add(const wxDateSpan& diff); - // add a date span (positive or negative) - inline wxDateTime& operator+=(const wxDateSpan& diff); - inline wxDateTime operator+(const wxDateSpan& ds) const - { - wxDateTime dt(*this); - dt.Add(ds); - return dt; - } - - // return the difference of the date with a date span - inline wxDateTime Subtract(const wxDateSpan& diff) const; - // subtract a date span (positive or negative) - inline wxDateTime& Subtract(const wxDateSpan& diff); - // subtract a date span (positive or negative) - inline wxDateTime& operator-=(const wxDateSpan& diff); - inline wxDateTime operator-(const wxDateSpan& ds) const - { - wxDateTime dt(*this); - dt.Subtract(ds); - return dt; - } - - // return the difference between two dates - inline wxTimeSpan Subtract(const wxDateTime& dt) const; - inline wxTimeSpan operator-(const wxDateTime& dt2) const; - - // conversion to/from text: all conversions from text return the pointer to - // the next character following the date specification (i.e. the one where - // the scan had to stop) or NULL on failure. - // ------------------------------------------------------------------------ - - // parse a string in RFC 822 format (found e.g. in mail headers and - // having the form "Wed, 10 Feb 1999 19:07:07 +0100") - const wxChar *ParseRfc822Date(const wxChar* date); - // parse a date/time in the given format (see strptime(3)), fill in - // the missing (in the string) fields with the values of dateDef (by - // default, they will not change if they had valid values or will - // default to Today() otherwise) - const wxChar *ParseFormat(const wxChar *date, - const wxChar *format = wxDefaultDateTimeFormat, - const wxDateTime& dateDef = wxDefaultDateTime); - // parse a string containing the date/time in "free" format, this - // function will try to make an educated guess at the string contents - const wxChar *ParseDateTime(const wxChar *datetime); - // parse a string containing the date only in "free" format (less - // flexible than ParseDateTime) - const wxChar *ParseDate(const wxChar *date); - // parse a string containing the time only in "free" format - const wxChar *ParseTime(const wxChar *time); - - // this function accepts strftime()-like format string (default - // argument corresponds to the preferred date and time representation - // for the current locale) and returns the string containing the - // resulting text representation - wxString Format(const wxChar *format = wxDefaultDateTimeFormat, - const TimeZone& tz = Local) const; - // preferred date representation for the current locale - wxString FormatDate() const { return Format(_T("%x")); } - // preferred time representation for the current locale - wxString FormatTime() const { return Format(_T("%X")); } - // returns the string representing the date in ISO 8601 format - // (YYYY-MM-DD) - wxString FormatISODate() const { return Format(_T("%Y-%m-%d")); } - // returns the string representing the time in ISO 8601 format - // (HH:MM:SS) - wxString FormatISOTime() const { return Format(_T("%H:%M:%S")); } - - // implementation - // ------------------------------------------------------------------------ - - // construct from internal representation - wxDateTime(const wxLongLong& time) { m_time = time; } - - // get the internal representation - inline wxLongLong GetValue() const; - - // a helper function to get the current time_t - static time_t GetTimeNow() { return time((time_t *)NULL); } - - // another one to get the current time broken down - static struct tm *GetTmNow() - { - static struct tm l_CurrentTime; - return GetTmNow(&l_CurrentTime); - } - - // get current time using thread-safe function - static struct tm *GetTmNow(struct tm *tmstruct); - -private: - // the current country - as it's the same for all program objects (unless - // it runs on a _really_ big cluster system :-), this is a static member: - // see SetCountry() and GetCountry() - static Country ms_country; - - // this constant is used to transform a time_t value to the internal - // representation, as time_t is in seconds and we use milliseconds it's - // fixed to 1000 - static const long TIME_T_FACTOR; - - // returns true if we fall in range in which we can use standard ANSI C - // functions - inline bool IsInStdRange() const; - - // the internal representation of the time is the amount of milliseconds - // elapsed since the origin which is set by convention to the UNIX/C epoch - // value: the midnight of January 1, 1970 (UTC) - wxLongLong m_time; -}; - -// ---------------------------------------------------------------------------- -// This class contains a difference between 2 wxDateTime values, so it makes -// sense to add it to wxDateTime and it is the result of subtraction of 2 -// objects of that class. See also wxDateSpan. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxTimeSpan -{ -public: - // constructors - // ------------------------------------------------------------------------ - - // return the timespan for the given number of milliseconds - static wxTimeSpan Milliseconds(wxLongLong ms) { return wxTimeSpan(0, 0, 0, ms); } - static wxTimeSpan Millisecond() { return Milliseconds(1); } - - // return the timespan for the given number of seconds - static wxTimeSpan Seconds(wxLongLong sec) { return wxTimeSpan(0, 0, sec); } - static wxTimeSpan Second() { return Seconds(1); } - - // return the timespan for the given number of minutes - static wxTimeSpan Minutes(long min) { return wxTimeSpan(0, min, 0 ); } - static wxTimeSpan Minute() { return Minutes(1); } - - // return the timespan for the given number of hours - static wxTimeSpan Hours(long hours) { return wxTimeSpan(hours, 0, 0); } - static wxTimeSpan Hour() { return Hours(1); } - - // return the timespan for the given number of days - static wxTimeSpan Days(long days) { return Hours(24 * days); } - static wxTimeSpan Day() { return Days(1); } - - // return the timespan for the given number of weeks - static wxTimeSpan Weeks(long days) { return Days(7 * days); } - static wxTimeSpan Week() { return Weeks(1); } - - // default ctor constructs the 0 time span - wxTimeSpan() { } - - // from separate values for each component, date set to 0 (hours are - // not restricted to 0..24 range, neither are minutes, seconds or - // milliseconds) - inline wxTimeSpan(long hours, - long minutes = 0, - wxLongLong seconds = 0, - wxLongLong milliseconds = 0); - - // default copy ctor is ok - - // no dtor - - // arithmetics with time spans (see also below for more operators) - // ------------------------------------------------------------------------ - - // return the sum of two timespans - inline wxTimeSpan Add(const wxTimeSpan& diff) const; - // add two timespans together - inline wxTimeSpan& Add(const wxTimeSpan& diff); - // add two timespans together - wxTimeSpan& operator+=(const wxTimeSpan& diff) { return Add(diff); } - inline wxTimeSpan operator+(const wxTimeSpan& ts) const - { - return wxTimeSpan(GetValue() + ts.GetValue()); - } - - // return the difference of two timespans - inline wxTimeSpan Subtract(const wxTimeSpan& diff) const; - // subtract another timespan - inline wxTimeSpan& Subtract(const wxTimeSpan& diff); - // subtract another timespan - wxTimeSpan& operator-=(const wxTimeSpan& diff) { return Subtract(diff); } - inline wxTimeSpan operator-(const wxTimeSpan& ts) - { - return wxTimeSpan(GetValue() - ts.GetValue()); - } - - // multiply timespan by a scalar - inline wxTimeSpan Multiply(int n) const; - // multiply timespan by a scalar - inline wxTimeSpan& Multiply(int n); - // multiply timespan by a scalar - wxTimeSpan& operator*=(int n) { return Multiply(n); } - inline wxTimeSpan operator*(int n) const - { - return wxTimeSpan(*this).Multiply(n); - } - - // return this timespan with opposite sign - wxTimeSpan Negate() const { return wxTimeSpan(-GetValue()); } - // negate the value of the timespan - wxTimeSpan& Neg() { m_diff = -GetValue(); return *this; } - // negate the value of the timespan - wxTimeSpan& operator-() { return Neg(); } - - // return the absolute value of the timespan: does _not_ modify the - // object - inline wxTimeSpan Abs() const; - - // there is intentionally no division because we don't want to - // introduce rounding errors in time calculations - - // comparaison (see also operator versions below) - // ------------------------------------------------------------------------ - - // is the timespan null? - bool IsNull() const { return m_diff == 0l; } - // returns true if the timespan is null - bool operator!() const { return !IsNull(); } - - // is the timespan positive? - bool IsPositive() const { return m_diff > 0l; } - - // is the timespan negative? - bool IsNegative() const { return m_diff < 0l; } - - // are two timespans equal? - inline bool IsEqualTo(const wxTimeSpan& ts) const; - // compare two timestamps: works with the absolute values, i.e. -2 - // hours is longer than 1 hour. Also, it will return false if the - // timespans are equal in absolute value. - inline bool IsLongerThan(const wxTimeSpan& ts) const; - // compare two timestamps: works with the absolute values, i.e. 1 - // hour is shorter than -2 hours. Also, it will return false if the - // timespans are equal in absolute value. - bool IsShorterThan(const wxTimeSpan& t) const { return !IsLongerThan(t); } - - inline bool operator<(const wxTimeSpan &ts) const - { - return GetValue() < ts.GetValue(); - } - - inline bool operator<=(const wxTimeSpan &ts) const - { - return GetValue() <= ts.GetValue(); - } - - inline bool operator>(const wxTimeSpan &ts) const - { - return GetValue() > ts.GetValue(); - } - - inline bool operator>=(const wxTimeSpan &ts) const - { - return GetValue() >= ts.GetValue(); - } - - inline bool operator==(const wxTimeSpan &ts) const - { - return GetValue() == ts.GetValue(); - } - - inline bool operator!=(const wxTimeSpan &ts) const - { - return GetValue() != ts.GetValue(); - } - - // breaking into days, hours, minutes and seconds - // ------------------------------------------------------------------------ - - // get the max number of weeks in this timespan - inline int GetWeeks() const; - // get the max number of days in this timespan - inline int GetDays() const; - // get the max number of hours in this timespan - inline int GetHours() const; - // get the max number of minutes in this timespan - inline int GetMinutes() const; - // get the max number of seconds in this timespan - inline wxLongLong GetSeconds() const; - // get the number of milliseconds in this timespan - wxLongLong GetMilliseconds() const { return m_diff; } - - // conversion to text - // ------------------------------------------------------------------------ - - // this function accepts strftime()-like format string (default - // argument corresponds to the preferred date and time representation - // for the current locale) and returns the string containing the - // resulting text representation. Notice that only some of format - // specifiers valid for wxDateTime are valid for wxTimeSpan: hours, - // minutes and seconds make sense, but not "PM/AM" string for example. - wxString Format(const wxChar *format = wxDefaultTimeSpanFormat) const; - - // implementation - // ------------------------------------------------------------------------ - - // construct from internal representation - wxTimeSpan(const wxLongLong& diff) { m_diff = diff; } - - // get the internal representation - wxLongLong GetValue() const { return m_diff; } - -private: - // the (signed) time span in milliseconds - wxLongLong m_diff; -}; - -// ---------------------------------------------------------------------------- -// This class is a "logical time span" and is useful for implementing program -// logic for such things as "add one month to the date" which, in general, -// doesn't mean to add 60*60*24*31 seconds to it, but to take the same date -// the next month (to understand that this is indeed different consider adding -// one month to Feb, 15 - we want to get Mar, 15, of course). -// -// When adding a month to the date, all lesser components (days, hours, ...) -// won't be changed unless the resulting date would be invalid: for example, -// Jan 31 + 1 month will be Feb 28, not (non existing) Feb 31. -// -// Because of this feature, adding and subtracting back again the same -// wxDateSpan will *not*, in general give back the original date: Feb 28 - 1 -// month will be Jan 28, not Jan 31! -// -// wxDateSpan can be either positive or negative. They may be -// multiplied by scalars which multiply all deltas by the scalar: i.e. 2*(1 -// month and 1 day) is 2 months and 2 days. They can be added together and -// with wxDateTime or wxTimeSpan, but the type of result is different for each -// case. -// -// Beware about weeks: if you specify both weeks and days, the total number of -// days added will be 7*weeks + days! See also GetTotalDays() function. -// -// Equality operators are defined for wxDateSpans. Two datespans are equal if -// they both give the same target date when added to *every* source date. -// Thus wxDateSpan::Months(1) is not equal to wxDateSpan::Days(30), because -// they not give the same date when added to 1 Feb. But wxDateSpan::Days(14) is -// equal to wxDateSpan::Weeks(2) -// -// Finally, notice that for adding hours, minutes &c you don't need this -// class: wxTimeSpan will do the job because there are no subtleties -// associated with those. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxDateSpan -{ -public: - // constructors - // ------------------------------------------------------------------------ - - // this many years/months/weeks/days - wxDateSpan(int years = 0, int months = 0, int weeks = 0, int days = 0) - { - m_years = years; - m_months = months; - m_weeks = weeks; - m_days = days; - } - - // get an object for the given number of days - static wxDateSpan Days(int days) { return wxDateSpan(0, 0, 0, days); } - static wxDateSpan Day() { return Days(1); } - - // get an object for the given number of weeks - static wxDateSpan Weeks(int weeks) { return wxDateSpan(0, 0, weeks, 0); } - static wxDateSpan Week() { return Weeks(1); } - - // get an object for the given number of months - static wxDateSpan Months(int mon) { return wxDateSpan(0, mon, 0, 0); } - static wxDateSpan Month() { return Months(1); } - - // get an object for the given number of years - static wxDateSpan Years(int years) { return wxDateSpan(years, 0, 0, 0); } - static wxDateSpan Year() { return Years(1); } - - // default copy ctor is ok - - // no dtor - - // accessors (all SetXXX() return the (modified) wxDateSpan object) - // ------------------------------------------------------------------------ - - // set number of years - wxDateSpan& SetYears(int n) { m_years = n; return *this; } - // set number of months - wxDateSpan& SetMonths(int n) { m_months = n; return *this; } - // set number of weeks - wxDateSpan& SetWeeks(int n) { m_weeks = n; return *this; } - // set number of days - wxDateSpan& SetDays(int n) { m_days = n; return *this; } - - // get number of years - int GetYears() const { return m_years; } - // get number of months - int GetMonths() const { return m_months; } - // get number of weeks - int GetWeeks() const { return m_weeks; } - // get number of days - int GetDays() const { return m_days; } - // returns 7*GetWeeks() + GetDays() - int GetTotalDays() const { return 7*m_weeks + m_days; } - - // arithmetics with date spans (see also below for more operators) - // ------------------------------------------------------------------------ - - // return sum of two date spans - inline wxDateSpan Add(const wxDateSpan& other) const; - // add another wxDateSpan to us - inline wxDateSpan& Add(const wxDateSpan& other); - // add another wxDateSpan to us - inline wxDateSpan& operator+=(const wxDateSpan& other); - inline wxDateSpan operator+(const wxDateSpan& ds) const - { - return wxDateSpan(GetYears() + ds.GetYears(), - GetMonths() + ds.GetMonths(), - GetWeeks() + ds.GetWeeks(), - GetDays() + ds.GetDays()); - } - - // return difference of two date spans - inline wxDateSpan Subtract(const wxDateSpan& other) const; - // subtract another wxDateSpan from us - inline wxDateSpan& Subtract(const wxDateSpan& other); - // subtract another wxDateSpan from us - inline wxDateSpan& operator-=(const wxDateSpan& other); - inline wxDateSpan operator-(const wxDateSpan& ds) const - { - return wxDateSpan(GetYears() - ds.GetYears(), - GetMonths() - ds.GetMonths(), - GetWeeks() - ds.GetWeeks(), - GetDays() - ds.GetDays()); - } - - // return a copy of this time span with changed sign - inline wxDateSpan Negate() const; - // inverse the sign of this timespan - inline wxDateSpan& Neg(); - // inverse the sign of this timespan - wxDateSpan& operator-() { return Neg(); } - - // return the date span proportional to this one with given factor - inline wxDateSpan Multiply(int factor) const; - // multiply all components by a (signed) number - inline wxDateSpan& Multiply(int factor); - // multiply all components by a (signed) number - inline wxDateSpan& operator*=(int factor) { return Multiply(factor); } - inline wxDateSpan operator*(int n) const - { - return wxDateSpan(*this).Multiply(n); - } - - // ds1 == d2 if and only if for every wxDateTime t t + ds1 == t + ds2 - inline bool operator==(const wxDateSpan& ds) const - { - return GetYears() == ds.GetYears() && - GetMonths() == ds.GetMonths() && - GetTotalDays() == ds.GetTotalDays(); - } - - inline bool operator!=(const wxDateSpan& ds) const - { - return !(*this == ds); - } - -private: - int m_years, - m_months, - m_weeks, - m_days; -}; - -// ---------------------------------------------------------------------------- -// wxDateTimeArray: array of dates. -// ---------------------------------------------------------------------------- - -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxDateTime, wxDateTimeArray, WXDLLIMPEXP_BASE); - -// ---------------------------------------------------------------------------- -// wxDateTimeHolidayAuthority: an object of this class will decide whether a -// given date is a holiday and is used by all functions working with "work -// days". -// -// NB: the base class is an ABC, derived classes must implement the pure -// virtual methods to work with the holidays they correspond to. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_BASE wxDateTimeHolidayAuthority; -WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxDateTimeHolidayAuthority *, - wxHolidayAuthoritiesArray, - class WXDLLIMPEXP_BASE); - -class wxDateTimeHolidaysModule; -class WXDLLIMPEXP_BASE wxDateTimeHolidayAuthority -{ -friend class wxDateTimeHolidaysModule; -public: - // returns true if the given date is a holiday - static bool IsHoliday(const wxDateTime& dt); - - // fills the provided array with all holidays in the given range, returns - // the number of them - static size_t GetHolidaysInRange(const wxDateTime& dtStart, - const wxDateTime& dtEnd, - wxDateTimeArray& holidays); - - // clear the list of holiday authorities - static void ClearAllAuthorities(); - - // add a new holiday authority (the pointer will be deleted by - // wxDateTimeHolidayAuthority) - static void AddAuthority(wxDateTimeHolidayAuthority *auth); - - // the base class must have a virtual dtor - virtual ~wxDateTimeHolidayAuthority(); - -protected: - // this function is called to determine whether a given day is a holiday - virtual bool DoIsHoliday(const wxDateTime& dt) const = 0; - - // this function should fill the array with all holidays between the two - // given dates - it is implemented in the base class, but in a very - // inefficient way (it just iterates over all days and uses IsHoliday() for - // each of them), so it must be overridden in the derived class where the - // base class version may be explicitly used if needed - // - // returns the number of holidays in the given range and fills holidays - // array - virtual size_t DoGetHolidaysInRange(const wxDateTime& dtStart, - const wxDateTime& dtEnd, - wxDateTimeArray& holidays) const = 0; - -private: - // all holiday authorities - static wxHolidayAuthoritiesArray ms_authorities; -}; - -// the holidays for this class are all Saturdays and Sundays -class WXDLLIMPEXP_BASE wxDateTimeWorkDays : public wxDateTimeHolidayAuthority -{ -protected: - virtual bool DoIsHoliday(const wxDateTime& dt) const; - virtual size_t DoGetHolidaysInRange(const wxDateTime& dtStart, - const wxDateTime& dtEnd, - wxDateTimeArray& holidays) const; -}; - -// ============================================================================ -// inline functions implementation -// ============================================================================ - -// ---------------------------------------------------------------------------- -// private macros -// ---------------------------------------------------------------------------- - -#define MILLISECONDS_PER_DAY 86400000l - -// some broken compilers (HP-UX CC) refuse to compile the "normal" version, but -// using a temp variable always might prevent other compilers from optimising -// it away - hence use of this ugly macro -#ifndef __HPUX__ - #define MODIFY_AND_RETURN(op) return wxDateTime(*this).op -#else - #define MODIFY_AND_RETURN(op) wxDateTime dt(*this); dt.op; return dt -#endif - -// ---------------------------------------------------------------------------- -// wxDateTime construction -// ---------------------------------------------------------------------------- - -inline bool wxDateTime::IsInStdRange() const -{ - return m_time >= 0l && (m_time / TIME_T_FACTOR) < LONG_MAX; -} - -/* static */ -inline wxDateTime wxDateTime::Now() -{ - struct tm tmstruct; - return wxDateTime(*GetTmNow(&tmstruct)); -} - -/* static */ -inline wxDateTime wxDateTime::Today() -{ - wxDateTime dt(Now()); - dt.ResetTime(); - - return dt; -} - -#if (!(defined(__VISAGECPP__) && __IBMCPP__ >= 400)) -inline wxDateTime& wxDateTime::Set(time_t timet) -{ - // assign first to avoid long multiplication overflow! - m_time = timet - WX_TIME_BASE_OFFSET ; - m_time *= TIME_T_FACTOR; - - return *this; -} -#endif - -inline wxDateTime& wxDateTime::SetToCurrent() -{ - *this = Now(); - return *this; -} - -#if (!(defined(__VISAGECPP__) && __IBMCPP__ >= 400)) -inline wxDateTime::wxDateTime(time_t timet) -{ - Set(timet); -} -#endif - -inline wxDateTime::wxDateTime(const struct tm& tm) -{ - Set(tm); -} - -inline wxDateTime::wxDateTime(const Tm& tm) -{ - Set(tm); -} - -inline wxDateTime::wxDateTime(double jdn) -{ - Set(jdn); -} - -inline wxDateTime& wxDateTime::Set(const Tm& tm) -{ - wxASSERT_MSG( tm.IsValid(), _T("invalid broken down date/time") ); - - return Set(tm.mday, (Month)tm.mon, tm.year, - tm.hour, tm.min, tm.sec, tm.msec); -} - -inline wxDateTime::wxDateTime(wxDateTime_t hour, - wxDateTime_t minute, - wxDateTime_t second, - wxDateTime_t millisec) -{ - Set(hour, minute, second, millisec); -} - -inline wxDateTime::wxDateTime(wxDateTime_t day, - Month month, - int year, - wxDateTime_t hour, - wxDateTime_t minute, - wxDateTime_t second, - wxDateTime_t millisec) -{ - Set(day, month, year, hour, minute, second, millisec); -} - -// ---------------------------------------------------------------------------- -// wxDateTime accessors -// ---------------------------------------------------------------------------- - -inline wxLongLong wxDateTime::GetValue() const -{ - wxASSERT_MSG( IsValid(), _T("invalid wxDateTime")); - - return m_time; -} - -inline time_t wxDateTime::GetTicks() const -{ - wxASSERT_MSG( IsValid(), _T("invalid wxDateTime")); - if ( !IsInStdRange() ) - { - return (time_t)-1; - } - - return (time_t)((m_time / (long)TIME_T_FACTOR).ToLong()) + WX_TIME_BASE_OFFSET; -} - -inline bool wxDateTime::SetToLastWeekDay(WeekDay weekday, - Month month, - int year) -{ - return SetToWeekDay(weekday, -1, month, year); -} - -inline wxDateTime -wxDateTime::GetWeekDayInSameWeek(WeekDay weekday, - WeekFlags WXUNUSED(flags)) const -{ - MODIFY_AND_RETURN( SetToWeekDayInSameWeek(weekday) ); -} - -inline wxDateTime wxDateTime::GetNextWeekDay(WeekDay weekday) const -{ - MODIFY_AND_RETURN( SetToNextWeekDay(weekday) ); -} - -inline wxDateTime wxDateTime::GetPrevWeekDay(WeekDay weekday) const -{ - MODIFY_AND_RETURN( SetToPrevWeekDay(weekday) ); -} - -inline wxDateTime wxDateTime::GetWeekDay(WeekDay weekday, - int n, - Month month, - int year) const -{ - wxDateTime dt(*this); - - return dt.SetToWeekDay(weekday, n, month, year) ? dt : wxInvalidDateTime; -} - -inline wxDateTime wxDateTime::GetLastWeekDay(WeekDay weekday, - Month month, - int year) -{ - wxDateTime dt(*this); - - return dt.SetToLastWeekDay(weekday, month, year) ? dt : wxInvalidDateTime; -} - -inline wxDateTime wxDateTime::GetLastMonthDay(Month month, int year) const -{ - MODIFY_AND_RETURN( SetToLastMonthDay(month, year) ); -} - -inline wxDateTime wxDateTime::GetYearDay(wxDateTime_t yday) const -{ - MODIFY_AND_RETURN( SetToYearDay(yday) ); -} - -// ---------------------------------------------------------------------------- -// wxDateTime comparison -// ---------------------------------------------------------------------------- - -inline bool wxDateTime::IsEqualTo(const wxDateTime& datetime) const -{ - wxASSERT_MSG( IsValid() && datetime.IsValid(), _T("invalid wxDateTime")); - - return m_time == datetime.m_time; -} - -inline bool wxDateTime::IsEarlierThan(const wxDateTime& datetime) const -{ - wxASSERT_MSG( IsValid() && datetime.IsValid(), _T("invalid wxDateTime")); - - return m_time < datetime.m_time; -} - -inline bool wxDateTime::IsLaterThan(const wxDateTime& datetime) const -{ - wxASSERT_MSG( IsValid() && datetime.IsValid(), _T("invalid wxDateTime")); - - return m_time > datetime.m_time; -} - -inline bool wxDateTime::IsStrictlyBetween(const wxDateTime& t1, - const wxDateTime& t2) const -{ - // no need for assert, will be checked by the functions we call - return IsLaterThan(t1) && IsEarlierThan(t2); -} - -inline bool wxDateTime::IsBetween(const wxDateTime& t1, - const wxDateTime& t2) const -{ - // no need for assert, will be checked by the functions we call - return IsEqualTo(t1) || IsEqualTo(t2) || IsStrictlyBetween(t1, t2); -} - -inline bool wxDateTime::IsSameDate(const wxDateTime& dt) const -{ - Tm tm1 = GetTm(), - tm2 = dt.GetTm(); - - return tm1.year == tm2.year && - tm1.mon == tm2.mon && - tm1.mday == tm2.mday; -} - -inline bool wxDateTime::IsSameTime(const wxDateTime& dt) const -{ - // notice that we can't do something like this: - // - // m_time % MILLISECONDS_PER_DAY == dt.m_time % MILLISECONDS_PER_DAY - // - // because we have also to deal with (possibly) different DST settings! - Tm tm1 = GetTm(), - tm2 = dt.GetTm(); - - return tm1.hour == tm2.hour && - tm1.min == tm2.min && - tm1.sec == tm2.sec && - tm1.msec == tm2.msec; -} - -inline bool wxDateTime::IsEqualUpTo(const wxDateTime& dt, - const wxTimeSpan& ts) const -{ - return IsBetween(dt.Subtract(ts), dt.Add(ts)); -} - -// ---------------------------------------------------------------------------- -// wxDateTime arithmetics -// ---------------------------------------------------------------------------- - -inline wxDateTime wxDateTime::Add(const wxTimeSpan& diff) const -{ - wxASSERT_MSG( IsValid(), _T("invalid wxDateTime")); - - return wxDateTime(m_time + diff.GetValue()); -} - -inline wxDateTime& wxDateTime::Add(const wxTimeSpan& diff) -{ - wxASSERT_MSG( IsValid(), _T("invalid wxDateTime")); - - m_time += diff.GetValue(); - - return *this; -} - -inline wxDateTime& wxDateTime::operator+=(const wxTimeSpan& diff) -{ - return Add(diff); -} - -inline wxDateTime wxDateTime::Subtract(const wxTimeSpan& diff) const -{ - wxASSERT_MSG( IsValid(), _T("invalid wxDateTime")); - - return wxDateTime(m_time - diff.GetValue()); -} - -inline wxDateTime& wxDateTime::Subtract(const wxTimeSpan& diff) -{ - wxASSERT_MSG( IsValid(), _T("invalid wxDateTime")); - - m_time -= diff.GetValue(); - - return *this; -} - -inline wxDateTime& wxDateTime::operator-=(const wxTimeSpan& diff) -{ - return Subtract(diff); -} - -inline wxTimeSpan wxDateTime::Subtract(const wxDateTime& datetime) const -{ - wxASSERT_MSG( IsValid() && datetime.IsValid(), _T("invalid wxDateTime")); - - return wxTimeSpan(GetValue() - datetime.GetValue()); -} - -inline wxTimeSpan wxDateTime::operator-(const wxDateTime& dt2) const -{ - return this->Subtract(dt2); -} - -inline wxDateTime wxDateTime::Add(const wxDateSpan& diff) const -{ - return wxDateTime(*this).Add(diff); -} - -inline wxDateTime& wxDateTime::Subtract(const wxDateSpan& diff) -{ - return Add(diff.Negate()); -} - -inline wxDateTime wxDateTime::Subtract(const wxDateSpan& diff) const -{ - return wxDateTime(*this).Subtract(diff); -} - -inline wxDateTime& wxDateTime::operator-=(const wxDateSpan& diff) -{ - return Subtract(diff); -} - -inline wxDateTime& wxDateTime::operator+=(const wxDateSpan& diff) -{ - return Add(diff); -} - -// ---------------------------------------------------------------------------- -// wxDateTime and timezones -// ---------------------------------------------------------------------------- - -inline wxDateTime -wxDateTime::ToTimezone(const wxDateTime::TimeZone& tz, bool noDST) const -{ - MODIFY_AND_RETURN( MakeTimezone(tz, noDST) ); -} - -inline wxDateTime -wxDateTime::FromTimezone(const wxDateTime::TimeZone& tz, bool noDST) const -{ - MODIFY_AND_RETURN( MakeFromTimezone(tz, noDST) ); -} - -// ---------------------------------------------------------------------------- -// wxTimeSpan construction -// ---------------------------------------------------------------------------- - -inline wxTimeSpan::wxTimeSpan(long hours, - long minutes, - wxLongLong seconds, - wxLongLong milliseconds) -{ - // assign first to avoid precision loss - m_diff = hours; - m_diff *= 60l; - m_diff += minutes; - m_diff *= 60l; - m_diff += seconds; - m_diff *= 1000l; - m_diff += milliseconds; -} - -// ---------------------------------------------------------------------------- -// wxTimeSpan accessors -// ---------------------------------------------------------------------------- - -inline wxLongLong wxTimeSpan::GetSeconds() const -{ - return m_diff / 1000l; -} - -inline int wxTimeSpan::GetMinutes() const -{ - // explicit cast to int suppresses a warning with CodeWarrior and possibly - // others (changing the return type to long from int is impossible in 2.8) - return (int)((GetSeconds() / 60l).GetLo()); -} - -inline int wxTimeSpan::GetHours() const -{ - return GetMinutes() / 60; -} - -inline int wxTimeSpan::GetDays() const -{ - return GetHours() / 24; -} - -inline int wxTimeSpan::GetWeeks() const -{ - return GetDays() / 7; -} - -// ---------------------------------------------------------------------------- -// wxTimeSpan arithmetics -// ---------------------------------------------------------------------------- - -inline wxTimeSpan wxTimeSpan::Add(const wxTimeSpan& diff) const -{ - return wxTimeSpan(m_diff + diff.GetValue()); -} - -inline wxTimeSpan& wxTimeSpan::Add(const wxTimeSpan& diff) -{ - m_diff += diff.GetValue(); - - return *this; -} - -inline wxTimeSpan wxTimeSpan::Subtract(const wxTimeSpan& diff) const -{ - return wxTimeSpan(m_diff - diff.GetValue()); -} - -inline wxTimeSpan& wxTimeSpan::Subtract(const wxTimeSpan& diff) -{ - m_diff -= diff.GetValue(); - - return *this; -} - -inline wxTimeSpan& wxTimeSpan::Multiply(int n) -{ - m_diff *= (long)n; - - return *this; -} - -inline wxTimeSpan wxTimeSpan::Multiply(int n) const -{ - return wxTimeSpan(m_diff * (long)n); -} - -inline wxTimeSpan wxTimeSpan::Abs() const -{ - return wxTimeSpan(GetValue().Abs()); -} - -inline bool wxTimeSpan::IsEqualTo(const wxTimeSpan& ts) const -{ - return GetValue() == ts.GetValue(); -} - -inline bool wxTimeSpan::IsLongerThan(const wxTimeSpan& ts) const -{ - return GetValue().Abs() > ts.GetValue().Abs(); -} - -// ---------------------------------------------------------------------------- -// wxDateSpan -// ---------------------------------------------------------------------------- - -inline wxDateSpan& wxDateSpan::operator+=(const wxDateSpan& other) -{ - m_years += other.m_years; - m_months += other.m_months; - m_weeks += other.m_weeks; - m_days += other.m_days; - - return *this; -} - -inline wxDateSpan& wxDateSpan::Add(const wxDateSpan& other) -{ - return *this += other; -} - -inline wxDateSpan wxDateSpan::Add(const wxDateSpan& other) const -{ - wxDateSpan ds(*this); - ds.Add(other); - return ds; -} - -inline wxDateSpan& wxDateSpan::Multiply(int factor) -{ - m_years *= factor; - m_months *= factor; - m_weeks *= factor; - m_days *= factor; - - return *this; -} - -inline wxDateSpan wxDateSpan::Multiply(int factor) const -{ - wxDateSpan ds(*this); - ds.Multiply(factor); - return ds; -} - -inline wxDateSpan wxDateSpan::Negate() const -{ - return wxDateSpan(-m_years, -m_months, -m_weeks, -m_days); -} - -inline wxDateSpan& wxDateSpan::Neg() -{ - m_years = -m_years; - m_months = -m_months; - m_weeks = -m_weeks; - m_days = -m_days; - - return *this; -} - -inline wxDateSpan& wxDateSpan::operator-=(const wxDateSpan& other) -{ - return *this += other.Negate(); -} - -inline wxDateSpan& wxDateSpan::Subtract(const wxDateSpan& other) -{ - return *this -= other; -} - -inline wxDateSpan wxDateSpan::Subtract(const wxDateSpan& other) const -{ - wxDateSpan ds(*this); - ds.Subtract(other); - return ds; -} - -#undef MILLISECONDS_PER_DAY - -#undef MODIFY_AND_RETURN - -// ============================================================================ -// binary operators -// ============================================================================ - -// ---------------------------------------------------------------------------- -// wxTimeSpan operators -// ---------------------------------------------------------------------------- - -wxTimeSpan WXDLLIMPEXP_BASE operator*(int n, const wxTimeSpan& ts); - -// ---------------------------------------------------------------------------- -// wxDateSpan -// ---------------------------------------------------------------------------- - -wxDateSpan WXDLLIMPEXP_BASE operator*(int n, const wxDateSpan& ds); - -// ============================================================================ -// other helper functions -// ============================================================================ - -// ---------------------------------------------------------------------------- -// iteration helpers: can be used to write a for loop over enum variable like -// this: -// for ( m = wxDateTime::Jan; m < wxDateTime::Inv_Month; wxNextMonth(m) ) -// ---------------------------------------------------------------------------- - -WXDLLIMPEXP_BASE void wxNextMonth(wxDateTime::Month& m); -WXDLLIMPEXP_BASE void wxPrevMonth(wxDateTime::Month& m); -WXDLLIMPEXP_BASE void wxNextWDay(wxDateTime::WeekDay& wd); -WXDLLIMPEXP_BASE void wxPrevWDay(wxDateTime::WeekDay& wd); - -#endif // wxUSE_DATETIME - -#endif // _WX_DATETIME_H diff --git a/desmume/src/windows/wx/include/wx/datstrm.h b/desmume/src/windows/wx/include/wx/datstrm.h deleted file mode 100644 index 709e1007b..000000000 --- a/desmume/src/windows/wx/include/wx/datstrm.h +++ /dev/null @@ -1,170 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: datstrm.h -// Purpose: Data stream classes -// Author: Guilhem Lavaux -// Modified by: Mickael Gilabert -// Created: 28/06/1998 -// RCS-ID: $Id: datstrm.h 38576 2006-04-05 16:10:08Z VZ $ -// Copyright: (c) Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DATSTREAM_H_ -#define _WX_DATSTREAM_H_ - -#include "wx/stream.h" -#include "wx/longlong.h" -#include "wx/convauto.h" - -#if wxUSE_STREAMS - -class WXDLLIMPEXP_BASE wxDataInputStream -{ -public: -#if wxUSE_UNICODE - wxDataInputStream(wxInputStream& s, const wxMBConv& conv = wxConvAuto()); -#else - wxDataInputStream(wxInputStream& s); -#endif - ~wxDataInputStream(); - - bool IsOk() { return m_input->IsOk(); } - -#if wxHAS_INT64 - wxUint64 Read64(); -#endif -#if wxUSE_LONGLONG - wxLongLong ReadLL(); -#endif - wxUint32 Read32(); - wxUint16 Read16(); - wxUint8 Read8(); - double ReadDouble(); - wxString ReadString(); - -#if wxHAS_INT64 - void Read64(wxUint64 *buffer, size_t size); - void Read64(wxInt64 *buffer, size_t size); -#endif -#if defined(wxLongLong_t) && wxUSE_LONGLONG - void Read64(wxULongLong *buffer, size_t size); - void Read64(wxLongLong *buffer, size_t size); -#endif -#if wxUSE_LONGLONG - void ReadLL(wxULongLong *buffer, size_t size); - void ReadLL(wxLongLong *buffer, size_t size); -#endif - void Read32(wxUint32 *buffer, size_t size); - void Read16(wxUint16 *buffer, size_t size); - void Read8(wxUint8 *buffer, size_t size); - void ReadDouble(double *buffer, size_t size); - - wxDataInputStream& operator>>(wxString& s); - wxDataInputStream& operator>>(wxInt8& c); - wxDataInputStream& operator>>(wxInt16& i); - wxDataInputStream& operator>>(wxInt32& i); - wxDataInputStream& operator>>(wxUint8& c); - wxDataInputStream& operator>>(wxUint16& i); - wxDataInputStream& operator>>(wxUint32& i); -#if wxHAS_INT64 - wxDataInputStream& operator>>(wxUint64& i); - wxDataInputStream& operator>>(wxInt64& i); -#endif -#if defined(wxLongLong_t) && wxUSE_LONGLONG - wxDataInputStream& operator>>(wxULongLong& i); - wxDataInputStream& operator>>(wxLongLong& i); -#endif - wxDataInputStream& operator>>(double& i); - wxDataInputStream& operator>>(float& f); - - void BigEndianOrdered(bool be_order) { m_be_order = be_order; } - -protected: - wxInputStream *m_input; - bool m_be_order; -#if wxUSE_UNICODE - wxMBConv *m_conv; -#endif - - DECLARE_NO_COPY_CLASS(wxDataInputStream) -}; - -class WXDLLIMPEXP_BASE wxDataOutputStream -{ -public: -#if wxUSE_UNICODE - wxDataOutputStream(wxOutputStream& s, const wxMBConv& conv = wxConvAuto()); -#else - wxDataOutputStream(wxOutputStream& s); -#endif - ~wxDataOutputStream(); - - bool IsOk() { return m_output->IsOk(); } - -#if wxHAS_INT64 - void Write64(wxUint64 i); - void Write64(wxInt64 i); -#endif -#if wxUSE_LONGLONG - void WriteLL(const wxLongLong &ll); - void WriteLL(const wxULongLong &ll); -#endif - void Write32(wxUint32 i); - void Write16(wxUint16 i); - void Write8(wxUint8 i); - void WriteDouble(double d); - void WriteString(const wxString& string); - -#if wxHAS_INT64 - void Write64(const wxUint64 *buffer, size_t size); - void Write64(const wxInt64 *buffer, size_t size); -#endif -#if defined(wxLongLong_t) && wxUSE_LONGLONG - void Write64(const wxULongLong *buffer, size_t size); - void Write64(const wxLongLong *buffer, size_t size); -#endif -#if wxUSE_LONGLONG - void WriteLL(const wxULongLong *buffer, size_t size); - void WriteLL(const wxLongLong *buffer, size_t size); -#endif - void Write32(const wxUint32 *buffer, size_t size); - void Write16(const wxUint16 *buffer, size_t size); - void Write8(const wxUint8 *buffer, size_t size); - void WriteDouble(const double *buffer, size_t size); - - wxDataOutputStream& operator<<(const wxChar *string); - wxDataOutputStream& operator<<(const wxString& string); - wxDataOutputStream& operator<<(wxInt8 c); - wxDataOutputStream& operator<<(wxInt16 i); - wxDataOutputStream& operator<<(wxInt32 i); - wxDataOutputStream& operator<<(wxUint8 c); - wxDataOutputStream& operator<<(wxUint16 i); - wxDataOutputStream& operator<<(wxUint32 i); -#if wxHAS_INT64 - wxDataOutputStream& operator<<(wxUint64 i); - wxDataOutputStream& operator<<(wxInt64 i); -#endif -#if defined(wxLongLong_t) && wxUSE_LONGLONG - wxDataOutputStream& operator<<(const wxULongLong &i); - wxDataOutputStream& operator<<(const wxLongLong &i); -#endif - wxDataOutputStream& operator<<(double f); - wxDataOutputStream& operator<<(float f); - - void BigEndianOrdered(bool be_order) { m_be_order = be_order; } - -protected: - wxOutputStream *m_output; - bool m_be_order; -#if wxUSE_UNICODE - wxMBConv *m_conv; -#endif - - DECLARE_NO_COPY_CLASS(wxDataOutputStream) -}; - -#endif - // wxUSE_STREAMS - -#endif - // _WX_DATSTREAM_H_ diff --git a/desmume/src/windows/wx/include/wx/db.h b/desmume/src/windows/wx/include/wx/db.h deleted file mode 100644 index 013bc2276..000000000 --- a/desmume/src/windows/wx/include/wx/db.h +++ /dev/null @@ -1,853 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/db.h -// Purpose: Header file wxDb class. The wxDb class represents a connection -// to an ODBC data source. The wxDb class allows operations on the data -// source such as opening and closing the data source. -// Author: Doug Card -// Modified by: George Tasker -// Bart Jourquin -// Mark Johnson, wxWindows@mj10777.de -// Mods: Dec, 1998: -// -Added support for SQL statement logging and database cataloging -// April, 1999 -// -Added QUERY_ONLY mode support to reduce default number of cursors -// -Added additional SQL logging code -// -Added DEBUG-ONLY tracking of Ctable objects to detect orphaned DB connections -// -Set ODBC option to only read committed writes to the DB so all -// databases operate the same in that respect -// -// Created: 9.96 -// RCS-ID: $Id: db.h 56697 2008-11-07 22:45:47Z VZ $ -// Copyright: (c) 1996 Remstar International, Inc. -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DB_H_ -#define _WX_DB_H_ - - -// BJO 20000503: introduce new GetColumns members which are more database independent and -// return columns in the order they were created -#define OLD_GETCOLUMNS 1 -#define EXPERIMENTAL_WXDB_FUNCTIONS 1 - -#include "wx/defs.h" -#include "wx/string.h" - -#if defined(__VISUALC__) - // we need to include standard Windows headers but we can't include - // directly when using MFC because it includes it itself in a - // different manner - #if wxUSE_MFC - #include - #else // !wxUSE_MFC - #include "wx/msw/wrapwin.h" - #endif // wxUSE_MFC/!wxUSE_MFC - - // If you use the wxDbCreateDataSource() function with MSW/VC6, - // you cannot use the iODBC headers, you must use the VC headers, - // plus the odbcinst.h header - gt Nov 2 2000 - // - // Must add "odbccp32.lib" in \wx2\wxWidgets\src\makevc.env to the WINLIBS= line - // - #include "sql.h" - #include "sqlext.h" - //#if wxUSE_UNICODE - // #include - //#endif - #include "odbcinst.h" -#else - #if defined(__WINDOWS__) && ( defined(HAVE_W32API_H) || defined(__BORLANDC__) || defined (__DMC__)) - #include "wx/msw/wrapwin.h" - #endif - extern "C" { - #if defined(wxUSE_BUILTIN_IODBC) && wxUSE_BUILTIN_IODBC - // Use the ones from the library - #include "wx/isql.h" - #include "wx/isqlext.h" - // Not available in v2.x of iODBC - #ifndef __WXMSW__ - #if wxUSE_UNICODE - typedef wxChar SQLTCHAR; - #else - typedef UCHAR SQLTCHAR; - #endif - #endif - #else // !wxUSE_BUILTIN_IODBC - // SQL headers define BOOL if it's not defined yet but BOOL is also - // defined in many other places on other systems (Motif, at least on - // OpenVMS; Cocoa and X11) so prevent the problem by defining it before - // including these headers - #ifndef BOOL - #define BOOL int - #include - #include - #undef BOOL - #else - #include - #include - #endif - #endif // wxUSE_BUILTIN_IODBC/!wxUSE_BUILTIN_IODBC - } -#endif - -#if wxUSE_UNICODE -#define SQL_C_WXCHAR SQL_C_WCHAR -#else -#define SQL_C_WXCHAR SQL_C_CHAR -#endif - -#ifdef __DIGITALMARS__ -#if wxUSE_UNICODE -typedef wxChar SQLTCHAR; -#else -typedef UCHAR SQLTCHAR; -#endif -#endif - -typedef float SFLOAT; -typedef double SDOUBLE; -typedef unsigned int UINT; -#define ULONG UDWORD - -#ifndef wxODBC_FWD_ONLY_CURSORS -#define wxODBC_FWD_ONLY_CURSORS 1 -#endif - -enum enumDummy {enumDum1}; - -#ifndef SQL_C_BOOLEAN - #define SQL_C_BOOLEAN(datatype) (sizeof(datatype) == 1 ? SQL_C_UTINYINT : (sizeof(datatype) == 2 ? SQL_C_USHORT : SQL_C_ULONG)) -#endif - -#ifndef SQL_C_ENUM - #define SQL_C_ENUM (sizeof(enumDummy) == 2 ? SQL_C_USHORT : SQL_C_ULONG) -#endif - -// NOTE: If SQL_C_BLOB is defined, and it is not SQL_C_BINARY, iODBC 2.x -// may not function correctly. Likely best to use SQL_C_BINARY direct -#ifndef SQL_C_BLOB - #ifdef SQL_C_BINARY - #define SQL_C_BLOB SQL_C_BINARY - #endif -#endif - -#ifndef _WIN64 -#ifndef SQLLEN -#define SQLLEN SQLINTEGER -#endif -#ifndef SQLULEN -#define SQLULEN SQLUINTEGER -#endif -#endif - -const int wxDB_PATH_MAX = 254; - -extern WXDLLIMPEXP_DATA_ODBC(wxChar const *) SQL_LOG_FILENAME; -extern WXDLLIMPEXP_DATA_ODBC(wxChar const *) SQL_CATALOG_FILENAME; - -// Database Globals -const int DB_TYPE_NAME_LEN = 40; -const int DB_MAX_STATEMENT_LEN = 4096; -const int DB_MAX_WHERE_CLAUSE_LEN = 2048; -const int DB_MAX_ERROR_MSG_LEN = 512; -const int DB_MAX_ERROR_HISTORY = 5; -const int DB_MAX_TABLE_NAME_LEN = 128; -const int DB_MAX_COLUMN_NAME_LEN = 128; - -const int DB_DATA_TYPE_VARCHAR = 1; -const int DB_DATA_TYPE_INTEGER = 2; -const int DB_DATA_TYPE_FLOAT = 3; -const int DB_DATA_TYPE_DATE = 4; -const int DB_DATA_TYPE_BLOB = 5; -const int DB_DATA_TYPE_MEMO = 6; - -const int DB_SELECT_KEYFIELDS = 1; -const int DB_SELECT_WHERE = 2; -const int DB_SELECT_MATCHING = 3; -const int DB_SELECT_STATEMENT = 4; - -const int DB_UPD_KEYFIELDS = 1; -const int DB_UPD_WHERE = 2; - -const int DB_DEL_KEYFIELDS = 1; -const int DB_DEL_WHERE = 2; -const int DB_DEL_MATCHING = 3; - -const int DB_WHERE_KEYFIELDS = 1; -const int DB_WHERE_MATCHING = 2; - -const int DB_GRANT_SELECT = 1; -const int DB_GRANT_INSERT = 2; -const int DB_GRANT_UPDATE = 4; -const int DB_GRANT_DELETE = 8; -const int DB_GRANT_ALL = DB_GRANT_SELECT | DB_GRANT_INSERT | DB_GRANT_UPDATE | DB_GRANT_DELETE; - -// ODBC Error codes (derived from ODBC SqlState codes) -enum wxODBC_ERRORS -{ - DB_FAILURE = 0, - DB_SUCCESS = 1, - DB_ERR_NOT_IN_USE, - DB_ERR_GENERAL_WARNING, // SqlState = '01000' - DB_ERR_DISCONNECT_ERROR, // SqlState = '01002' - DB_ERR_DATA_TRUNCATED, // SqlState = '01004' - DB_ERR_PRIV_NOT_REVOKED, // SqlState = '01006' - DB_ERR_INVALID_CONN_STR_ATTR, // SqlState = '01S00' - DB_ERR_ERROR_IN_ROW, // SqlState = '01S01' - DB_ERR_OPTION_VALUE_CHANGED, // SqlState = '01S02' - DB_ERR_NO_ROWS_UPD_OR_DEL, // SqlState = '01S03' - DB_ERR_MULTI_ROWS_UPD_OR_DEL, // SqlState = '01S04' - DB_ERR_WRONG_NO_OF_PARAMS, // SqlState = '07001' - DB_ERR_DATA_TYPE_ATTR_VIOL, // SqlState = '07006' - DB_ERR_UNABLE_TO_CONNECT, // SqlState = '08001' - DB_ERR_CONNECTION_IN_USE, // SqlState = '08002' - DB_ERR_CONNECTION_NOT_OPEN, // SqlState = '08003' - DB_ERR_REJECTED_CONNECTION, // SqlState = '08004' - DB_ERR_CONN_FAIL_IN_TRANS, // SqlState = '08007' - DB_ERR_COMM_LINK_FAILURE, // SqlState = '08S01' - DB_ERR_INSERT_VALUE_LIST_MISMATCH, // SqlState = '21S01' - DB_ERR_DERIVED_TABLE_MISMATCH, // SqlState = '21S02' - DB_ERR_STRING_RIGHT_TRUNC, // SqlState = '22001' - DB_ERR_NUMERIC_VALUE_OUT_OF_RNG, // SqlState = '22003' - DB_ERR_ERROR_IN_ASSIGNMENT, // SqlState = '22005' - DB_ERR_DATETIME_FLD_OVERFLOW, // SqlState = '22008' - DB_ERR_DIVIDE_BY_ZERO, // SqlState = '22012' - DB_ERR_STR_DATA_LENGTH_MISMATCH, // SqlState = '22026' - DB_ERR_INTEGRITY_CONSTRAINT_VIOL, // SqlState = '23000' - DB_ERR_INVALID_CURSOR_STATE, // SqlState = '24000' - DB_ERR_INVALID_TRANS_STATE, // SqlState = '25000' - DB_ERR_INVALID_AUTH_SPEC, // SqlState = '28000' - DB_ERR_INVALID_CURSOR_NAME, // SqlState = '34000' - DB_ERR_SYNTAX_ERROR_OR_ACCESS_VIOL, // SqlState = '37000' - DB_ERR_DUPLICATE_CURSOR_NAME, // SqlState = '3C000' - DB_ERR_SERIALIZATION_FAILURE, // SqlState = '40001' - DB_ERR_SYNTAX_ERROR_OR_ACCESS_VIOL2, // SqlState = '42000' - DB_ERR_OPERATION_ABORTED, // SqlState = '70100' - DB_ERR_UNSUPPORTED_FUNCTION, // SqlState = 'IM001' - DB_ERR_NO_DATA_SOURCE, // SqlState = 'IM002' - DB_ERR_DRIVER_LOAD_ERROR, // SqlState = 'IM003' - DB_ERR_SQLALLOCENV_FAILED, // SqlState = 'IM004' - DB_ERR_SQLALLOCCONNECT_FAILED, // SqlState = 'IM005' - DB_ERR_SQLSETCONNECTOPTION_FAILED, // SqlState = 'IM006' - DB_ERR_NO_DATA_SOURCE_DLG_PROHIB, // SqlState = 'IM007' - DB_ERR_DIALOG_FAILED, // SqlState = 'IM008' - DB_ERR_UNABLE_TO_LOAD_TRANSLATION_DLL, // SqlState = 'IM009' - DB_ERR_DATA_SOURCE_NAME_TOO_LONG, // SqlState = 'IM010' - DB_ERR_DRIVER_NAME_TOO_LONG, // SqlState = 'IM011' - DB_ERR_DRIVER_KEYWORD_SYNTAX_ERROR, // SqlState = 'IM012' - DB_ERR_TRACE_FILE_ERROR, // SqlState = 'IM013' - DB_ERR_TABLE_OR_VIEW_ALREADY_EXISTS, // SqlState = 'S0001' - DB_ERR_TABLE_NOT_FOUND, // SqlState = 'S0002' - DB_ERR_INDEX_ALREADY_EXISTS, // SqlState = 'S0011' - DB_ERR_INDEX_NOT_FOUND, // SqlState = 'S0012' - DB_ERR_COLUMN_ALREADY_EXISTS, // SqlState = 'S0021' - DB_ERR_COLUMN_NOT_FOUND, // SqlState = 'S0022' - DB_ERR_NO_DEFAULT_FOR_COLUMN, // SqlState = 'S0023' - DB_ERR_GENERAL_ERROR, // SqlState = 'S1000' - DB_ERR_MEMORY_ALLOCATION_FAILURE, // SqlState = 'S1001' - DB_ERR_INVALID_COLUMN_NUMBER, // SqlState = 'S1002' - DB_ERR_PROGRAM_TYPE_OUT_OF_RANGE, // SqlState = 'S1003' - DB_ERR_SQL_DATA_TYPE_OUT_OF_RANGE, // SqlState = 'S1004' - DB_ERR_OPERATION_CANCELLED, // SqlState = 'S1008' - DB_ERR_INVALID_ARGUMENT_VALUE, // SqlState = 'S1009' - DB_ERR_FUNCTION_SEQUENCE_ERROR, // SqlState = 'S1010' - DB_ERR_OPERATION_INVALID_AT_THIS_TIME, // SqlState = 'S1011' - DB_ERR_INVALID_TRANS_OPERATION_CODE, // SqlState = 'S1012' - DB_ERR_NO_CURSOR_NAME_AVAIL, // SqlState = 'S1015' - DB_ERR_INVALID_STR_OR_BUF_LEN, // SqlState = 'S1090' - DB_ERR_DESCRIPTOR_TYPE_OUT_OF_RANGE, // SqlState = 'S1091' - DB_ERR_OPTION_TYPE_OUT_OF_RANGE, // SqlState = 'S1092' - DB_ERR_INVALID_PARAM_NO, // SqlState = 'S1093' - DB_ERR_INVALID_SCALE_VALUE, // SqlState = 'S1094' - DB_ERR_FUNCTION_TYPE_OUT_OF_RANGE, // SqlState = 'S1095' - DB_ERR_INF_TYPE_OUT_OF_RANGE, // SqlState = 'S1096' - DB_ERR_COLUMN_TYPE_OUT_OF_RANGE, // SqlState = 'S1097' - DB_ERR_SCOPE_TYPE_OUT_OF_RANGE, // SqlState = 'S1098' - DB_ERR_NULLABLE_TYPE_OUT_OF_RANGE, // SqlState = 'S1099' - DB_ERR_UNIQUENESS_OPTION_TYPE_OUT_OF_RANGE, // SqlState = 'S1100' - DB_ERR_ACCURACY_OPTION_TYPE_OUT_OF_RANGE, // SqlState = 'S1101' - DB_ERR_DIRECTION_OPTION_OUT_OF_RANGE, // SqlState = 'S1103' - DB_ERR_INVALID_PRECISION_VALUE, // SqlState = 'S1104' - DB_ERR_INVALID_PARAM_TYPE, // SqlState = 'S1105' - DB_ERR_FETCH_TYPE_OUT_OF_RANGE, // SqlState = 'S1106' - DB_ERR_ROW_VALUE_OUT_OF_RANGE, // SqlState = 'S1107' - DB_ERR_CONCURRENCY_OPTION_OUT_OF_RANGE, // SqlState = 'S1108' - DB_ERR_INVALID_CURSOR_POSITION, // SqlState = 'S1109' - DB_ERR_INVALID_DRIVER_COMPLETION, // SqlState = 'S1110' - DB_ERR_INVALID_BOOKMARK_VALUE, // SqlState = 'S1111' - DB_ERR_DRIVER_NOT_CAPABLE, // SqlState = 'S1C00' - DB_ERR_TIMEOUT_EXPIRED // SqlState = 'S1T00' -}; - -#ifndef MAXNAME - #define MAXNAME 31 -#endif - -#ifndef SQL_MAX_AUTHSTR_LEN - // There does not seem to be a standard for this, so I am - // defaulting to the value that MS uses - #define SQL_MAX_AUTHSTR_LEN MAXNAME -#endif - -#ifndef SQL_MAX_CONNECTSTR_LEN - // There does not seem to be a standard for this, so I am - // defaulting to the value that MS recommends - #define SQL_MAX_CONNECTSTR_LEN 1024 -#endif - - -class WXDLLIMPEXP_ODBC wxDbConnectInf -{ - private: - bool freeHenvOnDestroy; - bool useConnectionStr; - - public: - HENV Henv; - wxChar Dsn[SQL_MAX_DSN_LENGTH+1]; // Data Source Name - wxChar Uid[SQL_MAX_USER_NAME_LEN+1]; // User ID - wxChar AuthStr[SQL_MAX_AUTHSTR_LEN+1]; // Authorization string (password) - wxChar ConnectionStr[SQL_MAX_CONNECTSTR_LEN+1]; // Connection string (password) - - wxString Description; // Not sure what the max length is - wxString FileType; // Not sure what the max length is - - // Optionals needed for some databases like dBase - wxString DefaultDir; // Directory that db file resides in - - public: - - wxDbConnectInf(); - wxDbConnectInf(HENV henv, const wxString &dsn, const wxString &userID=wxEmptyString, - const wxString &password=wxEmptyString, const wxString &defaultDir=wxEmptyString, - const wxString &description=wxEmptyString, const wxString &fileType=wxEmptyString); - - ~wxDbConnectInf(); - - bool Initialize(); - - bool AllocHenv(); - void FreeHenv(); - - // Accessors - const HENV &GetHenv() { return Henv; } - - const wxChar *GetDsn() { return Dsn; } - - const wxChar *GetUid() { return Uid; } - const wxChar *GetUserID() { return Uid; } - - const wxChar *GetAuthStr() { return AuthStr; } - const wxChar *GetPassword() { return AuthStr; } - - const wxChar *GetConnectionStr() { return ConnectionStr; } - bool UseConnectionStr() { return useConnectionStr; } - - const wxChar *GetDescription() { return Description; } - const wxChar *GetFileType() { return FileType; } - const wxChar *GetDefaultDir() { return DefaultDir; } - - void SetHenv(const HENV henv) { Henv = henv; } - - void SetDsn(const wxString &dsn); - - void SetUserID(const wxString &userID); - void SetUid(const wxString &uid) { SetUserID(uid); } - - void SetPassword(const wxString &password); - void SetAuthStr(const wxString &authstr) { SetPassword(authstr); } - - void SetConnectionStr(const wxString &connectStr); - - void SetDescription(const wxString &desc) { Description = desc; } - void SetFileType(const wxString &fileType) { FileType = fileType; } - void SetDefaultDir(const wxString &defDir) { DefaultDir = defDir; } -}; // class wxDbConnectInf - - -struct WXDLLIMPEXP_ODBC wxDbSqlTypeInfo -{ - wxString TypeName; - SWORD FsqlType; - long Precision; - short CaseSensitive; - short MaximumScale; -}; - - -class WXDLLIMPEXP_ODBC wxDbColFor -{ -public: - wxString s_Field; // Formatted String for Output - wxString s_Format[7]; // Formatted Objects - TIMESTAMP has the biggest (7) - wxString s_Amount[7]; // Formatted Objects - amount of things that can be formatted - int i_Amount[7]; // Formatted Objects - TT MM YYYY HH MM SS m - int i_Nation; // 0 = timestamp , 1=EU, 2=UK, 3=International, 4=US - int i_dbDataType; // conversion of the 'sqlDataType' to the generic data type used by these classes - SWORD i_sqlDataType; - - wxDbColFor(); - ~wxDbColFor(){} - - void Initialize(); - int Format(int Nation, int dbDataType, SWORD sqlDataType, short columnLength, short decimalDigits); -}; - - -class WXDLLIMPEXP_ODBC wxDbColInf -{ -public: - wxChar catalog[128+1]; - wxChar schema[128+1]; - wxChar tableName[DB_MAX_TABLE_NAME_LEN+1]; - wxChar colName[DB_MAX_COLUMN_NAME_LEN+1]; - SWORD sqlDataType; - wxChar typeName[128+1]; - SWORD columnLength; - SWORD bufferSize; - short decimalDigits; - short numPrecRadix; - short nullable; - wxChar remarks[254+1]; - int dbDataType; // conversion of the 'sqlDataType' to the generic data type used by these classes - // mj10777.19991224 : new - int PkCol; // Primary key column 0=No; 1= First Key, 2 = Second Key etc. - wxChar PkTableName[DB_MAX_TABLE_NAME_LEN+1]; // Tables that use this PKey as a FKey - int FkCol; // Foreign key column 0=No; 1= First Key, 2 = Second Key etc. - wxChar FkTableName[DB_MAX_TABLE_NAME_LEN+1]; // Foreign key table name - wxDbColFor *pColFor; // How should this columns be formatted - - wxDbColInf(); - ~wxDbColInf(); - - bool Initialize(); -}; - - -class WXDLLIMPEXP_ODBC wxDbTableInf // Description of a Table -{ -public: - wxChar tableName[DB_MAX_TABLE_NAME_LEN+1]; - wxChar tableType[254+1]; // "TABLE" or "SYSTEM TABLE" etc. - wxChar tableRemarks[254+1]; - UWORD numCols; // How many Columns does this Table have: GetColumnCount(..); - wxDbColInf *pColInf; // pColInf = NULL ; User can later call GetColumns(..); - - wxDbTableInf(); - ~wxDbTableInf(); - - bool Initialize(); -}; - - -class WXDLLIMPEXP_ODBC wxDbInf // Description of a Database -{ -public: - wxChar catalog[128+1]; - wxChar schema[128+1]; - int numTables; // How many tables does this database have - wxDbTableInf *pTableInf; // pTableInf = new wxDbTableInf[numTables]; - - wxDbInf(); - ~wxDbInf(); - - bool Initialize(); -}; - - -enum wxDbSqlLogState -{ - sqlLogOFF, - sqlLogON -}; - -// These are the databases currently tested and working with these classes -// See the comments in wxDb::Dbms() for exceptions/issues with -// each of these database engines -enum wxDBMS -{ - dbmsUNIDENTIFIED, - dbmsORACLE, - dbmsSYBASE_ASA, // Adaptive Server Anywhere - dbmsSYBASE_ASE, // Adaptive Server Enterprise - dbmsMS_SQL_SERVER, - dbmsMY_SQL, - dbmsPOSTGRES, - dbmsACCESS, - dbmsDBASE, - dbmsINFORMIX, - dbmsVIRTUOSO, - dbmsDB2, - dbmsINTERBASE, - dbmsPERVASIVE_SQL, - dbmsXBASE_SEQUITER, - dbmsFIREBIRD, - dbmsMAXDB, - dbmsFuture1, - dbmsFuture2, - dbmsFuture3, - dbmsFuture4, - dbmsFuture5, - dbmsFuture6, - dbmsFuture7, - dbmsFuture8, - dbmsFuture9, - dbmsFuture10 -}; - - -// The wxDb::errorList is copied to this variable when the wxDb object -// is closed. This way, the error list is still available after the -// database object is closed. This is necessary if the database -// connection fails so the calling application can show the operator -// why the connection failed. Note: as each wxDb object is closed, it -// will overwrite the errors of the previously destroyed wxDb object in -// this variable. - -extern WXDLLIMPEXP_DATA_ODBC(wxChar) - DBerrorList[DB_MAX_ERROR_HISTORY][DB_MAX_ERROR_MSG_LEN+1]; - - -class WXDLLIMPEXP_ODBC wxDb -{ -private: - bool dbIsOpen; - bool dbIsCached; // Was connection created by caching functions - bool dbOpenedWithConnectionString; // Was the database connection opened with a connection string - wxString dsn; // Data source name - wxString uid; // User ID - wxString authStr; // Authorization string (password) - wxString inConnectionStr; // Connection string used to connect to the database - wxString outConnectionStr;// Connection string returned by the database when a connection is successfully opened - FILE *fpSqlLog; // Sql Log file pointer - wxDbSqlLogState sqlLogState; // On or Off - bool fwdOnlyCursors; - wxDBMS dbmsType; // Type of datasource - i.e. Oracle, dBase, SQLServer, etc - - // Private member functions - bool getDbInfo(bool failOnDataTypeUnsupported=true); - bool getDataTypeInfo(SWORD fSqlType, wxDbSqlTypeInfo &structSQLTypeInfo); - bool setConnectionOptions(void); - void logError(const wxString &errMsg, const wxString &SQLState); - const wxChar *convertUserID(const wxChar *userID, wxString &UserID); - bool determineDataTypes(bool failOnDataTypeUnsupported); - void initialize(); - bool open(bool failOnDataTypeUnsupported=true); - -#if !wxODBC_BACKWARD_COMPATABILITY - // ODBC handles - HENV henv; // ODBC Environment handle - HDBC hdbc; // ODBC DB Connection handle - HSTMT hstmt; // ODBC Statement handle - - //Error reporting mode - bool silent; - - // Number of Ctable objects connected to this db object. FOR INTERNAL USE ONLY!!! - unsigned int nTables; - - // Information about logical data types VARCHAR, INTEGER, FLOAT and DATE. - // - // This information is obtained from the ODBC driver by use of the - // SQLGetTypeInfo() function. The key piece of information is the - // type name the data source uses for each logical data type. - // e.g. VARCHAR; Oracle calls it VARCHAR2. - wxDbSqlTypeInfo typeInfVarchar; - wxDbSqlTypeInfo typeInfInteger; - wxDbSqlTypeInfo typeInfFloat; - wxDbSqlTypeInfo typeInfDate; - wxDbSqlTypeInfo typeInfBlob; - wxDbSqlTypeInfo typeInfMemo; -#endif - -public: - - void setCached(bool cached) { dbIsCached = cached; } // This function must only be called by wxDbGetConnection() and wxDbCloseConnections!!! - bool IsCached() { return dbIsCached; } - - bool GetDataTypeInfo(SWORD fSqlType, wxDbSqlTypeInfo &structSQLTypeInfo) - { return getDataTypeInfo(fSqlType, structSQLTypeInfo); } - -#if wxODBC_BACKWARD_COMPATABILITY - // ODBC handles - HENV henv; // ODBC Environment handle - HDBC hdbc; // ODBC DB Connection handle - HSTMT hstmt; // ODBC Statement handle - - //Error reporting mode - bool silent; - - // Number of Ctable objects connected to this db object. FOR INTERNAL USE ONLY!!! - unsigned int nTables; -#endif - - // The following structure contains database information gathered from the - // datasource when the datasource is first opened. - struct - { - wxChar dbmsName[40]; // Name of the dbms product - wxChar dbmsVer[64]; // Version # of the dbms product - wxChar driverName[40]; // Driver name - wxChar odbcVer[60]; // ODBC version of the driver - wxChar drvMgrOdbcVer[60]; // ODBC version of the driver manager - wxChar driverVer[60]; // Driver version - wxChar serverName[80]; // Server Name, typically a connect string - wxChar databaseName[128]; // Database filename - wxChar outerJoins[2]; // Indicates whether the data source supports outer joins - wxChar procedureSupport[2]; // Indicates whether the data source supports stored procedures - wxChar accessibleTables[2]; // Indicates whether the data source only reports accessible tables in SQLTables. - UWORD maxConnections; // Maximum # of connections the data source supports - UWORD maxStmts; // Maximum # of HSTMTs per HDBC - UWORD apiConfLvl; // ODBC API conformance level - UWORD cliConfLvl; // Indicates whether the data source is SAG compliant - UWORD sqlConfLvl; // SQL conformance level - UWORD cursorCommitBehavior; // Indicates how cursors are affected by a db commit - UWORD cursorRollbackBehavior; // Indicates how cursors are affected by a db rollback - UWORD supportNotNullClause; // Indicates if data source supports NOT NULL clause - wxChar supportIEF[2]; // Integrity Enhancement Facility (Referential Integrity) - UDWORD txnIsolation; // Default transaction isolation level supported by the driver - UDWORD txnIsolationOptions; // Transaction isolation level options available - UDWORD fetchDirections; // Fetch directions supported - UDWORD lockTypes; // Lock types supported in SQLSetPos - UDWORD posOperations; // Position operations supported in SQLSetPos - UDWORD posStmts; // Position statements supported - UDWORD scrollConcurrency; // Concurrency control options supported for scrollable cursors - UDWORD scrollOptions; // Scroll Options supported for scrollable cursors - UDWORD staticSensitivity; // Indicates if additions, deletions and updates can be detected - UWORD txnCapable; // Indicates if the data source supports transactions - UDWORD loginTimeout; // Number seconds to wait for a login request - } dbInf; - - // ODBC Error Inf. - SWORD cbErrorMsg; - int DB_STATUS; -#ifdef __VMS - // The DECC compiler chokes when in db.cpp the array is accessed outside - // its bounds. Maybe this change should also applied for other platforms. - wxChar errorList[DB_MAX_ERROR_HISTORY][DB_MAX_ERROR_MSG_LEN+1]; -#else - wxChar errorList[DB_MAX_ERROR_HISTORY][DB_MAX_ERROR_MSG_LEN]; -#endif - wxChar errorMsg[SQL_MAX_MESSAGE_LENGTH]; - SQLINTEGER nativeError; - wxChar sqlState[20]; - -#if wxODBC_BACKWARD_COMPATABILITY - // Information about logical data types VARCHAR, INTEGER, FLOAT and DATE. - // - // This information is obtained from the ODBC driver by use of the - // SQLGetTypeInfo() function. The key piece of information is the - // type name the data source uses for each logical data type. - // e.g. VARCHAR; Oracle calls it VARCHAR2. - wxDbSqlTypeInfo typeInfVarchar; - wxDbSqlTypeInfo typeInfInteger; - wxDbSqlTypeInfo typeInfFloat; - wxDbSqlTypeInfo typeInfDate; - wxDbSqlTypeInfo typeInfBlob; -#endif - - // Public member functions - wxDb(const HENV &aHenv, bool FwdOnlyCursors=(bool)wxODBC_FWD_ONLY_CURSORS); - ~wxDb(); - - // Data Source Name, User ID, Password and whether open should fail on data type not supported - bool Open(const wxString& inConnectStr, bool failOnDataTypeUnsupported=true); - ///This version of Open will open the odbc source selection dialog. Cast a wxWindow::GetHandle() to SQLHWND to use. - bool Open(const wxString& inConnectStr, SQLHWND parentWnd, bool failOnDataTypeUnsupported=true); - bool Open(const wxString &Dsn, const wxString &Uid, const wxString &AuthStr, bool failOnDataTypeUnsupported=true); - bool Open(wxDbConnectInf *dbConnectInf, bool failOnDataTypeUnsupported=true); - bool Open(wxDb *copyDb); // pointer to a wxDb whose connection info should be copied rather than re-queried - void Close(void); - bool CommitTrans(void); - bool RollbackTrans(void); - bool DispAllErrors(HENV aHenv, HDBC aHdbc = SQL_NULL_HDBC, HSTMT aHstmt = SQL_NULL_HSTMT); - bool GetNextError(HENV aHenv, HDBC aHdbc = SQL_NULL_HDBC, HSTMT aHstmt = SQL_NULL_HSTMT); - void DispNextError(void); - bool CreateView(const wxString &viewName, const wxString &colList, const wxString &pSqlStmt, bool attemptDrop=true); - bool DropView(const wxString &viewName); - bool ExecSql(const wxString &pSqlStmt); - bool ExecSql(const wxString &pSqlStmt, wxDbColInf** columns, short& numcols); - bool GetNext(void); - bool GetData(UWORD colNo, SWORD cType, PTR pData, SDWORD maxLen, SQLLEN FAR *cbReturned); - bool Grant(int privileges, const wxString &tableName, const wxString &userList = wxT("PUBLIC")); - int TranslateSqlState(const wxString &SQLState); - wxDbInf *GetCatalog(const wxChar *userID=NULL); - bool Catalog(const wxChar *userID=NULL, const wxString &fileName=SQL_CATALOG_FILENAME); - int GetKeyFields(const wxString &tableName, wxDbColInf* colInf, UWORD noCols); - - wxDbColInf *GetColumns(wxChar *tableName[], const wxChar *userID=NULL); - wxDbColInf *GetColumns(const wxString &tableName, UWORD *numCols, const wxChar *userID=NULL); - - int GetColumnCount(const wxString &tableName, const wxChar *userID=NULL); - const wxChar *GetDatabaseName(void) {return dbInf.dbmsName;} - const wxString &GetDataSource(void) {return dsn;} - const wxString &GetDatasourceName(void){return dsn;} - const wxString &GetUsername(void) {return uid;} - const wxString &GetPassword(void) {return authStr;} - const wxString &GetConnectionInStr(void) {return inConnectionStr;} - const wxString &GetConnectionOutStr(void) {return outConnectionStr;} - bool IsOpen(void) {return dbIsOpen;} - bool OpenedWithConnectionString(void) {return dbOpenedWithConnectionString;} - HENV GetHENV(void) {return henv;} - HDBC GetHDBC(void) {return hdbc;} - HSTMT GetHSTMT(void) {return hstmt;} - int GetTableCount() {return nTables;} // number of tables using this connection - wxDbSqlTypeInfo GetTypeInfVarchar() {return typeInfVarchar;} - wxDbSqlTypeInfo GetTypeInfInteger() {return typeInfInteger;} - wxDbSqlTypeInfo GetTypeInfFloat() {return typeInfFloat;} - wxDbSqlTypeInfo GetTypeInfDate() {return typeInfDate;} - wxDbSqlTypeInfo GetTypeInfBlob() {return typeInfBlob;} - wxDbSqlTypeInfo GetTypeInfMemo() {return typeInfMemo;} - - // tableName can refer to a table, view, alias or synonym - bool TableExists(const wxString &tableName, const wxChar *userID=NULL, - const wxString &tablePath=wxEmptyString); - bool TablePrivileges(const wxString &tableName, const wxString &priv, - const wxChar *userID=NULL, const wxChar *schema=NULL, - const wxString &path=wxEmptyString); - - // These two functions return the table name or column name in a form ready - // for use in SQL statements. For example, if the datasource allows spaces - // in the table name or column name, the returned string will have the - // correct enclosing marks around the name to allow it to be properly - // included in a SQL statement - const wxString SQLTableName(const wxChar *tableName); - const wxString SQLColumnName(const wxChar *colName); - - void LogError(const wxString &errMsg, const wxString &SQLState = wxEmptyString) - { logError(errMsg, SQLState); } - void SetDebugErrorMessages(bool state) { silent = !state; } - bool SetSqlLogging(wxDbSqlLogState state, const wxString &filename = SQL_LOG_FILENAME, - bool append = false); - bool WriteSqlLog(const wxString &logMsg); - - wxDBMS Dbms(void); - bool ModifyColumn(const wxString &tableName, const wxString &columnName, - int dataType, ULONG columnLength=0, - const wxString &optionalParam=wxEmptyString); - - bool FwdOnlyCursors(void) {return fwdOnlyCursors;} - - // return the string with all special SQL characters escaped - wxString EscapeSqlChars(const wxString& value); - - // These two functions are provided strictly for use by wxDbTable. - // DO NOT USE THESE FUNCTIONS, OR MEMORY LEAKS MAY OCCUR - void incrementTableCount() { nTables++; return; } - void decrementTableCount() { nTables--; return; } - -}; // wxDb - - -// This structure forms a node in a linked list. The linked list of "DbList" objects -// keeps track of allocated database connections. This allows the application to -// open more than one database connection through ODBC for multiple transaction support -// or for multiple database support. -struct wxDbList -{ - wxDbList *PtrPrev; // Pointer to previous item in the list - wxString Dsn; // Data Source Name - wxString Uid; // User ID - wxString AuthStr; // Authorization string (password) - wxString ConnectionStr; // Connection string used instead of DSN - wxDb *PtrDb; // Pointer to the wxDb object - bool Free; // Is item free or in use? - wxDbList *PtrNext; // Pointer to next item in the list -}; - - -#ifdef __WXDEBUG__ -#include "wx/object.h" -class wxTablesInUse : public wxObject -{ - public: - const wxChar *tableName; - ULONG tableID; - class wxDb *pDb; -}; // wxTablesInUse -#endif - - -// The following routines allow a user to get new database connections, free them -// for other code segments to use, or close all of them when the application has -// completed. -wxDb WXDLLIMPEXP_ODBC *wxDbGetConnection(wxDbConnectInf *pDbConfig, bool FwdOnlyCursors=(bool)wxODBC_FWD_ONLY_CURSORS); -bool WXDLLIMPEXP_ODBC wxDbFreeConnection(wxDb *pDb); -void WXDLLIMPEXP_ODBC wxDbCloseConnections(void); -int WXDLLIMPEXP_ODBC wxDbConnectionsInUse(void); - - -// Writes a message to the wxLog window (stdout usually) when an internal error -// situation occurs. This function only works in DEBUG builds -const wxChar WXDLLIMPEXP_ODBC * -wxDbLogExtendedErrorMsg(const wxChar *userText, - wxDb *pDb, - const wxChar *ErrFile, - int ErrLine); - - -// This function sets the sql log state for all open wxDb objects -bool WXDLLIMPEXP_ODBC -wxDbSqlLog(wxDbSqlLogState state, const wxString &filename = SQL_LOG_FILENAME); - - -#if 0 -// MSW/VC6 ONLY!!! Experimental -int WXDLLEXPORT wxDbCreateDataSource(const wxString &driverName, const wxString &dsn, const wxString &description=wxEmptyString, - bool sysDSN=false, const wxString &defDir=wxEmptyString, wxWindow *parent=NULL); -#endif - -// This routine allows you to query a driver manager -// for a list of available datasources. Call this routine -// the first time using SQL_FETCH_FIRST. Continue to call it -// using SQL_FETCH_NEXT until you've exhausted the list. -bool WXDLLIMPEXP_ODBC -wxDbGetDataSource(HENV henv, wxChar *Dsn, SWORD DsnMaxLength, wxChar *DsDesc, - SWORD DsDescMaxLength, UWORD direction = SQL_FETCH_NEXT); - - -// Change this to 0 to remove use of all deprecated functions -#if wxODBC_BACKWARD_COMPATABILITY -//################################################################################# -//############### DEPRECATED functions for backward compatibility ################# -//################################################################################# - -// Backward compability structures/classes. This will eventually go away -const int DB_PATH_MAX = wxDB_PATH_MAX; - -typedef wxDb wxDB; -typedef wxDbTableInf wxTableInf; -typedef wxDbColInf wxColInf; -typedef wxDbColInf CcolInf; -typedef wxDbColFor wxColFor; -typedef wxDbSqlTypeInfo SqlTypeInfo; -typedef wxDbSqlTypeInfo wxSqlTypeInfo; -typedef enum wxDbSqlLogState sqlLog; -typedef enum wxDbSqlLogState wxSqlLogState; -typedef enum wxDBMS dbms; -typedef enum wxDBMS DBMS; -typedef wxODBC_ERRORS ODBC_ERRORS; -typedef wxDbConnectInf DbStuff; -typedef wxDbList DbList; -#ifdef __WXDEBUG__ -typedef wxTablesInUse CstructTablesInUse; -#endif - -// Deprecated function names that are replaced by the function names listed above -wxDB WXDLLIMPEXP_ODBC -*GetDbConnection(DbStuff *pDbStuff, bool FwdOnlyCursors=(bool)wxODBC_FWD_ONLY_CURSORS); -bool WXDLLIMPEXP_ODBC FreeDbConnection(wxDB *pDb); -void WXDLLIMPEXP_ODBC CloseDbConnections(void); -int WXDLLIMPEXP_ODBC NumberDbConnectionsInUse(void); - -bool SqlLog(sqlLog state, const wxChar *filename = SQL_LOG_FILENAME); - -bool WXDLLIMPEXP_ODBC -GetDataSource(HENV henv, char *Dsn, SWORD DsnMaxLength, char *DsDesc, SWORD DsDescMaxLength, - UWORD direction = SQL_FETCH_NEXT); - -#endif // Deprecated structures/classes/functions - -#endif // _WX_DB_H_ - diff --git a/desmume/src/windows/wx/include/wx/dbgrid.h b/desmume/src/windows/wx/include/wx/dbgrid.h deleted file mode 100644 index 4e8655cbe..000000000 --- a/desmume/src/windows/wx/include/wx/dbgrid.h +++ /dev/null @@ -1,177 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: dbgrid.h -// Purpose: Displays a wxDbTable in a wxGrid. -// Author: Roger Gammans, Paul Gammans -// Modified by: -// Created: -// RCS-ID: $Id: dbgrid.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) 1999 The Computer Surgery (roger@computer-surgery.co.uk) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// -// Branched From : dbgrid.h,v 1.19 2001/03/28 11:16:01 -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_DBGRID_H_ -#define _WX_GENERIC_DBGRID_H_ - -#if wxUSE_ODBC -#if wxUSE_GRID - -#include "wx/log.h" -#include "wx/dbtable.h" -#include "wx/dynarray.h" -#include "wx/grid.h" -#include "wx/dbkeyg.h" - -#define wxGRID_VALUE_DBAUTO _T("dbauto") - -WX_DECLARE_USER_EXPORTED_OBJARRAY(GenericKey,keyarray,WXDLLIMPEXP_DBGRID); - -static const int wxUSE_QUERY = -1; - -class WXDLLIMPEXP_DBGRID wxDbGridColInfoBase -{ -public: - //Default ctor - wxDbGridColInfoBase() { } - wxDbGridColInfoBase(int colNo, - wxString type, wxString title) : - DbCol(colNo), - wxtypename(type), - Title(title) - { } - //Copy Ctor - wxDbGridColInfoBase(const wxDbGridColInfoBase& ref) - { - DbCol = ref.DbCol; - wxtypename = ref.wxtypename; - Title = ref.Title; - } - //Empty destructor for member obj's - ~wxDbGridColInfoBase() {} - - int DbCol; - wxString wxtypename; - wxString Title; -}; - - -class WXDLLIMPEXP_DBGRID wxDbGridColInfo -{ -public: - wxDbGridColInfo(int colNo, - wxString type, - wxString title, - wxDbGridColInfo *next) : - m_data(colNo,type,title) - { - m_next=next; - } - - //Empty List - ~wxDbGridColInfo() { delete m_next; } - - //Recurse to find length. - int Length() { return (m_next ? m_next->Length() +1 : 1); } - - // Adds a new column info (2 step creation) - void AddColInfo (int colNo, - wxString type, - wxString title) - { - GetLast()->m_next = new wxDbGridColInfo (colNo, type, title, NULL); - } - - // Searches last - wxDbGridColInfo *GetLast() { return (m_next ? m_next->GetLast() : this); } - - - protected: - wxDbGridColInfoBase m_data; - wxDbGridColInfo *m_next; - - friend class wxDbGridTableBase; -}; - - -class WXDLLIMPEXP_DBGRID wxDbGridCellAttrProvider : public wxGridCellAttrProvider -{ -public: - wxDbGridCellAttrProvider(); - wxDbGridCellAttrProvider(wxDbTable *tab, wxDbGridColInfoBase* ColInfo); - virtual ~wxDbGridCellAttrProvider(); - - virtual wxGridCellAttr *GetAttr(int row, int col, - wxGridCellAttr::wxAttrKind kind) const; - virtual void AssignDbTable(wxDbTable *tab); -private: - wxDbTable *m_data; - wxDbGridColInfoBase *m_ColInfo; -}; - - -class WXDLLIMPEXP_DBGRID wxDbGridTableBase : public wxGridTableBase -{ -public: - wxDbGridTableBase(wxDbTable *tab, wxDbGridColInfo *ColInfo, - int count = wxUSE_QUERY, bool takeOwnership = true); - virtual ~wxDbGridTableBase(); - - virtual int GetNumberRows() - { - wxLogDebug(_T(" GetNumberRows() = %i"),m_rowtotal); - return m_rowtotal; - } - virtual int GetNumberCols() - { - wxLogDebug(_T(" GetNumberCols() = %i"),m_nocols); - return m_nocols; - } - virtual bool IsEmptyCell(int row, int col) ; - virtual wxString GetValue(int row, int col) ; - virtual void SetValue(int row, int col, const wxString& value); - virtual bool CanHaveAttributes(); - virtual wxString GetTypeName(int row, int col); - virtual bool CanGetValueAs(int row, int col, const wxString& typeName); - virtual bool CanSetValueAs(int row, int col, const wxString& typeName); - virtual long GetValueAsLong(int row, int col); - virtual double GetValueAsDouble(int row, int col); - virtual bool GetValueAsBool(int row, int col); - virtual void SetValueAsLong(int row, int col, long value); - virtual void SetValueAsDouble(int row, int col, double value); - virtual void SetValueAsBool(int row, int col, bool value); - virtual void *GetValueAsCustom(int row, int col, const wxString& typeName); - virtual void SetValueAsCustom(int row, int col, const wxString& typeName, void* value); - - - virtual wxString GetColLabelValue(int col); - - virtual bool AssignDbTable(wxDbTable *tab, int count = wxUSE_QUERY, bool takeOwnership=true); - virtual void ValidateRow(int row); - virtual bool UpdateRow(int row) const - { - if (m_row != row) - return true; - else - return Writeback(); - } - -private: - //Operates on the current row - bool Writeback() const; - - typedef wxGridTableBase inherited; - keyarray m_keys; - wxDbTable *m_data; - bool m_dbowner; - int m_rowtotal; - int m_nocols; - int m_row; - wxDbGridColInfoBase *m_ColInfo; - bool m_rowmodified; -}; - -#endif // #if wxUSE_GRID -#endif // #if wxUSE_ODBC - -#endif // _WX_GENERIC_DBGRID_H_ diff --git a/desmume/src/windows/wx/include/wx/dbkeyg.h b/desmume/src/windows/wx/include/wx/dbkeyg.h deleted file mode 100644 index eb91f1ce1..000000000 --- a/desmume/src/windows/wx/include/wx/dbkeyg.h +++ /dev/null @@ -1,41 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: dbkeyg.h -// Purpose: Generic key support for wxDbTable -// Author: Roger Gammans -// Modified by: -// Created: -// RCS-ID: $Id: dbkeyg.h 29077 2004-09-10 12:56:07Z ABX $ -// Copyright: (c) 1999 The Computer Surgery (roger@computer-surgery.co.uk) -// Licence: wxWindows licence -// -// NOTE : There is no CPP file to go along with this -// -/////////////////////////////////////////////////////////////////////////////// -// Branched From : gkey.h,v 1.3 2001/06/01 10:31:41 -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DBGKEY_H_ -#define _WX_DBGKEY_H_ - -class GenericKey -{ -public: - GenericKey(void *blk, size_t sz) { clone(blk,sz); } - GenericKey(const GenericKey &ref) { clone(ref.m_data,ref.m_sz); } - ~GenericKey() { free(m_data); } - - void *GetBlk(void) const { return m_data; } - -private: - void clone(void *blk, size_t sz) - { - m_data = malloc(sz); - memcpy(m_data,blk,sz); - m_sz = sz; - } - - void *m_data; - size_t m_sz; -}; - -#endif // _WX_DBGKEY_H_ diff --git a/desmume/src/windows/wx/include/wx/dbtable.h b/desmume/src/windows/wx/include/wx/dbtable.h deleted file mode 100644 index 1bbef54d7..000000000 --- a/desmume/src/windows/wx/include/wx/dbtable.h +++ /dev/null @@ -1,377 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: dbtable.h -// Purpose: Declaration of the wxDbTable class. -// Author: Doug Card -// Modified by: George Tasker -// Bart Jourquin -// Mark Johnson -// Created: 9.96 -// RCS-ID: $Id: dbtable.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 1996 Remstar International, Inc. -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -/* -// SYNOPSIS START -// SYNOPSIS STOP -*/ - -#ifndef DBTABLE_DOT_H -#define DBTABLE_DOT_H - -#include "wx/defs.h" - -#include "wx/db.h" - -#include "wx/variant.h" -#include "wx/dbkeyg.h" - -const int wxDB_ROWID_LEN = 24; // 18 is the max, 24 is in case it gets larger -const int wxDB_DEFAULT_CURSOR = 0; -const bool wxDB_QUERY_ONLY = true; -const bool wxDB_DISABLE_VIEW = true; - -// Used to indicate end of a variable length list of -// column numbers passed to member functions -const int wxDB_NO_MORE_COLUMN_NUMBERS = -1; - -// The following class is used to define a column of a table. -// The wxDbTable constructor will dynamically allocate as many of -// these as there are columns in the table. The class derived -// from wxDbTable must initialize these column definitions in it's -// constructor. These column definitions provide inf. to the -// wxDbTable class which allows it to create a table in the data -// source, exchange data between the data source and the C++ -// object, and so on. -class WXDLLIMPEXP_ODBC wxDbColDef -{ -public: - wxChar ColName[DB_MAX_COLUMN_NAME_LEN+1]; // Column Name - int DbDataType; // Logical Data Type; e.g. DB_DATA_TYPE_INTEGER - SWORD SqlCtype; // C data type; e.g. SQL_C_LONG - void *PtrDataObj; // Address of the data object - int SzDataObj; // Size, in bytes, of the data object - bool KeyField; // true if this column is part of the PRIMARY KEY to the table; Date fields should NOT be KeyFields. - bool Updateable; // Specifies whether this column is updateable - bool InsertAllowed; // Specifies whether this column should be included in an INSERT statement - bool DerivedCol; // Specifies whether this column is a derived value - SQLLEN CbValue; // Internal use only!!! - bool Null; // NOT FULLY IMPLEMENTED - Allows NULL values in Inserts and Updates - - wxDbColDef(); - - bool Initialize(); -}; // wxDbColDef - - -class WXDLLIMPEXP_ODBC wxDbColDataPtr -{ -public: - void *PtrDataObj; - int SzDataObj; - SWORD SqlCtype; -}; // wxDbColDataPtr - - -// This structure is used when creating secondary indexes. -class WXDLLIMPEXP_ODBC wxDbIdxDef -{ -public: - wxChar ColName[DB_MAX_COLUMN_NAME_LEN+1]; - bool Ascending; -}; // wxDbIdxDef - - -class WXDLLIMPEXP_ODBC wxDbTable -{ -private: - ULONG tableID; // Used for debugging. This can help to match up mismatched constructors/destructors - - // Private member variables - UDWORD cursorType; - bool insertable; - - // Private member functions - bool initialize(wxDb *pwxDb, const wxString &tblName, const UWORD numColumns, - const wxString &qryTblName, bool qryOnly, const wxString &tblPath); - void cleanup(); - - void setCbValueForColumn(int columnIndex); - bool bindParams(bool forUpdate); // called by the other 'bind' functions - bool bindInsertParams(void); - bool bindUpdateParams(void); - - bool bindCols(HSTMT cursor); - bool getRec(UWORD fetchType); - bool execDelete(const wxString &pSqlStmt); - bool execUpdate(const wxString &pSqlStmt); - bool query(int queryType, bool forUpdate, bool distinct, const wxString &pSqlStmt=wxEmptyString); - -#if !wxODBC_BACKWARD_COMPATABILITY -// these were public - // Where, Order By and From clauses - wxString where; // Standard SQL where clause, minus the word WHERE - wxString orderBy; // Standard SQL order by clause, minus the ORDER BY - wxString from; // Allows for joins in a wxDbTable::Query(). Format: ",tbl,tbl..." - - // ODBC Handles - HENV henv; // ODBC Environment handle - HDBC hdbc; // ODBC DB Connection handle - HSTMT hstmt; // ODBC Statement handle - HSTMT *hstmtDefault; // Default cursor - HSTMT hstmtInsert; // ODBC Statement handle used specifically for inserts - HSTMT hstmtDelete; // ODBC Statement handle used specifically for deletes - HSTMT hstmtUpdate; // ODBC Statement handle used specifically for updates - HSTMT hstmtInternal; // ODBC Statement handle used internally only - HSTMT *hstmtCount; // ODBC Statement handle used by Count() function (No binding of columns) - - // Flags - bool selectForUpdate; - - // Pointer to the database object this table belongs to - wxDb *pDb; - - // Table Inf. - wxString tablePath; // needed for dBase tables - wxString tableName; // Table name - wxString queryTableName; // Query Table Name - UWORD m_numCols; // # of columns in the table - bool queryOnly; // Query Only, no inserts, updates or deletes - - // Column Definitions - wxDbColDef *colDefs; // Array of wxDbColDef structures -#endif -public: -#if wxODBC_BACKWARD_COMPATABILITY - // Where, Order By and From clauses - char *where; // Standard SQL where clause, minus the word WHERE - char *orderBy; // Standard SQL order by clause, minus the ORDER BY - char *from; // Allows for joins in a wxDbTable::Query(). Format: ",tbl,tbl..." - - // ODBC Handles - HENV henv; // ODBC Environment handle - HDBC hdbc; // ODBC DB Connection handle - HSTMT hstmt; // ODBC Statement handle - HSTMT *hstmtDefault; // Default cursor - HSTMT hstmtInsert; // ODBC Statement handle used specifically for inserts - HSTMT hstmtDelete; // ODBC Statement handle used specifically for deletes - HSTMT hstmtUpdate; // ODBC Statement handle used specifically for updates - HSTMT hstmtInternal; // ODBC Statement handle used internally only - HSTMT *hstmtCount; // ODBC Statement handle used by Count() function (No binding of columns) - - // Flags - bool selectForUpdate; - - // Pointer to the database object this table belongs to - wxDb *pDb; - - // Table Inf. - char tablePath[wxDB_PATH_MAX]; // needed for dBase tables - char tableName[DB_MAX_TABLE_NAME_LEN+1]; // Table name - char queryTableName[DB_MAX_TABLE_NAME_LEN+1]; // Query Table Name - UWORD m_numCols; // # of columns in the table - bool queryOnly; // Query Only, no inserts, updates or deletes - - // Column Definitions - wxDbColDef *colDefs; // Array of wxDbColDef structures -#endif - // Public member functions - wxDbTable(wxDb *pwxDb, const wxString &tblName, const UWORD numColumns, - const wxString &qryTblName=wxEmptyString, bool qryOnly = !wxDB_QUERY_ONLY, - const wxString &tblPath=wxEmptyString); - -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( - wxDbTable(wxDb *pwxDb, const wxString &tblName, const UWORD numColumns, - const wxChar *qryTblName, bool qryOnly, - const wxString &tblPath) - ); -#endif // WXWIN_COMPATIBILITY_2_4 - - virtual ~wxDbTable(); - - bool Open(bool checkPrivileges=false, bool checkTableExists=true); - bool CreateTable(bool attemptDrop=true); - bool DropTable(void); - bool CreateIndex(const wxString &indexName, bool unique, UWORD numIndexColumns, - wxDbIdxDef *pIndexDefs, bool attemptDrop=true); - bool DropIndex(const wxString &indexName); - - // Accessors - - // The member variables returned by these accessors are all - // set when the wxDbTable instance is created and cannot be - // changed, hence there is no corresponding SetXxxx function - wxDb *GetDb() { return pDb; } - const wxString &GetTableName() { return tableName; } - const wxString &GetQueryTableName() { return queryTableName; } - const wxString &GetTablePath() { return tablePath; } - - UWORD GetNumberOfColumns() { return m_numCols; } // number of "defined" columns for this wxDbTable instance - - const wxString &GetFromClause() { return from; } - const wxString &GetOrderByClause() { return orderBy; } - const wxString &GetWhereClause() { return where; } - - bool IsQueryOnly() { return queryOnly; } -#if wxODBC_BACKWARD_COMPATABILITY - void SetFromClause(const char *From) { from = (char *)From; } - void SetOrderByClause(const char *OrderBy) { orderBy = (char *)OrderBy; } - void SetWhereClause(const char *Where) { where = (char *)Where; } -#else - void SetFromClause(const wxString &From) { from = From; } - void SetOrderByClause(const wxString &OrderBy) { orderBy = OrderBy; } - bool SetOrderByColNums(UWORD first, ...); - void SetWhereClause(const wxString &Where) { where = Where; } - void From(const wxString &From) { from = From; } - void OrderBy(const wxString &OrderBy) { orderBy = OrderBy; } - void Where(const wxString &Where) { where = Where; } - const wxString &Where() { return where; } - const wxString &OrderBy() { return orderBy; } - const wxString &From() { return from; } -#endif - int Insert(void); - bool Update(void); - bool Update(const wxString &pSqlStmt); - bool UpdateWhere(const wxString &pWhereClause); - bool Delete(void); - bool DeleteWhere(const wxString &pWhereClause); - bool DeleteMatching(void); - virtual bool Query(bool forUpdate = false, bool distinct = false); - bool QueryBySqlStmt(const wxString &pSqlStmt); - bool QueryMatching(bool forUpdate = false, bool distinct = false); - bool QueryOnKeyFields(bool forUpdate = false, bool distinct = false); - bool Refresh(void); - bool GetNext(void) { return(getRec(SQL_FETCH_NEXT)); } - bool operator++(int) { return(getRec(SQL_FETCH_NEXT)); } - - /***** These four functions only work with wxDb instances that are defined ***** - ***** as not being FwdOnlyCursors *****/ - bool GetPrev(void); - bool operator--(int); - bool GetFirst(void); - bool GetLast(void); - - bool IsCursorClosedOnCommit(void); - UWORD GetRowNum(void); - - void BuildSelectStmt(wxString &pSqlStmt, int typeOfSelect, bool distinct); - void BuildSelectStmt(wxChar *pSqlStmt, int typeOfSelect, bool distinct); - - void BuildDeleteStmt(wxString &pSqlStmt, int typeOfDel, const wxString &pWhereClause=wxEmptyString); - void BuildDeleteStmt(wxChar *pSqlStmt, int typeOfDel, const wxString &pWhereClause=wxEmptyString); - - void BuildUpdateStmt(wxString &pSqlStmt, int typeOfUpdate, const wxString &pWhereClause=wxEmptyString); - void BuildUpdateStmt(wxChar *pSqlStmt, int typeOfUpdate, const wxString &pWhereClause=wxEmptyString); - - void BuildWhereClause(wxString &pWhereClause, int typeOfWhere, const wxString &qualTableName=wxEmptyString, bool useLikeComparison=false); - void BuildWhereClause(wxChar *pWhereClause, int typeOfWhere, const wxString &qualTableName=wxEmptyString, bool useLikeComparison=false); - -#if wxODBC_BACKWARD_COMPATABILITY -// The following member functions are deprecated. You should use the BuildXxxxxStmt functions (above) - void GetSelectStmt(char *pSqlStmt, int typeOfSelect, bool distinct) - { BuildSelectStmt(pSqlStmt,typeOfSelect,distinct); } - void GetDeleteStmt(char *pSqlStmt, int typeOfDel, const char *pWhereClause = NULL) - { BuildDeleteStmt(pSqlStmt,typeOfDel,pWhereClause); } - void GetUpdateStmt(char *pSqlStmt, int typeOfUpdate, const char *pWhereClause = NULL) - { BuildUpdateStmt(pSqlStmt,typeOfUpdate,pWhereClause); } - void GetWhereClause(char *pWhereClause, int typeOfWhere, - const char *qualTableName = NULL, bool useLikeComparison=false) - { BuildWhereClause(pWhereClause,typeOfWhere,qualTableName,useLikeComparison); } -#endif - bool CanSelectForUpdate(void); -#if wxODBC_BACKWARD_COMPATABILITY - bool CanUpdByROWID(void) { return CanUpdateByRowID(); }; -#endif - bool CanUpdateByROWID(void); - void ClearMemberVar(UWORD colNumber, bool setToNull=false); - void ClearMemberVars(bool setToNull=false); - bool SetQueryTimeout(UDWORD nSeconds); - - wxDbColDef *GetColDefs() { return colDefs; } - bool SetColDefs(UWORD index, const wxString &fieldName, int dataType, - void *pData, SWORD cType, - int size, bool keyField = false, bool updateable = true, - bool insertAllowed = true, bool derivedColumn = false); - wxDbColDataPtr *SetColDefs(wxDbColInf *colInfs, UWORD numCols); - - bool CloseCursor(HSTMT cursor); - bool DeleteCursor(HSTMT *hstmtDel); - void SetCursor(HSTMT *hstmtActivate = (void **) wxDB_DEFAULT_CURSOR); - HSTMT GetCursor(void) { return(hstmt); } - HSTMT *GetNewCursor(bool setCursor = false, bool bindColumns = true); -#if wxODBC_BACKWARD_COMPATABILITY -// The following member function is deprecated. You should use the GetNewCursor - HSTMT *NewCursor(bool setCursor = false, bool bindColumns = true) { return GetNewCursor(setCursor,bindColumns); } -#endif - - ULONG Count(const wxString &args=_T("*")); - int DB_STATUS(void) { return(pDb->DB_STATUS); } - - bool IsColNull(UWORD colNumber) const; - bool SetColNull(UWORD colNumber, bool set=true); - bool SetColNull(const wxString &colName, bool set=true); -#if wxODBC_BACKWARD_COMPATABILITY -// The following member functions are deprecated. You should use the SetColNull() - bool SetNull(int colNumber, bool set=true) { return (SetNull(colNumber,set)); } - bool SetNull(const char *colName, bool set=true) { return (SetNull(colName,set)); } -#endif -#ifdef __WXDEBUG__ - ULONG GetTableID() { return tableID; } -#endif - -//TODO: Need to Document - typedef enum { WX_ROW_MODE_QUERY , WX_ROW_MODE_INDIVIDUAL } rowmode_t; - virtual void SetRowMode(const rowmode_t rowmode); -#if wxODBC_BACKWARD_COMPATABILITY - virtual wxVariant GetCol(const int colNumber) const { return GetColumn(colNumber); }; - virtual void SetCol(const int colNumber, const wxVariant value) { return SetColumn(colNumber, value); }; -#endif - virtual wxVariant GetColumn(const int colNumber) const ; - virtual void SetColumn(const int colNumber, const wxVariant value); - virtual GenericKey GetKey(void); - virtual void SetKey(const GenericKey &key); - - private: - HSTMT *m_hstmtGridQuery; - rowmode_t m_rowmode; - size_t m_keysize; - -// typedef enum {unmodified=0, UpdatePending, InsertPending } recStatus; - -// recStatus get_ModifiedStatus() { return m_recstatus; } - -// void modify() { -// if (m_recstatus==unmodified) -// m_recstatus=UpdatePending; -// } -// protected: -// void insertify() {m_recstatus=InsertPending; } -// void unmodify() {m_recstatus=unmodified; } -// recStatus m_recstatus; -//TODO: Need to Document -}; // wxDbTable - - -// Change this to 0 to remove use of all deprecated functions -#if wxODBC_BACKWARD_COMPATABILITY -//################################################################################# -//############### DEPRECATED functions for backward compatibility ################# -//################################################################################# - -// Backward compability. These will eventually go away -typedef wxDbTable wxTable; -typedef wxDbIdxDef wxIdxDef; -typedef wxDbIdxDef CidxDef; -typedef wxDbColDef wxColDef; -typedef wxDbColDef CcolDef; -typedef wxDbColDataPtr wxColDataPtr; -typedef wxDbColDataPtr CcolDataPtr; - -const int ROWID = wxDB_ROWID_LEN; -const int DEFAULT_CURSOR = wxDB_DEFAULT_CURSOR; -const bool QUERY_ONLY = wxDB_QUERY_ONLY; -const bool DISABLE_VIEW = wxDB_DISABLE_VIEW; -#endif - -#endif diff --git a/desmume/src/windows/wx/include/wx/dc.h b/desmume/src/windows/wx/include/wx/dc.h deleted file mode 100644 index d4790403a..000000000 --- a/desmume/src/windows/wx/include/wx/dc.h +++ /dev/null @@ -1,1003 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dc.h -// Purpose: wxDC class -// Author: Vadim Zeitlin -// Modified by: -// Created: 05/25/99 -// RCS-ID: $Id: dc.h 55927 2008-09-28 09:12:16Z VS $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DC_H_BASE_ -#define _WX_DC_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers which we must include here -// ---------------------------------------------------------------------------- - -#include "wx/object.h" // the base class - -#include "wx/intl.h" // for wxLayoutDirection -#include "wx/cursor.h" // we have member variables of these classes -#include "wx/font.h" // so we can't do without them -#include "wx/colour.h" -#include "wx/bitmap.h" // for wxNullBitmap -#include "wx/brush.h" -#include "wx/pen.h" -#include "wx/palette.h" -#include "wx/list.h" // we use wxList in inline functions -#include "wx/dynarray.h" -#include "wx/math.h" - -class WXDLLIMPEXP_FWD_CORE wxDC; -class WXDLLIMPEXP_FWD_CORE wxDCBase; - -class WXDLLEXPORT wxDrawObject -{ -public: - - wxDrawObject() - : m_isBBoxValid(false) - , m_minX(0), m_minY(0), m_maxX(0), m_maxY(0) - { } - - virtual ~wxDrawObject() { } - - virtual void Draw(wxDCBase&) const { } - - virtual void CalcBoundingBox(wxCoord x, wxCoord y) - { - if ( m_isBBoxValid ) - { - if ( x < m_minX ) m_minX = x; - if ( y < m_minY ) m_minY = y; - if ( x > m_maxX ) m_maxX = x; - if ( y > m_maxY ) m_maxY = y; - } - else - { - m_isBBoxValid = true; - - m_minX = x; - m_minY = y; - m_maxX = x; - m_maxY = y; - } - } - - void ResetBoundingBox() - { - m_isBBoxValid = false; - - m_minX = m_maxX = m_minY = m_maxY = 0; - } - - // Get the final bounding box of the PostScript or Metafile picture. - - wxCoord MinX() const { return m_minX; } - wxCoord MaxX() const { return m_maxX; } - wxCoord MinY() const { return m_minY; } - wxCoord MaxY() const { return m_maxY; } - - //to define the type of object for derived objects - virtual int GetType()=0; - -protected: - //for boundingbox calculation - bool m_isBBoxValid:1; - //for boundingbox calculation - wxCoord m_minX, m_minY, m_maxX, m_maxY; -}; - -// --------------------------------------------------------------------------- -// global variables -// --------------------------------------------------------------------------- - -// --------------------------------------------------------------------------- -// wxDC is the device context - object on which any drawing is done -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxDCBase : public wxObject -{ -public: - wxDCBase() - : m_colour(wxColourDisplay()) - , m_ok(true) - , m_clipping(false) - , m_isInteractive(0) - , m_isBBoxValid(false) - , m_logicalOriginX(0), m_logicalOriginY(0) - , m_deviceOriginX(0), m_deviceOriginY(0) - , m_logicalScaleX(1.0), m_logicalScaleY(1.0) - , m_userScaleX(1.0), m_userScaleY(1.0) - , m_scaleX(1.0), m_scaleY(1.0) - , m_signX(1), m_signY(1) - , m_minX(0), m_minY(0), m_maxX(0), m_maxY(0) - , m_clipX1(0), m_clipY1(0), m_clipX2(0), m_clipY2(0) - , m_logicalFunction(wxCOPY) - , m_backgroundMode(wxTRANSPARENT) - , m_mappingMode(wxMM_TEXT) - , m_pen() - , m_brush() - , m_backgroundBrush(*wxTRANSPARENT_BRUSH) - , m_textForegroundColour(*wxBLACK) - , m_textBackgroundColour(*wxWHITE) - , m_font() -#if wxUSE_PALETTE - , m_palette() - , m_hasCustomPalette(false) -#endif // wxUSE_PALETTE - { - ResetBoundingBox(); - ResetClipping(); - } - - virtual ~wxDCBase() { } - - // graphic primitives - // ------------------ - - virtual void DrawObject(wxDrawObject* drawobject) - { - drawobject->Draw(*this); - CalcBoundingBox(drawobject->MinX(),drawobject->MinY()); - CalcBoundingBox(drawobject->MaxX(),drawobject->MaxY()); - } - - bool FloodFill(wxCoord x, wxCoord y, const wxColour& col, - int style = wxFLOOD_SURFACE) - { return DoFloodFill(x, y, col, style); } - bool FloodFill(const wxPoint& pt, const wxColour& col, - int style = wxFLOOD_SURFACE) - { return DoFloodFill(pt.x, pt.y, col, style); } - - // fill the area specified by rect with a radial gradient, starting from - // initialColour in the centre of the cercle and fading to destColour. - void GradientFillConcentric(const wxRect& rect, - const wxColour& initialColour, - const wxColour& destColour) - { GradientFillConcentric(rect, initialColour, destColour, - wxPoint(rect.GetWidth() / 2, - rect.GetHeight() / 2)); } - - void GradientFillConcentric(const wxRect& rect, - const wxColour& initialColour, - const wxColour& destColour, - const wxPoint& circleCenter) - { DoGradientFillConcentric(rect, initialColour, destColour, circleCenter); } - - // fill the area specified by rect with a linear gradient - void GradientFillLinear(const wxRect& rect, - const wxColour& initialColour, - const wxColour& destColour, - wxDirection nDirection = wxEAST) - { DoGradientFillLinear(rect, initialColour, destColour, nDirection); } - - bool GetPixel(wxCoord x, wxCoord y, wxColour *col) const - { return DoGetPixel(x, y, col); } - bool GetPixel(const wxPoint& pt, wxColour *col) const - { return DoGetPixel(pt.x, pt.y, col); } - - void DrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2) - { DoDrawLine(x1, y1, x2, y2); } - void DrawLine(const wxPoint& pt1, const wxPoint& pt2) - { DoDrawLine(pt1.x, pt1.y, pt2.x, pt2.y); } - - void CrossHair(wxCoord x, wxCoord y) - { DoCrossHair(x, y); } - void CrossHair(const wxPoint& pt) - { DoCrossHair(pt.x, pt.y); } - - void DrawArc(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, - wxCoord xc, wxCoord yc) - { DoDrawArc(x1, y1, x2, y2, xc, yc); } - void DrawArc(const wxPoint& pt1, const wxPoint& pt2, const wxPoint& centre) - { DoDrawArc(pt1.x, pt1.y, pt2.x, pt2.y, centre.x, centre.y); } - - void DrawCheckMark(wxCoord x, wxCoord y, - wxCoord width, wxCoord height) - { DoDrawCheckMark(x, y, width, height); } - void DrawCheckMark(const wxRect& rect) - { DoDrawCheckMark(rect.x, rect.y, rect.width, rect.height); } - - void DrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, - double sa, double ea) - { DoDrawEllipticArc(x, y, w, h, sa, ea); } - void DrawEllipticArc(const wxPoint& pt, const wxSize& sz, - double sa, double ea) - { DoDrawEllipticArc(pt.x, pt.y, sz.x, sz.y, sa, ea); } - - void DrawPoint(wxCoord x, wxCoord y) - { DoDrawPoint(x, y); } - void DrawPoint(const wxPoint& pt) - { DoDrawPoint(pt.x, pt.y); } - - void DrawLines(int n, wxPoint points[], - wxCoord xoffset = 0, wxCoord yoffset = 0) - { DoDrawLines(n, points, xoffset, yoffset); } - void DrawLines(const wxList *list, - wxCoord xoffset = 0, wxCoord yoffset = 0); - - void DrawPolygon(int n, wxPoint points[], - wxCoord xoffset = 0, wxCoord yoffset = 0, - int fillStyle = wxODDEVEN_RULE) - { DoDrawPolygon(n, points, xoffset, yoffset, fillStyle); } - - void DrawPolygon(const wxList *list, - wxCoord xoffset = 0, wxCoord yoffset = 0, - int fillStyle = wxODDEVEN_RULE); - - void DrawPolyPolygon(int n, int count[], wxPoint points[], - wxCoord xoffset = 0, wxCoord yoffset = 0, - int fillStyle = wxODDEVEN_RULE) - { DoDrawPolyPolygon(n, count, points, xoffset, yoffset, fillStyle); } - - void DrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height) - { DoDrawRectangle(x, y, width, height); } - void DrawRectangle(const wxPoint& pt, const wxSize& sz) - { DoDrawRectangle(pt.x, pt.y, sz.x, sz.y); } - void DrawRectangle(const wxRect& rect) - { DoDrawRectangle(rect.x, rect.y, rect.width, rect.height); } - - void DrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height, - double radius) - { DoDrawRoundedRectangle(x, y, width, height, radius); } - void DrawRoundedRectangle(const wxPoint& pt, const wxSize& sz, - double radius) - { DoDrawRoundedRectangle(pt.x, pt.y, sz.x, sz.y, radius); } - void DrawRoundedRectangle(const wxRect& r, double radius) - { DoDrawRoundedRectangle(r.x, r.y, r.width, r.height, radius); } - - void DrawCircle(wxCoord x, wxCoord y, wxCoord radius) - { DoDrawEllipse(x - radius, y - radius, 2*radius, 2*radius); } - void DrawCircle(const wxPoint& pt, wxCoord radius) - { DrawCircle(pt.x, pt.y, radius); } - - void DrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height) - { DoDrawEllipse(x, y, width, height); } - void DrawEllipse(const wxPoint& pt, const wxSize& sz) - { DoDrawEllipse(pt.x, pt.y, sz.x, sz.y); } - void DrawEllipse(const wxRect& rect) - { DoDrawEllipse(rect.x, rect.y, rect.width, rect.height); } - - void DrawIcon(const wxIcon& icon, wxCoord x, wxCoord y) - { DoDrawIcon(icon, x, y); } - void DrawIcon(const wxIcon& icon, const wxPoint& pt) - { DoDrawIcon(icon, pt.x, pt.y); } - - void DrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, - bool useMask = false) - { DoDrawBitmap(bmp, x, y, useMask); } - void DrawBitmap(const wxBitmap &bmp, const wxPoint& pt, - bool useMask = false) - { DoDrawBitmap(bmp, pt.x, pt.y, useMask); } - - void DrawText(const wxString& text, wxCoord x, wxCoord y) - { DoDrawText(text, x, y); } - void DrawText(const wxString& text, const wxPoint& pt) - { DoDrawText(text, pt.x, pt.y); } - - void DrawRotatedText(const wxString& text, wxCoord x, wxCoord y, double angle) - { DoDrawRotatedText(text, x, y, angle); } - void DrawRotatedText(const wxString& text, const wxPoint& pt, double angle) - { DoDrawRotatedText(text, pt.x, pt.y, angle); } - - // this version puts both optional bitmap and the text into the given - // rectangle and aligns is as specified by alignment parameter; it also - // will emphasize the character with the given index if it is != -1 and - // return the bounding rectangle if required - virtual void DrawLabel(const wxString& text, - const wxBitmap& image, - const wxRect& rect, - int alignment = wxALIGN_LEFT | wxALIGN_TOP, - int indexAccel = -1, - wxRect *rectBounding = NULL); - - void DrawLabel(const wxString& text, const wxRect& rect, - int alignment = wxALIGN_LEFT | wxALIGN_TOP, - int indexAccel = -1) - { DrawLabel(text, wxNullBitmap, rect, alignment, indexAccel); } - - bool Blit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, - wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord) - { - return DoBlit(xdest, ydest, width, height, - source, xsrc, ysrc, rop, useMask, xsrcMask, ysrcMask); - } - bool Blit(const wxPoint& destPt, const wxSize& sz, - wxDC *source, const wxPoint& srcPt, - int rop = wxCOPY, bool useMask = false, const wxPoint& srcPtMask = wxDefaultPosition) - { - return DoBlit(destPt.x, destPt.y, sz.x, sz.y, - source, srcPt.x, srcPt.y, rop, useMask, srcPtMask.x, srcPtMask.y); - } - - wxBitmap GetAsBitmap(const wxRect *subrect = (const wxRect *) NULL) const - { - return DoGetAsBitmap(subrect); - } - -#if wxUSE_SPLINES - // TODO: this API needs fixing (wxPointList, why (!const) "wxList *"?) - void DrawSpline(wxCoord x1, wxCoord y1, - wxCoord x2, wxCoord y2, - wxCoord x3, wxCoord y3); - void DrawSpline(int n, wxPoint points[]); - - void DrawSpline(wxList *points) { DoDrawSpline(points); } -#endif // wxUSE_SPLINES - - // Eventually we will have wxUSE_GENERIC_DRAWELLIPSE -#ifdef __WXWINCE__ - //! Generic method to draw ellipses, circles and arcs with current pen and brush. - /*! \param x Upper left corner of bounding box. - * \param y Upper left corner of bounding box. - * \param w Width of bounding box. - * \param h Height of bounding box. - * \param sa Starting angle of arc - * (counterclockwise, start at 3 o'clock, 360 is full circle). - * \param ea Ending angle of arc. - * \param angle Rotation angle, the Arc will be rotated after - * calculating begin and end. - */ - void DrawEllipticArcRot( wxCoord x, wxCoord y, - wxCoord width, wxCoord height, - double sa = 0, double ea = 0, double angle = 0 ) - { DoDrawEllipticArcRot( x, y, width, height, sa, ea, angle ); } - - void DrawEllipticArcRot( const wxPoint& pt, - const wxSize& sz, - double sa = 0, double ea = 0, double angle = 0 ) - { DoDrawEllipticArcRot( pt.x, pt.y, sz.x, sz.y, sa, ea, angle ); } - - void DrawEllipticArcRot( const wxRect& rect, - double sa = 0, double ea = 0, double angle = 0 ) - { DoDrawEllipticArcRot( rect.x, rect.y, rect.width, rect.height, sa, ea, angle ); } - - virtual void DoDrawEllipticArcRot( wxCoord x, wxCoord y, - wxCoord w, wxCoord h, - double sa = 0, double ea = 0, double angle = 0 ); - - //! Rotates points around center. - /*! This is a quite straight method, it calculates in pixels - * and so it produces rounding errors. - * \param points The points inside will be rotated. - * \param angle Rotating angle (counterclockwise, start at 3 o'clock, 360 is full circle). - * \param center Center of rotation. - */ - void Rotate( wxList* points, double angle, wxPoint center = wxPoint(0,0) ); - - // used by DrawEllipticArcRot - // Careful: wxList gets filled with points you have to delete later. - void CalculateEllipticPoints( wxList* points, - wxCoord xStart, wxCoord yStart, - wxCoord w, wxCoord h, - double sa, double ea ); -#endif - - // global DC operations - // -------------------- - - virtual void Clear() = 0; - - virtual bool StartDoc(const wxString& WXUNUSED(message)) { return true; } - virtual void EndDoc() { } - - virtual void StartPage() { } - virtual void EndPage() { } - -#if WXWIN_COMPATIBILITY_2_6 - wxDEPRECATED( void BeginDrawing() ); - wxDEPRECATED( void EndDrawing() ); -#endif // WXWIN_COMPATIBILITY_2_6 - - - // set objects to use for drawing - // ------------------------------ - - virtual void SetFont(const wxFont& font) = 0; - virtual void SetPen(const wxPen& pen) = 0; - virtual void SetBrush(const wxBrush& brush) = 0; - virtual void SetBackground(const wxBrush& brush) = 0; - virtual void SetBackgroundMode(int mode) = 0; -#if wxUSE_PALETTE - virtual void SetPalette(const wxPalette& palette) = 0; -#endif // wxUSE_PALETTE - - // clipping region - // --------------- - - void SetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height) - { DoSetClippingRegion(x, y, width, height); } - void SetClippingRegion(const wxPoint& pt, const wxSize& sz) - { DoSetClippingRegion(pt.x, pt.y, sz.x, sz.y); } - void SetClippingRegion(const wxRect& rect) - { DoSetClippingRegion(rect.x, rect.y, rect.width, rect.height); } - void SetClippingRegion(const wxRegion& region) - { DoSetClippingRegionAsRegion(region); } - - virtual void DestroyClippingRegion() { ResetClipping(); } - - void GetClippingBox(wxCoord *x, wxCoord *y, wxCoord *w, wxCoord *h) const - { DoGetClippingBox(x, y, w, h); } - void GetClippingBox(wxRect& rect) const - { - DoGetClippingBox(&rect.x, &rect.y, &rect.width, &rect.height); - } - - // text extent - // ----------- - - virtual wxCoord GetCharHeight() const = 0; - virtual wxCoord GetCharWidth() const = 0; - - // only works for single line strings - void GetTextExtent(const wxString& string, - wxCoord *x, wxCoord *y, - wxCoord *descent = NULL, - wxCoord *externalLeading = NULL, - wxFont *theFont = NULL) const - { DoGetTextExtent(string, x, y, descent, externalLeading, theFont); } - - wxSize GetTextExtent(const wxString& string) const - { - wxCoord w, h; - DoGetTextExtent(string, &w, &h); - return wxSize(w, h); - } - - // works for single as well as multi-line strings - virtual void GetMultiLineTextExtent(const wxString& string, - wxCoord *width, - wxCoord *height, - wxCoord *heightLine = NULL, - wxFont *font = NULL) const; - - wxSize GetMultiLineTextExtent(const wxString& string) const - { - wxCoord w, h; - GetMultiLineTextExtent(string, &w, &h); - return wxSize(w, h); - } - - // Measure cumulative width of text after each character - bool GetPartialTextExtents(const wxString& text, wxArrayInt& widths) const - { return DoGetPartialTextExtents(text, widths); } - - // size and resolution - // ------------------- - - // in device units - void GetSize(int *width, int *height) const - { DoGetSize(width, height); } - wxSize GetSize() const - { - int w, h; - DoGetSize(&w, &h); - - return wxSize(w, h); - } - - // in mm - void GetSizeMM(int* width, int* height) const - { DoGetSizeMM(width, height); } - wxSize GetSizeMM() const - { - int w, h; - DoGetSizeMM(&w, &h); - - return wxSize(w, h); - } - - // coordinates conversions - // ----------------------- - - // This group of functions does actual conversion of the input, as you'd - // expect. - wxCoord DeviceToLogicalX(wxCoord x) const; - wxCoord DeviceToLogicalY(wxCoord y) const; - wxCoord DeviceToLogicalXRel(wxCoord x) const; - wxCoord DeviceToLogicalYRel(wxCoord y) const; - wxCoord LogicalToDeviceX(wxCoord x) const; - wxCoord LogicalToDeviceY(wxCoord y) const; - wxCoord LogicalToDeviceXRel(wxCoord x) const; - wxCoord LogicalToDeviceYRel(wxCoord y) const; - - // query DC capabilities - // --------------------- - - virtual bool CanDrawBitmap() const = 0; - virtual bool CanGetTextExtent() const = 0; - - // colour depth - virtual int GetDepth() const = 0; - - // Resolution in Pixels per inch - virtual wxSize GetPPI() const = 0; - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const { return m_ok; } - - // accessors and setters - // --------------------- - - virtual int GetBackgroundMode() const { return m_backgroundMode; } - virtual const wxBrush& GetBackground() const { return m_backgroundBrush; } - virtual const wxBrush& GetBrush() const { return m_brush; } - virtual const wxFont& GetFont() const { return m_font; } - virtual const wxPen& GetPen() const { return m_pen; } - - virtual const wxColour& GetTextForeground() const { return m_textForegroundColour; } - virtual const wxColour& GetTextBackground() const { return m_textBackgroundColour; } - virtual void SetTextForeground(const wxColour& colour) - { m_textForegroundColour = colour; } - virtual void SetTextBackground(const wxColour& colour) - { m_textBackgroundColour = colour; } - - virtual int GetMapMode() const { return m_mappingMode; } - virtual void SetMapMode(int mode) = 0; - - virtual void GetUserScale(double *x, double *y) const - { - if ( x ) *x = m_userScaleX; - if ( y ) *y = m_userScaleY; - } - virtual void SetUserScale(double x, double y) = 0; - - virtual void GetLogicalScale(double *x, double *y) - { - if ( x ) *x = m_logicalScaleX; - if ( y ) *y = m_logicalScaleY; - } - virtual void SetLogicalScale(double x, double y) - { - m_logicalScaleX = x; - m_logicalScaleY = y; - } - - void GetLogicalOrigin(wxCoord *x, wxCoord *y) const - { DoGetLogicalOrigin(x, y); } - wxPoint GetLogicalOrigin() const - { wxCoord x, y; DoGetLogicalOrigin(&x, &y); return wxPoint(x, y); } - virtual void SetLogicalOrigin(wxCoord x, wxCoord y) = 0; - - void GetDeviceOrigin(wxCoord *x, wxCoord *y) const - { DoGetDeviceOrigin(x, y); } - wxPoint GetDeviceOrigin() const - { wxCoord x, y; DoGetDeviceOrigin(&x, &y); return wxPoint(x, y); } - virtual void SetDeviceOrigin(wxCoord x, wxCoord y) = 0; - - virtual void ComputeScaleAndOrigin() {} - - virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp) = 0; - - virtual int GetLogicalFunction() const { return m_logicalFunction; } - virtual void SetLogicalFunction(int function) = 0; - -#if WXWIN_COMPATIBILITY_2_4 - virtual void SetOptimization(bool WXUNUSED(opt)) { } - virtual bool GetOptimization() { return false; } -#endif - - // bounding box - // ------------ - - virtual void CalcBoundingBox(wxCoord x, wxCoord y) - { - if ( m_isBBoxValid ) - { - if ( x < m_minX ) m_minX = x; - if ( y < m_minY ) m_minY = y; - if ( x > m_maxX ) m_maxX = x; - if ( y > m_maxY ) m_maxY = y; - } - else - { - m_isBBoxValid = true; - - m_minX = x; - m_minY = y; - m_maxX = x; - m_maxY = y; - } - } - - void ResetBoundingBox() - { - m_isBBoxValid = false; - - m_minX = m_maxX = m_minY = m_maxY = 0; - } - - // Get the final bounding box of the PostScript or Metafile picture. - wxCoord MinX() const { return m_minX; } - wxCoord MaxX() const { return m_maxX; } - wxCoord MinY() const { return m_minY; } - wxCoord MaxY() const { return m_maxY; } - - // misc old functions - // ------------------ - - // for compatibility with the old code when wxCoord was long everywhere - void GetTextExtent(const wxString& string, - long *x, long *y, - long *descent = NULL, - long *externalLeading = NULL, - wxFont *theFont = NULL) const - { - wxCoord x2, y2, descent2, externalLeading2; - DoGetTextExtent(string, &x2, &y2, - &descent2, &externalLeading2, - theFont); - if ( x ) - *x = x2; - if ( y ) - *y = y2; - if ( descent ) - *descent = descent2; - if ( externalLeading ) - *externalLeading = externalLeading2; - } - - void GetLogicalOrigin(long *x, long *y) const - { - wxCoord x2, y2; - DoGetLogicalOrigin(&x2, &y2); - if ( x ) - *x = x2; - if ( y ) - *y = y2; - } - - void GetDeviceOrigin(long *x, long *y) const - { - wxCoord x2, y2; - DoGetDeviceOrigin(&x2, &y2); - if ( x ) - *x = x2; - if ( y ) - *y = y2; - } - void GetClippingBox(long *x, long *y, long *w, long *h) const - { - wxCoord xx,yy,ww,hh; - DoGetClippingBox(&xx, &yy, &ww, &hh); - if (x) *x = xx; - if (y) *y = yy; - if (w) *w = ww; - if (h) *h = hh; - } - - // RTL related functions - // --------------------- - - // get or change the layout direction (LTR or RTL) for this dc, - // wxLayout_Default is returned if layout direction is not supported - virtual wxLayoutDirection GetLayoutDirection() const - { return wxLayout_Default; } - virtual void SetLayoutDirection(wxLayoutDirection WXUNUSED(dir)) - { } - -protected: - // the pure virtual functions which should be implemented by wxDC - virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, - int style = wxFLOOD_SURFACE) = 0; - - virtual void DoGradientFillLinear(const wxRect& rect, - const wxColour& initialColour, - const wxColour& destColour, - wxDirection nDirection = wxEAST); - - virtual void DoGradientFillConcentric(const wxRect& rect, - const wxColour& initialColour, - const wxColour& destColour, - const wxPoint& circleCenter); - - virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const = 0; - - virtual void DoDrawPoint(wxCoord x, wxCoord y) = 0; - virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2) = 0; - - virtual void DoDrawArc(wxCoord x1, wxCoord y1, - wxCoord x2, wxCoord y2, - wxCoord xc, wxCoord yc) = 0; - virtual void DoDrawCheckMark(wxCoord x, wxCoord y, - wxCoord width, wxCoord height); - virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, - double sa, double ea) = 0; - - virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height) = 0; - virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y, - wxCoord width, wxCoord height, - double radius) = 0; - virtual void DoDrawEllipse(wxCoord x, wxCoord y, - wxCoord width, wxCoord height) = 0; - - virtual void DoCrossHair(wxCoord x, wxCoord y) = 0; - - virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y) = 0; - virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, - bool useMask = false) = 0; - - virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y) = 0; - virtual void DoDrawRotatedText(const wxString& text, - wxCoord x, wxCoord y, double angle) = 0; - - virtual bool DoBlit(wxCoord xdest, wxCoord ydest, - wxCoord width, wxCoord height, - wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord) = 0; - - virtual wxBitmap DoGetAsBitmap(const wxRect *WXUNUSED(subrect)) const { return wxNullBitmap; } - - virtual void DoGetSize(int *width, int *height) const = 0; - virtual void DoGetSizeMM(int* width, int* height) const = 0; - - virtual void DoDrawLines(int n, wxPoint points[], - wxCoord xoffset, wxCoord yoffset) = 0; - virtual void DoDrawPolygon(int n, wxPoint points[], - wxCoord xoffset, wxCoord yoffset, - int fillStyle = wxODDEVEN_RULE) = 0; - virtual void DoDrawPolyPolygon(int n, int count[], wxPoint points[], - wxCoord xoffset, wxCoord yoffset, - int fillStyle); - - virtual void DoSetClippingRegionAsRegion(const wxRegion& region) = 0; - virtual void DoSetClippingRegion(wxCoord x, wxCoord y, - wxCoord width, wxCoord height) = 0; - -#if WXWIN_COMPATIBILITY_2_4 - // this was only for confusing people, use DoGetClippingBox only - virtual void DoGetClippingRegion(wxCoord *x, wxCoord *y, - wxCoord *w, wxCoord *h) - { DoGetClippingBox(x, y, w, h); } -#endif - - virtual void DoGetClippingBox(wxCoord *x, wxCoord *y, - wxCoord *w, wxCoord *h) const - { - if ( x ) - *x = m_clipX1; - if ( y ) - *y = m_clipY1; - if ( w ) - *w = m_clipX2 - m_clipX1; - if ( h ) - *h = m_clipY2 - m_clipY1; - } - - virtual void DoGetLogicalOrigin(wxCoord *x, wxCoord *y) const - { - if ( x ) *x = m_logicalOriginX; - if ( y ) *y = m_logicalOriginY; - } - - virtual void DoGetDeviceOrigin(wxCoord *x, wxCoord *y) const - { - if ( x ) *x = m_deviceOriginX; - if ( y ) *y = m_deviceOriginY; - } - - virtual void DoGetTextExtent(const wxString& string, - wxCoord *x, wxCoord *y, - wxCoord *descent = NULL, - wxCoord *externalLeading = NULL, - wxFont *theFont = NULL) const = 0; - - virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const; - -#if wxUSE_SPLINES - virtual void DoDrawSpline(wxList *points); -#endif - -#if wxABI_VERSION >= 20810 - // returns adjustment factor for converting wxFont "point size"; in wx - // it is point size on screen and needs to be multiplied by this value - // for rendering on higher-resolution DCs such as printer ones - static float GetFontPointSizeAdjustment(float dpi); -#endif - -protected: - // unset clipping variables (after clipping region was destroyed) - void ResetClipping() - { - m_clipping = false; - - m_clipX1 = m_clipX2 = m_clipY1 = m_clipY2 = 0; - } - - // flags - bool m_colour:1; - bool m_ok:1; - bool m_clipping:1; - bool m_isInteractive:1; - bool m_isBBoxValid:1; - - // coordinate system variables - - // TODO short descriptions of what exactly they are would be nice... - - wxCoord m_logicalOriginX, m_logicalOriginY; - wxCoord m_deviceOriginX, m_deviceOriginY; - - double m_logicalScaleX, m_logicalScaleY; - double m_userScaleX, m_userScaleY; - double m_scaleX, m_scaleY; - - // Used by SetAxisOrientation() to invert the axes - int m_signX, m_signY; - - // bounding and clipping boxes - wxCoord m_minX, m_minY, m_maxX, m_maxY; - wxCoord m_clipX1, m_clipY1, m_clipX2, m_clipY2; - - int m_logicalFunction; - int m_backgroundMode; - int m_mappingMode; - - // GDI objects - wxPen m_pen; - wxBrush m_brush; - wxBrush m_backgroundBrush; - wxColour m_textForegroundColour; - wxColour m_textBackgroundColour; - wxFont m_font; - -#if wxUSE_PALETTE - wxPalette m_palette; - bool m_hasCustomPalette; -#endif // wxUSE_PALETTE - -private: - DECLARE_NO_COPY_CLASS(wxDCBase) - DECLARE_ABSTRACT_CLASS(wxDCBase) -}; - -// ---------------------------------------------------------------------------- -// now include the declaration of wxDC class -// ---------------------------------------------------------------------------- - -#if defined(__WXPALMOS__) - #include "wx/palmos/dc.h" -#elif defined(__WXMSW__) - #include "wx/msw/dc.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/dc.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/dc.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/dc.h" -#elif defined(__WXX11__) - #include "wx/x11/dc.h" -#elif defined(__WXMGL__) - #include "wx/mgl/dc.h" -#elif defined(__WXDFB__) - #include "wx/dfb/dc.h" -#elif defined(__WXMAC__) - #include "wx/mac/dc.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/dc.h" -#elif defined(__WXPM__) - #include "wx/os2/dc.h" -#endif - -#if wxUSE_GRAPHICS_CONTEXT - #include "wx/dcgraph.h" -#endif - -// ---------------------------------------------------------------------------- -// helper class: you can use it to temporarily change the DC text colour and -// restore it automatically when the object goes out of scope -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDCTextColourChanger -{ -public: - wxDCTextColourChanger(wxDC& dc) : m_dc(dc), m_colFgOld() { } - - wxDCTextColourChanger(wxDC& dc, const wxColour& col) : m_dc(dc) - { - Set(col); - } - - ~wxDCTextColourChanger() - { - if ( m_colFgOld.Ok() ) - m_dc.SetTextForeground(m_colFgOld); - } - - void Set(const wxColour& col) - { - if ( !m_colFgOld.Ok() ) - m_colFgOld = m_dc.GetTextForeground(); - m_dc.SetTextForeground(col); - } - -private: - wxDC& m_dc; - - wxColour m_colFgOld; - - DECLARE_NO_COPY_CLASS(wxDCTextColourChanger) -}; - -// ---------------------------------------------------------------------------- -// helper class: you can use it to temporarily change the DC pen and -// restore it automatically when the object goes out of scope -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDCPenChanger -{ -public: - wxDCPenChanger(wxDC& dc, const wxPen& pen) : m_dc(dc), m_penOld(dc.GetPen()) - { - m_dc.SetPen(pen); - } - - ~wxDCPenChanger() - { - if ( m_penOld.Ok() ) - m_dc.SetPen(m_penOld); - } - -private: - wxDC& m_dc; - - wxPen m_penOld; - - DECLARE_NO_COPY_CLASS(wxDCPenChanger) -}; - -// ---------------------------------------------------------------------------- -// helper class: you can use it to temporarily change the DC brush and -// restore it automatically when the object goes out of scope -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDCBrushChanger -{ -public: - wxDCBrushChanger(wxDC& dc, const wxBrush& brush) : m_dc(dc), m_brushOld(dc.GetBrush()) - { - m_dc.SetBrush(brush); - } - - ~wxDCBrushChanger() - { - if ( m_brushOld.Ok() ) - m_dc.SetBrush(m_brushOld); - } - -private: - wxDC& m_dc; - - wxBrush m_brushOld; - - DECLARE_NO_COPY_CLASS(wxDCBrushChanger) -}; - -// ---------------------------------------------------------------------------- -// another small helper class: sets the clipping region in its ctor and -// destroys it in the dtor -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDCClipper -{ -public: - wxDCClipper(wxDC& dc, const wxRegion& r) : m_dc(dc) - { dc.SetClippingRegion(r); } - wxDCClipper(wxDC& dc, const wxRect& r) : m_dc(dc) - { dc.SetClippingRegion(r.x, r.y, r.width, r.height); } - wxDCClipper(wxDC& dc, wxCoord x, wxCoord y, wxCoord w, wxCoord h) : m_dc(dc) - { dc.SetClippingRegion(x, y, w, h); } - - ~wxDCClipper() { m_dc.DestroyClippingRegion(); } - -private: - wxDC& m_dc; - - DECLARE_NO_COPY_CLASS(wxDCClipper) -}; - -#endif // _WX_DC_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/dcbuffer.h b/desmume/src/windows/wx/include/wx/dcbuffer.h deleted file mode 100644 index 46c28ba53..000000000 --- a/desmume/src/windows/wx/include/wx/dcbuffer.h +++ /dev/null @@ -1,276 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dcbuffer.h -// Purpose: wxBufferedDC class -// Author: Ron Lee -// Modified by: Vadim Zeitlin (refactored, added bg preservation) -// Created: 16/03/02 -// RCS-ID: $Id: dcbuffer.h 44609 2007-03-05 08:58:09Z VZ $ -// Copyright: (c) Ron Lee -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DCBUFFER_H_ -#define _WX_DCBUFFER_H_ - -#include "wx/dcmemory.h" -#include "wx/dcclient.h" -#include "wx/window.h" - -// Split platforms into two groups - those which have well-working -// double-buffering by default, and those which do not. -#if defined(__WXMAC__) || defined(__WXGTK20__) || defined(__WXDFB__) - #define wxALWAYS_NATIVE_DOUBLE_BUFFER 1 -#else - #define wxALWAYS_NATIVE_DOUBLE_BUFFER 0 -#endif - - -// ---------------------------------------------------------------------------- -// Double buffering helper. -// ---------------------------------------------------------------------------- - -// Assumes the buffer bitmap covers the entire scrolled window, -// and prepares the window DC accordingly -#define wxBUFFER_VIRTUAL_AREA 0x01 - -// Assumes the buffer bitmap only covers the client area; -// does not prepare the window DC -#define wxBUFFER_CLIENT_AREA 0x02 - -class WXDLLEXPORT wxBufferedDC : public wxMemoryDC -{ -public: - // Default ctor, must subsequently call Init for two stage construction. - wxBufferedDC() - : m_dc(NULL), - m_buffer(NULL), - m_style(0) - { - } - - // Construct a wxBufferedDC using a user supplied buffer. - wxBufferedDC(wxDC *dc, - wxBitmap& buffer = wxNullBitmap, - int style = wxBUFFER_CLIENT_AREA) - : m_dc(NULL), m_buffer(NULL) - { - Init(dc, buffer, style); - } - - // Construct a wxBufferedDC with an internal buffer of 'area' - // (where area is usually something like the size of the window - // being buffered) - wxBufferedDC(wxDC *dc, const wxSize& area, int style = wxBUFFER_CLIENT_AREA) - : m_dc(NULL), m_buffer(NULL) - { - Init(dc, area, style); - } - - // The usually desired action in the dtor is to blit the buffer. - virtual ~wxBufferedDC() - { - if ( m_dc ) - UnMask(); - } - - // These reimplement the actions of the ctors for two stage creation - void Init(wxDC *dc, - wxBitmap& buffer = wxNullBitmap, - int style = wxBUFFER_CLIENT_AREA) - { - InitCommon(dc, style); - - m_buffer = &buffer; - - UseBuffer(); - } - - void Init(wxDC *dc, const wxSize &area, int style = wxBUFFER_CLIENT_AREA) - { - InitCommon(dc, style); - - UseBuffer(area.x, area.y); - } - - // Blits the buffer to the dc, and detaches the dc from the buffer (so it - // can be effectively used once only). - // - // Usually called in the dtor or by the dtor of derived classes if the - // BufferedDC must blit before the derived class (which may own the dc it's - // blitting to) is destroyed. - void UnMask() - { - wxCHECK_RET( m_dc, _T("no underlying wxDC?") ); - wxASSERT_MSG( m_buffer && m_buffer->IsOk(), _T("invalid backing store") ); - - wxCoord x = 0, - y = 0; - - if ( m_style & wxBUFFER_CLIENT_AREA ) - GetDeviceOrigin(&x, &y); - - m_dc->Blit(0, 0, m_buffer->GetWidth(), m_buffer->GetHeight(), - this, -x, -y ); - m_dc = NULL; - } - - // Set and get the style - void SetStyle(int style) { m_style = style; } - int GetStyle() const { return m_style; } - -private: - // common part of Init()s - void InitCommon(wxDC *dc, int style) - { - wxASSERT_MSG( !m_dc, _T("wxBufferedDC already initialised") ); - - m_dc = dc; - m_style = style; - - // inherit the same layout direction as the original DC - if (dc && dc->IsOk()) - SetLayoutDirection(dc->GetLayoutDirection()); - } - - // check that the bitmap is valid and use it - void UseBuffer(wxCoord w = -1, wxCoord h = -1); - - // the underlying DC to which we copy everything drawn on this one in - // UnMask() - // - // NB: Without the existence of a wxNullDC, this must be a pointer, else it - // could probably be a reference. - wxDC *m_dc; - - // the buffer (selected in this DC), initially invalid - wxBitmap *m_buffer; - - // the buffering style - int m_style; - - DECLARE_DYNAMIC_CLASS(wxBufferedDC) - DECLARE_NO_COPY_CLASS(wxBufferedDC) -}; - - -// ---------------------------------------------------------------------------- -// Double buffered PaintDC. -// ---------------------------------------------------------------------------- - -// Creates a double buffered wxPaintDC, optionally allowing the -// user to specify their own buffer to use. -class WXDLLEXPORT wxBufferedPaintDC : public wxBufferedDC -{ -public: - // If no bitmap is supplied by the user, a temporary one will be created. - wxBufferedPaintDC(wxWindow *window, wxBitmap& buffer, int style = wxBUFFER_CLIENT_AREA) - : m_paintdc(window) - { - // If we're buffering the virtual window, scale the paint DC as well - if (style & wxBUFFER_VIRTUAL_AREA) - window->PrepareDC( m_paintdc ); - - if( buffer.IsOk() ) - Init(&m_paintdc, buffer, style); - else - Init(&m_paintdc, GetBufferedSize(window, style), style); - } - - // If no bitmap is supplied by the user, a temporary one will be created. - wxBufferedPaintDC(wxWindow *window, int style = wxBUFFER_CLIENT_AREA) - : m_paintdc(window) - { - // If we're using the virtual window, scale the paint DC as well - if (style & wxBUFFER_VIRTUAL_AREA) - window->PrepareDC( m_paintdc ); - - Init(&m_paintdc, GetBufferedSize(window, style), style); - } - - // default copy ctor ok. - - virtual ~wxBufferedPaintDC() - { - // We must UnMask here, else by the time the base class - // does it, the PaintDC will have already been destroyed. - UnMask(); - } - -protected: - // return the size needed by the buffer: this depends on whether we're - // buffering just the currently shown part or the total (scrolled) window - static wxSize GetBufferedSize(wxWindow *window, int style) - { - return style & wxBUFFER_VIRTUAL_AREA ? window->GetVirtualSize() - : window->GetClientSize(); - } - -private: - wxPaintDC m_paintdc; - - DECLARE_ABSTRACT_CLASS(wxBufferedPaintDC) - DECLARE_NO_COPY_CLASS(wxBufferedPaintDC) -}; - - - -// -// wxAutoBufferedPaintDC is a wxPaintDC in toolkits which have double- -// buffering by default. Otherwise it is a wxBufferedPaintDC. Thus, -// you can only expect it work with a simple constructor that -// accepts single wxWindow* argument. -// -#if wxALWAYS_NATIVE_DOUBLE_BUFFER - #define wxAutoBufferedPaintDCBase wxPaintDC -#else - #define wxAutoBufferedPaintDCBase wxBufferedPaintDC -#endif - - -#ifdef __WXDEBUG__ - -class wxAutoBufferedPaintDC : public wxAutoBufferedPaintDCBase -{ -public: - - wxAutoBufferedPaintDC(wxWindow* win) - : wxAutoBufferedPaintDCBase(win) - { - TestWinStyle(win); - } - - virtual ~wxAutoBufferedPaintDC() { } - -private: - - void TestWinStyle(wxWindow* win) - { - // Help the user to get the double-buffering working properly. - wxASSERT_MSG( win->GetBackgroundStyle() == wxBG_STYLE_CUSTOM, - wxT("In constructor, you need to call SetBackgroundStyle(wxBG_STYLE_CUSTOM), ") - wxT("and also, if needed, paint the background manually in the paint event handler.")); - } - - DECLARE_NO_COPY_CLASS(wxAutoBufferedPaintDC) -}; - -#else // !__WXDEBUG__ - -// In release builds, just use typedef -typedef wxAutoBufferedPaintDCBase wxAutoBufferedPaintDC; - -#endif - - -// Check if the window is natively double buffered and will return a wxPaintDC -// if it is, a wxBufferedPaintDC otherwise. It is the caller's responsibility -// to delete the wxDC pointer when finished with it. -inline wxDC* wxAutoBufferedPaintDCFactory(wxWindow* window) -{ - if ( window->IsDoubleBuffered() ) - return new wxPaintDC(window); - else - return new wxBufferedPaintDC(window); -} - -#endif // _WX_DCBUFFER_H_ diff --git a/desmume/src/windows/wx/include/wx/dcclient.h b/desmume/src/windows/wx/include/wx/dcclient.h deleted file mode 100644 index c8bc31a15..000000000 --- a/desmume/src/windows/wx/include/wx/dcclient.h +++ /dev/null @@ -1,42 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dcclient.h -// Purpose: wxClientDC base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: dcclient.h 40865 2006-08-27 09:42:42Z VS $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DCCLIENT_H_BASE_ -#define _WX_DCCLIENT_H_BASE_ - -#include "wx/defs.h" - -#if defined(__WXPALMOS__) -#include "wx/palmos/dcclient.h" -#elif defined(__WXMSW__) -#include "wx/msw/dcclient.h" -#elif defined(__WXMOTIF__) -#include "wx/motif/dcclient.h" -#elif defined(__WXGTK20__) -#include "wx/gtk/dcclient.h" -#elif defined(__WXGTK__) -#include "wx/gtk1/dcclient.h" -#elif defined(__WXX11__) -#include "wx/x11/dcclient.h" -#elif defined(__WXMGL__) -#include "wx/mgl/dcclient.h" -#elif defined(__WXDFB__) -#include "wx/dfb/dcclient.h" -#elif defined(__WXMAC__) -#include "wx/mac/dcclient.h" -#elif defined(__WXCOCOA__) -#include "wx/cocoa/dcclient.h" -#elif defined(__WXPM__) -#include "wx/os2/dcclient.h" -#endif - -#endif - // _WX_DCCLIENT_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/dcgraph.h b/desmume/src/windows/wx/include/wx/dcgraph.h deleted file mode 100644 index e94996657..000000000 --- a/desmume/src/windows/wx/include/wx/dcgraph.h +++ /dev/null @@ -1,190 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/graphdc.h -// Purpose: graphics context device bridge header -// Author: Stefan Csomor -// Modified by: -// Created: -// Copyright: (c) Stefan Csomor -// RCS-ID: $Id: dcgraph.h 53390 2008-04-28 04:19:15Z KO $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GRAPHICS_DC_H_ -#define _WX_GRAPHICS_DC_H_ - -#if wxUSE_GRAPHICS_CONTEXT - -#include "wx/geometry.h" -#include "wx/dynarray.h" -#include "wx/graphics.h" - -class WXDLLEXPORT wxWindowDC; - -#ifdef __WXMAC__ -#define wxGCDC wxDC -#endif - -class WXDLLEXPORT wxGCDC: -#ifdef __WXMAC__ - public wxDCBase -#else - public wxDC -#endif -{ - DECLARE_DYNAMIC_CLASS(wxGCDC) - DECLARE_NO_COPY_CLASS(wxGCDC) - -public: - wxGCDC(const wxWindowDC& dc); -#ifdef __WXMSW__ - wxGCDC( const wxMemoryDC& dc); -#endif - wxGCDC(); - virtual ~wxGCDC(); - - void Init(); - - - // implement base class pure virtuals - // ---------------------------------- - - virtual void Clear(); - - virtual bool StartDoc( const wxString& message ); - virtual void EndDoc(); - - virtual void StartPage(); - virtual void EndPage(); - - // to be virtualized on next major - // flushing the content of this dc immediately onto screen - void Flush(); - - virtual void SetFont(const wxFont& font); - virtual void SetPen(const wxPen& pen); - virtual void SetBrush(const wxBrush& brush); - virtual void SetBackground(const wxBrush& brush); - virtual void SetBackgroundMode(int mode); - virtual void SetPalette(const wxPalette& palette); - - virtual void DestroyClippingRegion(); - - virtual wxCoord GetCharHeight() const; - virtual wxCoord GetCharWidth() const; - - virtual bool CanDrawBitmap() const; - virtual bool CanGetTextExtent() const; - virtual int GetDepth() const; - virtual wxSize GetPPI() const; - - virtual void SetMapMode(int mode); - virtual void SetUserScale(double x, double y); - - virtual void SetLogicalScale(double x, double y); - virtual void SetLogicalOrigin(wxCoord x, wxCoord y); - virtual void SetDeviceOrigin(wxCoord x, wxCoord y); - virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp); - virtual void SetLogicalFunction(int function); - - virtual void SetTextForeground(const wxColour& colour); - virtual void SetTextBackground(const wxColour& colour); - - virtual void ComputeScaleAndOrigin(); - - wxGraphicsContext* GetGraphicsContext() { return m_graphicContext; } - virtual void SetGraphicsContext( wxGraphicsContext* ctx ); - -protected: - // the true implementations - virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, - int style = wxFLOOD_SURFACE); - - virtual void DoGradientFillLinear(const wxRect& rect, - const wxColour& initialColour, - const wxColour& destColour, - wxDirection nDirection = wxEAST); - - virtual void DoGradientFillConcentric(const wxRect& rect, - const wxColour& initialColour, - const wxColour& destColour, - const wxPoint& circleCenter); - - virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const; - - virtual void DoDrawPoint(wxCoord x, wxCoord y); - -#if wxUSE_SPLINES - virtual void DoDrawSpline(wxList *points); -#endif - - virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); - - virtual void DoDrawArc(wxCoord x1, wxCoord y1, - wxCoord x2, wxCoord y2, - wxCoord xc, wxCoord yc); - - virtual void DoDrawCheckMark(wxCoord x, wxCoord y, - wxCoord width, wxCoord height); - - virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, - double sa, double ea); - - virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y, - wxCoord width, wxCoord height, - double radius); - virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - - virtual void DoCrossHair(wxCoord x, wxCoord y); - - virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y); - virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, - bool useMask = false); - - virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y); - virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y, - double angle); - - virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, - wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1); - - virtual void DoGetSize(int *,int *) const; - virtual void DoGetSizeMM(int* width, int* height) const; - - virtual void DoDrawLines(int n, wxPoint points[], - wxCoord xoffset, wxCoord yoffset); - virtual void DoDrawPolygon(int n, wxPoint points[], - wxCoord xoffset, wxCoord yoffset, - int fillStyle = wxODDEVEN_RULE); - virtual void DoDrawPolyPolygon(int n, int count[], wxPoint points[], - wxCoord xoffset, wxCoord yoffset, - int fillStyle); - - virtual void DoSetClippingRegionAsRegion(const wxRegion& region); - virtual void DoSetClippingRegion(wxCoord x, wxCoord y, - wxCoord width, wxCoord height); - - virtual void DoGetTextExtent(const wxString& string, - wxCoord *x, wxCoord *y, - wxCoord *descent = NULL, - wxCoord *externalLeading = NULL, - wxFont *theFont = NULL) const; - - virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const; - -protected: - // scaling variables - bool m_logicalFunctionSupported; - double m_mm_to_pix_x, m_mm_to_pix_y; - wxGraphicsMatrix m_matrixOriginal; - wxGraphicsMatrix m_matrixCurrent; - - double m_formerScaleX, m_formerScaleY; - - wxGraphicsContext* m_graphicContext; -}; - -#endif - -#endif // _WX_GRAPHICS_DC_H_ diff --git a/desmume/src/windows/wx/include/wx/dcmemory.h b/desmume/src/windows/wx/include/wx/dcmemory.h deleted file mode 100644 index 68d4355ac..000000000 --- a/desmume/src/windows/wx/include/wx/dcmemory.h +++ /dev/null @@ -1,76 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dcmemory.h -// Purpose: wxMemoryDC base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: dcmemory.h 43843 2006-12-07 05:44:44Z PC $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DCMEMORY_H_BASE_ -#define _WX_DCMEMORY_H_BASE_ - -#include "wx/bitmap.h" - -// NOTE: different native implementations of wxMemoryDC will derive from -// different wxDC classes (wxPaintDC, wxWindowDC, etc), so that -// we cannot derive wxMemoryDCBase from wxDC and then use it as the -// only base class for native impl of wxMemoryDC... -class WXDLLEXPORT wxMemoryDCBase -{ -public: - wxMemoryDCBase() { } - - // avoid warnings about having virtual functions but non virtual dtor - virtual ~wxMemoryDCBase() { } - - // select the given bitmap to draw on it - void SelectObject(wxBitmap& bmp) - { - // make sure that the given wxBitmap is not sharing its data with other - // wxBitmap instances as its contents will be modified by any drawing - // operation done on this DC - if (bmp.IsOk()) - bmp.UnShare(); - - DoSelect(bmp); - } - - // select the given bitmap for read-only - virtual void SelectObjectAsSource(const wxBitmap& bmp) - { - DoSelect(bmp); - } - -protected: - virtual void DoSelect(const wxBitmap& bmp) = 0; -}; - -#if defined(__WXPALMOS__) -#include "wx/palmos/dcmemory.h" -#elif defined(__WXMSW__) -#include "wx/msw/dcmemory.h" -#elif defined(__WXMOTIF__) -#include "wx/motif/dcmemory.h" -#elif defined(__WXGTK20__) -#include "wx/gtk/dcmemory.h" -#elif defined(__WXGTK__) -#include "wx/gtk1/dcmemory.h" -#elif defined(__WXX11__) -#include "wx/x11/dcmemory.h" -#elif defined(__WXMGL__) -#include "wx/mgl/dcmemory.h" -#elif defined(__WXDFB__) -#include "wx/dfb/dcmemory.h" -#elif defined(__WXMAC__) -#include "wx/mac/dcmemory.h" -#elif defined(__WXCOCOA__) -#include "wx/cocoa/dcmemory.h" -#elif defined(__WXPM__) -#include "wx/os2/dcmemory.h" -#endif - -#endif - // _WX_DCMEMORY_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/dcmirror.h b/desmume/src/windows/wx/include/wx/dcmirror.h deleted file mode 100644 index bc15a398e..000000000 --- a/desmume/src/windows/wx/include/wx/dcmirror.h +++ /dev/null @@ -1,287 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/dcmirror.h -// Purpose: wxMirrorDC class -// Author: Vadim Zeitlin -// Modified by: -// Created: 21.07.2003 -// RCS-ID: $Id: dcmirror.h 41751 2006-10-08 21:56:55Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DCMIRROR_H_ -#define _WX_DCMIRROR_H_ - -#include "wx/dc.h" - -// ---------------------------------------------------------------------------- -// wxMirrorDC allows to write the same code for horz/vertical layout -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMirrorDC : public wxDC -{ -public: - // constructs a mirror DC associated with the given real DC - // - // if mirror parameter is true, all vertical and horizontal coordinates are - // exchanged, otherwise this class behaves in exactly the same way as a - // plain DC - // - // the cast to wxMirrorDC is a dirty hack done to allow us to call the - // protected methods of wxDCBase directly in our code below, without it it - // would be impossible (this is correct from C++ point of view but doesn't - // make any sense in this particular situation) - wxMirrorDC(wxDC& dc, bool mirror) : m_dc((wxMirrorDC&)dc) - { m_mirror = mirror; } - - // wxDCBase operations - virtual void Clear() { m_dc.Clear(); } - virtual void SetFont(const wxFont& font) { m_dc.SetFont(font); } - virtual void SetPen(const wxPen& pen) { m_dc.SetPen(pen); } - virtual void SetBrush(const wxBrush& brush) { m_dc.SetBrush(brush); } - virtual void SetBackground(const wxBrush& brush) - { m_dc.SetBackground(brush); } - virtual void SetBackgroundMode(int mode) { m_dc.SetBackgroundMode(mode); } -#if wxUSE_PALETTE - virtual void SetPalette(const wxPalette& palette) - { m_dc.SetPalette(palette); } -#endif // wxUSE_PALETTE - virtual void DestroyClippingRegion() { m_dc.DestroyClippingRegion(); } - virtual wxCoord GetCharHeight() const { return m_dc.GetCharHeight(); } - virtual wxCoord GetCharWidth() const { return m_dc.GetCharWidth(); } - virtual bool CanDrawBitmap() const { return m_dc.CanDrawBitmap(); } - virtual bool CanGetTextExtent() const { return m_dc.CanGetTextExtent(); } - virtual int GetDepth() const { return m_dc.GetDepth(); } - virtual wxSize GetPPI() const { return m_dc.GetPPI(); } - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const { return m_dc.Ok(); } - virtual void SetMapMode(int mode) { m_dc.SetMapMode(mode); } - virtual void SetUserScale(double x, double y) - { m_dc.SetUserScale(GetX(x, y), GetY(x, y)); } - virtual void SetLogicalOrigin(wxCoord x, wxCoord y) - { m_dc.SetLogicalOrigin(GetX(x, y), GetY(x, y)); } - virtual void SetDeviceOrigin(wxCoord x, wxCoord y) - { m_dc.SetDeviceOrigin(GetX(x, y), GetY(x, y)); } - virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp) - { m_dc.SetAxisOrientation(GetX(xLeftRight, yBottomUp), - GetY(xLeftRight, yBottomUp)); } - virtual void SetLogicalFunction(int function) - { m_dc.SetLogicalFunction(function); } - - // helper functions which may be useful for the users of this class - wxSize Reflect(const wxSize& sizeOrig) - { - return m_mirror ? wxSize(sizeOrig.y, sizeOrig.x) : sizeOrig; - } - -protected: - // returns x and y if not mirroring or y and x if mirroring - wxCoord GetX(wxCoord x, wxCoord y) const { return m_mirror ? y : x; } - wxCoord GetY(wxCoord x, wxCoord y) const { return m_mirror ? x : y; } - double GetX(double x, double y) const { return m_mirror ? y : x; } - double GetY(double x, double y) const { return m_mirror ? x : y; } - bool GetX(bool x, bool y) const { return m_mirror ? y : x; } - bool GetY(bool x, bool y) const { return m_mirror ? x : y; } - - // same thing but for pointers - wxCoord *GetX(wxCoord *x, wxCoord *y) const { return m_mirror ? y : x; } - wxCoord *GetY(wxCoord *x, wxCoord *y) const { return m_mirror ? x : y; } - - // exchange x and y unconditionally - static void Swap(wxCoord& x, wxCoord& y) - { - wxCoord t = x; - x = y; - y = t; - } - - // exchange x and y components of all points in the array if necessary - void Mirror(int n, wxPoint points[]) const - { - if ( m_mirror ) - { - for ( int i = 0; i < n; i++ ) - { - Swap(points[i].x, points[i].y); - } - } - } - - - // wxDCBase functions - virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, - int style = wxFLOOD_SURFACE) - { - return m_dc.DoFloodFill(GetX(x, y), GetY(x, y), col, style); - } - - virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const - { - return m_dc.DoGetPixel(GetX(x, y), GetY(x, y), col); - } - - - virtual void DoDrawPoint(wxCoord x, wxCoord y) - { - m_dc.DoDrawPoint(GetX(x, y), GetY(x, y)); - } - - virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2) - { - m_dc.DoDrawLine(GetX(x1, y1), GetY(x1, y1), GetX(x2, y2), GetY(x2, y2)); - } - - virtual void DoDrawArc(wxCoord x1, wxCoord y1, - wxCoord x2, wxCoord y2, - wxCoord xc, wxCoord yc) - { - wxFAIL_MSG( _T("this is probably wrong") ); - - m_dc.DoDrawArc(GetX(x1, y1), GetY(x1, y1), - GetX(x2, y2), GetY(x2, y2), - xc, yc); - } - - virtual void DoDrawCheckMark(wxCoord x, wxCoord y, - wxCoord w, wxCoord h) - { - m_dc.DoDrawCheckMark(GetX(x, y), GetY(x, y), - GetX(w, h), GetY(w, h)); - } - - virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, - double sa, double ea) - { - wxFAIL_MSG( _T("this is probably wrong") ); - - m_dc.DoDrawEllipticArc(GetX(x, y), GetY(x, y), - GetX(w, h), GetY(w, h), - sa, ea); - } - - virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord w, wxCoord h) - { - m_dc.DoDrawRectangle(GetX(x, y), GetY(x, y), GetX(w, h), GetY(w, h)); - } - - virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y, - wxCoord w, wxCoord h, - double radius) - { - m_dc.DoDrawRoundedRectangle(GetX(x, y), GetY(x, y), - GetX(w, h), GetY(w, h), - radius); - } - - virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord w, wxCoord h) - { - m_dc.DoDrawEllipse(GetX(x, y), GetY(x, y), GetX(w, h), GetY(w, h)); - } - - virtual void DoCrossHair(wxCoord x, wxCoord y) - { - m_dc.DoCrossHair(GetX(x, y), GetY(x, y)); - } - - virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y) - { - m_dc.DoDrawIcon(icon, GetX(x, y), GetY(x, y)); - } - - virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, - bool useMask = false) - { - m_dc.DoDrawBitmap(bmp, GetX(x, y), GetY(x, y), useMask); - } - - virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y) - { - // this is never mirrored - m_dc.DoDrawText(text, x, y); - } - - virtual void DoDrawRotatedText(const wxString& text, - wxCoord x, wxCoord y, double angle) - { - // this is never mirrored - m_dc.DoDrawRotatedText(text, x, y, angle); - } - - virtual bool DoBlit(wxCoord xdest, wxCoord ydest, - wxCoord w, wxCoord h, - wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop = wxCOPY, bool useMask = false, - wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord) - { - return m_dc.DoBlit(GetX(xdest, ydest), GetY(xdest, ydest), - GetX(w, h), GetY(w, h), - source, GetX(xsrc, ysrc), GetY(xsrc, ysrc), - rop, useMask, - GetX(xsrcMask, ysrcMask), GetX(xsrcMask, ysrcMask)); - } - - virtual void DoGetSize(int *w, int *h) const - { - m_dc.DoGetSize(GetX(w, h), GetY(w, h)); - } - - virtual void DoGetSizeMM(int *w, int *h) const - { - m_dc.DoGetSizeMM(GetX(w, h), GetY(w, h)); - } - - virtual void DoDrawLines(int n, wxPoint points[], - wxCoord xoffset, wxCoord yoffset) - { - Mirror(n, points); - - m_dc.DoDrawLines(n, points, - GetX(xoffset, yoffset), GetY(xoffset, yoffset)); - - Mirror(n, points); - } - - virtual void DoDrawPolygon(int n, wxPoint points[], - wxCoord xoffset, wxCoord yoffset, - int fillStyle = wxODDEVEN_RULE) - { - Mirror(n, points); - - m_dc.DoDrawPolygon(n, points, - GetX(xoffset, yoffset), GetY(xoffset, yoffset), - fillStyle); - - Mirror(n, points); - } - - virtual void DoSetClippingRegionAsRegion(const wxRegion& WXUNUSED(region)) - { - wxFAIL_MSG( _T("not implemented") ); - } - - virtual void DoSetClippingRegion(wxCoord x, wxCoord y, - wxCoord w, wxCoord h) - { - m_dc.DoSetClippingRegion(GetX(x, y), GetY(x, y), GetX(w, h), GetY(w, h)); - } - - virtual void DoGetTextExtent(const wxString& string, - wxCoord *x, wxCoord *y, - wxCoord *descent = NULL, - wxCoord *externalLeading = NULL, - wxFont *theFont = NULL) const - { - // never mirrored - m_dc.DoGetTextExtent(string, x, y, descent, externalLeading, theFont); - } - -private: - wxMirrorDC& m_dc; - - bool m_mirror; - - DECLARE_NO_COPY_CLASS(wxMirrorDC) -}; - -#endif // _WX_DCMIRROR_H_ - diff --git a/desmume/src/windows/wx/include/wx/dcprint.h b/desmume/src/windows/wx/include/wx/dcprint.h deleted file mode 100644 index 5a40911d1..000000000 --- a/desmume/src/windows/wx/include/wx/dcprint.h +++ /dev/null @@ -1,33 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dcprint.h -// Purpose: wxPrinterDC base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: dcprint.h 41240 2006-09-15 16:45:48Z PC $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DCPRINT_H_BASE_ -#define _WX_DCPRINT_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_PRINTING_ARCHITECTURE - -#if defined(__WXPALMOS__) -#include "wx/palmos/dcprint.h" -#elif defined(__WXMSW__) -#include "wx/msw/dcprint.h" -#endif -#if defined(__WXPM__) -#include "wx/os2/dcprint.h" -#endif -#if defined(__WXMAC__) -#include "wx/mac/dcprint.h" -#endif - -#endif // wxUSE_PRINTING_ARCHITECTURE -#endif - // _WX_DCPRINT_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/dcps.h b/desmume/src/windows/wx/include/wx/dcps.h deleted file mode 100644 index 2615d3324..000000000 --- a/desmume/src/windows/wx/include/wx/dcps.h +++ /dev/null @@ -1,18 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dcps.h -// Purpose: wxPostScriptDC base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: dcps.h 33948 2005-05-04 18:57:50Z JS $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DCPS_H_BASE_ -#define _WX_DCPS_H_BASE_ - -#include "wx/generic/dcpsg.h" - -#endif - diff --git a/desmume/src/windows/wx/include/wx/dcscreen.h b/desmume/src/windows/wx/include/wx/dcscreen.h deleted file mode 100644 index 7e59787ef..000000000 --- a/desmume/src/windows/wx/include/wx/dcscreen.h +++ /dev/null @@ -1,42 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dcscreen.h -// Purpose: wxScreenDC base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: dcscreen.h 40865 2006-08-27 09:42:42Z VS $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DCSCREEN_H_BASE_ -#define _WX_DCSCREEN_H_BASE_ - -#include "wx/defs.h" - -#if defined(__WXPALMOS__) -#include "wx/palmos/dcscreen.h" -#elif defined(__WXMSW__) -#include "wx/msw/dcscreen.h" -#elif defined(__WXMOTIF__) -#include "wx/motif/dcscreen.h" -#elif defined(__WXGTK20__) -#include "wx/gtk/dcscreen.h" -#elif defined(__WXGTK__) -#include "wx/gtk1/dcscreen.h" -#elif defined(__WXX11__) -#include "wx/x11/dcscreen.h" -#elif defined(__WXMGL__) -#include "wx/mgl/dcscreen.h" -#elif defined(__WXDFB__) -#include "wx/dfb/dcscreen.h" -#elif defined(__WXMAC__) -#include "wx/mac/dcscreen.h" -#elif defined(__WXCOCOA__) -#include "wx/cocoa/dcscreen.h" -#elif defined(__WXPM__) -#include "wx/os2/dcscreen.h" -#endif - -#endif - // _WX_DCSCREEN_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/dde.h b/desmume/src/windows/wx/include/wx/dde.h deleted file mode 100644 index 402a6ec70..000000000 --- a/desmume/src/windows/wx/include/wx/dde.h +++ /dev/null @@ -1,32 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dde.h -// Purpose: DDE base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: dde.h 53135 2008-04-12 02:31:04Z VZ $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DDE_H_BASE_ -#define _WX_DDE_H_BASE_ - -#include "wx/list.h" - -class WXDLLIMPEXP_FWD_BASE wxDDEClient; -class WXDLLIMPEXP_FWD_BASE wxDDEServer; -class WXDLLIMPEXP_FWD_BASE wxDDEConnection; - -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__) - #include "wx/msw/dde.h" -#else - #error DDE is only supported on MSW -#endif - -#endif - // _WX_DDE_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/debug.h b/desmume/src/windows/wx/include/wx/debug.h deleted file mode 100644 index fd389d516..000000000 --- a/desmume/src/windows/wx/include/wx/debug.h +++ /dev/null @@ -1,316 +0,0 @@ -/** -* Name: wx/debug.h -* Purpose: Misc debug functions and macros -* Author: Vadim Zeitlin -* Modified by: Ryan Norton (Converted to C) -* Created: 29/01/98 -* RCS-ID: $Id: debug.h 54492 2008-07-05 17:54:03Z SN $ -* Copyright: (c) 1998 Vadim Zeitlin -* Licence: wxWindows licence -*/ - -/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ - -#ifndef _WX_DEBUG_H_ -#define _WX_DEBUG_H_ - -#ifndef __WXWINCE__ -#include -#endif -#include /* for CHAR_BIT used below */ - -#include "wx/wxchar.h" /* for __TFILE__ and wxChar */ - -/* ---------------------------------------------------------------------------- */ -/* Defines controlling the debugging macros */ -/* ---------------------------------------------------------------------------- */ - -/* if _DEBUG is defined (MS VC++ and others use it in debug builds), define */ -/* __WXDEBUG__ too */ -#ifdef _DEBUG - #ifndef __WXDEBUG__ - #define __WXDEBUG__ - #endif /* !__WXDEBUG__ */ -#endif /* _DEBUG */ - -/* if NDEBUG is defined ( uses it), undef __WXDEBUG__ and WXDEBUG */ -#ifdef NDEBUG - #undef __WXDEBUG__ - #undef WXDEBUG -#endif /* NDEBUG */ - -/* if __WXDEBUG__ is defined, make sure that WXDEBUG is defined and >= 1 */ -#ifdef __WXDEBUG__ - #if !defined(WXDEBUG) || !WXDEBUG - #undef WXDEBUG - #define WXDEBUG 1 - #endif /* !WXDEBUG */ -#endif /* __WXDEBUG__ */ - -#ifndef __WXFUNCTION__ - /* TODO: add more compilers supporting __FUNCTION__ */ - #if defined(__DMC__) - /* - __FUNCTION__ happens to be not defined within class members - http://www.digitalmars.com/drn-bin/wwwnews?c%2B%2B.beta/485 - */ - #define __WXFUNCTION__ (NULL) - #elif defined(__GNUC__) || \ - (defined(_MSC_VER) && _MSC_VER >= 1300) || \ - defined(__FUNCTION__) - #define __WXFUNCTION__ __FUNCTION__ - #else - /* still define __WXFUNCTION__ to avoid #ifdefs elsewhere */ - #define __WXFUNCTION__ (NULL) - #endif -#endif /* __WXFUNCTION__ already defined */ - -/* ---------------------------------------------------------------------------- */ -/* Debugging macros */ -/* */ -/* All debugging macros rely on ASSERT() which in turn calls the user-defined */ -/* OnAssert() function. To keep things simple, it's called even when the */ -/* expression is true (i.e. everything is ok) and by default does nothing: just */ -/* returns the same value back. But if you redefine it to do something more sexy */ -/* (popping up a message box in your favourite GUI, sending you e-mail or */ -/* whatever) it will affect all ASSERTs, FAILs and CHECKs in your code. */ -/* */ -/* Warning: if you don't like advice on programming style, don't read */ -/* further! ;-) */ -/* */ -/* Extensive use of these macros is recommended! Remember that ASSERTs are */ -/* disabled in final build (without __WXDEBUG__ defined), so they add strictly */ -/* nothing to your program's code. On the other hand, CHECK macros do stay */ -/* even in release builds, but in general are not much of a burden, while */ -/* a judicious use of them might increase your program's stability. */ -/* ---------------------------------------------------------------------------- */ - -/* Macros which are completely disabled in 'release' mode */ -/* */ -/* NB: these functions are implemented in src/common/appcmn.cpp */ -#if defined(__cplusplus) && defined(__WXDEBUG__) - /* - This function is called whenever one of debugging macros fails (i.e. - condition is false in an assertion). To customize its behaviour, override - wxApp::OnAssert(). - - Parameters: - szFile and nLine - file name and line number of the ASSERT - szFunc - function name of the ASSERT, may be NULL (NB: ASCII) - szCond - text form of the condition which failed - szMsg - optional message explaining the reason - */ - extern void WXDLLIMPEXP_BASE wxOnAssert(const wxChar *szFile, - int nLine, - const char *szFunc, - const wxChar *szCond, - const wxChar *szMsg = NULL); - - /* call this function to break into the debugger unconditionally (assuming */ - /* the program is running under debugger, of course) */ - extern void WXDLLIMPEXP_BASE wxTrap(); - - /* generic assert macro */ - #define wxASSERT(cond) wxASSERT_MSG(cond, NULL) - - - /* assert with additional message explaining its cause */ - - /* compilers can give a warning (such as "possible unwanted ;") when using */ - /* the default definition of wxASSERT_MSG so we provide an alternative */ - #if defined(__MWERKS__) - #define wxASSERT_MSG(cond, msg) \ - if ( cond ) \ - {} \ - else \ - wxOnAssert(__TFILE__, __LINE__, __WXFUNCTION__, _T(#cond), msg) - #else - #define wxASSERT_MSG(cond, msg) \ - if ( cond ) \ - ; \ - else \ - wxOnAssert(__TFILE__, __LINE__, __WXFUNCTION__, _T(#cond), msg) - #endif - - /* special form of assert: always triggers it (in debug mode) */ - #define wxFAIL wxFAIL_MSG(NULL) - - /* FAIL with some message */ - #define wxFAIL_MSG(msg) wxFAIL_COND_MSG("wxAssertFailure", msg) - - /* FAIL with some message and a condition */ - #define wxFAIL_COND_MSG(cond, msg) \ - wxOnAssert(__TFILE__, __LINE__, __WXFUNCTION__, _T(cond), msg) - - /* An assert helper used to avoid warning when testing constant expressions, */ - /* i.e. wxASSERT( sizeof(int) == 4 ) can generate a compiler warning about */ - /* expression being always true, but not using */ - /* wxASSERT( wxAssertIsEqual(sizeof(int), 4) ) */ - /* */ - /* NB: this is made obsolete by wxCOMPILE_TIME_ASSERT() and should no */ - /* longer be used. */ - extern bool WXDLLIMPEXP_BASE wxAssertIsEqual(int x, int y); -#else - #define wxTrap() - - /* nothing to do in release mode (hopefully at this moment there are */ - /* no more bugs ;-) */ - #define wxASSERT(cond) - #define wxASSERT_MSG(cond, msg) - #define wxFAIL - #define wxFAIL_MSG(msg) - #define wxFAIL_COND_MSG(cond, msg) -#endif /* __WXDEBUG__ */ - -#ifdef __cplusplus - /* Use of wxFalse instead of false suppresses compiler warnings about testing */ - /* constant expression */ - extern WXDLLIMPEXP_DATA_BASE(const bool) wxFalse; -#endif - -#define wxAssertFailure wxFalse - -/* NB: the following macros also work in release mode! */ - -/* - These macros must be used only in invalid situation: for example, an - invalid parameter (e.g. a NULL pointer) is passed to a function. Instead of - dereferencing it and causing core dump the function might try using - CHECK( p != NULL ) or CHECK( p != NULL, return LogError("p is NULL!!") ) -*/ - -/* check that expression is true, "return" if not (also FAILs in debug mode) */ -#define wxCHECK(cond, rc) wxCHECK_MSG(cond, rc, NULL) - -/* as wxCHECK but with a message explaining why we fail */ -#define wxCHECK_MSG(cond, rc, msg) wxCHECK2_MSG(cond, return rc, msg) - -/* check that expression is true, perform op if not */ -#define wxCHECK2(cond, op) wxCHECK2_MSG(cond, op, NULL) - -/* as wxCHECK2 but with a message explaining why we fail */ - -#ifdef __GNUC__ - #define wxFORCE_SEMICOLON typedef int wxDummyCheckInt - /* Note: old gcc versions (e.g. 2.8) give an internal compiler error */ - /* on a simple forward declaration, when used in a template */ - /* function, so rather use a dummy typedef which does work... */ -#else - #define wxFORCE_SEMICOLON struct wxDummyCheckStruct - /* Note2: however, some other compilers (notably Digital Mars */ - /* don't like multiple typedefs (even though the standard */ - /* does allow them), so use a forward declaration for non-gcc. */ -#endif -/* see comment near the definition of wxASSERT_MSG for the # if/else reason */ -#if defined(__MWERKS__) - #define wxCHECK2_MSG(cond, op, msg) \ - if ( cond ) \ - {} \ - else \ - { \ - wxFAIL_COND_MSG(#cond, msg); \ - op; \ - } \ - struct wxDummyCheckStruct /* just to force a semicolon */ -#else - #define wxCHECK2_MSG(cond, op, msg) \ - if ( cond ) \ - ; \ - else \ - { \ - wxFAIL_COND_MSG(#cond, msg); \ - op; \ - } \ - wxFORCE_SEMICOLON /* just to force a semicolon */ -#endif - -/* special form of wxCHECK2: as wxCHECK, but for use in void functions */ -/* */ -/* NB: there is only one form (with msg parameter) and it's intentional: */ -/* there is no other way to tell the caller what exactly went wrong */ -/* from the void function (of course, the function shouldn't be void */ -/* to begin with...) */ -#define wxCHECK_RET(cond, msg) wxCHECK2_MSG(cond, return, msg) - -/* ---------------------------------------------------------------------------- */ -/* Compile time asserts */ -/* */ -/* Unlike the normal assert and related macros above which are checked during */ -/* the program tun-time the macros below will result in a compilation error if */ -/* the condition they check is false. This is usually used to check the */ -/* expressions containing sizeof()s which cannot be tested with the */ -/* preprocessor. If you can use the #if's, do use them as you can give a more */ -/* detailed error message then. */ -/* ---------------------------------------------------------------------------- */ - -/* - How this works (you don't have to understand it to be able to use the - macros): we rely on the fact that it is invalid to define a named bit field - in a struct of width 0. All the rest are just the hacks to minimize the - possibility of the compiler warnings when compiling this macro: in - particular, this is why we define a struct and not an object (which would - result in a warning about unused variable) and a named struct (otherwise we'd - get a warning about an unnamed struct not used to define an object!). - */ - -#define wxMAKE_UNIQUE_ASSERT_NAME wxMAKE_UNIQUE_NAME(wxAssert_) - -/* - The second argument of this macro must be a valid C++ identifier and not a - string. I.e. you should use it like this: - - wxCOMPILE_TIME_ASSERT( sizeof(int) >= 2, YourIntsAreTooSmall ); - - It may be used both within a function and in the global scope. -*/ -#if defined(__WATCOMC__) && defined(__cplusplus) - /* avoid "unused symbol" warning */ - #define wxCOMPILE_TIME_ASSERT(expr, msg) \ - class wxMAKE_UNIQUE_ASSERT_NAME { \ - unsigned int msg: expr; \ - wxMAKE_UNIQUE_ASSERT_NAME() { wxUnusedVar(msg); } \ - } -#else - #define wxCOMPILE_TIME_ASSERT(expr, msg) \ - struct wxMAKE_UNIQUE_ASSERT_NAME { unsigned int msg: expr; } -#endif - -/* - When using VC++ 6 with "Edit and Continue" on, the compiler completely - mishandles __LINE__ and so wxCOMPILE_TIME_ASSERT() doesn't work, provide a - way to make "unique" assert names by specifying a unique prefix explicitly - */ -#define wxMAKE_UNIQUE_ASSERT_NAME2(text) wxCONCAT(wxAssert_, text) - -#define wxCOMPILE_TIME_ASSERT2(expr, msg, text) \ - struct wxMAKE_UNIQUE_ASSERT_NAME2(text) { unsigned int msg: expr; } - -/* helpers for wxCOMPILE_TIME_ASSERT below, for private use only */ -#define wxMAKE_BITSIZE_MSG(type, size) type ## SmallerThan ## size ## Bits - -/* a special case of compile time assert: check that the size of the given type */ -/* is at least the given number of bits */ -#define wxASSERT_MIN_BITSIZE(type, size) \ - wxCOMPILE_TIME_ASSERT(sizeof(type) * CHAR_BIT >= size, \ - wxMAKE_BITSIZE_MSG(type, size)) - -/* ---------------------------------------------------------------------------- */ -/* other miscellaneous debugger-related functions */ -/* ---------------------------------------------------------------------------- */ - -/* - Return true if we're running under debugger. - - Currently this only really works under Win32 and Mac in CodeWarrior builds, - it always returns false in other cases. - */ -#ifdef __cplusplus - /* ABX: check __WIN32__ instead of __WXMSW__ for the same MSWBase in any Win32 port */ - #if defined(__WXMAC__) || defined(__WIN32__) - extern bool WXDLLIMPEXP_BASE wxIsDebuggerRunning(); - #else /* !Mac */ - inline bool wxIsDebuggerRunning() { return false; } - #endif /* Mac/!Mac */ -#endif /* __cplusplus */ - -#endif /* _WX_DEBUG_H_ */ diff --git a/desmume/src/windows/wx/include/wx/debugrpt.h b/desmume/src/windows/wx/include/wx/debugrpt.h deleted file mode 100644 index a50f1cbd0..000000000 --- a/desmume/src/windows/wx/include/wx/debugrpt.h +++ /dev/null @@ -1,235 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/debugrpt.h -// Purpose: declaration of wxDebugReport class -// Author: Vadim Zeitlin -// Created: 2005-01-17 -// RCS-ID: $Id: debugrpt.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 2005 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DEBUGRPT_H_ -#define _WX_DEBUGRPT_H_ - -#include "wx/defs.h" - -#if wxUSE_DEBUGREPORT && wxUSE_XML - -#include "wx/string.h" -#include "wx/arrstr.h" - -class WXDLLIMPEXP_FWD_XML wxXmlNode; - -// ---------------------------------------------------------------------------- -// wxDebugReport: generate a debug report, processing is done in derived class -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_QA wxDebugReport -{ -public: - // this is used for the functions which may report either the current state - // or the state during the last (fatal) exception - enum Context { Context_Current, Context_Exception }; - - - // ctor creates a temporary directory where we create the files which will - // be included in the report, use IsOk() to check for errors - wxDebugReport(); - - // dtor normally destroys the temporary directory created in the ctor (with - // all the files it contains), call Reset() to prevent this from happening - virtual ~wxDebugReport(); - - // return the name of the directory used for this report - const wxString& GetDirectory() const { return m_dir; } - - // return true if the object was successfully initialized - bool IsOk() const { return !GetDirectory().empty(); } - - // reset the directory name we use, the object can't be used any more after - // this as it becomes invalid/uninitialized - void Reset() { m_dir.clear(); } - - - // add another file to the report: the file must already exist, its name - // can be either absolute in which case it is copied to the debug report - // directory or relative to GetDirectory() - // - // description is shown to the user in the report summary - virtual void AddFile(const wxString& filename, const wxString& description); - - // convenience function: write the given text to a file with the given name - // and then add it to the report (the difference with AddFile() is that the - // file will be created by this function and doesn't have to already exist) - bool AddText(const wxString& filename, - const wxString& text, - const wxString& description); - -#if wxUSE_STACKWALKER - // add an XML file containing the current or exception context and the - // stack trace - bool AddCurrentContext() { return AddContext(Context_Current); } - bool AddExceptionContext() { return AddContext(Context_Exception); } - virtual bool AddContext(Context ctx); -#endif - -#if wxUSE_CRASHREPORT - // add a file with crash report - bool AddCurrentDump() { return AddDump(Context_Current); } - bool AddExceptionDump() { return AddDump(Context_Exception); } - virtual bool AddDump(Context ctx); -#endif // wxUSE_CRASHREPORT - - // add all available information to the report - void AddAll(Context context = Context_Exception); - - - // process this report: the base class simply notifies the user that the - // report has been generated, this is usually not enough -- instead you - // should override this method to do something more useful to you - bool Process(); - - // get the name used as base name for various files, by default - // wxApp::GetName() - virtual wxString GetReportName() const; - - // get the files in this report - size_t GetFilesCount() const { return m_files.GetCount(); } - bool GetFile(size_t n, wxString *name, wxString *desc) const; - - // remove the file from report: this is used by wxDebugReportPreview to - // allow the user to remove files potentially containing private - // information from the report - void RemoveFile(const wxString& name); - -protected: -#if wxUSE_STACKWALKER - // used by AddContext() - virtual bool DoAddSystemInfo(wxXmlNode *nodeSystemInfo); - virtual bool DoAddLoadedModules(wxXmlNode *nodeModules); - virtual bool DoAddExceptionInfo(wxXmlNode *nodeContext); - virtual void DoAddCustomContext(wxXmlNode * WXUNUSED(nodeRoot)) { } -#endif - - // used by Process() - virtual bool DoProcess(); - -private: - // name of the report directory - wxString m_dir; - - // the arrays of files in this report and their descriptions - wxArrayString m_files, - m_descriptions; -}; - -#if wxUSE_ZIPSTREAM - -// ---------------------------------------------------------------------------- -// wxDebugReportCompress: compress all files of this debug report in a .ZIP -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_QA wxDebugReportCompress : public wxDebugReport -{ -public: - wxDebugReportCompress() { } - - // returns the full path of the compressed file (empty if creation failed) - const wxString& GetCompressedFileName() const { return m_zipfile; } - -protected: - virtual bool DoProcess(); - -private: - // full path to the ZIP file we created - wxString m_zipfile; -}; - -// ---------------------------------------------------------------------------- -// wxDebugReportUploader: uploads compressed file using HTTP POST request -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_QA wxDebugReportUpload : public wxDebugReportCompress -{ -public: - // this class will upload the compressed file created by its base class to - // an HTML multipart/form-data form at the specified address - // - // the URL is the base address, input is the name of the "type=file" - // control on the form used for the file name and action is the value of - // the form action field - wxDebugReportUpload(const wxString& url, - const wxString& input, - const wxString& action, - const wxString& curl = _T("curl")); - -protected: - virtual bool DoProcess(); - - // this function may be overridden in a derived class to show the output - // from curl: this may be an HTML page or anything else that the server - // returned - // - // return value becomes the return value of Process() - virtual bool OnServerReply(const wxArrayString& WXUNUSED(reply)) - { - return true; - } - -private: - // the full URL to use with HTTP POST request - wxString m_uploadURL; - - // the name of the input field containing the file name in the form at - // above URL - wxString m_inputField; - - // the curl command (by default it is just "curl" but could be full path to - // curl or a wrapper script with curl-compatible syntax) - wxString m_curlCmd; -}; - -#endif // wxUSE_ZIPSTREAM - - -// ---------------------------------------------------------------------------- -// wxDebugReportPreview: presents the debug report to the user and allows him -// to veto report entirely or remove some parts of it -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_QA wxDebugReportPreview -{ -public: - // ctor is trivial - wxDebugReportPreview() { } - - // present the report to the user and allow him to modify it by removing - // some or all of the files and, potentially, adding some notes - // - // return true if the report should be processed or false if the user chose - // to cancel report generation or removed all files from it - virtual bool Show(wxDebugReport& dbgrpt) const = 0; - - // dtor is trivial as well but should be virtual for a base class - virtual ~wxDebugReportPreview() { } -}; - -#if wxUSE_GUI - -// ---------------------------------------------------------------------------- -// wxDebugReportPreviewStd: standard debug report preview window -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_QA wxDebugReportPreviewStd : public wxDebugReportPreview -{ -public: - wxDebugReportPreviewStd() { } - - virtual bool Show(wxDebugReport& dbgrpt) const; -}; - -#endif // wxUSE_GUI - -#endif // wxUSE_DEBUGREPORT && wxUSE_XML - -#endif // _WX_DEBUGRPT_H_ diff --git a/desmume/src/windows/wx/include/wx/defs.h b/desmume/src/windows/wx/include/wx/defs.h deleted file mode 100644 index 0e2ca0c5d..000000000 --- a/desmume/src/windows/wx/include/wx/defs.h +++ /dev/null @@ -1,2900 +0,0 @@ -/* - * Name: wx/defs.h - * Purpose: Declarations/definitions common to all wx source files - * Author: Julian Smart and others - * Modified by: Ryan Norton (Converted to C) - * Created: 01/02/97 - * RCS-ID: $Id: defs.h 53370 2008-04-26 05:43:41Z KO $ - * Copyright: (c) Julian Smart - * Licence: wxWindows licence - */ - -/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ - -#ifndef _WX_DEFS_H_ -#define _WX_DEFS_H_ - -/* ---------------------------------------------------------------------------- */ -/* compiler and OS identification */ -/* ---------------------------------------------------------------------------- */ - -#include "wx/platform.h" - -#ifdef __cplusplus -/* 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(__WXMAC__) && \ - !defined(__WXCOCOA__) && \ - !defined(__X__) && \ - !defined(__WXMGL__) && \ - !defined(__WXDFB__) && \ - !defined(__WXX11__) && \ - wxUSE_GUI -# ifdef __UNIX__ -# error "No Target! You should use wx-config program for compilation flags!" -# else /* !Unix */ -# error "No Target! You should use supplied makefiles for compilation!" -# endif /* Unix/!Unix */ -# endif -#endif /*__cplusplus*/ - -#ifndef __WXWINDOWS__ - #define __WXWINDOWS__ 1 -#endif - -#ifndef wxUSE_BASE - /* by default consider that this is a monolithic build */ - #define wxUSE_BASE 1 -#endif - -#if !wxUSE_GUI && !defined(__WXBASE__) - #define __WXBASE__ -#endif - -/* include the feature test macros */ -#include "wx/features.h" - -/* suppress some Visual C++ warnings */ -#ifdef __VISUALC__ - /* the only "real" warning here is 4244 but there are just too many of them */ - /* in our code... one day someone should go and fix them but until then... */ -# pragma warning(disable:4097) /* typedef used as class */ -# pragma warning(disable:4201) /* nonstandard extension used: nameless struct/union */ -# pragma warning(disable:4244) /* conversion from double to float */ -# pragma warning(disable:4355) /* 'this' used in base member initializer list */ -# pragma warning(disable:4511) /* copy ctor couldn't be generated */ -# pragma warning(disable:4512) /* operator=() couldn't be generated */ -# pragma warning(disable:4710) /* function not inlined */ - - /* For VC++ 5.0 for release mode, the warning 'C4702: unreachable code */ - /* is buggy, and occurs for code that does actually get executed */ -# if !defined __WXDEBUG__ && __VISUALC__ <= 1100 -# pragma warning(disable:4702) /* unreachable code */ -# endif - /* The VC++ 5.0 warning 'C4003: not enough actual parameters for macro' - * is incompatible with the wxWidgets headers since it is given when - * parameters are empty but not missing. */ -# if __VISUALC__ <= 1100 -# pragma warning(disable:4003) /* not enough actual parameters for macro */ -# endif - - /* - VC++ 8 gives a warning when using standard functions such as sprintf, - localtime, ... -- stop this madness, unless the user had already done it - */ - #if __VISUALC__ >= 1400 - #ifndef _CRT_SECURE_NO_DEPRECATE - #define _CRT_SECURE_NO_DEPRECATE 1 - #endif - #ifndef _CRT_NON_CONFORMING_SWPRINTFS - #define _CRT_NON_CONFORMING_SWPRINTFS 1 - #endif - #endif /* VC++ 8 */ -#endif /* __VISUALC__ */ - -/* suppress some Salford C++ warnings */ -#ifdef __SALFORDC__ -# pragma suppress 353 /* Possible nested comments */ -# pragma suppress 593 /* Define not used */ -# pragma suppress 61 /* enum has no name (doesn't suppress!) */ -# pragma suppress 106 /* unnamed, unused parameter */ -# pragma suppress 571 /* Virtual function hiding */ -#endif /* __SALFORDC__ */ - -/* suppress some Borland C++ warnings */ -#ifdef __BORLANDC__ -# pragma warn -inl /* Functions containing reserved words and certain constructs are not expanded inline */ -#endif /* __BORLANDC__ */ - -/* - g++ gives a warning when a class has private dtor if it has no friends but - this is a perfectly valid situation for a ref-counted class which destroys - itself when its ref count drops to 0, so provide a macro to suppress this - warning - */ -#ifdef __GNUG__ -# define wxSUPPRESS_GCC_PRIVATE_DTOR_WARNING(name) \ - friend class wxDummyFriendFor ## name; -#else /* !g++ */ -# define wxSUPPRESS_GCC_PRIVATE_DTOR_WARNING(name) -#endif - -/* ---------------------------------------------------------------------------- */ -/* wxWidgets version and compatibility defines */ -/* ---------------------------------------------------------------------------- */ - -#include "wx/version.h" - -/* ============================================================================ */ -/* non portable C++ features */ -/* ============================================================================ */ - -/* ---------------------------------------------------------------------------- */ -/* compiler defects workarounds */ -/* ---------------------------------------------------------------------------- */ - -/* - Digital Unix C++ compiler only defines this symbol for .cxx and .hxx files, - so define it ourselves (newer versions do it for all files, though, and - don't allow it to be redefined) - */ -#if defined(__DECCXX) && !defined(__VMS) && !defined(__cplusplus) -#define __cplusplus -#endif /* __DECCXX */ - -/* Resolves linking problems under HP-UX when compiling with gcc/g++ */ -#if defined(__HPUX__) && defined(__GNUG__) -#define va_list __gnuc_va_list -#endif /* HP-UX */ - -/* ---------------------------------------------------------------------------- */ -/* check for native bool type and TRUE/FALSE constants */ -/* ---------------------------------------------------------------------------- */ - -/* Add more tests here for Windows compilers that already define bool */ -/* (under Unix, configure tests for this) */ -#ifndef HAVE_BOOL - #if defined( __MWERKS__ ) - #if (__MWERKS__ >= 0x1000) && __option(bool) - #define HAVE_BOOL - #endif - #elif defined(__APPLE__) && defined(__APPLE_CC__) - /* Apple bundled gcc supports bool */ - #define HAVE_BOOL - #elif defined(__VISUALC__) && (__VISUALC__ == 1020) - /* in VC++ 4.2 the bool keyword is reserved (hence can't be typedefed) */ - /* but not implemented, so we must #define it */ - #define bool unsigned int - #elif defined(__VISUALC__) && (__VISUALC__ == 1010) - /* For VisualC++ 4.1, we need to define */ - /* bool as something between 4.0 & 5.0... */ - typedef unsigned int wxbool; - #define bool wxbool - #define HAVE_BOOL - #elif defined(__VISUALC__) && (__VISUALC__ > 1020) - /* VC++ supports bool since 4.2 */ - #define HAVE_BOOL - #elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x500) - /* Borland 5.0+ supports bool */ - #define HAVE_BOOL - #elif wxCHECK_WATCOM_VERSION(1,0) - /* Watcom 11+ supports bool */ - #define HAVE_BOOL - #elif defined(__DIGITALMARS__) - /* DigitalMars supports bool */ - #define HAVE_BOOL - #elif defined(__GNUWIN32__) || defined(__MINGW32__) || defined(__CYGWIN__) - /* Cygwin supports bool */ - #define HAVE_BOOL - #elif defined(__VISAGECPP__) - #if __IBMCPP__ < 400 - typedef unsigned long bool; - #define true ((bool)1) - #define false ((bool)0) - #endif - #define HAVE_BOOL - #endif /* compilers */ -#endif /* HAVE_BOOL */ - -#if !defined(__MWERKS__) || !defined(true) -#if !defined(HAVE_BOOL) && !defined(bool) && !defined(VMS) - /* NB: of course, this doesn't replace the standard type, because, for */ - /* example, overloading based on bool/int parameter doesn't work and */ - /* so should be avoided in portable programs */ - typedef unsigned int bool; -#endif /* bool */ - -/* deal with TRUE/true stuff: we assume that if the compiler supports bool, it */ -/* supports true/false as well and that, OTOH, if it does _not_ support bool, */ -/* it doesn't support these keywords (this is less sure, in particular VC++ */ -/* 4.x could be a problem here) */ -#ifndef HAVE_BOOL - #define true ((bool)1) - #define false ((bool)0) -#endif -#endif - -/* for backwards compatibility, also define TRUE and FALSE */ -/* */ -/* note that these definitions should work both in C++ and C code, so don't */ -/* use true/false below */ -#ifndef TRUE - #define TRUE 1 -#endif - -#ifndef FALSE - #define FALSE 0 -#endif - -typedef short int WXTYPE; - -/* special care should be taken with this type under Windows where the real */ -/* window id is unsigned, so we must always do the cast before comparing them */ -/* (or else they would be always different!). Using wxGetWindowId() which does */ -/* the cast itself is recommended. Note that this type can't be unsigned */ -/* because wxID_ANY == -1 is a valid (and largely used) value for window id. */ -typedef int wxWindowID; - -/* ---------------------------------------------------------------------------- */ -/* other feature tests */ -/* ---------------------------------------------------------------------------- */ - -/* Every ride down a slippery slope begins with a single step.. */ -/* */ -/* Yes, using nested classes is indeed against our coding standards in */ -/* general, but there are places where you can use them to advantage */ -/* without totally breaking ports that cannot use them. If you do, then */ -/* wrap it in this guard, but such cases should still be relatively rare. */ -#define wxUSE_NESTED_CLASSES 1 - -/* check for explicit keyword support */ -#ifndef HAVE_EXPLICIT - #if defined(__VISUALC__) && (__VISUALC__ >= 1100) - /* VC++ 6.0 and 5.0 have explicit (what about earlier versions?) */ - #define HAVE_EXPLICIT - #elif ( defined(__MINGW32__) || defined(__CYGWIN32__) ) \ - && wxCHECK_GCC_VERSION(2, 95) - /* GCC 2.95 has explicit, what about earlier versions? */ - #define HAVE_EXPLICIT - #elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x0520) - /* BC++ 4.52 doesn't support explicit, CBuilder 1 does */ - #define HAVE_EXPLICIT - #elif defined(__MWERKS__) && (__MWERKS__ >= 0x2400) - /* Metrowerks CW6 or higher has explicit */ - #define HAVE_EXPLICIT - #elif defined(__DIGITALMARS__) - #define HAVE_EXPLICIT - #endif -#endif /* !HAVE_EXPLICIT */ - -#ifdef HAVE_EXPLICIT - #define wxEXPLICIT explicit -#else /* !HAVE_EXPLICIT */ - #define wxEXPLICIT -#endif /* HAVE_EXPLICIT/!HAVE_EXPLICIT */ - -/* check for static/const_cast<>() (we don't use the other ones for now) */ -#ifndef HAVE_CXX_CASTS - #if defined(__VISUALC__) && (__VISUALC__ >= 1100) - /* VC++ 6.0 and 5.0 have C++ casts (what about earlier versions?) */ - #define HAVE_CXX_CASTS - #elif defined(__MINGW32__) || defined(__CYGWIN32__) - #if wxCHECK_GCC_VERSION(2, 95) - /* GCC 2.95 has C++ casts, what about earlier versions? */ - #define HAVE_CXX_CASTS - #endif - #endif -#endif /* !HAVE_CXX_CASTS */ - -#ifdef HAVE_CXX_CASTS - #ifndef HAVE_CONST_CAST - #define HAVE_CONST_CAST - #endif - #ifndef HAVE_REINTERPRET_CAST - #define HAVE_REINTERPRET_CAST - #endif - #ifndef HAVE_STATIC_CAST - #define HAVE_STATIC_CAST - #endif - #ifndef HAVE_DYNAMIC_CAST - #define HAVE_DYNAMIC_CAST - #endif -#endif /* HAVE_CXX_CASTS */ - -#ifdef HAVE_STATIC_CAST - #define wx_static_cast(t, x) static_cast(x) -#else - #define wx_static_cast(t, x) ((t)(x)) -#endif - -#ifdef HAVE_CONST_CAST - #define wx_const_cast(t, x) const_cast(x) -#else - #define wx_const_cast(t, x) ((t)(x)) -#endif - -#ifdef HAVE_REINTERPRET_CAST - #define wx_reinterpret_cast(t, x) reinterpret_cast(x) -#else - #define wx_reinterpret_cast(t, x) ((t)(x)) -#endif - -/* - This one is a wx invention: like static cast but used when we intentionally - truncate from a larger to smaller type, static_cast<> can't be used for it - as it results in warnings when using some compilers (SGI mipspro for example) - */ -#if defined(__INTELC__) && defined(__cplusplus) - template - inline T wx_truncate_cast_impl(X x) - { - #pragma warning(push) - /* implicit conversion of a 64-bit integral type to a smaller integral type */ - #pragma warning(disable: 1682) - /* conversion from "X" to "T" may lose significant bits */ - #pragma warning(disable: 810) - - return x; - - #pragma warning(pop) - } - - #define wx_truncate_cast(t, x) wx_truncate_cast_impl(x) - -#elif defined(__cplusplus) && defined(__VISUALC__) && __VISUALC__ >= 1310 - template - inline T wx_truncate_cast_impl(X x) - { - #pragma warning(push) - /* conversion from 'X' to 'T', possible loss of data */ - #pragma warning(disable: 4267) - - return x; - - #pragma warning(pop) - } - - #define wx_truncate_cast(t, x) wx_truncate_cast_impl(x) -#else - #define wx_truncate_cast(t, x) ((t)(x)) -#endif - -/* for consistency with wxStatic/DynamicCast defined in wx/object.h */ -#define wxConstCast(obj, className) wx_const_cast(className *, obj) - -#ifndef HAVE_STD_WSTRING - #if defined(__VISUALC__) && (__VISUALC__ >= 1100) - /* VC++ 6.0 and 5.0 have std::wstring (what about earlier versions?) */ - #define HAVE_STD_WSTRING - #elif ( defined(__MINGW32__) || defined(__CYGWIN32__) ) \ - && wxCHECK_GCC_VERSION(3, 3) - /* GCC 3.1 has std::wstring; 3.0 never was in MinGW, 2.95 hasn't it */ - #define HAVE_STD_WSTRING - #endif -#endif - -#ifndef HAVE_STD_STRING_COMPARE - #if defined(__VISUALC__) && (__VISUALC__ >= 1100) - /* VC++ 6.0 and 5.0 have std::string::compare */ - /* (what about earlier versions?) */ - #define HAVE_STD_STRING_COMPARE - #elif ( defined(__MINGW32__) || defined(__CYGWIN32__) ) \ - && wxCHECK_GCC_VERSION(3, 1) - /* GCC 3.1 has std::string::compare; */ - /* 3.0 never was in MinGW, 2.95 hasn't it */ - #define HAVE_STD_STRING_COMPARE - #endif -#endif - -/* provide replacement for C99 va_copy() if the compiler doesn't have it */ - -/* could be already defined by configure or the user */ -#ifndef wxVaCopy - /* if va_copy is a macro or configure detected that we have it, use it */ - #if defined(va_copy) || defined(HAVE_VA_COPY) - #define wxVaCopy va_copy - #else /* no va_copy, try to provide a replacement */ - /* - configure tries to determine whether va_list is an array or struct - type, but it may not be used under Windows, so deal with a few - special cases. - */ - - #ifdef __WATCOMC__ - /* Watcom uses array type for va_list except for PPC and Alpha */ - #if !defined(__PPC__) && !defined(__AXP__) - #define VA_LIST_IS_ARRAY - #endif - #endif /* __WATCOMC__ */ - - #if defined(__PPC__) && (defined(_CALL_SYSV) || defined (_WIN32)) - /* - PPC using SysV ABI and NT/PPC are special in that they use an - extra level of indirection. - */ - #define VA_LIST_IS_POINTER - #endif /* SysV or Win32 on __PPC__ */ - - /* - note that we use memmove(), not memcpy(), in case anybody tries - to do wxVaCopy(ap, ap) - */ - #if defined(VA_LIST_IS_POINTER) - #define wxVaCopy(d, s) memmove(*(d), *(s), sizeof(va_list)) - #elif defined(VA_LIST_IS_ARRAY) - #define wxVaCopy(d, s) memmove((d), (s), sizeof(va_list)) - #else /* we can only hope that va_lists are simple lvalues */ - #define wxVaCopy(d, s) ((d) = (s)) - #endif - #endif /* va_copy/!va_copy */ -#endif /* wxVaCopy */ - - -/* ---------------------------------------------------------------------------- */ -/* portable calling conventions macros */ -/* ---------------------------------------------------------------------------- */ - -/* stdcall is used for all functions called by Windows under Windows */ -#if defined(__WINDOWS__) - #if defined(__GNUWIN32__) - #define wxSTDCALL __attribute__((stdcall)) - #else - /* both VC++ and Borland understand this */ - #define wxSTDCALL _stdcall - #endif - -#else /* Win */ - /* no such stupidness under Unix */ - #define wxSTDCALL -#endif /* platform */ - -/* LINKAGEMODE mode is empty for everyting except OS/2 */ -#ifndef LINKAGEMODE - #define LINKAGEMODE -#endif /* LINKAGEMODE */ - -/* wxCALLBACK should be used for the functions which are called back by */ -/* Windows (such as compare function for wxListCtrl) */ -#if defined(__WIN32__) && !defined(__WXMICROWIN__) - #define wxCALLBACK wxSTDCALL -#else - /* no stdcall under Unix nor Win16 */ - #define wxCALLBACK -#endif /* platform */ - -/* generic calling convention for the extern "C" functions */ - -#if defined(__VISUALC__) - #define wxC_CALLING_CONV _cdecl -#elif defined(__VISAGECPP__) - #define wxC_CALLING_CONV _Optlink -#else /* !Visual C++ */ - #define wxC_CALLING_CONV -#endif /* compiler */ - -/* callling convention for the qsort(3) callback */ -#define wxCMPFUNC_CONV wxC_CALLING_CONV - -/* compatibility :-( */ -#define CMPFUNC_CONV wxCMPFUNC_CONV - -/* DLL import/export declarations */ -#include "wx/dlimpexp.h" - -/* ---------------------------------------------------------------------------- */ -/* Very common macros */ -/* ---------------------------------------------------------------------------- */ - -/* Printf-like attribute definitions to obtain warnings with GNU C/C++ */ -#ifndef ATTRIBUTE_PRINTF -# if defined(__GNUC__) && !wxUSE_UNICODE -# define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) -# else -# define ATTRIBUTE_PRINTF(m, n) -# endif - -# define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2) -# define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3) -# define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4) -# define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5) -# define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6) -#endif /* !defined(ATTRIBUTE_PRINTF) */ - -/* Macro to issue warning when using deprecated functions with gcc3 or MSVC7: */ -#if wxCHECK_GCC_VERSION(3, 1) - #define wxDEPRECATED(x) x __attribute__ ((deprecated)) -#elif defined(__VISUALC__) && (__VISUALC__ >= 1300) - #define wxDEPRECATED(x) __declspec(deprecated) x -#else - #define wxDEPRECATED(x) x -#endif - -/* everybody gets the assert and other debug macros */ -#include "wx/debug.h" - -/* 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) */ -#ifndef __HANDHELDPC__ -#include -#endif - -/* delete pointer if it is not NULL and NULL it afterwards */ -/* (checking that it's !NULL before passing it to delete is just a */ -/* a question of style, because delete will do it itself anyhow, but it might */ -/* be considered as an error by some overzealous debugging implementations of */ -/* the library, so we do it ourselves) */ -#define wxDELETE(p) if ( (p) != NULL ) { delete p; p = NULL; } - -/* delete an array and NULL it (see comments above) */ -#define wxDELETEA(p) if ( (p) ) { delete [] (p); p = NULL; } - -/* size of statically declared array */ -#define WXSIZEOF(array) (sizeof(array)/sizeof(array[0])) - -/* symbolic constant used by all Find()-like functions returning positive */ -/* integer on success as failure indicator */ -#define wxNOT_FOUND (-1) - -/* ---------------------------------------------------------------------------- */ -/* macros to avoid compiler warnings */ -/* ---------------------------------------------------------------------------- */ - -/* Macro to cut down on compiler warnings. */ -#if 1 /* there should be no more any compilers needing the "#else" version */ - #define WXUNUSED(identifier) /* identifier */ -#else /* stupid, broken compiler */ - #define WXUNUSED(identifier) identifier -#endif - -/* some arguments are only used in debug mode, but unused in release one */ -#ifdef __WXDEBUG__ - #define WXUNUSED_UNLESS_DEBUG(param) param -#else - #define WXUNUSED_UNLESS_DEBUG(param) WXUNUSED(param) -#endif - -/* some arguments are not used in unicode mode */ -#if wxUSE_UNICODE - #define WXUNUSED_IN_UNICODE(param) WXUNUSED(param) -#else - #define WXUNUSED_IN_UNICODE(param) param -#endif - -/* some arguments are not used in WinCE build */ -#ifdef __WXWINCE__ - #define WXUNUSED_IN_WINCE(param) WXUNUSED(param) -#else - #define WXUNUSED_IN_WINCE(param) param -#endif - -/* unused parameters in non stream builds */ -#if wxUSE_STREAMS - #define WXUNUSED_UNLESS_STREAMS(param) param -#else - #define WXUNUSED_UNLESS_STREAMS(param) WXUNUSED(param) -#endif - -/* some compilers give warning about a possibly unused variable if it is */ -/* initialized in both branches of if/else and shut up if it is initialized */ -/* when declared, but other compilers then give warnings about unused variable */ -/* value -- this should satisfy both of them */ -#if defined(__VISUALC__) - #define wxDUMMY_INITIALIZE(val) = val -#else - #define wxDUMMY_INITIALIZE(val) -#endif - -/* sometimes the value of a variable is *really* not used, to suppress the */ -/* resulting warning you may pass it to this function */ -#ifdef __cplusplus -# ifdef __BORLANDC__ -# define wxUnusedVar(identifier) identifier -# else - template - inline void wxUnusedVar(const T& WXUNUSED(t)) { } -# endif -#endif - -/* ---------------------------------------------------------------------------- */ -/* compiler specific settings */ -/* ---------------------------------------------------------------------------- */ - -/* to allow compiling with warning level 4 under Microsoft Visual C++ some */ -/* warnings just must be disabled */ -#ifdef __VISUALC__ - #pragma warning(disable: 4514) /* unreferenced inline func has been removed */ -/* - you might be tempted to disable this one also: triggered by CHECK and FAIL - macros in debug.h, but it's, overall, a rather useful one, so I leave it and - will try to find some way to disable this warning just for CHECK/FAIL. Anyone? -*/ - #pragma warning(disable: 4127) /* conditional expression is constant */ -#endif /* VC++ */ - -#if defined(__MWERKS__) - #undef try - #undef except - #undef finally - #define except(x) catch(...) -#endif /* Metrowerks */ - -#if wxONLY_WATCOM_EARLIER_THAN(1,4) - typedef short mode_t; -#endif - -/* where should i put this? we need to make sure of this as it breaks */ -/* the code. */ -#if !wxUSE_IOSTREAMH && defined(__WXDEBUG__) -# ifndef __MWERKS__ -/* #undef __WXDEBUG__ */ -# ifdef wxUSE_DEBUG_NEW_ALWAYS -# undef wxUSE_DEBUG_NEW_ALWAYS -# define wxUSE_DEBUG_NEW_ALWAYS 0 -# endif -# endif -#endif - -/* ---------------------------------------------------------------------------- */ -/* standard wxWidgets types */ -/* ---------------------------------------------------------------------------- */ - -/* the type for screen and DC coordinates */ -typedef int wxCoord; - -enum { wxDefaultCoord = -1 }; - -/* ---------------------------------------------------------------------------- */ -/* define fixed length types */ -/* ---------------------------------------------------------------------------- */ - -#if defined(__WXPALMOS__) || defined(__MINGW32__) - #include -#endif - -/* chars are always one byte (by definition), shorts are always two (in */ -/* practice) */ - -/* 8bit */ -#ifndef SIZEOF_CHAR - #define SIZEOF_CHAR 1 -#endif -typedef signed char wxInt8; -typedef unsigned char wxUint8; -typedef wxUint8 wxByte; - - -/* 16bit */ -#ifdef SIZEOF_SHORT - #if SIZEOF_SHORT != 2 - #error "wxWidgets assumes sizeof(short) == 2, please fix the code" - #endif -#else - #define SIZEOF_SHORT 2 -#endif - -typedef signed short wxInt16; -typedef unsigned short wxUint16; - -typedef wxUint16 wxWord; - -/* - things are getting more interesting with ints, longs and pointers - - there are several different standard data models described by this table: - - +-----------+----------------------------+ - |type\model | LP64 ILP64 LLP64 ILP32 LP32| - +-----------+----------------------------+ - |char | 8 8 8 8 8 | - |short | 16 16 16 16 16 | - |int | 32 64 32 32 16 | - |long | 64 64 32 32 32 | - |long long | 64 | - |void * | 64 64 64 32 32 | - +-----------+----------------------------+ - - Win16 used LP32 (but we don't support it any longer), Win32 obviously used - ILP32 and Win64 uses LLP64 (a.k.a. P64) - - Under Unix LP64 is the most widely used (the only I've ever seen, in fact) - */ - -/* 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 - #define wxSIZE_T_IS_UINT - #define SIZEOF_VOID_P 4 - #define SIZEOF_SIZE_T 4 -#elif defined(__WINDOWS__) - /* Win64 uses LLP64 model and so ints and longs have the same size as in */ - /* Win32 */ - #if defined(__WIN32__) - typedef int wxInt32; - typedef unsigned int wxUint32; - - /* Assume that if SIZEOF_INT is defined that all the other ones except - SIZEOF_SIZE_T, are too. See next #if below. */ - #ifndef SIZEOF_INT - #define SIZEOF_INT 4 - #define SIZEOF_LONG 4 - #define SIZEOF_WCHAR_T 2 - - /* - under Win64 sizeof(size_t) == 8 and so it is neither unsigned - int nor unsigned long! - */ - #ifdef __WIN64__ - #define SIZEOF_SIZE_T 8 - - #undef wxSIZE_T_IS_UINT - #else /* Win32 */ - #define SIZEOF_SIZE_T 4 - - #define wxSIZE_T_IS_UINT - #endif - #undef wxSIZE_T_IS_ULONG - - #ifdef __WIN64__ - #define SIZEOF_VOID_P 8 - #else /* Win32 */ - #define SIZEOF_VOID_P 4 - #endif /* Win64/32 */ - #endif /* !defined(SIZEOF_INT) */ - - /* - If Python.h was included first, it defines all of the SIZEOF's above - except for SIZEOF_SIZE_T, so we need to do it here to avoid - triggering the #error in the ssize_t typedefs below... - */ - #ifndef SIZEOF_SIZE_T - #ifdef __WIN64__ - #define SIZEOF_SIZE_T 8 - #else /* Win32 */ - #define SIZEOF_SIZE_T 4 - #endif - #endif - #else - #error "Unsupported Windows version" - #endif -#else /* !Windows */ - /* SIZEOF_XXX are normally defined by configure */ - #ifdef SIZEOF_INT - #if SIZEOF_INT == 8 - /* must be ILP64 data model, there is normally a special 32 bit */ - /* type in it but we don't know what it is... */ - #error "No 32bit int type on this platform" - #elif SIZEOF_INT == 4 - typedef int wxInt32; - typedef unsigned int wxUint32; - #elif SIZEOF_INT == 2 - /* must be LP32 */ - #if SIZEOF_LONG != 4 - #error "No 32bit int type on this platform" - #endif - - typedef long wxInt32; - typedef unsigned long wxUint32; - #else - /* wxWidgets is not ready for 128bit systems yet... */ - #error "Unknown sizeof(int) value, what are you compiling for?" - #endif - #else /* !defined(SIZEOF_INT) */ - /* assume default 32bit machine -- what else can we do? */ - wxCOMPILE_TIME_ASSERT( sizeof(int) == 4, IntMustBeExactly4Bytes); - wxCOMPILE_TIME_ASSERT( sizeof(size_t) == 4, SizeTMustBeExactly4Bytes); - wxCOMPILE_TIME_ASSERT( sizeof(void *) == 4, PtrMustBeExactly4Bytes); - - #define SIZEOF_INT 4 - #define SIZEOF_SIZE_T 4 - #define SIZEOF_VOID_P 4 - - typedef int wxInt32; - typedef unsigned int wxUint32; - - #if defined(__MACH__) && !defined(SIZEOF_WCHAR_T) - #define SIZEOF_WCHAR_T 4 - #endif - #if wxUSE_WCHAR_T && !defined(SIZEOF_WCHAR_T) - /* also assume that sizeof(wchar_t) == 2 (under Unix the most */ - /* common case is 4 but there configure would have defined */ - /* SIZEOF_WCHAR_T for us) */ - /* the most common case */ - wxCOMPILE_TIME_ASSERT( sizeof(wchar_t) == 2, - Wchar_tMustBeExactly2Bytes); - - #define SIZEOF_WCHAR_T 2 - #endif /* wxUSE_WCHAR_T */ - #endif -#endif /* Win/!Win */ - -typedef wxUint32 wxDword; - -/* - Define an integral type big enough to contain all of long, size_t and void *. - */ -#if SIZEOF_LONG >= SIZEOF_VOID_P && SIZEOF_LONG >= SIZEOF_SIZE_T - /* normal case */ - typedef unsigned long wxUIntPtr; -#elif SIZEOF_SIZE_T >= SIZEOF_VOID_P - /* Win64 case */ - typedef size_t wxUIntPtr; -#else - /* - This should never happen for the current architectures but if you're - using one where it does, please contact wx-dev@lists.wxwidgets.org. - */ - #error "Pointers can't be stored inside integer types." -#endif - -#ifdef __cplusplus -/* And also define a couple of simple functions to cast pointer to/from it. */ -inline wxUIntPtr wxPtrToUInt(const void *p) -{ - /* - VC++ 7.1 gives warnings about casts such as below even when they're - explicit with /Wp64 option, suppress them as we really know what we're - doing here. Same thing with icc with -Wall. - */ -#ifdef __VISUALC__ - #if __VISUALC__ >= 1200 - #pragma warning(push) - #endif - /* pointer truncation from '' to '' */ - #pragma warning(disable: 4311) -#elif defined(__INTELC__) - #pragma warning(push) - /* conversion from pointer to same-sized integral type */ - #pragma warning(disable: 1684) -#endif - - return wx_reinterpret_cast(wxUIntPtr, p); - -#if (defined(__VISUALC__) && __VISUALC__ >= 1200) || defined(__INTELC__) - #pragma warning(pop) -#endif -} - -inline void *wxUIntToPtr(wxUIntPtr p) -{ -#ifdef __VISUALC__ - #if __VISUALC__ >= 1200 - #pragma warning(push) - #endif - /* conversion to type of greater size */ - #pragma warning(disable: 4312) -#elif defined(__INTELC__) - #pragma warning(push) - /* invalid type conversion: "wxUIntPtr={unsigned long}" to "void *" */ - #pragma warning(disable: 171) -#endif - - return wx_reinterpret_cast(void *, p); - -#if (defined(__VISUALC__) && __VISUALC__ >= 1200) || defined(__INTELC__) - #pragma warning(pop) -#endif -} -#endif /*__cplusplus*/ - - -/* 64 bit */ - -/* NB: we #define and not typedef wxLongLong_t because we use "#ifdef */ -/* wxLongLong_t" in wx/longlong.h */ - -/* wxULongLong_t is set later (usually to unsigned wxLongLong_t) */ - -/* to avoid compilation problems on 64bit machines with ambiguous method calls */ -/* we will need to define this */ -#undef wxLongLongIsLong - -/* - First check for specific compilers which have known 64 bit integer types, - this avoids clashes with SIZEOF_LONG[_LONG] being defined incorrectly for - e.g. MSVC builds (Python.h defines it as 8 even for MSVC). - - Also notice that we check for "long long" before checking for 64 bit long as - we still want to use "long long" and not "long" for wxLongLong_t on 64 bit - architectures to be able to pass wxLongLong_t to the standard functions - prototyped as taking "long long" such as strtoll(). - */ -#if (defined(__VISUALC__) && defined(__WIN32__)) - #define wxLongLong_t __int64 - #define wxLongLongSuffix i64 - #define wxLongLongFmtSpec _T("I64") -#elif defined(__BORLANDC__) && defined(__WIN32__) && (__BORLANDC__ >= 0x520) - #define wxLongLong_t __int64 - #define wxLongLongSuffix i64 - #define wxLongLongFmtSpec _T("L") -#elif (defined(__WATCOMC__) && (defined(__WIN32__) || defined(__DOS__) || defined(__OS2__))) - #define wxLongLong_t __int64 - #define wxLongLongSuffix i64 - #define wxLongLongFmtSpec _T("L") -#elif defined(__DIGITALMARS__) - #define wxLongLong_t __int64 - #define wxLongLongSuffix LL - #define wxLongLongFmtSpec _T("ll") -#elif defined(__MINGW32__) - #define wxLongLong_t long long - #define wxLongLongSuffix ll - #define wxLongLongFmtSpec _T("I64") -#elif defined(__MWERKS__) - #if __option(longlong) - #define wxLongLong_t long long - #define wxLongLongSuffix ll - #define wxLongLongFmtSpec _T("ll") - #else - #error "The 64 bit integer support in CodeWarrior has been disabled." - #error "See the documentation on the 'longlong' pragma." - #endif -#elif defined(__WXPALMOS__) - #define wxLongLong_t int64_t - #define wxLongLongSuffix ll - #define wxLongLongFmtSpec _T("ll") -#elif defined(__VISAGECPP__) && __IBMCPP__ >= 400 - #define wxLongLong_t long long -#elif (defined(SIZEOF_LONG_LONG) && SIZEOF_LONG_LONG >= 8) || \ - defined(__GNUC__) || \ - defined(__CYGWIN__) || \ - defined(__WXMICROWIN__) || \ - (defined(__DJGPP__) && __DJGPP__ >= 2) - #define wxLongLong_t long long - #define wxLongLongSuffix ll - #define wxLongLongFmtSpec _T("ll") -#elif defined(SIZEOF_LONG) && (SIZEOF_LONG == 8) - #define wxLongLong_t long - #define wxLongLongSuffix l - #define wxLongLongFmtSpec _T("l") - #define wxLongLongIsLong -#endif - - -#ifdef wxLongLong_t - - #ifdef __WXPALMOS__ - #define wxULongLong_t uint64_t - #else - #define wxULongLong_t unsigned wxLongLong_t - #endif - - /* these macros allow to define 64 bit constants in a portable way */ - #define wxLL(x) wxCONCAT(x, wxLongLongSuffix) - #define wxULL(x) wxCONCAT(x, wxCONCAT(u, wxLongLongSuffix)) - - typedef wxLongLong_t wxInt64; - typedef wxULongLong_t wxUint64; - - #define wxHAS_INT64 1 - -#elif wxUSE_LONGLONG - /* these macros allow to define 64 bit constants in a portable way */ - #define wxLL(x) wxLongLong(x) - #define wxULL(x) wxULongLong(x) - - #define wxInt64 wxLongLong - #define wxUint64 wxULongLong - - #define wxHAS_INT64 1 - -#else /* !wxUSE_LONGLONG */ - - #define wxHAS_INT64 0 - -#endif - - -/* Make sure ssize_t is defined (a signed type the same size as size_t) */ -/* HAVE_SSIZE_T should be defined for compiliers that already have it */ -#ifdef __MINGW32__ - #if defined(_SSIZE_T_) && !defined(HAVE_SSIZE_T) - #define HAVE_SSIZE_T - #endif -#endif -#if defined(__PALMOS__) && !defined(HAVE_SSIZE_T) - #define HAVE_SSIZE_T -#endif -#if wxCHECK_WATCOM_VERSION(1,4) - #define HAVE_SSIZE_T -#endif -#ifndef HAVE_SSIZE_T - #if SIZEOF_SIZE_T == 4 - typedef wxInt32 ssize_t; - #elif SIZEOF_SIZE_T == 8 - typedef wxInt64 ssize_t; - #else - #error "error defining ssize_t, size_t is not 4 or 8 bytes" - #endif -#endif - - -/* base floating point types */ -/* wxFloat32: 32 bit IEEE float ( 1 sign, 8 exponent bits, 23 fraction bits */ -/* wxFloat64: 64 bit IEEE float ( 1 sign, 11 exponent bits, 52 fraction bits */ -/* wxDouble: native fastest representation that has at least wxFloat64 */ -/* precision, so use the IEEE types for storage, and this for */ -/* calculations */ - -typedef float wxFloat32; -#if (defined( __WXMAC__ ) || defined(__WXCOCOA__)) && defined (__MWERKS__) - typedef short double wxFloat64; -#else - typedef double wxFloat64; -#endif - -typedef double wxDouble; - -/* - Some (non standard) compilers typedef wchar_t as an existing type instead - of treating it as a real fundamental type, set wxWCHAR_T_IS_REAL_TYPE to 0 - for them and to 1 for all the others. - */ -#if wxUSE_WCHAR_T - /* - VC++ typedefs wchar_t as unsigned short by default, that is unless - /Za or /Zc:wchar_t option is used in which case _WCHAR_T_DEFINED is - defined. - */ -# if defined(__VISUALC__) && !defined(_NATIVE_WCHAR_T_DEFINED) -# define wxWCHAR_T_IS_REAL_TYPE 0 -# else /* compiler having standard-conforming wchar_t */ -# define wxWCHAR_T_IS_REAL_TYPE 1 -# endif -#endif /* wxUSE_WCHAR_T */ - -/* ---------------------------------------------------------------------------- */ -/* byte ordering related definition and macros */ -/* ---------------------------------------------------------------------------- */ - -/* byte sex */ - -#define wxBIG_ENDIAN 4321 -#define wxLITTLE_ENDIAN 1234 -#define wxPDP_ENDIAN 3412 - -#ifdef WORDS_BIGENDIAN -#define wxBYTE_ORDER wxBIG_ENDIAN -#else -#define wxBYTE_ORDER wxLITTLE_ENDIAN -#endif - -/* byte swapping */ - -#if defined (__MWERKS__) && ( (__MWERKS__ < 0x0900) || macintosh ) -/* assembler versions for these */ -#ifdef __POWERPC__ - inline wxUint16 wxUINT16_SWAP_ALWAYS( wxUint16 i ) - {return (__lhbrx( &i , 0 ) );} - inline wxInt16 wxINT16_SWAP_ALWAYS( wxInt16 i ) - {return (__lhbrx( &i , 0 ) );} - inline wxUint32 wxUINT32_SWAP_ALWAYS( wxUint32 i ) - {return (__lwbrx( &i , 0 ) );} - inline wxInt32 wxINT32_SWAP_ALWAYS( wxInt32 i ) - {return (__lwbrx( &i , 0 ) );} -#else - #pragma parameter __D0 wxUINT16_SWAP_ALWAYS(__D0) - pascal wxUint16 wxUINT16_SWAP_ALWAYS(wxUint16 value) - = { 0xE158 }; - - #pragma parameter __D0 wxINT16_SWAP_ALWAYS(__D0) - pascal wxInt16 wxINT16_SWAP_ALWAYS(wxInt16 value) - = { 0xE158 }; - - #pragma parameter __D0 wxUINT32_SWAP_ALWAYS (__D0) - pascal wxUint32 wxUINT32_SWAP_ALWAYS(wxUint32 value) - = { 0xE158, 0x4840, 0xE158 }; - - #pragma parameter __D0 wxINT32_SWAP_ALWAYS (__D0) - pascal wxInt32 wxINT32_SWAP_ALWAYS(wxInt32 value) - = { 0xE158, 0x4840, 0xE158 }; - -#endif -#else /* !MWERKS */ -#define wxUINT16_SWAP_ALWAYS(val) \ - ((wxUint16) ( \ - (((wxUint16) (val) & (wxUint16) 0x00ffU) << 8) | \ - (((wxUint16) (val) & (wxUint16) 0xff00U) >> 8))) - -#define wxINT16_SWAP_ALWAYS(val) \ - ((wxInt16) ( \ - (((wxUint16) (val) & (wxUint16) 0x00ffU) << 8) | \ - (((wxUint16) (val) & (wxUint16) 0xff00U) >> 8))) - -#define wxUINT32_SWAP_ALWAYS(val) \ - ((wxUint32) ( \ - (((wxUint32) (val) & (wxUint32) 0x000000ffU) << 24) | \ - (((wxUint32) (val) & (wxUint32) 0x0000ff00U) << 8) | \ - (((wxUint32) (val) & (wxUint32) 0x00ff0000U) >> 8) | \ - (((wxUint32) (val) & (wxUint32) 0xff000000U) >> 24))) - -#define wxINT32_SWAP_ALWAYS(val) \ - ((wxInt32) ( \ - (((wxUint32) (val) & (wxUint32) 0x000000ffU) << 24) | \ - (((wxUint32) (val) & (wxUint32) 0x0000ff00U) << 8) | \ - (((wxUint32) (val) & (wxUint32) 0x00ff0000U) >> 8) | \ - (((wxUint32) (val) & (wxUint32) 0xff000000U) >> 24))) -#endif -/* machine specific byte swapping */ - -#ifdef wxLongLong_t - #define wxUINT64_SWAP_ALWAYS(val) \ - ((wxUint64) ( \ - (((wxUint64) (val) & (wxUint64) wxULL(0x00000000000000ff)) << 56) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x000000000000ff00)) << 40) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x0000000000ff0000)) << 24) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x00000000ff000000)) << 8) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x000000ff00000000)) >> 8) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x0000ff0000000000)) >> 24) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x00ff000000000000)) >> 40) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0xff00000000000000)) >> 56))) - - #define wxINT64_SWAP_ALWAYS(val) \ - ((wxInt64) ( \ - (((wxUint64) (val) & (wxUint64) wxULL(0x00000000000000ff)) << 56) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x000000000000ff00)) << 40) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x0000000000ff0000)) << 24) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x00000000ff000000)) << 8) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x000000ff00000000)) >> 8) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x0000ff0000000000)) >> 24) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0x00ff000000000000)) >> 40) | \ - (((wxUint64) (val) & (wxUint64) wxULL(0xff00000000000000)) >> 56))) -#elif wxUSE_LONGLONG /* !wxLongLong_t */ - #define wxUINT64_SWAP_ALWAYS(val) \ - ((wxUint64) ( \ - ((wxULongLong(val) & wxULongLong(0L, 0x000000ffU)) << 56) | \ - ((wxULongLong(val) & wxULongLong(0L, 0x0000ff00U)) << 40) | \ - ((wxULongLong(val) & wxULongLong(0L, 0x00ff0000U)) << 24) | \ - ((wxULongLong(val) & wxULongLong(0L, 0xff000000U)) << 8) | \ - ((wxULongLong(val) & wxULongLong(0x000000ffL, 0U)) >> 8) | \ - ((wxULongLong(val) & wxULongLong(0x0000ff00L, 0U)) >> 24) | \ - ((wxULongLong(val) & wxULongLong(0x00ff0000L, 0U)) >> 40) | \ - ((wxULongLong(val) & wxULongLong(0xff000000L, 0U)) >> 56))) - - #define wxINT64_SWAP_ALWAYS(val) \ - ((wxInt64) ( \ - ((wxLongLong(val) & wxLongLong(0L, 0x000000ffU)) << 56) | \ - ((wxLongLong(val) & wxLongLong(0L, 0x0000ff00U)) << 40) | \ - ((wxLongLong(val) & wxLongLong(0L, 0x00ff0000U)) << 24) | \ - ((wxLongLong(val) & wxLongLong(0L, 0xff000000U)) << 8) | \ - ((wxLongLong(val) & wxLongLong(0x000000ffL, 0U)) >> 8) | \ - ((wxLongLong(val) & wxLongLong(0x0000ff00L, 0U)) >> 24) | \ - ((wxLongLong(val) & wxLongLong(0x00ff0000L, 0U)) >> 40) | \ - ((wxLongLong(val) & wxLongLong(0xff000000L, 0U)) >> 56))) -#endif /* wxLongLong_t/!wxLongLong_t */ - -#ifdef WORDS_BIGENDIAN - #define wxUINT16_SWAP_ON_BE(val) wxUINT16_SWAP_ALWAYS(val) - #define wxINT16_SWAP_ON_BE(val) wxINT16_SWAP_ALWAYS(val) - #define wxUINT16_SWAP_ON_LE(val) (val) - #define wxINT16_SWAP_ON_LE(val) (val) - #define wxUINT32_SWAP_ON_BE(val) wxUINT32_SWAP_ALWAYS(val) - #define wxINT32_SWAP_ON_BE(val) wxINT32_SWAP_ALWAYS(val) - #define wxUINT32_SWAP_ON_LE(val) (val) - #define wxINT32_SWAP_ON_LE(val) (val) - #if wxHAS_INT64 - #define wxUINT64_SWAP_ON_BE(val) wxUINT64_SWAP_ALWAYS(val) - #define wxUINT64_SWAP_ON_LE(val) (val) - #endif -#else - #define wxUINT16_SWAP_ON_LE(val) wxUINT16_SWAP_ALWAYS(val) - #define wxINT16_SWAP_ON_LE(val) wxINT16_SWAP_ALWAYS(val) - #define wxUINT16_SWAP_ON_BE(val) (val) - #define wxINT16_SWAP_ON_BE(val) (val) - #define wxUINT32_SWAP_ON_LE(val) wxUINT32_SWAP_ALWAYS(val) - #define wxINT32_SWAP_ON_LE(val) wxINT32_SWAP_ALWAYS(val) - #define wxUINT32_SWAP_ON_BE(val) (val) - #define wxINT32_SWAP_ON_BE(val) (val) - #if wxHAS_INT64 - #define wxUINT64_SWAP_ON_LE(val) wxUINT64_SWAP_ALWAYS(val) - #define wxUINT64_SWAP_ON_BE(val) (val) - #endif -#endif - -/* ---------------------------------------------------------------------------- */ -/* Geometric flags */ -/* ---------------------------------------------------------------------------- */ - -enum wxGeometryCentre -{ - wxCENTRE = 0x0001, - wxCENTER = wxCENTRE -}; - -/* centering into frame rather than screen (obsolete) */ -#define wxCENTER_FRAME 0x0000 -/* centre on screen rather than parent */ -#define wxCENTRE_ON_SCREEN 0x0002 -#define wxCENTER_ON_SCREEN wxCENTRE_ON_SCREEN - -enum wxOrientation -{ - /* don't change the values of these elements, they are used elsewhere */ - wxHORIZONTAL = 0x0004, - wxVERTICAL = 0x0008, - - wxBOTH = wxVERTICAL | wxHORIZONTAL -}; - -enum wxDirection -{ - wxLEFT = 0x0010, - wxRIGHT = 0x0020, - wxUP = 0x0040, - wxDOWN = 0x0080, - - wxTOP = wxUP, - wxBOTTOM = wxDOWN, - - wxNORTH = wxUP, - wxSOUTH = wxDOWN, - wxWEST = wxLEFT, - wxEAST = wxRIGHT, - - wxALL = (wxUP | wxDOWN | wxRIGHT | wxLEFT) -}; - -enum wxAlignment -{ - wxALIGN_NOT = 0x0000, - wxALIGN_CENTER_HORIZONTAL = 0x0100, - wxALIGN_CENTRE_HORIZONTAL = wxALIGN_CENTER_HORIZONTAL, - wxALIGN_LEFT = wxALIGN_NOT, - wxALIGN_TOP = wxALIGN_NOT, - wxALIGN_RIGHT = 0x0200, - wxALIGN_BOTTOM = 0x0400, - wxALIGN_CENTER_VERTICAL = 0x0800, - wxALIGN_CENTRE_VERTICAL = wxALIGN_CENTER_VERTICAL, - - wxALIGN_CENTER = (wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL), - wxALIGN_CENTRE = wxALIGN_CENTER, - - /* a mask to extract alignment from the combination of flags */ - wxALIGN_MASK = 0x0f00 -}; - -enum wxStretch -{ - wxSTRETCH_NOT = 0x0000, - wxSHRINK = 0x1000, - wxGROW = 0x2000, - wxEXPAND = wxGROW, - wxSHAPED = 0x4000, - wxFIXED_MINSIZE = 0x8000, -#if wxABI_VERSION >= 20808 - wxRESERVE_SPACE_EVEN_IF_HIDDEN = 0x0002, -#endif - wxTILE = 0xc000, - - /* for compatibility only, default now, don't use explicitly any more */ -#if WXWIN_COMPATIBILITY_2_4 - wxADJUST_MINSIZE = 0x00100000 -#else - wxADJUST_MINSIZE = 0 -#endif -}; - -/* border flags: the values are chosen for backwards compatibility */ -enum wxBorder -{ - /* this is different from wxBORDER_NONE as by default the controls do have */ - /* border */ - wxBORDER_DEFAULT = 0, - - wxBORDER_NONE = 0x00200000, - wxBORDER_STATIC = 0x01000000, - wxBORDER_SIMPLE = 0x02000000, - wxBORDER_RAISED = 0x04000000, - wxBORDER_SUNKEN = 0x08000000, - wxBORDER_DOUBLE = 0x10000000, /* deprecated */ - wxBORDER_THEME = 0x10000000, - - /* a mask to extract border style from the combination of flags */ - wxBORDER_MASK = 0x1f200000 -}; - -/* This makes it easier to specify a 'normal' border for a control */ -#if defined(__SMARTPHONE__) || defined(__POCKETPC__) -#define wxDEFAULT_CONTROL_BORDER wxBORDER_SIMPLE -#else -#define wxDEFAULT_CONTROL_BORDER wxBORDER_SUNKEN -#endif - -/* ---------------------------------------------------------------------------- */ -/* Window style flags */ -/* ---------------------------------------------------------------------------- */ - -/* - * Values are chosen so they can be |'ed in a bit list. - * Some styles are used across more than one group, - * so the values mustn't clash with others in the group. - * Otherwise, numbers can be reused across groups. - * - * From version 1.66: - * Window (cross-group) styles now take up the first half - * of the flag, and control-specific styles the - * second half. - * - */ - -/* - * Window (Frame/dialog/subwindow/panel item) style flags - */ -#define wxVSCROLL 0x80000000 -#define wxHSCROLL 0x40000000 -#define wxCAPTION 0x20000000 - -/* New styles (border styles are now in their own enum) */ -#define wxDOUBLE_BORDER wxBORDER_DOUBLE -#define wxSUNKEN_BORDER wxBORDER_SUNKEN -#define wxRAISED_BORDER wxBORDER_RAISED -#define wxBORDER wxBORDER_SIMPLE -#define wxSIMPLE_BORDER wxBORDER_SIMPLE -#define wxSTATIC_BORDER wxBORDER_STATIC -#define wxNO_BORDER wxBORDER_NONE - -/* wxALWAYS_SHOW_SB: instead of hiding the scrollbar when it is not needed, */ -/* disable it - but still show (see also wxLB_ALWAYS_SB style) */ -/* */ -/* NB: as this style is only supported by wxUniversal and wxMSW so far */ -#define wxALWAYS_SHOW_SB 0x00800000 - -/* Clip children when painting, which reduces flicker in e.g. frames and */ -/* splitter windows, but can't be used in a panel where a static box must be */ -/* 'transparent' (panel paints the background for it) */ -#define wxCLIP_CHILDREN 0x00400000 - -/* Note we're reusing the wxCAPTION style because we won't need captions */ -/* for subwindows/controls */ -#define wxCLIP_SIBLINGS 0x20000000 - -#define wxTRANSPARENT_WINDOW 0x00100000 - -/* Add this style to a panel to get tab traversal working outside of dialogs */ -/* (on by default for wxPanel, wxDialog, wxScrolledWindow) */ -#define wxTAB_TRAVERSAL 0x00080000 - -/* Add this style if the control wants to get all keyboard messages (under */ -/* Windows, it won't normally get the dialog navigation key events) */ -#define wxWANTS_CHARS 0x00040000 - -/* Make window retained (Motif only, see src/generic/scrolwing.cpp) - * This is non-zero only under wxMotif, to avoid a clash with wxPOPUP_WINDOW - * on other platforms - */ - -#ifdef __WXMOTIF__ -#define wxRETAINED 0x00020000 -#else -#define wxRETAINED 0x00000000 -#endif -#define wxBACKINGSTORE wxRETAINED - -/* set this flag to create a special popup window: it will be always shown on */ -/* top of other windows, will capture the mouse and will be dismissed when the */ -/* mouse is clicked outside of it or if it loses focus in any other way */ -#define wxPOPUP_WINDOW 0x00020000 - -/* force a full repaint when the window is resized (instead of repainting just */ -/* the invalidated area) */ -#define wxFULL_REPAINT_ON_RESIZE 0x00010000 - -/* obsolete: now this is the default behaviour */ -/* */ -/* don't invalidate the whole window (resulting in a PAINT event) when the */ -/* window is resized (currently, makes sense for wxMSW only) */ -#define wxNO_FULL_REPAINT_ON_RESIZE 0 - -/* A mask which can be used to filter (out) all wxWindow-specific styles. - */ -#define wxWINDOW_STYLE_MASK \ - (wxVSCROLL|wxHSCROLL|wxBORDER_MASK|wxALWAYS_SHOW_SB|wxCLIP_CHILDREN| \ - wxCLIP_SIBLINGS|wxTRANSPARENT_WINDOW|wxTAB_TRAVERSAL|wxWANTS_CHARS| \ - wxRETAINED|wxPOPUP_WINDOW|wxFULL_REPAINT_ON_RESIZE) - -/* - * Extra window style flags (use wxWS_EX prefix to make it clear that they - * should be passed to wxWindow::SetExtraStyle(), not SetWindowStyle()) - */ - -/* by default, TransferDataTo/FromWindow() only work on direct children of the */ -/* window (compatible behaviour), set this flag to make them recursively */ -/* descend into all subwindows */ -#define wxWS_EX_VALIDATE_RECURSIVELY 0x00000001 - -/* wxCommandEvents and the objects of the derived classes are forwarded to the */ -/* parent window and so on recursively by default. Using this flag for the */ -/* given window allows to block this propagation at this window, i.e. prevent */ -/* the events from being propagated further upwards. The dialogs have this */ -/* flag on by default. */ -#define wxWS_EX_BLOCK_EVENTS 0x00000002 - -/* don't use this window as an implicit parent for the other windows: this must */ -/* be used with transient windows as otherwise there is the risk of creating a */ -/* dialog/frame with this window as a parent which would lead to a crash if the */ -/* parent is destroyed before the child */ -#define wxWS_EX_TRANSIENT 0x00000004 - -/* don't paint the window background, we'll assume it will */ -/* be done by a theming engine. This is not yet used but could */ -/* possibly be made to work in the future, at least on Windows */ -#define wxWS_EX_THEMED_BACKGROUND 0x00000008 - -/* this window should always process idle events */ -#define wxWS_EX_PROCESS_IDLE 0x00000010 - -/* this window should always process UI update events */ -#define wxWS_EX_PROCESS_UI_UPDATES 0x00000020 - -/* Draw the window in a metal theme on Mac */ -#define wxFRAME_EX_METAL 0x00000040 -#define wxDIALOG_EX_METAL 0x00000040 - -/* Use this style to add a context-sensitive help to the window (currently for */ -/* Win32 only and it doesn't work if wxMINIMIZE_BOX or wxMAXIMIZE_BOX are used) */ -#define wxWS_EX_CONTEXTHELP 0x00000080 - -/* synonyms for wxWS_EX_CONTEXTHELP for compatibility */ -#define wxFRAME_EX_CONTEXTHELP wxWS_EX_CONTEXTHELP -#define wxDIALOG_EX_CONTEXTHELP wxWS_EX_CONTEXTHELP - -/* Create a window which is attachable to another top level window */ -#define wxFRAME_DRAWER 0x0020 - -/* - * MDI parent frame style flags - * Can overlap with some of the above. - */ - -#define wxFRAME_NO_WINDOW_MENU 0x0100 - -/* - * wxMenuBar style flags - */ -/* use native docking */ -#define wxMB_DOCKABLE 0x0001 - -/* - * wxMenu style flags - */ -#define wxMENU_TEAROFF 0x0001 - -/* - * Apply to all panel items - */ -#define wxCOLOURED 0x0800 -#define wxFIXED_LENGTH 0x0400 - -/* - * Styles for wxListBox - */ -#define wxLB_SORT 0x0010 -#define wxLB_SINGLE 0x0020 -#define wxLB_MULTIPLE 0x0040 -#define wxLB_EXTENDED 0x0080 -/* wxLB_OWNERDRAW is Windows-only */ -#define wxLB_OWNERDRAW 0x0100 -#define wxLB_NEEDED_SB 0x0200 -#define wxLB_ALWAYS_SB 0x0400 -#define wxLB_HSCROLL wxHSCROLL -/* always show an entire number of rows */ -#define wxLB_INT_HEIGHT 0x0800 - -#if WXWIN_COMPATIBILITY_2_6 - /* deprecated synonyms */ - #define wxPROCESS_ENTER 0x0400 /* wxTE_PROCESS_ENTER */ - #define wxPASSWORD 0x0800 /* wxTE_PASSWORD */ -#endif - -/* - * wxComboBox style flags - */ -#define wxCB_SIMPLE 0x0004 -#define wxCB_SORT 0x0008 -#define wxCB_READONLY 0x0010 -#define wxCB_DROPDOWN 0x0020 - -/* - * wxRadioBox style flags - */ -/* should we number the items from left to right or from top to bottom in a 2d */ -/* radiobox? */ -#define wxRA_LEFTTORIGHT 0x0001 -#define wxRA_TOPTOBOTTOM 0x0002 - -/* New, more intuitive names to specify majorDim argument */ -#define wxRA_SPECIFY_COLS wxHORIZONTAL -#define wxRA_SPECIFY_ROWS wxVERTICAL - -/* 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 - */ -#define wxSB_HORIZONTAL wxHORIZONTAL -#define wxSB_VERTICAL wxVERTICAL - -/* - * wxSpinButton flags. - * Note that a wxSpinCtrl is sometimes defined as - * a wxTextCtrl, and so the flags must be different - * from wxTextCtrl's. - */ -#define wxSP_HORIZONTAL wxHORIZONTAL /* 4 */ -#define wxSP_VERTICAL wxVERTICAL /* 8 */ -#define wxSP_ARROW_KEYS 0x1000 -#define wxSP_WRAP 0x2000 - -/* - * wxTabCtrl flags - */ -#define wxTC_RIGHTJUSTIFY 0x0010 -#define wxTC_FIXEDWIDTH 0x0020 -#define wxTC_TOP 0x0000 /* default */ -#define wxTC_LEFT 0x0020 -#define wxTC_RIGHT 0x0040 -#define wxTC_BOTTOM 0x0080 -#define wxTC_MULTILINE 0x0200 /* == wxNB_MULTILINE */ -#define wxTC_OWNERDRAW 0x0400 - -/* - * wxStatusBar95 flags - */ -#define wxST_SIZEGRIP 0x0010 - -/* - * wxStaticText flags - */ -#define wxST_NO_AUTORESIZE 0x0001 -#define wxST_DOTS_MIDDLE 0x0002 -#define wxST_DOTS_END 0x0004 - -/* - * wxStaticBitmap flags - */ -#define wxBI_EXPAND wxEXPAND - -/* - * wxStaticLine flags - */ -#define wxLI_HORIZONTAL wxHORIZONTAL -#define wxLI_VERTICAL wxVERTICAL - - -/* - * extended dialog specifiers. these values are stored in a different - * flag and thus do not overlap with other style flags. note that these - * values do not correspond to the return values of the dialogs (for - * those values, look at the wxID_XXX defines). - */ - -/* wxCENTRE already defined as 0x00000001 */ -#define wxYES 0x00000002 -#define wxOK 0x00000004 -#define wxNO 0x00000008 -#define wxYES_NO (wxYES | wxNO) -#define wxCANCEL 0x00000010 - -#define wxYES_DEFAULT 0x00000000 /* has no effect (default) */ -#define wxNO_DEFAULT 0x00000080 - -#define wxICON_EXCLAMATION 0x00000100 -#define wxICON_HAND 0x00000200 -#define wxICON_WARNING wxICON_EXCLAMATION -#define wxICON_ERROR wxICON_HAND -#define wxICON_QUESTION 0x00000400 -#define wxICON_INFORMATION 0x00000800 -#define wxICON_STOP wxICON_HAND -#define wxICON_ASTERISK wxICON_INFORMATION -#define wxICON_MASK (0x00000100|0x00000200|0x00000400|0x00000800) - -#define wxFORWARD 0x00001000 -#define wxBACKWARD 0x00002000 -#define wxRESET 0x00004000 -#define wxHELP 0x00008000 -#define wxMORE 0x00010000 -#define wxSETUP 0x00020000 - -/* - * Background styles. See wxWindow::SetBackgroundStyle - */ - -enum wxBackgroundStyle -{ - wxBG_STYLE_SYSTEM, - wxBG_STYLE_COLOUR, - wxBG_STYLE_CUSTOM -}; - -/* ---------------------------------------------------------------------------- */ -/* standard IDs */ -/* ---------------------------------------------------------------------------- */ - -/* Standard menu IDs */ -enum -{ - /* no id matches this one when compared to it */ - wxID_NONE = -3, - - /* id for a separator line in the menu (invalid for normal item) */ - wxID_SEPARATOR = -2, - - /* any id: means that we don't care about the id, whether when installing - * an event handler or when creating a new window */ - wxID_ANY = -1, - - - /* all predefined ids are between wxID_LOWEST and wxID_HIGHEST */ - wxID_LOWEST = 4999, - - wxID_OPEN, - wxID_CLOSE, - wxID_NEW, - wxID_SAVE, - wxID_SAVEAS, - wxID_REVERT, - wxID_EXIT, - wxID_UNDO, - wxID_REDO, - wxID_HELP, - wxID_PRINT, - wxID_PRINT_SETUP, - wxID_PAGE_SETUP, - wxID_PREVIEW, - wxID_ABOUT, - wxID_HELP_CONTENTS, - wxID_HELP_INDEX, - wxID_HELP_SEARCH, - wxID_HELP_COMMANDS, - wxID_HELP_PROCEDURES, - wxID_HELP_CONTEXT, - wxID_CLOSE_ALL, - wxID_PREFERENCES, - - wxID_EDIT = 5030, - wxID_CUT, - wxID_COPY, - wxID_PASTE, - wxID_CLEAR, - wxID_FIND, - wxID_DUPLICATE, - wxID_SELECTALL, - wxID_DELETE, - wxID_REPLACE, - wxID_REPLACE_ALL, - wxID_PROPERTIES, - - wxID_VIEW_DETAILS, - wxID_VIEW_LARGEICONS, - wxID_VIEW_SMALLICONS, - wxID_VIEW_LIST, - wxID_VIEW_SORTDATE, - wxID_VIEW_SORTNAME, - wxID_VIEW_SORTSIZE, - wxID_VIEW_SORTTYPE, - - wxID_FILE = 5050, - wxID_FILE1, - wxID_FILE2, - wxID_FILE3, - wxID_FILE4, - wxID_FILE5, - wxID_FILE6, - wxID_FILE7, - wxID_FILE8, - wxID_FILE9, - - /* Standard button and menu IDs */ - wxID_OK = 5100, - wxID_CANCEL, - wxID_APPLY, - wxID_YES, - wxID_NO, - wxID_STATIC, - wxID_FORWARD, - wxID_BACKWARD, - wxID_DEFAULT, - wxID_MORE, - wxID_SETUP, - wxID_RESET, - wxID_CONTEXT_HELP, - wxID_YESTOALL, - wxID_NOTOALL, - wxID_ABORT, - wxID_RETRY, - wxID_IGNORE, - wxID_ADD, - wxID_REMOVE, - - wxID_UP, - wxID_DOWN, - wxID_HOME, - wxID_REFRESH, - wxID_STOP, - wxID_INDEX, - - wxID_BOLD, - wxID_ITALIC, - wxID_JUSTIFY_CENTER, - wxID_JUSTIFY_FILL, - wxID_JUSTIFY_RIGHT, - wxID_JUSTIFY_LEFT, - wxID_UNDERLINE, - wxID_INDENT, - wxID_UNINDENT, - wxID_ZOOM_100, - wxID_ZOOM_FIT, - wxID_ZOOM_IN, - wxID_ZOOM_OUT, - wxID_UNDELETE, - wxID_REVERT_TO_SAVED, - - /* System menu IDs (used by wxUniv): */ - wxID_SYSTEM_MENU = 5200, - wxID_CLOSE_FRAME, - wxID_MOVE_FRAME, - wxID_RESIZE_FRAME, - wxID_MAXIMIZE_FRAME, - wxID_ICONIZE_FRAME, - wxID_RESTORE_FRAME, - - /* IDs used by generic file dialog (13 consecutive starting from this value) */ - wxID_FILEDLGG = 5900, - - wxID_HIGHEST = 5999 -}; - -/* ---------------------------------------------------------------------------- */ -/* other constants */ -/* ---------------------------------------------------------------------------- */ - -/* menu and toolbar item kinds */ -enum wxItemKind -{ - wxITEM_SEPARATOR = -1, - wxITEM_NORMAL, - wxITEM_CHECK, - wxITEM_RADIO, - wxITEM_MAX -}; - -/* hit test results */ -enum wxHitTest -{ - wxHT_NOWHERE, - - /* scrollbar */ - wxHT_SCROLLBAR_FIRST = wxHT_NOWHERE, - wxHT_SCROLLBAR_ARROW_LINE_1, /* left or upper arrow to scroll by line */ - wxHT_SCROLLBAR_ARROW_LINE_2, /* right or down */ - wxHT_SCROLLBAR_ARROW_PAGE_1, /* left or upper arrow to scroll by page */ - wxHT_SCROLLBAR_ARROW_PAGE_2, /* right or down */ - wxHT_SCROLLBAR_THUMB, /* on the thumb */ - wxHT_SCROLLBAR_BAR_1, /* bar to the left/above the thumb */ - wxHT_SCROLLBAR_BAR_2, /* bar to the right/below the thumb */ - wxHT_SCROLLBAR_LAST, - - /* window */ - wxHT_WINDOW_OUTSIDE, /* not in this window at all */ - wxHT_WINDOW_INSIDE, /* in the client area */ - wxHT_WINDOW_VERT_SCROLLBAR, /* on the vertical scrollbar */ - wxHT_WINDOW_HORZ_SCROLLBAR, /* on the horizontal scrollbar */ - wxHT_WINDOW_CORNER, /* on the corner between 2 scrollbars */ - - wxHT_MAX -}; - -/* ---------------------------------------------------------------------------- */ -/* Possible SetSize flags */ -/* ---------------------------------------------------------------------------- */ - -/* Use internally-calculated width if -1 */ -#define wxSIZE_AUTO_WIDTH 0x0001 -/* Use internally-calculated height if -1 */ -#define wxSIZE_AUTO_HEIGHT 0x0002 -/* Use internally-calculated width and height if each is -1 */ -#define wxSIZE_AUTO (wxSIZE_AUTO_WIDTH|wxSIZE_AUTO_HEIGHT) -/* Ignore missing (-1) dimensions (use existing). */ -/* For readability only: test for wxSIZE_AUTO_WIDTH/HEIGHT in code. */ -#define wxSIZE_USE_EXISTING 0x0000 -/* Allow -1 as a valid position */ -#define wxSIZE_ALLOW_MINUS_ONE 0x0004 -/* Don't do parent client adjustments (for implementation only) */ -#define wxSIZE_NO_ADJUSTMENTS 0x0008 -/* Change the window position even if it seems to be already correct */ -#define wxSIZE_FORCE 0x0010 - -/* ---------------------------------------------------------------------------- */ -/* GDI descriptions */ -/* ---------------------------------------------------------------------------- */ - -enum -{ - /* Text font families */ - wxDEFAULT = 70, - wxDECORATIVE, - wxROMAN, - wxSCRIPT, - wxSWISS, - wxMODERN, - wxTELETYPE, /* @@@@ */ - - /* Proportional or Fixed width fonts (not yet used) */ - wxVARIABLE = 80, - wxFIXED, - - wxNORMAL = 90, - wxLIGHT, - wxBOLD, - /* Also wxNORMAL for normal (non-italic text) */ - wxITALIC, - wxSLANT, - - /* Pen styles */ - wxSOLID = 100, - wxDOT, - wxLONG_DASH, - wxSHORT_DASH, - wxDOT_DASH, - wxUSER_DASH, - - wxTRANSPARENT, - - /* Brush & Pen Stippling. Note that a stippled pen cannot be dashed!! */ - /* Note also that stippling a Pen IS meaningfull, 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. */ - wxSTIPPLE = 110, - - wxBDIAGONAL_HATCH, /* In wxWidgets < 2.6 use WX_HATCH macro */ - wxCROSSDIAG_HATCH, /* to verify these wx*_HATCH are in style */ - wxFDIAGONAL_HATCH, /* of wxBrush. In wxWidgets >= 2.6 use */ - wxCROSS_HATCH, /* wxBrush::IsHatch() instead. */ - wxHORIZONTAL_HATCH, - wxVERTICAL_HATCH, - wxFIRST_HATCH = wxBDIAGONAL_HATCH, - wxLAST_HATCH = wxVERTICAL_HATCH, - - wxJOIN_BEVEL = 120, - wxJOIN_MITER, - wxJOIN_ROUND, - - wxCAP_ROUND = 130, - wxCAP_PROJECTING, - wxCAP_BUTT -}; - -#if WXWIN_COMPATIBILITY_2_4 - #define IS_HATCH(s) ((s)>=wxFIRST_HATCH && (s)<=wxLAST_HATCH) -#else - /* use wxBrush::IsHatch() instead thought wxMotif still uses it in src/motif/dcclient.cpp */ -#endif - -/* Logical ops */ -typedef enum -{ - wxCLEAR, wxROP_BLACK = wxCLEAR, wxBLIT_BLACKNESS = wxCLEAR, /* 0 */ - wxXOR, wxROP_XORPEN = wxXOR, wxBLIT_SRCINVERT = wxXOR, /* src XOR dst */ - wxINVERT, wxROP_NOT = wxINVERT, wxBLIT_DSTINVERT = wxINVERT, /* NOT dst */ - wxOR_REVERSE, wxROP_MERGEPENNOT = wxOR_REVERSE, wxBLIT_00DD0228 = wxOR_REVERSE, /* src OR (NOT dst) */ - wxAND_REVERSE, wxROP_MASKPENNOT = wxAND_REVERSE, wxBLIT_SRCERASE = wxAND_REVERSE, /* src AND (NOT dst) */ - wxCOPY, wxROP_COPYPEN = wxCOPY, wxBLIT_SRCCOPY = wxCOPY, /* src */ - wxAND, wxROP_MASKPEN = wxAND, wxBLIT_SRCAND = wxAND, /* src AND dst */ - wxAND_INVERT, wxROP_MASKNOTPEN = wxAND_INVERT, wxBLIT_00220326 = wxAND_INVERT, /* (NOT src) AND dst */ - wxNO_OP, wxROP_NOP = wxNO_OP, wxBLIT_00AA0029 = wxNO_OP, /* dst */ - wxNOR, wxROP_NOTMERGEPEN = wxNOR, wxBLIT_NOTSRCERASE = wxNOR, /* (NOT src) AND (NOT dst) */ - wxEQUIV, wxROP_NOTXORPEN = wxEQUIV, wxBLIT_00990066 = wxEQUIV, /* (NOT src) XOR dst */ - wxSRC_INVERT, wxROP_NOTCOPYPEN = wxSRC_INVERT, wxBLIT_NOTSCRCOPY = wxSRC_INVERT, /* (NOT src) */ - wxOR_INVERT, wxROP_MERGENOTPEN = wxOR_INVERT, wxBLIT_MERGEPAINT = wxOR_INVERT, /* (NOT src) OR dst */ - wxNAND, wxROP_NOTMASKPEN = wxNAND, wxBLIT_007700E6 = wxNAND, /* (NOT src) OR (NOT dst) */ - wxOR, wxROP_MERGEPEN = wxOR, wxBLIT_SRCPAINT = wxOR, /* src OR dst */ - wxSET, wxROP_WHITE = wxSET, wxBLIT_WHITENESS = wxSET /* 1 */ -} form_ops_t; - -/* Flood styles */ -enum -{ - wxFLOOD_SURFACE = 1, - wxFLOOD_BORDER -}; - -/* Polygon filling mode */ -enum -{ - wxODDEVEN_RULE = 1, - wxWINDING_RULE -}; - -/* ToolPanel in wxFrame (VZ: unused?) */ -enum -{ - wxTOOL_TOP = 1, - wxTOOL_BOTTOM, - wxTOOL_LEFT, - wxTOOL_RIGHT -}; - -/* the values of the format constants should be the same as corresponding */ -/* CF_XXX constants in Windows API */ -enum wxDataFormatId -{ - wxDF_INVALID = 0, - wxDF_TEXT = 1, /* CF_TEXT */ - wxDF_BITMAP = 2, /* CF_BITMAP */ - wxDF_METAFILE = 3, /* CF_METAFILEPICT */ - wxDF_SYLK = 4, - wxDF_DIF = 5, - wxDF_TIFF = 6, - wxDF_OEMTEXT = 7, /* CF_OEMTEXT */ - wxDF_DIB = 8, /* CF_DIB */ - wxDF_PALETTE = 9, - wxDF_PENDATA = 10, - wxDF_RIFF = 11, - wxDF_WAVE = 12, - wxDF_UNICODETEXT = 13, - wxDF_ENHMETAFILE = 14, - wxDF_FILENAME = 15, /* CF_HDROP */ - wxDF_LOCALE = 16, - wxDF_PRIVATE = 20, - wxDF_HTML = 30, /* Note: does not correspond to CF_ constant */ - wxDF_MAX -}; - -/* Virtual keycodes */ -enum wxKeyCode -{ - WXK_BACK = 8, - WXK_TAB = 9, - WXK_RETURN = 13, - WXK_ESCAPE = 27, - WXK_SPACE = 32, - WXK_DELETE = 127, - - /* These are, by design, not compatible with unicode characters. - If you want to get a unicode character from a key event, use - wxKeyEvent::GetUnicodeKey instead. */ - WXK_START = 300, - WXK_LBUTTON, - WXK_RBUTTON, - WXK_CANCEL, - WXK_MBUTTON, - WXK_CLEAR, - WXK_SHIFT, - WXK_ALT, - WXK_CONTROL, - WXK_MENU, - WXK_PAUSE, - WXK_CAPITAL, - WXK_END, - WXK_HOME, - WXK_LEFT, - WXK_UP, - WXK_RIGHT, - WXK_DOWN, - WXK_SELECT, - WXK_PRINT, - WXK_EXECUTE, - WXK_SNAPSHOT, - WXK_INSERT, - WXK_HELP, - WXK_NUMPAD0, - WXK_NUMPAD1, - WXK_NUMPAD2, - WXK_NUMPAD3, - WXK_NUMPAD4, - WXK_NUMPAD5, - WXK_NUMPAD6, - WXK_NUMPAD7, - WXK_NUMPAD8, - WXK_NUMPAD9, - WXK_MULTIPLY, - WXK_ADD, - WXK_SEPARATOR, - WXK_SUBTRACT, - WXK_DECIMAL, - WXK_DIVIDE, - WXK_F1, - WXK_F2, - WXK_F3, - WXK_F4, - WXK_F5, - WXK_F6, - WXK_F7, - WXK_F8, - WXK_F9, - WXK_F10, - WXK_F11, - WXK_F12, - WXK_F13, - WXK_F14, - WXK_F15, - WXK_F16, - WXK_F17, - WXK_F18, - WXK_F19, - WXK_F20, - WXK_F21, - WXK_F22, - WXK_F23, - WXK_F24, - WXK_NUMLOCK, - WXK_SCROLL, - WXK_PAGEUP, - WXK_PAGEDOWN, -#if WXWIN_COMPATIBILITY_2_6 - WXK_PRIOR = WXK_PAGEUP, - WXK_NEXT = WXK_PAGEDOWN, -#endif - - WXK_NUMPAD_SPACE, - WXK_NUMPAD_TAB, - WXK_NUMPAD_ENTER, - WXK_NUMPAD_F1, - WXK_NUMPAD_F2, - WXK_NUMPAD_F3, - WXK_NUMPAD_F4, - WXK_NUMPAD_HOME, - WXK_NUMPAD_LEFT, - WXK_NUMPAD_UP, - WXK_NUMPAD_RIGHT, - WXK_NUMPAD_DOWN, - WXK_NUMPAD_PAGEUP, - WXK_NUMPAD_PAGEDOWN, -#if WXWIN_COMPATIBILITY_2_6 - WXK_NUMPAD_PRIOR = WXK_NUMPAD_PAGEUP, - WXK_NUMPAD_NEXT = WXK_NUMPAD_PAGEDOWN, -#endif - WXK_NUMPAD_END, - WXK_NUMPAD_BEGIN, - WXK_NUMPAD_INSERT, - WXK_NUMPAD_DELETE, - WXK_NUMPAD_EQUAL, - WXK_NUMPAD_MULTIPLY, - WXK_NUMPAD_ADD, - WXK_NUMPAD_SEPARATOR, - WXK_NUMPAD_SUBTRACT, - WXK_NUMPAD_DECIMAL, - WXK_NUMPAD_DIVIDE, - - WXK_WINDOWS_LEFT, - WXK_WINDOWS_RIGHT, - WXK_WINDOWS_MENU , - WXK_COMMAND, - - /* Hardware-specific buttons */ - WXK_SPECIAL1 = 193, - WXK_SPECIAL2, - WXK_SPECIAL3, - WXK_SPECIAL4, - WXK_SPECIAL5, - WXK_SPECIAL6, - WXK_SPECIAL7, - WXK_SPECIAL8, - WXK_SPECIAL9, - WXK_SPECIAL10, - WXK_SPECIAL11, - WXK_SPECIAL12, - WXK_SPECIAL13, - WXK_SPECIAL14, - WXK_SPECIAL15, - WXK_SPECIAL16, - WXK_SPECIAL17, - WXK_SPECIAL18, - WXK_SPECIAL19, - WXK_SPECIAL20 -}; - -/* This enum contains bit mask constants used in wxKeyEvent */ -enum wxKeyModifier -{ - wxMOD_NONE = 0x0000, - wxMOD_ALT = 0x0001, - wxMOD_CONTROL = 0x0002, - wxMOD_ALTGR = wxMOD_ALT | wxMOD_CONTROL, - wxMOD_SHIFT = 0x0004, - wxMOD_META = 0x0008, - wxMOD_WIN = wxMOD_META, -#if defined(__WXMAC__) || defined(__WXCOCOA__) - wxMOD_CMD = wxMOD_META, -#else - wxMOD_CMD = wxMOD_CONTROL, -#endif - wxMOD_ALL = 0xffff -}; - -/* Mapping modes (same values as used by Windows, don't change) */ -enum -{ - wxMM_TEXT = 1, - wxMM_LOMETRIC, - wxMM_HIMETRIC, - wxMM_LOENGLISH, - wxMM_HIENGLISH, - wxMM_TWIPS, - wxMM_ISOTROPIC, - wxMM_ANISOTROPIC, - wxMM_POINTS, - wxMM_METRIC -}; - -/* Shortcut for easier dialog-unit-to-pixel conversion */ -#define wxDLG_UNIT(parent, pt) parent->ConvertDialogToPixels(pt) - -/* Paper types */ -typedef enum -{ - wxPAPER_NONE, /* Use specific dimensions */ - wxPAPER_LETTER, /* Letter, 8 1/2 by 11 inches */ - wxPAPER_LEGAL, /* Legal, 8 1/2 by 14 inches */ - wxPAPER_A4, /* A4 Sheet, 210 by 297 millimeters */ - wxPAPER_CSHEET, /* C Sheet, 17 by 22 inches */ - wxPAPER_DSHEET, /* D Sheet, 22 by 34 inches */ - wxPAPER_ESHEET, /* E Sheet, 34 by 44 inches */ - wxPAPER_LETTERSMALL, /* Letter Small, 8 1/2 by 11 inches */ - wxPAPER_TABLOID, /* Tabloid, 11 by 17 inches */ - wxPAPER_LEDGER, /* Ledger, 17 by 11 inches */ - wxPAPER_STATEMENT, /* Statement, 5 1/2 by 8 1/2 inches */ - wxPAPER_EXECUTIVE, /* Executive, 7 1/4 by 10 1/2 inches */ - wxPAPER_A3, /* A3 sheet, 297 by 420 millimeters */ - wxPAPER_A4SMALL, /* A4 small sheet, 210 by 297 millimeters */ - wxPAPER_A5, /* A5 sheet, 148 by 210 millimeters */ - wxPAPER_B4, /* B4 sheet, 250 by 354 millimeters */ - wxPAPER_B5, /* B5 sheet, 182-by-257-millimeter paper */ - wxPAPER_FOLIO, /* Folio, 8-1/2-by-13-inch paper */ - wxPAPER_QUARTO, /* Quarto, 215-by-275-millimeter paper */ - wxPAPER_10X14, /* 10-by-14-inch sheet */ - wxPAPER_11X17, /* 11-by-17-inch sheet */ - wxPAPER_NOTE, /* Note, 8 1/2 by 11 inches */ - wxPAPER_ENV_9, /* #9 Envelope, 3 7/8 by 8 7/8 inches */ - wxPAPER_ENV_10, /* #10 Envelope, 4 1/8 by 9 1/2 inches */ - wxPAPER_ENV_11, /* #11 Envelope, 4 1/2 by 10 3/8 inches */ - wxPAPER_ENV_12, /* #12 Envelope, 4 3/4 by 11 inches */ - wxPAPER_ENV_14, /* #14 Envelope, 5 by 11 1/2 inches */ - wxPAPER_ENV_DL, /* DL Envelope, 110 by 220 millimeters */ - wxPAPER_ENV_C5, /* C5 Envelope, 162 by 229 millimeters */ - wxPAPER_ENV_C3, /* C3 Envelope, 324 by 458 millimeters */ - wxPAPER_ENV_C4, /* C4 Envelope, 229 by 324 millimeters */ - wxPAPER_ENV_C6, /* C6 Envelope, 114 by 162 millimeters */ - wxPAPER_ENV_C65, /* C65 Envelope, 114 by 229 millimeters */ - wxPAPER_ENV_B4, /* B4 Envelope, 250 by 353 millimeters */ - wxPAPER_ENV_B5, /* B5 Envelope, 176 by 250 millimeters */ - wxPAPER_ENV_B6, /* B6 Envelope, 176 by 125 millimeters */ - wxPAPER_ENV_ITALY, /* Italy Envelope, 110 by 230 millimeters */ - wxPAPER_ENV_MONARCH, /* Monarch Envelope, 3 7/8 by 7 1/2 inches */ - wxPAPER_ENV_PERSONAL, /* 6 3/4 Envelope, 3 5/8 by 6 1/2 inches */ - wxPAPER_FANFOLD_US, /* US Std Fanfold, 14 7/8 by 11 inches */ - wxPAPER_FANFOLD_STD_GERMAN, /* German Std Fanfold, 8 1/2 by 12 inches */ - wxPAPER_FANFOLD_LGL_GERMAN, /* German Legal Fanfold, 8 1/2 by 13 inches */ - - wxPAPER_ISO_B4, /* B4 (ISO) 250 x 353 mm */ - wxPAPER_JAPANESE_POSTCARD, /* Japanese Postcard 100 x 148 mm */ - wxPAPER_9X11, /* 9 x 11 in */ - wxPAPER_10X11, /* 10 x 11 in */ - wxPAPER_15X11, /* 15 x 11 in */ - wxPAPER_ENV_INVITE, /* Envelope Invite 220 x 220 mm */ - wxPAPER_LETTER_EXTRA, /* Letter Extra 9 \275 x 12 in */ - wxPAPER_LEGAL_EXTRA, /* Legal Extra 9 \275 x 15 in */ - wxPAPER_TABLOID_EXTRA, /* Tabloid Extra 11.69 x 18 in */ - wxPAPER_A4_EXTRA, /* A4 Extra 9.27 x 12.69 in */ - wxPAPER_LETTER_TRANSVERSE, /* Letter Transverse 8 \275 x 11 in */ - wxPAPER_A4_TRANSVERSE, /* A4 Transverse 210 x 297 mm */ - wxPAPER_LETTER_EXTRA_TRANSVERSE, /* Letter Extra Transverse 9\275 x 12 in */ - wxPAPER_A_PLUS, /* SuperA/SuperA/A4 227 x 356 mm */ - wxPAPER_B_PLUS, /* SuperB/SuperB/A3 305 x 487 mm */ - wxPAPER_LETTER_PLUS, /* Letter Plus 8.5 x 12.69 in */ - wxPAPER_A4_PLUS, /* A4 Plus 210 x 330 mm */ - wxPAPER_A5_TRANSVERSE, /* A5 Transverse 148 x 210 mm */ - wxPAPER_B5_TRANSVERSE, /* B5 (JIS) Transverse 182 x 257 mm */ - wxPAPER_A3_EXTRA, /* A3 Extra 322 x 445 mm */ - wxPAPER_A5_EXTRA, /* A5 Extra 174 x 235 mm */ - wxPAPER_B5_EXTRA, /* B5 (ISO) Extra 201 x 276 mm */ - wxPAPER_A2, /* A2 420 x 594 mm */ - wxPAPER_A3_TRANSVERSE, /* A3 Transverse 297 x 420 mm */ - wxPAPER_A3_EXTRA_TRANSVERSE, /* A3 Extra Transverse 322 x 445 mm */ - - wxPAPER_DBL_JAPANESE_POSTCARD,/* Japanese Double Postcard 200 x 148 mm */ - wxPAPER_A6, /* A6 105 x 148 mm */ - wxPAPER_JENV_KAKU2, /* Japanese Envelope Kaku #2 */ - wxPAPER_JENV_KAKU3, /* Japanese Envelope Kaku #3 */ - wxPAPER_JENV_CHOU3, /* Japanese Envelope Chou #3 */ - wxPAPER_JENV_CHOU4, /* Japanese Envelope Chou #4 */ - wxPAPER_LETTER_ROTATED, /* Letter Rotated 11 x 8 1/2 in */ - wxPAPER_A3_ROTATED, /* A3 Rotated 420 x 297 mm */ - wxPAPER_A4_ROTATED, /* A4 Rotated 297 x 210 mm */ - wxPAPER_A5_ROTATED, /* A5 Rotated 210 x 148 mm */ - wxPAPER_B4_JIS_ROTATED, /* B4 (JIS) Rotated 364 x 257 mm */ - wxPAPER_B5_JIS_ROTATED, /* B5 (JIS) Rotated 257 x 182 mm */ - wxPAPER_JAPANESE_POSTCARD_ROTATED,/* Japanese Postcard Rotated 148 x 100 mm */ - wxPAPER_DBL_JAPANESE_POSTCARD_ROTATED,/* Double Japanese Postcard Rotated 148 x 200 mm */ - wxPAPER_A6_ROTATED, /* A6 Rotated 148 x 105 mm */ - wxPAPER_JENV_KAKU2_ROTATED, /* Japanese Envelope Kaku #2 Rotated */ - wxPAPER_JENV_KAKU3_ROTATED, /* Japanese Envelope Kaku #3 Rotated */ - wxPAPER_JENV_CHOU3_ROTATED, /* Japanese Envelope Chou #3 Rotated */ - wxPAPER_JENV_CHOU4_ROTATED, /* Japanese Envelope Chou #4 Rotated */ - wxPAPER_B6_JIS, /* B6 (JIS) 128 x 182 mm */ - wxPAPER_B6_JIS_ROTATED, /* B6 (JIS) Rotated 182 x 128 mm */ - wxPAPER_12X11, /* 12 x 11 in */ - wxPAPER_JENV_YOU4, /* Japanese Envelope You #4 */ - wxPAPER_JENV_YOU4_ROTATED, /* Japanese Envelope You #4 Rotated */ - wxPAPER_P16K, /* PRC 16K 146 x 215 mm */ - wxPAPER_P32K, /* PRC 32K 97 x 151 mm */ - wxPAPER_P32KBIG, /* PRC 32K(Big) 97 x 151 mm */ - wxPAPER_PENV_1, /* PRC Envelope #1 102 x 165 mm */ - wxPAPER_PENV_2, /* PRC Envelope #2 102 x 176 mm */ - wxPAPER_PENV_3, /* PRC Envelope #3 125 x 176 mm */ - wxPAPER_PENV_4, /* PRC Envelope #4 110 x 208 mm */ - wxPAPER_PENV_5, /* PRC Envelope #5 110 x 220 mm */ - wxPAPER_PENV_6, /* PRC Envelope #6 120 x 230 mm */ - wxPAPER_PENV_7, /* PRC Envelope #7 160 x 230 mm */ - wxPAPER_PENV_8, /* PRC Envelope #8 120 x 309 mm */ - wxPAPER_PENV_9, /* PRC Envelope #9 229 x 324 mm */ - wxPAPER_PENV_10, /* PRC Envelope #10 324 x 458 mm */ - wxPAPER_P16K_ROTATED, /* PRC 16K Rotated */ - wxPAPER_P32K_ROTATED, /* PRC 32K Rotated */ - wxPAPER_P32KBIG_ROTATED, /* PRC 32K(Big) Rotated */ - wxPAPER_PENV_1_ROTATED, /* PRC Envelope #1 Rotated 165 x 102 mm */ - wxPAPER_PENV_2_ROTATED, /* PRC Envelope #2 Rotated 176 x 102 mm */ - wxPAPER_PENV_3_ROTATED, /* PRC Envelope #3 Rotated 176 x 125 mm */ - wxPAPER_PENV_4_ROTATED, /* PRC Envelope #4 Rotated 208 x 110 mm */ - wxPAPER_PENV_5_ROTATED, /* PRC Envelope #5 Rotated 220 x 110 mm */ - wxPAPER_PENV_6_ROTATED, /* PRC Envelope #6 Rotated 230 x 120 mm */ - wxPAPER_PENV_7_ROTATED, /* PRC Envelope #7 Rotated 230 x 160 mm */ - wxPAPER_PENV_8_ROTATED, /* PRC Envelope #8 Rotated 309 x 120 mm */ - wxPAPER_PENV_9_ROTATED, /* PRC Envelope #9 Rotated 324 x 229 mm */ - wxPAPER_PENV_10_ROTATED /* PRC Envelope #10 Rotated 458 x 324 m */ -} wxPaperSize; - -/* Printing orientation */ -#ifndef wxPORTRAIT -#define wxPORTRAIT 1 -#define wxLANDSCAPE 2 -#endif - -/* Duplex printing modes - */ - -enum wxDuplexMode -{ - wxDUPLEX_SIMPLEX, /* Non-duplex */ - wxDUPLEX_HORIZONTAL, - wxDUPLEX_VERTICAL -}; - -/* Print quality. - */ - -#define wxPRINT_QUALITY_HIGH -1 -#define wxPRINT_QUALITY_MEDIUM -2 -#define wxPRINT_QUALITY_LOW -3 -#define wxPRINT_QUALITY_DRAFT -4 - -typedef int wxPrintQuality; - -/* Print mode (currently PostScript only) - */ - -enum wxPrintMode -{ - wxPRINT_MODE_NONE = 0, - wxPRINT_MODE_PREVIEW = 1, /* Preview in external application */ - wxPRINT_MODE_FILE = 2, /* Print to file */ - wxPRINT_MODE_PRINTER = 3, /* Send to printer */ - wxPRINT_MODE_STREAM = 4 /* Send postscript data into a stream */ -}; - -/* ---------------------------------------------------------------------------- */ -/* UpdateWindowUI flags */ -/* ---------------------------------------------------------------------------- */ - -enum wxUpdateUI -{ - wxUPDATE_UI_NONE = 0x0000, - wxUPDATE_UI_RECURSE = 0x0001, - wxUPDATE_UI_FROMIDLE = 0x0002 /* Invoked from On(Internal)Idle */ -}; - -/* ---------------------------------------------------------------------------- */ -/* Notification Event flags - used for dock icon bouncing, etc. */ -/* ---------------------------------------------------------------------------- */ - -enum wxNotificationOptions -{ - wxNOTIFY_NONE = 0x0000, - wxNOTIFY_ONCE = 0x0001, - wxNOTIFY_REPEAT = 0x0002 -}; - -/* ---------------------------------------------------------------------------- */ -/* miscellaneous */ -/* ---------------------------------------------------------------------------- */ - -/* define this macro if font handling is done using the X font names */ -#if (defined(__WXGTK__) && !defined(__WXGTK20__)) || defined(__X__) - #define _WX_X_FONTLIKE -#endif - -/* macro to specify "All Files" on different platforms */ -#if defined(__WXMSW__) || defined(__WXPM__) -# define wxALL_FILES_PATTERN wxT("*.*") -# define wxALL_FILES gettext_noop("All files (*.*)|*.*") -#else -# define wxALL_FILES_PATTERN wxT("*") -# define wxALL_FILES gettext_noop("All files (*)|*") -#endif - -#if defined(__CYGWIN__) && defined(__WXMSW__) -# if wxUSE_STL || 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 - (windows version 2nd param is int, sys/unistd.h version is unsigned - int). - */ -# define gethostname gethostnameHACK -# include -# undef gethostname -# endif -#endif - -/* --------------------------------------------------------------------------- */ -/* macros that enable wxWidgets apps to be compiled in absence of the */ -/* sytem headers, although some platform specific types are used in the */ -/* platform specific (implementation) parts of the headers */ -/* --------------------------------------------------------------------------- */ - -#ifdef __WXMAC__ - -#define WX_OPAQUE_TYPE( name ) struct wxOpaque##name - -typedef unsigned char WXCOLORREF[6]; -typedef void* WXCGIMAGEREF; -typedef void* WXHBITMAP; -typedef void* WXHCURSOR; -typedef void* WXHRGN; -typedef void* WXRECTPTR; -typedef void* WXPOINTPTR; -typedef void* WXHWND; -typedef void* WXEVENTREF; -typedef void* WXEVENTHANDLERREF; -typedef void* WXEVENTHANDLERCALLREF; -typedef void* WXAPPLEEVENTREF; -typedef void* WXHDC; -typedef void* WXHMENU; -typedef unsigned int WXUINT; -typedef unsigned long WXDWORD; -typedef unsigned short WXWORD; - -typedef WX_OPAQUE_TYPE(CIconHandle ) * WXHICON ; -typedef WX_OPAQUE_TYPE(PicHandle ) * WXHMETAFILE ; - - -/* typedef void* WXWidget; */ -/* typedef void* WXWindow; */ -typedef WX_OPAQUE_TYPE(ControlRef ) * WXWidget ; -typedef WX_OPAQUE_TYPE(WindowRef) * WXWindow ; -typedef void* WXDisplay; - -/* typedef WindowPtr WXHWND; */ -/* typedef Handle WXHANDLE; */ -/* typedef CIconHandle WXHICON; */ -/* typedef unsigned long WXHFONT; */ -/* typedef MenuHandle WXHMENU; */ -/* typedef unsigned long WXHPEN; */ -/* typedef unsigned long WXHBRUSH; */ -/* typedef unsigned long WXHPALETTE; */ -/* typedef CursHandle WXHCURSOR; */ -/* typedef RgnHandle WXHRGN; */ -/* typedef unsigned long WXHACCEL; */ -/* typedef unsigned long WXHINSTANCE; */ -/* typedef unsigned long WXHIMAGELIST; */ -/* typedef unsigned long WXHGLOBAL; */ -/* typedef GrafPtr WXHDC; */ -/* typedef unsigned int WXWPARAM; */ -/* typedef long WXLPARAM; */ -/* typedef void * WXRGNDATA; */ -/* typedef void * WXMSG; */ -/* typedef unsigned long WXHCONV; */ -/* typedef unsigned long WXHKEY; */ -/* typedef void * WXDRAWITEMSTRUCT; */ -/* typedef void * WXMEASUREITEMSTRUCT; */ -/* typedef void * WXLPCREATESTRUCT; */ -/* typedef int (*WXFARPROC)(); */ - -/* typedef WindowPtr WXWindow; */ -/* typedef ControlHandle WXWidget; */ - -#endif - -#if defined( __WXCOCOA__ ) || ( defined(__WXMAC__) && defined(__DARWIN__) ) - -/* Definitions of 32-bit/64-bit types - * These are typedef'd exactly the same way in newer OS X headers so - * redefinition when real headers are included should not be a problem. If - * it is, the types are being defined wrongly here. - * The purpose of these types is so they can be used from public wx headers. - * and also because the older (pre-Leopard) headers don't define them. - */ - -/* NOTE: We don't pollute namespace with CGFLOAT_MIN/MAX/IS_DOUBLE macros - * since they are unlikely to be needed in a public header. - */ -#if defined(__LP64__) && __LP64__ - typedef double CGFloat; -#else - typedef float CGFloat; -#endif - -#if (defined(__LP64__) && __LP64__) || (defined(NS_BUILD_32_LIKE_64) && NS_BUILD_32_LIKE_64) -typedef long NSInteger; -typedef unsigned long NSUInteger; -#else -typedef int NSInteger; -typedef unsigned int NSUInteger; -#endif - -/* Objective-C type declarations. - * These are to be used in public headers in lieu of NSSomething* because - * Objective-C class names are not available in C/C++ code. - */ - -/* NOTE: This ought to work with other compilers too, but I'm being cautious */ -#if (defined(__GNUC__) && defined(__APPLE__)) || defined(__MWERKS__) -/* It's desirable to have type safety for Objective-C(++) code as it does -at least catch typos of method names among other things. However, it -is not possible to declare an Objective-C class from plain old C or C++ -code. Furthermore, because of C++ name mangling, the type name must -be the same for both C++ and Objective-C++ code. Therefore, we define -what should be a pointer to an Objective-C class as a pointer to a plain -old C struct with the same name. Unfortunately, because the compiler -does not see a struct as an Objective-C class we cannot declare it -as a struct in Objective-C(++) mode. -*/ -#if defined(__OBJC__) -#define DECLARE_WXCOCOA_OBJC_CLASS(klass) \ -@class klass; \ -typedef klass *WX_##klass -#else /* not defined(__OBJC__) */ -#define DECLARE_WXCOCOA_OBJC_CLASS(klass) \ -typedef struct klass *WX_##klass -#endif /* defined(__OBJC__) */ - -#else /* not Apple's GNU or CodeWarrior */ -#warning "Objective-C types will not be checked by the compiler." -/* NOTE: typedef struct objc_object *id; */ -/* IOW, we're declaring these using the id type without using that name, */ -/* since "id" is used extensively not only within wxWidgets itself, but */ -/* also in wxWidgets application code. The following works fine when */ -/* compiling C(++) code, and works without typesafety for Obj-C(++) code */ -#define DECLARE_WXCOCOA_OBJC_CLASS(klass) \ -typedef struct objc_object *WX_##klass - -#endif /* (defined(__GNUC__) && defined(__APPLE__)) || defined(__MWERKS__) */ - -DECLARE_WXCOCOA_OBJC_CLASS(NSApplication); -DECLARE_WXCOCOA_OBJC_CLASS(NSBitmapImageRep); -DECLARE_WXCOCOA_OBJC_CLASS(NSBox); -DECLARE_WXCOCOA_OBJC_CLASS(NSButton); -DECLARE_WXCOCOA_OBJC_CLASS(NSColor); -DECLARE_WXCOCOA_OBJC_CLASS(NSColorPanel); -DECLARE_WXCOCOA_OBJC_CLASS(NSControl); -DECLARE_WXCOCOA_OBJC_CLASS(NSCursor); -DECLARE_WXCOCOA_OBJC_CLASS(NSEvent); -DECLARE_WXCOCOA_OBJC_CLASS(NSFontPanel); -DECLARE_WXCOCOA_OBJC_CLASS(NSImage); -DECLARE_WXCOCOA_OBJC_CLASS(NSLayoutManager); -DECLARE_WXCOCOA_OBJC_CLASS(NSMenu); -DECLARE_WXCOCOA_OBJC_CLASS(NSMenuExtra); -DECLARE_WXCOCOA_OBJC_CLASS(NSMenuItem); -DECLARE_WXCOCOA_OBJC_CLASS(NSMutableArray); -DECLARE_WXCOCOA_OBJC_CLASS(NSNotification); -DECLARE_WXCOCOA_OBJC_CLASS(NSObject); -DECLARE_WXCOCOA_OBJC_CLASS(NSPanel); -DECLARE_WXCOCOA_OBJC_CLASS(NSScrollView); -DECLARE_WXCOCOA_OBJC_CLASS(NSSound); -DECLARE_WXCOCOA_OBJC_CLASS(NSStatusItem); -DECLARE_WXCOCOA_OBJC_CLASS(NSTableColumn); -DECLARE_WXCOCOA_OBJC_CLASS(NSTableView); -DECLARE_WXCOCOA_OBJC_CLASS(NSTextContainer); -DECLARE_WXCOCOA_OBJC_CLASS(NSTextField); -DECLARE_WXCOCOA_OBJC_CLASS(NSTextStorage); -DECLARE_WXCOCOA_OBJC_CLASS(NSThread); -DECLARE_WXCOCOA_OBJC_CLASS(NSWindow); -DECLARE_WXCOCOA_OBJC_CLASS(NSView); -#ifdef __WXMAC__ -// things added for __WXMAC__ -DECLARE_WXCOCOA_OBJC_CLASS(NSString); -#else -// things only for __WXCOCOA__ -typedef WX_NSView WXWidget; /* wxWidgets BASE definition */ -#endif -#endif /* __WXCOCOA__ || ( __WXMAC__ &__DARWIN__)*/ - -#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__ */ - - -/* ABX: check __WIN32__ instead of __WXMSW__ for the same MSWBase in any Win32 port */ -#if defined(__WIN32__) - -/* the keywords needed for WinMain() declaration */ -#ifndef WXFAR -# define WXFAR -#endif - -/* Stand-ins for Windows types to avoid #including all of windows.h */ -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 * WXRECTPTR; -typedef void * WXHACCEL; -typedef void WXFAR * 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 void * WXRGNDATA; -typedef struct tagMSG WXMSG; -typedef void * WXHCONV; -typedef void * WXHKEY; -typedef void * WXHTREEITEM; - -typedef void * WXDRAWITEMSTRUCT; -typedef void * WXMEASUREITEMSTRUCT; -typedef void * WXLPCREATESTRUCT; - -typedef WXHWND WXWidget; - -#ifdef __WIN64__ -typedef unsigned __int64 WXWPARAM; -typedef __int64 WXLPARAM; -typedef __int64 WXLRESULT; -#else -typedef unsigned int WXWPARAM; -typedef long WXLPARAM; -typedef long WXLRESULT; -#endif - -#if defined(__GNUWIN32__) || defined(__WXMICROWIN__) -typedef int (*WXFARPROC)(); -#else -typedef int (__stdcall *WXFARPROC)(); -#endif -#endif /* __WIN32__ */ - - -#if defined(__OS2__) -typedef unsigned long DWORD; -typedef unsigned short WORD; -#endif - -#if defined(__WXPM__) || defined(__EMX__) -#ifdef __WXPM__ -/* Stand-ins for OS/2 types, to avoid #including all of os2.h */ -typedef unsigned long WXHWND; -typedef unsigned long WXHANDLE; -typedef unsigned long WXHICON; -typedef unsigned long WXHFONT; -typedef unsigned long WXHMENU; -typedef unsigned long WXHPEN; -typedef unsigned long WXHBRUSH; -typedef unsigned long WXHPALETTE; -typedef unsigned long WXHCURSOR; -typedef unsigned long WXHRGN; -typedef unsigned long WXHACCEL; -typedef unsigned long WXHBITMAP; -typedef unsigned long WXHDC; -typedef unsigned int WXUINT; -typedef unsigned long WXDWORD; -typedef unsigned short WXWORD; - -typedef unsigned long WXCOLORREF; -typedef void * WXMSG; -typedef unsigned long WXHTREEITEM; - -typedef void * WXDRAWITEMSTRUCT; -typedef void * WXMEASUREITEMSTRUCT; -typedef void * WXLPCREATESTRUCT; - -typedef WXHWND WXWidget; -#endif -#ifdef __EMX__ -/* Need a well-known type for WXFARPROC - below. MPARAM is typedef'ed too late. */ -#define WXWPARAM void * -#define WXLPARAM void * -#else -#define WXWPARAM MPARAM -#define WXLPARAM MPARAM -#endif -#define RECT RECTL -#define LOGFONT FATTRS -#define LOWORD SHORT1FROMMP -#define HIWORD SHORT2FROMMP - -typedef unsigned long WXMPARAM; -typedef unsigned long WXMSGID; -typedef void* WXRESULT; -/* typedef int (*WXFARPROC)(); */ -/* some windows handles not defined by PM */ -typedef unsigned long HANDLE; -typedef unsigned long HICON; -typedef unsigned long HFONT; -typedef unsigned long HMENU; -typedef unsigned long HPEN; -typedef unsigned long HBRUSH; -typedef unsigned long HPALETTE; -typedef unsigned long HCURSOR; -typedef unsigned long HINSTANCE; -typedef unsigned long HIMAGELIST; -typedef unsigned long HGLOBAL; -#endif /* WXPM || EMX */ - -#if defined (__WXPM__) -/* WIN32 graphics types for OS/2 GPI */ - -/* RGB under OS2 is more like a PALETTEENTRY struct under Windows so we need a real RGB def */ -#define OS2RGB(r,g,b) ((DWORD)((unsigned char)(b) | ((unsigned char)(g) << 8)) | ((unsigned char)(r) << 16)) - -typedef unsigned long COLORREF; -#define GetRValue(rgb) ((unsigned char)((rgb) >> 16)) -#define GetGValue(rgb) ((unsigned char)(((unsigned short)(rgb)) >> 8)) -#define GetBValue(rgb) ((unsigned char)(rgb)) -#define PALETTEINDEX(i) ((COLORREF)(0x01000000 | (DWORD)(WORD)(i))) -#define PALETTERGB(r,g,b) (0x02000000 | OS2RGB(r,g,b)) -/* OS2's RGB/RGB2 is backwards from this */ -typedef struct tagPALETTEENTRY -{ - char bRed; - char bGreen; - char bBlue; - char bFlags; -} PALETTEENTRY; -typedef struct tagLOGPALETTE -{ - WORD palVersion; - WORD palNumentries; - WORD PALETTEENTRY[1]; -} LOGPALETTE; - -#if (defined(__VISAGECPP__) && (__IBMCPP__ < 400)) || defined (__WATCOMC__) - /* VA 3.0 for some reason needs base data types when typedefing a proc proto??? */ -typedef void* (_System *WXFARPROC)(unsigned long, unsigned long, void*, void*); -#else -#if defined(__EMX__) && !defined(_System) -#define _System -#endif -typedef WXRESULT (_System *WXFARPROC)(WXHWND, WXMSGID, WXWPARAM, WXLPARAM); -#endif - -#endif /* __WXPM__ */ - - -#if defined(__WXMOTIF__) || defined(__WXX11__) -/* Stand-ins for X/Xt/Motif types */ -typedef void* WXWindow; -typedef void* WXWidget; -typedef void* WXAppContext; -typedef void* WXColormap; -typedef void* WXColor; -typedef void WXDisplay; -typedef void WXEvent; -typedef void* WXCursor; -typedef void* WXPixmap; -typedef void* WXFontStructPtr; -typedef void* WXGC; -typedef void* WXRegion; -typedef void* WXFont; -typedef void* WXImage; -typedef void* WXFontList; -typedef void* WXFontSet; -typedef void* WXRendition; -typedef void* WXRenderTable; -typedef void* WXFontType; /* either a XmFontList or XmRenderTable */ -typedef void* WXString; - -typedef unsigned long Atom; /* this might fail on a few architectures */ -typedef long WXPixel; /* safety catch in src/motif/colour.cpp */ - -#endif /* Motif */ - -#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; -#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; - -typedef GtkWidget *WXWidget; - -#ifndef __WXGTK20__ -#define GTK_OBJECT_GET_CLASS(object) (GTK_OBJECT(object)->klass) -#define GTK_CLASS_TYPE(klass) ((klass)->type) -#endif - -#endif /* __WXGTK__ */ - -#if defined(__WXGTK20__) || (defined(__WXX11__) && wxUSE_UNICODE) -#define wxUSE_PANGO 1 -#else -#define wxUSE_PANGO 0 -#endif - -#if wxUSE_PANGO -/* Stand-ins for Pango types */ -typedef struct _PangoContext PangoContext; -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 */ -typedef const void* WXWidget; -#endif /* DFB */ - -/* This is required because of clashing macros in windows.h, which may be */ -/* included before or after wxWidgets classes, and therefore must be */ -/* disabled here before any significant wxWidgets headers are included. */ -#ifdef __WXMSW__ -#include "wx/msw/winundef.h" -#endif /* __WXMSW__ */ - -/* --------------------------------------------------------------------------- */ -/* macro to define a class without copy ctor nor assignment operator */ -/* --------------------------------------------------------------------------- */ - -#define DECLARE_NO_COPY_CLASS(classname) \ - private: \ - classname(const classname&); \ - classname& operator=(const classname&); - -#define DECLARE_NO_ASSIGN_CLASS(classname) \ - private: \ - classname& operator=(const classname&); - -/* --------------------------------------------------------------------------- */ -/* If a manifest is being automatically generated, add common controls 6 to it */ -/* --------------------------------------------------------------------------- */ - -#if (!defined wxUSE_NO_MANIFEST || wxUSE_NO_MANIFEST == 0 ) && \ - ( defined _MSC_FULL_VER && _MSC_FULL_VER >= 140040130 ) - -#define WX_CC_MANIFEST(cpu) \ - "/manifestdependency:\"type='win32' \ - name='Microsoft.Windows.Common-Controls' \ - version='6.0.0.0' \ - processorArchitecture='"cpu"' \ - publicKeyToken='6595b64144ccf1df' \ - language='*'\"" - -#if defined _M_IX86 - #pragma comment(linker, WX_CC_MANIFEST("x86")) -#elif defined _M_X64 - #pragma comment(linker, WX_CC_MANIFEST("amd64")) -#elif defined _M_IA64 - #pragma comment(linker, WX_CC_MANIFEST("ia64")) -#else - #pragma comment(linker, WX_CC_MANIFEST("*")) -#endif - -#endif /* !wxUSE_NO_MANIFEST && _MSC_FULL_VER >= 140040130 */ - -#endif - /* _WX_DEFS_H_ */ diff --git a/desmume/src/windows/wx/include/wx/dialog.h b/desmume/src/windows/wx/include/wx/dialog.h deleted file mode 100644 index ffb69db18..000000000 --- a/desmume/src/windows/wx/include/wx/dialog.h +++ /dev/null @@ -1,167 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dialog.h -// Purpose: wxDialogBase class -// Author: Vadim Zeitlin -// Modified by: -// Created: 29.06.99 -// RCS-ID: $Id: dialog.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DIALOG_H_BASE_ -#define _WX_DIALOG_H_BASE_ - -#include "wx/defs.h" -#include "wx/containr.h" -#include "wx/toplevel.h" - -class WXDLLIMPEXP_FWD_CORE wxSizer; -class WXDLLIMPEXP_FWD_CORE wxStdDialogButtonSizer; - -#define wxDIALOG_NO_PARENT 0x0001 // Don't make owned by apps top window - -#ifdef __WXWINCE__ -#define wxDEFAULT_DIALOG_STYLE (wxCAPTION | wxMAXIMIZE | wxCLOSE_BOX | wxNO_BORDER) -#else -#define wxDEFAULT_DIALOG_STYLE (wxCAPTION | wxSYSTEM_MENU | wxCLOSE_BOX) -#endif - -extern WXDLLEXPORT_DATA(const wxChar) wxDialogNameStr[]; - -class WXDLLEXPORT wxDialogBase : public wxTopLevelWindow -{ -public: - enum - { - // all flags allowed in wxDialogBase::CreateButtonSizer() - ButtonSizerFlags = wxOK|wxCANCEL|wxYES|wxNO|wxHELP|wxNO_DEFAULT - }; - - wxDialogBase() { Init(); } - virtual ~wxDialogBase() { } - - // define public wxDialog methods to be implemented by the derived classes - virtual int ShowModal() = 0; - virtual void EndModal(int retCode) = 0; - virtual bool IsModal() const = 0; - - - // Modal dialogs have a return code - usually the id of the last - // pressed button - void SetReturnCode(int returnCode) { m_returnCode = returnCode; } - int GetReturnCode() const { return m_returnCode; } - - // Set the identifier for the affirmative button: this button will close - // the dialog after validating data and calling TransferDataFromWindow() - void SetAffirmativeId(int affirmativeId); - int GetAffirmativeId() const { return m_affirmativeId; } - - // Set identifier for Esc key translation: the button with this id will - // close the dialog without doing anything else; special value wxID_NONE - // means to not handle Esc at all while wxID_ANY means to map Esc to - // wxID_CANCEL if present and GetAffirmativeId() otherwise - void SetEscapeId(int escapeId); - int GetEscapeId() const { return m_escapeId; } - -#if wxUSE_STATTEXT // && wxUSE_TEXTCTRL - // splits text up at newlines and places the - // lines into a vertical wxBoxSizer - wxSizer *CreateTextSizer( const wxString &message ); -#endif // wxUSE_STATTEXT // && wxUSE_TEXTCTRL - - // returns a horizontal wxBoxSizer containing the given buttons - // - // notice that the returned sizer can be NULL if no buttons are put in the - // sizer (this mostly happens under smart phones and other atypical - // platforms which have hardware buttons replacing OK/Cancel and such) - wxSizer *CreateButtonSizer(long flags); - - // returns the sizer containing CreateButtonSizer() below a separating - // static line for the platforms which use static lines for items - // separation (i.e. not Mac) - wxSizer *CreateSeparatedButtonSizer(long flags); - -#if wxUSE_BUTTON - wxStdDialogButtonSizer *CreateStdDialogButtonSizer( long flags ); -#endif // wxUSE_BUTTON - -protected: - // emulate click of a button with the given id if it's present in the dialog - // - // return true if button was "clicked" or false if we don't have it - bool EmulateButtonClickIfPresent(int id); - - // this function is used by OnCharHook() to decide whether the given key - // should close the dialog - // - // for most platforms the default implementation (which just checks for - // Esc) is sufficient, but Mac port also adds Cmd-. here and other ports - // could do something different if needed - virtual bool IsEscapeKey(const wxKeyEvent& event); - - // end either modal or modeless dialog, for the modal dialog rc is used as - // the dialog return code - void EndDialog(int rc); - - // call Validate() and TransferDataFromWindow() and close dialog with - // wxID_OK return code - void AcceptAndClose(); - - - // The return code from modal dialog - int m_returnCode; - - // The identifier for the affirmative button (usually wxID_OK) - int m_affirmativeId; - - // The identifier for cancel button (usually wxID_CANCEL) - int m_escapeId; - -private: - // common part of all ctors - void Init(); - - // handle Esc key presses - void OnCharHook(wxKeyEvent& event); - - // handle closing the dialog window - void OnCloseWindow(wxCloseEvent& event); - - // handle the standard buttons - void OnButton(wxCommandEvent& event); - - // update the background colour - void OnSysColourChanged(wxSysColourChangedEvent& event); - - - DECLARE_NO_COPY_CLASS(wxDialogBase) - DECLARE_EVENT_TABLE() - WX_DECLARE_CONTROL_CONTAINER(); -}; - - -#if defined(__WXUNIVERSAL__) && !defined(__WXMICROWIN__) - #include "wx/univ/dialog.h" -#else - #if defined(__WXPALMOS__) - #include "wx/palmos/dialog.h" - #elif defined(__WXMSW__) - #include "wx/msw/dialog.h" - #elif defined(__WXMOTIF__) - #include "wx/motif/dialog.h" - #elif defined(__WXGTK20__) - #include "wx/gtk/dialog.h" - #elif defined(__WXGTK__) - #include "wx/gtk1/dialog.h" - #elif defined(__WXMAC__) - #include "wx/mac/dialog.h" - #elif defined(__WXCOCOA__) - #include "wx/cocoa/dialog.h" - #elif defined(__WXPM__) - #include "wx/os2/dialog.h" - #endif -#endif - -#endif - // _WX_DIALOG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/dialup.h b/desmume/src/windows/wx/include/wx/dialup.h deleted file mode 100644 index c2dd296de..000000000 --- a/desmume/src/windows/wx/include/wx/dialup.h +++ /dev/null @@ -1,201 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dialup.h -// Purpose: Network related wxWidgets classes and functions -// Author: Vadim Zeitlin -// Modified by: -// Created: 07.07.99 -// RCS-ID: $Id: dialup.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DIALUP_H -#define _WX_DIALUP_H - -#if wxUSE_DIALUP_MANAGER - -#include "wx/event.h" - -// ---------------------------------------------------------------------------- -// misc -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_BASE wxArrayString; - -#define WXDIALUP_MANAGER_DEFAULT_BEACONHOST wxT("www.yahoo.com") - -// ---------------------------------------------------------------------------- -// A class which groups functions dealing with connecting to the network from a -// workstation using dial-up access to the net. There is at most one instance -// of this class in the program accessed via GetDialUpManager(). -// ---------------------------------------------------------------------------- - -/* TODO - * - * 1. more configurability for Unix: i.e. how to initiate the connection, how - * to check for online status, &c. - * 2. a function to enumerate all connections (ISPs) and show a dialog in - * Dial() allowing to choose between them if no ISP given - * 3. add an async version of dialing functions which notify the caller about - * the progress (or may be even start another thread to monitor it) - * 4. the static creation/accessor functions are not MT-safe - but is this - * really crucial? I think we may suppose they're always called from the - * main thread? - */ - -class WXDLLEXPORT wxDialUpManager -{ -public: - // this function should create and return the object of the - // platform-specific class derived from wxDialUpManager. It's implemented - // in the platform-specific source files. - static wxDialUpManager *Create(); - - // could the dialup manager be initialized correctly? If this function - // returns false, no other functions will work neither, so it's a good idea - // to call this function and check its result before calling any other - // wxDialUpManager methods - virtual bool IsOk() const = 0; - - // virtual dtor for any base class - virtual ~wxDialUpManager() { } - - // operations - // ---------- - - // fills the array with the names of all possible values for the first - // parameter to Dial() on this machine and returns their number (may be 0) - virtual size_t GetISPNames(wxArrayString& names) const = 0; - - // dial the given ISP, use username and password to authentificate - // - // if no nameOfISP is given, the function will select the default one - // - // if no username/password are given, the function will try to do without - // them, but will ask the user if really needed - // - // if async parameter is false, the function waits until the end of dialing - // and returns true upon successful completion. - // if async is true, the function only initiates the connection and returns - // immediately - the result is reported via events (an event is sent - // anyhow, but if dialing failed it will be a DISCONNECTED one) - virtual bool Dial(const wxString& nameOfISP = wxEmptyString, - const wxString& username = wxEmptyString, - const wxString& password = wxEmptyString, - bool async = true) = 0; - - // returns true if (async) dialing is in progress - virtual bool IsDialing() const = 0; - - // cancel dialing the number initiated with Dial(async = true) - // NB: this won't result in DISCONNECTED event being sent - virtual bool CancelDialing() = 0; - - // hang up the currently active dial up connection - virtual bool HangUp() = 0; - - // online status - // ------------- - - // returns true if the computer has a permanent network connection (i.e. is - // on a LAN) and so there is no need to use Dial() function to go online - // - // NB: this functions tries to guess the result and it is not always - // guaranteed to be correct, so it's better to ask user for - // confirmation or give him a possibility to override it - virtual bool IsAlwaysOnline() const = 0; - - // returns true if the computer is connected to the network: under Windows, - // this just means that a RAS connection exists, under Unix we check that - // the "well-known host" (as specified by SetWellKnownHost) is reachable - virtual bool IsOnline() const = 0; - - // sometimes the built-in logic for determining the online status may fail, - // so, in general, the user should be allowed to override it. This function - // allows to forcefully set the online status - whatever our internal - // algorithm may think about it. - virtual void SetOnlineStatus(bool isOnline = true) = 0; - - // set misc wxDialUpManager options - // -------------------------------- - - // enable automatical checks for the connection status and sending of - // wxEVT_DIALUP_CONNECTED/wxEVT_DIALUP_DISCONNECTED events. The interval - // parameter is only for Unix where we do the check manually: under - // Windows, the notification about the change of connection status is - // instantenous. - // - // Returns false if couldn't set up automatic check for online status. - virtual bool EnableAutoCheckOnlineStatus(size_t nSeconds = 60) = 0; - - // disable automatic check for connection status change - notice that the - // wxEVT_DIALUP_XXX events won't be sent any more neither. - virtual void DisableAutoCheckOnlineStatus() = 0; - - // additional Unix-only configuration - // ---------------------------------- - - // under Unix, the value of well-known host is used to check whether we're - // connected to the internet. It's unused under Windows, but this function - // is always safe to call. The default value is www.yahoo.com. - virtual void SetWellKnownHost(const wxString& hostname, - int portno = 80) = 0; - - // Sets the commands to start up the network and to hang up again. Used by - // the Unix implementations only. - virtual void - SetConnectCommand(const wxString& commandDial = wxT("/usr/bin/pon"), - const wxString& commandHangup = wxT("/usr/bin/poff")) = 0; -}; - -// ---------------------------------------------------------------------------- -// wxDialUpManager events -// ---------------------------------------------------------------------------- - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_DIALUP_CONNECTED, 450) - DECLARE_EVENT_TYPE(wxEVT_DIALUP_DISCONNECTED, 451) -END_DECLARE_EVENT_TYPES() - -// the event class for the dialup events -class WXDLLEXPORT wxDialUpEvent : public wxEvent -{ -public: - wxDialUpEvent(bool isConnected, bool isOwnEvent) : wxEvent(isOwnEvent) - { - SetEventType(isConnected ? wxEVT_DIALUP_CONNECTED - : wxEVT_DIALUP_DISCONNECTED); - } - - // is this a CONNECTED or DISCONNECTED event? - bool IsConnectedEvent() const - { return GetEventType() == wxEVT_DIALUP_CONNECTED; } - - // does this event come from wxDialUpManager::Dial() or from some extrenal - // process (i.e. does it result from our own attempt to establish the - // connection)? - bool IsOwnEvent() const { return m_id != 0; } - - // implement the base class pure virtual - virtual wxEvent *Clone() const { return new wxDialUpEvent(*this); } - -private: - DECLARE_NO_ASSIGN_CLASS(wxDialUpEvent) -}; - -// the type of dialup event handler function -typedef void (wxEvtHandler::*wxDialUpEventFunction)(wxDialUpEvent&); - -#define wxDialUpEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxDialUpEventFunction, &func) - -// macros to catch dialup events -#define EVT_DIALUP_CONNECTED(func) \ - wx__DECLARE_EVT0(wxEVT_DIALUP_CONNECTED, wxDialUpEventHandler(func)) -#define EVT_DIALUP_DISCONNECTED(func) \ - wx__DECLARE_EVT0(wxEVT_DIALUP_DISCONNECTED, wxDialUpEventHandler(func)) - - -#endif // wxUSE_DIALUP_MANAGER - -#endif // _WX_DIALUP_H diff --git a/desmume/src/windows/wx/include/wx/dir.h b/desmume/src/windows/wx/include/wx/dir.h deleted file mode 100644 index 0a5b2cffe..000000000 --- a/desmume/src/windows/wx/include/wx/dir.h +++ /dev/null @@ -1,161 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dir.h -// Purpose: wxDir is a class for enumerating the files in a directory -// Author: Vadim Zeitlin -// Modified by: -// Created: 08.12.99 -// RCS-ID: $Id: dir.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1999 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DIR_H_ -#define _WX_DIR_H_ - -#include "wx/longlong.h" -#include "wx/string.h" - -class WXDLLIMPEXP_FWD_BASE wxArrayString; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// these flags define what kind of filenames is included in the list of files -// enumerated by GetFirst/GetNext -enum -{ - wxDIR_FILES = 0x0001, // include files - wxDIR_DIRS = 0x0002, // include directories - wxDIR_HIDDEN = 0x0004, // include hidden files - wxDIR_DOTDOT = 0x0008, // include '.' and '..' - - // by default, enumerate everything except '.' and '..' - wxDIR_DEFAULT = wxDIR_FILES | wxDIR_DIRS | wxDIR_HIDDEN -}; - -// these constants are possible return value of wxDirTraverser::OnDir() -enum wxDirTraverseResult -{ - wxDIR_IGNORE = -1, // ignore this directory but continue with others - wxDIR_STOP, // stop traversing - wxDIR_CONTINUE // continue into this directory -}; - -// ---------------------------------------------------------------------------- -// wxDirTraverser: helper class for wxDir::Traverse() -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxDirTraverser -{ -public: - /// a virtual dtor has been provided since this class has virtual members - virtual ~wxDirTraverser() { } - // called for each file found by wxDir::Traverse() - // - // return wxDIR_STOP or wxDIR_CONTINUE from here (wxDIR_IGNORE doesn't - // make sense) - virtual wxDirTraverseResult OnFile(const wxString& filename) = 0; - - // called for each directory found by wxDir::Traverse() - // - // return one of the enum elements defined above - virtual wxDirTraverseResult OnDir(const wxString& dirname) = 0; - - // called for each directory which we couldn't open during our traversal - // of the directory tyree - // - // this method can also return either wxDIR_STOP, wxDIR_IGNORE or - // wxDIR_CONTINUE but the latter is treated specially: it means to retry - // opening the directory and so may lead to infinite loop if it is - // returned unconditionally, be careful with this! - // - // the base class version always returns wxDIR_IGNORE - virtual wxDirTraverseResult OnOpenError(const wxString& dirname); -}; - -// ---------------------------------------------------------------------------- -// wxDir: portable equivalent of {open/read/close}dir functions -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_BASE wxDirData; - -class WXDLLIMPEXP_BASE wxDir -{ -public: - // test for existence of a directory with the given name - static bool Exists(const wxString& dir); - - // ctors - // ----- - - // default, use Open() - wxDir() { m_data = NULL; } - - // opens the directory for enumeration, use IsOpened() to test success - wxDir(const wxString& dir); - - // dtor cleans up the associated ressources - ~wxDir(); - - // open the directory for enumerating - bool Open(const wxString& dir); - - // returns true if the directory was successfully opened - bool IsOpened() const; - - // get the full name of the directory (without '/' at the end) - wxString GetName() const; - - // file enumeration routines - // ------------------------- - - // start enumerating all files matching filespec (or all files if it is - // empty) and flags, return true on success - bool GetFirst(wxString *filename, - const wxString& filespec = wxEmptyString, - int flags = wxDIR_DEFAULT) const; - - // get next file in the enumeration started with GetFirst() - bool GetNext(wxString *filename) const; - - // return true if this directory has any files in it - bool HasFiles(const wxString& spec = wxEmptyString); - - // return true if this directory has any subdirectories - bool HasSubDirs(const wxString& spec = wxEmptyString); - - // enumerate all files in this directory and its subdirectories - // - // return the number of files found - size_t Traverse(wxDirTraverser& sink, - const wxString& filespec = wxEmptyString, - int flags = wxDIR_DEFAULT) const; - - // simplest version of Traverse(): get the names of all files under this - // directory into filenames array, return the number of files - static size_t GetAllFiles(const wxString& dirname, - wxArrayString *files, - const wxString& filespec = wxEmptyString, - int flags = wxDIR_DEFAULT); - - // check if there any files matching the given filespec under the given - // directory (i.e. searches recursively), return the file path if found or - // empty string otherwise - static wxString FindFirst(const wxString& dirname, - const wxString& filespec, - int flags = wxDIR_DEFAULT); - - // returns the size of all directories recursively found in given path - static wxULongLong GetTotalSize(const wxString &dir, wxArrayString *filesSkipped = NULL); - -private: - friend class wxDirData; - - wxDirData *m_data; - - DECLARE_NO_COPY_CLASS(wxDir) -}; - -#endif // _WX_DIR_H_ - diff --git a/desmume/src/windows/wx/include/wx/dirctrl.h b/desmume/src/windows/wx/include/wx/dirctrl.h deleted file mode 100644 index 704f8bb76..000000000 --- a/desmume/src/windows/wx/include/wx/dirctrl.h +++ /dev/null @@ -1,18 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dirctrl.h -// Purpose: Directory control base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: dirctrl.h 33948 2005-05-04 18:57:50Z JS $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DIRCTRL_H_BASE_ -#define _WX_DIRCTRL_H_BASE_ - -#include "wx/generic/dirctrlg.h" - -#endif - // _WX_DIRCTRL_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/dirdlg.h b/desmume/src/windows/wx/include/wx/dirdlg.h deleted file mode 100644 index 22ae35471..000000000 --- a/desmume/src/windows/wx/include/wx/dirdlg.h +++ /dev/null @@ -1,141 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dirdlg.h -// Purpose: wxDirDialog base class -// Author: Robert Roebling -// Modified by: -// Created: -// Copyright: (c) Robert Roebling -// RCS-ID: $Id: dirdlg.h 44027 2006-12-21 19:26:48Z VZ $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DIRDLG_H_BASE_ -#define _WX_DIRDLG_H_BASE_ - -#if wxUSE_DIRDLG - -#include "wx/dialog.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -extern WXDLLEXPORT_DATA(const wxChar) wxDirDialogNameStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxDirDialogDefaultFolderStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxDirSelectorPromptStr[]; - -#define wxDD_CHANGE_DIR 0x0100 -#define wxDD_DIR_MUST_EXIST 0x0200 - -// deprecated, on by default now, use wxDD_DIR_MUST_EXIST to disable it -#define wxDD_NEW_DIR_BUTTON 0 - -#ifdef __WXWINCE__ - #define wxDD_DEFAULT_STYLE wxDEFAULT_DIALOG_STYLE -#else - #define wxDD_DEFAULT_STYLE (wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) -#endif - -//------------------------------------------------------------------------- -// wxDirDialogBase -//------------------------------------------------------------------------- - -class WXDLLEXPORT wxDirDialogBase : public wxDialog -{ -public: - wxDirDialogBase() {} - wxDirDialogBase(wxWindow *parent, - const wxString& title = wxDirSelectorPromptStr, - const wxString& defaultPath = wxEmptyString, - long style = wxDD_DEFAULT_STYLE, - const wxPoint& pos = wxDefaultPosition, - const wxSize& sz = wxDefaultSize, - const wxString& name = wxDirDialogNameStr) - { - Create(parent, title, defaultPath, style, pos, sz, name); - } - - virtual ~wxDirDialogBase() {} - - - bool Create(wxWindow *parent, - const wxString& title = wxDirSelectorPromptStr, - const wxString& defaultPath = wxEmptyString, - long style = wxDD_DEFAULT_STYLE, - const wxPoint& pos = wxDefaultPosition, - const wxSize& sz = wxDefaultSize, - const wxString& name = wxDirDialogNameStr) - { - if (!wxDialog::Create(parent, wxID_ANY, title, pos, sz, style, name)) - return false; - m_path = defaultPath; - m_message = title; - return true; - } - -#if WXWIN_COMPATIBILITY_2_6 - - wxDEPRECATED( long GetStyle() const ); - wxDEPRECATED( void SetStyle(long style) ); - -#endif // WXWIN_COMPATIBILITY_2_6 - - virtual void SetMessage(const wxString& message) { m_message = message; } - virtual void SetPath(const wxString& path) { m_path = path; } - - virtual wxString GetMessage() const { return m_message; } - virtual wxString GetPath() const { return m_path; } - -protected: - wxString m_message; - wxString m_path; -}; - - -// Universal and non-port related switches with need for generic implementation -#if defined(__WXUNIVERSAL__) - #include "wx/generic/dirdlgg.h" - #define wxDirDialog wxGenericDirDialog -#elif defined(__WXMSW__) && (defined(__SALFORDC__) || \ - !wxUSE_OLE || \ - (defined (__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS)) - #include "wx/generic/dirdlgg.h" - #define wxDirDialog wxGenericDirDialog -#elif defined(__WXMSW__) && defined(__WXWINCE__) && !defined(__HANDHELDPC__) - #include "wx/generic/dirdlgg.h" // MS PocketPC or MS Smartphone - #define wxDirDialog wxGenericDirDialog -#elif defined(__WXMSW__) - #include "wx/msw/dirdlg.h" // Native MSW -#elif defined(__WXGTK24__) - #include "wx/gtk/dirdlg.h" // Native GTK for gtk2.4 -#elif defined(__WXGTK__) - #include "wx/generic/dirdlgg.h" - #define wxDirDialog wxGenericDirDialog -#elif defined(__WXMAC__) - #include "wx/mac/dirdlg.h" // Native Mac -#elif defined(__WXCOCOA__) - #include "wx/cocoa/dirdlg.h" // Native Cocoa -#elif defined(__WXMOTIF__) || \ - defined(__WXX11__) || \ - defined(__WXMGL__) || \ - defined(__WXCOCOA__) || \ - defined(__WXPM__) - #include "wx/generic/dirdlgg.h" // Other ports use generic implementation - #define wxDirDialog wxGenericDirDialog -#endif - -// ---------------------------------------------------------------------------- -// common ::wxDirSelector() function -// ---------------------------------------------------------------------------- - -WXDLLEXPORT wxString -wxDirSelector(const wxString& message = wxDirSelectorPromptStr, - const wxString& defaultPath = wxEmptyString, - long style = wxDD_DEFAULT_STYLE, - const wxPoint& pos = wxDefaultPosition, - wxWindow *parent = NULL); - -#endif // wxUSE_DIRDLG - -#endif - // _WX_DIRDLG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/display.h b/desmume/src/windows/wx/include/wx/display.h deleted file mode 100644 index 81f812c60..000000000 --- a/desmume/src/windows/wx/include/wx/display.h +++ /dev/null @@ -1,128 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/display.h -// Purpose: wxDisplay class -// Author: Royce Mitchell III, Vadim Zeitlin -// Created: 06/21/02 -// RCS-ID: $Id: display.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 2002-2006 wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DISPLAY_H_BASE_ -#define _WX_DISPLAY_H_BASE_ - -// NB: no #if wxUSE_DISPLAY here, the display geometry part of this class (but -// not the video mode stuff) is always available but if wxUSE_DISPLAY == 0 -// it becomes just a trivial wrapper around the old wxDisplayXXX() functions - -#if wxUSE_DISPLAY - #include "wx/dynarray.h" - #include "wx/vidmode.h" - - WX_DECLARE_EXPORTED_OBJARRAY(wxVideoMode, wxArrayVideoModes); - - // default, uninitialized, video mode object - extern WXDLLEXPORT_DATA(const wxVideoMode) wxDefaultVideoMode; -#endif // wxUSE_DISPLAY - -class WXDLLIMPEXP_FWD_CORE wxWindow; -class WXDLLIMPEXP_FWD_CORE wxPoint; -class WXDLLIMPEXP_FWD_CORE wxRect; -class WXDLLIMPEXP_FWD_BASE wxString; - -class WXDLLIMPEXP_FWD_CORE wxDisplayFactory; -class WXDLLIMPEXP_FWD_CORE wxDisplayImpl; - -// ---------------------------------------------------------------------------- -// wxDisplay: represents a display/monitor attached to the system -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDisplay -{ -public: - // initialize the object containing all information about the given - // display - // - // the displays are numbered from 0 to GetCount() - 1, 0 is always the - // primary display and the only one which is always supported - wxDisplay(unsigned n = 0); - - // dtor is not virtual as this is a concrete class not meant to be derived - // from - ~wxDisplay(); - - - // return the number of available displays, valid parameters to - // wxDisplay ctor are from 0 up to this number - static unsigned GetCount(); - - // find the display where the given point lies, return wxNOT_FOUND if - // it doesn't belong to any display - static int GetFromPoint(const wxPoint& pt); - - // find the display where the given window lies, return wxNOT_FOUND if it - // is not shown at all - static int GetFromWindow(wxWindow *window); - - - // return true if the object was initialized successfully - bool IsOk() const { return m_impl != NULL; } - - // get the full display size - wxRect GetGeometry() const; - - // get the client area of the display, i.e. without taskbars and such - wxRect GetClientArea() const; - - // name may be empty - wxString GetName() const; - - // display 0 is usually the primary display - bool IsPrimary() const; - - -#if wxUSE_DISPLAY - // enumerate all video modes supported by this display matching the given - // one (in the sense of wxVideoMode::Match()) - // - // as any mode matches the default value of the argument and there is - // always at least one video mode supported by display, the returned array - // is only empty for the default value of the argument if this function is - // not supported at all on this platform - wxArrayVideoModes - GetModes(const wxVideoMode& mode = wxDefaultVideoMode) const; - - // get current video mode - wxVideoMode GetCurrentMode() const; - - // change current mode, return true if succeeded, false otherwise - // - // for the default value of the argument restores the video mode to default - bool ChangeMode(const wxVideoMode& mode = wxDefaultVideoMode); - - // restore the default video mode (just a more readable synonym) - void ResetMode() { (void)ChangeMode(); } -#endif // wxUSE_DISPLAY - -private: - // returns the factory used to implement our static methods and create new - // displays - static wxDisplayFactory& Factory(); - - // creates the factory object, called by Factory() when it is called for - // the first time and should return a pointer allocated with new (the - // caller will delete it) - // - // this method must be implemented in platform-specific code if - // wxUSE_DISPLAY == 1 (if it is 0 we provide the stub in common code) - static wxDisplayFactory *CreateFactory(); - - - // the real implementation - wxDisplayImpl *m_impl; - - - DECLARE_NO_COPY_CLASS(wxDisplay) -}; - -#endif // _WX_DISPLAY_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/display_impl.h b/desmume/src/windows/wx/include/wx/display_impl.h deleted file mode 100644 index f79766e03..000000000 --- a/desmume/src/windows/wx/include/wx/display_impl.h +++ /dev/null @@ -1,110 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/display_impl.h -// Purpose: wxDisplayImpl class declaration -// Author: Vadim Zeitlin -// Created: 2006-03-15 -// RCS-ID: $Id: display_impl.h 41548 2006-10-02 05:38:05Z PC $ -// Copyright: (c) 2002-2006 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DISPLAY_IMPL_H_BASE_ -#define _WX_DISPLAY_IMPL_H_BASE_ - -#include "wx/gdicmn.h" // for wxRect - -// ---------------------------------------------------------------------------- -// wxDisplayFactory: allows to create wxDisplay objects -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDisplayFactory -{ -public: - wxDisplayFactory() { } - virtual ~wxDisplayFactory() { } - - // create a new display object - // - // it can return a NULL pointer if the display creation failed - virtual wxDisplayImpl *CreateDisplay(unsigned n) = 0; - - // get the total number of displays - virtual unsigned GetCount() = 0; - - // return the display for the given point or wxNOT_FOUND - virtual int GetFromPoint(const wxPoint& pt) = 0; - - // return the display for the given window or wxNOT_FOUND - // - // the window pointer must not be NULL (i.e. caller should check it) - virtual int GetFromWindow(wxWindow *window); -}; - -// ---------------------------------------------------------------------------- -// wxDisplayImpl: base class for all wxDisplay implementations -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDisplayImpl -{ -public: - // virtual dtor for this base class - virtual ~wxDisplayImpl() { } - - - // return the full area of this display - virtual wxRect GetGeometry() const = 0; - - // return the area of the display available for normal windows - virtual wxRect GetClientArea() const { return GetGeometry(); } - - // return the name (may be empty) - virtual wxString GetName() const = 0; - - // return the index of this display - unsigned GetIndex() const { return m_index; } - - // return true if this is the primary monitor (usually one with index 0) - virtual bool IsPrimary() const { return GetIndex() == 0; } - - -#if wxUSE_DISPLAY - // implements wxDisplay::GetModes() - virtual wxArrayVideoModes GetModes(const wxVideoMode& mode) const = 0; - - // get current video mode - virtual wxVideoMode GetCurrentMode() const = 0; - - // change current mode, return true if succeeded, false otherwise - virtual bool ChangeMode(const wxVideoMode& mode) = 0; -#endif // wxUSE_DISPLAY - -protected: - // create the object providing access to the display with the given index - wxDisplayImpl(unsigned n) : m_index(n) { } - - - // the index of this display (0 is always the primary one) - const unsigned m_index; - - - friend class wxDisplayFactory; - - DECLARE_NO_COPY_CLASS(wxDisplayImpl) -}; - -// ---------------------------------------------------------------------------- -// wxDisplayFactorySingle -// ---------------------------------------------------------------------------- - -// this is a stub implementation using single/main display only, it is -// available even if wxUSE_DISPLAY == 0 -class WXDLLEXPORT wxDisplayFactorySingle : public wxDisplayFactory -{ -public: - virtual wxDisplayImpl *CreateDisplay(unsigned n); - virtual unsigned GetCount() { return 1; } - virtual int GetFromPoint(const wxPoint& pt); -}; - -#endif // _WX_DISPLAY_IMPL_H_BASE_ - diff --git a/desmume/src/windows/wx/include/wx/dlimpexp.h b/desmume/src/windows/wx/include/wx/dlimpexp.h deleted file mode 100644 index c6fc095ce..000000000 --- a/desmume/src/windows/wx/include/wx/dlimpexp.h +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Name: wx/dlimpexp.h - * Purpose: Macros for declaring DLL-imported/exported functions - * Author: Vadim Zeitlin - * Modified by: - * Created: 16.10.2003 (extracted from wx/defs.h) - * RCS-ID: $Id: dlimpexp.h 49563 2007-10-31 20:46:21Z VZ $ - * Copyright: (c) 2003 Vadim Zeitlin - * Licence: wxWindows licence - */ - -/* - This is a C file, not C++ one, do not use C++ comments here! - */ - -#ifndef _WX_DLIMPEXP_H_ -#define _WX_DLIMPEXP_H_ - -#if defined(__WXMSW__) - /* - __declspec works in BC++ 5 and later, Watcom C++ 11.0 and later as well - as VC++ and gcc - */ -# if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__) -# define WXEXPORT __declspec(dllexport) -# define WXIMPORT __declspec(dllimport) -# else /* compiler doesn't support __declspec() */ -# define WXEXPORT -# define WXIMPORT -# endif -#elif defined(__WXPM__) -# if defined (__WATCOMC__) -# define WXEXPORT __declspec(dllexport) - /* - __declspec(dllimport) prepends __imp to imported symbols. We do NOT - want that! - */ -# define WXIMPORT -# elif defined(__EMX__) -# define WXEXPORT -# define WXIMPORT -# elif (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 ))) -# define WXEXPORT _Export -# define WXIMPORT _Export -# endif -#elif defined(__WXMAC__) || defined(__WXCOCOA__) -# ifdef __MWERKS__ -# define WXEXPORT __declspec(export) -# define WXIMPORT __declspec(import) -# endif -#elif defined(__CYGWIN__) -# define WXEXPORT __declspec(dllexport) -# define WXIMPORT __declspec(dllimport) -#endif - -/* for other platforms/compilers we don't anything */ -#ifndef WXEXPORT -# define WXEXPORT -# define WXIMPORT -#endif - -/* - We support building wxWidgets as a set of several libraries but we don't - support arbitrary combinations of libs/DLLs: either we build all of them as - DLLs (in which case WXMAKINGDLL is defined) or none (it isn't). - - However we have a problem because we need separate WXDLLEXPORT versions for - different libraries as, for example, wxString class should be dllexported - when compiled in wxBase and dllimported otherwise, so we do define separate - WXMAKING/USINGDLL_XYZ constants for each component XYZ. - */ -#ifdef WXMAKINGDLL -# if wxUSE_BASE -# define WXMAKINGDLL_BASE -# endif - -# define WXMAKINGDLL_NET -# define WXMAKINGDLL_CORE -# define WXMAKINGDLL_ADV -# define WXMAKINGDLL_QA -# define WXMAKINGDLL_ODBC -# define WXMAKINGDLL_DBGRID -# define WXMAKINGDLL_HTML -# define WXMAKINGDLL_GL -# define WXMAKINGDLL_XML -# define WXMAKINGDLL_XRC -# define WXMAKINGDLL_AUI -# define WXMAKINGDLL_RICHTEXT -# define WXMAKINGDLL_MEDIA -#endif /* WXMAKINGDLL */ - -/* - WXDLLEXPORT maps to export declaration when building the DLL, to import - declaration if using it or to nothing at all if we don't use wxWin as DLL - */ -#ifdef WXMAKINGDLL_BASE -# define WXDLLIMPEXP_BASE WXEXPORT -# define WXDLLIMPEXP_DATA_BASE(type) WXEXPORT type -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_BASE WXIMPORT -# define WXDLLIMPEXP_DATA_BASE(type) WXIMPORT type -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_BASE -# define WXDLLIMPEXP_DATA_BASE(type) type -#endif - -#ifdef WXMAKINGDLL_NET -# define WXDLLIMPEXP_NET WXEXPORT -# define WXDLLIMPEXP_DATA_NET(type) WXEXPORT type -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_NET WXIMPORT -# define WXDLLIMPEXP_DATA_NET(type) WXIMPORT type -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_NET -# define WXDLLIMPEXP_DATA_NET(type) type -#endif - -#ifdef WXMAKINGDLL_CORE -# define WXDLLIMPEXP_CORE WXEXPORT -# define WXDLLIMPEXP_DATA_CORE(type) WXEXPORT type -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_CORE WXIMPORT -# define WXDLLIMPEXP_DATA_CORE(type) WXIMPORT type -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_CORE -# define WXDLLIMPEXP_DATA_CORE(type) type -#endif - -#ifdef WXMAKINGDLL_ADV -# define WXDLLIMPEXP_ADV WXEXPORT -# define WXDLLIMPEXP_DATA_ADV(type) WXEXPORT type -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_ADV WXIMPORT -# define WXDLLIMPEXP_DATA_ADV(type) WXIMPORT type -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_ADV -# define WXDLLIMPEXP_DATA_ADV(type) type -#endif - -#ifdef WXMAKINGDLL_ODBC -# define WXDLLIMPEXP_ODBC WXEXPORT -# define WXDLLIMPEXP_DATA_ODBC(type) WXEXPORT type -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_ODBC WXIMPORT -# define WXDLLIMPEXP_DATA_ODBC(type) WXIMPORT type -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_ODBC -# define WXDLLIMPEXP_DATA_ODBC(type) type -#endif - -#ifdef WXMAKINGDLL_QA -# define WXDLLIMPEXP_QA WXEXPORT -# define WXDLLIMPEXP_DATA_QA(type) WXEXPORT type -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_QA WXIMPORT -# define WXDLLIMPEXP_DATA_QA(type) WXIMPORT type -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_QA -# define WXDLLIMPEXP_DATA_QA(type) type -#endif - -#ifdef WXMAKINGDLL_DBGRID -# define WXDLLIMPEXP_DBGRID WXEXPORT -# define WXDLLIMPEXP_DATA_DBGRID(type) WXEXPORT type -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_DBGRID WXIMPORT -# define WXDLLIMPEXP_DATA_DBGRID(type) WXIMPORT type -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_DBGRID -# define WXDLLIMPEXP_DATA_DBGRID(type) type -#endif - -#ifdef WXMAKINGDLL_HTML -# define WXDLLIMPEXP_HTML WXEXPORT -# define WXDLLIMPEXP_DATA_HTML(type) WXEXPORT type -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_HTML WXIMPORT -# define WXDLLIMPEXP_DATA_HTML(type) WXIMPORT type -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_HTML -# define WXDLLIMPEXP_DATA_HTML(type) type -#endif - -#ifdef WXMAKINGDLL_GL -# define WXDLLIMPEXP_GL WXEXPORT -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_GL WXIMPORT -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_GL -#endif - -#ifdef WXMAKINGDLL_XML -# define WXDLLIMPEXP_XML WXEXPORT -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_XML WXIMPORT -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_XML -#endif - -#ifdef WXMAKINGDLL_XRC -# define WXDLLIMPEXP_XRC WXEXPORT -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_XRC WXIMPORT -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_XRC -#endif - -#ifdef WXMAKINGDLL_AUI -# define WXDLLIMPEXP_AUI WXEXPORT -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_AUI WXIMPORT -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_AUI -#endif - -#ifdef WXMAKINGDLL_RICHTEXT -# define WXDLLIMPEXP_RICHTEXT WXEXPORT -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_RICHTEXT WXIMPORT -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_RICHTEXT -#endif - -#ifdef WXMAKINGDLL_MEDIA -# define WXDLLIMPEXP_MEDIA WXEXPORT -#elif defined(WXUSINGDLL) -# define WXDLLIMPEXP_MEDIA WXIMPORT -#else /* not making nor using DLL */ -# define WXDLLIMPEXP_MEDIA -#endif - -/* for backwards compatibility, define suffix-less versions too */ -#define WXDLLEXPORT WXDLLIMPEXP_CORE -#define WXDLLEXPORT_DATA WXDLLIMPEXP_DATA_CORE - -/* wx-2.9 introduces new macros for forward declarations, include them - * here for forward compatibility: - - GCC warns about using __attribute__ (and also __declspec in mingw32 case) on - forward declarations while MSVC complains about forward declarations without - __declspec for the classes later declared with it, so we need a separate set - of macros for forward declarations to hide this difference: - */ -#if defined(__WINDOWS__) && defined(__GNUC__) - #define WXDLLIMPEXP_FWD_BASE - #define WXDLLIMPEXP_FWD_NET - #define WXDLLIMPEXP_FWD_CORE - #define WXDLLIMPEXP_FWD_ADV - #define WXDLLIMPEXP_FWD_QA - #define WXDLLIMPEXP_FWD_HTML - #define WXDLLIMPEXP_FWD_GL - #define WXDLLIMPEXP_FWD_XML - #define WXDLLIMPEXP_FWD_XRC - #define WXDLLIMPEXP_FWD_AUI - #define WXDLLIMPEXP_FWD_RICHTEXT - #define WXDLLIMPEXP_FWD_MEDIA - #define WXDLLIMPEXP_FWD_STC -#else - #define WXDLLIMPEXP_FWD_BASE WXDLLIMPEXP_BASE - #define WXDLLIMPEXP_FWD_NET WXDLLIMPEXP_NET - #define WXDLLIMPEXP_FWD_CORE WXDLLIMPEXP_CORE - #define WXDLLIMPEXP_FWD_ADV WXDLLIMPEXP_ADV - #define WXDLLIMPEXP_FWD_QA WXDLLIMPEXP_QA - #define WXDLLIMPEXP_FWD_HTML WXDLLIMPEXP_HTML - #define WXDLLIMPEXP_FWD_GL WXDLLIMPEXP_GL - #define WXDLLIMPEXP_FWD_XML WXDLLIMPEXP_XML - #define WXDLLIMPEXP_FWD_XRC WXDLLIMPEXP_XRC - #define WXDLLIMPEXP_FWD_AUI WXDLLIMPEXP_AUI - #define WXDLLIMPEXP_FWD_RICHTEXT WXDLLIMPEXP_RICHTEXT - #define WXDLLIMPEXP_FWD_MEDIA WXDLLIMPEXP_MEDIA - #define WXDLLIMPEXP_FWD_STC WXDLLIMPEXP_STC -#endif - -#endif /* _WX_DLIMPEXP_H_ */ - diff --git a/desmume/src/windows/wx/include/wx/dnd.h b/desmume/src/windows/wx/include/wx/dnd.h deleted file mode 100644 index 2eab71e65..000000000 --- a/desmume/src/windows/wx/include/wx/dnd.h +++ /dev/null @@ -1,267 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/dnd.h -// Purpose: Drag and drop classes declarations -// Author: Vadim Zeitlin, Robert Roebling -// Modified by: -// Created: 26.05.99 -// RCS-ID: $Id: dnd.h 43636 2006-11-25 14:08:27Z VZ $ -// Copyright: (c) wxWidgets Team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DND_H_BASE_ -#define _WX_DND_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_DRAG_AND_DROP - -#include "wx/dataobj.h" -#include "wx/cursor.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// flags for wxDropSource::DoDragDrop() -// -// NB: wxDrag_CopyOnly must be 0 (== FALSE) and wxDrag_AllowMove must be 1 -// (== TRUE) for compatibility with the old DoDragDrop(bool) method! -enum -{ - wxDrag_CopyOnly = 0, // allow only copying - wxDrag_AllowMove = 1, // allow moving (copying is always allowed) - wxDrag_DefaultMove = 3 // the default operation is move, not copy -}; - -// result of wxDropSource::DoDragDrop() call -enum wxDragResult -{ - wxDragError, // error prevented the d&d operation from completing - wxDragNone, // drag target didn't accept the data - wxDragCopy, // the data was successfully copied - wxDragMove, // the data was successfully moved (MSW only) - wxDragLink, // operation is a drag-link - wxDragCancel // the operation was cancelled by user (not an error) -}; - -// return true if res indicates that something was done during a dnd operation, -// i.e. is neither error nor none nor cancel -WXDLLEXPORT bool wxIsDragResultOk(wxDragResult res); - -// ---------------------------------------------------------------------------- -// wxDropSource is the object you need to create (and call DoDragDrop on it) -// to initiate a drag-and-drop operation -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDropSourceBase -{ -public: - wxDropSourceBase(const wxCursor &cursorCopy = wxNullCursor, - const wxCursor &cursorMove = wxNullCursor, - const wxCursor &cursorStop = wxNullCursor) - : m_cursorCopy(cursorCopy), - m_cursorMove(cursorMove), - m_cursorStop(cursorStop) - { m_data = (wxDataObject *)NULL; } - virtual ~wxDropSourceBase() { } - - // set the data which is transfered by drag and drop - void SetData(wxDataObject& data) - { m_data = &data; } - - wxDataObject *GetDataObject() - { return m_data; } - - // set the icon corresponding to given drag result - void SetCursor(wxDragResult res, const wxCursor& cursor) - { - if ( res == wxDragCopy ) - m_cursorCopy = cursor; - else if ( res == wxDragMove ) - m_cursorMove = cursor; - else - m_cursorStop = cursor; - } - - // start drag action, see enum wxDragResult for return value description - // - // if flags contains wxDrag_AllowMove, moving (and only copying) data is - // allowed, if it contains wxDrag_DefaultMove (which includes the previous - // flag), it is even the default operation - virtual wxDragResult DoDragDrop(int flags = wxDrag_CopyOnly) = 0; - - // override to give feedback depending on the current operation result - // "effect" and return true if you did something, false to let the library - // give the default feedback - virtual bool GiveFeedback(wxDragResult WXUNUSED(effect)) { return false; } - -protected: - const wxCursor& GetCursor(wxDragResult res) const - { - if ( res == wxDragCopy ) - return m_cursorCopy; - else if ( res == wxDragMove ) - return m_cursorMove; - else - return m_cursorStop; - } - - // the data we're dragging - wxDataObject *m_data; - - // the cursors to use for feedback - wxCursor m_cursorCopy, - m_cursorMove, - m_cursorStop; - - DECLARE_NO_COPY_CLASS(wxDropSourceBase) -}; - -// ---------------------------------------------------------------------------- -// wxDropTarget should be associated with a window if it wants to be able to -// receive data via drag and drop. -// -// To use this class, you should derive from wxDropTarget and implement -// OnData() pure virtual method. You may also wish to override OnDrop() if you -// want to accept the data only inside some region of the window (this may -// avoid having to copy the data to this application which happens only when -// OnData() is called) -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDropTargetBase -{ -public: - // ctor takes a pointer to heap-allocated wxDataObject which will be owned - // by wxDropTarget and deleted by it automatically. If you don't give it - // here, you can use SetDataObject() later. - wxDropTargetBase(wxDataObject *dataObject = (wxDataObject*)NULL) - { m_dataObject = dataObject; m_defaultAction = wxDragNone; } - // dtor deletes our data object - virtual ~wxDropTargetBase() - { delete m_dataObject; } - - // get/set the associated wxDataObject - wxDataObject *GetDataObject() const - { return m_dataObject; } - void SetDataObject(wxDataObject *dataObject) - { if (m_dataObject) delete m_dataObject; - m_dataObject = dataObject; } - - // these functions are called when data is moved over position (x, y) and - // may return either wxDragCopy, wxDragMove or wxDragNone depending on - // what would happen if the data were dropped here. - // - // the last parameter is what would happen by default and is determined by - // the platform-specific logic (for example, under Windows it's wxDragCopy - // if Ctrl key is pressed and wxDragMove otherwise) except that it will - // always be wxDragNone if the carried data is in an unsupported format. - - // called when the mouse enters the window (only once until OnLeave()) - virtual wxDragResult OnEnter(wxCoord x, wxCoord y, wxDragResult def) - { return OnDragOver(x, y, def); } - - // called when the mouse moves in the window - shouldn't take long to - // execute or otherwise mouse movement would be too slow - virtual wxDragResult OnDragOver(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), - wxDragResult def) - { return def; } - - // called when mouse leaves the window: might be used to remove the - // feedback which was given in OnEnter() - virtual void OnLeave() { } - - // this function is called when data is dropped at position (x, y) - if it - // returns true, OnData() will be called immediately afterwards which will - // allow to retrieve the data dropped. - virtual bool OnDrop(wxCoord x, wxCoord y) = 0; - - // called after OnDrop() returns TRUE: you will usually just call - // GetData() from here and, probably, also refresh something to update the - // new data and, finally, return the code indicating how did the operation - // complete (returning default value in case of success and wxDragError on - // failure is usually ok) - virtual wxDragResult OnData(wxCoord x, wxCoord y, wxDragResult def) = 0; - - // may be called *only* from inside OnData() and will fill m_dataObject - // with the data from the drop source if it returns true - virtual bool GetData() = 0; - - // sets the default action for drag and drop: - // use wxDragMove or wxDragCopy to set deafult action to move or copy - // and use wxDragNone (default) to set default action specified by - // initialization of draging (see wxDropSourceBase::DoDragDrop()) - void SetDefaultAction(wxDragResult action) - { m_defaultAction = action; } - - // returns default action for drag and drop or - // wxDragNone if this not specified - wxDragResult GetDefaultAction() - { return m_defaultAction; } - -protected: - wxDataObject *m_dataObject; - wxDragResult m_defaultAction; - - DECLARE_NO_COPY_CLASS(wxDropTargetBase) -}; - -// ---------------------------------------------------------------------------- -// include platform dependent class declarations -// ---------------------------------------------------------------------------- - -#if defined(__WXMSW__) - #include "wx/msw/ole/dropsrc.h" - #include "wx/msw/ole/droptgt.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/dnd.h" -#elif defined(__WXX11__) - #include "wx/x11/dnd.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/dnd.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/dnd.h" -#elif defined(__WXMAC__) - #include "wx/mac/dnd.h" -#elif defined(__WXPM__) - #include "wx/os2/dnd.h" -#endif - -// ---------------------------------------------------------------------------- -// standard wxDropTarget implementations (implemented in common/dobjcmn.cpp) -// ---------------------------------------------------------------------------- - -// A simple wxDropTarget derived class for text data: you only need to -// override OnDropText() to get something working -class WXDLLEXPORT wxTextDropTarget : public wxDropTarget -{ -public: - wxTextDropTarget(); - - virtual bool OnDropText(wxCoord x, wxCoord y, const wxString& text) = 0; - - virtual wxDragResult OnData(wxCoord x, wxCoord y, wxDragResult def); - -private: - DECLARE_NO_COPY_CLASS(wxTextDropTarget) -}; - -// A drop target which accepts files (dragged from File Manager or Explorer) -class WXDLLEXPORT wxFileDropTarget : public wxDropTarget -{ -public: - wxFileDropTarget(); - - // parameters are the number of files and the array of file names - virtual bool OnDropFiles(wxCoord x, wxCoord y, - const wxArrayString& filenames) = 0; - - virtual wxDragResult OnData(wxCoord x, wxCoord y, wxDragResult def); - -private: - DECLARE_NO_COPY_CLASS(wxFileDropTarget) -}; - -#endif // wxUSE_DRAG_AND_DROP - -#endif // _WX_DND_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/docmdi.h b/desmume/src/windows/wx/include/wx/docmdi.h deleted file mode 100644 index c8ab803c1..000000000 --- a/desmume/src/windows/wx/include/wx/docmdi.h +++ /dev/null @@ -1,107 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: docmdi.h -// Purpose: Frame classes for MDI document/view applications -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: docmdi.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DOCMDI_H_ -#define _WX_DOCMDI_H_ - -#include "wx/defs.h" - -#if wxUSE_MDI_ARCHITECTURE - -#include "wx/docview.h" -#include "wx/mdi.h" - -/* - * Use this instead of wxMDIParentFrame - */ - -class WXDLLEXPORT wxDocMDIParentFrame: public wxMDIParentFrame -{ -public: - wxDocMDIParentFrame(); - wxDocMDIParentFrame(wxDocManager *manager, wxFrame *parent, wxWindowID id, - const wxString& title, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxT("frame")); - - bool Create(wxDocManager *manager, wxFrame *parent, wxWindowID id, - const wxString& title, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxT("frame")); - - // Extend event processing to search the document manager's event table - virtual bool ProcessEvent(wxEvent& event); - - wxDocManager *GetDocumentManager(void) const { return m_docManager; } - - void OnExit(wxCommandEvent& event); - void OnMRUFile(wxCommandEvent& event); - void OnCloseWindow(wxCloseEvent& event); - -protected: - void Init(); - wxDocManager *m_docManager; - -private: - DECLARE_CLASS(wxDocMDIParentFrame) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxDocMDIParentFrame) -}; - -/* - * Use this instead of wxMDIChildFrame - */ - -class WXDLLEXPORT wxDocMDIChildFrame: public wxMDIChildFrame -{ -public: - wxDocMDIChildFrame(); - wxDocMDIChildFrame(wxDocument *doc, wxView *view, wxMDIParentFrame *frame, wxWindowID id, - const wxString& title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long type = wxDEFAULT_FRAME_STYLE, const wxString& name = wxT("frame")); - virtual ~wxDocMDIChildFrame(); - - bool Create(wxDocument *doc, - wxView *view, - wxMDIParentFrame *frame, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long type = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr); - - // Extend event processing to search the view's event table - virtual bool ProcessEvent(wxEvent& event); - - void OnActivate(wxActivateEvent& event); - void OnCloseWindow(wxCloseEvent& event); - - inline wxDocument *GetDocument() const { return m_childDocument; } - inline wxView *GetView(void) const { return m_childView; } - inline void SetDocument(wxDocument *doc) { m_childDocument = doc; } - inline void SetView(wxView *view) { m_childView = view; } - bool Destroy() { m_childView = (wxView *)NULL; return wxMDIChildFrame::Destroy(); } - -protected: - void Init(); - wxDocument* m_childDocument; - wxView* m_childView; - -private: - DECLARE_EVENT_TABLE() - DECLARE_CLASS(wxDocMDIChildFrame) - DECLARE_NO_COPY_CLASS(wxDocMDIChildFrame) -}; - -#endif - // wxUSE_MDI_ARCHITECTURE - -#endif - // _WX_DOCMDI_H_ diff --git a/desmume/src/windows/wx/include/wx/docview.h b/desmume/src/windows/wx/include/wx/docview.h deleted file mode 100644 index 60ed15907..000000000 --- a/desmume/src/windows/wx/include/wx/docview.h +++ /dev/null @@ -1,675 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/docview.h -// Purpose: Doc/View classes -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: docview.h 53546 2008-05-10 21:02:36Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DOCH__ -#define _WX_DOCH__ - -#include "wx/defs.h" - -#if wxUSE_DOC_VIEW_ARCHITECTURE - -#include "wx/list.h" -#include "wx/string.h" -#include "wx/frame.h" - -#if wxUSE_PRINTING_ARCHITECTURE - #include "wx/print.h" -#endif - -class WXDLLIMPEXP_FWD_CORE wxWindow; -class WXDLLIMPEXP_FWD_CORE wxDocument; -class WXDLLIMPEXP_FWD_CORE wxView; -class WXDLLIMPEXP_FWD_CORE wxDocTemplate; -class WXDLLIMPEXP_FWD_CORE wxDocManager; -class WXDLLIMPEXP_FWD_CORE wxPrintInfo; -class WXDLLIMPEXP_FWD_CORE wxCommandProcessor; -class WXDLLIMPEXP_FWD_CORE wxFileHistory; -class WXDLLIMPEXP_FWD_BASE wxConfigBase; - -#if wxUSE_STD_IOSTREAM - #include "wx/iosfwrap.h" -#else - #include "wx/stream.h" -#endif - -// Document manager flags -enum -{ - wxDOC_SDI = 1, - wxDOC_MDI, - wxDOC_NEW, - wxDOC_SILENT, - wxDEFAULT_DOCMAN_FLAGS = wxDOC_SDI -}; - -// Document template flags -enum -{ - wxTEMPLATE_VISIBLE = 1, - wxTEMPLATE_INVISIBLE, - wxDEFAULT_TEMPLATE_FLAGS = wxTEMPLATE_VISIBLE -}; - -#define wxMAX_FILE_HISTORY 9 - -class WXDLLEXPORT wxDocument : public wxEvtHandler -{ -public: - wxDocument(wxDocument *parent = (wxDocument *) NULL); - virtual ~wxDocument(); - - // accessors - void SetFilename(const wxString& filename, bool notifyViews = false); - wxString GetFilename() const { return m_documentFile; } - - void SetTitle(const wxString& title) { m_documentTitle = title; } - wxString GetTitle() const { return m_documentTitle; } - - void SetDocumentName(const wxString& name) { m_documentTypeName = name; } - wxString GetDocumentName() const { return m_documentTypeName; } - - bool GetDocumentSaved() const { return m_savedYet; } - void SetDocumentSaved(bool saved = true) { m_savedYet = saved; } - - virtual bool Close(); - virtual bool Save(); - virtual bool SaveAs(); - virtual bool Revert(); - -#if wxUSE_STD_IOSTREAM - virtual wxSTD ostream& SaveObject(wxSTD ostream& stream); - virtual wxSTD istream& LoadObject(wxSTD istream& stream); -#else - virtual wxOutputStream& SaveObject(wxOutputStream& stream); - virtual wxInputStream& LoadObject(wxInputStream& stream); -#endif - - // Called by wxWidgets - virtual bool OnSaveDocument(const wxString& filename); - virtual bool OnOpenDocument(const wxString& filename); - virtual bool OnNewDocument(); - virtual bool OnCloseDocument(); - - // Prompts for saving if about to close a modified document. Returns true - // if ok to close the document (may have saved in the meantime, or set - // modified to false) - virtual bool OnSaveModified(); - - // Called by framework if created automatically by the default document - // manager: gives document a chance to initialise and (usually) create a - // view - virtual bool OnCreate(const wxString& path, long flags); - - // By default, creates a base wxCommandProcessor. - virtual wxCommandProcessor *OnCreateCommandProcessor(); - virtual wxCommandProcessor *GetCommandProcessor() const { return m_commandProcessor; } - virtual void SetCommandProcessor(wxCommandProcessor *proc) { m_commandProcessor = proc; } - - // Called after a view is added or removed. The default implementation - // deletes the document if this is there are no more views. - virtual void OnChangedViewList(); - - virtual bool DeleteContents(); - - virtual bool Draw(wxDC&); - virtual bool IsModified() const { return m_documentModified; } - virtual void Modify(bool mod) { m_documentModified = mod; } - - virtual bool AddView(wxView *view); - virtual bool RemoveView(wxView *view); - wxList& GetViews() { return m_documentViews; } - const wxList& GetViews() const { return m_documentViews; } - wxView *GetFirstView() const; - - virtual void UpdateAllViews(wxView *sender = (wxView *) NULL, wxObject *hint = (wxObject *) NULL); - virtual void NotifyClosing(); - - // Remove all views (because we're closing the document) - virtual bool DeleteAllViews(); - - // Other stuff - virtual wxDocManager *GetDocumentManager() const; - virtual wxDocTemplate *GetDocumentTemplate() const { return m_documentTemplate; } - virtual void SetDocumentTemplate(wxDocTemplate *temp) { m_documentTemplate = temp; } - - // Get title, or filename if no title, else [unnamed] - // - // NB: this method will be deprecated in wxWidgets 3.0, you still need to - // override it if you need to modify the existing behaviour in this - // version but use GetUserReadableName() below if you just need to call - // it - virtual bool GetPrintableName(wxString& buf) const; - -#if wxABI_VERSION >= 20805 - wxString GetUserReadableName() const - { - wxString s; - GetPrintableName(s); - return s; - } -#endif // wxABI 2.8.5+ - - // Returns a window that can be used as a parent for document-related - // dialogs. Override if necessary. - virtual wxWindow *GetDocumentWindow() const; - -protected: - wxList m_documentViews; - wxString m_documentFile; - wxString m_documentTitle; - wxString m_documentTypeName; - wxDocTemplate* m_documentTemplate; - bool m_documentModified; - wxDocument* m_documentParent; - wxCommandProcessor* m_commandProcessor; - bool m_savedYet; - - // Called by OnSaveDocument and OnOpenDocument to implement standard - // Save/Load behavior. Re-implement in derived class for custom - // behavior. - virtual bool DoSaveDocument(const wxString& file); - virtual bool DoOpenDocument(const wxString& file); - -private: - DECLARE_ABSTRACT_CLASS(wxDocument) - DECLARE_NO_COPY_CLASS(wxDocument) -}; - -class WXDLLEXPORT wxView: public wxEvtHandler -{ -public: - // wxView(wxDocument *doc = (wxDocument *) NULL); - wxView(); - virtual ~wxView(); - - wxDocument *GetDocument() const { return m_viewDocument; } - virtual void SetDocument(wxDocument *doc); - - wxString GetViewName() const { return m_viewTypeName; } - void SetViewName(const wxString& name) { m_viewTypeName = name; } - - wxWindow *GetFrame() const { return m_viewFrame ; } - void SetFrame(wxWindow *frame) { m_viewFrame = frame; } - - virtual void OnActivateView(bool activate, wxView *activeView, wxView *deactiveView); - virtual void OnDraw(wxDC *dc) = 0; - virtual void OnPrint(wxDC *dc, wxObject *info); - virtual void OnUpdate(wxView *sender, wxObject *hint = (wxObject *) NULL); - virtual void OnClosingDocument() {} - virtual void OnChangeFilename(); - - // Called by framework if created automatically by the default document - // manager class: gives view a chance to initialise - virtual bool OnCreate(wxDocument *WXUNUSED(doc), long WXUNUSED(flags)) { return true; } - - // Checks if the view is the last one for the document; if so, asks user - // to confirm save data (if modified). If ok, deletes itself and returns - // true. - virtual bool Close(bool deleteWindow = true); - - // Override to do cleanup/veto close - virtual bool OnClose(bool deleteWindow); - - // Extend event processing to search the document's event table - virtual bool ProcessEvent(wxEvent& event); - - // A view's window can call this to notify the view it is (in)active. - // The function then notifies the document manager. - virtual void Activate(bool activate); - - wxDocManager *GetDocumentManager() const - { return m_viewDocument->GetDocumentManager(); } - -#if wxUSE_PRINTING_ARCHITECTURE - virtual wxPrintout *OnCreatePrintout(); -#endif - -protected: - wxDocument* m_viewDocument; - wxString m_viewTypeName; - wxWindow* m_viewFrame; - -private: - DECLARE_ABSTRACT_CLASS(wxView) - DECLARE_NO_COPY_CLASS(wxView) -}; - -// Represents user interface (and other) properties of documents and views -class WXDLLEXPORT wxDocTemplate: public wxObject -{ - -friend class WXDLLIMPEXP_FWD_CORE wxDocManager; - -public: - // Associate document and view types. They're for identifying what view is - // associated with what template/document type - wxDocTemplate(wxDocManager *manager, - const wxString& descr, - const wxString& filter, - const wxString& dir, - const wxString& ext, - const wxString& docTypeName, - const wxString& viewTypeName, - wxClassInfo *docClassInfo = (wxClassInfo *) NULL, - wxClassInfo *viewClassInfo = (wxClassInfo *)NULL, - long flags = wxDEFAULT_TEMPLATE_FLAGS); - - virtual ~wxDocTemplate(); - - // By default, these two member functions dynamically creates document and - // view using dynamic instance construction. Override these if you need a - // different method of construction. - virtual wxDocument *CreateDocument(const wxString& path, long flags = 0); - virtual wxView *CreateView(wxDocument *doc, long flags = 0); - - // Helper method for CreateDocument; also allows you to do your own document - // creation - virtual bool InitDocument(wxDocument* doc, const wxString& path, long flags = 0); - - wxString GetDefaultExtension() const { return m_defaultExt; } - wxString GetDescription() const { return m_description; } - wxString GetDirectory() const { return m_directory; } - wxDocManager *GetDocumentManager() const { return m_documentManager; } - void SetDocumentManager(wxDocManager *manager) { m_documentManager = manager; } - wxString GetFileFilter() const { return m_fileFilter; } - long GetFlags() const { return m_flags; } - virtual wxString GetViewName() const { return m_viewTypeName; } - virtual wxString GetDocumentName() const { return m_docTypeName; } - - void SetFileFilter(const wxString& filter) { m_fileFilter = filter; } - void SetDirectory(const wxString& dir) { m_directory = dir; } - void SetDescription(const wxString& descr) { m_description = descr; } - void SetDefaultExtension(const wxString& ext) { m_defaultExt = ext; } - void SetFlags(long flags) { m_flags = flags; } - - bool IsVisible() const { return ((m_flags & wxTEMPLATE_VISIBLE) == wxTEMPLATE_VISIBLE); } - - wxClassInfo* GetDocClassInfo() const { return m_docClassInfo; } - wxClassInfo* GetViewClassInfo() const { return m_viewClassInfo; } - - virtual bool FileMatchesTemplate(const wxString& path); - -protected: - long m_flags; - wxString m_fileFilter; - wxString m_directory; - wxString m_description; - wxString m_defaultExt; - wxString m_docTypeName; - wxString m_viewTypeName; - wxDocManager* m_documentManager; - - // For dynamic creation of appropriate instances. - wxClassInfo* m_docClassInfo; - wxClassInfo* m_viewClassInfo; - - // Called by CreateDocument and CreateView to create the actual document/view object. - // By default uses the ClassInfo provided to the constructor. Override these functions - // to provide a different method of creation. - virtual wxDocument *DoCreateDocument(); - virtual wxView *DoCreateView(); - -private: - DECLARE_CLASS(wxDocTemplate) - DECLARE_NO_COPY_CLASS(wxDocTemplate) -}; - -// One object of this class may be created in an application, to manage all -// the templates and documents. -class WXDLLEXPORT wxDocManager: public wxEvtHandler -{ -public: - wxDocManager(long flags = wxDEFAULT_DOCMAN_FLAGS, bool initialize = true); - virtual ~wxDocManager(); - - virtual bool Initialize(); - - // Handlers for common user commands - void OnFileClose(wxCommandEvent& event); - void OnFileCloseAll(wxCommandEvent& event); - void OnFileNew(wxCommandEvent& event); - void OnFileOpen(wxCommandEvent& event); - void OnFileRevert(wxCommandEvent& event); - void OnFileSave(wxCommandEvent& event); - void OnFileSaveAs(wxCommandEvent& event); - void OnPrint(wxCommandEvent& event); - void OnPreview(wxCommandEvent& event); - void OnUndo(wxCommandEvent& event); - void OnRedo(wxCommandEvent& event); - - // Handlers for UI update commands - void OnUpdateFileOpen(wxUpdateUIEvent& event); - void OnUpdateFileClose(wxUpdateUIEvent& event); - void OnUpdateFileRevert(wxUpdateUIEvent& event); - void OnUpdateFileNew(wxUpdateUIEvent& event); - void OnUpdateFileSave(wxUpdateUIEvent& event); - void OnUpdateFileSaveAs(wxUpdateUIEvent& event); - void OnUpdateUndo(wxUpdateUIEvent& event); - void OnUpdateRedo(wxUpdateUIEvent& event); - - void OnUpdatePrint(wxUpdateUIEvent& event); - void OnUpdatePreview(wxUpdateUIEvent& event); - - // Extend event processing to search the view's event table - virtual bool ProcessEvent(wxEvent& event); - - // called when file format detection didn't work, can be overridden to do - // something in this case - virtual void OnOpenFileFailure() { } - - virtual wxDocument *CreateDocument(const wxString& path, long flags = 0); - virtual wxView *CreateView(wxDocument *doc, long flags = 0); - virtual void DeleteTemplate(wxDocTemplate *temp, long flags = 0); - virtual bool FlushDoc(wxDocument *doc); - virtual wxDocTemplate *MatchTemplate(const wxString& path); - virtual wxDocTemplate *SelectDocumentPath(wxDocTemplate **templates, - int noTemplates, wxString& path, long flags, bool save = false); - virtual wxDocTemplate *SelectDocumentType(wxDocTemplate **templates, - int noTemplates, bool sort = false); - virtual wxDocTemplate *SelectViewType(wxDocTemplate **templates, - int noTemplates, bool sort = false); - virtual wxDocTemplate *FindTemplateForPath(const wxString& path); - - void AssociateTemplate(wxDocTemplate *temp); - void DisassociateTemplate(wxDocTemplate *temp); - - wxDocument *GetCurrentDocument() const; - - void SetMaxDocsOpen(int n) { m_maxDocsOpen = n; } - int GetMaxDocsOpen() const { return m_maxDocsOpen; } - - // Add and remove a document from the manager's list - void AddDocument(wxDocument *doc); - void RemoveDocument(wxDocument *doc); - - // closes all currently open documents - bool CloseDocuments(bool force = true); - - // closes the specified document - bool CloseDocument(wxDocument* doc, bool force = false); - - // Clear remaining documents and templates - bool Clear(bool force = true); - - // Views or windows should inform the document manager - // when a view is going in or out of focus - virtual void ActivateView(wxView *view, bool activate = true); - virtual wxView *GetCurrentView() const; - - wxList& GetDocuments() { return m_docs; } - wxList& GetTemplates() { return m_templates; } - - // Make a default document name - // - // NB: this method is renamed to MakeNewDocumentName() in wx 3.0, you still - // need to override it if your code needs to customize the default name - // generation but if you just use it from your code, prefer the version - // below which is forward-compatible with wx 3.0 - virtual bool MakeDefaultName(wxString& buf); - -#if wxABI_VERSION >= 20808 - wxString MakeNewDocumentName() const - { - wxString s; - wx_const_cast(wxDocManager *, this)->MakeDefaultName(s); - return s; - } -#endif // wx ABI >= 2.8.8 - - // Make a frame title (override this to do something different) - virtual wxString MakeFrameTitle(wxDocument* doc); - - virtual wxFileHistory *OnCreateFileHistory(); - virtual wxFileHistory *GetFileHistory() const { return m_fileHistory; } - - // File history management - virtual void AddFileToHistory(const wxString& file); - virtual void RemoveFileFromHistory(size_t i); - virtual size_t GetHistoryFilesCount() const; - virtual wxString GetHistoryFile(size_t i) const; - virtual void FileHistoryUseMenu(wxMenu *menu); - virtual void FileHistoryRemoveMenu(wxMenu *menu); -#if wxUSE_CONFIG - virtual void FileHistoryLoad(wxConfigBase& config); - virtual void FileHistorySave(wxConfigBase& config); -#endif // wxUSE_CONFIG - - virtual void FileHistoryAddFilesToMenu(); - virtual void FileHistoryAddFilesToMenu(wxMenu* menu); - - wxString GetLastDirectory() const { return m_lastDirectory; } - void SetLastDirectory(const wxString& dir) { m_lastDirectory = dir; } - - // Get the current document manager - static wxDocManager* GetDocumentManager() { return sm_docManager; } - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, use GetHistoryFilesCount() instead - wxDEPRECATED( size_t GetNoHistoryFiles() const ); -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - long m_flags; - int m_defaultDocumentNameCounter; - int m_maxDocsOpen; - wxList m_docs; - wxList m_templates; - wxView* m_currentView; - wxFileHistory* m_fileHistory; - wxString m_lastDirectory; - static wxDocManager* sm_docManager; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxDocManager) - DECLARE_NO_COPY_CLASS(wxDocManager) -}; - -#if WXWIN_COMPATIBILITY_2_6 -inline size_t wxDocManager::GetNoHistoryFiles() const -{ - return GetHistoryFilesCount(); -} -#endif // WXWIN_COMPATIBILITY_2_6 - -// ---------------------------------------------------------------------------- -// A default child frame -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDocChildFrame : public wxFrame -{ -public: - wxDocChildFrame(wxDocument *doc, - wxView *view, - wxFrame *frame, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long type = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxT("frame")); - virtual ~wxDocChildFrame(){} - - // Extend event processing to search the view's event table - virtual bool ProcessEvent(wxEvent& event); - - void OnActivate(wxActivateEvent& event); - void OnCloseWindow(wxCloseEvent& event); - - wxDocument *GetDocument() const { return m_childDocument; } - wxView *GetView() const { return m_childView; } - void SetDocument(wxDocument *doc) { m_childDocument = doc; } - void SetView(wxView *view) { m_childView = view; } - bool Destroy() { m_childView = (wxView *)NULL; return wxFrame::Destroy(); } - -protected: - wxDocument* m_childDocument; - wxView* m_childView; - -private: - DECLARE_CLASS(wxDocChildFrame) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxDocChildFrame) -}; - -// ---------------------------------------------------------------------------- -// A default parent frame -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDocParentFrame : public wxFrame -{ -public: - wxDocParentFrame(); - wxDocParentFrame(wxDocManager *manager, - wxFrame *frame, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr); - - bool Create(wxDocManager *manager, - wxFrame *frame, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr); - - // Extend event processing to search the document manager's event table - virtual bool ProcessEvent(wxEvent& event); - - wxDocManager *GetDocumentManager() const { return m_docManager; } - - void OnExit(wxCommandEvent& event); - void OnMRUFile(wxCommandEvent& event); - void OnCloseWindow(wxCloseEvent& event); - -protected: - wxDocManager *m_docManager; - -private: - typedef wxFrame base_type; - DECLARE_CLASS(wxDocParentFrame) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxDocParentFrame) -}; - -// ---------------------------------------------------------------------------- -// Provide simple default printing facilities -// ---------------------------------------------------------------------------- - -#if wxUSE_PRINTING_ARCHITECTURE -class WXDLLEXPORT wxDocPrintout : public wxPrintout -{ -public: - wxDocPrintout(wxView *view = (wxView *) NULL, const wxString& title = wxT("Printout")); - bool OnPrintPage(int page); - bool HasPage(int page); - bool OnBeginDocument(int startPage, int endPage); - void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo); - - virtual wxView *GetView() { return m_printoutView; } - -protected: - wxView* m_printoutView; - -private: - DECLARE_DYNAMIC_CLASS(wxDocPrintout) - DECLARE_NO_COPY_CLASS(wxDocPrintout) -}; -#endif // wxUSE_PRINTING_ARCHITECTURE - -// ---------------------------------------------------------------------------- -// File history management -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFileHistory : public wxObject -{ -public: - wxFileHistory(size_t maxFiles = 9, wxWindowID idBase = wxID_FILE1); - virtual ~wxFileHistory(); - - // Operations - virtual void AddFileToHistory(const wxString& file); - virtual void RemoveFileFromHistory(size_t i); - virtual int GetMaxFiles() const { return (int)m_fileMaxFiles; } - virtual void UseMenu(wxMenu *menu); - - // Remove menu from the list (MDI child may be closing) - virtual void RemoveMenu(wxMenu *menu); - -#if wxUSE_CONFIG - virtual void Load(wxConfigBase& config); - virtual void Save(wxConfigBase& config); -#endif // wxUSE_CONFIG - - virtual void AddFilesToMenu(); - virtual void AddFilesToMenu(wxMenu* menu); // Single menu - - // Accessors - virtual wxString GetHistoryFile(size_t i) const; - virtual size_t GetCount() const { return m_fileHistoryN; } - - const wxList& GetMenus() const { return m_fileMenus; } - -#if wxABI_VERSION >= 20802 - // Set/get base id - void SetBaseId(wxWindowID baseId) { m_idBase = baseId; } - wxWindowID GetBaseId() const { return m_idBase; } -#endif // wxABI 2.8.2+ - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, use GetCount() instead - wxDEPRECATED( size_t GetNoHistoryFiles() const ); -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - // Last n files - wxChar** m_fileHistory; - // Number of files saved - size_t m_fileHistoryN; - // Menus to maintain (may need several for an MDI app) - wxList m_fileMenus; - // Max files to maintain - size_t m_fileMaxFiles; - -private: - // The ID of the first history menu item (Doesn't have to be wxID_FILE1) - wxWindowID m_idBase; - - DECLARE_DYNAMIC_CLASS(wxFileHistory) - DECLARE_NO_COPY_CLASS(wxFileHistory) -}; - -#if WXWIN_COMPATIBILITY_2_6 -inline size_t wxFileHistory::GetNoHistoryFiles() const -{ - return m_fileHistoryN; -} -#endif // WXWIN_COMPATIBILITY_2_6 - -#if wxUSE_STD_IOSTREAM -// For compatibility with existing file formats: -// converts from/to a stream to/from a temporary file. -bool WXDLLEXPORT wxTransferFileToStream(const wxString& filename, wxSTD ostream& stream); -bool WXDLLEXPORT wxTransferStreamToFile(wxSTD istream& stream, const wxString& filename); -#else -// For compatibility with existing file formats: -// converts from/to a stream to/from a temporary file. -bool WXDLLEXPORT wxTransferFileToStream(const wxString& filename, wxOutputStream& stream); -bool WXDLLEXPORT wxTransferStreamToFile(wxInputStream& stream, const wxString& filename); -#endif // wxUSE_STD_IOSTREAM - -#endif // wxUSE_DOC_VIEW_ARCHITECTURE - -#endif // _WX_DOCH__ diff --git a/desmume/src/windows/wx/include/wx/dragimag.h b/desmume/src/windows/wx/include/wx/dragimag.h deleted file mode 100644 index 279cd5683..000000000 --- a/desmume/src/windows/wx/include/wx/dragimag.h +++ /dev/null @@ -1,54 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dragimag.h -// Purpose: wxDragImage base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: dragimag.h 33948 2005-05-04 18:57:50Z JS $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DRAGIMAG_H_BASE_ -#define _WX_DRAGIMAG_H_BASE_ - -#if wxUSE_DRAGIMAGE - -class WXDLLEXPORT wxRect; -class WXDLLEXPORT wxMemoryDC; -class WXDLLEXPORT wxDC; - -#if defined(__WXMSW__) -# if defined(__WXUNIVERSAL__) -# include "wx/generic/dragimgg.h" -# define wxDragImage wxGenericDragImage -# else -# include "wx/msw/dragimag.h" -# endif - -#elif defined(__WXMOTIF__) -# include "wx/generic/dragimgg.h" -# define wxDragImage wxGenericDragImage - -#elif defined(__WXGTK__) -# include "wx/generic/dragimgg.h" -# define wxDragImage wxGenericDragImage - -#elif defined(__WXX11__) -# include "wx/generic/dragimgg.h" -# define wxDragImage wxGenericDragImage - -#elif defined(__WXMAC__) -# include "wx/generic/dragimgg.h" -# define wxDragImage wxGenericDragImage - -#elif defined(__WXPM__) -# include "wx/generic/dragimgg.h" -# define wxDragImage wxGenericDragImage - -#endif - -#endif // wxUSE_DRAGIMAGE - -#endif - // _WX_DRAGIMAG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/dynarray.h b/desmume/src/windows/wx/include/wx/dynarray.h deleted file mode 100644 index 5dfb8bf26..000000000 --- a/desmume/src/windows/wx/include/wx/dynarray.h +++ /dev/null @@ -1,1044 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/dynarray.h -// Purpose: auto-resizable (i.e. dynamic) array support -// Author: Vadim Zeitlin -// Modified by: -// Created: 12.09.97 -// RCS-ID: $Id: dynarray.h 45498 2007-04-16 13:03:05Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _DYNARRAY_H -#define _DYNARRAY_H - -#include "wx/defs.h" - -#if wxUSE_STL - #include "wx/beforestd.h" - #include - #include - #include "wx/afterstd.h" -#endif - -/* - This header defines the dynamic arrays and object arrays (i.e. arrays which - own their elements). Dynamic means that the arrays grow automatically as - needed. - - These macros are ugly (especially if you look in the sources ;-), but they - allow us to define "template" classes without actually using templates and so - this works with all compilers (and may be also much faster to compile even - with a compiler which does support templates). The arrays defined with these - macros are type-safe. - - Range checking is performed in debug build for both arrays and objarrays but - not in release build - so using an invalid index will just lead to a crash - then. - - Note about memory usage: arrays never shrink automatically (although you may - use Shrink() function explicitly), they only grow, so loading 10 millions in - an array only to delete them 2 lines below might be a bad idea if the array - object is not going to be destroyed soon. However, as it does free memory - when destroyed, it is ok if the array is a local variable. - */ - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -/* - The initial size by which an array grows when an element is added default - value avoids allocate one or two bytes when the array is created which is - rather inefficient -*/ -#define WX_ARRAY_DEFAULT_INITIAL_SIZE (16) - -// ---------------------------------------------------------------------------- -// types -// ---------------------------------------------------------------------------- - -/* - Callback compare function for quick sort. - - It must return negative value, 0 or positive value if the first item is - less than, equal to or greater than the second one. - */ -extern "C" -{ -typedef int (wxCMPFUNC_CONV *CMPFUNC)(const void* pItem1, const void* pItem2); -} - -// ---------------------------------------------------------------------------- -// Base class managing data having size of type 'long' (not used directly) -// -// NB: for efficiency this often used class has no virtual functions (hence no -// virtual table), even dtor is *not* virtual. If used as expected it -// won't create any problems because ARRAYs from DEFINE_ARRAY have no dtor -// at all, so it's not too important if it's not called (this happens when -// you cast "SomeArray *" as "BaseArray *" and then delete it) -// ---------------------------------------------------------------------------- - -#if wxUSE_STL - -template -class WXDLLIMPEXP_BASE wxArray_SortFunction -{ -public: - typedef int (wxCMPFUNC_CONV *CMPFUNC)(T* pItem1, T* pItem2); - - wxArray_SortFunction(CMPFUNC f) : m_f(f) { } - bool operator()(const T& i1, const T& i2) - { return m_f((T*)&i1, (T*)&i2) < 0; } -private: - CMPFUNC m_f; -}; - -template -class WXDLLIMPEXP_BASE wxSortedArray_SortFunction -{ -public: - typedef F CMPFUNC; - - wxSortedArray_SortFunction(CMPFUNC f) : m_f(f) { } - bool operator()(const T& i1, const T& i2) - { return m_f(i1, i2) < 0; } -private: - CMPFUNC m_f; -}; - -#define _WX_DECLARE_BASEARRAY(T, name, classexp) \ - typedef int (wxCMPFUNC_CONV *CMPFUN##name)(T pItem1, T pItem2); \ - typedef wxSortedArray_SortFunction name##_Predicate; \ - _WX_DECLARE_BASEARRAY_2(T, name, name##_Predicate, classexp) - -#define _WX_DECLARE_BASEARRAY_2(T, name, predicate, classexp) \ -classexp name : public std::vector \ -{ \ - typedef predicate Predicate; \ - typedef predicate::CMPFUNC SCMPFUNC; \ -public: \ - typedef wxArray_SortFunction::CMPFUNC CMPFUNC; \ -public: \ - void Empty() { clear(); } \ - void Clear() { clear(); } \ - void Alloc(size_t uiSize) { reserve(uiSize); } \ - void Shrink(); \ - \ - size_t GetCount() const { return size(); } \ - void SetCount(size_t n, T v = T()) { resize(n, v); } \ - bool IsEmpty() const { return empty(); } \ - size_t Count() const { return size(); } \ - \ - typedef T base_type; \ - \ -protected: \ - T& Item(size_t uiIndex) const \ - { wxASSERT( uiIndex < size() ); return (T&)operator[](uiIndex); } \ - \ - int Index(T e, bool bFromEnd = false) const; \ - int Index(T lItem, CMPFUNC fnCompare) const; \ - size_t IndexForInsert(T lItem, CMPFUNC fnCompare) const; \ - void Add(T lItem, size_t nInsert = 1) \ - { insert(end(), nInsert, lItem); } \ - size_t Add(T lItem, CMPFUNC fnCompare); \ - void Insert(T lItem, size_t uiIndex, size_t nInsert = 1) \ - { insert(begin() + uiIndex, nInsert, lItem); } \ - void Remove(T lItem); \ - void RemoveAt(size_t uiIndex, size_t nRemove = 1) \ - { erase(begin() + uiIndex, begin() + uiIndex + nRemove); } \ - \ - void Sort(CMPFUNC fCmp) \ - { \ - wxArray_SortFunction p(fCmp); \ - std::sort(begin(), end(), p); \ - } \ -} - -#else // if !wxUSE_STL - -#define _WX_DECLARE_BASEARRAY(T, name, classexp) \ -classexp name \ -{ \ - typedef CMPFUNC SCMPFUNC; /* for compatibility wuth wxUSE_STL */ \ -public: \ - name(); \ - name(const name& array); \ - name& operator=(const name& src); \ - ~name(); \ - \ - void Empty() { m_nCount = 0; } \ - void Clear(); \ - void Alloc(size_t n) { if ( n > m_nSize ) Realloc(n); } \ - void Shrink(); \ - \ - size_t GetCount() const { return m_nCount; } \ - void SetCount(size_t n, T defval = T()); \ - bool IsEmpty() const { return m_nCount == 0; } \ - size_t Count() const { return m_nCount; } \ - \ - typedef T base_type; \ - \ -protected: \ - T& Item(size_t uiIndex) const \ - { wxASSERT( uiIndex < m_nCount ); return m_pItems[uiIndex]; } \ - T& operator[](size_t uiIndex) const { return Item(uiIndex); } \ - \ - int Index(T lItem, bool bFromEnd = false) const; \ - int Index(T lItem, CMPFUNC fnCompare) const; \ - size_t IndexForInsert(T lItem, CMPFUNC fnCompare) const; \ - void Add(T lItem, size_t nInsert = 1); \ - size_t Add(T lItem, CMPFUNC fnCompare); \ - void Insert(T lItem, size_t uiIndex, size_t nInsert = 1); \ - void Remove(T lItem); \ - void RemoveAt(size_t uiIndex, size_t nRemove = 1); \ - \ - void Sort(CMPFUNC fnCompare); \ - \ - /* *minimal* STL-ish interface, for derived classes */ \ - typedef T value_type; \ - typedef value_type* iterator; \ - typedef const value_type* const_iterator; \ - typedef value_type& reference; \ - typedef const value_type& const_reference; \ - typedef int difference_type; \ - typedef size_t size_type; \ - \ - void assign(const_iterator first, const_iterator last); \ - void assign(size_type n, const_reference v); \ - size_type capacity() const { return m_nSize; } \ - iterator erase(iterator first, iterator last) \ - { \ - size_type idx = first - begin(); \ - RemoveAt(idx, last - first); \ - return begin() + idx; \ - } \ - iterator erase(iterator it) { return erase(it, it + 1); } \ - void insert(iterator it, size_type n, const value_type& v) \ - { Insert(v, it - begin(), n); } \ - iterator insert(iterator it, const value_type& v = value_type()) \ - { \ - size_type idx = it - begin(); \ - Insert(v, idx); \ - return begin() + idx; \ - } \ - void insert(iterator it, const_iterator first, const_iterator last);\ - void pop_back() { RemoveAt(size() - 1); } \ - void push_back(const value_type& v) { Add(v); } \ - void reserve(size_type n) { Alloc(n); } \ - void resize(size_type n, value_type v = value_type()) \ - { SetCount(n, v); } \ - \ - iterator begin() { return m_pItems; } \ - iterator end() { return m_pItems + m_nCount; } \ - const_iterator begin() const { return m_pItems; } \ - const_iterator end() const { return m_pItems + m_nCount; } \ - \ - /* the following functions may be made directly public because */ \ - /* they don't use the type of the elements at all */ \ -public: \ - void clear() { Clear(); } \ - bool empty() const { return IsEmpty(); } \ - size_type max_size() const { return INT_MAX; } \ - size_type size() const { return GetCount(); } \ - \ -private: \ - void Grow(size_t nIncrement = 0); \ - bool Realloc(size_t nSize); \ - \ - size_t m_nSize, \ - m_nCount; \ - \ - T *m_pItems; \ -} - -#endif // !wxUSE_STL - -// ============================================================================ -// The private helper macros containing the core of the array classes -// ============================================================================ - -// Implementation notes: -// -// JACS: Salford C++ doesn't like 'var->operator=' syntax, as in: -// { ((wxBaseArray *)this)->operator=((const wxBaseArray&)src); -// so using a temporary variable instead. -// -// The classes need a (even trivial) ~name() to link under Mac X -// -// _WX_ERROR_REMOVE is needed to resolve the name conflict between the wxT() -// macro and T typedef: we can't use wxT() inside WX_DEFINE_ARRAY! - -#define _WX_ERROR_REMOVE wxT("removing inexisting element in wxArray::Remove") - -// ---------------------------------------------------------------------------- -// _WX_DEFINE_TYPEARRAY: array for simple types -// ---------------------------------------------------------------------------- - -#if wxUSE_STL - -#define _WX_DEFINE_TYPEARRAY(T, name, base, classexp) \ -typedef int (CMPFUNC_CONV *CMPFUNC##T)(T *pItem1, T *pItem2); \ -classexp name : public base \ -{ \ -public: \ - T& operator[](size_t uiIndex) const \ - { return (T&)(base::operator[](uiIndex)); } \ - T& Item(size_t uiIndex) const \ - { return (T&)/*const cast*/base::operator[](uiIndex); } \ - T& Last() const \ - { return Item(Count() - 1); } \ - \ - int Index(T e, bool bFromEnd = false) const \ - { return base::Index(e, bFromEnd); } \ - \ - void Add(T lItem, size_t nInsert = 1) \ - { insert(end(), nInsert, lItem); } \ - void Insert(T lItem, size_t uiIndex, size_t nInsert = 1) \ - { insert(begin() + uiIndex, nInsert, lItem); } \ - \ - void RemoveAt(size_t uiIndex, size_t nRemove = 1) \ - { base::RemoveAt(uiIndex, nRemove); } \ - void Remove(T lItem) \ - { int iIndex = Index(lItem); \ - wxCHECK2_MSG( iIndex != wxNOT_FOUND, return, \ - _WX_ERROR_REMOVE); \ - RemoveAt((size_t)iIndex); } \ - \ - void Sort(CMPFUNC##T fCmp) { base::Sort((CMPFUNC)fCmp); } \ -} - -#define _WX_DEFINE_TYPEARRAY_PTR(T, name, base, classexp) \ - _WX_DEFINE_TYPEARRAY(T, name, base, classexp) - -#else // if !wxUSE_STL - -// common declaration used by both _WX_DEFINE_TYPEARRAY and -// _WX_DEFINE_TYPEARRAY_PTR -#define _WX_DEFINE_TYPEARRAY_HELPER(T, name, base, classexp, ptrop) \ -wxCOMPILE_TIME_ASSERT2(sizeof(T) <= sizeof(base::base_type), \ - TypeTooBigToBeStoredIn##base, \ - name); \ -typedef int (CMPFUNC_CONV *CMPFUNC##T)(T *pItem1, T *pItem2); \ -classexp name : public base \ -{ \ -public: \ - name() { } \ - ~name() { } \ - \ - name& operator=(const name& src) \ - { base* temp = (base*) this; \ - (*temp) = ((const base&)src); \ - return *this; } \ - \ - T& operator[](size_t uiIndex) const \ - { return (T&)(base::operator[](uiIndex)); } \ - T& Item(size_t uiIndex) const \ - { return (T&)(base::operator[](uiIndex)); } \ - T& Last() const \ - { return (T&)(base::operator[](Count() - 1)); } \ - \ - int Index(T lItem, bool bFromEnd = false) const \ - { return base::Index((base_type)lItem, bFromEnd); } \ - \ - void Add(T lItem, size_t nInsert = 1) \ - { base::Add((base_type)lItem, nInsert); } \ - void Insert(T lItem, size_t uiIndex, size_t nInsert = 1) \ - { base::Insert((base_type)lItem, uiIndex, nInsert) ; } \ - \ - void RemoveAt(size_t uiIndex, size_t nRemove = 1) \ - { base::RemoveAt(uiIndex, nRemove); } \ - void Remove(T lItem) \ - { int iIndex = Index(lItem); \ - wxCHECK2_MSG( iIndex != wxNOT_FOUND, return, \ - _WX_ERROR_REMOVE); \ - base::RemoveAt((size_t)iIndex); } \ - \ - void Sort(CMPFUNC##T fCmp) { base::Sort((CMPFUNC)fCmp); } \ - \ - /* STL-like interface */ \ -private: \ - typedef base::iterator biterator; \ - typedef base::const_iterator bconst_iterator; \ - typedef base::value_type bvalue_type; \ - typedef base::const_reference bconst_reference; \ -public: \ - typedef T value_type; \ - typedef value_type* pointer; \ - typedef const value_type* const_pointer; \ - typedef value_type* iterator; \ - typedef const value_type* const_iterator; \ - typedef value_type& reference; \ - typedef const value_type& const_reference; \ - typedef base::difference_type difference_type; \ - typedef base::size_type size_type; \ - \ - class reverse_iterator \ - { \ - typedef T value_type; \ - typedef value_type& reference; \ - typedef value_type* pointer; \ - typedef reverse_iterator itor; \ - friend inline itor operator+(int o, const itor& it) \ - { return it.m_ptr - o; } \ - friend inline itor operator+(const itor& it, int o) \ - { return it.m_ptr - o; } \ - friend inline itor operator-(const itor& it, int o) \ - { return it.m_ptr + o; } \ - friend inline difference_type operator-(const itor& i1, \ - const itor& i2) \ - { return i1.m_ptr - i2.m_ptr; } \ - \ - public: \ - pointer m_ptr; \ - reverse_iterator() : m_ptr(NULL) { } \ - reverse_iterator(pointer ptr) : m_ptr(ptr) { } \ - reverse_iterator(const itor& it) : m_ptr(it.m_ptr) { } \ - reference operator*() const { return *m_ptr; } \ - ptrop \ - itor& operator++() { --m_ptr; return *this; } \ - const itor operator++(int) \ - { reverse_iterator tmp = *this; --m_ptr; return tmp; } \ - itor& operator--() { ++m_ptr; return *this; } \ - const itor operator--(int) { itor tmp = *this; ++m_ptr; return tmp; }\ - bool operator ==(const itor& it) const { return m_ptr == it.m_ptr; }\ - bool operator !=(const itor& it) const { return m_ptr != it.m_ptr; }\ - }; \ - \ - class const_reverse_iterator \ - { \ - typedef T value_type; \ - typedef const value_type& reference; \ - typedef const value_type* pointer; \ - typedef const_reverse_iterator itor; \ - friend inline itor operator+(int o, const itor& it) \ - { return it.m_ptr - o; } \ - friend inline itor operator+(const itor& it, int o) \ - { return it.m_ptr - o; } \ - friend inline itor operator-(const itor& it, int o) \ - { return it.m_ptr + o; } \ - friend inline difference_type operator-(const itor& i1, \ - const itor& i2) \ - { return i1.m_ptr - i2.m_ptr; } \ - \ - public: \ - pointer m_ptr; \ - const_reverse_iterator() : m_ptr(NULL) { } \ - const_reverse_iterator(pointer ptr) : m_ptr(ptr) { } \ - const_reverse_iterator(const itor& it) : m_ptr(it.m_ptr) { } \ - const_reverse_iterator(const reverse_iterator& it) : m_ptr(it.m_ptr) { }\ - reference operator*() const { return *m_ptr; } \ - ptrop \ - itor& operator++() { --m_ptr; return *this; } \ - const itor operator++(int) \ - { itor tmp = *this; --m_ptr; return tmp; } \ - itor& operator--() { ++m_ptr; return *this; } \ - const itor operator--(int) { itor tmp = *this; ++m_ptr; return tmp; }\ - bool operator ==(const itor& it) const { return m_ptr == it.m_ptr; }\ - bool operator !=(const itor& it) const { return m_ptr != it.m_ptr; }\ - }; \ - \ - name(size_type n, const_reference v) { assign(n, v); } \ - name(const_iterator first, const_iterator last) \ - { assign(first, last); } \ - void assign(const_iterator first, const_iterator last) \ - { base::assign((bconst_iterator)first, (bconst_iterator)last); } \ - void assign(size_type n, const_reference v) \ - { base::assign(n, (bconst_reference)v); } \ - reference back() { return *(end() - 1); } \ - const_reference back() const { return *(end() - 1); } \ - iterator begin() { return (iterator)base::begin(); } \ - const_iterator begin() const { return (const_iterator)base::begin(); }\ - size_type capacity() const { return base::capacity(); } \ - iterator end() { return (iterator)base::end(); } \ - const_iterator end() const { return (const_iterator)base::end(); } \ - iterator erase(iterator first, iterator last) \ - { return (iterator)base::erase((biterator)first, (biterator)last); }\ - iterator erase(iterator it) \ - { return (iterator)base::erase((biterator)it); } \ - reference front() { return *begin(); } \ - const_reference front() const { return *begin(); } \ - void insert(iterator it, size_type n, const_reference v) \ - { base::insert((biterator)it, n, (bconst_reference)v); } \ - iterator insert(iterator it, const_reference v = value_type()) \ - { return (iterator)base::insert((biterator)it, (bconst_reference)v); }\ - void insert(iterator it, const_iterator first, const_iterator last) \ - { base::insert((biterator)it, (bconst_iterator)first, \ - (bconst_iterator)last); } \ - void pop_back() { base::pop_back(); } \ - void push_back(const_reference v) \ - { base::push_back((bconst_reference)v); } \ - reverse_iterator rbegin() { return reverse_iterator(end() - 1); } \ - const_reverse_iterator rbegin() const; \ - reverse_iterator rend() { return reverse_iterator(begin() - 1); } \ - const_reverse_iterator rend() const; \ - void reserve(size_type n) { base::reserve(n); } \ - void resize(size_type n, value_type v = value_type()) \ - { base::resize(n, v); } \ -} - -#define _WX_PTROP pointer operator->() const { return m_ptr; } -#define _WX_PTROP_NONE - -#define _WX_DEFINE_TYPEARRAY(T, name, base, classexp) \ - _WX_DEFINE_TYPEARRAY_HELPER(T, name, base, classexp, _WX_PTROP) -#define _WX_DEFINE_TYPEARRAY_PTR(T, name, base, classexp) \ - _WX_DEFINE_TYPEARRAY_HELPER(T, name, base, classexp, _WX_PTROP_NONE) - -#endif // !wxUSE_STL - -// ---------------------------------------------------------------------------- -// _WX_DEFINE_SORTED_TYPEARRAY: sorted array for simple data types -// cannot handle types with size greater than pointer because of sorting -// ---------------------------------------------------------------------------- - -#define _WX_DEFINE_SORTED_TYPEARRAY_2(T, name, base, defcomp, classexp, comptype)\ -wxCOMPILE_TIME_ASSERT2(sizeof(T) <= sizeof(base::base_type), \ - TypeTooBigToBeStoredInSorted##base, \ - name); \ -classexp name : public base \ -{ \ - typedef comptype SCMPFUNC; \ -public: \ - name(comptype fn defcomp) { m_fnCompare = fn; } \ - \ - name& operator=(const name& src) \ - { base* temp = (base*) this; \ - (*temp) = ((const base&)src); \ - m_fnCompare = src.m_fnCompare; \ - return *this; } \ - \ - T& operator[](size_t uiIndex) const \ - { return (T&)(base::operator[](uiIndex)); } \ - T& Item(size_t uiIndex) const \ - { return (T&)(base::operator[](uiIndex)); } \ - T& Last() const \ - { return (T&)(base::operator[](size() - 1)); } \ - \ - int Index(T lItem) const \ - { return base::Index(lItem, (CMPFUNC)m_fnCompare); } \ - \ - size_t IndexForInsert(T lItem) const \ - { return base::IndexForInsert(lItem, (CMPFUNC)m_fnCompare); } \ - \ - void AddAt(T item, size_t index) \ - { base::insert(begin() + index, item); } \ - \ - size_t Add(T lItem) \ - { return base::Add(lItem, (CMPFUNC)m_fnCompare); } \ - \ - void RemoveAt(size_t uiIndex, size_t nRemove = 1) \ - { base::erase(begin() + uiIndex, begin() + uiIndex + nRemove); } \ - void Remove(T lItem) \ - { int iIndex = Index(lItem); \ - wxCHECK2_MSG( iIndex != wxNOT_FOUND, return, \ - _WX_ERROR_REMOVE ); \ - base::erase(begin() + iIndex); } \ - \ -private: \ - comptype m_fnCompare; \ -} - - -// ---------------------------------------------------------------------------- -// _WX_DECLARE_OBJARRAY: an array for pointers to type T with owning semantics -// ---------------------------------------------------------------------------- - -#define _WX_DECLARE_OBJARRAY(T, name, base, classexp) \ -typedef int (CMPFUNC_CONV *CMPFUNC##T)(T **pItem1, T **pItem2); \ -classexp name : protected base \ -{ \ -typedef int (CMPFUNC_CONV *CMPFUNC##base)(void **pItem1, void **pItem2); \ -typedef base base_array; \ -public: \ - name() { } \ - name(const name& src); \ - name& operator=(const name& src); \ - \ - ~name(); \ - \ - void Alloc(size_t count) { reserve(count); } \ - size_t GetCount() const { return base_array::size(); } \ - size_t size() const { return base_array::size(); } \ - bool IsEmpty() const { return base_array::empty(); } \ - bool empty() const { return base_array::empty(); } \ - size_t Count() const { return base_array::size(); } \ - void Shrink() { base::Shrink(); } \ - \ - T& operator[](size_t uiIndex) const \ - { return *(T*)base::operator[](uiIndex); } \ - T& Item(size_t uiIndex) const \ - { return *(T*)base::operator[](uiIndex); } \ - T& Last() const \ - { return *(T*)(base::operator[](size() - 1)); } \ - \ - int Index(const T& lItem, bool bFromEnd = false) const; \ - \ - void Add(const T& lItem, size_t nInsert = 1); \ - void Add(const T* pItem) \ - { base::push_back((T*)pItem); } \ - void push_back(const T* pItem) \ - { base::push_back((T*)pItem); } \ - void push_back(const T& lItem) \ - { Add(lItem); } \ - \ - void Insert(const T& lItem, size_t uiIndex, size_t nInsert = 1); \ - void Insert(const T* pItem, size_t uiIndex) \ - { base::insert(begin() + uiIndex, (T*)pItem); } \ - \ - void Empty() { DoEmpty(); base::clear(); } \ - void Clear() { DoEmpty(); base::clear(); } \ - \ - T* Detach(size_t uiIndex) \ - { T* p = (T*)base::operator[](uiIndex); \ - base::erase(begin() + uiIndex); return p; } \ - void RemoveAt(size_t uiIndex, size_t nRemove = 1); \ - \ - void Sort(CMPFUNC##T fCmp) { base::Sort((CMPFUNC##base)fCmp); } \ - \ -private: \ - void DoEmpty(); \ - void DoCopy(const name& src); \ -} - -// ============================================================================ -// The public macros for declaration and definition of the dynamic arrays -// ============================================================================ - -// Please note that for each macro WX_FOO_ARRAY we also have -// WX_FOO_EXPORTED_ARRAY and WX_FOO_USER_EXPORTED_ARRAY which are exactly the -// same except that they use an additional __declspec(dllexport) or equivalent -// under Windows if needed. -// -// The first (just EXPORTED) macros do it if wxWidgets was compiled as a DLL -// and so must be used used inside the library. The second kind (USER_EXPORTED) -// allow the user code to do it when it wants. This is needed if you have a dll -// 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. -#define wxARRAY_DEFAULT_EXPORT - -// ---------------------------------------------------------------------------- -// WX_DECLARE_BASEARRAY(T, name) declare an array class named "name" containing -// the elements of type T -// ---------------------------------------------------------------------------- - -#define WX_DECLARE_BASEARRAY(T, name) \ - WX_DECLARE_USER_EXPORTED_BASEARRAY(T, name, wxARRAY_DEFAULT_EXPORT) - -#define WX_DECLARE_EXPORTED_BASEARRAY(T, name) \ - WX_DECLARE_USER_EXPORTED_BASEARRAY(T, name, WXDLLEXPORT) - -#define WX_DECLARE_USER_EXPORTED_BASEARRAY(T, name, expmode) \ - typedef T _wxArray##name; \ - _WX_DECLARE_BASEARRAY(_wxArray##name, name, class expmode) - -// ---------------------------------------------------------------------------- -// WX_DEFINE_TYPEARRAY(T, name, base) define an array class named "name" deriving -// from class "base" containing the elements of type T -// -// Note that the class defined has only inline function and doesn't take any -// space at all so there is no size penalty for defining multiple array classes -// ---------------------------------------------------------------------------- - -#define WX_DEFINE_TYPEARRAY(T, name, base) \ - WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, base, class wxARRAY_DEFAULT_EXPORT) - -#define WX_DEFINE_TYPEARRAY_PTR(T, name, base) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, base, class wxARRAY_DEFAULT_EXPORT) - -#define WX_DEFINE_EXPORTED_TYPEARRAY(T, name, base) \ - WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, base, class WXDLLEXPORT) - -#define WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, base) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, base, class WXDLLEXPORT) - -#define WX_DEFINE_USER_EXPORTED_TYPEARRAY(T, name, base, expdecl) \ - WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, base, class expdecl) - -#define WX_DEFINE_USER_EXPORTED_TYPEARRAY_PTR(T, name, base, expdecl) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, base, class expdecl) - -#define WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, base, classdecl) \ - typedef T _wxArray##name; \ - _WX_DEFINE_TYPEARRAY(_wxArray##name, name, base, classdecl) - -#define WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, base, classdecl) \ - typedef T _wxArray##name; \ - _WX_DEFINE_TYPEARRAY_PTR(_wxArray##name, name, base, classdecl) - -// ---------------------------------------------------------------------------- -// WX_DEFINE_SORTED_TYPEARRAY: this is the same as the previous macro, but it -// defines a sorted array. -// -// Differences: -// 1) it must be given a COMPARE function in ctor which takes 2 items of type -// T* and should return -1, 0 or +1 if the first one is less/greater -// than/equal to the second one. -// 2) the Add() method inserts the item in such was that the array is always -// sorted (it uses the COMPARE function) -// 3) it has no Sort() method because it's always sorted -// 4) Index() method is much faster (the sorted arrays use binary search -// instead of linear one), but Add() is slower. -// 5) there is no Insert() method because you can't insert an item into the -// given position in a sorted array but there is IndexForInsert()/AddAt() -// pair which may be used to optimize a common operation of "insert only if -// not found" -// -// Note that you have to specify the comparison function when creating the -// objects of this array type. If, as in 99% of cases, the comparison function -// is the same for all objects of a class, WX_DEFINE_SORTED_TYPEARRAY_CMP below -// is more convenient. -// -// Summary: use this class when the speed of Index() function is important, use -// the normal arrays otherwise. -// ---------------------------------------------------------------------------- - -// we need a macro which expands to nothing to pass correct number of -// parameters to a nested macro invocation even when we don't have anything to -// pass it -#define wxARRAY_EMPTY - -#define WX_DEFINE_SORTED_TYPEARRAY(T, name, base) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, base, \ - wxARRAY_DEFAULT_EXPORT) - -#define WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, base) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, base, WXDLLEXPORT) - -#define WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, base, expmode) \ - typedef T _wxArray##name; \ - typedef int (CMPFUNC_CONV *SCMPFUNC##name)(T pItem1, T pItem2); \ - _WX_DEFINE_SORTED_TYPEARRAY_2(_wxArray##name, name, base, \ - wxARRAY_EMPTY, class expmode, SCMPFUNC##name) - -// ---------------------------------------------------------------------------- -// WX_DEFINE_SORTED_TYPEARRAY_CMP: exactly the same as above but the comparison -// function is provided by this macro and the objects of this class have a -// default constructor which just uses it. -// -// The arguments are: the element type, the comparison function and the array -// name -// -// NB: this is, of course, how WX_DEFINE_SORTED_TYPEARRAY() should have worked -// from the very beginning - unfortunately I didn't think about this earlier -// ---------------------------------------------------------------------------- - -#define WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, base) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, base, \ - wxARRAY_DEFAULT_EXPORT) - -#define WX_DEFINE_SORTED_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, base) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, base, \ - WXDLLEXPORT) - -#define WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, base, \ - expmode) \ - typedef T _wxArray##name; \ - typedef int (CMPFUNC_CONV *SCMPFUNC##name)(T pItem1, T pItem2); \ - _WX_DEFINE_SORTED_TYPEARRAY_2(_wxArray##name, name, base, = cmpfunc, \ - class expmode, SCMPFUNC##name) - -// ---------------------------------------------------------------------------- -// WX_DECLARE_OBJARRAY(T, name): this macro generates a new array class -// named "name" which owns the objects of type T it contains, i.e. it will -// delete them when it is destroyed. -// -// An element is of type T*, but arguments of type T& are taken (see below!) -// and T& is returned. -// -// Don't use this for simple types such as "int" or "long"! -// -// Note on Add/Insert functions: -// 1) function(T*) gives the object to the array, i.e. it will delete the -// object when it's removed or in the array's dtor -// 2) function(T&) will create a copy of the object and work with it -// -// Also: -// 1) Remove() will delete the object after removing it from the array -// 2) Detach() just removes the object from the array (returning pointer to it) -// -// NB1: Base type T should have an accessible copy ctor if Add(T&) is used -// NB2: Never ever cast a array to it's base type: as dtor is not virtual -// and so you risk having at least the memory leaks and probably worse -// -// Some functions of this class are not inline, so it takes some space to -// define new class from this template even if you don't use it - which is not -// the case for the simple (non-object) array classes -// -// To use an objarray class you must -// #include "dynarray.h" -// WX_DECLARE_OBJARRAY(element_type, list_class_name) -// #include "arrimpl.cpp" -// WX_DEFINE_OBJARRAY(list_class_name) // name must be the same as above! -// -// This is necessary because at the moment of DEFINE_OBJARRAY class parsing the -// element_type must be fully defined (i.e. forward declaration is not -// enough), while WX_DECLARE_OBJARRAY may be done anywhere. The separation of -// two allows to break cicrcular dependencies with classes which have member -// variables of objarray type. -// ---------------------------------------------------------------------------- - -#define WX_DECLARE_OBJARRAY(T, name) \ - WX_DECLARE_USER_EXPORTED_OBJARRAY(T, name, wxARRAY_DEFAULT_EXPORT) - -#define WX_DECLARE_EXPORTED_OBJARRAY(T, name) \ - WX_DECLARE_USER_EXPORTED_OBJARRAY(T, name, WXDLLEXPORT) - -#define WX_DECLARE_OBJARRAY_WITH_DECL(T, name, decl) \ - typedef T _wxObjArray##name; \ - _WX_DECLARE_OBJARRAY(_wxObjArray##name, name, wxArrayPtrVoid, decl) - -#define WX_DECLARE_USER_EXPORTED_OBJARRAY(T, name, expmode) \ - WX_DECLARE_OBJARRAY_WITH_DECL(T, name, class expmode) - -// WX_DEFINE_OBJARRAY is going to be redefined when arrimpl.cpp is included, -// try to provoke a human-understandable error if it used incorrectly. -// -// there is no real need for 3 different macros in the DEFINE case but do it -// anyhow for consistency -#define WX_DEFINE_OBJARRAY(name) DidYouIncludeArrimplCpp -#define WX_DEFINE_EXPORTED_OBJARRAY(name) WX_DEFINE_OBJARRAY(name) -#define WX_DEFINE_USER_EXPORTED_OBJARRAY(name) WX_DEFINE_OBJARRAY(name) - -// ---------------------------------------------------------------------------- -// Some commonly used predefined base arrays -// ---------------------------------------------------------------------------- - -WX_DECLARE_USER_EXPORTED_BASEARRAY(const void *, wxBaseArrayPtrVoid, - WXDLLIMPEXP_BASE); -WX_DECLARE_USER_EXPORTED_BASEARRAY(char, wxBaseArrayChar, WXDLLIMPEXP_BASE); -WX_DECLARE_USER_EXPORTED_BASEARRAY(short, wxBaseArrayShort, WXDLLIMPEXP_BASE); -WX_DECLARE_USER_EXPORTED_BASEARRAY(int, wxBaseArrayInt, WXDLLIMPEXP_BASE); -WX_DECLARE_USER_EXPORTED_BASEARRAY(long, wxBaseArrayLong, WXDLLIMPEXP_BASE); -WX_DECLARE_USER_EXPORTED_BASEARRAY(size_t, wxBaseArraySizeT, WXDLLIMPEXP_BASE); -WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); - -// ---------------------------------------------------------------------------- -// Convenience macros to define arrays from base arrays -// ---------------------------------------------------------------------------- - -#define WX_DEFINE_ARRAY(T, name) \ - WX_DEFINE_TYPEARRAY(T, name, wxBaseArrayPtrVoid) -#define WX_DEFINE_ARRAY_PTR(T, name) \ - WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayPtrVoid) -#define WX_DEFINE_EXPORTED_ARRAY(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY(T, name, wxBaseArrayPtrVoid) -#define WX_DEFINE_EXPORTED_ARRAY_PTR(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayPtrVoid) -#define WX_DEFINE_ARRAY_WITH_DECL_PTR(T, name, decl) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayPtrVoid, decl) -#define WX_DEFINE_USER_EXPORTED_ARRAY(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, wxBaseArrayPtrVoid, wxARRAY_EMPTY expmode) -#define WX_DEFINE_USER_EXPORTED_ARRAY_PTR(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayPtrVoid, wxARRAY_EMPTY expmode) - -#define WX_DEFINE_ARRAY_CHAR(T, name) \ - WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayChar) -#define WX_DEFINE_EXPORTED_ARRAY_CHAR(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayChar) -#define WX_DEFINE_USER_EXPORTED_ARRAY_CHAR(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayChar, wxARRAY_EMPTY expmode) - -#define WX_DEFINE_ARRAY_SHORT(T, name) \ - WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayShort) -#define WX_DEFINE_EXPORTED_ARRAY_SHORT(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayShort) -#define WX_DEFINE_USER_EXPORTED_ARRAY_SHORT(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayShort, wxARRAY_EMPTY expmode) - -#define WX_DEFINE_ARRAY_INT(T, name) \ - WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayInt) -#define WX_DEFINE_EXPORTED_ARRAY_INT(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayInt) -#define WX_DEFINE_USER_EXPORTED_ARRAY_INT(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayInt, wxARRAY_EMPTY expmode) - -#define WX_DEFINE_ARRAY_LONG(T, name) \ - WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayLong) -#define WX_DEFINE_EXPORTED_ARRAY_LONG(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayLong) -#define WX_DEFINE_USER_EXPORTED_ARRAY_LONG(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayLong, wxARRAY_EMPTY expmode) - -#define WX_DEFINE_ARRAY_SIZE_T(T, name) \ - WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArraySizeT) -#define WX_DEFINE_EXPORTED_ARRAY_SIZE_T(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArraySizeT) -#define WX_DEFINE_USER_EXPORTED_ARRAY_SIZE_T(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArraySizeT, wxARRAY_EMPTY expmode) - -#define WX_DEFINE_ARRAY_DOUBLE(T, name) \ - WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayDouble) -#define WX_DEFINE_EXPORTED_ARRAY_DOUBLE(T, name) \ - WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayDouble) -#define WX_DEFINE_USER_EXPORTED_ARRAY_DOUBLE(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayDouble, wxARRAY_EMPTY expmode) - -// ---------------------------------------------------------------------------- -// Convenience macros to define sorted arrays from base arrays -// ---------------------------------------------------------------------------- - -#define WX_DEFINE_SORTED_ARRAY(T, name) \ - WX_DEFINE_SORTED_TYPEARRAY(T, name, wxBaseArrayPtrVoid) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY(T, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, wxBaseArrayPtrVoid) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY(T, name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArrayPtrVoid, wxARRAY_EMPTY expmode) - -#define WX_DEFINE_SORTED_ARRAY_CHAR(T, name) \ - WX_DEFINE_SORTED_TYPEARRAY(T, name, wxBaseArrayChar) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY_CHAR(T, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, wxBaseArrayChar) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CHAR(T, name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArrayChar, wxARRAY_EMPTY expmode) - -#define WX_DEFINE_SORTED_ARRAY_SHORT(T, name) \ - WX_DEFINE_SORTED_TYPEARRAY(T, name, wxBaseArrayShort) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY_SHORT(T, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, wxBaseArrayShort) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_SHORT(T, name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArrayShort, wxARRAY_EMPTY expmode) - -#define WX_DEFINE_SORTED_ARRAY_INT(T, name) \ - WX_DEFINE_SORTED_TYPEARRAY(T, name, wxBaseArrayInt) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY_INT(T, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, wxBaseArrayInt) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_INT(T, name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArrayInt, expmode) - -#define WX_DEFINE_SORTED_ARRAY_LONG(T, name) \ - WX_DEFINE_SORTED_TYPEARRAY(T, name, wxBaseArrayLong) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY_LONG(T, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, wxBaseArrayLong) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_LONG(T, name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArrayLong, expmode) - -#define WX_DEFINE_SORTED_ARRAY_SIZE_T(T, name) \ - WX_DEFINE_SORTED_TYPEARRAY(T, name, wxBaseArraySizeT) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY_SIZE_T(T, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, wxBaseArraySizeT) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_SIZE_T(T, name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArraySizeT, wxARRAY_EMPTY expmode) - -// ---------------------------------------------------------------------------- -// Convenience macros to define sorted arrays from base arrays -// ---------------------------------------------------------------------------- - -#define WX_DEFINE_SORTED_ARRAY_CMP(T, cmpfunc, name) \ - WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayPtrVoid) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY_CMP(T, cmpfunc, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayPtrVoid) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP(T, cmpfunc, \ - name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ - wxBaseArrayPtrVoid, \ - wxARRAY_EMPTY expmode) - -#define WX_DEFINE_SORTED_ARRAY_CMP_CHAR(T, cmpfunc, name) \ - WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayChar) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY_CMP_CHAR(T, cmpfunc, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayChar) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP_CHAR(T, cmpfunc, \ - name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ - wxBaseArrayChar, \ - wxARRAY_EMPTY expmode) - -#define WX_DEFINE_SORTED_ARRAY_CMP_SHORT(T, cmpfunc, name) \ - WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayShort) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY_CMP_SHORT(T, cmpfunc, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayShort) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP_SHORT(T, cmpfunc, \ - name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ - wxBaseArrayShort, \ - wxARRAY_EMPTY expmode) - -#define WX_DEFINE_SORTED_ARRAY_CMP_INT(T, cmpfunc, name) \ - WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayInt) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY_CMP_INT(T, cmpfunc, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayInt) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP_INT(T, cmpfunc, \ - name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ - wxBaseArrayInt, \ - wxARRAY_EMPTY expmode) - -#define WX_DEFINE_SORTED_ARRAY_CMP_LONG(T, cmpfunc, name) \ - WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayLong) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY_CMP_LONG(T, cmpfunc, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayLong) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP_LONG(T, cmpfunc, \ - name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ - wxBaseArrayLong, \ - wxARRAY_EMPTY expmode) - -#define WX_DEFINE_SORTED_ARRAY_CMP_SIZE_T(T, cmpfunc, name) \ - WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArraySizeT) -#define WX_DEFINE_SORTED_EXPORTED_ARRAY_CMP_SIZE_T(T, cmpfunc, name) \ - WX_DEFINE_SORTED_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArraySizeT) -#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP_SIZE_T(T, cmpfunc, \ - name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ - wxBaseArraySizeT, \ - wxARRAY_EMPTY expmode) - -// ---------------------------------------------------------------------------- -// Some commonly used predefined arrays -// ---------------------------------------------------------------------------- - -WX_DEFINE_USER_EXPORTED_ARRAY_SHORT(short, wxArrayShort, class WXDLLIMPEXP_BASE); -WX_DEFINE_USER_EXPORTED_ARRAY_INT(int, wxArrayInt, class WXDLLIMPEXP_BASE); -WX_DEFINE_USER_EXPORTED_ARRAY_DOUBLE(double, wxArrayDouble, class WXDLLIMPEXP_BASE); -WX_DEFINE_USER_EXPORTED_ARRAY_LONG(long, wxArrayLong, class WXDLLIMPEXP_BASE); -WX_DEFINE_USER_EXPORTED_ARRAY_PTR(void *, wxArrayPtrVoid, class WXDLLIMPEXP_BASE); - -// ----------------------------------------------------------------------------- -// convenience macros -// ----------------------------------------------------------------------------- - -// prepend all element of one array to another one; e.g. if first array contains -// elements X,Y,Z and the second contains A,B,C (in those orders), then the -// first array will be result as A,B,C,X,Y,Z -#define WX_PREPEND_ARRAY(array, other) \ - { \ - size_t wxAAcnt = (other).size(); \ - (array).Alloc(wxAAcnt); \ - for ( size_t wxAAn = 0; wxAAn < wxAAcnt; wxAAn++ ) \ - { \ - (array).Insert((other)[wxAAn], wxAAn); \ - } \ - } - -// append all element of one array to another one -#define WX_APPEND_ARRAY(array, other) \ - { \ - size_t wxAAcnt = (other).size(); \ - (array).Alloc(wxAAcnt); \ - for ( size_t wxAAn = 0; wxAAn < wxAAcnt; wxAAn++ ) \ - { \ - (array).push_back((other)[wxAAn]); \ - } \ - } - -// delete all array elements -// -// NB: the class declaration of the array elements must be visible from the -// place where you use this macro, otherwise the proper destructor may not -// be called (a decent compiler should give a warning about it, but don't -// count on it)! -#define WX_CLEAR_ARRAY(array) \ - { \ - size_t wxAAcnt = (array).size(); \ - for ( size_t wxAAn = 0; wxAAn < wxAAcnt; wxAAn++ ) \ - { \ - delete (array)[wxAAn]; \ - } \ - \ - (array).clear(); \ - } - -#endif // _DYNARRAY_H diff --git a/desmume/src/windows/wx/include/wx/dynlib.h b/desmume/src/windows/wx/include/wx/dynlib.h deleted file mode 100644 index 3552bdcaa..000000000 --- a/desmume/src/windows/wx/include/wx/dynlib.h +++ /dev/null @@ -1,359 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/dynlib.h -// Purpose: Dynamic library loading classes -// Author: Guilhem Lavaux, Vadim Zeitlin, Vaclav Slavik -// Modified by: -// Created: 20/07/98 -// RCS-ID: $Id: dynlib.h 58750 2009-02-08 10:01:03Z VZ $ -// Copyright: (c) 1998 Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DYNLIB_H__ -#define _WX_DYNLIB_H__ - -#include "wx/defs.h" - -#if wxUSE_DYNLIB_CLASS - -#include "wx/string.h" -#include "wx/dynarray.h" - -#if defined(__OS2__) || defined(__EMX__) -#include "wx/os2/private.h" -#endif - -#ifdef __WXMSW__ -#include "wx/msw/private.h" -#endif - -// note that we have our own dlerror() implementation under Darwin -#if (defined(HAVE_DLERROR) && !defined(__EMX__)) || defined(__DARWIN__) - #define wxHAVE_DYNLIB_ERROR -#endif - -class WXDLLIMPEXP_FWD_BASE wxDynamicLibraryDetailsCreator; - -// ---------------------------------------------------------------------------- -// conditional compilation -// ---------------------------------------------------------------------------- - -// Note: __OS2__/EMX has to be tested first, since we want to use -// native version, even if configure detected presence of DLOPEN. -#if defined(__OS2__) || defined(__EMX__) || defined(__WINDOWS__) - typedef HMODULE wxDllType; -#elif defined(__DARWIN__) - // Don't include dlfcn.h on Darwin, we may be using our own replacements. - typedef void *wxDllType; -#elif defined(HAVE_DLOPEN) - #include - typedef void *wxDllType; -#elif defined(HAVE_SHL_LOAD) - #include - typedef shl_t wxDllType; -#elif defined(__WXMAC__) - #include - typedef CFragConnectionID wxDllType; -#else - #error "Dynamic Loading classes can't be compiled on this platform, sorry." -#endif - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -enum wxDLFlags -{ - wxDL_LAZY = 0x00000001, // resolve undefined symbols at first use - // (only works on some Unix versions) - wxDL_NOW = 0x00000002, // resolve undefined symbols on load - // (default, always the case under Win32) - wxDL_GLOBAL = 0x00000004, // export extern symbols to subsequently - // loaded libs. - wxDL_VERBATIM = 0x00000008, // attempt to load the supplied library - // name without appending the usual dll - // filename extension. - wxDL_NOSHARE = 0x00000010, // load new DLL, don't reuse already loaded - // (only for wxPluginManager) - - wxDL_QUIET = 0x00000020, // don't log an error if failed to load - -#if wxABI_VERSION >= 20810 - // this flag is dangerous, for internal use of wxMSW only, don't use at all - // and especially don't use directly, use wxLoadedDLL instead if you really - // do need it - wxDL_GET_LOADED = 0x00000040, // Win32 only: return handle of already - // loaded DLL or NULL otherwise; Unload() - // should not be called so don't forget to - // Detach() if you use this function -#endif // wx 2.8.10+ - - wxDL_DEFAULT = wxDL_NOW // default flags correspond to Win32 -}; - -enum wxDynamicLibraryCategory -{ - wxDL_LIBRARY, // standard library - wxDL_MODULE // loadable module/plugin -}; - -enum wxPluginCategory -{ - wxDL_PLUGIN_GUI, // plugin that uses GUI classes - wxDL_PLUGIN_BASE // wxBase-only plugin -}; - -// ---------------------------------------------------------------------------- -// macros -// ---------------------------------------------------------------------------- - -// when loading a function from a DLL you always have to cast the returned -// "void *" pointer to the correct type and, even more annoyingly, you have to -// repeat this type twice if you want to declare and define a function pointer -// all in one line -// -// this macro makes this slightly less painful by allowing you to specify the -// type only once, as the first parameter, and creating a variable of this type -// called "pfn" initialized with the "name" from the "dynlib" -#define wxDYNLIB_FUNCTION(type, name, dynlib) \ - type pfn ## name = (type)(dynlib).GetSymbol(_T(#name)) - -// ---------------------------------------------------------------------------- -// wxDynamicLibraryDetails: contains details about a loaded wxDynamicLibrary -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxDynamicLibraryDetails -{ -public: - // ctor, normally never used as these objects are only created by - // wxDynamicLibrary::ListLoaded() - wxDynamicLibraryDetails() { m_address = NULL; m_length = 0; } - - // get the (base) name - wxString GetName() const { return m_name; } - - // get the full path of this object - wxString GetPath() const { return m_path; } - - // get the load address and the extent, return true if this information is - // available - bool GetAddress(void **addr, size_t *len) const - { - if ( !m_address ) - return false; - - if ( addr ) - *addr = m_address; - if ( len ) - *len = m_length; - - return true; - } - - // return the version of the DLL (may be empty if no version info) - wxString GetVersion() const - { - return m_version; - } - -private: - wxString m_name, - m_path, - m_version; - - void *m_address; - size_t m_length; - - friend class wxDynamicLibraryDetailsCreator; -}; - -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxDynamicLibraryDetails, - wxDynamicLibraryDetailsArray, - WXDLLIMPEXP_BASE); - -// ---------------------------------------------------------------------------- -// wxDynamicLibrary: represents a handle to a DLL/shared object -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxDynamicLibrary -{ -public: - // return a valid handle for the main program itself or NULL if back - // linking is not supported by the current platform (e.g. Win32) - static wxDllType GetProgramHandle(); - - // return the platform standard DLL extension (with leading dot) - static const wxChar *GetDllExt() { return ms_dllext; } - - wxDynamicLibrary() : m_handle(0) { } - wxDynamicLibrary(const wxString& libname, int flags = wxDL_DEFAULT) - : m_handle(0) - { - Load(libname, flags); - } - - // NOTE: this class is (deliberately) not virtual, do not attempt - // to use it polymorphically. - ~wxDynamicLibrary() { Unload(); } - - // return true if the library was loaded successfully - bool IsLoaded() const { return m_handle != 0; } - - // load the library with the given name (full or not), return true if ok - bool Load(const wxString& libname, int flags = wxDL_DEFAULT); - - // raw function for loading dynamic libs: always behaves as if - // wxDL_VERBATIM were specified and doesn't log error message if the - // library couldn't be loaded but simply returns NULL - static wxDllType RawLoad(const wxString& libname, int flags = wxDL_DEFAULT); - - // detach the library object from its handle, i.e. prevent the object from - // unloading the library in its dtor -- the caller is now responsible for - // doing this - wxDllType Detach() { wxDllType h = m_handle; m_handle = 0; return h; } - - // unload the given library handle (presumably returned by Detach() before) - static void Unload(wxDllType handle); - - // unload the library, also done automatically in dtor - void Unload() { if ( IsLoaded() ) { Unload(m_handle); m_handle = 0; } } - - // Return the raw handle from dlopen and friends. - wxDllType GetLibHandle() const { return m_handle; } - - // check if the given symbol is present in the library, useful to verify if - // a loadable module is our plugin, for example, without provoking error - // messages from GetSymbol() - bool HasSymbol(const wxString& name) const - { - bool ok; - DoGetSymbol(name, &ok); - return ok; - } - - // resolve a symbol in a loaded DLL, such as a variable or function name. - // 'name' is the (possibly mangled) name of the symbol. (use extern "C" to - // export unmangled names) - // - // Since it is perfectly valid for the returned symbol to actually be NULL, - // that is not always indication of an error. Pass and test the parameter - // 'success' for a true indication of success or failure to load the - // symbol. - // - // Returns a pointer to the symbol on success, or NULL if an error occurred - // or the symbol wasn't found. - void *GetSymbol(const wxString& name, bool *success = NULL) const; - - // low-level version of GetSymbol() - static void *RawGetSymbol(wxDllType handle, const wxString& name); - void *RawGetSymbol(const wxString& name) const - { -#if defined (__WXPM__) || defined(__EMX__) - return GetSymbol(name); -#else - return RawGetSymbol(m_handle, name); -#endif - } - -#ifdef __WXMSW__ - // 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 - static void *RawGetSymbolAorW(wxDllType handle, const wxString& name) - { - return RawGetSymbol - ( - handle, - name + -#if wxUSE_UNICODE - L'W' -#else - 'A' -#endif - ); - } - - void *GetSymbolAorW(const wxString& name) const - { - return RawGetSymbolAorW(m_handle, name); - } -#endif // __WXMSW__ - - // return all modules/shared libraries in the address space of this process - // - // returns an empty array if not implemented or an error occurred - static wxDynamicLibraryDetailsArray ListLoaded(); - - // return platform-specific name of dynamic library with proper extension - // and prefix (e.g. "foo.dll" on Windows or "libfoo.so" on Linux) - static wxString CanonicalizeName(const wxString& name, - wxDynamicLibraryCategory cat = wxDL_LIBRARY); - - // return name of wxWidgets plugin (adds compiler and version info - // to the filename): - static wxString - CanonicalizePluginName(const wxString& name, - wxPluginCategory cat = wxDL_PLUGIN_GUI); - - // return plugin directory on platforms where it makes sense and empty - // string on others: - static wxString GetPluginsDirectory(); - - -protected: - // common part of GetSymbol() and HasSymbol() - void *DoGetSymbol(const wxString& name, bool *success = 0) const; - -#ifdef wxHAVE_DYNLIB_ERROR - // log the error after a dlxxx() function failure - static void Error(); -#endif // wxHAVE_DYNLIB_ERROR - - - // platform specific shared lib suffix. - static const wxChar *ms_dllext; - - // the handle to DLL or NULL - wxDllType m_handle; - - // no copy ctor/assignment operators (or we'd try to unload the library - // twice) - DECLARE_NO_COPY_CLASS(wxDynamicLibrary) -}; - -#if defined(__WXMSW__) && wxABI_VERSION >= 20810 - -// ---------------------------------------------------------------------------- -// wxLoadedDLL is a MSW-only internal helper class allowing to dynamically bind -// to a DLL already loaded into the project address space -// ---------------------------------------------------------------------------- - -class wxLoadedDLL : public wxDynamicLibrary -{ -public: - wxLoadedDLL(const wxString& dllname) - : wxDynamicLibrary(dllname, wxDL_GET_LOADED | wxDL_VERBATIM | wxDL_QUIET) - { - } - - ~wxLoadedDLL() - { - Detach(); - } -}; - -#endif // __WXMSW__ - -// ---------------------------------------------------------------------------- -// Interesting defines -// ---------------------------------------------------------------------------- - -#define WXDLL_ENTRY_FUNCTION() \ -extern "C" WXEXPORT const wxClassInfo *wxGetClassFirst(); \ -const wxClassInfo *wxGetClassFirst() { \ - return wxClassInfo::GetFirst(); \ -} - -#endif // wxUSE_DYNLIB_CLASS - -#endif // _WX_DYNLIB_H__ diff --git a/desmume/src/windows/wx/include/wx/dynload.h b/desmume/src/windows/wx/include/wx/dynload.h deleted file mode 100644 index 68c63c1eb..000000000 --- a/desmume/src/windows/wx/include/wx/dynload.h +++ /dev/null @@ -1,153 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: dynload.h -// Purpose: Dynamic loading framework -// Author: Ron Lee, David Falkinder, Vadim Zeitlin and a cast of 1000's -// (derived in part from dynlib.cpp (c) 1998 Guilhem Lavaux) -// Modified by: -// Created: 03/12/01 -// RCS-ID: $Id: dynload.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 2001 Ron Lee -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DYNAMICLOADER_H__ -#define _WX_DYNAMICLOADER_H__ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_DYNAMIC_LOADER - -#include "wx/dynlib.h" -#include "wx/hashmap.h" -#include "wx/module.h" - -class WXDLLIMPEXP_FWD_BASE wxPluginLibrary; - - -WX_DECLARE_STRING_HASH_MAP_WITH_DECL(wxPluginLibrary *, wxDLManifest, - class WXDLLIMPEXP_BASE); -typedef wxDLManifest wxDLImports; - -// --------------------------------------------------------------------------- -// wxPluginLibrary -// --------------------------------------------------------------------------- - -// NOTE: Do not attempt to use a base class pointer to this class. -// wxDL is not virtual and we deliberately hide some of it's -// methods here. -// -// Unless you know exacty why you need to, you probably shouldn't -// instantiate this class directly anyway, use wxPluginManager -// instead. - -class WXDLLIMPEXP_BASE wxPluginLibrary : public wxDynamicLibrary -{ -public: - - static wxDLImports* ms_classes; // Static hash of all imported classes. - - wxPluginLibrary( const wxString &libname, int flags = wxDL_DEFAULT ); - ~wxPluginLibrary(); - - wxPluginLibrary *RefLib(); - bool UnrefLib(); - - // These two are called by the PluginSentinel on (PLUGGABLE) object - // creation/destruction. There is usually no reason for the user to - // call them directly. We have to separate this from the link count, - // since the two are not interchangeable. - - // FIXME: for even better debugging PluginSentinel should register - // the name of the class created too, then we can state - // exactly which object was not destroyed which may be - // difficult to find otherwise. Also this code should - // probably only be active in DEBUG mode, but let's just - // get it right first. - - void RefObj() { ++m_objcount; } - void UnrefObj() - { - wxASSERT_MSG( m_objcount > 0, _T("Too many objects deleted??") ); - --m_objcount; - } - - // Override/hide some base class methods - - bool IsLoaded() const { return m_linkcount > 0; } - void Unload() { UnrefLib(); } - -private: - - wxClassInfo *m_before; // sm_first before loading this lib - wxClassInfo *m_after; // ..and after. - - size_t m_linkcount; // Ref count of library link calls - size_t m_objcount; // ..and (pluggable) object instantiations. - wxModuleList m_wxmodules; // any wxModules that we initialised. - - void UpdateClasses(); // Update ms_classes - void RestoreClasses(); // Removes this library from ms_classes - void RegisterModules(); // Init any wxModules in the lib. - void UnregisterModules(); // Cleanup any wxModules we installed. - - DECLARE_NO_COPY_CLASS(wxPluginLibrary) -}; - - -class WXDLLIMPEXP_BASE wxPluginManager -{ -public: - - // Static accessors. - - static wxPluginLibrary *LoadLibrary( const wxString &libname, - int flags = wxDL_DEFAULT ); - static bool UnloadLibrary(const wxString &libname); - - // Instance methods. - - wxPluginManager() : m_entry(NULL) {} - wxPluginManager(const wxString &libname, int flags = wxDL_DEFAULT) - { - Load(libname, flags); - } - ~wxPluginManager() { if ( IsLoaded() ) Unload(); } - - bool Load(const wxString &libname, int flags = wxDL_DEFAULT); - void Unload(); - - bool IsLoaded() const { return m_entry && m_entry->IsLoaded(); } - void *GetSymbol(const wxString &symbol, bool *success = 0) - { - return m_entry->GetSymbol( symbol, success ); - } - - static void CreateManifest() { ms_manifest = new wxDLManifest(wxKEY_STRING); } - static void ClearManifest() { delete ms_manifest; ms_manifest = NULL; } - -private: - // return the pointer to the entry for the library with given name in - // ms_manifest or NULL if none - static wxPluginLibrary *FindByName(const wxString& name) - { - const wxDLManifest::iterator i = ms_manifest->find(name); - - return i == ms_manifest->end() ? NULL : i->second; - } - - static wxDLManifest* ms_manifest; // Static hash of loaded libs. - wxPluginLibrary* m_entry; // Cache our entry in the manifest. - - // We could allow this class to be copied if we really - // wanted to, but not without modification. - DECLARE_NO_COPY_CLASS(wxPluginManager) -}; - - -#endif // wxUSE_DYNAMIC_LOADER -#endif // _WX_DYNAMICLOADER_H__ - diff --git a/desmume/src/windows/wx/include/wx/effects.h b/desmume/src/windows/wx/include/wx/effects.h deleted file mode 100644 index b04a3ba63..000000000 --- a/desmume/src/windows/wx/include/wx/effects.h +++ /dev/null @@ -1,75 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/effects.h -// Purpose: wxEffects class -// Draws 3D effects. -// Author: Julian Smart et al -// Modified by: -// Created: 25/4/2000 -// RCS-ID: $Id: effects.h 39109 2006-05-08 11:31:03Z ABX $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_EFFECTS_H_ -#define _WX_EFFECTS_H_ - -/* - * wxEffects: various 3D effects - */ - -#include "wx/object.h" -#include "wx/colour.h" -#include "wx/gdicmn.h" -#include "wx/dc.h" - -class WXDLLEXPORT wxEffects: public wxObject -{ -DECLARE_CLASS(wxEffects) - -public: - // Assume system colours - wxEffects() ; - // Going from lightest to darkest - wxEffects(const wxColour& highlightColour, const wxColour& lightShadow, - const wxColour& faceColour, const wxColour& mediumShadow, - const wxColour& darkShadow) ; - - // Accessors - wxColour GetHighlightColour() const { return m_highlightColour; } - wxColour GetLightShadow() const { return m_lightShadow; } - wxColour GetFaceColour() const { return m_faceColour; } - wxColour GetMediumShadow() const { return m_mediumShadow; } - wxColour GetDarkShadow() const { return m_darkShadow; } - - void SetHighlightColour(const wxColour& c) { m_highlightColour = c; } - void SetLightShadow(const wxColour& c) { m_lightShadow = c; } - void SetFaceColour(const wxColour& c) { m_faceColour = c; } - void SetMediumShadow(const wxColour& c) { m_mediumShadow = c; } - void SetDarkShadow(const wxColour& c) { m_darkShadow = c; } - - void Set(const wxColour& highlightColour, const wxColour& lightShadow, - const wxColour& faceColour, const wxColour& mediumShadow, - const wxColour& darkShadow) - { - SetHighlightColour(highlightColour); - SetLightShadow(lightShadow); - SetFaceColour(faceColour); - SetMediumShadow(mediumShadow); - SetDarkShadow(darkShadow); - } - - // Draw a sunken edge - void DrawSunkenEdge(wxDC& dc, const wxRect& rect, int borderSize = 1); - - // Tile a bitmap - bool TileBitmap(const wxRect& rect, wxDC& dc, const wxBitmap& bitmap); - -protected: - wxColour m_highlightColour; // Usually white - wxColour m_lightShadow; // Usually light grey - wxColour m_faceColour; // Usually grey - wxColour m_mediumShadow; // Usually dark grey - wxColour m_darkShadow; // Usually black -}; - -#endif diff --git a/desmume/src/windows/wx/include/wx/encconv.h b/desmume/src/windows/wx/include/wx/encconv.h deleted file mode 100644 index 6a54439ee..000000000 --- a/desmume/src/windows/wx/include/wx/encconv.h +++ /dev/null @@ -1,159 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/encconv.h -// Purpose: wxEncodingConverter class for converting between different -// font encodings -// Author: Vaclav Slavik -// Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ENCCONV_H_ -#define _WX_ENCCONV_H_ - -#include "wx/defs.h" - -#include "wx/object.h" -#include "wx/fontenc.h" -#include "wx/dynarray.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -enum -{ - wxCONVERT_STRICT, - wxCONVERT_SUBSTITUTE -}; - - -enum -{ - wxPLATFORM_CURRENT = -1, - - wxPLATFORM_UNIX = 0, - wxPLATFORM_WINDOWS, - wxPLATFORM_OS2, - wxPLATFORM_MAC -}; - -// ---------------------------------------------------------------------------- -// types -// ---------------------------------------------------------------------------- - -WX_DEFINE_ARRAY_INT(wxFontEncoding, wxFontEncodingArray); - -//-------------------------------------------------------------------------------- -// wxEncodingConverter -// This class is capable of converting strings between any two -// 8bit encodings/charsets. It can also convert from/to Unicode -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxEncodingConverter : public wxObject -{ - public: - - wxEncodingConverter(); - virtual ~wxEncodingConverter() { if (m_Table) delete[] m_Table; } - - // Initialize conversion. Both output or input encoding may - // be wxFONTENCODING_UNICODE, but only if wxUSE_WCHAR_T is set to 1. - // - // All subsequent calls to Convert() will interpret it's argument - // as a string in input_enc encoding and will output string in - // output_enc encoding. - // - // You must call this method before calling Convert. You may call - // it more than once in order to switch to another conversion - // - // Method affects behaviour of Convert() in case input character - // cannot be converted because it does not exist in output encoding: - // wxCONVERT_STRICT -- - // follow behaviour of GNU Recode - just copy unconvertable - // characters to output and don't change them (it's integer - // value will stay the same) - // wxCONVERT_SUBSTITUTE -- - // try some (lossy) substitutions - e.g. replace - // unconvertable latin capitals with acute by ordinary - // capitals, replace en-dash or em-dash by '-' etc. - // both modes gurantee that output string will have same length - // as input string - // - // Returns false if given conversion is impossible, true otherwise - // (conversion may be impossible either if you try to convert - // to Unicode with non-Unicode build of wxWidgets or if input - // or output encoding is not supported.) - bool Init(wxFontEncoding input_enc, wxFontEncoding output_enc, int method = wxCONVERT_STRICT); - - // Convert input string according to settings passed to Init. - // Note that you must call Init before using Convert! - bool Convert(const char* input, char* output) const; - bool Convert(char* str) const { return Convert(str, str); } - wxString Convert(const wxString& input) const; - -#if wxUSE_WCHAR_T - bool Convert(const char* input, wchar_t* output) const; - bool Convert(const wchar_t* input, char* output) const; - bool Convert(const wchar_t* input, wchar_t* output) const; - bool Convert(wchar_t* str) const { return Convert(str, str); } -#endif - // Return equivalent(s) for given font that are used - // under given platform. wxPLATFORM_CURRENT means the plaform - // this binary was compiled for - // - // Examples: - // current platform enc returned value - // ----------------------------------------------------- - // unix CP1250 {ISO8859_2} - // unix ISO8859_2 {} - // windows ISO8859_2 {CP1250} - // - // Equivalence is defined in terms of convertibility: - // 2 encodings are equivalent if you can convert text between - // then without loosing information (it may - and will - happen - // that you loose special chars like quotation marks or em-dashes - // but you shouldn't loose any diacritics and language-specific - // characters when converting between equivalent encodings). - // - // Convert() method is not limited to converting between - // equivalent encodings, it can convert between arbitrary - // two encodings! - // - // Remember that this function does _NOT_ check for presence of - // fonts in system. It only tells you what are most suitable - // encodings. (It usually returns only one encoding) - // - // Note that argument enc itself may be present in returned array! - // (so that you can -- as a side effect -- detect whether the - // encoding is native for this platform or not) - static wxFontEncodingArray GetPlatformEquivalents(wxFontEncoding enc, int platform = wxPLATFORM_CURRENT); - - // Similar to GetPlatformEquivalent, but this one will return ALL - // equivalent encodings, regardless the platform, including itself. - static wxFontEncodingArray GetAllEquivalents(wxFontEncoding enc); - - // Return true if [any text in] one multibyte encoding can be - // converted to another one losslessly. - // - // Do not call this with wxFONTENCODING_UNICODE, it doesn't make - // sense (always works in one sense and always depends on the text - // to convert in the other) - static bool CanConvert(wxFontEncoding encIn, wxFontEncoding encOut) - { - return GetAllEquivalents(encIn).Index(encOut) != wxNOT_FOUND; - } - - private: - -#if wxUSE_WCHAR_T - wchar_t *m_Table; -#else - char *m_Table; -#endif - bool m_UnicodeInput, m_UnicodeOutput; - bool m_JustCopy; - - DECLARE_NO_COPY_CLASS(wxEncodingConverter) -}; - -#endif // _WX_ENCCONV_H_ diff --git a/desmume/src/windows/wx/include/wx/encinfo.h b/desmume/src/windows/wx/include/wx/encinfo.h deleted file mode 100644 index 99dbddb81..000000000 --- a/desmume/src/windows/wx/include/wx/encinfo.h +++ /dev/null @@ -1,74 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/encinfo.h -// Purpose: declares wxNativeEncodingInfo struct -// Author: Vadim Zeitlin -// Modified by: -// Created: 19.09.2003 (extracted from wx/fontenc.h) -// RCS-ID: $Id: encinfo.h 40865 2006-08-27 09:42:42Z VS $ -// Copyright: (c) 2003 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ENCINFO_H_ -#define _WX_ENCINFO_H_ - -#include "wx/string.h" - -// ---------------------------------------------------------------------------- -// wxNativeEncodingInfo contains all encoding parameters for this platform -// ---------------------------------------------------------------------------- - -// This private structure specifies all the parameters needed to create a font -// with the given encoding on this platform. -// -// Under X, it contains the last 2 elements of the font specifications -// (registry and encoding). -// -// Under Windows, it contains a number which is one of predefined CHARSET_XXX -// values. -// -// Under all platforms it also contains a facename string which should be -// used, if not empty, to create fonts in this encoding (this is the only way -// to create a font of non-standard encoding (like KOI8) under Windows - the -// facename specifies the encoding then) - -struct WXDLLEXPORT wxNativeEncodingInfo -{ - wxString facename; // may be empty meaning "any" -#ifndef __WXPALMOS__ - wxFontEncoding encoding; // so that we know what this struct represents - -#if defined(__WXMSW__) || \ - defined(__WXPM__) || \ - defined(__WXMAC__) || \ - defined(__WXCOCOA__) // FIXME: __WXCOCOA__ - - wxNativeEncodingInfo() - : facename() - , encoding(wxFONTENCODING_SYSTEM) - , charset(0) /* ANSI_CHARSET */ - { } - - int charset; -#elif defined(_WX_X_FONTLIKE) - wxString xregistry, - xencoding; -#elif defined(__WXGTK20__) - // No way to specify this in Pango as this - // seems to be handled internally. -#elif defined(__WXMGL__) - int mglEncoding; -#elif defined(__WXDFB__) - // DirectFB uses UTF-8 internally, doesn't use font encodings -#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); - wxString ToString() const; -}; - -#endif // _WX_ENCINFO_H_ - diff --git a/desmume/src/windows/wx/include/wx/event.h b/desmume/src/windows/wx/include/wx/event.h deleted file mode 100644 index 26fab62c9..000000000 --- a/desmume/src/windows/wx/include/wx/event.h +++ /dev/null @@ -1,3116 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/event.h -// Purpose: Event classes -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: event.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_EVENT_H__ -#define _WX_EVENT_H__ - -#include "wx/defs.h" -#include "wx/cpp.h" -#include "wx/object.h" -#include "wx/clntdata.h" - -#if wxUSE_GUI - #include "wx/gdicmn.h" - #include "wx/cursor.h" -#endif - -#include "wx/thread.h" - -#include "wx/dynarray.h" - -// ---------------------------------------------------------------------------- -// forward declarations -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_BASE wxList; - -#if wxUSE_GUI - class WXDLLIMPEXP_FWD_CORE wxDC; - class WXDLLIMPEXP_FWD_CORE wxMenu; - class WXDLLIMPEXP_FWD_CORE wxWindow; - class WXDLLIMPEXP_FWD_CORE wxWindowBase; -#endif // wxUSE_GUI - -class WXDLLIMPEXP_FWD_BASE wxEvtHandler; - -// ---------------------------------------------------------------------------- -// Event types -// ---------------------------------------------------------------------------- - -typedef int wxEventType; - -// this is used to make the event table entry type safe, so that for an event -// handler only a function with proper parameter list can be given. -#define wxStaticCastEvent(type, val) wx_static_cast(type, val) - -// in previous versions of wxWidgets the event types used to be constants -// which created difficulties with custom/user event types definition -// -// starting from wxWidgets 2.4 the event types are now dynamically assigned -// using wxNewEventType() which solves this problem, however at price of -// several incompatibilities: -// -// a) event table macros declaration changed, it now uses wxEventTableEntry -// ctor instead of initialisation from an agregate - the macro -// DECLARE_EVENT_TABLE_ENTRY may be used to write code which can compile -// with all versions of wxWidgets -// -// b) event types can't be used as switch() cases as they're not really -// constant any more - there is no magic solution here, you just have to -// change the switch()es to if()s -// -// if these are real problems for you, define WXWIN_COMPATIBILITY_EVENT_TYPES -// as 1 to get 100% old behaviour, however you won't be able to use the -// libraries using the new dynamic event type allocation in such case, so avoid -// it if possible. -#ifndef WXWIN_COMPATIBILITY_EVENT_TYPES - #define WXWIN_COMPATIBILITY_EVENT_TYPES 0 -#endif - -#if WXWIN_COMPATIBILITY_EVENT_TYPES - -#define DECLARE_EVENT_TABLE_ENTRY(type, winid, idLast, fn, obj) \ - { type, winid, idLast, fn, obj } - -#define BEGIN_DECLARE_EVENT_TYPES() enum { -#define END_DECLARE_EVENT_TYPES() }; -#define DECLARE_EVENT_TYPE(name, value) name = wxEVT_FIRST + value, -#define DECLARE_LOCAL_EVENT_TYPE(name, value) name = wxEVT_USER_FIRST + value, -#define DECLARE_EXPORTED_EVENT_TYPE(expdecl, name, value) \ - DECLARE_LOCAL_EVENT_TYPE(name, value) -#define DEFINE_EVENT_TYPE(name) -#define DEFINE_LOCAL_EVENT_TYPE(name) - - -#else // !WXWIN_COMPATIBILITY_EVENT_TYPES - -#define DECLARE_EVENT_TABLE_ENTRY(type, winid, idLast, fn, obj) \ - wxEventTableEntry(type, winid, idLast, fn, obj) - -#define BEGIN_DECLARE_EVENT_TYPES() -#define END_DECLARE_EVENT_TYPES() -#define DECLARE_EXPORTED_EVENT_TYPE(expdecl, name, value) \ - extern expdecl const wxEventType name; -#define DECLARE_EVENT_TYPE(name, value) \ - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, name, value) -#define DECLARE_LOCAL_EVENT_TYPE(name, value) \ - DECLARE_EXPORTED_EVENT_TYPE(wxEMPTY_PARAMETER_VALUE, name, value) -#define DEFINE_EVENT_TYPE(name) const wxEventType name = wxNewEventType(); -#define DEFINE_LOCAL_EVENT_TYPE(name) DEFINE_EVENT_TYPE(name) - -// generate a new unique event type -extern WXDLLIMPEXP_BASE wxEventType wxNewEventType(); - -#endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES - -BEGIN_DECLARE_EVENT_TYPES() - -#if WXWIN_COMPATIBILITY_EVENT_TYPES - wxEVT_NULL = 0, - wxEVT_FIRST = 10000, - wxEVT_USER_FIRST = wxEVT_FIRST + 2000, -#else // !WXWIN_COMPATIBILITY_EVENT_TYPES - // it is important to still have these as constants to avoid - // initialization order related problems - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_NULL, 0) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_FIRST, 10000) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_USER_FIRST, wxEVT_FIRST + 2000) -#endif // WXWIN_COMPATIBILITY_EVENT_TYPES/!WXWIN_COMPATIBILITY_EVENT_TYPES - - DECLARE_EVENT_TYPE(wxEVT_COMMAND_BUTTON_CLICKED, 1) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_CHECKBOX_CLICKED, 2) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_CHOICE_SELECTED, 3) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_SELECTED, 4) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, 5) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, 6) - // now they are in wx/textctrl.h -#if WXWIN_COMPATIBILITY_EVENT_TYPES - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED, 7) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER, 8) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL, 13) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_MAXLEN, 14) -#endif // WXWIN_COMPATIBILITY_EVENT_TYPES - DECLARE_EVENT_TYPE(wxEVT_COMMAND_MENU_SELECTED, 9) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_SLIDER_UPDATED, 10) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_RADIOBOX_SELECTED, 11) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_RADIOBUTTON_SELECTED, 12) - - // wxEVT_COMMAND_SCROLLBAR_UPDATED is now obsolete since we use - // wxEVT_SCROLL... events - - DECLARE_EVENT_TYPE(wxEVT_COMMAND_SCROLLBAR_UPDATED, 13) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_VLBOX_SELECTED, 14) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_COMBOBOX_SELECTED, 15) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TOOL_RCLICKED, 16) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TOOL_ENTER, 17) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_SPINCTRL_UPDATED, 18) - - // Sockets and timers send events, too - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_SOCKET, 50) - DECLARE_EVENT_TYPE(wxEVT_TIMER , 80) - - // Mouse event types - DECLARE_EVENT_TYPE(wxEVT_LEFT_DOWN, 100) - DECLARE_EVENT_TYPE(wxEVT_LEFT_UP, 101) - DECLARE_EVENT_TYPE(wxEVT_MIDDLE_DOWN, 102) - DECLARE_EVENT_TYPE(wxEVT_MIDDLE_UP, 103) - DECLARE_EVENT_TYPE(wxEVT_RIGHT_DOWN, 104) - DECLARE_EVENT_TYPE(wxEVT_RIGHT_UP, 105) - DECLARE_EVENT_TYPE(wxEVT_MOTION, 106) - DECLARE_EVENT_TYPE(wxEVT_ENTER_WINDOW, 107) - DECLARE_EVENT_TYPE(wxEVT_LEAVE_WINDOW, 108) - DECLARE_EVENT_TYPE(wxEVT_LEFT_DCLICK, 109) - DECLARE_EVENT_TYPE(wxEVT_MIDDLE_DCLICK, 110) - DECLARE_EVENT_TYPE(wxEVT_RIGHT_DCLICK, 111) - DECLARE_EVENT_TYPE(wxEVT_SET_FOCUS, 112) - DECLARE_EVENT_TYPE(wxEVT_KILL_FOCUS, 113) - DECLARE_EVENT_TYPE(wxEVT_CHILD_FOCUS, 114) - DECLARE_EVENT_TYPE(wxEVT_MOUSEWHEEL, 115) - - // Non-client mouse events - DECLARE_EVENT_TYPE(wxEVT_NC_LEFT_DOWN, 200) - DECLARE_EVENT_TYPE(wxEVT_NC_LEFT_UP, 201) - DECLARE_EVENT_TYPE(wxEVT_NC_MIDDLE_DOWN, 202) - DECLARE_EVENT_TYPE(wxEVT_NC_MIDDLE_UP, 203) - DECLARE_EVENT_TYPE(wxEVT_NC_RIGHT_DOWN, 204) - DECLARE_EVENT_TYPE(wxEVT_NC_RIGHT_UP, 205) - DECLARE_EVENT_TYPE(wxEVT_NC_MOTION, 206) - DECLARE_EVENT_TYPE(wxEVT_NC_ENTER_WINDOW, 207) - DECLARE_EVENT_TYPE(wxEVT_NC_LEAVE_WINDOW, 208) - DECLARE_EVENT_TYPE(wxEVT_NC_LEFT_DCLICK, 209) - DECLARE_EVENT_TYPE(wxEVT_NC_MIDDLE_DCLICK, 210) - DECLARE_EVENT_TYPE(wxEVT_NC_RIGHT_DCLICK, 211) - - // Character input event type - DECLARE_EVENT_TYPE(wxEVT_CHAR, 212) - DECLARE_EVENT_TYPE(wxEVT_CHAR_HOOK, 213) - DECLARE_EVENT_TYPE(wxEVT_NAVIGATION_KEY, 214) - DECLARE_EVENT_TYPE(wxEVT_KEY_DOWN, 215) - DECLARE_EVENT_TYPE(wxEVT_KEY_UP, 216) -#if wxUSE_HOTKEY - DECLARE_EVENT_TYPE(wxEVT_HOTKEY, 217) -#endif - // Set cursor event - DECLARE_EVENT_TYPE(wxEVT_SET_CURSOR, 230) - - // wxScrollBar and wxSlider event identifiers - DECLARE_EVENT_TYPE(wxEVT_SCROLL_TOP, 300) - DECLARE_EVENT_TYPE(wxEVT_SCROLL_BOTTOM, 301) - DECLARE_EVENT_TYPE(wxEVT_SCROLL_LINEUP, 302) - DECLARE_EVENT_TYPE(wxEVT_SCROLL_LINEDOWN, 303) - DECLARE_EVENT_TYPE(wxEVT_SCROLL_PAGEUP, 304) - DECLARE_EVENT_TYPE(wxEVT_SCROLL_PAGEDOWN, 305) - DECLARE_EVENT_TYPE(wxEVT_SCROLL_THUMBTRACK, 306) - DECLARE_EVENT_TYPE(wxEVT_SCROLL_THUMBRELEASE, 307) - DECLARE_EVENT_TYPE(wxEVT_SCROLL_CHANGED, 308) - - // Scroll events from wxWindow - DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_TOP, 320) - DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_BOTTOM, 321) - DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_LINEUP, 322) - DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_LINEDOWN, 323) - DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_PAGEUP, 324) - DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_PAGEDOWN, 325) - DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_THUMBTRACK, 326) - DECLARE_EVENT_TYPE(wxEVT_SCROLLWIN_THUMBRELEASE, 327) - - // System events - DECLARE_EVENT_TYPE(wxEVT_SIZE, 400) - DECLARE_EVENT_TYPE(wxEVT_MOVE, 401) - DECLARE_EVENT_TYPE(wxEVT_CLOSE_WINDOW, 402) - DECLARE_EVENT_TYPE(wxEVT_END_SESSION, 403) - DECLARE_EVENT_TYPE(wxEVT_QUERY_END_SESSION, 404) - DECLARE_EVENT_TYPE(wxEVT_ACTIVATE_APP, 405) - // 406..408 are power events - DECLARE_EVENT_TYPE(wxEVT_ACTIVATE, 409) - DECLARE_EVENT_TYPE(wxEVT_CREATE, 410) - DECLARE_EVENT_TYPE(wxEVT_DESTROY, 411) - DECLARE_EVENT_TYPE(wxEVT_SHOW, 412) - DECLARE_EVENT_TYPE(wxEVT_ICONIZE, 413) - DECLARE_EVENT_TYPE(wxEVT_MAXIMIZE, 414) - DECLARE_EVENT_TYPE(wxEVT_MOUSE_CAPTURE_CHANGED, 415) - DECLARE_EVENT_TYPE(wxEVT_MOUSE_CAPTURE_LOST, 416) - DECLARE_EVENT_TYPE(wxEVT_PAINT, 417) - DECLARE_EVENT_TYPE(wxEVT_ERASE_BACKGROUND, 418) - DECLARE_EVENT_TYPE(wxEVT_NC_PAINT, 419) - DECLARE_EVENT_TYPE(wxEVT_PAINT_ICON, 420) - DECLARE_EVENT_TYPE(wxEVT_MENU_OPEN, 421) - DECLARE_EVENT_TYPE(wxEVT_MENU_CLOSE, 422) - DECLARE_EVENT_TYPE(wxEVT_MENU_HIGHLIGHT, 423) - DECLARE_EVENT_TYPE(wxEVT_CONTEXT_MENU, 424) - DECLARE_EVENT_TYPE(wxEVT_SYS_COLOUR_CHANGED, 425) - DECLARE_EVENT_TYPE(wxEVT_DISPLAY_CHANGED, 426) - DECLARE_EVENT_TYPE(wxEVT_SETTING_CHANGED, 427) - DECLARE_EVENT_TYPE(wxEVT_QUERY_NEW_PALETTE, 428) - DECLARE_EVENT_TYPE(wxEVT_PALETTE_CHANGED, 429) - DECLARE_EVENT_TYPE(wxEVT_JOY_BUTTON_DOWN, 430) - DECLARE_EVENT_TYPE(wxEVT_JOY_BUTTON_UP, 431) - DECLARE_EVENT_TYPE(wxEVT_JOY_MOVE, 432) - DECLARE_EVENT_TYPE(wxEVT_JOY_ZMOVE, 433) - DECLARE_EVENT_TYPE(wxEVT_DROP_FILES, 434) - DECLARE_EVENT_TYPE(wxEVT_DRAW_ITEM, 435) - DECLARE_EVENT_TYPE(wxEVT_MEASURE_ITEM, 436) - DECLARE_EVENT_TYPE(wxEVT_COMPARE_ITEM, 437) - DECLARE_EVENT_TYPE(wxEVT_INIT_DIALOG, 438) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_IDLE, 439) - DECLARE_EVENT_TYPE(wxEVT_UPDATE_UI, 440) - DECLARE_EVENT_TYPE(wxEVT_SIZING, 441) - DECLARE_EVENT_TYPE(wxEVT_MOVING, 442) - DECLARE_EVENT_TYPE(wxEVT_HIBERNATE, 443) - // more power events follow -- see wx/power.h - - // Clipboard events - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_COPY, 444) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_CUT, 445) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_PASTE, 446) - - // Generic command events - // Note: a click is a higher-level event than button down/up - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LEFT_CLICK, 500) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LEFT_DCLICK, 501) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_RIGHT_CLICK, 502) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_RIGHT_DCLICK, 503) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_SET_FOCUS, 504) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_KILL_FOCUS, 505) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_ENTER, 506) - - // Help events - DECLARE_EVENT_TYPE(wxEVT_HELP, 1050) - DECLARE_EVENT_TYPE(wxEVT_DETAILED_HELP, 1051) - -END_DECLARE_EVENT_TYPES() - -// these 2 events are the same -#define wxEVT_COMMAND_TOOL_CLICKED wxEVT_COMMAND_MENU_SELECTED - -// ---------------------------------------------------------------------------- -// Compatibility -// ---------------------------------------------------------------------------- - -// this event is also used by wxComboBox and wxSpinCtrl which don't include -// wx/textctrl.h in all ports [yet], so declare it here as well -// -// still, any new code using it should include wx/textctrl.h explicitly -#if !WXWIN_COMPATIBILITY_EVENT_TYPES - extern const wxEventType WXDLLIMPEXP_CORE wxEVT_COMMAND_TEXT_UPDATED; -#endif - -// the predefined constants for the number of times we propagate event -// upwards window child-parent chain -enum Propagation_state -{ - // don't propagate it at all - wxEVENT_PROPAGATE_NONE = 0, - - // propagate it until it is processed - wxEVENT_PROPAGATE_MAX = INT_MAX -}; - -/* - * wxWidgets events, covering all interesting things that might happen - * (button clicking, resizing, setting text in widgets, etc.). - * - * For each completely new event type, derive a new event class. - * An event CLASS represents a C++ class defining a range of similar event TYPES; - * examples are canvas events, panel item command events. - * An event TYPE is a unique identifier for a particular system event, - * such as a button press or a listbox deselection. - * - */ - -class WXDLLIMPEXP_BASE wxEvent : public wxObject -{ -private: - wxEvent& operator=(const wxEvent&); - -protected: - wxEvent(const wxEvent&); // for implementing Clone() - -public: - wxEvent(int winid = 0, wxEventType commandType = wxEVT_NULL ); - - void SetEventType(wxEventType typ) { m_eventType = typ; } - wxEventType GetEventType() const { return m_eventType; } - wxObject *GetEventObject() const { return m_eventObject; } - void SetEventObject(wxObject *obj) { m_eventObject = obj; } - long GetTimestamp() const { return m_timeStamp; } - void SetTimestamp(long ts = 0) { m_timeStamp = ts; } - int GetId() const { return m_id; } - void SetId(int Id) { m_id = Id; } - - // Can instruct event processor that we wish to ignore this event - // (treat as if the event table entry had not been found): this must be done - // to allow the event processing by the base classes (calling event.Skip() - // is the analog of calling the base class version of a virtual function) - void Skip(bool skip = true) { m_skipped = skip; } - bool GetSkipped() const { return m_skipped; } - - // this function is used to create a copy of the event polymorphically and - // all derived classes must implement it because otherwise wxPostEvent() - // for them wouldn't work (it needs to do a copy of the event) - virtual wxEvent *Clone() const = 0; - - // Implementation only: this test is explicitly anti OO and this function - // exists only for optimization purposes. - bool IsCommandEvent() const { return m_isCommandEvent; } - - // Determine if this event should be propagating to the parent window. - bool ShouldPropagate() const - { return m_propagationLevel != wxEVENT_PROPAGATE_NONE; } - - // Stop an event from propagating to its parent window, returns the old - // propagation level value - int StopPropagation() - { - int propagationLevel = m_propagationLevel; - m_propagationLevel = wxEVENT_PROPAGATE_NONE; - return propagationLevel; - } - - // Resume the event propagation by restoring the propagation level - // (returned by StopPropagation()) - void ResumePropagation(int propagationLevel) - { - m_propagationLevel = propagationLevel; - } - -#if WXWIN_COMPATIBILITY_2_4 -public: -#else -protected: -#endif - wxObject* m_eventObject; - wxEventType m_eventType; - long m_timeStamp; - int m_id; - -public: - // m_callbackUserData is for internal usage only - wxObject* m_callbackUserData; - -protected: - // the propagation level: while it is positive, we propagate the event to - // the parent window (if any) - // - // this one doesn't have to be public, we don't have to worry about - // backwards compatibility as it is new - int m_propagationLevel; - -#if WXWIN_COMPATIBILITY_2_4 -public: -#else -protected: -#endif - bool m_skipped; - bool m_isCommandEvent; - -private: - // it needs to access our m_propagationLevel - friend class WXDLLIMPEXP_FWD_BASE wxPropagateOnce; - - DECLARE_ABSTRACT_CLASS(wxEvent) -}; - -/* - * Helper class to temporarily change an event not to propagate. - */ -class WXDLLIMPEXP_BASE wxPropagationDisabler -{ -public: - wxPropagationDisabler(wxEvent& event) : m_event(event) - { - m_propagationLevelOld = m_event.StopPropagation(); - } - - ~wxPropagationDisabler() - { - m_event.ResumePropagation(m_propagationLevelOld); - } - -private: - wxEvent& m_event; - int m_propagationLevelOld; - - DECLARE_NO_COPY_CLASS(wxPropagationDisabler) -}; - -/* - * Another one to temporarily lower propagation level. - */ -class WXDLLIMPEXP_BASE wxPropagateOnce -{ -public: - wxPropagateOnce(wxEvent& event) : m_event(event) - { - wxASSERT_MSG( m_event.m_propagationLevel > 0, - _T("shouldn't be used unless ShouldPropagate()!") ); - - m_event.m_propagationLevel--; - } - - ~wxPropagateOnce() - { - m_event.m_propagationLevel++; - } - -private: - wxEvent& m_event; - - DECLARE_NO_COPY_CLASS(wxPropagateOnce) -}; - -#if wxUSE_GUI - - -// Item or menu event class -/* - wxEVT_COMMAND_BUTTON_CLICKED - wxEVT_COMMAND_CHECKBOX_CLICKED - wxEVT_COMMAND_CHOICE_SELECTED - wxEVT_COMMAND_LISTBOX_SELECTED - wxEVT_COMMAND_LISTBOX_DOUBLECLICKED - wxEVT_COMMAND_TEXT_UPDATED - wxEVT_COMMAND_TEXT_ENTER - wxEVT_COMMAND_MENU_SELECTED - wxEVT_COMMAND_SLIDER_UPDATED - wxEVT_COMMAND_RADIOBOX_SELECTED - wxEVT_COMMAND_RADIOBUTTON_SELECTED - wxEVT_COMMAND_SCROLLBAR_UPDATED - wxEVT_COMMAND_VLBOX_SELECTED - wxEVT_COMMAND_COMBOBOX_SELECTED - wxEVT_COMMAND_TOGGLEBUTTON_CLICKED -*/ - -#if WXWIN_COMPATIBILITY_2_4 -// Backwards compatibility for wxCommandEvent::m_commandString, will lead to compilation errors in some cases of usage -class WXDLLIMPEXP_CORE wxCommandEvent; - -class WXDLLIMPEXP_CORE wxCommandEventStringHelper -{ -public: - wxCommandEventStringHelper(wxCommandEvent * evt) - : m_evt(evt) - { } - - void operator=(const wxString &str); - operator wxString(); - const wxChar* c_str() const; - -private: - wxCommandEvent* m_evt; -}; -#endif - -class WXDLLIMPEXP_CORE wxCommandEvent : public wxEvent -{ -public: - wxCommandEvent(wxEventType commandType = wxEVT_NULL, int winid = 0); - - wxCommandEvent(const wxCommandEvent& event) - : wxEvent(event), -#if WXWIN_COMPATIBILITY_2_4 - m_commandString(this), -#endif - m_cmdString(event.m_cmdString), - m_commandInt(event.m_commandInt), - m_extraLong(event.m_extraLong), - m_clientData(event.m_clientData), - m_clientObject(event.m_clientObject) - { } - - // Set/Get client data from controls - void SetClientData(void* clientData) { m_clientData = clientData; } - void *GetClientData() const { return m_clientData; } - - // Set/Get client object from controls - void SetClientObject(wxClientData* clientObject) { m_clientObject = clientObject; } - wxClientData *GetClientObject() const { return m_clientObject; } - - // 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); } - -#if WXWIN_COMPATIBILITY_2_4 -public: - wxCommandEventStringHelper m_commandString; -#else -protected: -#endif - 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 - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCommandEvent) -}; - -#if WXWIN_COMPATIBILITY_2_4 -inline void wxCommandEventStringHelper::operator=(const wxString &str) -{ - m_evt->SetString(str); -} - -inline wxCommandEventStringHelper::operator wxString() -{ - return m_evt->GetString(); -} - -inline const wxChar* wxCommandEventStringHelper::c_str() const -{ - return m_evt->GetString().c_str(); -} -#endif - -// this class adds a possibility to react (from the user) code to a control -// notification: allow or veto the operation being reported. -class WXDLLIMPEXP_CORE wxNotifyEvent : public wxCommandEvent -{ -public: - wxNotifyEvent(wxEventType commandType = wxEVT_NULL, int winid = 0) - : wxCommandEvent(commandType, winid) - { m_bAllow = true; } - - wxNotifyEvent(const wxNotifyEvent& event) - : wxCommandEvent(event) - { m_bAllow = event.m_bAllow; } - - // veto the operation (usually it's allowed by default) - void Veto() { m_bAllow = false; } - - // allow the operation if it was disabled by default - void Allow() { m_bAllow = true; } - - // for implementation code only: is the operation allowed? - bool IsAllowed() const { return m_bAllow; } - - virtual wxEvent *Clone() const { return new wxNotifyEvent(*this); } - -private: - bool m_bAllow; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxNotifyEvent) -}; - -// Scroll event class, derived form wxCommandEvent. wxScrollEvents are -// sent by wxSlider and wxScrollBar. -/* - wxEVT_SCROLL_TOP - wxEVT_SCROLL_BOTTOM - wxEVT_SCROLL_LINEUP - wxEVT_SCROLL_LINEDOWN - wxEVT_SCROLL_PAGEUP - wxEVT_SCROLL_PAGEDOWN - wxEVT_SCROLL_THUMBTRACK - wxEVT_SCROLL_THUMBRELEASE - wxEVT_SCROLL_CHANGED -*/ - -class WXDLLIMPEXP_CORE wxScrollEvent : public wxCommandEvent -{ -public: - wxScrollEvent(wxEventType commandType = wxEVT_NULL, - int winid = 0, int pos = 0, int orient = 0); - - int GetOrientation() const { return (int) m_extraLong; } - int GetPosition() const { return m_commandInt; } - void SetOrientation(int orient) { m_extraLong = (long) orient; } - void SetPosition(int pos) { m_commandInt = pos; } - - virtual wxEvent *Clone() const { return new wxScrollEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxScrollEvent) -}; - -// ScrollWin event class, derived fom wxEvent. wxScrollWinEvents -// are sent by wxWindow. -/* - wxEVT_SCROLLWIN_TOP - wxEVT_SCROLLWIN_BOTTOM - wxEVT_SCROLLWIN_LINEUP - wxEVT_SCROLLWIN_LINEDOWN - wxEVT_SCROLLWIN_PAGEUP - wxEVT_SCROLLWIN_PAGEDOWN - wxEVT_SCROLLWIN_THUMBTRACK - wxEVT_SCROLLWIN_THUMBRELEASE -*/ - -class WXDLLIMPEXP_CORE wxScrollWinEvent : public wxEvent -{ -public: - wxScrollWinEvent(wxEventType commandType = wxEVT_NULL, - int pos = 0, int orient = 0); - wxScrollWinEvent(const wxScrollWinEvent & event) : wxEvent(event) - { m_commandInt = event.m_commandInt; - m_extraLong = event.m_extraLong; } - - int GetOrientation() const { return (int) m_extraLong; } - int GetPosition() const { return m_commandInt; } - void SetOrientation(int orient) { m_extraLong = (long) orient; } - void SetPosition(int pos) { m_commandInt = pos; } - - virtual wxEvent *Clone() const { return new wxScrollWinEvent(*this); } - -#if WXWIN_COMPATIBILITY_2_4 -public: -#else -protected: -#endif - int m_commandInt; - long m_extraLong; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxScrollWinEvent) -}; - -// Mouse event class - -/* - wxEVT_LEFT_DOWN - wxEVT_LEFT_UP - wxEVT_MIDDLE_DOWN - wxEVT_MIDDLE_UP - wxEVT_RIGHT_DOWN - wxEVT_RIGHT_UP - wxEVT_MOTION - wxEVT_ENTER_WINDOW - wxEVT_LEAVE_WINDOW - 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, -*/ - -// the symbolic names for the mouse buttons -enum -{ - wxMOUSE_BTN_ANY = -1, - wxMOUSE_BTN_NONE = 0, - wxMOUSE_BTN_LEFT = 1, - wxMOUSE_BTN_MIDDLE = 2, - wxMOUSE_BTN_RIGHT = 3 -}; - -class WXDLLIMPEXP_CORE wxMouseEvent : public wxEvent -{ -public: - wxMouseEvent(wxEventType mouseType = wxEVT_NULL); - wxMouseEvent(const wxMouseEvent& event) : wxEvent(event) - { Assign(event); } - - // Was it a button event? (*doesn't* mean: is any button *down*?) - bool IsButton() const { return Button(wxMOUSE_BTN_ANY); } - - // Was it a down event from this (or any) button? - bool ButtonDown(int but = wxMOUSE_BTN_ANY) const; - - // Was it a dclick event from this (or any) button? - bool ButtonDClick(int but = wxMOUSE_BTN_ANY) const; - - // Was it a up event from this (or any) button? - bool ButtonUp(int but = wxMOUSE_BTN_ANY) const; - - // Was the given button? - bool Button(int but) const; - - // Was the given button in Down state? - bool ButtonIsDown(int but) const; - - // Get the button which is changing state (wxMOUSE_BTN_NONE if none) - int GetButton() const; - - // Find state of shift/control keys - bool ControlDown() const { return m_controlDown; } - bool MetaDown() const { return m_metaDown; } - bool AltDown() const { return m_altDown; } - bool ShiftDown() const { return m_shiftDown; } - bool CmdDown() const - { -#if defined(__WXMAC__) || defined(__WXCOCOA__) - return MetaDown(); -#else - return ControlDown(); -#endif - } - - // Find which event was just generated - bool LeftDown() const { return (m_eventType == wxEVT_LEFT_DOWN); } - bool MiddleDown() const { return (m_eventType == wxEVT_MIDDLE_DOWN); } - bool RightDown() const { return (m_eventType == wxEVT_RIGHT_DOWN); } - - bool LeftUp() const { return (m_eventType == wxEVT_LEFT_UP); } - bool MiddleUp() const { return (m_eventType == wxEVT_MIDDLE_UP); } - bool RightUp() const { return (m_eventType == wxEVT_RIGHT_UP); } - - 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); } - - // Find the current state of the mouse buttons (regardless - // of current event type) - bool LeftIsDown() const { return m_leftDown; } - bool MiddleIsDown() const { return m_middleDown; } - bool RightIsDown() const { return m_rightDown; } - - // True if a button is down and the mouse is moving - bool Dragging() const - { - return (m_eventType == wxEVT_MOTION) && ButtonIsDown(wxMOUSE_BTN_ANY); - } - - // True if the mouse is moving, and no button is down - bool Moving() const - { - return (m_eventType == wxEVT_MOTION) && !ButtonIsDown(wxMOUSE_BTN_ANY); - } - - // True if the mouse is just entering the window - bool Entering() const { return (m_eventType == wxEVT_ENTER_WINDOW); } - - // True if the mouse is just leaving the window - bool Leaving() const { return (m_eventType == wxEVT_LEAVE_WINDOW); } - - // Find the position of the event - void GetPosition(wxCoord *xpos, wxCoord *ypos) const - { - if (xpos) - *xpos = m_x; - if (ypos) - *ypos = m_y; - } - - void GetPosition(long *xpos, long *ypos) const - { - if (xpos) - *xpos = (long)m_x; - if (ypos) - *ypos = (long)m_y; - } - - // Find the position of the event - wxPoint GetPosition() const { return wxPoint(m_x, m_y); } - - // Find the logical position of the event given the DC - wxPoint GetLogicalPosition(const wxDC& dc) const; - - // Get X position - wxCoord GetX() const { return m_x; } - - // Get Y position - wxCoord GetY() const { return m_y; } - - // Get wheel rotation, positive or negative indicates direction of - // rotation. Current devices all send an event when rotation is equal to - // +/-WheelDelta, but this allows for finer resolution devices to be - // created in the future. Because of this you shouldn't assume that one - // event is equal to 1 line or whatever, but you should be able to either - // do partial line scrolling or wait until +/-WheelDelta rotation values - // have been accumulated before scrolling. - int GetWheelRotation() const { return m_wheelRotation; } - - // Get wheel delta, normally 120. This is the threshold for action to be - // taken, and one such action (for example, scrolling one increment) - // should occur for each delta. - int GetWheelDelta() const { return m_wheelDelta; } - - // Returns the configured number of lines (or whatever) to be scrolled per - // wheel action. Defaults to one. - int GetLinesPerAction() const { return m_linesPerAction; } - - // Is the system set to do page scrolling? - bool IsPageScroll() const { return ((unsigned int)m_linesPerAction == UINT_MAX); } - - virtual wxEvent *Clone() const { return new wxMouseEvent(*this); } - - wxMouseEvent& operator=(const wxMouseEvent& event) { Assign(event); return *this; } - -public: - wxCoord m_x, m_y; - - bool m_leftDown; - bool m_middleDown; - bool m_rightDown; - - bool m_controlDown; - bool m_shiftDown; - bool m_altDown; - bool m_metaDown; - - int m_wheelRotation; - int m_wheelDelta; - int m_linesPerAction; - -protected: - void Assign(const wxMouseEvent& evt); - -private: - DECLARE_DYNAMIC_CLASS(wxMouseEvent) -}; - -// Cursor set event - -/* - wxEVT_SET_CURSOR - */ - -class WXDLLIMPEXP_CORE wxSetCursorEvent : public wxEvent -{ -public: - wxSetCursorEvent(wxCoord x = 0, wxCoord y = 0) - : wxEvent(0, wxEVT_SET_CURSOR), - m_x(x), m_y(y), m_cursor() - { } - - wxSetCursorEvent(const wxSetCursorEvent & event) - : wxEvent(event), - m_x(event.m_x), - m_y(event.m_y), - m_cursor(event.m_cursor) - { } - - wxCoord GetX() const { return m_x; } - wxCoord GetY() const { return m_y; } - - void SetCursor(const wxCursor& cursor) { m_cursor = cursor; } - const wxCursor& GetCursor() const { return m_cursor; } - bool HasCursor() const { return m_cursor.Ok(); } - - virtual wxEvent *Clone() const { return new wxSetCursorEvent(*this); } - -private: - wxCoord m_x, m_y; - wxCursor m_cursor; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxSetCursorEvent) -}; - -// Keyboard input event class - -/* - wxEVT_CHAR - wxEVT_CHAR_HOOK - wxEVT_KEY_DOWN - wxEVT_KEY_UP - wxEVT_HOTKEY - */ - -class WXDLLIMPEXP_CORE wxKeyEvent : public wxEvent -{ -public: - wxKeyEvent(wxEventType keyType = wxEVT_NULL); - wxKeyEvent(const wxKeyEvent& evt); - - // can be used check if the key event has exactly the given modifiers: - // "GetModifiers() = wxMOD_CONTROL" is easier to write than "ControlDown() - // && !MetaDown() && !AltDown() && !ShiftDown()" - int GetModifiers() const - { - return (m_controlDown ? wxMOD_CONTROL : 0) | - (m_shiftDown ? wxMOD_SHIFT : 0) | - (m_metaDown ? wxMOD_META : 0) | - (m_altDown ? wxMOD_ALT : 0); - } - - // Find state of shift/control keys - bool ControlDown() const { return m_controlDown; } - bool ShiftDown() const { return m_shiftDown; } - bool MetaDown() const { return m_metaDown; } - bool AltDown() const { return m_altDown; } - - // "Cmd" is a pseudo key which is Control for PC and Unix platforms but - // Apple ("Command") key under Macs: it makes often sense to use it instead - // of, say, ControlDown() because Cmd key is used for the same thing under - // Mac as Ctrl elsewhere (but Ctrl still exists, just not used for this - // purpose under Mac) - bool CmdDown() const - { -#if defined(__WXMAC__) || defined(__WXCOCOA__) - return MetaDown(); -#else - return ControlDown(); -#endif - } - - // exclude MetaDown() from HasModifiers() because NumLock under X is often - // configured as mod2 modifier, yet the key events even when it is pressed - // should be processed normally, not like Ctrl- or Alt-key - bool HasModifiers() const { return ControlDown() || AltDown(); } - - // get the key code: an ASCII7 char or an element of wxKeyCode enum - int GetKeyCode() const { return (int)m_keyCode; } - -#if wxUSE_UNICODE - // get the Unicode character corresponding to this key - wxChar GetUnicodeKey() const { return m_uniChar; } -#endif // wxUSE_UNICODE - - // get the raw key code (platform-dependent) - wxUint32 GetRawKeyCode() const { return m_rawCode; } - - // get the raw key flags (platform-dependent) - wxUint32 GetRawKeyFlags() const { return m_rawFlags; } - - // Find the position of the event - void GetPosition(wxCoord *xpos, wxCoord *ypos) const - { - if (xpos) *xpos = m_x; - if (ypos) *ypos = m_y; - } - - void GetPosition(long *xpos, long *ypos) const - { - if (xpos) *xpos = (long)m_x; - if (ypos) *ypos = (long)m_y; - } - - wxPoint GetPosition() const - { return wxPoint(m_x, m_y); } - - // Get X position - wxCoord GetX() const { return m_x; } - - // Get Y position - wxCoord GetY() const { return m_y; } - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, Use GetKeyCode instead. - wxDEPRECATED( long KeyCode() const ); -#endif // WXWIN_COMPATIBILITY_2_6 - - virtual wxEvent *Clone() const { return new wxKeyEvent(*this); } - - // we do need to copy wxKeyEvent sometimes (in wxTreeCtrl code, for - // example) - wxKeyEvent& operator=(const wxKeyEvent& evt) - { - m_x = evt.m_x; - m_y = evt.m_y; - - m_keyCode = evt.m_keyCode; - - m_controlDown = evt.m_controlDown; - m_shiftDown = evt.m_shiftDown; - m_altDown = evt.m_altDown; - m_metaDown = evt.m_metaDown; - m_scanCode = evt.m_scanCode; - m_rawCode = evt.m_rawCode; - m_rawFlags = evt.m_rawFlags; -#if wxUSE_UNICODE - m_uniChar = evt.m_uniChar; -#endif - - return *this; - } - -public: - wxCoord m_x, m_y; - - long m_keyCode; - - // TODO: replace those with a single m_modifiers bitmask of wxMOD_XXX? - bool m_controlDown; - bool m_shiftDown; - bool m_altDown; - bool m_metaDown; - - // FIXME: what is this for? relation to m_rawXXX? - bool m_scanCode; - -#if wxUSE_UNICODE - // This contains the full Unicode character - // in a character events in Unicode mode - wxChar m_uniChar; -#endif - - // these fields contain the platform-specific information about - // key that was pressed - wxUint32 m_rawCode; - wxUint32 m_rawFlags; - -private: - DECLARE_DYNAMIC_CLASS(wxKeyEvent) -}; - -// Size event class -/* - wxEVT_SIZE - */ - -class WXDLLIMPEXP_CORE wxSizeEvent : public wxEvent -{ -public: - wxSizeEvent() : wxEvent(0, wxEVT_SIZE) - { } - wxSizeEvent(const wxSize& sz, int winid = 0) - : wxEvent(winid, wxEVT_SIZE), - m_size(sz) - { } - wxSizeEvent(const wxSizeEvent & event) - : wxEvent(event), - m_size(event.m_size), m_rect(event.m_rect) - { } - wxSizeEvent(const wxRect& rect, int id = 0) - : m_size(rect.GetSize()), m_rect(rect) - { m_eventType = wxEVT_SIZING; m_id = id; } - - wxSize GetSize() const { return m_size; } - wxRect GetRect() const { return m_rect; } - void SetRect(const wxRect& rect) { m_rect = rect; } - - virtual wxEvent *Clone() const { return new wxSizeEvent(*this); } - -public: - // For internal usage only. Will be converted to protected members. - wxSize m_size; - wxRect m_rect; // Used for wxEVT_SIZING - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxSizeEvent) -}; - -// Move event class - -/* - wxEVT_MOVE - */ - -class WXDLLIMPEXP_CORE wxMoveEvent : public wxEvent -{ -public: - wxMoveEvent() - : wxEvent(0, wxEVT_MOVE) - { } - wxMoveEvent(const wxPoint& pos, int winid = 0) - : wxEvent(winid, wxEVT_MOVE), - m_pos(pos) - { } - wxMoveEvent(const wxMoveEvent& event) - : wxEvent(event), - m_pos(event.m_pos) - { } - wxMoveEvent(const wxRect& rect, int id = 0) - : m_pos(rect.GetPosition()), m_rect(rect) - { m_eventType = wxEVT_MOVING; m_id = id; } - - wxPoint GetPosition() const { return m_pos; } - void SetPosition(const wxPoint& pos) { m_pos = pos; } - wxRect GetRect() const { return m_rect; } - void SetRect(const wxRect& rect) { m_rect = rect; } - - virtual wxEvent *Clone() const { return new wxMoveEvent(*this); } - -#if WXWIN_COMPATIBILITY_2_4 -public: -#else -protected: -#endif - wxPoint m_pos; - wxRect m_rect; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxMoveEvent) -}; - -// Paint event class -/* - wxEVT_PAINT - wxEVT_NC_PAINT - wxEVT_PAINT_ICON - */ - -#if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__)) - // see comments in src/msw|os2/dcclient.cpp where g_isPainting is defined - extern WXDLLIMPEXP_CORE int g_isPainting; -#endif // debug - -class WXDLLIMPEXP_CORE wxPaintEvent : public wxEvent -{ -public: - wxPaintEvent(int Id = 0) - : wxEvent(Id, wxEVT_PAINT) - { -#if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__)) - // set the internal flag for the duration of processing of WM_PAINT - g_isPainting++; -#endif // debug - } - - // default copy ctor and dtor are normally fine, we only need them to keep - // g_isPainting updated in debug build -#if defined(__WXDEBUG__) && (defined(__WXMSW__) || defined(__WXPM__)) - wxPaintEvent(const wxPaintEvent& event) - : wxEvent(event) - { - g_isPainting++; - } - - virtual ~wxPaintEvent() - { - g_isPainting--; - } -#endif // debug - - virtual wxEvent *Clone() const { return new wxPaintEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxPaintEvent) -}; - -class WXDLLIMPEXP_CORE wxNcPaintEvent : public wxEvent -{ -public: - wxNcPaintEvent(int winid = 0) - : wxEvent(winid, wxEVT_NC_PAINT) - { } - - virtual wxEvent *Clone() const { return new wxNcPaintEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxNcPaintEvent) -}; - -// Erase background event class -/* - wxEVT_ERASE_BACKGROUND - */ - -class WXDLLIMPEXP_CORE wxEraseEvent : public wxEvent -{ -public: - wxEraseEvent(int Id = 0, wxDC *dc = (wxDC *) NULL) - : wxEvent(Id, wxEVT_ERASE_BACKGROUND), - m_dc(dc) - { } - - wxEraseEvent(const wxEraseEvent& event) - : wxEvent(event), - m_dc(event.m_dc) - { } - - wxDC *GetDC() const { return m_dc; } - - virtual wxEvent *Clone() const { return new wxEraseEvent(*this); } - -#if WXWIN_COMPATIBILITY_2_4 -public: -#else -protected: -#endif - wxDC *m_dc; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxEraseEvent) -}; - -// Focus event class -/* - wxEVT_SET_FOCUS - wxEVT_KILL_FOCUS - */ - -class WXDLLIMPEXP_CORE wxFocusEvent : public wxEvent -{ -public: - wxFocusEvent(wxEventType type = wxEVT_NULL, int winid = 0) - : wxEvent(winid, type) - { m_win = NULL; } - - wxFocusEvent(const wxFocusEvent& event) - : wxEvent(event) - { m_win = event.m_win; } - - // The window associated with this event is the window which had focus - // before for SET event and the window which will have focus for the KILL - // one. NB: it may be NULL in both cases! - wxWindow *GetWindow() const { return m_win; } - void SetWindow(wxWindow *win) { m_win = win; } - - virtual wxEvent *Clone() const { return new wxFocusEvent(*this); } - -private: - wxWindow *m_win; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxFocusEvent) -}; - -// wxChildFocusEvent notifies the parent that a child has got the focus: unlike -// wxFocusEvent it is propagated upwards the window chain -class WXDLLIMPEXP_CORE wxChildFocusEvent : public wxCommandEvent -{ -public: - wxChildFocusEvent(wxWindow *win = NULL); - - wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); } - - virtual wxEvent *Clone() const { return new wxChildFocusEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxChildFocusEvent) -}; - -// Activate event class -/* - wxEVT_ACTIVATE - wxEVT_ACTIVATE_APP - wxEVT_HIBERNATE - */ - -class WXDLLIMPEXP_CORE wxActivateEvent : public wxEvent -{ -public: - wxActivateEvent(wxEventType type = wxEVT_NULL, bool active = true, int Id = 0) - : wxEvent(Id, type) - { m_active = active; } - wxActivateEvent(const wxActivateEvent& event) - : wxEvent(event) - { m_active = event.m_active; } - - bool GetActive() const { return m_active; } - - virtual wxEvent *Clone() const { return new wxActivateEvent(*this); } - -private: - bool m_active; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxActivateEvent) -}; - -// InitDialog event class -/* - wxEVT_INIT_DIALOG - */ - -class WXDLLIMPEXP_CORE wxInitDialogEvent : public wxEvent -{ -public: - wxInitDialogEvent(int Id = 0) - : wxEvent(Id, wxEVT_INIT_DIALOG) - { } - - virtual wxEvent *Clone() const { return new wxInitDialogEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxInitDialogEvent) -}; - -// Miscellaneous menu event class -/* - wxEVT_MENU_OPEN, - wxEVT_MENU_CLOSE, - wxEVT_MENU_HIGHLIGHT, -*/ - -class WXDLLIMPEXP_CORE wxMenuEvent : public wxEvent -{ -public: - wxMenuEvent(wxEventType type = wxEVT_NULL, int winid = 0, wxMenu* menu = NULL) - : wxEvent(winid, type) - { m_menuId = winid; m_menu = menu; } - wxMenuEvent(const wxMenuEvent & event) - : wxEvent(event) - { m_menuId = event.m_menuId; m_menu = event.m_menu; } - - // only for wxEVT_MENU_HIGHLIGHT - int GetMenuId() const { return m_menuId; } - - // only for wxEVT_MENU_OPEN/CLOSE - bool IsPopup() const { return m_menuId == wxID_ANY; } - - // only for wxEVT_MENU_OPEN/CLOSE - wxMenu* GetMenu() const { return m_menu; } - - virtual wxEvent *Clone() const { return new wxMenuEvent(*this); } - -private: - int m_menuId; - wxMenu* m_menu; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxMenuEvent) -}; - -// Window close or session close event class -/* - wxEVT_CLOSE_WINDOW, - wxEVT_END_SESSION, - wxEVT_QUERY_END_SESSION - */ - -class WXDLLIMPEXP_CORE wxCloseEvent : public wxEvent -{ -public: - wxCloseEvent(wxEventType type = wxEVT_NULL, int winid = 0) - : wxEvent(winid, type), - m_loggingOff(true), - m_veto(false), // should be false by default - m_canVeto(true) {} - - wxCloseEvent(const wxCloseEvent & event) - : wxEvent(event), - m_loggingOff(event.m_loggingOff), - m_veto(event.m_veto), - m_canVeto(event.m_canVeto) {} - - void SetLoggingOff(bool logOff) { m_loggingOff = logOff; } - bool GetLoggingOff() const - { - // m_loggingOff flag is only used by wxEVT_[QUERY_]END_SESSION, it - // doesn't make sense for wxEVT_CLOSE_WINDOW - wxASSERT_MSG( m_eventType != wxEVT_CLOSE_WINDOW, - _T("this flag is for end session events only") ); - - return m_loggingOff; - } - - void Veto(bool veto = true) - { - // GetVeto() will return false anyhow... - wxCHECK_RET( m_canVeto, - wxT("call to Veto() ignored (can't veto this event)") ); - - m_veto = veto; - } - void SetCanVeto(bool canVeto) { m_canVeto = canVeto; } - bool CanVeto() const { return m_canVeto; } - bool GetVeto() const { return m_canVeto && m_veto; } - - virtual wxEvent *Clone() const { return new wxCloseEvent(*this); } - -protected: - bool m_loggingOff, - m_veto, - m_canVeto; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCloseEvent) -}; - -/* - wxEVT_SHOW - */ - -class WXDLLIMPEXP_CORE wxShowEvent : public wxEvent -{ -public: - wxShowEvent(int winid = 0, bool show = false) - : wxEvent(winid, wxEVT_SHOW) - { m_show = show; } - wxShowEvent(const wxShowEvent & event) - : wxEvent(event) - { m_show = event.m_show; } - - void SetShow(bool show) { m_show = show; } - bool GetShow() const { return m_show; } - - virtual wxEvent *Clone() const { return new wxShowEvent(*this); } - -protected: - bool m_show; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxShowEvent) -}; - -/* - wxEVT_ICONIZE - */ - -class WXDLLIMPEXP_CORE wxIconizeEvent : public wxEvent -{ -public: - wxIconizeEvent(int winid = 0, bool iconized = true) - : wxEvent(winid, wxEVT_ICONIZE) - { m_iconized = iconized; } - wxIconizeEvent(const wxIconizeEvent & event) - : wxEvent(event) - { m_iconized = event.m_iconized; } - - // return true if the frame was iconized, false if restored - bool Iconized() const { return m_iconized; } - - virtual wxEvent *Clone() const { return new wxIconizeEvent(*this); } - -protected: - bool m_iconized; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxIconizeEvent) -}; -/* - wxEVT_MAXIMIZE - */ - -class WXDLLIMPEXP_CORE wxMaximizeEvent : public wxEvent -{ -public: - wxMaximizeEvent(int winid = 0) - : wxEvent(winid, wxEVT_MAXIMIZE) - { } - - virtual wxEvent *Clone() const { return new wxMaximizeEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxMaximizeEvent) -}; - -// Joystick event class -/* - wxEVT_JOY_BUTTON_DOWN, - wxEVT_JOY_BUTTON_UP, - wxEVT_JOY_MOVE, - wxEVT_JOY_ZMOVE -*/ - -// Which joystick? Same as Windows ids so no conversion necessary. -enum -{ - wxJOYSTICK1, - wxJOYSTICK2 -}; - -// Which button is down? -enum -{ - wxJOY_BUTTON_ANY = -1, - wxJOY_BUTTON1 = 1, - wxJOY_BUTTON2 = 2, - wxJOY_BUTTON3 = 4, - wxJOY_BUTTON4 = 8 -}; - -class WXDLLIMPEXP_CORE wxJoystickEvent : public wxEvent -{ -#if WXWIN_COMPATIBILITY_2_4 -public: -#else -protected: -#endif - wxPoint m_pos; - int m_zPosition; - int m_buttonChange; // Which button changed? - int m_buttonState; // Which buttons are down? - int m_joyStick; // Which joystick? - -public: - wxJoystickEvent(wxEventType type = wxEVT_NULL, - int state = 0, - int joystick = wxJOYSTICK1, - int change = 0) - : wxEvent(0, type), - m_pos(), - m_zPosition(0), - m_buttonChange(change), - m_buttonState(state), - m_joyStick(joystick) - { - } - wxJoystickEvent(const wxJoystickEvent & event) - : wxEvent(event), - m_pos(event.m_pos), - m_zPosition(event.m_zPosition), - m_buttonChange(event.m_buttonChange), - m_buttonState(event.m_buttonState), - m_joyStick(event.m_joyStick) - { } - - wxPoint GetPosition() const { return m_pos; } - int GetZPosition() const { return m_zPosition; } - int GetButtonState() const { return m_buttonState; } - int GetButtonChange() const { return m_buttonChange; } - int GetJoystick() const { return m_joyStick; } - - void SetJoystick(int stick) { m_joyStick = stick; } - void SetButtonState(int state) { m_buttonState = state; } - void SetButtonChange(int change) { m_buttonChange = change; } - void SetPosition(const wxPoint& pos) { m_pos = pos; } - void SetZPosition(int zPos) { m_zPosition = zPos; } - - // Was it a button event? (*doesn't* mean: is any button *down*?) - bool IsButton() const { return ((GetEventType() == wxEVT_JOY_BUTTON_DOWN) || - (GetEventType() == wxEVT_JOY_BUTTON_UP)); } - - // Was it a move event? - bool IsMove() const { return (GetEventType() == wxEVT_JOY_MOVE); } - - // Was it a zmove event? - bool IsZMove() const { return (GetEventType() == wxEVT_JOY_ZMOVE); } - - // Was it a down event from button 1, 2, 3, 4 or any? - bool ButtonDown(int but = wxJOY_BUTTON_ANY) const - { return ((GetEventType() == wxEVT_JOY_BUTTON_DOWN) && - ((but == wxJOY_BUTTON_ANY) || (but == m_buttonChange))); } - - // Was it a up event from button 1, 2, 3 or any? - bool ButtonUp(int but = wxJOY_BUTTON_ANY) const - { return ((GetEventType() == wxEVT_JOY_BUTTON_UP) && - ((but == wxJOY_BUTTON_ANY) || (but == m_buttonChange))); } - - // Was the given button 1,2,3,4 or any in Down state? - bool ButtonIsDown(int but = wxJOY_BUTTON_ANY) const - { return (((but == wxJOY_BUTTON_ANY) && (m_buttonState != 0)) || - ((m_buttonState & but) == but)); } - - virtual wxEvent *Clone() const { return new wxJoystickEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxJoystickEvent) -}; - -// Drop files event class -/* - wxEVT_DROP_FILES - */ - -class WXDLLIMPEXP_CORE wxDropFilesEvent : public wxEvent -{ -public: - int m_noFiles; - wxPoint m_pos; - wxString* m_files; - - wxDropFilesEvent(wxEventType type = wxEVT_NULL, - int noFiles = 0, - wxString *files = (wxString *) NULL) - : wxEvent(0, type), - m_noFiles(noFiles), - m_pos(), - m_files(files) - { } - - // we need a copy ctor to avoid deleting m_files pointer twice - wxDropFilesEvent(const wxDropFilesEvent& other) - : wxEvent(other), - m_noFiles(other.m_noFiles), - m_pos(other.m_pos), - m_files(NULL) - { - m_files = new wxString[m_noFiles]; - for ( int n = 0; n < m_noFiles; n++ ) - { - m_files[n] = other.m_files[n]; - } - } - - virtual ~wxDropFilesEvent() - { - delete [] m_files; - } - - wxPoint GetPosition() const { return m_pos; } - int GetNumberOfFiles() const { return m_noFiles; } - wxString *GetFiles() const { return m_files; } - - virtual wxEvent *Clone() const { return new wxDropFilesEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDropFilesEvent) -}; - -// Update UI event -/* - wxEVT_UPDATE_UI - */ - -// Whether to always send update events to windows, or -// to only send update events to those with the -// wxWS_EX_PROCESS_UI_UPDATES style. - -enum wxUpdateUIMode -{ - // Send UI update events to all windows - wxUPDATE_UI_PROCESS_ALL, - - // Send UI update events to windows that have - // the wxWS_EX_PROCESS_UI_UPDATES flag specified - wxUPDATE_UI_PROCESS_SPECIFIED -}; - -class WXDLLIMPEXP_CORE wxUpdateUIEvent : public wxCommandEvent -{ -public: - wxUpdateUIEvent(wxWindowID commandId = 0) - : wxCommandEvent(wxEVT_UPDATE_UI, commandId) - { - m_checked = - m_enabled = - m_shown = - m_setEnabled = - m_setShown = - m_setText = - m_setChecked = false; - } - wxUpdateUIEvent(const wxUpdateUIEvent & event) - : wxCommandEvent(event), - m_checked(event.m_checked), - m_enabled(event.m_enabled), - m_shown(event.m_shown), - m_setEnabled(event.m_setEnabled), - m_setShown(event.m_setShown), - m_setText(event.m_setText), - m_setChecked(event.m_setChecked), - m_text(event.m_text) - { } - - bool GetChecked() const { return m_checked; } - bool GetEnabled() const { return m_enabled; } - bool GetShown() const { return m_shown; } - wxString GetText() const { return m_text; } - bool GetSetText() const { return m_setText; } - bool GetSetChecked() const { return m_setChecked; } - bool GetSetEnabled() const { return m_setEnabled; } - bool GetSetShown() const { return m_setShown; } - - void Check(bool check) { m_checked = check; m_setChecked = true; } - void Enable(bool enable) { m_enabled = enable; m_setEnabled = true; } - void Show(bool show) { m_shown = show; m_setShown = true; } - void SetText(const wxString& text) { m_text = text; m_setText = true; } - - // Sets the interval between updates in milliseconds. - // Set to -1 to disable updates, or to 0 to update as frequently as possible. - static void SetUpdateInterval(long updateInterval) { sm_updateInterval = updateInterval; } - - // Returns the current interval between updates in milliseconds - static long GetUpdateInterval() { return sm_updateInterval; } - - // Can we update this window? - static bool CanUpdate(wxWindowBase *win); - - // Reset the update time to provide a delay until the next - // time we should update - static void ResetUpdateTime(); - - // Specify how wxWidgets will send update events: to - // all windows, or only to those which specify that they - // will process the events. - static void SetMode(wxUpdateUIMode mode) { sm_updateMode = mode; } - - // Returns the UI update mode - static wxUpdateUIMode GetMode() { return sm_updateMode; } - - virtual wxEvent *Clone() const { return new wxUpdateUIEvent(*this); } - -protected: - bool m_checked; - bool m_enabled; - bool m_shown; - bool m_setEnabled; - bool m_setShown; - bool m_setText; - bool m_setChecked; - wxString m_text; -#if wxUSE_LONGLONG - static wxLongLong sm_lastUpdate; -#endif - static long sm_updateInterval; - static wxUpdateUIMode sm_updateMode; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxUpdateUIEvent) -}; - -/* - wxEVT_SYS_COLOUR_CHANGED - */ - -// TODO: shouldn't all events record the window ID? -class WXDLLIMPEXP_CORE wxSysColourChangedEvent : public wxEvent -{ -public: - wxSysColourChangedEvent() - : wxEvent(0, wxEVT_SYS_COLOUR_CHANGED) - { } - - virtual wxEvent *Clone() const { return new wxSysColourChangedEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxSysColourChangedEvent) -}; - -/* - wxEVT_MOUSE_CAPTURE_CHANGED - The window losing the capture receives this message - (even if it released the capture itself). - */ - -class WXDLLIMPEXP_CORE wxMouseCaptureChangedEvent : public wxEvent -{ -public: - wxMouseCaptureChangedEvent(wxWindowID winid = 0, wxWindow* gainedCapture = NULL) - : wxEvent(winid, wxEVT_MOUSE_CAPTURE_CHANGED), - m_gainedCapture(gainedCapture) - { } - - wxMouseCaptureChangedEvent(const wxMouseCaptureChangedEvent& event) - : wxEvent(event), - m_gainedCapture(event.m_gainedCapture) - { } - - virtual wxEvent *Clone() const { return new wxMouseCaptureChangedEvent(*this); } - - wxWindow* GetCapturedWindow() const { return m_gainedCapture; } - -private: - wxWindow* m_gainedCapture; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxMouseCaptureChangedEvent) -}; - -/* - wxEVT_MOUSE_CAPTURE_LOST - The window losing the capture receives this message, unless it released it - it itself or unless wxWindow::CaptureMouse was called on another window - (and so capture will be restored when the new capturer releases it). - */ - -class WXDLLIMPEXP_CORE wxMouseCaptureLostEvent : public wxEvent -{ -public: - wxMouseCaptureLostEvent(wxWindowID winid = 0) - : wxEvent(winid, wxEVT_MOUSE_CAPTURE_LOST) - {} - - wxMouseCaptureLostEvent(const wxMouseCaptureLostEvent& event) - : wxEvent(event) - {} - - virtual wxEvent *Clone() const { return new wxMouseCaptureLostEvent(*this); } - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxMouseCaptureLostEvent) -}; - -/* - wxEVT_DISPLAY_CHANGED - */ -class WXDLLIMPEXP_CORE wxDisplayChangedEvent : public wxEvent -{ -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDisplayChangedEvent) - -public: - wxDisplayChangedEvent() - : wxEvent(0, wxEVT_DISPLAY_CHANGED) - { } - - virtual wxEvent *Clone() const { return new wxDisplayChangedEvent(*this); } -}; - -/* - wxEVT_PALETTE_CHANGED - */ - -class WXDLLIMPEXP_CORE wxPaletteChangedEvent : public wxEvent -{ -public: - wxPaletteChangedEvent(wxWindowID winid = 0) - : wxEvent(winid, wxEVT_PALETTE_CHANGED), - m_changedWindow((wxWindow *) NULL) - { } - - wxPaletteChangedEvent(const wxPaletteChangedEvent& event) - : wxEvent(event), - m_changedWindow(event.m_changedWindow) - { } - - void SetChangedWindow(wxWindow* win) { m_changedWindow = win; } - wxWindow* GetChangedWindow() const { return m_changedWindow; } - - virtual wxEvent *Clone() const { return new wxPaletteChangedEvent(*this); } - -protected: - wxWindow* m_changedWindow; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxPaletteChangedEvent) -}; - -/* - wxEVT_QUERY_NEW_PALETTE - Indicates the window is getting keyboard focus and should re-do its palette. - */ - -class WXDLLIMPEXP_CORE wxQueryNewPaletteEvent : public wxEvent -{ -public: - wxQueryNewPaletteEvent(wxWindowID winid = 0) - : wxEvent(winid, wxEVT_QUERY_NEW_PALETTE), - m_paletteRealized(false) - { } - wxQueryNewPaletteEvent(const wxQueryNewPaletteEvent & event) - : wxEvent(event), - m_paletteRealized(event.m_paletteRealized) - { } - - // App sets this if it changes the palette. - void SetPaletteRealized(bool realized) { m_paletteRealized = realized; } - bool GetPaletteRealized() const { return m_paletteRealized; } - - virtual wxEvent *Clone() const { return new wxQueryNewPaletteEvent(*this); } - -protected: - bool m_paletteRealized; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxQueryNewPaletteEvent) -}; - -/* - Event generated by dialog navigation keys - wxEVT_NAVIGATION_KEY - */ -// NB: don't derive from command event to avoid being propagated to the parent -class WXDLLIMPEXP_CORE wxNavigationKeyEvent : public wxEvent -{ -public: - wxNavigationKeyEvent() - : wxEvent(0, wxEVT_NAVIGATION_KEY), - m_flags(IsForward | FromTab), // defaults are for TAB - m_focus((wxWindow *)NULL) - { - m_propagationLevel = wxEVENT_PROPAGATE_NONE; - } - - wxNavigationKeyEvent(const wxNavigationKeyEvent& event) - : wxEvent(event), - m_flags(event.m_flags), - m_focus(event.m_focus) - { } - - // direction: forward (true) or backward (false) - bool GetDirection() const - { return (m_flags & IsForward) != 0; } - void SetDirection(bool bForward) - { if ( bForward ) m_flags |= IsForward; else m_flags &= ~IsForward; } - - // it may be a window change event (MDI, notebook pages...) or a control - // change event - bool IsWindowChange() const - { return (m_flags & WinChange) != 0; } - void SetWindowChange(bool bIs) - { if ( bIs ) m_flags |= WinChange; else m_flags &= ~WinChange; } - - // Set to true under MSW if the event was generated using the tab key. - // This is required for proper navogation over radio buttons - bool IsFromTab() const - { return (m_flags & FromTab) != 0; } - void SetFromTab(bool bIs) - { if ( bIs ) m_flags |= FromTab; else m_flags &= ~FromTab; } - - // the child which has the focus currently (may be NULL - use - // wxWindow::FindFocus then) - wxWindow* GetCurrentFocus() const { return m_focus; } - void SetCurrentFocus(wxWindow *win) { m_focus = win; } - - // Set flags - void SetFlags(long flags) { m_flags = flags; } - - virtual wxEvent *Clone() const { return new wxNavigationKeyEvent(*this); } - - enum - { - IsBackward = 0x0000, - IsForward = 0x0001, - WinChange = 0x0002, - FromTab = 0x0004 - }; - - long m_flags; - wxWindow *m_focus; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxNavigationKeyEvent) -}; - -// Window creation/destruction events: the first is sent as soon as window is -// created (i.e. the underlying GUI object exists), but when the C++ object is -// fully initialized (so virtual functions may be called). The second, -// wxEVT_DESTROY, is sent right before the window is destroyed - again, it's -// still safe to call virtual functions at this moment -/* - wxEVT_CREATE - wxEVT_DESTROY - */ - -class WXDLLIMPEXP_CORE wxWindowCreateEvent : public wxCommandEvent -{ -public: - wxWindowCreateEvent(wxWindow *win = NULL); - - wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); } - - virtual wxEvent *Clone() const { return new wxWindowCreateEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxWindowCreateEvent) -}; - -class WXDLLIMPEXP_CORE wxWindowDestroyEvent : public wxCommandEvent -{ -public: - wxWindowDestroyEvent(wxWindow *win = NULL); - - wxWindow *GetWindow() const { return (wxWindow *)GetEventObject(); } - - virtual wxEvent *Clone() const { return new wxWindowDestroyEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxWindowDestroyEvent) -}; - -// A help event is sent when the user clicks on a window in context-help mode. -/* - wxEVT_HELP - wxEVT_DETAILED_HELP -*/ - -class WXDLLIMPEXP_CORE wxHelpEvent : public wxCommandEvent -{ -public: - // how was this help event generated? - enum Origin - { - Origin_Unknown, // unrecognized event source - Origin_Keyboard, // event generated from F1 key press - Origin_HelpButton // event from [?] button on the title bar (Windows) - }; - - wxHelpEvent(wxEventType type = wxEVT_NULL, - wxWindowID winid = 0, - const wxPoint& pt = wxDefaultPosition, - Origin origin = Origin_Unknown) - : wxCommandEvent(type, winid), - m_pos(pt), - m_origin(GuessOrigin(origin)) - { } - wxHelpEvent(const wxHelpEvent & event) - : wxCommandEvent(event), - m_pos(event.m_pos), - m_target(event.m_target), - m_link(event.m_link), - m_origin(event.m_origin) - { } - - // Position of event (in screen coordinates) - const wxPoint& GetPosition() const { return m_pos; } - void SetPosition(const wxPoint& pos) { m_pos = pos; } - - // Optional link to further help - const wxString& GetLink() const { return m_link; } - void SetLink(const wxString& link) { m_link = link; } - - // Optional target to display help in. E.g. a window specification - const wxString& GetTarget() const { return m_target; } - void SetTarget(const wxString& target) { m_target = target; } - - virtual wxEvent *Clone() const { return new wxHelpEvent(*this); } - - // optional indication of the event source - Origin GetOrigin() const { return m_origin; } - void SetOrigin(Origin origin) { m_origin = origin; } - -protected: - wxPoint m_pos; - wxString m_target; - wxString m_link; - Origin m_origin; - - // we can try to guess the event origin ourselves, even if none is - // specified in the ctor - static Origin GuessOrigin(Origin origin); - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHelpEvent) -}; - -// A Clipboard Text event is sent when a window intercepts text copy/cut/paste -// message, i.e. the user has cut/copied/pasted data from/into a text control -// via ctrl-C/X/V, ctrl/shift-del/insert, a popup menu command, etc. -// NOTE : under windows these events are *NOT* generated automatically -// for a Rich Edit text control. -/* -wxEVT_COMMAND_TEXT_COPY -wxEVT_COMMAND_TEXT_CUT -wxEVT_COMMAND_TEXT_PASTE -*/ - -class WXDLLIMPEXP_CORE wxClipboardTextEvent : public wxCommandEvent -{ -public: - wxClipboardTextEvent(wxEventType type = wxEVT_NULL, - wxWindowID winid = 0) - : wxCommandEvent(type, winid) - { } - wxClipboardTextEvent(const wxClipboardTextEvent & event) - : wxCommandEvent(event) - { } - - virtual wxEvent *Clone() const { return new wxClipboardTextEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxClipboardTextEvent) -}; - -// A Context event is sent when the user right clicks on a window or -// presses Shift-F10 -// NOTE : Under windows this is a repackaged WM_CONTETXMENU message -// Under other systems it may have to be generated from a right click event -/* - wxEVT_CONTEXT_MENU -*/ - -class WXDLLIMPEXP_CORE wxContextMenuEvent : public wxCommandEvent -{ -public: - wxContextMenuEvent(wxEventType type = wxEVT_NULL, - wxWindowID winid = 0, - const wxPoint& pt = wxDefaultPosition) - : wxCommandEvent(type, winid), - m_pos(pt) - { } - wxContextMenuEvent(const wxContextMenuEvent & event) - : wxCommandEvent(event), - m_pos(event.m_pos) - { } - - // Position of event (in screen coordinates) - const wxPoint& GetPosition() const { return m_pos; } - void SetPosition(const wxPoint& pos) { m_pos = pos; } - - virtual wxEvent *Clone() const { return new wxContextMenuEvent(*this); } - -protected: - wxPoint m_pos; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxContextMenuEvent) -}; - -// 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_CORE 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; } - - // Can we send an idle event? - static bool CanSend(wxWindow* win); - -protected: - bool m_requestMore; - static wxIdleMode sm_idleMode; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxIdleEvent) -}; - -#endif // wxUSE_GUI - -/* TODO - wxEVT_MOUSE_CAPTURE_CHANGED, - wxEVT_SETTING_CHANGED, // WM_WININICHANGE (NT) / WM_SETTINGCHANGE (Win95) -// wxEVT_FONT_CHANGED, // WM_FONTCHANGE: roll into wxEVT_SETTING_CHANGED, but remember to propagate - // wxEVT_FONT_CHANGED to all other windows (maybe). - wxEVT_DRAW_ITEM, // Leave these three as virtual functions in wxControl?? Platform-specific. - wxEVT_MEASURE_ITEM, - wxEVT_COMPARE_ITEM -*/ - - -// ============================================================================ -// event handler and related classes -// ============================================================================ - -// for backwards compatibility and to prevent eVC 4 for ARM from crashing with -// internal compiler error when compiling wx, we define wxObjectEventFunction -// as a wxObject method even though it can only be a wxEvtHandler one -typedef void (wxObject::*wxObjectEventFunction)(wxEvent&); - -// we can't have ctors nor base struct in backwards compatibility mode or -// otherwise we won't be able to initialize the objects with an agregate, so -// we have to keep both versions -#if WXWIN_COMPATIBILITY_EVENT_TYPES - -struct WXDLLIMPEXP_BASE wxEventTableEntry -{ - // For some reason, this can't be wxEventType, or VC++ complains. - int m_eventType; // main event type - int m_id; // control/menu/toolbar id - int m_lastId; // used for ranges of ids - wxObjectEventFunction m_fn; // function to call: not wxEventFunction, - // because of dependency problems - - wxObject* m_callbackUserData; -}; - -#else // !WXWIN_COMPATIBILITY_EVENT_TYPES - -// struct containing the members common to static and dynamic event tables -// entries -struct WXDLLIMPEXP_BASE wxEventTableEntryBase -{ -private: - wxEventTableEntryBase& operator=(const wxEventTableEntryBase& event); - -public: - wxEventTableEntryBase(int winid, int idLast, - wxObjectEventFunction fn, wxObject *data) - : m_id(winid), - m_lastId(idLast), - m_fn(fn), - m_callbackUserData(data) - { } - - wxEventTableEntryBase(const wxEventTableEntryBase& event) - : m_id(event.m_id), - m_lastId(event.m_lastId), - m_fn(event.m_fn), - m_callbackUserData(event.m_callbackUserData) - { } - - // the range of ids for this entry: if m_lastId == wxID_ANY, the range - // consists only of m_id, otherwise it is m_id..m_lastId inclusive - int m_id, - m_lastId; - - // function to call: not wxEventFunction, because of dependency problems - wxObjectEventFunction m_fn; - - // arbitrary user data asosciated with the callback - wxObject* m_callbackUserData; -}; - -// an entry from a static event table -struct WXDLLIMPEXP_BASE wxEventTableEntry : public wxEventTableEntryBase -{ - wxEventTableEntry(const int& evType, int winid, int idLast, - wxObjectEventFunction fn, wxObject *data) - : wxEventTableEntryBase(winid, idLast, fn, data), - m_eventType(evType) - { } - - // the reference to event type: this allows us to not care about the - // (undefined) order in which the event table entries and the event types - // are initialized: initially the value of this reference might be - // invalid, but by the time it is used for the first time, all global - // objects will have been initialized (including the event type constants) - // and so it will have the correct value when it is needed - const int& m_eventType; - -private: - wxEventTableEntry& operator=(const wxEventTableEntry&); -}; - -// an entry used in dynamic event table managed by wxEvtHandler::Connect() -struct WXDLLIMPEXP_BASE wxDynamicEventTableEntry : public wxEventTableEntryBase -{ - wxDynamicEventTableEntry(int evType, int winid, int idLast, - wxObjectEventFunction fn, wxObject *data, wxEvtHandler* eventSink) - : wxEventTableEntryBase(winid, idLast, fn, data), - m_eventType(evType), - m_eventSink(eventSink) - { } - - // not a reference here as we can't keep a reference to a temporary int - // created to wrap the constant value typically passed to Connect() - nor - // do we need it - int m_eventType; - - // Pointer to object whose function is fn - so we don't assume the - // EventFunction is always a member of the EventHandler receiving the - // message - wxEvtHandler* m_eventSink; - - DECLARE_NO_COPY_CLASS(wxDynamicEventTableEntry) -}; - -#endif // !WXWIN_COMPATIBILITY_EVENT_TYPES - -// ---------------------------------------------------------------------------- -// wxEventTable: an array of event entries terminated with {0, 0, 0, 0, 0} -// ---------------------------------------------------------------------------- - -struct WXDLLIMPEXP_BASE wxEventTable -{ - const wxEventTable *baseTable; // base event table (next in chain) - const wxEventTableEntry *entries; // bottom of entry array -}; - -// ---------------------------------------------------------------------------- -// wxEventHashTable: a helper of wxEvtHandler to speed up wxEventTable lookups. -// ---------------------------------------------------------------------------- - -WX_DEFINE_ARRAY_PTR(const wxEventTableEntry*, wxEventTableEntryPointerArray); - -class WXDLLIMPEXP_BASE wxEventHashTable -{ -private: - // Internal data structs - struct EventTypeTable - { - wxEventType eventType; - wxEventTableEntryPointerArray eventEntryTable; - }; - typedef EventTypeTable* EventTypeTablePointer; - -public: - // Constructor, needs the event table it needs to hash later on. - // Note: hashing of the event table is not done in the constructor as it - // can be that the event table is not yet full initialize, the hash - // will gets initialized when handling the first event look-up request. - wxEventHashTable(const wxEventTable &table); - // Destructor. - ~wxEventHashTable(); - - // Handle the given event, in other words search the event table hash - // and call self->ProcessEvent() if a match was found. - bool HandleEvent(wxEvent &event, wxEvtHandler *self); - - // Clear table - void Clear(); - - // Clear all tables - static void ClearAll(); - // Rebuild all tables - static void ReconstructAll(); - -protected: - // Init the hash table with the entries of the static event table. - void InitHashTable(); - // Helper funtion of InitHashTable() to insert 1 entry into the hash table. - void AddEntry(const wxEventTableEntry &entry); - // Allocate and init with null pointers the base hash table. - void AllocEventTypeTable(size_t size); - // Grow the hash table in size and transfer all items currently - // in the table to the correct location in the new table. - void GrowEventTypeTable(); - -protected: - const wxEventTable &m_table; - bool m_rebuildHash; - - size_t m_size; - EventTypeTablePointer *m_eventTypeTable; - - static wxEventHashTable* sm_first; - wxEventHashTable* m_previous; - wxEventHashTable* m_next; - - DECLARE_NO_COPY_CLASS(wxEventHashTable) -}; - -// ---------------------------------------------------------------------------- -// wxEvtHandler: the base class for all objects handling wxWidgets events -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxEvtHandler : public wxObject -{ -public: - wxEvtHandler(); - virtual ~wxEvtHandler(); - - wxEvtHandler *GetNextHandler() const { return m_nextHandler; } - wxEvtHandler *GetPreviousHandler() const { return m_previousHandler; } - void SetNextHandler(wxEvtHandler *handler) { m_nextHandler = handler; } - void SetPreviousHandler(wxEvtHandler *handler) { m_previousHandler = handler; } - - void SetEvtHandlerEnabled(bool enabled) { m_enabled = enabled; } - bool GetEvtHandlerEnabled() const { return m_enabled; } - - // process an event right now - virtual bool ProcessEvent(wxEvent& event); - - // add an event to be processed later - void AddPendingEvent(wxEvent& event); - - void ProcessPendingEvents(); - -#if wxUSE_THREADS - bool ProcessThreadEvent(wxEvent& event); -#endif - - // Dynamic association of a member function handler with the event handler, - // winid and event type - void Connect(int winid, - int lastId, - int eventType, - wxObjectEventFunction func, - wxObject *userData = (wxObject *) NULL, - wxEvtHandler *eventSink = (wxEvtHandler *) NULL); - - // Convenience function: take just one id - void Connect(int winid, - int eventType, - wxObjectEventFunction func, - wxObject *userData = (wxObject *) NULL, - wxEvtHandler *eventSink = (wxEvtHandler *) NULL) - { Connect(winid, wxID_ANY, eventType, func, userData, eventSink); } - - // Even more convenient: without id (same as using id of wxID_ANY) - void Connect(int eventType, - wxObjectEventFunction func, - wxObject *userData = (wxObject *) NULL, - wxEvtHandler *eventSink = (wxEvtHandler *) NULL) - { Connect(wxID_ANY, wxID_ANY, eventType, func, userData, eventSink); } - - bool Disconnect(int winid, - int lastId, - wxEventType eventType, - wxObjectEventFunction func = NULL, - wxObject *userData = (wxObject *) NULL, - wxEvtHandler *eventSink = (wxEvtHandler *) NULL); - - bool Disconnect(int winid = wxID_ANY, - wxEventType eventType = wxEVT_NULL, - wxObjectEventFunction func = NULL, - wxObject *userData = (wxObject *) NULL, - wxEvtHandler *eventSink = (wxEvtHandler *) NULL) - { return Disconnect(winid, wxID_ANY, eventType, func, userData, eventSink); } - - bool Disconnect(wxEventType eventType, - wxObjectEventFunction func, - wxObject *userData = (wxObject *) NULL, - wxEvtHandler *eventSink = (wxEvtHandler *) NULL) - { return Disconnect(wxID_ANY, eventType, func, userData, eventSink); } - - wxList* GetDynamicEventTable() const { return m_dynamicEvents ; } - - // User data can be associated with each wxEvtHandler - void SetClientObject( wxClientData *data ) { DoSetClientObject(data); } - wxClientData *GetClientObject() const { return DoGetClientObject(); } - - void SetClientData( void *data ) { DoSetClientData(data); } - void *GetClientData() const { return DoGetClientData(); } - - // check if the given event table entry matches this event and call the - // handler if it does - // - // return true if the event was processed, false otherwise (no match or the - // handler decided to skip the event) - static bool ProcessEventIfMatches(const wxEventTableEntryBase& tableEntry, - wxEvtHandler *handler, - wxEvent& event); - - // implementation from now on - virtual bool SearchEventTable(wxEventTable& table, wxEvent& event); - bool SearchDynamicEventTable( wxEvent& event ); - -#if wxUSE_THREADS - void ClearEventLocker(); -#endif // wxUSE_THREADS - - // Avoid problems at exit by cleaning up static hash table gracefully - void ClearEventHashTable() { GetEventHashTable().Clear(); } - -private: - static const wxEventTableEntry sm_eventTableEntries[]; - -protected: - // hooks for wxWindow used by ProcessEvent() - // ----------------------------------------- - - // This one is called before trying our own event table to allow plugging - // in the validators. - // - // NB: This method is intentionally *not* inside wxUSE_VALIDATORS! - // It is part of wxBase which doesn't use validators and the code - // is compiled out when building wxBase w/o GUI classes, which affects - // binary compatibility and wxBase library can't be used by GUI - // ports. - virtual bool TryValidator(wxEvent& WXUNUSED(event)) { return false; } - - // this one is called after failing to find the event handle in our own - // table to give a chance to the other windows to process it - // - // base class implementation passes the event to wxTheApp - virtual bool TryParent(wxEvent& event); - - - static const wxEventTable sm_eventTable; - virtual const wxEventTable *GetEventTable() const; - - static wxEventHashTable sm_eventHashTable; - virtual wxEventHashTable& GetEventHashTable() const; - - wxEvtHandler* m_nextHandler; - wxEvtHandler* m_previousHandler; - wxList* m_dynamicEvents; - wxList* m_pendingEvents; - -#if wxUSE_THREADS -#if defined (__VISAGECPP__) - const wxCriticalSection& Lock() const { return m_eventsLocker; } - wxCriticalSection& Lock() { return m_eventsLocker; } - - wxCriticalSection m_eventsLocker; -# else - const wxCriticalSection& Lock() const { return *m_eventsLocker; } - wxCriticalSection& Lock() { return *m_eventsLocker; } - - wxCriticalSection* m_eventsLocker; -# endif -#endif - - // Is event handler enabled? - bool m_enabled; - - - // The user data: either an object which will be deleted by the container - // when it's deleted or some raw pointer which we do nothing with - only - // one type of data can be used with the given window (i.e. you cannot set - // the void data and then associate the container with wxClientData or vice - // versa) - union - { - wxClientData *m_clientObject; - void *m_clientData; - }; - - // what kind of data do we have? - wxClientDataType m_clientDataType; - - // client data accessors - virtual void DoSetClientObject( wxClientData *data ); - virtual wxClientData *DoGetClientObject() const; - - virtual void DoSetClientData( void *data ); - virtual void *DoGetClientData() const; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxEvtHandler) -}; - -// Post a message to the given eventhandler which will be processed during the -// next event loop iteration -inline void wxPostEvent(wxEvtHandler *dest, wxEvent& event) -{ - wxCHECK_RET( dest, wxT("need an object to post event to in wxPostEvent") ); - - dest->AddPendingEvent(event); -} - -typedef void (wxEvtHandler::*wxEventFunction)(wxEvent&); - -#define wxEventHandler(func) \ - (wxObjectEventFunction)wxStaticCastEvent(wxEventFunction, &func) - -#if wxUSE_GUI - -typedef void (wxEvtHandler::*wxCommandEventFunction)(wxCommandEvent&); -typedef void (wxEvtHandler::*wxScrollEventFunction)(wxScrollEvent&); -typedef void (wxEvtHandler::*wxScrollWinEventFunction)(wxScrollWinEvent&); -typedef void (wxEvtHandler::*wxSizeEventFunction)(wxSizeEvent&); -typedef void (wxEvtHandler::*wxMoveEventFunction)(wxMoveEvent&); -typedef void (wxEvtHandler::*wxPaintEventFunction)(wxPaintEvent&); -typedef void (wxEvtHandler::*wxNcPaintEventFunction)(wxNcPaintEvent&); -typedef void (wxEvtHandler::*wxEraseEventFunction)(wxEraseEvent&); -typedef void (wxEvtHandler::*wxMouseEventFunction)(wxMouseEvent&); -typedef void (wxEvtHandler::*wxCharEventFunction)(wxKeyEvent&); -typedef void (wxEvtHandler::*wxFocusEventFunction)(wxFocusEvent&); -typedef void (wxEvtHandler::*wxChildFocusEventFunction)(wxChildFocusEvent&); -typedef void (wxEvtHandler::*wxActivateEventFunction)(wxActivateEvent&); -typedef void (wxEvtHandler::*wxMenuEventFunction)(wxMenuEvent&); -typedef void (wxEvtHandler::*wxJoystickEventFunction)(wxJoystickEvent&); -typedef void (wxEvtHandler::*wxDropFilesEventFunction)(wxDropFilesEvent&); -typedef void (wxEvtHandler::*wxInitDialogEventFunction)(wxInitDialogEvent&); -typedef void (wxEvtHandler::*wxSysColourChangedEventFunction)(wxSysColourChangedEvent&); -typedef void (wxEvtHandler::*wxDisplayChangedEventFunction)(wxDisplayChangedEvent&); -typedef void (wxEvtHandler::*wxUpdateUIEventFunction)(wxUpdateUIEvent&); -typedef void (wxEvtHandler::*wxIdleEventFunction)(wxIdleEvent&); -typedef void (wxEvtHandler::*wxCloseEventFunction)(wxCloseEvent&); -typedef void (wxEvtHandler::*wxShowEventFunction)(wxShowEvent&); -typedef void (wxEvtHandler::*wxIconizeEventFunction)(wxIconizeEvent&); -typedef void (wxEvtHandler::*wxMaximizeEventFunction)(wxMaximizeEvent&); -typedef void (wxEvtHandler::*wxNavigationKeyEventFunction)(wxNavigationKeyEvent&); -typedef void (wxEvtHandler::*wxPaletteChangedEventFunction)(wxPaletteChangedEvent&); -typedef void (wxEvtHandler::*wxQueryNewPaletteEventFunction)(wxQueryNewPaletteEvent&); -typedef void (wxEvtHandler::*wxWindowCreateEventFunction)(wxWindowCreateEvent&); -typedef void (wxEvtHandler::*wxWindowDestroyEventFunction)(wxWindowDestroyEvent&); -typedef void (wxEvtHandler::*wxSetCursorEventFunction)(wxSetCursorEvent&); -typedef void (wxEvtHandler::*wxNotifyEventFunction)(wxNotifyEvent&); -typedef void (wxEvtHandler::*wxHelpEventFunction)(wxHelpEvent&); -typedef void (wxEvtHandler::*wxContextMenuEventFunction)(wxContextMenuEvent&); -typedef void (wxEvtHandler::*wxMouseCaptureChangedEventFunction)(wxMouseCaptureChangedEvent&); -typedef void (wxEvtHandler::*wxMouseCaptureLostEventFunction)(wxMouseCaptureLostEvent&); -typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&); - -// these typedefs don't have the same name structure as the others, keep for -// backwards compatibility only -#if WXWIN_COMPATIBILITY_2_4 - typedef wxSysColourChangedEventFunction wxSysColourChangedFunction; - typedef wxDisplayChangedEventFunction wxDisplayChangedFunction; -#endif // WXWIN_COMPATIBILITY_2_4 - - -#define wxCommandEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCommandEventFunction, &func) -#define wxScrollEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxScrollEventFunction, &func) -#define wxScrollWinEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxScrollWinEventFunction, &func) -#define wxSizeEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSizeEventFunction, &func) -#define wxMoveEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMoveEventFunction, &func) -#define wxPaintEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxPaintEventFunction, &func) -#define wxNcPaintEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxNcPaintEventFunction, &func) -#define wxEraseEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxEraseEventFunction, &func) -#define wxMouseEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMouseEventFunction, &func) -#define wxCharEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCharEventFunction, &func) -#define wxKeyEventHandler(func) wxCharEventHandler(func) -#define wxFocusEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxFocusEventFunction, &func) -#define wxChildFocusEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxChildFocusEventFunction, &func) -#define wxActivateEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxActivateEventFunction, &func) -#define wxMenuEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMenuEventFunction, &func) -#define wxJoystickEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxJoystickEventFunction, &func) -#define wxDropFilesEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxDropFilesEventFunction, &func) -#define wxInitDialogEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxInitDialogEventFunction, &func) -#define wxSysColourChangedEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSysColourChangedEventFunction, &func) -#define wxDisplayChangedEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxDisplayChangedEventFunction, &func) -#define wxUpdateUIEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxUpdateUIEventFunction, &func) -#define wxIdleEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxIdleEventFunction, &func) -#define wxCloseEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCloseEventFunction, &func) -#define wxShowEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxShowEventFunction, &func) -#define wxIconizeEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxIconizeEventFunction, &func) -#define wxMaximizeEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMaximizeEventFunction, &func) -#define wxNavigationKeyEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxNavigationKeyEventFunction, &func) -#define wxPaletteChangedEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxPaletteChangedEventFunction, &func) -#define wxQueryNewPaletteEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxQueryNewPaletteEventFunction, &func) -#define wxWindowCreateEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWindowCreateEventFunction, &func) -#define wxWindowDestroyEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWindowDestroyEventFunction, &func) -#define wxSetCursorEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSetCursorEventFunction, &func) -#define wxNotifyEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxNotifyEventFunction, &func) -#define wxHelpEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxHelpEventFunction, &func) -#define wxContextMenuEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxContextMenuEventFunction, &func) -#define wxMouseCaptureChangedEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMouseCaptureChangedEventFunction, &func) -#define wxMouseCaptureLostEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMouseCaptureLostEventFunction, &func) -#define wxClipboardTextEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxClipboardTextEventFunction, &func) - -#endif // wxUSE_GUI - -// N.B. In GNU-WIN32, you *have* to take the address of a member function -// (use &) or the compiler crashes... - -#define DECLARE_EVENT_TABLE() \ - private: \ - static const wxEventTableEntry sm_eventTableEntries[]; \ - protected: \ - static const wxEventTable sm_eventTable; \ - virtual const wxEventTable* GetEventTable() const; \ - static wxEventHashTable sm_eventHashTable; \ - virtual wxEventHashTable& GetEventHashTable() const; - -// N.B.: when building DLL with Borland C++ 5.5 compiler, you must initialize -// sm_eventTable before using it in GetEventTable() or the compiler gives -// E2233 (see http://groups.google.com/groups?selm=397dcc8a%241_2%40dnews) - -#define BEGIN_EVENT_TABLE(theClass, baseClass) \ - const wxEventTable theClass::sm_eventTable = \ - { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; \ - const wxEventTable *theClass::GetEventTable() const \ - { return &theClass::sm_eventTable; } \ - wxEventHashTable theClass::sm_eventHashTable(theClass::sm_eventTable); \ - wxEventHashTable &theClass::GetEventHashTable() const \ - { return theClass::sm_eventHashTable; } \ - const wxEventTableEntry theClass::sm_eventTableEntries[] = { \ - -#define BEGIN_EVENT_TABLE_TEMPLATE1(theClass, baseClass, T1) \ - template \ - const wxEventTable theClass::sm_eventTable = \ - { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; \ - template \ - const wxEventTable *theClass::GetEventTable() const \ - { return &theClass::sm_eventTable; } \ - template \ - wxEventHashTable theClass::sm_eventHashTable(theClass::sm_eventTable); \ - template \ - wxEventHashTable &theClass::GetEventHashTable() const \ - { return theClass::sm_eventHashTable; } \ - template \ - const wxEventTableEntry theClass::sm_eventTableEntries[] = { \ - -#define BEGIN_EVENT_TABLE_TEMPLATE2(theClass, baseClass, T1, T2) \ - template \ - const wxEventTable theClass::sm_eventTable = \ - { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; \ - template \ - const wxEventTable *theClass::GetEventTable() const \ - { return &theClass::sm_eventTable; } \ - template \ - wxEventHashTable theClass::sm_eventHashTable(theClass::sm_eventTable); \ - template \ - wxEventHashTable &theClass::GetEventHashTable() const \ - { return theClass::sm_eventHashTable; } \ - template \ - const wxEventTableEntry theClass::sm_eventTableEntries[] = { \ - -#define BEGIN_EVENT_TABLE_TEMPLATE3(theClass, baseClass, T1, T2, T3) \ - template \ - const wxEventTable theClass::sm_eventTable = \ - { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; \ - template \ - const wxEventTable *theClass::GetEventTable() const \ - { return &theClass::sm_eventTable; } \ - template \ - wxEventHashTable theClass::sm_eventHashTable(theClass::sm_eventTable); \ - template \ - wxEventHashTable &theClass::GetEventHashTable() const \ - { return theClass::sm_eventHashTable; } \ - template \ - const wxEventTableEntry theClass::sm_eventTableEntries[] = { \ - -#define BEGIN_EVENT_TABLE_TEMPLATE4(theClass, baseClass, T1, T2, T3, T4) \ - template \ - const wxEventTable theClass::sm_eventTable = \ - { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; \ - template \ - const wxEventTable *theClass::GetEventTable() const \ - { return &theClass::sm_eventTable; } \ - template \ - wxEventHashTable theClass::sm_eventHashTable(theClass::sm_eventTable); \ - template \ - wxEventHashTable &theClass::GetEventHashTable() const \ - { return theClass::sm_eventHashTable; } \ - template \ - const wxEventTableEntry theClass::sm_eventTableEntries[] = { \ - -#define BEGIN_EVENT_TABLE_TEMPLATE5(theClass, baseClass, T1, T2, T3, T4, T5) \ - template \ - const wxEventTable theClass::sm_eventTable = \ - { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; \ - template \ - const wxEventTable *theClass::GetEventTable() const \ - { return &theClass::sm_eventTable; } \ - template \ - wxEventHashTable theClass::sm_eventHashTable(theClass::sm_eventTable); \ - template \ - wxEventHashTable &theClass::GetEventHashTable() const \ - { return theClass::sm_eventHashTable; } \ - template \ - const wxEventTableEntry theClass::sm_eventTableEntries[] = { \ - -#define BEGIN_EVENT_TABLE_TEMPLATE7(theClass, baseClass, T1, T2, T3, T4, T5, T6, T7) \ - template \ - const wxEventTable theClass::sm_eventTable = \ - { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; \ - template \ - const wxEventTable *theClass::GetEventTable() const \ - { return &theClass::sm_eventTable; } \ - template \ - wxEventHashTable theClass::sm_eventHashTable(theClass::sm_eventTable); \ - template \ - wxEventHashTable &theClass::GetEventHashTable() const \ - { return theClass::sm_eventHashTable; } \ - template \ - const wxEventTableEntry theClass::sm_eventTableEntries[] = { \ - -#define BEGIN_EVENT_TABLE_TEMPLATE8(theClass, baseClass, T1, T2, T3, T4, T5, T6, T7, T8) \ - template \ - const wxEventTable theClass::sm_eventTable = \ - { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; \ - template \ - const wxEventTable *theClass::GetEventTable() const \ - { return &theClass::sm_eventTable; } \ - template \ - wxEventHashTable theClass::sm_eventHashTable(theClass::sm_eventTable); \ - template \ - wxEventHashTable &theClass::GetEventHashTable() const \ - { return theClass::sm_eventHashTable; } \ - template \ - const wxEventTableEntry theClass::sm_eventTableEntries[] = { \ - -#define END_EVENT_TABLE() DECLARE_EVENT_TABLE_ENTRY( wxEVT_NULL, 0, 0, 0, 0 ) }; - -/* - * Event table macros - */ - -// helpers for writing shorter code below: declare an event macro taking 2, 1 -// or none ids (the missing ids default to wxID_ANY) -// -// macro arguments: -// - evt one of wxEVT_XXX constants -// - id1, id2 ids of the first/last id -// - fn the function (should be cast to the right type) -#define wx__DECLARE_EVT2(evt, id1, id2, fn) \ - DECLARE_EVENT_TABLE_ENTRY(evt, id1, id2, fn, NULL), -#define wx__DECLARE_EVT1(evt, id, fn) \ - wx__DECLARE_EVT2(evt, id, wxID_ANY, fn) -#define wx__DECLARE_EVT0(evt, fn) \ - wx__DECLARE_EVT1(evt, wxID_ANY, fn) - - -// Generic events -#define EVT_CUSTOM(event, winid, func) \ - wx__DECLARE_EVT1(event, winid, wxEventHandler(func)) -#define EVT_CUSTOM_RANGE(event, id1, id2, func) \ - wx__DECLARE_EVT2(event, id1, id2, wxEventHandler(func)) - -// EVT_COMMAND -#define EVT_COMMAND(winid, event, func) \ - wx__DECLARE_EVT1(event, winid, wxCommandEventHandler(func)) -#define EVT_COMMAND_RANGE(id1, id2, event, func) \ - wx__DECLARE_EVT2(event, id1, id2, wxCommandEventHandler(func)) - -#define EVT_NOTIFY(event, winid, func) \ - wx__DECLARE_EVT1(event, winid, wxNotifyEventHandler(func)) -#define EVT_NOTIFY_RANGE(event, id1, id2, func) \ - wx__DECLARE_EVT2(event, id1, id2, wxNotifyEventHandler(func)) - -// Miscellaneous -#define EVT_SIZE(func) wx__DECLARE_EVT0(wxEVT_SIZE, wxSizeEventHandler(func)) -#define EVT_SIZING(func) wx__DECLARE_EVT0(wxEVT_SIZING, wxSizeEventHandler(func)) -#define EVT_MOVE(func) wx__DECLARE_EVT0(wxEVT_MOVE, wxMoveEventHandler(func)) -#define EVT_MOVING(func) wx__DECLARE_EVT0(wxEVT_MOVING, wxMoveEventHandler(func)) -#define EVT_CLOSE(func) wx__DECLARE_EVT0(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(func)) -#define EVT_END_SESSION(func) wx__DECLARE_EVT0(wxEVT_END_SESSION, wxCloseEventHandler(func)) -#define EVT_QUERY_END_SESSION(func) wx__DECLARE_EVT0(wxEVT_QUERY_END_SESSION, wxCloseEventHandler(func)) -#define EVT_PAINT(func) wx__DECLARE_EVT0(wxEVT_PAINT, wxPaintEventHandler(func)) -#define EVT_NC_PAINT(func) wx__DECLARE_EVT0(wxEVT_NC_PAINT, wxNcPaintEventHandler(func)) -#define EVT_ERASE_BACKGROUND(func) wx__DECLARE_EVT0(wxEVT_ERASE_BACKGROUND, wxEraseEventHandler(func)) -#define EVT_CHAR(func) wx__DECLARE_EVT0(wxEVT_CHAR, wxCharEventHandler(func)) -#define EVT_KEY_DOWN(func) wx__DECLARE_EVT0(wxEVT_KEY_DOWN, wxKeyEventHandler(func)) -#define EVT_KEY_UP(func) wx__DECLARE_EVT0(wxEVT_KEY_UP, wxKeyEventHandler(func)) -#if wxUSE_HOTKEY -#define EVT_HOTKEY(winid, func) wx__DECLARE_EVT1(wxEVT_HOTKEY, winid, wxCharEventHandler(func)) -#endif -#define EVT_CHAR_HOOK(func) wx__DECLARE_EVT0(wxEVT_CHAR_HOOK, wxCharEventHandler(func)) -#define EVT_MENU_OPEN(func) wx__DECLARE_EVT0(wxEVT_MENU_OPEN, wxMenuEventHandler(func)) -#define EVT_MENU_CLOSE(func) wx__DECLARE_EVT0(wxEVT_MENU_CLOSE, wxMenuEventHandler(func)) -#define EVT_MENU_HIGHLIGHT(winid, func) wx__DECLARE_EVT1(wxEVT_MENU_HIGHLIGHT, winid, wxMenuEventHandler(func)) -#define EVT_MENU_HIGHLIGHT_ALL(func) wx__DECLARE_EVT0(wxEVT_MENU_HIGHLIGHT, wxMenuEventHandler(func)) -#define EVT_SET_FOCUS(func) wx__DECLARE_EVT0(wxEVT_SET_FOCUS, wxFocusEventHandler(func)) -#define EVT_KILL_FOCUS(func) wx__DECLARE_EVT0(wxEVT_KILL_FOCUS, wxFocusEventHandler(func)) -#define EVT_CHILD_FOCUS(func) wx__DECLARE_EVT0(wxEVT_CHILD_FOCUS, wxChildFocusEventHandler(func)) -#define EVT_ACTIVATE(func) wx__DECLARE_EVT0(wxEVT_ACTIVATE, wxActivateEventHandler(func)) -#define EVT_ACTIVATE_APP(func) wx__DECLARE_EVT0(wxEVT_ACTIVATE_APP, wxActivateEventHandler(func)) -#define EVT_HIBERNATE(func) wx__DECLARE_EVT0(wxEVT_HIBERNATE, wxActivateEventHandler(func)) -#define EVT_END_SESSION(func) wx__DECLARE_EVT0(wxEVT_END_SESSION, wxCloseEventHandler(func)) -#define EVT_QUERY_END_SESSION(func) wx__DECLARE_EVT0(wxEVT_QUERY_END_SESSION, wxCloseEventHandler(func)) -#define EVT_DROP_FILES(func) wx__DECLARE_EVT0(wxEVT_DROP_FILES, wxDropFilesEventHandler(func)) -#define EVT_INIT_DIALOG(func) wx__DECLARE_EVT0(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(func)) -#define EVT_SYS_COLOUR_CHANGED(func) wx__DECLARE_EVT0(wxEVT_SYS_COLOUR_CHANGED, wxSysColourChangedEventHandler(func)) -#define EVT_DISPLAY_CHANGED(func) wx__DECLARE_EVT0(wxEVT_DISPLAY_CHANGED, wxDisplayChangedEventHandler(func)) -#define EVT_SHOW(func) wx__DECLARE_EVT0(wxEVT_SHOW, wxShowEventHandler(func)) -#define EVT_MAXIMIZE(func) wx__DECLARE_EVT0(wxEVT_MAXIMIZE, wxMaximizeEventHandler(func)) -#define EVT_ICONIZE(func) wx__DECLARE_EVT0(wxEVT_ICONIZE, wxIconizeEventHandler(func)) -#define EVT_NAVIGATION_KEY(func) wx__DECLARE_EVT0(wxEVT_NAVIGATION_KEY, wxNavigationKeyEventHandler(func)) -#define EVT_PALETTE_CHANGED(func) wx__DECLARE_EVT0(wxEVT_PALETTE_CHANGED, wxPaletteChangedEventHandler(func)) -#define EVT_QUERY_NEW_PALETTE(func) wx__DECLARE_EVT0(wxEVT_QUERY_NEW_PALETTE, wxQueryNewPaletteEventHandler(func)) -#define EVT_WINDOW_CREATE(func) wx__DECLARE_EVT0(wxEVT_CREATE, wxWindowCreateEventHandler(func)) -#define EVT_WINDOW_DESTROY(func) wx__DECLARE_EVT0(wxEVT_DESTROY, wxWindowDestroyEventHandler(func)) -#define EVT_SET_CURSOR(func) wx__DECLARE_EVT0(wxEVT_SET_CURSOR, wxSetCursorEventHandler(func)) -#define EVT_MOUSE_CAPTURE_CHANGED(func) wx__DECLARE_EVT0(wxEVT_MOUSE_CAPTURE_CHANGED, wxMouseCaptureChangedEventHandler(func)) -#define EVT_MOUSE_CAPTURE_LOST(func) wx__DECLARE_EVT0(wxEVT_MOUSE_CAPTURE_LOST, wxMouseCaptureLostEventHandler(func)) - -// Mouse events -#define EVT_LEFT_DOWN(func) wx__DECLARE_EVT0(wxEVT_LEFT_DOWN, wxMouseEventHandler(func)) -#define EVT_LEFT_UP(func) wx__DECLARE_EVT0(wxEVT_LEFT_UP, wxMouseEventHandler(func)) -#define EVT_MIDDLE_DOWN(func) wx__DECLARE_EVT0(wxEVT_MIDDLE_DOWN, wxMouseEventHandler(func)) -#define EVT_MIDDLE_UP(func) wx__DECLARE_EVT0(wxEVT_MIDDLE_UP, wxMouseEventHandler(func)) -#define EVT_RIGHT_DOWN(func) wx__DECLARE_EVT0(wxEVT_RIGHT_DOWN, wxMouseEventHandler(func)) -#define EVT_RIGHT_UP(func) wx__DECLARE_EVT0(wxEVT_RIGHT_UP, wxMouseEventHandler(func)) -#define EVT_MOTION(func) wx__DECLARE_EVT0(wxEVT_MOTION, wxMouseEventHandler(func)) -#define EVT_LEFT_DCLICK(func) wx__DECLARE_EVT0(wxEVT_LEFT_DCLICK, wxMouseEventHandler(func)) -#define EVT_MIDDLE_DCLICK(func) wx__DECLARE_EVT0(wxEVT_MIDDLE_DCLICK, wxMouseEventHandler(func)) -#define EVT_RIGHT_DCLICK(func) wx__DECLARE_EVT0(wxEVT_RIGHT_DCLICK, wxMouseEventHandler(func)) -#define EVT_LEAVE_WINDOW(func) wx__DECLARE_EVT0(wxEVT_LEAVE_WINDOW, wxMouseEventHandler(func)) -#define EVT_ENTER_WINDOW(func) wx__DECLARE_EVT0(wxEVT_ENTER_WINDOW, wxMouseEventHandler(func)) -#define EVT_MOUSEWHEEL(func) wx__DECLARE_EVT0(wxEVT_MOUSEWHEEL, wxMouseEventHandler(func)) - -// All mouse events -#define EVT_MOUSE_EVENTS(func) \ - EVT_LEFT_DOWN(func) \ - EVT_LEFT_UP(func) \ - EVT_MIDDLE_DOWN(func) \ - EVT_MIDDLE_UP(func) \ - EVT_RIGHT_DOWN(func) \ - EVT_RIGHT_UP(func) \ - EVT_MOTION(func) \ - EVT_LEFT_DCLICK(func) \ - EVT_MIDDLE_DCLICK(func) \ - EVT_RIGHT_DCLICK(func) \ - EVT_LEAVE_WINDOW(func) \ - EVT_ENTER_WINDOW(func) \ - EVT_MOUSEWHEEL(func) - -// Scrolling from wxWindow (sent to wxScrolledWindow) -#define EVT_SCROLLWIN_TOP(func) wx__DECLARE_EVT0(wxEVT_SCROLLWIN_TOP, wxScrollWinEventHandler(func)) -#define EVT_SCROLLWIN_BOTTOM(func) wx__DECLARE_EVT0(wxEVT_SCROLLWIN_BOTTOM, wxScrollWinEventHandler(func)) -#define EVT_SCROLLWIN_LINEUP(func) wx__DECLARE_EVT0(wxEVT_SCROLLWIN_LINEUP, wxScrollWinEventHandler(func)) -#define EVT_SCROLLWIN_LINEDOWN(func) wx__DECLARE_EVT0(wxEVT_SCROLLWIN_LINEDOWN, wxScrollWinEventHandler(func)) -#define EVT_SCROLLWIN_PAGEUP(func) wx__DECLARE_EVT0(wxEVT_SCROLLWIN_PAGEUP, wxScrollWinEventHandler(func)) -#define EVT_SCROLLWIN_PAGEDOWN(func) wx__DECLARE_EVT0(wxEVT_SCROLLWIN_PAGEDOWN, wxScrollWinEventHandler(func)) -#define EVT_SCROLLWIN_THUMBTRACK(func) wx__DECLARE_EVT0(wxEVT_SCROLLWIN_THUMBTRACK, wxScrollWinEventHandler(func)) -#define EVT_SCROLLWIN_THUMBRELEASE(func) wx__DECLARE_EVT0(wxEVT_SCROLLWIN_THUMBRELEASE, wxScrollWinEventHandler(func)) - -#define EVT_SCROLLWIN(func) \ - EVT_SCROLLWIN_TOP(func) \ - EVT_SCROLLWIN_BOTTOM(func) \ - EVT_SCROLLWIN_LINEUP(func) \ - EVT_SCROLLWIN_LINEDOWN(func) \ - EVT_SCROLLWIN_PAGEUP(func) \ - EVT_SCROLLWIN_PAGEDOWN(func) \ - EVT_SCROLLWIN_THUMBTRACK(func) \ - EVT_SCROLLWIN_THUMBRELEASE(func) - -// Scrolling from wxSlider and wxScrollBar -#define EVT_SCROLL_TOP(func) wx__DECLARE_EVT0(wxEVT_SCROLL_TOP, wxScrollEventHandler(func)) -#define EVT_SCROLL_BOTTOM(func) wx__DECLARE_EVT0(wxEVT_SCROLL_BOTTOM, wxScrollEventHandler(func)) -#define EVT_SCROLL_LINEUP(func) wx__DECLARE_EVT0(wxEVT_SCROLL_LINEUP, wxScrollEventHandler(func)) -#define EVT_SCROLL_LINEDOWN(func) wx__DECLARE_EVT0(wxEVT_SCROLL_LINEDOWN, wxScrollEventHandler(func)) -#define EVT_SCROLL_PAGEUP(func) wx__DECLARE_EVT0(wxEVT_SCROLL_PAGEUP, wxScrollEventHandler(func)) -#define EVT_SCROLL_PAGEDOWN(func) wx__DECLARE_EVT0(wxEVT_SCROLL_PAGEDOWN, wxScrollEventHandler(func)) -#define EVT_SCROLL_THUMBTRACK(func) wx__DECLARE_EVT0(wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler(func)) -#define EVT_SCROLL_THUMBRELEASE(func) wx__DECLARE_EVT0(wxEVT_SCROLL_THUMBRELEASE, wxScrollEventHandler(func)) -#define EVT_SCROLL_CHANGED(func) wx__DECLARE_EVT0(wxEVT_SCROLL_CHANGED, wxScrollEventHandler(func)) - -#define EVT_SCROLL(func) \ - EVT_SCROLL_TOP(func) \ - EVT_SCROLL_BOTTOM(func) \ - EVT_SCROLL_LINEUP(func) \ - EVT_SCROLL_LINEDOWN(func) \ - EVT_SCROLL_PAGEUP(func) \ - EVT_SCROLL_PAGEDOWN(func) \ - EVT_SCROLL_THUMBTRACK(func) \ - EVT_SCROLL_THUMBRELEASE(func) \ - EVT_SCROLL_CHANGED(func) - -// Scrolling from wxSlider and wxScrollBar, with an id -#define EVT_COMMAND_SCROLL_TOP(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_TOP, winid, wxScrollEventHandler(func)) -#define EVT_COMMAND_SCROLL_BOTTOM(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_BOTTOM, winid, wxScrollEventHandler(func)) -#define EVT_COMMAND_SCROLL_LINEUP(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_LINEUP, winid, wxScrollEventHandler(func)) -#define EVT_COMMAND_SCROLL_LINEDOWN(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_LINEDOWN, winid, wxScrollEventHandler(func)) -#define EVT_COMMAND_SCROLL_PAGEUP(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_PAGEUP, winid, wxScrollEventHandler(func)) -#define EVT_COMMAND_SCROLL_PAGEDOWN(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_PAGEDOWN, winid, wxScrollEventHandler(func)) -#define EVT_COMMAND_SCROLL_THUMBTRACK(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_THUMBTRACK, winid, wxScrollEventHandler(func)) -#define EVT_COMMAND_SCROLL_THUMBRELEASE(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_THUMBRELEASE, winid, wxScrollEventHandler(func)) -#define EVT_COMMAND_SCROLL_CHANGED(winid, func) wx__DECLARE_EVT1(wxEVT_SCROLL_CHANGED, winid, wxScrollEventHandler(func)) - -#define EVT_COMMAND_SCROLL(winid, func) \ - EVT_COMMAND_SCROLL_TOP(winid, func) \ - EVT_COMMAND_SCROLL_BOTTOM(winid, func) \ - EVT_COMMAND_SCROLL_LINEUP(winid, func) \ - EVT_COMMAND_SCROLL_LINEDOWN(winid, func) \ - EVT_COMMAND_SCROLL_PAGEUP(winid, func) \ - EVT_COMMAND_SCROLL_PAGEDOWN(winid, func) \ - EVT_COMMAND_SCROLL_THUMBTRACK(winid, func) \ - EVT_COMMAND_SCROLL_THUMBRELEASE(winid, func) \ - EVT_COMMAND_SCROLL_CHANGED(winid, func) - -#if WXWIN_COMPATIBILITY_2_6 - // compatibility macros for the old name, deprecated in 2.8 - #define wxEVT_SCROLL_ENDSCROLL wxEVT_SCROLL_CHANGED - #define EVT_COMMAND_SCROLL_ENDSCROLL EVT_COMMAND_SCROLL_CHANGED - #define EVT_SCROLL_ENDSCROLL EVT_SCROLL_CHANGED -#endif // WXWIN_COMPATIBILITY_2_6 - -// Convenience macros for commonly-used commands -#define EVT_CHECKBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_CHECKBOX_CLICKED, winid, wxCommandEventHandler(func)) -#define EVT_CHOICE(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_CHOICE_SELECTED, winid, wxCommandEventHandler(func)) -#define EVT_LISTBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_LISTBOX_SELECTED, winid, wxCommandEventHandler(func)) -#define EVT_LISTBOX_DCLICK(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, winid, wxCommandEventHandler(func)) -#define EVT_MENU(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_MENU_SELECTED, winid, wxCommandEventHandler(func)) -#define EVT_MENU_RANGE(id1, id2, func) wx__DECLARE_EVT2(wxEVT_COMMAND_MENU_SELECTED, id1, id2, wxCommandEventHandler(func)) -#if defined(__SMARTPHONE__) -# define EVT_BUTTON(winid, func) EVT_MENU(winid, func) -#else -# define EVT_BUTTON(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_BUTTON_CLICKED, winid, wxCommandEventHandler(func)) -#endif -#define EVT_SLIDER(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_SLIDER_UPDATED, winid, wxCommandEventHandler(func)) -#define EVT_RADIOBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_RADIOBOX_SELECTED, winid, wxCommandEventHandler(func)) -#define EVT_RADIOBUTTON(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_RADIOBUTTON_SELECTED, winid, wxCommandEventHandler(func)) -// EVT_SCROLLBAR is now obsolete since we use EVT_COMMAND_SCROLL... events -#define EVT_SCROLLBAR(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_SCROLLBAR_UPDATED, winid, wxCommandEventHandler(func)) -#define EVT_VLBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_VLBOX_SELECTED, winid, wxCommandEventHandler(func)) -#define EVT_COMBOBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_COMBOBOX_SELECTED, winid, wxCommandEventHandler(func)) -#define EVT_TOOL(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TOOL_CLICKED, winid, wxCommandEventHandler(func)) -#define EVT_TOOL_RANGE(id1, id2, func) wx__DECLARE_EVT2(wxEVT_COMMAND_TOOL_CLICKED, id1, id2, wxCommandEventHandler(func)) -#define EVT_TOOL_RCLICKED(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TOOL_RCLICKED, winid, wxCommandEventHandler(func)) -#define EVT_TOOL_RCLICKED_RANGE(id1, id2, func) wx__DECLARE_EVT2(wxEVT_COMMAND_TOOL_RCLICKED, id1, id2, wxCommandEventHandler(func)) -#define EVT_TOOL_ENTER(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TOOL_ENTER, winid, wxCommandEventHandler(func)) -#define EVT_CHECKLISTBOX(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, winid, wxCommandEventHandler(func)) - -// Generic command events -#define EVT_COMMAND_LEFT_CLICK(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_LEFT_CLICK, winid, wxCommandEventHandler(func)) -#define EVT_COMMAND_LEFT_DCLICK(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_LEFT_DCLICK, winid, wxCommandEventHandler(func)) -#define EVT_COMMAND_RIGHT_CLICK(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_RIGHT_CLICK, winid, wxCommandEventHandler(func)) -#define EVT_COMMAND_RIGHT_DCLICK(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_RIGHT_DCLICK, winid, wxCommandEventHandler(func)) -#define EVT_COMMAND_SET_FOCUS(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_SET_FOCUS, winid, wxCommandEventHandler(func)) -#define EVT_COMMAND_KILL_FOCUS(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_KILL_FOCUS, winid, wxCommandEventHandler(func)) -#define EVT_COMMAND_ENTER(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_ENTER, winid, wxCommandEventHandler(func)) - -// Joystick events - -#define EVT_JOY_BUTTON_DOWN(func) wx__DECLARE_EVT0(wxEVT_JOY_BUTTON_DOWN, wxJoystickEventHandler(func)) -#define EVT_JOY_BUTTON_UP(func) wx__DECLARE_EVT0(wxEVT_JOY_BUTTON_UP, wxJoystickEventHandler(func)) -#define EVT_JOY_MOVE(func) wx__DECLARE_EVT0(wxEVT_JOY_MOVE, wxJoystickEventHandler(func)) -#define EVT_JOY_ZMOVE(func) wx__DECLARE_EVT0(wxEVT_JOY_ZMOVE, wxJoystickEventHandler(func)) - -// These are obsolete, see _BUTTON_ events -#if WXWIN_COMPATIBILITY_2_4 - #define EVT_JOY_DOWN(func) EVT_JOY_BUTTON_DOWN(func) - #define EVT_JOY_UP(func) EVT_JOY_BUTTON_UP(func) -#endif // WXWIN_COMPATIBILITY_2_4 - -// All joystick events -#define EVT_JOYSTICK_EVENTS(func) \ - EVT_JOY_BUTTON_DOWN(func) \ - EVT_JOY_BUTTON_UP(func) \ - EVT_JOY_MOVE(func) \ - EVT_JOY_ZMOVE(func) - -// Idle event -#define EVT_IDLE(func) wx__DECLARE_EVT0(wxEVT_IDLE, wxIdleEventHandler(func)) - -// Update UI event -#define EVT_UPDATE_UI(winid, func) wx__DECLARE_EVT1(wxEVT_UPDATE_UI, winid, wxUpdateUIEventHandler(func)) -#define EVT_UPDATE_UI_RANGE(id1, id2, func) wx__DECLARE_EVT2(wxEVT_UPDATE_UI, id1, id2, wxUpdateUIEventHandler(func)) - -// Help events -#define EVT_HELP(winid, func) wx__DECLARE_EVT1(wxEVT_HELP, winid, wxHelpEventHandler(func)) -#define EVT_HELP_RANGE(id1, id2, func) wx__DECLARE_EVT2(wxEVT_HELP, id1, id2, wxHelpEventHandler(func)) -#define EVT_DETAILED_HELP(winid, func) wx__DECLARE_EVT1(wxEVT_DETAILED_HELP, winid, wxHelpEventHandler(func)) -#define EVT_DETAILED_HELP_RANGE(id1, id2, func) wx__DECLARE_EVT2(wxEVT_DETAILED_HELP, id1, id2, wxHelpEventHandler(func)) - -// Context Menu Events -#define EVT_CONTEXT_MENU(func) wx__DECLARE_EVT0(wxEVT_CONTEXT_MENU, wxContextMenuEventHandler(func)) -#define EVT_COMMAND_CONTEXT_MENU(winid, func) wx__DECLARE_EVT1(wxEVT_CONTEXT_MENU, winid, wxContextMenuEventHandler(func)) - -// Clipboard text Events -#define EVT_TEXT_CUT(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_CUT, winid, wxClipboardTextEventHandler(func)) -#define EVT_TEXT_COPY(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_COPY, winid, wxClipboardTextEventHandler(func)) -#define EVT_TEXT_PASTE(winid, func) wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_PASTE, winid, wxClipboardTextEventHandler(func)) - -// ---------------------------------------------------------------------------- -// Global data -// ---------------------------------------------------------------------------- - -// for pending event processing - notice that there is intentionally no -// WXDLLEXPORT here -extern WXDLLIMPEXP_BASE wxList *wxPendingEvents; -#if wxUSE_THREADS - extern WXDLLIMPEXP_BASE wxCriticalSection *wxPendingEventsLocker; -#endif - -// ---------------------------------------------------------------------------- -// Helper functions -// ---------------------------------------------------------------------------- - -#if wxUSE_GUI - -// Find a window with the focus, that is also a descendant of the given window. -// This is used to determine the window to initially send commands to. -WXDLLIMPEXP_CORE wxWindow* wxFindFocusDescendant(wxWindow* ancestor); - -#endif // wxUSE_GUI - -#endif // _WX_EVENT_H__ diff --git a/desmume/src/windows/wx/include/wx/evtloop.h b/desmume/src/windows/wx/include/wx/evtloop.h deleted file mode 100644 index 51b58eb55..000000000 --- a/desmume/src/windows/wx/include/wx/evtloop.h +++ /dev/null @@ -1,229 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/evtloop.h -// Purpose: declares wxEventLoop class -// Author: Vadim Zeitlin -// Modified by: -// Created: 01.06.01 -// RCS-ID: $Id: evtloop.h 53607 2008-05-16 15:21:40Z SN $ -// Copyright: (c) 2001 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_EVTLOOP_H_ -#define _WX_EVTLOOP_H_ - -#include "wx/utils.h" - -class WXDLLIMPEXP_FWD_CORE wxEventLoop; - -// ---------------------------------------------------------------------------- -// wxEventLoop: a GUI event loop -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxEventLoopBase -{ -public: - // trivial, but needed (because of wxEventLoopBase) ctor - wxEventLoopBase() { } - - // dtor - virtual ~wxEventLoopBase() { } - - // start the event loop, return the exit code when it is finished - virtual int Run() = 0; - - // exit from the loop with the given exit code - virtual void Exit(int rc = 0) = 0; - - // return true if any events are available - virtual bool Pending() const = 0; - - // dispatch a single event, return false if we should exit from the loop - virtual bool Dispatch() = 0; - - // return currently active (running) event loop, may be NULL - static wxEventLoop *GetActive() { return ms_activeLoop; } - - // set currently active (running) event loop - static void SetActive(wxEventLoop* loop) { ms_activeLoop = loop; } - - // is this event loop running now? - // - // notice that even if this event loop hasn't terminated yet but has just - // spawned a nested (e.g. modal) event loop, this would return false - bool IsRunning() const; - -protected: - // this function should be called before the event loop terminates, whether - // this happens normally (because of Exit() call) or abnormally (because of - // an exception thrown from inside the loop) - virtual void OnExit() { } - - - // the pointer to currently active loop - static wxEventLoop *ms_activeLoop; - - DECLARE_NO_COPY_CLASS(wxEventLoopBase) -}; - -#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__WXDFB__) - -// this class can be used to implement a standard event loop logic using -// Pending() and Dispatch() -// -// it also handles idle processing automatically -class WXDLLEXPORT wxEventLoopManual : public wxEventLoopBase -{ -public: - wxEventLoopManual(); - - // enters a loop calling OnNextIteration(), Pending() and Dispatch() and - // terminating when Exit() is called - virtual int Run(); - - // sets the "should exit" flag and wakes up the loop so that it terminates - // soon - virtual void Exit(int rc = 0); - -protected: - // implement this to wake up the loop: usually done by posting a dummy event - // to it (called from Exit()) - virtual void WakeUp() = 0; - - // may be overridden to perform some action at the start of each new event - // loop iteration - virtual void OnNextIteration() { } - - - // the loop exit code - int m_exitcode; - - // should we exit the loop? - bool m_shouldExit; -}; - -#endif // platforms using "manual" loop - -// we're moving away from old m_impl wxEventLoop model as otherwise the user -// code doesn't have access to platform-specific wxEventLoop methods and this -// can sometimes be very useful (e.g. under MSW this is necessary for -// integration with MFC) but currently this is done for MSW only, other ports -// should follow a.s.a.p. -#if defined(__WXPALMOS__) - #include "wx/palmos/evtloop.h" -#elif defined(__WXMSW__) - #include "wx/msw/evtloop.h" -#elif defined(__WXMAC__) - #include "wx/mac/evtloop.h" -#elif defined(__WXDFB__) - #include "wx/dfb/evtloop.h" -#else // other platform - -class WXDLLEXPORT wxEventLoopImpl; - -class WXDLLEXPORT wxEventLoop : public wxEventLoopBase -{ -public: - wxEventLoop() { m_impl = NULL; } - virtual ~wxEventLoop(); - - virtual int Run(); - virtual void Exit(int rc = 0); - virtual bool Pending() const; - virtual bool Dispatch(); - -protected: - // the pointer to the port specific implementation class - wxEventLoopImpl *m_impl; - - DECLARE_NO_COPY_CLASS(wxEventLoop) -}; - -#endif // platforms - -inline bool wxEventLoopBase::IsRunning() const { return GetActive() == this; } - -// ---------------------------------------------------------------------------- -// wxModalEventLoop -// ---------------------------------------------------------------------------- - -// this is a naive generic implementation which uses wxWindowDisabler to -// implement modality, we will surely need platform-specific implementations -// too, this generic implementation is here only temporarily to see how it -// works -class WXDLLEXPORT wxModalEventLoop : public wxEventLoop -{ -public: - wxModalEventLoop(wxWindow *winModal) - { - m_windowDisabler = new wxWindowDisabler(winModal); - } - -protected: - virtual void OnExit() - { - delete m_windowDisabler; - m_windowDisabler = NULL; - - wxEventLoop::OnExit(); - } - -private: - wxWindowDisabler *m_windowDisabler; -}; - -// ---------------------------------------------------------------------------- -// wxEventLoopActivator: helper class for wxEventLoop implementations -// ---------------------------------------------------------------------------- - -// this object sets the wxEventLoop given to the ctor as the currently active -// one and unsets it in its dtor, this is especially useful in presence of -// exceptions but is more tidy even when we don't use them -class wxEventLoopActivator -{ -public: - wxEventLoopActivator(wxEventLoop *evtLoop) - { - m_evtLoopOld = wxEventLoop::GetActive(); - wxEventLoop::SetActive(evtLoop); - } - - ~wxEventLoopActivator() - { - // restore the previously active event loop - wxEventLoop::SetActive(m_evtLoopOld); - } - -private: - wxEventLoop *m_evtLoopOld; -}; - -#if wxABI_VERSION >= 20808 -class wxEventLoopGuarantor -{ -public: - wxEventLoopGuarantor() - { - m_evtLoopNew = NULL; - if (!wxEventLoop::GetActive()) - { - m_evtLoopNew = new wxEventLoop; - wxEventLoop::SetActive(m_evtLoopNew); - } - } - - ~wxEventLoopGuarantor() - { - if (m_evtLoopNew) - { - wxEventLoop::SetActive(NULL); - delete m_evtLoopNew; - } - } - -private: - wxEventLoop *m_evtLoopNew; -}; -#endif // wxABI_VERSION >= 20805 - -#endif // _WX_EVTLOOP_H_ diff --git a/desmume/src/windows/wx/include/wx/except.h b/desmume/src/windows/wx/include/wx/except.h deleted file mode 100644 index 9276db65b..000000000 --- a/desmume/src/windows/wx/include/wx/except.h +++ /dev/null @@ -1,30 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/except.h -// Purpose: C++ exception related stuff -// Author: Vadim Zeitlin -// Modified by: -// Created: 17.09.2003 -// RCS-ID: $Id: except.h 27408 2004-05-23 20:53:33Z JS $ -// Copyright: (c) 2003 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_EXCEPT_H_ -#define _WX_EXCEPT_H_ - -#include "wx/defs.h" - -// ---------------------------------------------------------------------------- -// macros working whether wxUSE_EXCEPTIONS is 0 or 1 -// ---------------------------------------------------------------------------- - -#if wxUSE_EXCEPTIONS - #define wxTRY try - #define wxCATCH_ALL(code) catch ( ... ) { code } -#else // !wxUSE_EXCEPTIONS - #define wxTRY - #define wxCATCH_ALL(code) -#endif // wxUSE_EXCEPTIONS/!wxUSE_EXCEPTIONS - -#endif // _WX_EXCEPT_H_ - diff --git a/desmume/src/windows/wx/include/wx/fdrepdlg.h b/desmume/src/windows/wx/include/wx/fdrepdlg.h deleted file mode 100644 index 43e8c4cef..000000000 --- a/desmume/src/windows/wx/include/wx/fdrepdlg.h +++ /dev/null @@ -1,195 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/fdrepdlg.h -// Purpose: wxFindReplaceDialog class -// Author: Markus Greither and Vadim Zeitlin -// Modified by: -// Created: 23/03/2001 -// RCS-ID: -// Copyright: (c) Markus Greither -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FINDREPLACEDLG_H_ -#define _WX_FINDREPLACEDLG_H_ - -#include "wx/defs.h" - -#if wxUSE_FINDREPLDLG - -#include "wx/dialog.h" - -class WXDLLIMPEXP_FWD_CORE wxFindDialogEvent; -class WXDLLIMPEXP_FWD_CORE wxFindReplaceDialog; -class WXDLLIMPEXP_FWD_CORE wxFindReplaceData; -class WXDLLIMPEXP_FWD_CORE wxFindReplaceDialogImpl; - -// ---------------------------------------------------------------------------- -// Flags for wxFindReplaceData.Flags -// ---------------------------------------------------------------------------- - -// flages used by wxFindDialogEvent::GetFlags() -enum wxFindReplaceFlags -{ - // downward search/replace selected (otherwise - upwards) - wxFR_DOWN = 1, - - // whole word search/replace selected - wxFR_WHOLEWORD = 2, - - // case sensitive search/replace selected (otherwise - case insensitive) - wxFR_MATCHCASE = 4 -}; - -// these flags can be specified in wxFindReplaceDialog ctor or Create() -enum wxFindReplaceDialogStyles -{ - // replace dialog (otherwise find dialog) - wxFR_REPLACEDIALOG = 1, - - // don't allow changing the search direction - wxFR_NOUPDOWN = 2, - - // don't allow case sensitive searching - wxFR_NOMATCHCASE = 4, - - // don't allow whole word searching - wxFR_NOWHOLEWORD = 8 -}; - -// ---------------------------------------------------------------------------- -// wxFindReplaceData: holds Setup Data/Feedback Data for wxFindReplaceDialog -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFindReplaceData : public wxObject -{ -public: - wxFindReplaceData() { Init(); } - wxFindReplaceData(wxUint32 flags) { Init(); SetFlags(flags); } - - // accessors - const wxString& GetFindString() { return m_FindWhat; } - const wxString& GetReplaceString() { return m_ReplaceWith; } - - int GetFlags() const { return m_Flags; } - - // setters: may only be called before showing the dialog, no effect later - void SetFlags(wxUint32 flags) { m_Flags = flags; } - - void SetFindString(const wxString& str) { m_FindWhat = str; } - void SetReplaceString(const wxString& str) { m_ReplaceWith = str; } - -protected: - void Init(); - -private: - wxUint32 m_Flags; - wxString m_FindWhat, - m_ReplaceWith; - - friend class wxFindReplaceDialogBase; -}; - -// ---------------------------------------------------------------------------- -// wxFindReplaceDialogBase -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFindReplaceDialogBase : public wxDialog -{ -public: - // ctors and such - wxFindReplaceDialogBase() { m_FindReplaceData = NULL; } - wxFindReplaceDialogBase(wxWindow * WXUNUSED(parent), - wxFindReplaceData *data, - const wxString& WXUNUSED(title), - int WXUNUSED(style) = 0) - { - m_FindReplaceData = data; - } - - virtual ~wxFindReplaceDialogBase(); - - // find dialog data access - const wxFindReplaceData *GetData() const { return m_FindReplaceData; } - void SetData(wxFindReplaceData *data) { m_FindReplaceData = data; } - - // implementation only, don't use - void Send(wxFindDialogEvent& event); - -protected: - wxFindReplaceData *m_FindReplaceData; - - // the last string we searched for - wxString m_lastSearch; - - DECLARE_NO_COPY_CLASS(wxFindReplaceDialogBase) -}; - -// include wxFindReplaceDialog declaration -#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) && !defined(__WXWINCE__) - #include "wx/msw/fdrepdlg.h" -#else - #define wxGenericFindReplaceDialog wxFindReplaceDialog - - #include "wx/generic/fdrepdlg.h" -#endif - -// ---------------------------------------------------------------------------- -// wxFindReplaceDialog events -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFindDialogEvent : public wxCommandEvent -{ -public: - wxFindDialogEvent(wxEventType commandType = wxEVT_NULL, int id = 0) - : wxCommandEvent(commandType, id) { } - - int GetFlags() const { return GetInt(); } - wxString GetFindString() const { return GetString(); } - const wxString& GetReplaceString() const { return m_strReplace; } - - wxFindReplaceDialog *GetDialog() const - { return wxStaticCast(GetEventObject(), wxFindReplaceDialog); } - - // implementation only - void SetFlags(int flags) { SetInt(flags); } - void SetFindString(const wxString& str) { SetString(str); } - void SetReplaceString(const wxString& str) { m_strReplace = str; } - -private: - wxString m_strReplace; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxFindDialogEvent) -}; - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_COMMAND_FIND, 510) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_FIND_NEXT, 511) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_FIND_REPLACE, 512) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_FIND_REPLACE_ALL, 513) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_FIND_CLOSE, 514) -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxFindDialogEventFunction)(wxFindDialogEvent&); - -#define wxFindDialogEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxFindDialogEventFunction, &func) - -#define EVT_FIND(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_FIND, id, wxFindDialogEventHandler(fn)) - -#define EVT_FIND_NEXT(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_FIND_NEXT, id, wxFindDialogEventHandler(fn)) - -#define EVT_FIND_REPLACE(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_FIND_REPLACE, id, wxFindDialogEventHandler(fn)) - -#define EVT_FIND_REPLACE_ALL(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_FIND_REPLACE_ALL, id, wxFindDialogEventHandler(fn)) - -#define EVT_FIND_CLOSE(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_FIND_CLOSE, id, wxFindDialogEventHandler(fn)) - -#endif // wxUSE_FINDREPLDLG - -#endif - // _WX_FDREPDLG_H diff --git a/desmume/src/windows/wx/include/wx/features.h b/desmume/src/windows/wx/include/wx/features.h deleted file mode 100644 index e9c055495..000000000 --- a/desmume/src/windows/wx/include/wx/features.h +++ /dev/null @@ -1,64 +0,0 @@ -/** -* Name: wx/features.h -* Purpose: test macros for the features which might be available in some -* wxWidgets ports but not others -* Author: Vadim Zeitlin -* Modified by: Ryan Norton (Converted to C) -* Created: 18.03.02 -* RCS-ID: $Id: features.h 40865 2006-08-27 09:42:42Z VS $ -* Copyright: (c) 2002 Vadim Zeitlin -* Licence: wxWindows licence -*/ - -/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ - -#ifndef _WX_FEATURES_H_ -#define _WX_FEATURES_H_ - -/* radio menu items are currently not implemented in wxMotif, use this - symbol (kept for compatibility from the time when they were not implemented - under other platforms as well) to test for this */ -#if !defined(__WXMOTIF__) - #define wxHAS_RADIO_MENU_ITEMS -#else - #undef wxHAS_RADIO_MENU_ITEMS -#endif - -/* the raw keyboard codes are generated under wxGTK and wxMSW only */ -#if defined(__WXGTK__) || defined(__WXMSW__) || defined(__WXMAC__) \ - || defined(__WXDFB__) - #define wxHAS_RAW_KEY_CODES -#else - #undef wxHAS_RAW_KEY_CODES -#endif - -/* taskbar is implemented in the major ports */ -#if defined(__WXMSW__) || defined(__WXCOCOA__) \ - || defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXX11__) \ - || defined(__WXMAC_OSX__) || defined(__WXCOCOA__) - #define wxHAS_TASK_BAR_ICON -#else - #undef wxHAS_TASK_BAR_ICON -#endif - -/* wxIconLocation appeared in the middle of 2.5.0 so it's handy to have a */ -/* separate define for it */ -#define wxHAS_ICON_LOCATION - -/* same for wxCrashReport */ -#ifdef __WXMSW__ - #define wxHAS_CRASH_REPORT -#else - #undef wxHAS_CRASH_REPORT -#endif - -/* wxRE_ADVANCED is not always available, depending on regex library used - * (it's unavailable only if compiling via configure against system library) */ -#ifndef WX_NO_REGEX_ADVANCED - #define wxHAS_REGEX_ADVANCED -#else - #undef wxHAS_REGEX_ADVANCED -#endif - -#endif /* _WX_FEATURES_H_ */ - diff --git a/desmume/src/windows/wx/include/wx/ffile.h b/desmume/src/windows/wx/include/wx/ffile.h deleted file mode 100644 index c3dda75d4..000000000 --- a/desmume/src/windows/wx/include/wx/ffile.h +++ /dev/null @@ -1,115 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/ffile.h -// Purpose: wxFFile - encapsulates "FILE *" stream -// Author: Vadim Zeitlin -// Modified by: -// Created: 14.07.99 -// RCS-ID: $Id: ffile.h 38570 2006-04-05 14:37:47Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FFILE_H_ -#define _WX_FFILE_H_ - -#include "wx/defs.h" // for wxUSE_FFILE - -#if wxUSE_FFILE - -#include "wx/string.h" -#include "wx/filefn.h" -#include "wx/convauto.h" - -#include - -// ---------------------------------------------------------------------------- -// class wxFFile: standard C stream library IO -// -// NB: for space efficiency this class has no virtual functions, including -// dtor which is _not_ virtual, so it shouldn't be used as a base class. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFFile -{ -public: - // ctors - // ----- - // def ctor - wxFFile() { m_fp = NULL; } - // open specified file (may fail, use IsOpened()) - wxFFile(const wxChar *filename, const wxChar *mode = _T("r")); - // attach to (already opened) file - wxFFile(FILE *lfp) { m_fp = lfp; } - - // open/close - // open a file (existing or not - the mode controls what happens) - bool Open(const wxChar *filename, const wxChar *mode = _T("r")); - // closes the opened file (this is a NOP if not opened) - bool Close(); - - // assign an existing file descriptor and get it back from wxFFile object - void Attach(FILE *lfp, const wxString& name = wxEmptyString) - { Close(); m_fp = lfp; m_name = name; } - void Detach() { m_fp = NULL; } - FILE *fp() const { return m_fp; } - - // read/write (unbuffered) - // read all data from the file into a string (useful for text files) - bool ReadAll(wxString *str, const wxMBConv& conv = wxConvAuto()); - // returns number of bytes read - use Eof() and Error() to see if an error - // occurred or not - size_t Read(void *pBuf, size_t nCount); - // returns the number of bytes written - size_t Write(const void *pBuf, size_t nCount); - // returns true on success - bool Write(const wxString& s, const wxMBConv& conv = wxConvAuto()) - { - const wxWX2MBbuf buf = s.mb_str(conv); - size_t size = strlen(buf); - return Write((const char *)buf, size) == size; - } - // flush data not yet written - bool Flush(); - - // file pointer operations (return ofsInvalid on failure) - // move ptr ofs bytes related to start/current pos/end of file - bool Seek(wxFileOffset ofs, wxSeekMode mode = wxFromStart); - // move ptr to ofs bytes before the end - bool SeekEnd(wxFileOffset ofs = 0) { return Seek(ofs, wxFromEnd); } - // get current position in the file - wxFileOffset Tell() const; - // get current file length - wxFileOffset Length() const; - - // simple accessors: note that Eof() and Error() may only be called if - // IsOpened()! - // is file opened? - bool IsOpened() const { return m_fp != NULL; } - // is end of file reached? - bool Eof() const { return feof(m_fp) != 0; } - // has an error occurred? - bool Error() const { return ferror(m_fp) != 0; } - // get the file name - const wxString& GetName() const { return m_name; } - // type such as disk or pipe - wxFileKind GetKind() const { return wxGetFileKind(m_fp); } - - // dtor closes the file if opened - ~wxFFile() { Close(); } - -private: - // copy ctor and assignment operator are private because it doesn't make - // sense to copy files this way: attempt to do it will provoke a compile-time - // error. - wxFFile(const wxFFile&); - wxFFile& operator=(const wxFFile&); - - FILE *m_fp; // IO stream or NULL if not opened - - wxString m_name; // the name of the file (for diagnostic messages) -}; - -#endif // wxUSE_FFILE - -#endif // _WX_FFILE_H_ - diff --git a/desmume/src/windows/wx/include/wx/file.h b/desmume/src/windows/wx/include/wx/file.h deleted file mode 100644 index 1691dc0c4..000000000 --- a/desmume/src/windows/wx/include/wx/file.h +++ /dev/null @@ -1,201 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: file.h -// Purpose: wxFile - encapsulates low-level "file descriptor" -// wxTempFile - safely replace the old file -// Author: Vadim Zeitlin -// Modified by: -// Created: 29/01/98 -// RCS-ID: $Id: file.h 46331 2007-06-05 13:16:11Z JS $ -// Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FILEH__ -#define _WX_FILEH__ - -#include "wx/defs.h" - -#if wxUSE_FILE - -#include "wx/string.h" -#include "wx/filefn.h" -#include "wx/strconv.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// we redefine these constants here because S_IREAD &c are _not_ standard -// however, we do assume that the values correspond to the Unix umask bits -#define wxS_IRUSR 00400 -#define wxS_IWUSR 00200 -#define wxS_IXUSR 00100 - -#define wxS_IRGRP 00040 -#define wxS_IWGRP 00020 -#define wxS_IXGRP 00010 - -#define wxS_IROTH 00004 -#define wxS_IWOTH 00002 -#define wxS_IXOTH 00001 - -// default mode for the new files: corresponds to umask 022 -#define wxS_DEFAULT (wxS_IRUSR | wxS_IWUSR | wxS_IRGRP | wxS_IWGRP |\ - wxS_IROTH | wxS_IWOTH) - -// ---------------------------------------------------------------------------- -// class wxFile: raw file IO -// -// NB: for space efficiency this class has no virtual functions, including -// dtor which is _not_ virtual, so it shouldn't be used as a base class. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFile -{ -public: - // more file constants - // ------------------- - // opening mode - enum OpenMode { read, write, read_write, write_append, write_excl }; - // standard values for file descriptor - enum { fd_invalid = -1, fd_stdin, fd_stdout, fd_stderr }; - - // static functions - // ---------------- - // check whether a regular file by this name exists - static bool Exists(const wxChar *name); - // check whether we can access the given file in given mode - // (only read and write make sense here) - static bool Access(const wxChar *name, OpenMode mode); - - // ctors - // ----- - // def ctor - wxFile() { m_fd = fd_invalid; m_error = false; } - // open specified file (may fail, use IsOpened()) - wxFile(const wxChar *szFileName, OpenMode mode = read); - // attach to (already opened) file - wxFile(int lfd) { m_fd = lfd; m_error = false; } - - // open/close - // create a new file (with the default value of bOverwrite, it will fail if - // the file already exists, otherwise it will overwrite it and succeed) - bool Create(const wxChar *szFileName, bool bOverwrite = false, - int access = wxS_DEFAULT); - bool Open(const wxChar *szFileName, OpenMode mode = read, - int access = wxS_DEFAULT); - bool Close(); // Close is a NOP if not opened - - // assign an existing file descriptor and get it back from wxFile object - void Attach(int lfd) { Close(); m_fd = lfd; m_error = false; } - void Detach() { m_fd = fd_invalid; } - int fd() const { return m_fd; } - - // read/write (unbuffered) - // returns number of bytes read or wxInvalidOffset on error - ssize_t Read(void *pBuf, size_t nCount); - // returns the number of bytes written - size_t Write(const void *pBuf, size_t nCount); - // returns true on success - bool Write(const wxString& s, const wxMBConv& conv = wxConvUTF8) - { - const wxWX2MBbuf buf = s.mb_str(conv); - if (!buf) - return false; - size_t size = strlen(buf); - return Write((const char *) buf, size) == size; - } - // flush data not yet written - bool Flush(); - - // file pointer operations (return wxInvalidOffset on failure) - // move ptr ofs bytes related to start/current offset/end of file - wxFileOffset Seek(wxFileOffset ofs, wxSeekMode mode = wxFromStart); - // move ptr to ofs bytes before the end - wxFileOffset SeekEnd(wxFileOffset ofs = 0) { return Seek(ofs, wxFromEnd); } - // get current offset - wxFileOffset Tell() const; - // get current file length - wxFileOffset Length() const; - - // simple accessors - // is file opened? - bool IsOpened() const { return m_fd != fd_invalid; } - // is end of file reached? - bool Eof() const; - // has an error occurred? - bool Error() const { return m_error; } - // type such as disk or pipe - wxFileKind GetKind() const { return wxGetFileKind(m_fd); } - - // dtor closes the file if opened - ~wxFile() { Close(); } - -private: - // copy ctor and assignment operator are private because - // it doesn't make sense to copy files this way: - // attempt to do it will provoke a compile-time error. - wxFile(const wxFile&); - wxFile& operator=(const wxFile&); - - int m_fd; // file descriptor or INVALID_FD if not opened - bool m_error; // error memory -}; - -// ---------------------------------------------------------------------------- -// class wxTempFile: if you want to replace another file, create an instance -// of wxTempFile passing the name of the file to be replaced to the ctor. Then -// you can write to wxTempFile and call Commit() function to replace the old -// file (and close this one) or call Discard() to cancel the modification. If -// you call neither of them, dtor will call Discard(). -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxTempFile -{ -public: - // ctors - // default - wxTempFile() { } - // associates the temp file with the file to be replaced and opens it - wxTempFile(const wxString& strName); - - // open the temp file (strName is the name of file to be replaced) - bool Open(const wxString& strName); - - // is the file opened? - bool IsOpened() const { return m_file.IsOpened(); } - // get current file length - wxFileOffset Length() const { return m_file.Length(); } - // move ptr ofs bytes related to start/current offset/end of file - wxFileOffset Seek(wxFileOffset ofs, wxSeekMode mode = wxFromStart) - { return m_file.Seek(ofs, mode); } - // get current offset - wxFileOffset Tell() const { return m_file.Tell(); } - - // I/O (both functions return true on success, false on failure) - bool Write(const void *p, size_t n) { return m_file.Write(p, n) == n; } - bool Write(const wxString& str, const wxMBConv& conv = wxConvUTF8) - { return m_file.Write(str, conv); } - - // different ways to close the file - // validate changes and delete the old file of name m_strName - bool Commit(); - // discard changes - void Discard(); - - // dtor calls Discard() if file is still opened - ~wxTempFile(); - -private: - // no copy ctor/assignment operator - wxTempFile(const wxTempFile&); - wxTempFile& operator=(const wxTempFile&); - - wxString m_strName, // name of the file to replace in Commit() - m_strTemp; // temporary file name - wxFile m_file; // the temporary file -}; - -#endif // wxUSE_FILE - -#endif // _WX_FILEH__ diff --git a/desmume/src/windows/wx/include/wx/fileconf.h b/desmume/src/windows/wx/include/wx/fileconf.h deleted file mode 100644 index 0a76ab4c8..000000000 --- a/desmume/src/windows/wx/include/wx/fileconf.h +++ /dev/null @@ -1,246 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/fileconf.h -// Purpose: wxFileConfig derivation of wxConfigBase -// Author: Vadim Zeitlin -// Modified by: -// Created: 07.04.98 (adapted from appconf.cpp) -// RCS-ID: $Id: fileconf.h 50711 2007-12-15 02:57:58Z VZ $ -// Copyright: (c) 1997 Karsten Ballueder & Vadim Zeitlin -// Ballueder@usa.net -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _FILECONF_H -#define _FILECONF_H - -#include "wx/defs.h" - -#if wxUSE_CONFIG - -#include "wx/textfile.h" -#include "wx/string.h" -#include "wx/confbase.h" - -// ---------------------------------------------------------------------------- -// wxFileConfig -// ---------------------------------------------------------------------------- - -/* - wxFileConfig derives from base Config and implements file based config class, - i.e. it uses ASCII disk files to store the information. These files are - alternatively called INI, .conf or .rc in the documentation. They are - organized in groups or sections, which can nest (i.e. a group contains - subgroups, which contain their own subgroups &c). Each group has some - number of entries, which are "key = value" pairs. More precisely, the format - is: - - # comments are allowed after either ';' or '#' (Win/UNIX standard) - - # blank lines (as above) are ignored - - # global entries are members of special (no name) top group - written_for = Windows - platform = Linux - - # the start of the group 'Foo' - [Foo] # may put comments like this also - # following 3 lines are entries - key = value - another_key = " strings with spaces in the beginning should be quoted, \ - otherwise the spaces are lost" - last_key = but you don't have to put " normally (nor quote them, like here) - - # subgroup of the group 'Foo' - # (order is not important, only the name is: separator is '/', as in paths) - [Foo/Bar] - # entries prefixed with "!" are immutable, i.e. can't be changed if they are - # set in the system-wide config file - !special_key = value - bar_entry = whatever - - [Foo/Bar/Fubar] # depth is (theoretically :-) unlimited - # may have the same name as key in another section - bar_entry = whatever not - - You have {read/write/delete}Entry functions (guess what they do) and also - setCurrentPath to select current group. enum{Subgroups/Entries} allow you - to get all entries in the config file (in the current group). Finally, - flush() writes immediately all changed entries to disk (otherwise it would - be done automatically in dtor) - - wxFileConfig manages not less than 2 config files for each program: global - and local (or system and user if you prefer). Entries are read from both of - them and the local entries override the global ones unless the latter is - immutable (prefixed with '!') in which case a warning message is generated - and local value is ignored. Of course, the changes are always written to local - file only. - - The names of these files can be specified in a number of ways. First of all, - you can use the standard convention: using the ctor which takes 'strAppName' - parameter will probably be sufficient for 90% of cases. If, for whatever - reason you wish to use the files with some other names, you can always use the - second ctor. - - wxFileConfig also may automatically expand the values of environment variables - in the entries it reads: for example, if you have an entry - score_file = $HOME/.score - a call to Read(&str, "score_file") will return a complete path to .score file - unless the expansion was previously disabled with SetExpandEnvVars(false) call - (it's on by default, the current status can be retrieved with - IsExpandingEnvVars function). -*/ -class WXDLLIMPEXP_FWD_BASE wxFileConfigGroup; -class WXDLLIMPEXP_FWD_BASE wxFileConfigEntry; -class WXDLLIMPEXP_FWD_BASE wxFileConfigLineList; - -#if wxUSE_STREAMS -class WXDLLIMPEXP_FWD_BASE wxInputStream; -class WXDLLIMPEXP_FWD_BASE wxOutputStream; -#endif // wxUSE_STREAMS - -class WXDLLIMPEXP_BASE wxFileConfig : public wxConfigBase -{ -public: - // construct the "standard" full name for global (system-wide) and - // local (user-specific) config files from the base file name. - // - // the following are the filenames returned by this functions: - // global local - // Unix /etc/file.ext ~/.file - // Win %windir%\file.ext %USERPROFILE%\file.ext - // - // where file is the basename of szFile, ext is its extension - // or .conf (Unix) or .ini (Win) if it has none - static wxString GetGlobalFileName(const wxChar *szFile); - static wxString GetLocalFileName(const wxChar *szFile); - - // ctor & dtor - // New constructor: one size fits all. Specify wxCONFIG_USE_LOCAL_FILE or - // wxCONFIG_USE_GLOBAL_FILE to say which files should be used. - wxFileConfig(const wxString& appName = wxEmptyString, - const wxString& vendorName = wxEmptyString, - const wxString& localFilename = wxEmptyString, - const wxString& globalFilename = wxEmptyString, - long style = wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_GLOBAL_FILE, - const wxMBConv& conv = wxConvAuto()); - -#if wxUSE_STREAMS - // ctor that takes an input stream. - wxFileConfig(wxInputStream &inStream, const wxMBConv& conv = wxConvAuto()); -#endif // wxUSE_STREAMS - - // dtor will save unsaved data - virtual ~wxFileConfig(); - - // under Unix, set the umask to be used for the file creation, do nothing - // under other systems -#ifdef __UNIX__ - void SetUmask(int mode) { m_umask = mode; } -#else // !__UNIX__ - void SetUmask(int WXUNUSED(mode)) { } -#endif // __UNIX__/!__UNIX__ - - // implement inherited pure virtual functions - virtual void SetPath(const wxString& strPath); - virtual const wxString& GetPath() const { return m_strPath; } - - virtual bool GetFirstGroup(wxString& str, long& lIndex) const; - virtual bool GetNextGroup (wxString& str, long& lIndex) const; - virtual bool GetFirstEntry(wxString& str, long& lIndex) const; - virtual bool GetNextEntry (wxString& str, long& lIndex) const; - - virtual size_t GetNumberOfEntries(bool bRecursive = false) const; - virtual size_t GetNumberOfGroups(bool bRecursive = false) const; - - virtual bool HasGroup(const wxString& strName) const; - virtual bool HasEntry(const wxString& strName) const; - - virtual bool Flush(bool bCurrentOnly = false); - - virtual bool RenameEntry(const wxString& oldName, const wxString& newName); - virtual bool RenameGroup(const wxString& oldName, const wxString& newName); - - virtual bool DeleteEntry(const wxString& key, bool bGroupIfEmptyAlso = true); - virtual bool DeleteGroup(const wxString& szKey); - virtual bool DeleteAll(); - - // additional, wxFileConfig-specific, functionality -#if wxUSE_STREAMS - // save the entire config file text to the given stream, note that the text - // won't be saved again in dtor when Flush() is called if you use this method - // as it won't be "changed" any more - virtual bool Save(wxOutputStream& os, const wxMBConv& conv = wxConvAuto()); -#endif // wxUSE_STREAMS - -public: - // functions to work with this list - wxFileConfigLineList *LineListAppend(const wxString& str); - wxFileConfigLineList *LineListInsert(const wxString& str, - wxFileConfigLineList *pLine); // NULL => Prepend() - void LineListRemove(wxFileConfigLineList *pLine); - bool LineListIsEmpty(); - -protected: - virtual bool DoReadString(const wxString& key, wxString *pStr) const; - virtual bool DoReadLong(const wxString& key, long *pl) const; - - virtual bool DoWriteString(const wxString& key, const wxString& szValue); - virtual bool DoWriteLong(const wxString& key, long lValue); - -private: - // GetXXXFileName helpers: return ('/' terminated) directory names - static wxString GetGlobalDir(); - static wxString GetLocalDir(); - - // common part of all ctors (assumes that m_str{Local|Global}File are already - // initialized - void Init(); - - // common part of from dtor and DeleteAll - void CleanUp(); - - // parse the whole file - void Parse(const wxTextBuffer& buffer, bool bLocal); - - // the same as SetPath("/") - void SetRootPath(); - - // real SetPath() implementation, returns true if path could be set or false - // if path doesn't exist and createMissingComponents == false - bool DoSetPath(const wxString& strPath, bool createMissingComponents); - - // set/test the dirty flag - void SetDirty() { m_isDirty = true; } - void ResetDirty() { m_isDirty = false; } - bool IsDirty() const { return m_isDirty; } - - - // member variables - // ---------------- - wxFileConfigLineList *m_linesHead, // head of the linked list - *m_linesTail; // tail - - wxString m_strLocalFile, // local file name passed to ctor - m_strGlobalFile; // global - wxString m_strPath; // current path (not '/' terminated) - - wxFileConfigGroup *m_pRootGroup, // the top (unnamed) group - *m_pCurrentGroup; // the current group - - wxMBConv *m_conv; - -#ifdef __UNIX__ - int m_umask; // the umask to use for file creation -#endif // __UNIX__ - - bool m_isDirty; // if true, we have unsaved changes - - DECLARE_NO_COPY_CLASS(wxFileConfig) -}; - -#endif - // wxUSE_CONFIG - -#endif - //_FILECONF_H - diff --git a/desmume/src/windows/wx/include/wx/filedlg.h b/desmume/src/windows/wx/include/wx/filedlg.h deleted file mode 100644 index 8f3fc48d5..000000000 --- a/desmume/src/windows/wx/include/wx/filedlg.h +++ /dev/null @@ -1,226 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/filedlg.h -// Purpose: wxFileDialog base header -// Author: Robert Roebling -// Modified by: -// Created: 8/17/99 -// Copyright: (c) Robert Roebling -// RCS-ID: $Id: filedlg.h 44027 2006-12-21 19:26:48Z VZ $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FILEDLG_H_BASE_ -#define _WX_FILEDLG_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_FILEDLG - -#include "wx/dialog.h" -#include "wx/arrstr.h" - -//---------------------------------------------------------------------------- -// wxFileDialog data -//---------------------------------------------------------------------------- - -/* - The flags below must coexist with the following flags in m_windowStyle - #define wxCAPTION 0x20000000 - #define wxMAXIMIZE 0x00002000 - #define wxCLOSE_BOX 0x00001000 - #define wxSYSTEM_MENU 0x00000800 - wxBORDER_NONE = 0x00200000 - #define wxRESIZE_BORDER 0x00000040 -*/ - -enum -{ - wxFD_OPEN = 0x0001, - wxFD_SAVE = 0x0002, - wxFD_OVERWRITE_PROMPT = 0x0004, - wxFD_FILE_MUST_EXIST = 0x0010, - wxFD_MULTIPLE = 0x0020, - wxFD_CHANGE_DIR = 0x0080, - wxFD_PREVIEW = 0x0100 -}; - -#if WXWIN_COMPATIBILITY_2_6 -enum -{ - wxOPEN = wxFD_OPEN, - wxSAVE = wxFD_SAVE, - wxOVERWRITE_PROMPT = wxFD_OVERWRITE_PROMPT, -#if WXWIN_COMPATIBILITY_2_4 - wxHIDE_READONLY = 0x0008, -#endif - wxFILE_MUST_EXIST = wxFD_FILE_MUST_EXIST, - wxMULTIPLE = wxFD_MULTIPLE, - wxCHANGE_DIR = wxFD_CHANGE_DIR -}; -#endif - -#define wxFD_DEFAULT_STYLE wxFD_OPEN - -extern WXDLLEXPORT_DATA(const wxChar) wxFileDialogNameStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxFileSelectorPromptStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxFileSelectorDefaultWildcardStr[]; - -//---------------------------------------------------------------------------- -// wxFileDialogBase -//---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFileDialogBase: public wxDialog -{ -public: - wxFileDialogBase () { Init(); } - - wxFileDialogBase(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) - { - Init(); - Create(parent, message, defaultDir, defaultFile, wildCard, style, pos, sz, name); - } - - 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); - - bool HasFdFlag(int flag) const { return HasFlag(flag); } - - virtual void SetMessage(const wxString& message) { m_message = message; } - virtual void SetPath(const wxString& path) { m_path = path; } - virtual void SetDirectory(const wxString& dir) { m_dir = dir; } - virtual void SetFilename(const wxString& name) { m_fileName = name; } - virtual void SetWildcard(const wxString& wildCard) { m_wildCard = wildCard; } - virtual void SetFilterIndex(int filterIndex) { m_filterIndex = filterIndex; } - - virtual wxString GetMessage() const { return m_message; } - virtual wxString GetPath() const { return m_path; } - virtual void GetPaths(wxArrayString& paths) const { paths.Empty(); paths.Add(m_path); } - virtual wxString GetDirectory() const { return m_dir; } - virtual wxString GetFilename() const { return m_fileName; } - virtual void GetFilenames(wxArrayString& files) const { files.Empty(); files.Add(m_fileName); } - virtual wxString GetWildcard() const { return m_wildCard; } - virtual int GetFilterIndex() const { return m_filterIndex; } - - // Utility functions - -#if WXWIN_COMPATIBILITY_2_4 - // Parses the wildCard, returning the number of filters. - // Returns 0 if none or if there's a problem, - // The arrays will contain an equal number of items found before the error. - // wildCard is in the form: - // "All files (*)|*|Image Files (*.jpeg *.png)|*.jpg;*.png" - wxDEPRECATED( static int ParseWildcard(const wxString& wildCard, - wxArrayString& descriptions, - wxArrayString& filters) ); -#endif // WXWIN_COMPATIBILITY_2_4 - -#if WXWIN_COMPATIBILITY_2_6 - - wxDEPRECATED( long GetStyle() const ); - wxDEPRECATED( void SetStyle(long style) ); - -#endif // WXWIN_COMPATIBILITY_2_6 - - - // Append first extension to filePath from a ';' separated extensionList - // if filePath = "path/foo.bar" just return it as is - // if filePath = "foo[.]" and extensionList = "*.jpg;*.png" return "foo.jpg" - // if the extension is "*.j?g" (has wildcards) or "jpg" then return filePath - static wxString AppendExtension(const wxString &filePath, - const wxString &extensionList); - -protected: - wxString m_message; - wxString m_dir; - wxString m_path; // Full path - wxString m_fileName; - wxString m_wildCard; - int m_filterIndex; - -private: - void Init(); - DECLARE_DYNAMIC_CLASS(wxFileDialogBase) - DECLARE_NO_COPY_CLASS(wxFileDialogBase) -}; - -//---------------------------------------------------------------------------- -// wxFileDialog convenience functions -//---------------------------------------------------------------------------- - -// File selector - backward compatibility -WXDLLEXPORT wxString -wxFileSelector(const wxChar *message = wxFileSelectorPromptStr, - const wxChar *default_path = NULL, - const wxChar *default_filename = NULL, - const wxChar *default_extension = NULL, - const wxChar *wildcard = wxFileSelectorDefaultWildcardStr, - int flags = 0, - wxWindow *parent = NULL, - int x = wxDefaultCoord, int y = wxDefaultCoord); - -// An extended version of wxFileSelector -WXDLLEXPORT wxString -wxFileSelectorEx(const wxChar *message = wxFileSelectorPromptStr, - const wxChar *default_path = NULL, - const wxChar *default_filename = NULL, - int *indexDefaultExtension = NULL, - const wxChar *wildcard = wxFileSelectorDefaultWildcardStr, - int flags = 0, - wxWindow *parent = NULL, - int x = wxDefaultCoord, int y = wxDefaultCoord); - -// Ask for filename to load -WXDLLEXPORT wxString -wxLoadFileSelector(const wxChar *what, - const wxChar *extension, - const wxChar *default_name = (const wxChar *)NULL, - wxWindow *parent = (wxWindow *) NULL); - -// Ask for filename to save -WXDLLEXPORT wxString -wxSaveFileSelector(const wxChar *what, - const wxChar *extension, - const wxChar *default_name = (const wxChar *) NULL, - wxWindow *parent = (wxWindow *) NULL); - - -#if defined (__WXUNIVERSAL__) -#define wxUSE_GENERIC_FILEDIALOG -#include "wx/generic/filedlgg.h" -#elif defined(__WXMSW__) -#include "wx/msw/filedlg.h" -#elif defined(__WXMOTIF__) -#include "wx/motif/filedlg.h" -#elif defined(__WXGTK24__) -#include "wx/gtk/filedlg.h" // GTK+ > 2.4 has native version -#elif defined(__WXGTK20__) -#define wxUSE_GENERIC_FILEDIALOG -#include "wx/generic/filedlgg.h" -#elif defined(__WXGTK__) -#include "wx/gtk1/filedlg.h" -#elif defined(__WXMAC__) -#include "wx/mac/filedlg.h" -#elif defined(__WXCOCOA__) -#include "wx/cocoa/filedlg.h" -#elif defined(__WXPM__) -#include "wx/os2/filedlg.h" -#endif - -#endif // wxUSE_FILEDLG - -#endif // _WX_FILEDLG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/filefn.h b/desmume/src/windows/wx/include/wx/filefn.h deleted file mode 100644 index 56c01c7bc..000000000 --- a/desmume/src/windows/wx/include/wx/filefn.h +++ /dev/null @@ -1,741 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/filefn.h -// Purpose: File- and directory-related functions -// Author: Julian Smart -// Modified by: -// Created: 29/01/98 -// RCS-ID: $Id: filefn.h 53877 2008-05-31 12:43:44Z SN $ -// Copyright: (c) 1998 Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _FILEFN_H_ -#define _FILEFN_H_ - -#include "wx/list.h" -#include "wx/arrstr.h" - -#ifdef __WXWINCE__ - #include "wx/msw/wince/time.h" - #include "wx/msw/private.h" -#else - #include -#endif - -#ifdef __WXWINCE__ -// Nothing -#elif !defined(__MWERKS__) - #include - #include -#else - #ifdef __MACH__ - #include - #include - #include - #include - #else - #include - #include - #include - #endif -#endif - -#ifdef __OS2__ -// need to check for __OS2__ first since currently both -// __OS2__ and __UNIX__ are defined. - #include - #include "wx/os2/private.h" - #ifdef __WATCOMC__ - #include - #endif - #include - #ifdef __EMX__ - #include - #endif -#elif defined(__UNIX__) - #include - #include -#endif - -#if defined(__WINDOWS__) && !defined(__WXMICROWIN__) -#if !defined( __GNUWIN32__ ) && !defined( __MWERKS__ ) && !defined(__SALFORDC__) && !defined(__WXWINCE__) && !defined(__CYGWIN__) - #include - #include - #include -#endif // __WINDOWS__ -#endif // native Win compiler - -#if defined(__DOS__) - #ifdef __WATCOMC__ - #include - #include - #include - #endif - #ifdef __DJGPP__ - #include - #include - #endif -#endif - -#ifdef __BORLANDC__ // Please someone tell me which version of Borland needs - // this (3.1 I believe) and how to test for it. - // If this works for Borland 4.0 as well, then no worries. - #include -#endif - -#ifdef __SALFORDC__ - #include - #include -#endif - -#ifndef __WXWINCE__ - #include // O_RDONLY &c -#endif -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -#ifdef __WXWINCE__ - typedef long off_t; -#else - // define off_t - #if !defined(__WXMAC__) || defined(__UNIX__) || defined(__MACH__) - #include - #else - typedef long off_t; - #endif -#endif - -#if (defined(__VISUALC__) && !defined(__WXWINCE__)) || ( defined(__MWERKS__) && defined( __INTEL__) ) - typedef _off_t off_t; -#elif defined(__SYMANTEC__) - typedef long off_t; -#elif defined(__MWERKS__) && !defined(__INTEL__) && !defined(__MACH__) - typedef long off_t; -#endif - -enum wxSeekMode -{ - wxFromStart, - wxFromCurrent, - wxFromEnd -}; - -enum wxFileKind -{ - wxFILE_KIND_UNKNOWN, - wxFILE_KIND_DISK, // a file supporting seeking to arbitrary offsets - wxFILE_KIND_TERMINAL, // a tty - wxFILE_KIND_PIPE // a pipe -}; - -// ---------------------------------------------------------------------------- -// declare our versions of low level file functions: some compilers prepend -// underscores to the usual names, some also have Unicode versions of them -// ---------------------------------------------------------------------------- - -// Wrappers around Win32 api functions like CreateFile, ReadFile and such -// Implemented in filefnwce.cpp -#if defined( __WXWINCE__) - typedef __int64 wxFileOffset; - #define wxFileOffsetFmtSpec _("I64") - int wxOpen(const wxChar *filename, int oflag, int WXUNUSED(pmode)); - int wxAccess(const wxChar *name, int WXUNUSED(how)); - int wxClose(int fd); - int wxFsync(int WXUNUSED(fd)); - int wxRead(int fd, void *buf, unsigned int count); - int wxWrite(int fd, const void *buf, unsigned int count); - int wxEof(int fd); - wxFileOffset wxSeek(int fd, wxFileOffset offset, int origin); - #define wxLSeek wxSeek - wxFileOffset wxTell(int fd); - - // always Unicode under WinCE - #define wxMkDir _wmkdir - #define wxRmDir _wrmdir - #define wxStat _wstat - #define wxStructStat struct _stat -#elif (defined(__WXMSW__) || defined(__OS2__)) && !defined(__WXPALMOS__) && \ - ( \ - defined(__VISUALC__) || \ - (defined(__MINGW32__) && !defined(__WINE__) && \ - wxCHECK_W32API_VERSION(0, 5)) || \ - defined(__MWERKS__) || \ - defined(__DMC__) || \ - defined(__WATCOMC__) || \ - defined(__BORLANDC__) \ - ) - - #undef wxHAS_HUGE_FILES - - // detect compilers which have support for huge files - #if defined(__VISUALC__) - #define wxHAS_HUGE_FILES 1 - #elif defined(__MINGW32__) - #define wxHAS_HUGE_FILES 1 - #elif defined(_LARGE_FILES) - #define wxHAS_HUGE_FILES 1 - #endif - - // other Windows compilers (DMC, Watcom, Metrowerks and Borland) don't have - // huge file support (or at least not all functions needed for it by wx) - // currently - - #ifdef wxHAS_HUGE_FILES - typedef wxLongLong_t wxFileOffset; - #define wxFileOffsetFmtSpec wxLongLongFmtSpec - #else - typedef off_t wxFileOffset; - #endif - - - // functions - - // MSVC and compatible compilers prepend underscores to the POSIX function - // names, other compilers don't and even if their later versions usually do - // define the versions with underscores for MSVC compatibility, it's better - // to avoid using them as they're not present in earlier versions and - // always using the native functions spelling is easier than testing for - // the versions - #if defined(__BORLANDC__) || defined(__DMC__) || defined(__WATCOMC__) || defined(__MINGW64__) - #define wxPOSIX_IDENT(func) ::func - #else // by default assume MSVC-compatible names - #define wxPOSIX_IDENT(func) _ ## func - #define wxHAS_UNDERSCORES_IN_POSIX_IDENTS - #endif - - // at least Borland 5.5 doesn't like "struct ::stat" so don't use the scope - // resolution operator present in wxPOSIX_IDENT for it - #ifdef __BORLANDC__ - #define wxPOSIX_STRUCT(s) struct s - #else - #define wxPOSIX_STRUCT(s) struct wxPOSIX_IDENT(s) - #endif - - // first functions not working with strings, i.e. without ANSI/Unicode - // complications - #define wxClose wxPOSIX_IDENT(close) - - #if defined(__MWERKS__) - #if __MSL__ >= 0x6000 - #define wxRead(fd, buf, nCount) _read(fd, (void *)buf, nCount) - #define wxWrite(fd, buf, nCount) _write(fd, (void *)buf, nCount) - #else - #define wxRead(fd, buf, nCount)\ - _read(fd, (const char *)buf, nCount) - #define wxWrite(fd, buf, nCount)\ - _write(fd, (const char *)buf, nCount) - #endif - #else // __MWERKS__ - #define wxRead wxPOSIX_IDENT(read) - #define wxWrite wxPOSIX_IDENT(write) - #endif - - #ifdef wxHAS_HUGE_FILES - #ifndef __MINGW64__ - #define wxSeek wxPOSIX_IDENT(lseeki64) - #define wxLseek wxPOSIX_IDENT(lseeki64) - #define wxTell wxPOSIX_IDENT(telli64) - #else - // unfortunately, mingw-W64 is somewhat inconsistent... - #define wxSeek _lseeki64 - #define wxLseek _lseeki64 - #define wxTell _telli64 - #endif - #else // !wxHAS_HUGE_FILES - #define wxSeek wxPOSIX_IDENT(lseek) - #define wxLseek wxPOSIX_IDENT(lseek) - #define wxTell wxPOSIX_IDENT(tell) - #endif // wxHAS_HUGE_FILES/!wxHAS_HUGE_FILES - - #ifndef __WATCOMC__ - #if !defined(__BORLANDC__) || (__BORLANDC__ > 0x540) - // NB: this one is not POSIX and always has the underscore - #define wxFsync _commit - - // could be already defined by configure (Cygwin) - #ifndef HAVE_FSYNC - #define HAVE_FSYNC - #endif - #endif // BORLANDC - #endif - - #define wxEof wxPOSIX_IDENT(eof) - - // then the functions taking strings - #if wxUSE_UNICODE - #if wxUSE_UNICODE_MSLU - // implement the missing file functions in Win9x ourselves - #if defined( __VISUALC__ ) \ - || ( defined(__MINGW32__) && wxCHECK_W32API_VERSION( 0, 5 ) ) \ - || ( defined(__MWERKS__) && defined(__WXMSW__) ) \ - || ( defined(__BORLANDC__) && (__BORLANDC__ > 0x460) ) \ - || defined(__DMC__) - - WXDLLIMPEXP_BASE int wxMSLU__wopen(const wxChar *name, - int flags, int mode); - WXDLLIMPEXP_BASE int wxMSLU__waccess(const wxChar *name, - int mode); - WXDLLIMPEXP_BASE int wxMSLU__wmkdir(const wxChar *name); - WXDLLIMPEXP_BASE int wxMSLU__wrmdir(const wxChar *name); - - WXDLLIMPEXP_BASE int - wxMSLU__wstat(const wxChar *name, wxPOSIX_STRUCT(stat) *buffer); - WXDLLIMPEXP_BASE int - wxMSLU__wstati64(const wxChar *name, - wxPOSIX_STRUCT(stati64) *buffer); - #endif // Windows compilers with MSLU support - - #define wxOpen wxMSLU__wopen - - #define wxAccess wxMSLU__waccess - #define wxMkDir wxMSLU__wmkdir - #define wxRmDir wxMSLU__wrmdir - #ifdef wxHAS_HUGE_FILES - #define wxStat wxMSLU__wstati64 - #else - #define wxStat wxMSLU__wstat - #endif - #else // !wxUSE_UNICODE_MSLU - #ifdef __BORLANDC__ - #if __BORLANDC__ >= 0x550 && __BORLANDC__ <= 0x551 - WXDLLIMPEXP_BASE int wxOpen(const wxChar *pathname, - int flags, mode_t mode); - #else - #define wxOpen _wopen - #endif - #define wxAccess _waccess - #define wxMkDir _wmkdir - #define wxRmDir _wrmdir - #ifdef wxHAS_HUGE_FILES - #define wxStat _wstati64 - #else - #define wxStat _wstat - #endif - #else - #define wxOpen _wopen - #define wxAccess _waccess - #define wxMkDir _wmkdir - #define wxRmDir _wrmdir - #ifdef wxHAS_HUGE_FILES - #define wxStat _wstati64 - #else - #define wxStat _wstat - #endif - #endif - #endif // wxUSE_UNICODE_MSLU/!wxUSE_UNICODE_MSLU - #else // !wxUSE_UNICODE - #define wxOpen wxPOSIX_IDENT(open) - #define wxAccess wxPOSIX_IDENT(access) - #define wxMkDir wxPOSIX_IDENT(mkdir) - #define wxRmDir wxPOSIX_IDENT(rmdir) - #ifdef wxHAS_HUGE_FILES - #define wxStat wxPOSIX_IDENT(stati64) - #else - // Unfortunately Watcom is not consistent, so:- - #if defined(__OS2__) && defined(__WATCOMC__) - #define wxStat _stat - #else - #if defined (__BORLANDC__) - #define wxStat _stat //wxPOSIX_IDENT(stat) - #else - #define wxStat wxPOSIX_IDENT(stat) - #endif // !borland - #endif // !watcom - #endif - #endif // wxUSE_UNICODE/!wxUSE_UNICODE - - // Types: Notice that Watcom is the only compiler to have a wide char - // version of struct stat as well as a wide char stat function variant. - // This was droped since OW 1.4 "for consistency across platforms". - #ifdef wxHAS_HUGE_FILES - #if wxUSE_UNICODE && wxONLY_WATCOM_EARLIER_THAN(1,4) - #define wxStructStat struct _wstati64 - #else - #define wxStructStat struct _stati64 - #endif - #else - #if wxUSE_UNICODE && wxONLY_WATCOM_EARLIER_THAN(1,4) - #define wxStructStat struct _wstat - #else - #define wxStructStat struct _stat - #endif - #endif - - // constants (unless already defined by the user code) - #ifdef wxHAS_UNDERSCORES_IN_POSIX_IDENTS - #ifndef O_RDONLY - #define O_RDONLY _O_RDONLY - #define O_WRONLY _O_WRONLY - #define O_RDWR _O_RDWR - #define O_EXCL _O_EXCL - #define O_CREAT _O_CREAT - #define O_BINARY _O_BINARY - #endif - - #ifndef S_IFMT - #define S_IFMT _S_IFMT - #define S_IFDIR _S_IFDIR - #define S_IFREG _S_IFREG - #endif - #endif // wxHAS_UNDERSCORES_IN_POSIX_IDENTS - - #ifdef wxHAS_HUGE_FILES - // wxFile is present and supports large files. Currently wxFFile - // doesn't have large file support with any Windows compiler (even - // Win64 ones). - #if wxUSE_FILE - #define wxHAS_LARGE_FILES - #endif - #endif - - // it's a private define, undefine it so that nobody gets tempted to use it - #undef wxHAS_HUGE_FILES -#else // Unix or Windows using unknown compiler, assume POSIX supported - 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 _T("") - #endif - // functions - #define wxClose close - #define wxRead ::read - #define wxWrite ::write - #define wxLseek lseek - #define wxSeek lseek - #define wxFsync fsync - #define wxEof eof - - #define wxMkDir mkdir - #define wxRmDir rmdir - - #define wxTell(fd) lseek(fd, 0, SEEK_CUR) - - #define wxStructStat struct stat - - #if wxUSE_UNICODE - #define wxNEED_WX_UNISTD_H - #if defined(__DMC__) - typedef unsigned long mode_t; - #endif - WXDLLIMPEXP_BASE int wxStat( const wxChar *file_name, wxStructStat *buf ); - WXDLLIMPEXP_BASE int wxLstat( const wxChar *file_name, wxStructStat *buf ); - WXDLLIMPEXP_BASE int wxAccess( const wxChar *pathname, int mode ); - WXDLLIMPEXP_BASE int wxOpen( const wxChar *pathname, int flags, mode_t mode ); - #else - #define wxOpen open - #define wxStat stat - #define wxLstat lstat - #define wxAccess access - #endif - - #define wxHAS_NATIVE_LSTAT -#endif // platforms - -#ifdef O_BINARY - #define wxO_BINARY O_BINARY -#else - #define wxO_BINARY 0 -#endif - -// if the platform doesn't have symlinks, define wxLstat to be the same as -// wxStat to avoid #ifdefs in the code using it -#ifndef wxHAS_NATIVE_LSTAT - #define wxLstat wxStat -#endif - -#if defined(__VISAGECPP__) && __IBMCPP__ >= 400 -// -// VisualAge C++ V4.0 cannot have any external linkage const decs -// in headers included by more than one primary source -// -extern const int wxInvalidOffset; -#else -const int wxInvalidOffset = -1; -#endif - -// ---------------------------------------------------------------------------- -// functions -// ---------------------------------------------------------------------------- -WXDLLIMPEXP_BASE bool wxFileExists(const wxString& filename); - -// does the path exist? (may have or not '/' or '\\' at the end) -WXDLLIMPEXP_BASE bool wxDirExists(const wxChar *pszPathName); - -WXDLLIMPEXP_BASE bool wxIsAbsolutePath(const wxString& filename); - -// Get filename -WXDLLIMPEXP_BASE wxChar* wxFileNameFromPath(wxChar *path); -WXDLLIMPEXP_BASE wxString wxFileNameFromPath(const wxString& path); - -// Get directory -WXDLLIMPEXP_BASE wxString wxPathOnly(const wxString& path); - -// wxString version -WXDLLIMPEXP_BASE wxString wxRealPath(const wxString& path); - -WXDLLIMPEXP_BASE void wxDos2UnixFilename(wxChar *s); - -WXDLLIMPEXP_BASE void wxUnix2DosFilename(wxChar *s); - -// Strip the extension, in situ -WXDLLIMPEXP_BASE void wxStripExtension(wxChar *buffer); -WXDLLIMPEXP_BASE void wxStripExtension(wxString& buffer); - -// Get a temporary filename -WXDLLIMPEXP_BASE wxChar* wxGetTempFileName(const wxString& prefix, wxChar *buf = (wxChar *) NULL); -WXDLLIMPEXP_BASE bool wxGetTempFileName(const wxString& prefix, wxString& buf); - -// Expand file name (~/ and ${OPENWINHOME}/ stuff) -WXDLLIMPEXP_BASE wxChar* wxExpandPath(wxChar *dest, const wxChar *path); -WXDLLIMPEXP_BASE bool wxExpandPath(wxString& dest, const wxChar *path); - -// Contract w.r.t environment ( -> ${OPENWINHOME}/lib) -// and make (if under the home tree) relative to home -// [caller must copy-- volatile] -WXDLLIMPEXP_BASE wxChar* wxContractPath(const wxString& filename, - const wxString& envname = wxEmptyString, - const wxString& user = wxEmptyString); - -// Destructive removal of /./ and /../ stuff -WXDLLIMPEXP_BASE wxChar* wxRealPath(wxChar *path); - -// Allocate a copy of the full absolute path -WXDLLIMPEXP_BASE wxChar* wxCopyAbsolutePath(const wxString& path); - -// Get first file name matching given wild card. -// Flags are reserved for future use. -#define wxFILE 1 -#define wxDIR 2 -WXDLLIMPEXP_BASE wxString wxFindFirstFile(const wxChar *spec, int flags = wxFILE); -WXDLLIMPEXP_BASE wxString wxFindNextFile(); - -// Does the pattern contain wildcards? -WXDLLIMPEXP_BASE bool wxIsWild(const wxString& pattern); - -// Does the pattern match the text (usually a filename)? -// If dot_special is true, doesn't match * against . (eliminating -// `hidden' dot files) -WXDLLIMPEXP_BASE bool wxMatchWild(const wxString& pattern, const wxString& text, bool dot_special = true); - -// Concatenate two files to form third -WXDLLIMPEXP_BASE bool wxConcatFiles(const wxString& file1, const wxString& file2, const wxString& file3); - -// Copy file1 to file2 -WXDLLIMPEXP_BASE bool wxCopyFile(const wxString& file1, const wxString& file2, - bool overwrite = true); - -// Remove file -WXDLLIMPEXP_BASE bool wxRemoveFile(const wxString& file); - -// Rename file -WXDLLIMPEXP_BASE bool wxRenameFile(const wxString& file1, const wxString& file2, bool overwrite = true); - -// Get current working directory. -#if WXWIN_COMPATIBILITY_2_6 -// If buf is NULL, allocates space using new, else -// copies into buf. -// IMPORTANT NOTE getcwd is know not to work under some releases -// of Win32s 1.3, according to MS release notes! -wxDEPRECATED( WXDLLIMPEXP_BASE wxChar* wxGetWorkingDirectory(wxChar *buf = (wxChar *) NULL, int sz = 1000) ); -// new and preferred version of wxGetWorkingDirectory -// NB: can't have the same name because of overloading ambiguity -#endif // WXWIN_COMPATIBILITY_2_6 -WXDLLIMPEXP_BASE wxString wxGetCwd(); - -// Set working directory -WXDLLIMPEXP_BASE bool wxSetWorkingDirectory(const wxString& d); - -// Make directory -WXDLLIMPEXP_BASE bool wxMkdir(const wxString& dir, int perm = 0777); - -// Remove directory. Flags reserved for future use. -WXDLLIMPEXP_BASE bool wxRmdir(const wxString& dir, int flags = 0); - -// Return the type of an open file -WXDLLIMPEXP_BASE wxFileKind wxGetFileKind(int fd); -WXDLLIMPEXP_BASE wxFileKind wxGetFileKind(FILE *fp); - -#if WXWIN_COMPATIBILITY_2_6 -// compatibility defines, don't use in new code -wxDEPRECATED( inline bool wxPathExists(const wxChar *pszPathName) ); -inline bool wxPathExists(const wxChar *pszPathName) -{ - return wxDirExists(pszPathName); -} -#endif //WXWIN_COMPATIBILITY_2_6 - -// permissions; these functions work both on files and directories: -WXDLLIMPEXP_BASE bool wxIsWritable(const wxString &path); -WXDLLIMPEXP_BASE bool wxIsReadable(const wxString &path); -WXDLLIMPEXP_BASE bool wxIsExecutable(const wxString &path); - -// ---------------------------------------------------------------------------- -// separators in file names -// ---------------------------------------------------------------------------- - -// between file name and extension -#define wxFILE_SEP_EXT wxT('.') - -// between drive/volume name and the path -#define wxFILE_SEP_DSK wxT(':') - -// between the path components -#define wxFILE_SEP_PATH_DOS wxT('\\') -#define wxFILE_SEP_PATH_UNIX wxT('/') -#define wxFILE_SEP_PATH_MAC wxT(':') -#define wxFILE_SEP_PATH_VMS wxT('.') // VMS also uses '[' and ']' - -// separator in the path list (as in PATH environment variable) -// there is no PATH variable in Classic Mac OS so just use the -// semicolon (it must be different from the file name separator) -// NB: these are strings and not characters on purpose! -#define wxPATH_SEP_DOS wxT(";") -#define wxPATH_SEP_UNIX wxT(":") -#define wxPATH_SEP_MAC wxT(";") - -// platform independent versions -#if defined(__UNIX__) && !defined(__OS2__) - // CYGWIN also uses UNIX settings - #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 -#else // Windows and OS/2 - #define wxFILE_SEP_PATH wxFILE_SEP_PATH_DOS - #define wxPATH_SEP wxPATH_SEP_DOS -#endif // Unix/Windows - -// this is useful for wxString::IsSameAs(): to compare two file names use -// filename1.IsSameAs(filename2, wxARE_FILENAMES_CASE_SENSITIVE) -#if defined(__UNIX__) && !defined(__DARWIN__) && !defined(__OS2__) - #define wxARE_FILENAMES_CASE_SENSITIVE true -#else // Windows, Mac OS and OS/2 - #define wxARE_FILENAMES_CASE_SENSITIVE false -#endif // Unix/Windows - -// is the char a path separator? -inline bool wxIsPathSeparator(wxChar c) -{ - // under DOS/Windows we should understand both Unix and DOS file separators -#if ( defined(__UNIX__) && !defined(__OS2__) )|| defined(__MAC__) - return c == wxFILE_SEP_PATH; -#else - return c == wxFILE_SEP_PATH_DOS || c == wxFILE_SEP_PATH_UNIX; -#endif -} - -// does the string ends with path separator? -WXDLLIMPEXP_BASE bool wxEndsWithPathSeparator(const wxChar *pszFileName); - -// split the full path into path (including drive for DOS), name and extension -// (understands both '/' and '\\') -WXDLLIMPEXP_BASE void wxSplitPath(const wxChar *pszFileName, - wxString *pstrPath, - wxString *pstrName, - wxString *pstrExt); - -// find a file in a list of directories, returns false if not found -WXDLLIMPEXP_BASE bool wxFindFileInPath(wxString *pStr, const wxChar *pszPath, const wxChar *pszFile); - -// Get the OS directory if appropriate (such as the Windows directory). -// On non-Windows platform, probably just return the empty string. -WXDLLIMPEXP_BASE wxString wxGetOSDirectory(); - -#if wxUSE_DATETIME - -// Get file modification time -WXDLLIMPEXP_BASE time_t wxFileModificationTime(const wxString& filename); - -#endif // wxUSE_DATETIME - -// Parses the wildCard, returning the number of filters. -// Returns 0 if none or if there's a problem, -// The arrays will contain an equal number of items found before the error. -// wildCard is in the form: -// "All files (*)|*|Image Files (*.jpeg *.png)|*.jpg;*.png" -WXDLLIMPEXP_BASE int wxParseCommonDialogsFilter(const wxString& wildCard, wxArrayString& descriptions, wxArrayString& filters); - -// ---------------------------------------------------------------------------- -// classes -// ---------------------------------------------------------------------------- - -#ifdef __UNIX__ - -// set umask to the given value in ctor and reset it to the old one in dtor -class WXDLLIMPEXP_BASE wxUmaskChanger -{ -public: - // change the umask to the given one if it is not -1: this allows to write - // the same code whether you really want to change umask or not, as is in - // wxFileConfig::Flush() for example - wxUmaskChanger(int umaskNew) - { - m_umaskOld = umaskNew == -1 ? -1 : (int)umask((mode_t)umaskNew); - } - - ~wxUmaskChanger() - { - if ( m_umaskOld != -1 ) - umask((mode_t)m_umaskOld); - } - -private: - int m_umaskOld; -}; - -// this macro expands to an "anonymous" wxUmaskChanger object under Unix and -// nothing elsewhere -#define wxCHANGE_UMASK(m) wxUmaskChanger wxMAKE_UNIQUE_NAME(umaskChanger_)(m) - -#else // !__UNIX__ - -#define wxCHANGE_UMASK(m) - -#endif // __UNIX__/!__UNIX__ - - -// Path searching -class WXDLLIMPEXP_BASE wxPathList : public wxArrayString -{ -public: - wxPathList() {} - wxPathList(const wxArrayString &arr) - { Add(arr); } - - // Adds all paths in environment variable - void AddEnvList(const wxString& envVariable); - - // Adds given path to this list - bool Add(const wxString& path); - void Add(const wxArrayString &paths); - - // Find the first full path for which the file exists - wxString FindValidPath(const wxString& filename) const; - - // Find the first full path for which the file exists; ensure it's an - // absolute path that gets returned. - wxString FindAbsoluteValidPath(const wxString& filename) const; - - // Given full path and filename, add path to list - bool EnsureFileAccessible(const wxString& path); - -#if WXWIN_COMPATIBILITY_2_6 - // Returns true if the path is in the list - wxDEPRECATED( bool Member(const wxString& path) const ); -#endif -}; - -#endif // _WX_FILEFN_H_ diff --git a/desmume/src/windows/wx/include/wx/filename.h b/desmume/src/windows/wx/include/wx/filename.h deleted file mode 100644 index 0a3abb58f..000000000 --- a/desmume/src/windows/wx/include/wx/filename.h +++ /dev/null @@ -1,541 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/filename.h -// Purpose: wxFileName - encapsulates a file path -// Author: Robert Roebling, Vadim Zeitlin -// Modified by: -// Created: 28.12.00 -// RCS-ID: $Id: filename.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 2000 Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FILENAME_H_ -#define _WX_FILENAME_H_ - -/* - TODO: - - 1. support for drives under Windows - 2. more file operations: - a) chmod() - b) [acm]time() - get and set - c) rename()? - 3. SameFileAs() function to compare inodes under Unix - */ - -#include "wx/arrstr.h" -#include "wx/filefn.h" -#include "wx/datetime.h" -#include "wx/intl.h" - -#if wxUSE_FILE -class WXDLLIMPEXP_FWD_BASE wxFile; -#endif - -#if wxUSE_FFILE -class WXDLLIMPEXP_FWD_BASE wxFFile; -#endif - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// the various values for the path format: this mainly affects the path -// separator but also whether or not the path has the drive part (as under -// Windows) -enum wxPathFormat -{ - wxPATH_NATIVE = 0, // the path format for the current platform - wxPATH_UNIX, - wxPATH_BEOS = wxPATH_UNIX, - wxPATH_MAC, - wxPATH_DOS, - wxPATH_WIN = wxPATH_DOS, - wxPATH_OS2 = wxPATH_DOS, - wxPATH_VMS, - - wxPATH_MAX // Not a valid value for specifying path format -}; - -// the kind of normalization to do with the file name: these values can be -// or'd together to perform several operations at once -enum wxPathNormalize -{ - wxPATH_NORM_ENV_VARS = 0x0001, // replace env vars with their values - wxPATH_NORM_DOTS = 0x0002, // squeeze all .. and . and prepend cwd - wxPATH_NORM_TILDE = 0x0004, // Unix only: replace ~ and ~user - wxPATH_NORM_CASE = 0x0008, // if case insensitive => tolower - wxPATH_NORM_ABSOLUTE = 0x0010, // make the path absolute - wxPATH_NORM_LONG = 0x0020, // make the path the long form - wxPATH_NORM_SHORTCUT = 0x0040, // resolve the shortcut, if it is a shortcut - wxPATH_NORM_ALL = 0x00ff & ~wxPATH_NORM_CASE -}; - -// what exactly should GetPath() return? -enum -{ - wxPATH_GET_VOLUME = 0x0001, // include the volume if applicable - wxPATH_GET_SEPARATOR = 0x0002 // terminate the path with the separator -}; - -// MkDir flags -enum -{ - wxPATH_MKDIR_FULL = 0x0001 // create directories recursively -}; - -// error code of wxFileName::GetSize() -extern WXDLLIMPEXP_DATA_BASE(wxULongLong) wxInvalidSize; - - - -// ---------------------------------------------------------------------------- -// wxFileName: encapsulates a file path -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFileName -{ -public: - // constructors and assignment - - // the usual stuff - wxFileName() { Clear(); } - wxFileName(const wxFileName& filepath) { Assign(filepath); } - - // from a full filename: if it terminates with a '/', a directory path - // is contructed (the name will be empty), otherwise a file name and - // extension are extracted from it - wxFileName( const wxString& fullpath, wxPathFormat format = wxPATH_NATIVE ) - { Assign( fullpath, format ); } - - // from a directory name and a file name - wxFileName(const wxString& path, - const wxString& name, - wxPathFormat format = wxPATH_NATIVE) - { Assign(path, name, format); } - - // from a volume, directory name, file base name and extension - wxFileName(const wxString& volume, - const wxString& path, - const wxString& name, - const wxString& ext, - wxPathFormat format = wxPATH_NATIVE) - { Assign(volume, path, name, ext, format); } - - // from a directory name, file base name and extension - wxFileName(const wxString& path, - const wxString& name, - const wxString& ext, - wxPathFormat format = wxPATH_NATIVE) - { Assign(path, name, ext, format); } - - // the same for delayed initialization - - void Assign(const wxFileName& filepath); - - void Assign(const wxString& fullpath, - wxPathFormat format = wxPATH_NATIVE); - - void Assign(const wxString& volume, - const wxString& path, - const wxString& name, - const wxString& ext, - bool hasExt, - wxPathFormat format = wxPATH_NATIVE); - - void Assign(const wxString& volume, - const wxString& path, - const wxString& name, - const wxString& ext, - wxPathFormat format = wxPATH_NATIVE) - { Assign(volume, path, name, ext, !ext.empty(), format); } - - void Assign(const wxString& path, - const wxString& name, - wxPathFormat format = wxPATH_NATIVE); - - void Assign(const wxString& path, - const wxString& name, - const wxString& ext, - wxPathFormat format = wxPATH_NATIVE); - - void AssignDir(const wxString& dir, wxPathFormat format = wxPATH_NATIVE); - - // assorted assignment operators - - wxFileName& operator=(const wxFileName& filename) - { Assign(filename); return *this; } - - wxFileName& operator=(const wxString& filename) - { Assign(filename); return *this; } - - // reset all components to default, uninitialized state - void Clear(); - - // static pseudo constructors - static wxFileName FileName(const wxString& file, - wxPathFormat format = wxPATH_NATIVE); - static wxFileName DirName(const wxString& dir, - wxPathFormat format = wxPATH_NATIVE); - - // file tests - - // is the filename valid at all? - bool IsOk() const - { - // we're fine if we have the path or the name or if we're a root dir - return m_dirs.size() != 0 || !m_name.empty() || !m_relative || - !m_ext.empty() || m_hasExt; - } - - // does the file with this name exists? - bool FileExists() const; - static bool FileExists( const wxString &file ); - - // does the directory with this name exists? - bool DirExists() const; - static bool DirExists( const wxString &dir ); - - // checks on most common flags for files/directories; - // more platform-specific features (like e.g. Unix permissions) are not - // available in wxFileName - - bool IsDirWritable() const { return wxIsWritable(GetPath()); } - static bool IsDirWritable(const wxString &path) { return wxDirExists(path) && wxIsWritable(path); } - - bool IsDirReadable() const { return wxIsReadable(GetPath()); } - static bool IsDirReadable(const wxString &path) { return wxDirExists(path) && wxIsReadable(path); } - - // NOTE: IsDirExecutable() is not present because the meaning of "executable" - // directory is very platform-dependent and also not so useful - - bool IsFileWritable() const { return wxIsWritable(GetFullPath()); } - static bool IsFileWritable(const wxString &path) { return wxFileExists(path) && wxIsWritable(path); } - - bool IsFileReadable() const { return wxIsReadable(GetFullPath()); } - static bool IsFileReadable(const wxString &path) { return wxFileExists(path) && wxIsReadable(path); } - - bool IsFileExecutable() const { return wxIsExecutable(GetFullPath()); } - static bool IsFileExecutable(const wxString &path) { return wxFileExists(path) && wxIsExecutable(path); } - - - // time functions -#if wxUSE_DATETIME - // set the file last access/mod and creation times - // (any of the pointers may be NULL) - bool SetTimes(const wxDateTime *dtAccess, - const wxDateTime *dtMod, - const wxDateTime *dtCreate); - - // set the access and modification times to the current moment - bool Touch(); - - // return the last access, last modification and create times - // (any of the pointers may be NULL) - bool GetTimes(wxDateTime *dtAccess, - wxDateTime *dtMod, - wxDateTime *dtCreate) const; - - // convenience wrapper: get just the last mod time of the file - wxDateTime GetModificationTime() const - { - wxDateTime dtMod; - (void)GetTimes(NULL, &dtMod, NULL); - return dtMod; - } -#endif // wxUSE_DATETIME - -#ifdef __WXMAC__ - bool MacSetTypeAndCreator( wxUint32 type , wxUint32 creator ) ; - bool MacGetTypeAndCreator( wxUint32 *type , wxUint32 *creator ) ; - // gets the 'common' type and creator for a certain extension - static bool MacFindDefaultTypeAndCreator( const wxString& ext , wxUint32 *type , wxUint32 *creator ) ; - // registers application defined extensions and their default type and creator - static void MacRegisterDefaultTypeAndCreator( const wxString& ext , wxUint32 type , wxUint32 creator ) ; - // looks up the appropriate type and creator from the registration and then sets - bool MacSetDefaultTypeAndCreator() ; -#endif - - // various file/dir operations - - // retrieve the value of the current working directory - void AssignCwd(const wxString& volume = wxEmptyString); - static wxString GetCwd(const wxString& volume = wxEmptyString); - - // change the current working directory - bool SetCwd(); - static bool SetCwd( const wxString &cwd ); - - // get the value of user home (Unix only mainly) - void AssignHomeDir(); - static wxString GetHomeDir(); - - // get the system temporary directory - static wxString GetTempDir(); - -#if wxUSE_FILE || wxUSE_FFILE - // get a temp file name starting with the specified prefix - void AssignTempFileName(const wxString& prefix); - static wxString CreateTempFileName(const wxString& prefix); -#endif // wxUSE_FILE - -#if wxUSE_FILE - // get a temp file name starting with the specified prefix and open the - // file passed to us using this name for writing (atomically if - // possible) - void AssignTempFileName(const wxString& prefix, wxFile *fileTemp); - static wxString CreateTempFileName(const wxString& prefix, - wxFile *fileTemp); -#endif // wxUSE_FILE - -#if wxUSE_FFILE - // get a temp file name starting with the specified prefix and open the - // file passed to us using this name for writing (atomically if - // possible) - void AssignTempFileName(const wxString& prefix, wxFFile *fileTemp); - static wxString CreateTempFileName(const wxString& prefix, - wxFFile *fileTemp); -#endif // wxUSE_FFILE - - // directory creation and removal. - bool Mkdir( int perm = 0777, int flags = 0); - static bool Mkdir( const wxString &dir, int perm = 0777, int flags = 0 ); - - bool Rmdir(); - static bool Rmdir( const wxString &dir ); - - // operations on the path - - // normalize the path: with the default flags value, the path will be - // made absolute, without any ".." and "." and all environment - // variables will be expanded in it - // - // this may be done using another (than current) value of cwd - bool Normalize(int flags = wxPATH_NORM_ALL, - const wxString& cwd = wxEmptyString, - wxPathFormat format = wxPATH_NATIVE); - - // get a path path relative to the given base directory, i.e. opposite - // of Normalize - // - // pass an empty string to get a path relative to the working directory - // - // returns true if the file name was modified, false if we failed to do - // anything with it (happens when the file is on a different volume, - // for example) - bool MakeRelativeTo(const wxString& pathBase = wxEmptyString, - wxPathFormat format = wxPATH_NATIVE); - - // make the path absolute - // - // this may be done using another (than current) value of cwd - bool MakeAbsolute(const wxString& cwd = wxEmptyString, - wxPathFormat format = wxPATH_NATIVE) - { return Normalize(wxPATH_NORM_DOTS | wxPATH_NORM_ABSOLUTE | - wxPATH_NORM_TILDE, cwd, format); } - -#if defined(__WIN32__) && !defined(__WXWINCE__) && wxUSE_OLE - // if the path is a shortcut, return the target and optionally, - // the arguments - bool GetShortcutTarget(const wxString& shortcutPath, - wxString& targetFilename, - wxString* arguments = NULL); -#endif - - // Comparison - - // compares with the rules of the given platforms format - bool SameAs(const wxFileName& filepath, - wxPathFormat format = wxPATH_NATIVE) const; - - // compare with another filename object - bool operator==(const wxFileName& filename) const - { return SameAs(filename); } - bool operator!=(const wxFileName& filename) const - { return !SameAs(filename); } - - // compare with a filename string interpreted as a native file name - bool operator==(const wxString& filename) const - { return SameAs(wxFileName(filename)); } - bool operator!=(const wxString& filename) const - { return !SameAs(wxFileName(filename)); } - - // are the file names of this type cases sensitive? - static bool IsCaseSensitive( wxPathFormat format = wxPATH_NATIVE ); - - // is this filename absolute? - bool IsAbsolute(wxPathFormat format = wxPATH_NATIVE) const; - - // is this filename relative? - bool IsRelative(wxPathFormat format = wxPATH_NATIVE) const - { return !IsAbsolute(format); } - - // Returns the characters that aren't allowed in filenames - // on the specified platform. - static wxString GetForbiddenChars(wxPathFormat format = wxPATH_NATIVE); - - // Information about path format - - // get the string separating the volume from the path for this format, - // return an empty string if this format doesn't support the notion of - // volumes at all - static wxString GetVolumeSeparator(wxPathFormat format = wxPATH_NATIVE); - - // get the string of path separators for this format - static wxString GetPathSeparators(wxPathFormat format = wxPATH_NATIVE); - - // get the string of path terminators, i.e. characters which terminate the - // path - static wxString GetPathTerminators(wxPathFormat format = wxPATH_NATIVE); - - // get the canonical path separator for this format - static wxChar GetPathSeparator(wxPathFormat format = wxPATH_NATIVE) - { return GetPathSeparators(format)[0u]; } - - // is the char a path separator for this format? - static bool IsPathSeparator(wxChar ch, wxPathFormat format = wxPATH_NATIVE); - - // Dir accessors - size_t GetDirCount() const { return m_dirs.size(); } - void AppendDir(const wxString& dir); - void PrependDir(const wxString& dir); - void InsertDir(size_t before, const wxString& dir); - void RemoveDir(size_t pos); - void RemoveLastDir() { RemoveDir(GetDirCount() - 1); } - - // Other accessors - void SetExt( const wxString &ext ) { m_ext = ext; m_hasExt = !m_ext.empty(); } - void ClearExt() { m_ext = wxEmptyString; m_hasExt = false; } - void SetEmptyExt() { m_ext = wxT(""); m_hasExt = true; } - wxString GetExt() const { return m_ext; } - bool HasExt() const { return m_hasExt; } - - void SetName( const wxString &name ) { m_name = name; } - wxString GetName() const { return m_name; } - bool HasName() const { return !m_name.empty(); } - - void SetVolume( const wxString &volume ) { m_volume = volume; } - wxString GetVolume() const { return m_volume; } - bool HasVolume() const { return !m_volume.empty(); } - - // full name is the file name + extension (but without the path) - void SetFullName(const wxString& fullname); - wxString GetFullName() const; - - const wxArrayString& GetDirs() const { return m_dirs; } - - // flags are combination of wxPATH_GET_XXX flags - wxString GetPath(int flags = wxPATH_GET_VOLUME, - wxPathFormat format = wxPATH_NATIVE) const; - - // Replace current path with this one - void SetPath( const wxString &path, wxPathFormat format = wxPATH_NATIVE ); - - // Construct full path with name and ext - wxString GetFullPath( wxPathFormat format = wxPATH_NATIVE ) const; - - // Return the short form of the path (returns identity on non-Windows platforms) - wxString GetShortPath() const; - - // Return the long form of the path (returns identity on non-Windows platforms) - wxString GetLongPath() const; - - // Is this a file or directory (not necessarily an existing one) - bool IsDir() const { return m_name.empty() && m_ext.empty(); } - - // various helpers - - // get the canonical path format for this platform - static wxPathFormat GetFormat( wxPathFormat format = wxPATH_NATIVE ); - - // split a fullpath into the volume, path, (base) name and extension - // (all of the pointers can be NULL) - static void SplitPath(const wxString& fullpath, - wxString *volume, - wxString *path, - wxString *name, - wxString *ext, - bool *hasExt = NULL, - wxPathFormat format = wxPATH_NATIVE); - - static void SplitPath(const wxString& fullpath, - wxString *volume, - wxString *path, - wxString *name, - wxString *ext, - wxPathFormat format) - { - SplitPath(fullpath, volume, path, name, ext, NULL, format); - } - - // compatibility version: volume is part of path - static void SplitPath(const wxString& fullpath, - wxString *path, - wxString *name, - wxString *ext, - wxPathFormat format = wxPATH_NATIVE); - - // split a path into volume and pure path part - static void SplitVolume(const wxString& fullpathWithVolume, - wxString *volume, - wxString *path, - wxPathFormat format = wxPATH_NATIVE); - - // Filesize - - // returns the size of the given filename - wxULongLong GetSize() const; - static wxULongLong GetSize(const wxString &file); - - // returns the size in a human readable form - wxString GetHumanReadableSize(const wxString &nullsize = wxGetTranslation(_T("Not available")), - int precision = 1) const; - static wxString GetHumanReadableSize(const wxULongLong &sz, - const wxString &nullsize = wxGetTranslation(_T("Not available")), - int precision = 1); - - - // deprecated methods, don't use any more - // -------------------------------------- - -#ifndef __DIGITALMARS__ - wxString GetPath( bool withSep, wxPathFormat format = wxPATH_NATIVE ) const - { return GetPath(withSep ? wxPATH_GET_SEPARATOR : 0, format); } -#endif - wxString GetPathWithSep(wxPathFormat format = wxPATH_NATIVE ) const - { return GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR, format); } - -private: - // check whether this dir is valid for Append/Prepend/InsertDir() - static bool IsValidDirComponent(const wxString& dir); - - // the drive/volume/device specification (always empty for Unix) - wxString m_volume; - - // the path components of the file - wxArrayString m_dirs; - - // the file name and extension (empty for directories) - wxString m_name, - m_ext; - - // when m_dirs is empty it may mean either that we have no path at all or - // that our path is '/', i.e. the root directory - // - // we use m_relative to distinguish between these two cases, it will be - // true in the former and false in the latter - // - // NB: the path is not absolute just because m_relative is false, it still - // needs the drive (i.e. volume) in some formats (Windows) - bool m_relative; - - // when m_ext is empty, it may be because we don't have any extension or - // because we have an empty extension - // - // the difference is important as file with name "foo" and without - // extension has full name "foo" while with empty extension it is "foo." - bool m_hasExt; -}; - -#endif // _WX_FILENAME_H_ - diff --git a/desmume/src/windows/wx/include/wx/filepicker.h b/desmume/src/windows/wx/include/wx/filepicker.h deleted file mode 100644 index aad2a4f65..000000000 --- a/desmume/src/windows/wx/include/wx/filepicker.h +++ /dev/null @@ -1,398 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/filepicker.h -// Purpose: wxFilePickerCtrl, wxDirPickerCtrl base header -// Author: Francesco Montorsi -// Modified by: -// Created: 14/4/2006 -// Copyright: (c) Francesco Montorsi -// RCS-ID: $Id: filepicker.h 49804 2007-11-10 01:09:42Z VZ $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FILEDIRPICKER_H_BASE_ -#define _WX_FILEDIRPICKER_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_FILEPICKERCTRL || wxUSE_DIRPICKERCTRL - -#include "wx/pickerbase.h" - -class WXDLLIMPEXP_FWD_CORE wxDialog; -class WXDLLIMPEXP_FWD_CORE wxFileDirPickerEvent; - -extern WXDLLEXPORT_DATA(const wxChar) wxFilePickerWidgetLabel[]; -extern WXDLLEXPORT_DATA(const wxChar) wxFilePickerWidgetNameStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxFilePickerCtrlNameStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxFileSelectorPromptStr[]; - -extern WXDLLEXPORT_DATA(const wxChar) wxDirPickerWidgetLabel[]; -extern WXDLLEXPORT_DATA(const wxChar) wxDirPickerWidgetNameStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxDirPickerCtrlNameStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxDirSelectorPromptStr[]; - - -// ---------------------------------------------------------------------------- -// wxFileDirPickerWidgetBase: a generic abstract interface which must be -// implemented by controls used by wxFileDirPickerCtrlBase -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxFileDirPickerWidgetBase -{ -public: - wxFileDirPickerWidgetBase() { } - virtual ~wxFileDirPickerWidgetBase() { } - - wxString GetPath() const { return m_path; } - virtual void SetPath(const wxString &str) { m_path=str; } - - // returns the picker widget cast to wxControl - virtual wxControl *AsControl() = 0; - -protected: - virtual void UpdateDialogPath(wxDialog *) = 0; - virtual void UpdatePathFromDialog(wxDialog *) = 0; - - wxString m_path; -}; - -// Styles which must be supported by all controls implementing wxFileDirPickerWidgetBase -// NB: these styles must be defined to carefully-chosen values to -// avoid conflicts with wxButton's styles - -#define wxFLP_OPEN 0x0400 -#define wxFLP_SAVE 0x0800 -#define wxFLP_OVERWRITE_PROMPT 0x1000 -#define wxFLP_FILE_MUST_EXIST 0x2000 -#define wxFLP_CHANGE_DIR 0x4000 - -// NOTE: wxMULTIPLE is not supported ! - - -#define wxDIRP_DIR_MUST_EXIST 0x0008 -#define wxDIRP_CHANGE_DIR 0x0010 - - -// map platform-dependent controls which implement the wxFileDirPickerWidgetBase -// under the name "wxFilePickerWidget" and "wxDirPickerWidget". -// NOTE: wxFileDirPickerCtrlBase will allocate a wx{File|Dir}PickerWidget and this -// requires that all classes being mapped as wx{File|Dir}PickerWidget have the -// same prototype for the contructor... -// since GTK >= 2.6, there is GtkFileButton -#if defined(__WXGTK26__) && !defined(__WXUNIVERSAL__) - #include "wx/gtk/filepicker.h" - #define wxFilePickerWidget wxFileButton - #define wxDirPickerWidget wxDirButton -#else - #include "wx/generic/filepickerg.h" - #define wxFilePickerWidget wxGenericFileButton - #define wxDirPickerWidget wxGenericDirButton -#endif - - - -// ---------------------------------------------------------------------------- -// wxFileDirPickerCtrlBase -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxFileDirPickerCtrlBase : public wxPickerBase -{ -public: - wxFileDirPickerCtrlBase() : m_bIgnoreNextTextCtrlUpdate(false) {} - -protected: - // NB: no default values since this function will never be used - // directly by the user and derived classes wouldn't use them - bool CreateBase(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); - -public: // public API - - wxString GetPath() const; - void SetPath(const wxString &str); - -public: // internal functions - - void UpdatePickerFromTextCtrl(); - void UpdateTextCtrlFromPicker(); - - // event handler for our picker - void OnFileDirChange(wxFileDirPickerEvent &); - - // Returns TRUE if the current path is a valid one - // (i.e. a valid file for a wxFilePickerWidget or a valid - // folder for a wxDirPickerWidget). - virtual bool CheckPath(const wxString &str) const = 0; - - // TRUE if any textctrl change should update the current working directory - virtual bool IsCwdToUpdate() const = 0; - - // Returns the event type sent by this picker - virtual wxEventType GetEventType() const = 0; - - // Returns the filtered value currently placed in the text control (if present). - virtual wxString GetTextCtrlValue() const = 0; - -protected: - // creates the picker control - virtual - wxFileDirPickerWidgetBase *CreatePicker(wxWindow *parent, - const wxString& path, - const wxString& message, - const wxString& wildcard) = 0; - -protected: - - // true if the next UpdateTextCtrl() call is to ignore - bool m_bIgnoreNextTextCtrlUpdate; - - // m_picker object as wxFileDirPickerWidgetBase interface - wxFileDirPickerWidgetBase *m_pickerIface; -}; - -#endif // wxUSE_FILEPICKERCTRL || wxUSE_DIRPICKERCTRL - - -#if wxUSE_FILEPICKERCTRL - -// ---------------------------------------------------------------------------- -// wxFilePickerCtrl: platform-independent class which embeds the -// platform-dependent wxFilePickerWidget and, if wxFLP_USE_TEXTCTRL style is -// used, a textctrl next to it. -// ---------------------------------------------------------------------------- - -#define wxFLP_USE_TEXTCTRL (wxPB_USE_TEXTCTRL) - -#ifdef __WXGTK__ - // GTK apps usually don't have a textctrl next to the picker - #define wxFLP_DEFAULT_STYLE (wxFLP_OPEN|wxFLP_FILE_MUST_EXIST) -#else - #define wxFLP_DEFAULT_STYLE (wxFLP_USE_TEXTCTRL|wxFLP_OPEN|wxFLP_FILE_MUST_EXIST) -#endif - -class WXDLLIMPEXP_CORE wxFilePickerCtrl : public wxFileDirPickerCtrlBase -{ -public: - wxFilePickerCtrl() {} - - wxFilePickerCtrl(wxWindow *parent, - wxWindowID id, - const wxString& path = wxEmptyString, - const wxString& message = wxFileSelectorPromptStr, - const wxString& wildcard = wxFileSelectorDefaultWildcardStr, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxFLP_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxFilePickerCtrlNameStr) - { - Create(parent, id, path, message, wildcard, pos, size, style, - validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& path = wxEmptyString, - const wxString& message = wxFileSelectorPromptStr, - const wxString& wildcard = wxFileSelectorDefaultWildcardStr, - const wxPoint& pos = wxDefaultPosition, - 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); - } - - -public: // overrides - - // return true if the given path is valid for this control - bool CheckPath(const wxString& path) const; - - // return the text control value in canonical form - wxString GetTextCtrlValue() const; - - bool IsCwdToUpdate() const - { return HasFlag(wxFLP_CHANGE_DIR); } - - wxEventType GetEventType() const - { return wxEVT_COMMAND_FILEPICKER_CHANGED; } - -protected: - wxFileDirPickerWidgetBase *CreatePicker(wxWindow *parent, - const wxString& path, - const wxString& message, - const wxString& wildcard) - { - return new wxFilePickerWidget(parent, wxID_ANY, - wxFilePickerWidgetLabel, - path, message, wildcard, - wxDefaultPosition, wxDefaultSize, - GetPickerStyle(GetWindowStyle())); - } - - // 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)); - } - -private: - DECLARE_DYNAMIC_CLASS(wxFilePickerCtrl) -}; - -#endif // wxUSE_FILEPICKERCTRL - - -#if wxUSE_DIRPICKERCTRL - -// ---------------------------------------------------------------------------- -// wxDirPickerCtrl: platform-independent class which embeds the -// platform-dependent wxDirPickerWidget and eventually a textctrl -// (see wxDIRP_USE_TEXTCTRL) next to it. -// ---------------------------------------------------------------------------- - -#define wxDIRP_USE_TEXTCTRL (wxPB_USE_TEXTCTRL) - -#ifdef __WXGTK__ - // GTK apps usually don't have a textctrl next to the picker - #define wxDIRP_DEFAULT_STYLE (wxDIRP_DIR_MUST_EXIST) -#else - #define wxDIRP_DEFAULT_STYLE (wxDIRP_USE_TEXTCTRL|wxDIRP_DIR_MUST_EXIST) -#endif - -class WXDLLIMPEXP_CORE wxDirPickerCtrl : public wxFileDirPickerCtrlBase -{ -public: - wxDirPickerCtrl() {} - - wxDirPickerCtrl(wxWindow *parent, wxWindowID id, - const wxString& path = wxEmptyString, - const wxString& message = wxDirSelectorPromptStr, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDIRP_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxDirPickerCtrlNameStr) - { - Create(parent, id, path, message, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, wxWindowID id, - const wxString& path = wxEmptyString, - const wxString& message = wxDirSelectorPromptStr, - const wxPoint& pos = wxDefaultPosition, - 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 - ); - } - - -public: // overrides - - bool CheckPath(const wxString &path) const; - - wxString GetTextCtrlValue() const; - - bool IsCwdToUpdate() const - { return HasFlag(wxDIRP_CHANGE_DIR); } - - wxEventType GetEventType() const - { return wxEVT_COMMAND_DIRPICKER_CHANGED; } - -protected: - wxFileDirPickerWidgetBase *CreatePicker(wxWindow *parent, - const wxString& path, - const wxString& message, - const wxString& WXUNUSED(wildcard)) - { - return new wxDirPickerWidget(parent, wxID_ANY, wxDirPickerWidgetLabel, - path, message, - wxDefaultPosition, wxDefaultSize, - GetPickerStyle(GetWindowStyle())); - } - - // extracts the style for our picker from wxFileDirPickerCtrlBase's style - long GetPickerStyle(long style) const - { return (style & (wxDIRP_DIR_MUST_EXIST|wxDIRP_CHANGE_DIR)); } - -private: - DECLARE_DYNAMIC_CLASS(wxDirPickerCtrl) -}; - -#endif // wxUSE_DIRPICKERCTRL - - -#if wxUSE_FILEPICKERCTRL || wxUSE_DIRPICKERCTRL - -// ---------------------------------------------------------------------------- -// wxFileDirPickerEvent: used by wxFilePickerCtrl and wxDirPickerCtrl only -// ---------------------------------------------------------------------------- - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, wxEVT_COMMAND_FILEPICKER_CHANGED, 1102) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, wxEVT_COMMAND_DIRPICKER_CHANGED, 1103) -END_DECLARE_EVENT_TYPES() - -class WXDLLIMPEXP_CORE wxFileDirPickerEvent : public wxCommandEvent -{ -public: - wxFileDirPickerEvent() {} - wxFileDirPickerEvent(wxEventType type, wxObject *generator, int id, const wxString &path) - : wxCommandEvent(type, id), - m_path(path) - { - SetEventObject(generator); - } - - wxString GetPath() const { return m_path; } - void SetPath(const wxString &p) { m_path = p; } - - // default copy ctor, assignment operator and dtor are ok - virtual wxEvent *Clone() const { return new wxFileDirPickerEvent(*this); } - -private: - wxString m_path; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxFileDirPickerEvent) -}; - -// ---------------------------------------------------------------------------- -// event types and macros -// ---------------------------------------------------------------------------- - -typedef void (wxEvtHandler::*wxFileDirPickerEventFunction)(wxFileDirPickerEvent&); - -#define wxFileDirPickerEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxFileDirPickerEventFunction, &func) - -#define EVT_FILEPICKER_CHANGED(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_FILEPICKER_CHANGED, id, wxFileDirPickerEventHandler(fn)) -#define EVT_DIRPICKER_CHANGED(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_DIRPICKER_CHANGED, id, wxFileDirPickerEventHandler(fn)) - - -#endif // wxUSE_FILEPICKERCTRL || wxUSE_DIRPICKERCTRL - -#endif // _WX_FILEDIRPICKER_H_BASE_ - diff --git a/desmume/src/windows/wx/include/wx/filesys.h b/desmume/src/windows/wx/include/wx/filesys.h deleted file mode 100644 index 7d1ad27e8..000000000 --- a/desmume/src/windows/wx/include/wx/filesys.h +++ /dev/null @@ -1,300 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/filesys.h -// Purpose: class for opening files - virtual file system -// Author: Vaclav Slavik -// Copyright: (c) 1999 Vaclav Slavik -// RCS-ID: $Id: filesys.h 53135 2008-04-12 02:31:04Z VZ $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __FILESYS_H__ -#define __FILESYS_H__ - -#include "wx/defs.h" - -#if !wxUSE_STREAMS -#error You cannot compile virtual file systems without wxUSE_STREAMS -#endif - -#if wxUSE_HTML && !wxUSE_FILESYSTEM -#error You cannot compile wxHTML without virtual file systems -#endif - -#if wxUSE_FILESYSTEM - -#include "wx/stream.h" -#include "wx/datetime.h" -#include "wx/filename.h" -#include "wx/hashmap.h" - -class WXDLLIMPEXP_FWD_BASE wxFSFile; -class WXDLLIMPEXP_FWD_BASE wxFileSystemHandler; -class WXDLLIMPEXP_FWD_BASE wxFileSystem; - -//-------------------------------------------------------------------------------- -// wxFSFile -// This class is a file opened using wxFileSystem. It consists of -// input stream, location, mime type & optional anchor -// (in 'index.htm#chapter2', 'chapter2' is anchor) -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFSFile : public wxObject -{ -public: - wxFSFile(wxInputStream *stream, const wxString& loc, - const wxString& mimetype, const wxString& anchor -#if wxUSE_DATETIME - , wxDateTime modif -#endif // wxUSE_DATETIME - ) - { - m_Stream = stream; - m_Location = loc; - m_MimeType = mimetype; m_MimeType.MakeLower(); - m_Anchor = anchor; -#if wxUSE_DATETIME - m_Modif = modif; -#endif // wxUSE_DATETIME - } - - virtual ~wxFSFile() { delete m_Stream; } - - // returns stream. This doesn't give away ownership of the stream object. - wxInputStream *GetStream() const { return m_Stream; } - - // gives away the ownership of the current stream. - wxInputStream *DetachStream() - { - wxInputStream *stream = m_Stream; - m_Stream = NULL; - return stream; - } - - // deletes the current stream and takes ownership of another. - void SetStream(wxInputStream *stream) - { - delete m_Stream; - m_Stream = stream; - } - - // returns file's mime type - const wxString& GetMimeType() const { return m_MimeType; } - - // returns the original location (aka filename) of the file - const wxString& GetLocation() const { return m_Location; } - - const wxString& GetAnchor() const { return m_Anchor; } - -#if wxUSE_DATETIME - wxDateTime GetModificationTime() const { return m_Modif; } -#endif // wxUSE_DATETIME - -private: - wxInputStream *m_Stream; - wxString m_Location; - wxString m_MimeType; - wxString m_Anchor; -#if wxUSE_DATETIME - wxDateTime m_Modif; -#endif // wxUSE_DATETIME - - DECLARE_ABSTRACT_CLASS(wxFSFile) - DECLARE_NO_COPY_CLASS(wxFSFile) -}; - - - - - -//-------------------------------------------------------------------------------- -// wxFileSystemHandler -// This class is FS handler for wxFileSystem. It provides -// interface to access certain -// kinds of files (HTPP, FTP, local, tar.gz etc..) -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFileSystemHandler : public wxObject -{ -public: - wxFileSystemHandler() : wxObject() {} - - // returns true if this handler is able to open given location - virtual bool CanOpen(const wxString& location) = 0; - - // opens given file and returns pointer to input stream. - // Returns NULL if opening failed. - // The location is always absolute path. - virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location) = 0; - - // Finds first/next file that matches spec wildcard. flags can be wxDIR for restricting - // the query to directories or wxFILE for files only or 0 for either. - // Returns filename or empty string if no more matching file exists - virtual wxString FindFirst(const wxString& spec, int flags = 0); - virtual wxString FindNext(); - -protected: - // returns protocol ("file", "http", "tar" etc.) The last (most right) - // protocol is used: - // {it returns "tar" for "file:subdir/archive.tar.gz#tar:/README.txt"} - wxString GetProtocol(const wxString& location) const; - - // returns left part of address: - // {it returns "file:subdir/archive.tar.gz" for "file:subdir/archive.tar.gz#tar:/README.txt"} - wxString GetLeftLocation(const wxString& location) const; - - // returns anchor part of address: - // {it returns "anchor" for "file:subdir/archive.tar.gz#tar:/README.txt#anchor"} - // NOTE: anchor is NOT a part of GetLeftLocation()'s return value - wxString GetAnchor(const wxString& location) const; - - // returns right part of address: - // {it returns "/README.txt" for "file:subdir/archive.tar.gz#tar:/README.txt"} - wxString GetRightLocation(const wxString& location) const; - - // Returns MIME type of the file - w/o need to open it - // (default behaviour is that it returns type based on extension) - wxString GetMimeTypeFromExt(const wxString& location); - - DECLARE_ABSTRACT_CLASS(wxFileSystemHandler) -}; - - - - -//-------------------------------------------------------------------------------- -// wxFileSystem -// This class provides simple interface for opening various -// kinds of files (HTPP, FTP, local, tar.gz etc..) -//-------------------------------------------------------------------------------- - -// Open Bit Flags -enum { - wxFS_READ = 1, // Open for reading - wxFS_SEEKABLE = 4 // Returned stream will be seekable -}; - -WX_DECLARE_VOIDPTR_HASH_MAP_WITH_DECL(wxFileSystemHandler*, wxFSHandlerHash, class WXDLLIMPEXP_BASE); - -class WXDLLIMPEXP_BASE wxFileSystem : public wxObject -{ -public: - wxFileSystem() : wxObject() { m_FindFileHandler = NULL;} - virtual ~wxFileSystem(); - - // sets the current location. Every call to OpenFile is - // relative to this location. - // NOTE !! - // unless is_dir = true 'location' is *not* the directory but - // file contained in this directory - // (so ChangePathTo("dir/subdir/xh.htm") sets m_Path to "dir/subdir/") - void ChangePathTo(const wxString& location, bool is_dir = false); - - wxString GetPath() const {return m_Path;} - - // opens given file and returns pointer to input stream. - // Returns NULL if opening failed. - // It first tries to open the file in relative scope - // (based on ChangePathTo()'s value) and then as an absolute - // path. - wxFSFile* OpenFile(const wxString& location, int flags = wxFS_READ); - - // Finds first/next file that matches spec wildcard. flags can be wxDIR for restricting - // the query to directories or wxFILE for files only or 0 for either. - // Returns filename or empty string if no more matching file exists - wxString FindFirst(const wxString& spec, int flags = 0); - wxString FindNext(); - - // find a file in a list of directories, returns false if not found - bool FindFileInPath(wxString *pStr, const wxChar *path, const wxChar *file); - - // Adds FS handler. - // In fact, this class is only front-end to the FS handlers :-) - static void AddHandler(wxFileSystemHandler *handler); - - // Removes FS handler - static wxFileSystemHandler* RemoveHandler(wxFileSystemHandler *handler); - - // Returns true if there is a handler which can open the given location. - static bool HasHandlerForPath(const wxString& location); - - // remove all items from the m_Handlers list - static void CleanUpHandlers(); - - // Returns the native path for a file URL - static wxFileName URLToFileName(const wxString& url); - - // Returns the file URL for a native path - static wxString FileNameToURL(const wxFileName& filename); - - -protected: - wxFileSystemHandler *MakeLocal(wxFileSystemHandler *h); - - wxString m_Path; - // the path (location) we are currently in - // this is path, not file! - // (so if you opened test/demo.htm, it is - // "test/", not "test/demo.htm") - wxString m_LastName; - // name of last opened file (full path) - static wxList m_Handlers; - // list of FS handlers - wxFileSystemHandler *m_FindFileHandler; - // handler that succeed in FindFirst query - wxFSHandlerHash m_LocalHandlers; - // Handlers local to this instance - - DECLARE_DYNAMIC_CLASS(wxFileSystem) - DECLARE_NO_COPY_CLASS(wxFileSystem) -}; - - -/* - -'location' syntax: - -To determine FS type, we're using standard KDE notation: -file:/absolute/path/file.htm -file:relative_path/xxxxx.html -/some/path/x.file ('file:' is default) -http://www.gnome.org -file:subdir/archive.tar.gz#tar:/README.txt - -special characters : - ':' - FS identificator is before this char - '#' - separator. It can be either HTML anchor ("index.html#news") - (in case there is no ':' in the string to the right from it) - or FS separator - (example : http://www.wxhtml.org/wxhtml-0.1.tar.gz#tar:/include/wxhtml/filesys.h" - this would access tgz archive stored on web) - '/' - directory (path) separator. It is used to determine upper-level path. - HEY! Don't use \ even if you're on Windows! - -*/ - - -class WXDLLIMPEXP_BASE wxLocalFSHandler : public wxFileSystemHandler -{ -public: - virtual bool CanOpen(const wxString& location); - virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location); - virtual wxString FindFirst(const wxString& spec, int flags = 0); - virtual wxString FindNext(); - - // wxLocalFSHandler will prefix all filenames with 'root' before accessing - // files on disk. This effectively makes 'root' the top-level directory - // and prevents access to files outside this directory. - // (This is similar to Unix command 'chroot'.) - static void Chroot(const wxString& root) { ms_root = root; } - -protected: - static wxString ms_root; -}; - - - -#endif - // wxUSE_FILESYSTEM - -#endif - // __FILESYS_H__ diff --git a/desmume/src/windows/wx/include/wx/flags.h b/desmume/src/windows/wx/include/wx/flags.h deleted file mode 100644 index a266e4dde..000000000 --- a/desmume/src/windows/wx/include/wx/flags.h +++ /dev/null @@ -1,165 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/flags.h -// Purpose: a bitset suited for replacing the current style flags -// Author: Stefan Csomor -// Modified by: -// Created: 27/07/03 -// RCS-ID: $Id: flags.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 2003 Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SETH__ -#define _WX_SETH__ - -// wxBitset should be applied to an enum, then this can be used like -// bitwise operators but keeps the type safety and information, the -// enums must be in a sequence , their value determines the bit position -// that they represent -// The api is made as close as possible to - -template class wxBitset -{ - friend class wxEnumData ; -public: - // creates a wxBitset<> object with all flags initialized to 0 - wxBitset() { m_data = 0; } - - // created a wxBitset<> object initialized according to the bits of the - // integral value val - wxBitset(unsigned long val) { m_data = val ; } - - // copies the content in the new wxBitset<> object from another one - wxBitset(const wxBitset &src) { m_data = src.m_data; } - - // creates a wxBitset<> object that has the specific flag set - wxBitset(const T el) { m_data |= 1 << el; } - - // returns the integral value that the bits of this object represent - unsigned long to_ulong() const { return m_data ; } - - // assignment - wxBitset &operator =(const wxBitset &rhs) - { - m_data = rhs.m_data; - return *this; - } - - // bitwise or operator, sets all bits that are in rhs and leaves - // the rest unchanged - wxBitset &operator |=(const wxBitset &rhs) - { - m_data |= rhs.m_data; - return *this; - } - - // bitwsie exclusive-or operator, toggles the value of all bits - // that are set in bits and leaves all others unchanged - wxBitset &operator ^=(const wxBitset &rhs) // difference - { - m_data ^= rhs.m_data; - return *this; - } - - // bitwise and operator, resets all bits that are not in rhs and leaves - // all others unchanged - wxBitset &operator &=(const wxBitset &rhs) // intersection - { - m_data &= rhs.m_data; - return *this; - } - - // bitwise or operator, returns a new bitset that has all bits set that set are in - // bitset2 or in this bitset - wxBitset operator |(const wxBitset &bitset2) const // union - { - wxBitset s; - s.m_data = m_data | bitset2.m_data; - return s; - } - - // bitwise exclusive-or operator, returns a new bitset that has all bits set that are set either in - // bitset2 or in this bitset but not in both - wxBitset operator ^(const wxBitset &bitset2) const // difference - { - wxBitset s; - s.m_data = m_data ^ bitset2.m_data; - return s; - } - - // bitwise and operator, returns a new bitset that has all bits set that are set both in - // bitset2 and in this bitset - wxBitset operator &(const wxBitset &bitset2) const // intersection - { - wxBitset s; - s.m_data = m_data & bitset2.m_data; - return s; - } - - // sets appropriate the bit to true - wxBitset& set(const T el) //Add element - { - m_data |= 1 << el; - return *this; - } - - // clears the appropriate flag to false - wxBitset& reset(const T el) //remove element - { - m_data &= ~(1 << el); - return *this; - } - - // clear all flags - wxBitset& reset() - { - m_data = 0; - return *this; - } - - // true if this flag is set - bool test(const T el) const - { - return (m_data & (1 << el)) ? true : false; - } - - // true if no flag is set - bool none() const - { - return m_data == 0; - } - - // true if any flag is set - bool any() const - { - return m_data != 0; - } - - // true if both have the same flags - bool operator ==(const wxBitset &rhs) const - { - return m_data == rhs.m_data; - } - - // true if both differ in their flags set - bool operator !=(const wxBitset &rhs) const - { - return !operator==(rhs); - } - - bool operator[] (const T el) const { return test(el) ; } - -private : - unsigned long m_data; -}; - -#define WX_DEFINE_FLAGS( flags ) \ - class WXDLLEXPORT flags \ - {\ - public : \ - flags(long data=0) :m_data(data) {} \ - long m_data ;\ - bool operator ==(const flags &rhs) const { return m_data == rhs.m_data; }\ - } ; - -#endif diff --git a/desmume/src/windows/wx/include/wx/fmappriv.h b/desmume/src/windows/wx/include/wx/fmappriv.h deleted file mode 100644 index 06cf2cdb2..000000000 --- a/desmume/src/windows/wx/include/wx/fmappriv.h +++ /dev/null @@ -1,74 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/fmappriv.h -// Purpose: private wxFontMapper stuff, not to be used by the library users -// Author: Vadim Zeitlin -// Modified by: -// Created: 21.06.2003 (extracted from common/fontmap.cpp) -// RCS-ID: $Id: fmappriv.h 27454 2004-05-26 10:49:43Z JS $ -// Copyright: (c) 1999-2003 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FMAPPRIV_H_ -#define _WX_FMAPPRIV_H_ - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// a special pseudo encoding which means "don't ask me about this charset -// any more" -- we need it to avoid driving the user crazy with asking him -// time after time about the same charset which he [presumably] doesn't -// have the fonts for -enum { wxFONTENCODING_UNKNOWN = -2 }; - -// the config paths we use -#if wxUSE_CONFIG - -#define FONTMAPPER_ROOT_PATH wxT("/wxWindows/FontMapper") -#define FONTMAPPER_CHARSET_PATH wxT("Charsets") -#define FONTMAPPER_CHARSET_ALIAS_PATH wxT("Aliases") - -#endif // wxUSE_CONFIG - -// ---------------------------------------------------------------------------- -// wxFontMapperPathChanger: change the config path during our lifetime -// ---------------------------------------------------------------------------- - -#if wxUSE_CONFIG && wxUSE_FILECONFIG - -class wxFontMapperPathChanger -{ -public: - wxFontMapperPathChanger(wxFontMapperBase *fontMapper, const wxString& path) - { - m_fontMapper = fontMapper; - m_ok = m_fontMapper->ChangePath(path, &m_pathOld); - } - - bool IsOk() const { return m_ok; } - - ~wxFontMapperPathChanger() - { - if ( IsOk() ) - m_fontMapper->RestorePath(m_pathOld); - } - -private: - // the fontmapper object we're working with - wxFontMapperBase *m_fontMapper; - - // the old path to be restored if m_ok - wxString m_pathOld; - - // have we changed the path successfully? - bool m_ok; - - - DECLARE_NO_COPY_CLASS(wxFontMapperPathChanger) -}; - -#endif // wxUSE_CONFIG - -#endif // _WX_FMAPPRIV_H_ - diff --git a/desmume/src/windows/wx/include/wx/font.h b/desmume/src/windows/wx/include/wx/font.h deleted file mode 100644 index 2fd044c99..000000000 --- a/desmume/src/windows/wx/include/wx/font.h +++ /dev/null @@ -1,251 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/font.h -// Purpose: wxFontBase class: the interface of wxFont -// Author: Vadim Zeitlin -// Modified by: -// Created: 20.09.99 -// RCS-ID: $Id: font.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FONT_H_BASE_ -#define _WX_FONT_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" // for wxDEFAULT &c -#include "wx/fontenc.h" // the font encoding constants -#include "wx/gdiobj.h" // the base class - -// ---------------------------------------------------------------------------- -// forward declarations -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxFontData; -class WXDLLIMPEXP_FWD_CORE wxFontBase; -class WXDLLIMPEXP_FWD_CORE wxFont; -class WXDLLIMPEXP_FWD_CORE wxSize; - -// ---------------------------------------------------------------------------- -// font constants -// ---------------------------------------------------------------------------- - -// standard font families: these may be used only for the font creation, it -// doesn't make sense to query an existing font for its font family as, -// especially if the font had been created from a native font description, it -// may be unknown -enum wxFontFamily -{ - wxFONTFAMILY_DEFAULT = wxDEFAULT, - wxFONTFAMILY_DECORATIVE = wxDECORATIVE, - wxFONTFAMILY_ROMAN = wxROMAN, - wxFONTFAMILY_SCRIPT = wxSCRIPT, - wxFONTFAMILY_SWISS = wxSWISS, - wxFONTFAMILY_MODERN = wxMODERN, - wxFONTFAMILY_TELETYPE = wxTELETYPE, - wxFONTFAMILY_MAX, - wxFONTFAMILY_UNKNOWN = wxFONTFAMILY_MAX -}; - -// font styles -enum wxFontStyle -{ - wxFONTSTYLE_NORMAL = wxNORMAL, - wxFONTSTYLE_ITALIC = wxITALIC, - wxFONTSTYLE_SLANT = wxSLANT, - wxFONTSTYLE_MAX -}; - -// font weights -enum wxFontWeight -{ - wxFONTWEIGHT_NORMAL = wxNORMAL, - wxFONTWEIGHT_LIGHT = wxLIGHT, - wxFONTWEIGHT_BOLD = wxBOLD, - wxFONTWEIGHT_MAX -}; - -// the font flag bits for the new font ctor accepting one combined flags word -enum -{ - // no special flags: font with default weight/slant/anti-aliasing - wxFONTFLAG_DEFAULT = 0, - - // slant flags (default: no slant) - wxFONTFLAG_ITALIC = 1 << 0, - wxFONTFLAG_SLANT = 1 << 1, - - // weight flags (default: medium) - wxFONTFLAG_LIGHT = 1 << 2, - wxFONTFLAG_BOLD = 1 << 3, - - // anti-aliasing flag: force on or off (default: the current system default) - wxFONTFLAG_ANTIALIASED = 1 << 4, - wxFONTFLAG_NOT_ANTIALIASED = 1 << 5, - - // underlined/strikethrough flags (default: no lines) - wxFONTFLAG_UNDERLINED = 1 << 6, - wxFONTFLAG_STRIKETHROUGH = 1 << 7, - - // the mask of all currently used flags - wxFONTFLAG_MASK = wxFONTFLAG_ITALIC | - wxFONTFLAG_SLANT | - wxFONTFLAG_LIGHT | - wxFONTFLAG_BOLD | - wxFONTFLAG_ANTIALIASED | - wxFONTFLAG_NOT_ANTIALIASED | - wxFONTFLAG_UNDERLINED | - wxFONTFLAG_STRIKETHROUGH -}; - -// ---------------------------------------------------------------------------- -// wxFontBase represents a font object -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxNativeFontInfo; - -class WXDLLEXPORT wxFontBase : public wxGDIObject -{ -public: - // creator function - virtual ~wxFontBase(); - - // from the font components - static wxFont *New( - int pointSize, // size of the font in points - int family, // see wxFontFamily enum - int style, // see wxFontStyle enum - int weight, // see wxFontWeight enum - bool underlined = false, // not underlined by default - const wxString& face = wxEmptyString, // facename - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); // ISO8859-X, ... - - // from the font components but using the font flags instead of separate - // parameters for each flag - static wxFont *New(int pointSize, - wxFontFamily family, - int flags = wxFONTFLAG_DEFAULT, - const wxString& face = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); - - // from the font components - static wxFont *New( - const wxSize& pixelSize, // size of the font in pixels - int family, // see wxFontFamily enum - int style, // see wxFontStyle enum - int weight, // see wxFontWeight enum - bool underlined = false, // not underlined by default - const wxString& face = wxEmptyString, // facename - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); // ISO8859-X, ... - - // from the font components but using the font flags instead of separate - // parameters for each flag - static wxFont *New(const wxSize& pixelSize, - wxFontFamily family, - int flags = wxFONTFLAG_DEFAULT, - const wxString& face = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); - - // from the (opaque) native font description object - static wxFont *New(const wxNativeFontInfo& nativeFontDesc); - - // from the string representation of wxNativeFontInfo - static wxFont *New(const wxString& strNativeFontDesc); - - // was the font successfully created? - bool Ok() const { return IsOk(); } - bool IsOk() const { return m_refData != NULL; } - - // comparison - bool operator == (const wxFont& font) const; - bool operator != (const wxFont& font) const; - - // accessors: get the font characteristics - virtual int GetPointSize() const = 0; - virtual wxSize GetPixelSize() const; - virtual bool IsUsingSizeInPixels() const; - virtual int GetFamily() const = 0; - virtual int GetStyle() const = 0; - virtual int GetWeight() const = 0; - virtual bool GetUnderlined() const = 0; - virtual wxString GetFaceName() const = 0; - virtual wxFontEncoding GetEncoding() const = 0; - virtual const wxNativeFontInfo *GetNativeFontInfo() const = 0; - - virtual bool IsFixedWidth() const; - - wxString GetNativeFontInfoDesc() const; - wxString GetNativeFontInfoUserDesc() const; - - // change the font characteristics - virtual void SetPointSize( int pointSize ) = 0; - virtual void SetPixelSize( const wxSize& pixelSize ); - virtual void SetFamily( int family ) = 0; - virtual void SetStyle( int style ) = 0; - virtual void SetWeight( int weight ) = 0; - virtual void SetUnderlined( bool underlined ) = 0; - virtual void SetEncoding(wxFontEncoding encoding) = 0; - virtual bool SetFaceName( const wxString& faceName ); - void SetNativeFontInfo(const wxNativeFontInfo& info) - { DoSetNativeFontInfo(info); } - - bool SetNativeFontInfo(const wxString& info); - bool SetNativeFontInfoUserDesc(const wxString& info); - - // translate the fonts into human-readable string (i.e. GetStyleString() - // will return "wxITALIC" for an italic font, ...) - wxString GetFamilyString() const; - wxString GetStyleString() const; - wxString GetWeightString() const; - - // Unofficial API, don't use - virtual void SetNoAntiAliasing( bool WXUNUSED(no) = true ) { } - virtual bool GetNoAntiAliasing() const { return false; } - - // the default encoding is used for creating all fonts with default - // encoding parameter - static wxFontEncoding GetDefaultEncoding() { return ms_encodingDefault; } - static void SetDefaultEncoding(wxFontEncoding encoding); - -protected: - // the function called by both overloads of SetNativeFontInfo() - virtual void DoSetNativeFontInfo(const wxNativeFontInfo& info); - -private: - // the currently default encoding: by default, it's the default system - // encoding, but may be changed by the application using - // SetDefaultEncoding() to make all subsequent fonts created without - // specifying encoding parameter using this encoding - static wxFontEncoding ms_encodingDefault; -}; - -// include the real class declaration -#if defined(__WXPALMOS__) - #include "wx/palmos/font.h" -#elif defined(__WXMSW__) - #include "wx/msw/font.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/font.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/font.h" -#elif defined(__WXGTK__) - #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__) - #include "wx/mac/font.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/font.h" -#elif defined(__WXPM__) - #include "wx/os2/font.h" -#endif - -#endif - // _WX_FONT_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/fontdlg.h b/desmume/src/windows/wx/include/wx/fontdlg.h deleted file mode 100644 index 280a567bb..000000000 --- a/desmume/src/windows/wx/include/wx/fontdlg.h +++ /dev/null @@ -1,118 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/fontdlg.h -// Purpose: common interface for different wxFontDialog classes -// Author: Vadim Zeitlin -// Modified by: -// Created: 12.05.02 -// RCS-ID: $Id: fontdlg.h 41846 2006-10-09 22:56:48Z VZ $ -// Copyright: (c) 1997-2002 wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FONTDLG_H_BASE_ -#define _WX_FONTDLG_H_BASE_ - -#include "wx/defs.h" // for wxUSE_FONTDLG - -#if wxUSE_FONTDLG - -#include "wx/dialog.h" // the base class -#include "wx/cmndata.h" // wxFontData - -// ---------------------------------------------------------------------------- -// wxFontDialog interface -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFontDialogBase : public wxDialog -{ -public: - // create the font dialog - wxFontDialogBase() { } - wxFontDialogBase(wxWindow *parent) { m_parent = parent; } - wxFontDialogBase(wxWindow *parent, const wxFontData& data) - { m_parent = parent; InitFontData(&data); } - - bool Create(wxWindow *parent) - { return DoCreate(parent); } - bool Create(wxWindow *parent, const wxFontData& data) - { InitFontData(&data); return Create(parent); } - - virtual ~wxFontDialogBase(); - - // retrieve the font data - const wxFontData& GetFontData() const { return m_fontData; } - wxFontData& GetFontData() { return m_fontData; } - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated interface, for compatibility only, don't use - wxDEPRECATED( wxFontDialogBase(wxWindow *parent, const wxFontData *data) ); - - wxDEPRECATED( bool Create(wxWindow *parent, const wxFontData *data) ); -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - virtual bool DoCreate(wxWindow *parent) { m_parent = parent; return true; } - - void InitFontData(const wxFontData *data = NULL) - { if ( data ) m_fontData = *data; } - - wxFontData m_fontData; - - DECLARE_NO_COPY_CLASS(wxFontDialogBase) -}; - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated interface, for compatibility only, don't use -inline wxFontDialogBase::wxFontDialogBase(wxWindow *parent, const wxFontData *data) -{ m_parent = parent; InitFontData(data); } - -inline bool wxFontDialogBase::Create(wxWindow *parent, const wxFontData *data) -{ InitFontData(data); return Create(parent); } -#endif // WXWIN_COMPATIBILITY_2_6 - -// ---------------------------------------------------------------------------- -// platform-specific wxFontDialog implementation -// ---------------------------------------------------------------------------- - -#if defined( __WXMAC_OSX__ ) && ( MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 ) -//set to 1 to use native mac font and color dialogs -#define USE_NATIVE_FONT_DIALOG_FOR_MACOSX 1 -#else -//not supported on these platforms, leave 0 -#define USE_NATIVE_FONT_DIALOG_FOR_MACOSX 0 -#endif - -#if defined(__WXUNIVERSAL__) || \ - defined(__WXMOTIF__) || \ - defined(__WXCOCOA__) || \ - defined(__WXWINCE__) || \ - defined(__WXGPE__) - - #include "wx/generic/fontdlgg.h" - #define wxFontDialog wxGenericFontDialog -#elif defined(__WXMSW__) - #include "wx/msw/fontdlg.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/fontdlg.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/fontdlg.h" -#elif defined(__WXPM__) - #include "wx/os2/fontdlg.h" -#elif defined(__WXMAC__) - #include "wx/mac/fontdlg.h" -#endif - -// ---------------------------------------------------------------------------- -// global public functions -// ---------------------------------------------------------------------------- - -// get the font from user and return it, returns wxNullFont if the dialog was -// cancelled -wxFont WXDLLEXPORT -wxGetFontFromUser(wxWindow *parent = (wxWindow *)NULL, - const wxFont& fontInit = wxNullFont, const wxString& caption = wxEmptyString); - -#endif // wxUSE_FONTDLG - -#endif - // _WX_FONTDLG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/fontenc.h b/desmume/src/windows/wx/include/wx/fontenc.h deleted file mode 100644 index 7ac0d63a3..000000000 --- a/desmume/src/windows/wx/include/wx/fontenc.h +++ /dev/null @@ -1,151 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/fontenc.h -// Purpose: wxFontEncoding constants -// Author: Vadim Zeitlin -// Modified by: -// Created: 29.03.00 -// RCS-ID: $Id: fontenc.h 29139 2004-09-14 12:08:28Z ABX $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FONTENC_H_ -#define _WX_FONTENC_H_ - -// font encodings -enum wxFontEncoding -{ - wxFONTENCODING_SYSTEM = -1, // system default - wxFONTENCODING_DEFAULT, // current default encoding - - // ISO8859 standard defines a number of single-byte charsets - wxFONTENCODING_ISO8859_1, // West European (Latin1) - wxFONTENCODING_ISO8859_2, // Central and East European (Latin2) - wxFONTENCODING_ISO8859_3, // Esperanto (Latin3) - wxFONTENCODING_ISO8859_4, // Baltic (old) (Latin4) - wxFONTENCODING_ISO8859_5, // Cyrillic - wxFONTENCODING_ISO8859_6, // Arabic - wxFONTENCODING_ISO8859_7, // Greek - wxFONTENCODING_ISO8859_8, // Hebrew - wxFONTENCODING_ISO8859_9, // Turkish (Latin5) - wxFONTENCODING_ISO8859_10, // Variation of Latin4 (Latin6) - wxFONTENCODING_ISO8859_11, // Thai - wxFONTENCODING_ISO8859_12, // doesn't exist currently, but put it - // here anyhow to make all ISO8859 - // consecutive numbers - wxFONTENCODING_ISO8859_13, // Baltic (Latin7) - wxFONTENCODING_ISO8859_14, // Latin8 - wxFONTENCODING_ISO8859_15, // Latin9 (a.k.a. Latin0, includes euro) - wxFONTENCODING_ISO8859_MAX, - - // Cyrillic charset soup (see http://czyborra.com/charsets/cyrillic.html) - wxFONTENCODING_KOI8, // KOI8 Russian - wxFONTENCODING_KOI8_U, // KOI8 Ukrainian - wxFONTENCODING_ALTERNATIVE, // same as MS-DOS CP866 - wxFONTENCODING_BULGARIAN, // used under Linux in Bulgaria - - // what would we do without Microsoft? They have their own encodings - // for DOS - wxFONTENCODING_CP437, // original MS-DOS codepage - wxFONTENCODING_CP850, // CP437 merged with Latin1 - wxFONTENCODING_CP852, // CP437 merged with Latin2 - wxFONTENCODING_CP855, // another cyrillic encoding - wxFONTENCODING_CP866, // and another one - // and for Windows - wxFONTENCODING_CP874, // WinThai - wxFONTENCODING_CP932, // Japanese (shift-JIS) - wxFONTENCODING_CP936, // Chinese simplified (GB) - wxFONTENCODING_CP949, // Korean (Hangul charset) - wxFONTENCODING_CP950, // Chinese (traditional - Big5) - wxFONTENCODING_CP1250, // WinLatin2 - wxFONTENCODING_CP1251, // WinCyrillic - wxFONTENCODING_CP1252, // WinLatin1 - wxFONTENCODING_CP1253, // WinGreek (8859-7) - wxFONTENCODING_CP1254, // WinTurkish - wxFONTENCODING_CP1255, // WinHebrew - wxFONTENCODING_CP1256, // WinArabic - wxFONTENCODING_CP1257, // WinBaltic (same as Latin 7) - wxFONTENCODING_CP12_MAX, - - wxFONTENCODING_UTF7, // UTF-7 Unicode encoding - wxFONTENCODING_UTF8, // UTF-8 Unicode encoding - wxFONTENCODING_EUC_JP, // Extended Unix Codepage for Japanese - wxFONTENCODING_UTF16BE, // UTF-16 Big Endian Unicode encoding - wxFONTENCODING_UTF16LE, // UTF-16 Little Endian Unicode encoding - wxFONTENCODING_UTF32BE, // UTF-32 Big Endian Unicode encoding - wxFONTENCODING_UTF32LE, // UTF-32 Little Endian Unicode encoding - - wxFONTENCODING_MACROMAN, // the standard mac encodings - wxFONTENCODING_MACJAPANESE, - wxFONTENCODING_MACCHINESETRAD, - wxFONTENCODING_MACKOREAN, - wxFONTENCODING_MACARABIC, - wxFONTENCODING_MACHEBREW, - wxFONTENCODING_MACGREEK, - wxFONTENCODING_MACCYRILLIC, - wxFONTENCODING_MACDEVANAGARI, - wxFONTENCODING_MACGURMUKHI, - wxFONTENCODING_MACGUJARATI, - wxFONTENCODING_MACORIYA, - wxFONTENCODING_MACBENGALI, - wxFONTENCODING_MACTAMIL, - wxFONTENCODING_MACTELUGU, - wxFONTENCODING_MACKANNADA, - wxFONTENCODING_MACMALAJALAM, - wxFONTENCODING_MACSINHALESE, - wxFONTENCODING_MACBURMESE, - wxFONTENCODING_MACKHMER, - wxFONTENCODING_MACTHAI, - wxFONTENCODING_MACLAOTIAN, - wxFONTENCODING_MACGEORGIAN, - wxFONTENCODING_MACARMENIAN, - wxFONTENCODING_MACCHINESESIMP, - wxFONTENCODING_MACTIBETAN, - wxFONTENCODING_MACMONGOLIAN, - wxFONTENCODING_MACETHIOPIC, - wxFONTENCODING_MACCENTRALEUR, - wxFONTENCODING_MACVIATNAMESE, - wxFONTENCODING_MACARABICEXT, - wxFONTENCODING_MACSYMBOL, - wxFONTENCODING_MACDINGBATS, - wxFONTENCODING_MACTURKISH, - wxFONTENCODING_MACCROATIAN, - wxFONTENCODING_MACICELANDIC, - wxFONTENCODING_MACROMANIAN, - wxFONTENCODING_MACCELTIC, - wxFONTENCODING_MACGAELIC, - wxFONTENCODING_MACKEYBOARD, - - wxFONTENCODING_MAX, // highest enumerated encoding value - - wxFONTENCODING_MACMIN = wxFONTENCODING_MACROMAN , - wxFONTENCODING_MACMAX = wxFONTENCODING_MACKEYBOARD , - - // aliases for endian-dependent UTF encodings -#ifdef WORDS_BIGENDIAN - wxFONTENCODING_UTF16 = wxFONTENCODING_UTF16BE, // native UTF-16 - wxFONTENCODING_UTF32 = wxFONTENCODING_UTF32BE, // native UTF-32 -#else // WORDS_BIGENDIAN - wxFONTENCODING_UTF16 = wxFONTENCODING_UTF16LE, // native UTF-16 - wxFONTENCODING_UTF32 = wxFONTENCODING_UTF32LE, // native UTF-32 -#endif // WORDS_BIGENDIAN - - // alias for the native Unicode encoding on this platform - // (this is used by wxEncodingConverter and wxUTFFile only for now) -#if SIZEOF_WCHAR_T == 2 - wxFONTENCODING_UNICODE = wxFONTENCODING_UTF16, -#else // SIZEOF_WCHAR_T == 4 - wxFONTENCODING_UNICODE = wxFONTENCODING_UTF32, -#endif - - // alternative names for Far Eastern encodings - // Chinese - wxFONTENCODING_GB2312 = wxFONTENCODING_CP936, // Simplified Chinese - wxFONTENCODING_BIG5 = wxFONTENCODING_CP950, // Traditional Chinese - - // Japanese (see http://zsigri.tripod.com/fontboard/cjk/jis.html) - wxFONTENCODING_SHIFT_JIS = wxFONTENCODING_CP932 // Shift JIS -}; - -#endif // _WX_FONTENC_H_ - diff --git a/desmume/src/windows/wx/include/wx/fontenum.h b/desmume/src/windows/wx/include/wx/fontenum.h deleted file mode 100644 index c4f8d9881..000000000 --- a/desmume/src/windows/wx/include/wx/fontenum.h +++ /dev/null @@ -1,88 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/fontenum.h -// Purpose: wxFontEnumerator class for getting available fonts -// Author: Julian Smart, Vadim Zeitlin -// Modified by: extended to enumerate more than just font facenames and works -// not only on Windows now (VZ) -// Created: 04/01/98 -// RCS-ID: $Id: fontenum.h 43727 2006-12-01 10:14:28Z VS $ -// Copyright: (c) Julian Smart, Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FONTENUM_H_ -#define _WX_FONTENUM_H_ - -#include "wx/fontenc.h" -#include "wx/arrstr.h" - -#if wxUSE_PANGO || defined(__WXDFB__) - // defined if the port uses only UTF-8 font encodings internally - #define wxHAS_UTF8_FONTS -#endif - -// ---------------------------------------------------------------------------- -// wxFontEnumerator enumerates all available fonts on the system or only the -// fonts with given attributes -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFontEnumerator -{ -public: - wxFontEnumerator() {} - - // virtual dtor for the base class - virtual ~wxFontEnumerator() {} - - // start enumerating font facenames (either all of them or those which - // support the given encoding) - will result in OnFacename() being - // called for each available facename (until they are exhausted or - // OnFacename returns false) - virtual bool EnumerateFacenames - ( - wxFontEncoding encoding = wxFONTENCODING_SYSTEM, // all - bool fixedWidthOnly = false - ); - - // enumerate the different encodings either for given font facename or for - // all facenames - will result in OnFontEncoding() being called for each - // available (facename, encoding) couple - virtual bool EnumerateEncodings(const wxString& facename = wxEmptyString); - - // callbacks which are called after one of EnumerateXXX() functions from - // above is invoked - all of them may return false to stop enumeration or - // true to continue with it - - // called by EnumerateFacenames - virtual bool OnFacename(const wxString& WXUNUSED(facename)) - { return true; } - - // called by EnumerateEncodings - virtual bool OnFontEncoding(const wxString& WXUNUSED(facename), - const wxString& WXUNUSED(encoding)) - { return true; } - - - - // convenience function that returns array of facenames. - static wxArrayString - GetFacenames(wxFontEncoding encoding = wxFONTENCODING_SYSTEM, // all - bool fixedWidthOnly = false); - - // convenience function that returns array of all available encodings. - static wxArrayString GetEncodings(const wxString& facename = wxEmptyString); - - // convenience function that returns true if the given face name exist - // in the user's system - static bool IsValidFacename(const wxString &str); - -private: -#ifdef wxHAS_UTF8_FONTS - // helper for ports that only use UTF-8 encoding natively - bool EnumerateEncodingsUTF8(const wxString& facename); -#endif - - DECLARE_NO_COPY_CLASS(wxFontEnumerator) -}; - -#endif // _WX_FONTENUM_H_ diff --git a/desmume/src/windows/wx/include/wx/fontmap.h b/desmume/src/windows/wx/include/wx/fontmap.h deleted file mode 100644 index ff6684fa6..000000000 --- a/desmume/src/windows/wx/include/wx/fontmap.h +++ /dev/null @@ -1,290 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/fontmap.h -// Purpose: wxFontMapper class -// Author: Vadim Zeitlin -// Modified by: -// Created: 04.11.99 -// RCS-ID: $Id: fontmap.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FONTMAPPER_H_ -#define _WX_FONTMAPPER_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#if wxUSE_FONTMAP - -#include "wx/fontenc.h" // for wxFontEncoding - -#if wxUSE_GUI - #include "wx/fontutil.h" // for wxNativeEncodingInfo -#endif // wxUSE_GUI - -#if wxUSE_CONFIG && wxUSE_FILECONFIG - class WXDLLIMPEXP_FWD_BASE wxConfigBase; -#endif // wxUSE_CONFIG - -class WXDLLIMPEXP_FWD_CORE wxFontMapper; - -#if wxUSE_GUI - class WXDLLIMPEXP_FWD_CORE wxWindow; -#endif // wxUSE_GUI - -// ============================================================================ -// wxFontMapper manages user-definable correspondence between wxWidgets font -// encodings and the fonts present on the machine. -// -// This is a singleton class, font mapper objects can only be accessed using -// wxFontMapper::Get(). -// ============================================================================ - -// ---------------------------------------------------------------------------- -// wxFontMapperBase: this is a non-interactive class which just uses its built -// in knowledge of the encodings equivalence -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFontMapperBase -{ -public: - // constructtor and such - // --------------------- - - // default ctor - wxFontMapperBase(); - - // virtual dtor for any base class - virtual ~wxFontMapperBase(); - - // return instance of the wxFontMapper singleton - // wxBase code only cares that it's a wxFontMapperBase - // In wxBase, wxFontMapper is only forward declared - // so one cannot implicitly cast from it to wxFontMapperBase. - static wxFontMapperBase *Get(); - - // set the singleton to 'mapper' instance and return previous one - static wxFontMapper *Set(wxFontMapper *mapper); - - // delete the existing font mapper if any - static void Reset(); - - - // translates charset strings to encoding - // -------------------------------------- - - // returns the encoding for the given charset (in the form of RFC 2046) or - // wxFONTENCODING_SYSTEM if couldn't decode it - // - // interactive parameter is ignored in the base class, we behave as if it - // were always false - virtual wxFontEncoding CharsetToEncoding(const wxString& charset, - bool interactive = true); - - // information about supported encodings - // ------------------------------------- - - // get the number of font encodings we know about - static size_t GetSupportedEncodingsCount(); - - // get the n-th supported encoding - static wxFontEncoding GetEncoding(size_t n); - - // return canonical name of this encoding (this is a short string, - // GetEncodingDescription() returns a longer one) - static wxString GetEncodingName(wxFontEncoding encoding); - - // return a list of all names of this encoding (see GetEncodingName) - static const wxChar** GetAllEncodingNames(wxFontEncoding encoding); - - // return user-readable string describing the given encoding - // - // NB: hard-coded now, but might change later (read it from config?) - static wxString GetEncodingDescription(wxFontEncoding encoding); - - // find the encoding corresponding to the given name, inverse of - // GetEncodingName() and less general than CharsetToEncoding() - // - // returns wxFONTENCODING_MAX if the name is not a supported encoding - static wxFontEncoding GetEncodingFromName(const wxString& name); - - - // functions which allow to configure the config object used: by default, - // the global one (from wxConfigBase::Get() will be used) and the default - // root path for the config settings is the string returned by - // GetDefaultConfigPath() - // ---------------------------------------------------------------------- - -#if wxUSE_CONFIG && wxUSE_FILECONFIG - // set the root config path to use (should be an absolute path) - void SetConfigPath(const wxString& prefix); - - // return default config path - static const wxChar *GetDefaultConfigPath(); -#endif // wxUSE_CONFIG - - - // returns true for the base class and false for a "real" font mapper object - // (implementation-only) - virtual bool IsDummy() { return true; } - -protected: -#if wxUSE_CONFIG && wxUSE_FILECONFIG - // get the config object we're using -- either the global config object - // or a wxMemoryConfig object created by this class otherwise - wxConfigBase *GetConfig(); - - // gets the root path for our settings -- if it wasn't set explicitly, use - // GetDefaultConfigPath() - const wxString& GetConfigPath(); - - // change to the given (relative) path in the config, return true if ok - // (then GetConfig() will return something !NULL), false if no config - // object - // - // caller should provide a pointer to the string variable which should be - // later passed to RestorePath() - bool ChangePath(const wxString& pathNew, wxString *pathOld); - - // restore the config path after use - void RestorePath(const wxString& pathOld); - - // config object and path (in it) to use - wxConfigBase *m_configDummy; - - wxString m_configRootPath; -#endif // wxUSE_CONFIG - - // the real implementation of the base class version of CharsetToEncoding() - // - // returns wxFONTENCODING_UNKNOWN if encoding is unknown and we shouldn't - // ask the user about it, wxFONTENCODING_SYSTEM if it is unknown but we - // should/could ask the user - int NonInteractiveCharsetToEncoding(const wxString& charset); - -private: - // the global fontmapper object or NULL - static wxFontMapper *sm_instance; - - friend class wxFontMapperPathChanger; - - DECLARE_NO_COPY_CLASS(wxFontMapperBase) -}; - -// ---------------------------------------------------------------------------- -// wxFontMapper: interactive extension of wxFontMapperBase -// -// The default implementations of all functions will ask the user if they are -// not capable of finding the answer themselves and store the answer in a -// config file (configurable via SetConfigXXX functions). This behaviour may -// be disabled by giving the value of false to "interactive" parameter. -// However, the functions will always consult the config file to allow the -// user-defined values override the default logic and there is no way to -// disable this -- which shouldn't be ever needed because if "interactive" was -// never true, the config file is never created anyhow. -// ---------------------------------------------------------------------------- - -#if wxUSE_GUI - -class WXDLLIMPEXP_CORE wxFontMapper : public wxFontMapperBase -{ -public: - // default ctor - wxFontMapper(); - - // virtual dtor for a base class - virtual ~wxFontMapper(); - - // working with the encodings - // -------------------------- - - // returns the encoding for the given charset (in the form of RFC 2046) or - // wxFONTENCODING_SYSTEM if couldn't decode it - virtual wxFontEncoding CharsetToEncoding(const wxString& charset, - bool interactive = true); - - // find an alternative for the given encoding (which is supposed to not be - // available on this system). If successful, return true and fill info - // structure with the parameters required to create the font, otherwise - // return false - virtual bool GetAltForEncoding(wxFontEncoding encoding, - wxNativeEncodingInfo *info, - const wxString& facename = wxEmptyString, - bool interactive = true); - - // version better suitable for 'public' use. Returns wxFontEcoding - // that can be used it wxFont ctor - bool GetAltForEncoding(wxFontEncoding encoding, - wxFontEncoding *alt_encoding, - const wxString& facename = wxEmptyString, - bool interactive = true); - - // checks whether given encoding is available in given face or not. - // - // if no facename is given (default), return true if it's available in any - // facename at alll. - virtual bool IsEncodingAvailable(wxFontEncoding encoding, - const wxString& facename = wxEmptyString); - - - // configure the appearance of the dialogs we may popup - // ---------------------------------------------------- - - // the parent window for modal dialogs - void SetDialogParent(wxWindow *parent) { m_windowParent = parent; } - - // the title for the dialogs (note that default is quite reasonable) - void SetDialogTitle(const wxString& title) { m_titleDialog = title; } - - // GUI code needs to know it's a wxFontMapper because there - // are additional methods in the subclass. - static wxFontMapper *Get(); - - // pseudo-RTTI since we aren't a wxObject. - virtual bool IsDummy() { return false; } - -protected: - // GetAltForEncoding() helper: tests for the existence of the given - // encoding and saves the result in config if ok - this results in the - // following (desired) behaviour: when an unknown/unavailable encoding is - // requested for the first time, the user is asked about a replacement, - // but if he doesn't choose any and the default logic finds one, it will - // be saved in the config so that the user won't be asked about it any - // more - bool TestAltEncoding(const wxString& configEntry, - wxFontEncoding encReplacement, - wxNativeEncodingInfo *info); - - // the title for our dialogs - wxString m_titleDialog; - - // the parent window for our dialogs - wxWindow *m_windowParent; - -private: - DECLARE_NO_COPY_CLASS(wxFontMapper) -}; - -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// global variables -// ---------------------------------------------------------------------------- - -// the default font mapper for wxWidgets programs do NOT use! This is for -// backward compatibility, use wxFontMapper::Get() instead -#define wxTheFontMapper (wxFontMapper::Get()) - -#else // !wxUSE_FONTMAP - -#if wxUSE_GUI - // wxEncodingToCodepage (utils.cpp) needs wxGetNativeFontEncoding - #include "wx/fontutil.h" -#endif - -#endif // wxUSE_FONTMAP/!wxUSE_FONTMAP - -#endif // _WX_FONTMAPPER_H_ - diff --git a/desmume/src/windows/wx/include/wx/fontpicker.h b/desmume/src/windows/wx/include/wx/fontpicker.h deleted file mode 100644 index ff02eddd5..000000000 --- a/desmume/src/windows/wx/include/wx/fontpicker.h +++ /dev/null @@ -1,223 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/fontpicker.h -// Purpose: wxFontPickerCtrl base header -// Author: Francesco Montorsi -// Modified by: -// Created: 14/4/2006 -// Copyright: (c) Francesco Montorsi -// RCS-ID: $Id: fontpicker.h 53135 2008-04-12 02:31:04Z VZ $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FONTPICKER_H_BASE_ -#define _WX_FONTPICKER_H_BASE_ - -#include "wx/defs.h" - - -#if wxUSE_FONTPICKERCTRL - -#include "wx/pickerbase.h" - - -class WXDLLIMPEXP_FWD_CORE wxFontPickerEvent; - -extern WXDLLEXPORT_DATA(const wxChar) wxFontPickerWidgetNameStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxFontPickerCtrlNameStr[]; - - -// ---------------------------------------------------------------------------- -// wxFontPickerWidgetBase: a generic abstract interface which must be -// implemented by controls used by wxFontPickerCtrl -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxFontPickerWidgetBase -{ -public: - wxFontPickerWidgetBase() { m_selectedFont = *wxNORMAL_FONT; } - virtual ~wxFontPickerWidgetBase() {} - - wxFont GetSelectedFont() const - { return m_selectedFont; } - virtual void SetSelectedFont(const wxFont &f) - { m_selectedFont = f; UpdateFont(); } - -protected: - - virtual void UpdateFont() = 0; - - // the current font (may be invalid if none) - // NOTE: don't call this m_font as wxWindow::m_font already exists - wxFont m_selectedFont; -}; - -// Styles which must be supported by all controls implementing wxFontPickerWidgetBase -// NB: these styles must be defined to carefully-chosen values to -// avoid conflicts with wxButton's styles - - -// keeps the label of the button updated with the fontface name + font size -// E.g. choosing "Times New Roman bold, italic with size 10" from the fontdialog, -// updates the wxFontButtonGeneric's label (overwriting any previous label) -// with the "Times New Roman, 10" text (only fontface + fontsize is displayed -// to avoid extralong labels). -#define wxFNTP_FONTDESC_AS_LABEL 0x0008 - -// uses the currently selected font to draw the label of the button -#define wxFNTP_USEFONT_FOR_LABEL 0x0010 - -// since GTK > 2.4, there is GtkFontButton -#if defined(__WXGTK24__) && !defined(__WXUNIVERSAL__) - #include "wx/gtk/fontpicker.h" - #define wxFontPickerWidget wxFontButton -#else - #include "wx/generic/fontpickerg.h" - #define wxFontPickerWidget wxGenericFontButton -#endif - - -// ---------------------------------------------------------------------------- -// wxFontPickerCtrl specific flags -// ---------------------------------------------------------------------------- - -#define wxFNTP_USE_TEXTCTRL (wxPB_USE_TEXTCTRL) -#define wxFNTP_DEFAULT_STYLE (wxFNTP_FONTDESC_AS_LABEL|wxFNTP_USEFONT_FOR_LABEL) - -// not a style but rather the default value of the maximum pointsize allowed -#define wxFNTP_MAXPOINT_SIZE 100 - - -// ---------------------------------------------------------------------------- -// wxFontPickerCtrl: platform-independent class which embeds the -// platform-dependent wxFontPickerWidget andm if wxFNTP_USE_TEXTCTRL style is -// used, a textctrl next to it. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxFontPickerCtrl : public wxPickerBase -{ -public: - wxFontPickerCtrl() - : m_bIgnoreNextTextCtrlUpdate(false), - m_nMaxPointSize(wxFNTP_MAXPOINT_SIZE) - { - } - - virtual ~wxFontPickerCtrl() {} - - - wxFontPickerCtrl(wxWindow *parent, - wxWindowID id, - const wxFont& initial = wxNullFont, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxFNTP_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxFontPickerCtrlNameStr) - : m_bIgnoreNextTextCtrlUpdate(false), - m_nMaxPointSize(wxFNTP_MAXPOINT_SIZE) - { - Create(parent, id, initial, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxFont& initial = wxNullFont, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxFNTP_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxFontPickerCtrlNameStr); - - -public: // public API - - // get the font chosen - wxFont GetSelectedFont() const - { return ((wxFontPickerWidget *)m_picker)->GetSelectedFont(); } - - // sets currently displayed font - void SetSelectedFont(const wxFont& f); - - // set/get the max pointsize - void SetMaxPointSize(unsigned int max) - { m_nMaxPointSize=max; } - unsigned int GetMaxPointSize() const - { return m_nMaxPointSize; } - -public: // internal functions - - void UpdatePickerFromTextCtrl(); - void UpdateTextCtrlFromPicker(); - - // event handler for our picker - void OnFontChange(wxFontPickerEvent &); - - // used to convert wxString <-> wxFont - virtual wxString Font2String(const wxFont &font); - virtual wxFont String2Font(const wxString &font); - -protected: - - // extracts the style for our picker from wxFontPickerCtrl's style - long GetPickerStyle(long style) const - { return (style & (wxFNTP_FONTDESC_AS_LABEL|wxFNTP_USEFONT_FOR_LABEL)); } - - // true if the next UpdateTextCtrl() call is to ignore - bool m_bIgnoreNextTextCtrlUpdate; - - // the maximum pointsize allowed to the user - unsigned int m_nMaxPointSize; - -private: - DECLARE_DYNAMIC_CLASS(wxFontPickerCtrl) -}; - - -// ---------------------------------------------------------------------------- -// wxFontPickerEvent: used by wxFontPickerCtrl only -// ---------------------------------------------------------------------------- - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, wxEVT_COMMAND_FONTPICKER_CHANGED, 1102) -END_DECLARE_EVENT_TYPES() - -class WXDLLIMPEXP_CORE wxFontPickerEvent : public wxCommandEvent -{ -public: - wxFontPickerEvent() {} - wxFontPickerEvent(wxObject *generator, int id, const wxFont &f) - : wxCommandEvent(wxEVT_COMMAND_FONTPICKER_CHANGED, id), - m_font(f) - { - SetEventObject(generator); - } - - wxFont GetFont() const { return m_font; } - void SetFont(const wxFont &c) { m_font = c; } - - // default copy ctor, assignment operator and dtor are ok - virtual wxEvent *Clone() const { return new wxFontPickerEvent(*this); } - -private: - wxFont m_font; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxFontPickerEvent) -}; - -// ---------------------------------------------------------------------------- -// event types and macros -// ---------------------------------------------------------------------------- - -typedef void (wxEvtHandler::*wxFontPickerEventFunction)(wxFontPickerEvent&); - -#define wxFontPickerEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxFontPickerEventFunction, &func) - -#define EVT_FONTPICKER_CHANGED(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_FONTPICKER_CHANGED, id, wxFontPickerEventHandler(fn)) - - -#endif // wxUSE_FONTPICKERCTRL - -#endif - // _WX_FONTPICKER_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/fontutil.h b/desmume/src/windows/wx/include/wx/fontutil.h deleted file mode 100644 index a2a112409..000000000 --- a/desmume/src/windows/wx/include/wx/fontutil.h +++ /dev/null @@ -1,242 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/fontutil.h -// Purpose: font-related helper functions -// Author: Vadim Zeitlin -// Modified by: -// Created: 05.11.99 -// RCS-ID: $Id: fontutil.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -// General note: this header is private to wxWidgets and is not supposed to be -// included by user code. The functions declared here are implemented in -// msw/fontutil.cpp for Windows, unix/fontutil.cpp for GTK/Motif &c. - -#ifndef _WX_FONTUTIL_H_ -#define _WX_FONTUTIL_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/font.h" // for wxFont and wxFontEncoding - -#if defined(__WXMSW__) - #include "wx/msw/wrapwin.h" -#endif - -class WXDLLIMPEXP_FWD_BASE wxArrayString; -struct WXDLLIMPEXP_FWD_CORE wxNativeEncodingInfo; - -#if defined(_WX_X_FONTLIKE) - -// the symbolic names for the XLFD fields (with examples for their value) -// -// NB: we suppose that the font always starts with the empty token (font name -// registry field) as we never use nor generate it anyhow -enum wxXLFDField -{ - wxXLFD_FOUNDRY, // adobe - wxXLFD_FAMILY, // courier, times, ... - wxXLFD_WEIGHT, // black, bold, demibold, medium, regular, light - wxXLFD_SLANT, // r/i/o (roman/italique/oblique) - wxXLFD_SETWIDTH, // condensed, expanded, ... - wxXLFD_ADDSTYLE, // whatever - usually nothing - wxXLFD_PIXELSIZE, // size in pixels - wxXLFD_POINTSIZE, // size in points - wxXLFD_RESX, // 72, 75, 100, ... - wxXLFD_RESY, - wxXLFD_SPACING, // m/p/c (monospaced/proportional/character cell) - wxXLFD_AVGWIDTH, // average width in 1/10 pixels - wxXLFD_REGISTRY, // iso8859, rawin, koi8, ... - wxXLFD_ENCODING, // 1, r, r, ... - wxXLFD_MAX -}; - -#endif // _WX_X_FONTLIKE - -// ---------------------------------------------------------------------------- -// types -// ---------------------------------------------------------------------------- - -// wxNativeFontInfo is platform-specific font representation: this struct -// should be considered as opaque font description only used by the native -// functions, the user code can only get the objects of this type from -// somewhere and pass it somewhere else (possibly save them somewhere using -// ToString() and restore them using FromString()) -class WXDLLEXPORT wxNativeFontInfo -{ -public: -#if wxUSE_PANGO - PangoFontDescription *description; -#elif defined(_WX_X_FONTLIKE) - // the members can't be accessed directly as we only parse the - // xFontName on demand -private: - // the components of the XLFD - wxString fontElements[wxXLFD_MAX]; - - // the full XLFD - wxString xFontName; - - // true until SetXFontName() is called - bool m_isDefault; - - // return true if we have already initialized fontElements - inline bool HasElements() const; - -public: - // init the elements from an XLFD, return true if ok - bool FromXFontName(const wxString& xFontName); - - // return false if we were never initialized with a valid XLFD - bool IsDefault() const { return m_isDefault; } - - // return the XLFD (using the fontElements if necessary) - wxString GetXFontName() const; - - // get the given XFLD component - wxString GetXFontComponent(wxXLFDField field) const; - - // change the font component - void SetXFontComponent(wxXLFDField field, const wxString& value); - - // set the XFLD - void SetXFontName(const wxString& xFontName); -#elif defined(__WXMSW__) - LOGFONT lf; -#elif defined(__WXPM__) - // OS/2 native structures that define a font - FATTRS fa; - FONTMETRICS fm; - FACENAMEDESC fn; -#else // other platforms - // - // This is a generic implementation that should work on all ports - // without specific support by the port. - // - #define wxNO_NATIVE_FONTINFO - - int pointSize; - wxFontFamily family; - wxFontStyle style; - wxFontWeight weight; - bool underlined; - wxString faceName; - wxFontEncoding encoding; -#endif // platforms - - // default ctor (default copy ctor is ok) - wxNativeFontInfo() { Init(); } - -#if wxUSE_PANGO -private: - void Init(const wxNativeFontInfo& info); - void Free(); - -public: - wxNativeFontInfo(const wxNativeFontInfo& info) { Init(info); } - ~wxNativeFontInfo() { Free(); } - - wxNativeFontInfo& operator=(const wxNativeFontInfo& info) - { - Free(); - Init(info); - return *this; - } -#endif // wxUSE_PANGO - - // reset to the default state - void Init(); - - // init with the parameters of the given font - void InitFromFont(const wxFont& font) - { - // translate all font parameters - SetStyle((wxFontStyle)font.GetStyle()); - SetWeight((wxFontWeight)font.GetWeight()); - SetUnderlined(font.GetUnderlined()); -#if defined(__WXMSW__) - if ( font.IsUsingSizeInPixels() ) - SetPixelSize(font.GetPixelSize()); - else - SetPointSize(font.GetPointSize()); -#else - SetPointSize(font.GetPointSize()); -#endif - - // set the family/facename - SetFamily((wxFontFamily)font.GetFamily()); - const wxString& facename = font.GetFaceName(); - if ( !facename.empty() ) - { - SetFaceName(facename); - } - - // deal with encoding now (it may override the font family and facename - // so do it after setting them) - SetEncoding(font.GetEncoding()); - } - - // accessors and modifiers for the font elements - int GetPointSize() const; - wxSize GetPixelSize() const; - wxFontStyle GetStyle() const; - wxFontWeight GetWeight() const; - bool GetUnderlined() const; - wxString GetFaceName() const; - wxFontFamily GetFamily() const; - wxFontEncoding GetEncoding() const; - - void SetPointSize(int pointsize); - void SetPixelSize(const wxSize& pixelSize); - void SetStyle(wxFontStyle style); - void SetWeight(wxFontWeight weight); - void SetUnderlined(bool underlined); - bool SetFaceName(const wxString& facename); - void SetFamily(wxFontFamily family); - void SetEncoding(wxFontEncoding encoding); - - // sets the first facename in the given array which is found - // to be valid. If no valid facename is given, sets the - // first valid facename returned by wxFontEnumerator::GetFacenames(). - // Does not return a bool since it cannot fail. - void SetFaceName(const wxArrayString &facenames); - - - // it is important to be able to serialize wxNativeFontInfo objects to be - // able to store them (in config file, for example) - bool FromString(const wxString& s); - wxString ToString() const; - - // we also want to present the native font descriptions to the user in some - // human-readable form (it is not platform independent neither, but can - // hopefully be understood by the user) - bool FromUserString(const wxString& s); - wxString ToUserString() const; -}; - -// ---------------------------------------------------------------------------- -// font-related functions (common) -// ---------------------------------------------------------------------------- - -// translate a wxFontEncoding into native encoding parameter (defined above), -// returning true if an (exact) macth could be found, false otherwise (without -// attempting any substitutions) -extern bool wxGetNativeFontEncoding(wxFontEncoding encoding, - wxNativeEncodingInfo *info); - -// test for the existence of the font described by this facename/encoding, -// return true if such font(s) exist, false otherwise -extern bool wxTestFontEncoding(const wxNativeEncodingInfo& info); - -// ---------------------------------------------------------------------------- -// font-related functions (X and GTK) -// ---------------------------------------------------------------------------- - -#ifdef _WX_X_FONTLIKE - #include "wx/unix/fontutil.h" -#endif // X || GDK - -#endif // _WX_FONTUTIL_H_ diff --git a/desmume/src/windows/wx/include/wx/frame.h b/desmume/src/windows/wx/include/wx/frame.h deleted file mode 100644 index cecbf1b5d..000000000 --- a/desmume/src/windows/wx/include/wx/frame.h +++ /dev/null @@ -1,262 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/frame.h -// Purpose: wxFrame class interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 15.11.99 -// RCS-ID: $Id: frame.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FRAME_H_BASE_ -#define _WX_FRAME_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/toplevel.h" // the base class - -// the default names for various classs -extern WXDLLEXPORT_DATA(const wxChar) wxStatusLineNameStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxToolBarNameStr[]; - -class WXDLLIMPEXP_FWD_CORE wxFrame; -class WXDLLIMPEXP_FWD_CORE wxMenuBar; -class WXDLLIMPEXP_FWD_CORE wxStatusBar; -class WXDLLIMPEXP_FWD_CORE wxToolBar; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// wxFrame-specific (i.e. not for wxDialog) styles -#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 -// -// For each of *bars, a frame may have several of them, but only one is -// managed by the frame, i.e. resized/moved when the frame is and whose size -// is accounted for in client size calculations - all others should be taken -// care of manually. The CreateXXXBar() functions create this, main, XXXBar, -// but the actual creation is done in OnCreateXXXBar() functions which may be -// overridden to create custom objects instead of standard ones when -// CreateXXXBar() is called. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFrameBase : public wxTopLevelWindow -{ -public: - // construction - wxFrameBase(); - virtual ~wxFrameBase(); - - wxFrame *New(wxWindow *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr); - - // frame state - // ----------- - - // get the origin of the client area (which may be different from (0, 0) - // if the frame has a toolbar) in client coordinates - virtual wxPoint GetClientAreaOrigin() const; - - // sends a size event to the window using its current size -- this has an - // effect of refreshing the window layout - virtual void SendSizeEvent(); - - // menu bar functions - // ------------------ - -#if wxUSE_MENUS - virtual void SetMenuBar(wxMenuBar *menubar); - virtual wxMenuBar *GetMenuBar() const { return m_frameMenuBar; } -#endif // wxUSE_MENUS - - // process menu command: returns true if processed - bool ProcessCommand(int winid); - - // status bar functions - // -------------------- -#if wxUSE_STATUSBAR - // create the main status bar by calling OnCreateStatusBar() - virtual wxStatusBar* CreateStatusBar(int number = 1, - long style = wxST_SIZEGRIP|wxFULL_REPAINT_ON_RESIZE, - wxWindowID winid = 0, - const wxString& name = - wxStatusLineNameStr); - // return a new status bar - virtual wxStatusBar *OnCreateStatusBar(int number, - long style, - wxWindowID winid, - const wxString& name); - // get the main status bar - virtual wxStatusBar *GetStatusBar() const { return m_frameStatusBar; } - - // sets the main status bar - virtual void SetStatusBar(wxStatusBar *statBar); - - // forward these to status bar - virtual void SetStatusText(const wxString &text, int number = 0); - virtual void SetStatusWidths(int n, const int widths_field[]); - void PushStatusText(const wxString &text, int number = 0); - void PopStatusText(int number = 0); - - // set the status bar pane the help will be shown in - void SetStatusBarPane(int n) { m_statusBarPane = n; } - int GetStatusBarPane() const { return m_statusBarPane; } -#endif // wxUSE_STATUSBAR - - // toolbar functions - // ----------------- - -#if wxUSE_TOOLBAR - // create main toolbar bycalling OnCreateToolBar() - virtual wxToolBar* CreateToolBar(long style = -1, - wxWindowID winid = wxID_ANY, - const wxString& name = wxToolBarNameStr); - // return a new toolbar - virtual wxToolBar *OnCreateToolBar(long style, - wxWindowID winid, - const wxString& name ); - - // get/set the main toolbar - virtual wxToolBar *GetToolBar() const { return m_frameToolBar; } - virtual void SetToolBar(wxToolBar *toolbar); -#endif // wxUSE_TOOLBAR - - // implementation only from now on - // ------------------------------- - - // event handlers -#if wxUSE_MENUS -#if wxUSE_STATUSBAR - void OnMenuOpen(wxMenuEvent& event); - void OnMenuClose(wxMenuEvent& event); - void OnMenuHighlight(wxMenuEvent& event); -#endif // wxUSE_STATUSBAR - - // send wxUpdateUIEvents for all menu items in the menubar, - // or just for menu if non-NULL - virtual void DoMenuUpdates(wxMenu* menu = NULL); -#endif // wxUSE_MENUS - - // do the UI update processing for this window - virtual void UpdateWindowUI(long flags = wxUPDATE_UI_NONE); - - // Implement internal behaviour (menu updating on some platforms) - virtual void OnInternalIdle(); - - // if there is no real wxTopLevelWindow on this platform we have to define - // some wxTopLevelWindowBase pure virtual functions here to avoid breaking - // old ports (wxMotif) which don't define them in wxFrame -#ifndef wxTopLevelWindowNative - virtual bool ShowFullScreen(bool WXUNUSED(show), - long WXUNUSED(style) = wxFULLSCREEN_ALL) - { return false; } - virtual bool IsFullScreen() const - { return false; } -#endif // no wxTopLevelWindowNative - -#if wxUSE_MENUS || wxUSE_TOOLBAR - // show help text (typically in the statusbar); show is false - // if you are hiding the help, true otherwise - virtual void DoGiveHelp(const wxString& text, bool show); -#endif - -protected: - // the frame main menu/status/tool bars - // ------------------------------------ - - // this (non virtual!) function should be called from dtor to delete the - // main menubar, statusbar and toolbar (if any) - void DeleteAllBars(); - - // test whether this window makes part of the frame - virtual bool IsOneOfBars(const wxWindow *win) const; - -#if wxUSE_MENUS - // override to update menu bar position when the frame size changes - virtual void PositionMenuBar() { } - - // override to do something special when the menu bar is being removed - // from the frame - virtual void DetachMenuBar(); - - // override to do something special when the menu bar is attached to the - // frame - virtual void AttachMenuBar(wxMenuBar *menubar); - - wxMenuBar *m_frameMenuBar; -#endif // wxUSE_MENUS - -#if wxUSE_STATUSBAR && (wxUSE_MENUS || wxUSE_TOOLBAR) - // the saved status bar text overwritten by DoGiveHelp() - wxString m_oldStatusText; -#endif - -#if wxUSE_STATUSBAR - // override to update status bar position (or anything else) when - // something changes - virtual void PositionStatusBar() { } - - // show the help string for this menu item in the given status bar: the - // status bar pointer can be NULL; return true if help was shown - bool ShowMenuHelp(wxStatusBar *statbar, int helpid); - - wxStatusBar *m_frameStatusBar; -#endif // wxUSE_STATUSBAR - - - int m_statusBarPane; - -#if wxUSE_TOOLBAR - // override to update status bar position (or anything else) when - // something changes - virtual void PositionToolBar() { } - - wxToolBar *m_frameToolBar; -#endif // wxUSE_TOOLBAR - -#if wxUSE_MENUS && wxUSE_STATUSBAR - DECLARE_EVENT_TABLE() -#endif // wxUSE_MENUS && wxUSE_STATUSBAR - - DECLARE_NO_COPY_CLASS(wxFrameBase) -}; - -// include the real class declaration -#if defined(__WXUNIVERSAL__) // && !defined(__WXMICROWIN__) - #include "wx/univ/frame.h" -#else // !__WXUNIVERSAL__ - #if defined(__WXPALMOS__) - #include "wx/palmos/frame.h" - #elif defined(__WXMSW__) - #include "wx/msw/frame.h" - #elif defined(__WXGTK20__) - #include "wx/gtk/frame.h" - #elif defined(__WXGTK__) - #include "wx/gtk1/frame.h" - #elif defined(__WXMOTIF__) - #include "wx/motif/frame.h" - #elif defined(__WXMAC__) - #include "wx/mac/frame.h" - #elif defined(__WXCOCOA__) - #include "wx/cocoa/frame.h" - #elif defined(__WXPM__) - #include "wx/os2/frame.h" - #endif -#endif - -#endif - // _WX_FRAME_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/fs_arc.h b/desmume/src/windows/wx/include/wx/fs_arc.h deleted file mode 100644 index c66f14b20..000000000 --- a/desmume/src/windows/wx/include/wx/fs_arc.h +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/fs_arc.h -// Purpose: Archive file system -// Author: Vaclav Slavik, Mike Wetherell -// Copyright: (c) 1999 Vaclav Slavik, (c) 2006 Mike Wetherell -// CVS-ID: $Id: fs_arc.h 42713 2006-10-30 11:56:12Z ABX $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FS_ARC_H_ -#define _WX_FS_ARC_H_ - -#include "wx/defs.h" - -#if wxUSE_FS_ARCHIVE - -#include "wx/filesys.h" -#include "wx/hashmap.h" - -WX_DECLARE_STRING_HASH_MAP(int, wxArchiveFilenameHashMap); - -//--------------------------------------------------------------------------- -// wxArchiveFSHandler -//--------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxArchiveFSHandler : public wxFileSystemHandler -{ -public: - wxArchiveFSHandler(); - virtual bool CanOpen(const wxString& location); - virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location); - virtual wxString FindFirst(const wxString& spec, int flags = 0); - virtual wxString FindNext(); - void Cleanup(); - virtual ~wxArchiveFSHandler(); - -private: - class wxArchiveFSCache *m_cache; - wxFileSystem m_fs; - - // these vars are used by FindFirst/Next: - class wxArchiveFSCacheData *m_Archive; - struct wxArchiveFSEntry *m_FindEntry; - wxString m_Pattern, m_BaseDir, m_ZipFile; - bool m_AllowDirs, m_AllowFiles; - wxArchiveFilenameHashMap *m_DirsFound; - - wxString DoFind(); - - DECLARE_NO_COPY_CLASS(wxArchiveFSHandler) - DECLARE_DYNAMIC_CLASS(wxArchiveFSHandler) -}; - -#endif // wxUSE_FS_ARCHIVE - -#endif // _WX_FS_ARC_H_ diff --git a/desmume/src/windows/wx/include/wx/fs_filter.h b/desmume/src/windows/wx/include/wx/fs_filter.h deleted file mode 100644 index f4e7e1387..000000000 --- a/desmume/src/windows/wx/include/wx/fs_filter.h +++ /dev/null @@ -1,41 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/fs_filter.h -// Purpose: Filter file system handler -// Author: Mike Wetherell -// Copyright: (c) 2006 Mike Wetherell -// CVS-ID: $Id: fs_filter.h 42713 2006-10-30 11:56:12Z ABX $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FS_FILTER_H_ -#define _WX_FS_FILTER_H_ - -#include "wx/defs.h" - -#if wxUSE_FILESYSTEM - -#include "wx/filesys.h" - -//--------------------------------------------------------------------------- -// wxFilterFSHandler -//--------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFilterFSHandler : public wxFileSystemHandler -{ -public: - wxFilterFSHandler() : wxFileSystemHandler() { } - virtual ~wxFilterFSHandler() { } - - virtual bool CanOpen(const wxString& location); - virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location); - - virtual wxString FindFirst(const wxString& spec, int flags = 0); - virtual wxString FindNext(); - -private: - DECLARE_NO_COPY_CLASS(wxFilterFSHandler) -}; - -#endif // wxUSE_FILESYSTEM - -#endif // _WX_FS_FILTER_H_ diff --git a/desmume/src/windows/wx/include/wx/fs_inet.h b/desmume/src/windows/wx/include/wx/fs_inet.h deleted file mode 100644 index 3e29572b0..000000000 --- a/desmume/src/windows/wx/include/wx/fs_inet.h +++ /dev/null @@ -1,33 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: fs_inet.h -// Purpose: HTTP and FTP file system -// Author: Vaclav Slavik -// Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FS_INET_H_ -#define _WX_FS_INET_H_ - -#include "wx/defs.h" - -#if wxUSE_FILESYSTEM && wxUSE_FS_INET && wxUSE_STREAMS && wxUSE_SOCKETS - -#include "wx/filesys.h" - -// ---------------------------------------------------------------------------- -// wxInternetFSHandler -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_NET wxInternetFSHandler : public wxFileSystemHandler -{ - public: - virtual bool CanOpen(const wxString& location); - virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location); -}; - -#endif - // wxUSE_FILESYSTEM && wxUSE_FS_INET && wxUSE_STREAMS && wxUSE_SOCKETS - -#endif // _WX_FS_INET_H_ - diff --git a/desmume/src/windows/wx/include/wx/fs_mem.h b/desmume/src/windows/wx/include/wx/fs_mem.h deleted file mode 100644 index 5c9313485..000000000 --- a/desmume/src/windows/wx/include/wx/fs_mem.h +++ /dev/null @@ -1,127 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: fs_mem.h -// Purpose: in-memory file system -// Author: Vaclav Slavik -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FS_MEM_H_ -#define _WX_FS_MEM_H_ - -#include "wx/defs.h" - -#if wxUSE_FILESYSTEM - -#include "wx/filesys.h" - -#if wxUSE_GUI - class WXDLLIMPEXP_FWD_CORE wxBitmap; - class WXDLLIMPEXP_FWD_CORE wxImage; -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// wxMemoryFSHandlerBase -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMemoryFSHandlerBase : public wxFileSystemHandler -{ -public: - wxMemoryFSHandlerBase(); - virtual ~wxMemoryFSHandlerBase(); - - // Add file to list of files stored in memory. Stored data (bitmap, text or - // raw data) will be copied into private memory stream and available under - // name "memory:" + filename - static void AddFile(const wxString& filename, const wxString& textdata); - static void AddFile(const wxString& filename, const void *binarydata, size_t size); -#if wxABI_VERSION >= 20805 - static void AddFileWithMimeType(const wxString& filename, - const wxString& textdata, - const wxString& mimetype); - static void AddFileWithMimeType(const wxString& filename, - const void *binarydata, size_t size, - const wxString& mimetype); -#endif // wxABI_VERSION >= 20805 - - // Remove file from memory FS and free occupied memory - static void RemoveFile(const wxString& filename); - - virtual bool CanOpen(const wxString& location); - virtual wxFSFile* OpenFile(wxFileSystem& fs, const wxString& location); - virtual wxString FindFirst(const wxString& spec, int flags = 0); - virtual wxString FindNext(); - -protected: - static bool CheckHash(const wxString& filename); - static wxHashTable *m_Hash; -}; - -// ---------------------------------------------------------------------------- -// wxMemoryFSHandler -// ---------------------------------------------------------------------------- - -#if wxUSE_GUI - -// add GUI-only operations to the base class -class WXDLLIMPEXP_CORE wxMemoryFSHandler : public wxMemoryFSHandlerBase -{ -public: - // bring the base class versions into the scope, otherwise they would be - // inaccessible in wxMemoryFSHandler - // (unfortunately "using" can't be used as gcc 2.95 doesn't have it...) - static void AddFile(const wxString& filename, const wxString& textdata) - { - wxMemoryFSHandlerBase::AddFile(filename, textdata); - } - - static void AddFile(const wxString& filename, - const void *binarydata, - size_t size) - { - wxMemoryFSHandlerBase::AddFile(filename, binarydata, size); - } -#if wxABI_VERSION >= 20805 - static void AddFileWithMimeType(const wxString& filename, - const wxString& textdata, - const wxString& mimetype) - { - wxMemoryFSHandlerBase::AddFileWithMimeType(filename, - textdata, - mimetype); - } - static void AddFileWithMimeType(const wxString& filename, - const void *binarydata, size_t size, - const wxString& mimetype) - { - wxMemoryFSHandlerBase::AddFileWithMimeType(filename, - binarydata, size, - mimetype); - } -#endif // wxABI_VERSION >= 20805 - -#if wxUSE_IMAGE - static void AddFile(const wxString& filename, - const wxImage& image, - long type); - - static void AddFile(const wxString& filename, - const wxBitmap& bitmap, - long type); -#endif // wxUSE_IMAGE - -}; - -#else // !wxUSE_GUI - -// just the same thing as the base class in wxBase -class WXDLLIMPEXP_BASE wxMemoryFSHandler : public wxMemoryFSHandlerBase -{ -}; - -#endif // wxUSE_GUI/!wxUSE_GUI - -#endif // wxUSE_FILESYSTEM - -#endif // _WX_FS_MEM_H_ - diff --git a/desmume/src/windows/wx/include/wx/fs_zip.h b/desmume/src/windows/wx/include/wx/fs_zip.h deleted file mode 100644 index 8d39e9fc4..000000000 --- a/desmume/src/windows/wx/include/wx/fs_zip.h +++ /dev/null @@ -1,23 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/fs_zip.h -// Purpose: wxZipFSHandler typedef for compatibility -// Author: Mike Wetherell -// Copyright: (c) 2006 Mike Wetherell -// CVS-ID: $Id: fs_zip.h 42713 2006-10-30 11:56:12Z ABX $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FS_ZIP_H_ -#define _WX_FS_ZIP_H_ - -#include "wx/defs.h" - -#if wxUSE_FS_ZIP - -#include "wx/fs_arc.h" - -typedef wxArchiveFSHandler wxZipFSHandler; - -#endif // wxUSE_FS_ZIP - -#endif // _WX_FS_ZIP_H_ diff --git a/desmume/src/windows/wx/include/wx/gauge.h b/desmume/src/windows/wx/include/wx/gauge.h deleted file mode 100644 index a8accc082..000000000 --- a/desmume/src/windows/wx/include/wx/gauge.h +++ /dev/null @@ -1,126 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/gauge.h -// Purpose: wxGauge interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 20.02.01 -// RCS-ID: $Id: gauge.h 41089 2006-09-09 13:36:54Z RR $ -// Copyright: (c) 1996-2001 wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GAUGE_H_BASE_ -#define _WX_GAUGE_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_GAUGE - -#include "wx/control.h" - -// ---------------------------------------------------------------------------- -// wxGauge style flags -// ---------------------------------------------------------------------------- - -#define wxGA_HORIZONTAL wxHORIZONTAL -#define wxGA_VERTICAL wxVERTICAL - -// Win32 only, is default (and only) on some other platforms -#define wxGA_SMOOTH 0x0020 - -#if WXWIN_COMPATIBILITY_2_6 - // obsolete style - #define wxGA_PROGRESSBAR 0 -#endif // WXWIN_COMPATIBILITY_2_6 - -// GTK and Mac always have native implementation of the indeterminate mode -// wxMSW has native implementation only if comctl32.dll >= 6.00 -#if !defined(__WXGTK20__) && !defined(__WXMAC__) && !defined(__WXCOCOA__) - #define wxGAUGE_EMULATE_INDETERMINATE_MODE 1 -#else - #define wxGAUGE_EMULATE_INDETERMINATE_MODE 0 -#endif - -extern WXDLLEXPORT_DATA(const wxChar) wxGaugeNameStr[]; - -// ---------------------------------------------------------------------------- -// wxGauge: a progress bar -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxGaugeBase : public wxControl -{ -public: - wxGaugeBase() { m_rangeMax = m_gaugePos = 0; } - virtual ~wxGaugeBase(); - - bool Create(wxWindow *parent, - wxWindowID id, - int range, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxGA_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxGaugeNameStr); - - // determinate mode API - - // set/get the control range - virtual void SetRange(int range); - virtual int GetRange() const; - - virtual void SetValue(int pos); - virtual int GetValue() const; - - // indeterminate mode API - virtual void Pulse(); - - // simple accessors - bool IsVertical() const { return HasFlag(wxGA_VERTICAL); } - - // appearance params (not implemented for most ports) - virtual void SetShadowWidth(int w); - virtual int GetShadowWidth() const; - - virtual void SetBezelFace(int w); - virtual int GetBezelFace() const; - - // overriden base class virtuals - virtual bool AcceptsFocus() const { return false; } - -protected: - // the max position - int m_rangeMax; - - // the current position - int m_gaugePos; - -#if wxGAUGE_EMULATE_INDETERMINATE_MODE - int m_nDirection; // can be wxRIGHT or wxLEFT -#endif - - DECLARE_NO_COPY_CLASS(wxGaugeBase) -}; - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/gauge.h" -#elif defined(__WXMSW__) - #include "wx/msw/gauge95.h" - #define wxGauge wxGauge95 -#elif defined(__WXMOTIF__) - #include "wx/motif/gauge.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/gauge.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/gauge.h" -#elif defined(__WXMAC__) - #include "wx/mac/gauge.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/gauge.h" -#elif defined(__WXPM__) - #include "wx/os2/gauge.h" -#endif - -#endif // wxUSE_GAUGE - -#endif - // _WX_GAUGE_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/gbsizer.h b/desmume/src/windows/wx/include/wx/gbsizer.h deleted file mode 100644 index 9ea8b9e91..000000000 --- a/desmume/src/windows/wx/include/wx/gbsizer.h +++ /dev/null @@ -1,303 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: gbsizer.h -// Purpose: wxGridBagSizer: A sizer that can lay out items in a grid, -// with items at specified cells, and with the option of row -// and/or column spanning -// -// Author: Robin Dunn -// Created: 03-Nov-2003 -// RCS-ID: $Id: gbsizer.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Robin Dunn -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __WXGBSIZER_H__ -#define __WXGBSIZER_H__ - -#include "wx/sizer.h" - - -//--------------------------------------------------------------------------- -// Classes to represent a position in the grid and a size of an item in the -// grid, IOW, the number of rows and columns it occupies. I chose to use these -// instead of wxPoint and wxSize because they are (x,y) and usually pixel -// oriented while grids and tables are usually thought of as (row,col) so some -// confusion would definitely result in using wxPoint... -// -// NOTE: This should probably be refactored to a common RowCol data type which -// is used for this and also for wxGridCellCoords. -//--------------------------------------------------------------------------- - -class WXDLLEXPORT wxGBPosition -{ -public: - wxGBPosition() : m_row(0), m_col(0) {} - wxGBPosition(int row, int col) : m_row(row), m_col(col) {} - - // default copy ctor and assignment operator are okay. - - int GetRow() const { return m_row; } - int GetCol() const { return m_col; } - void SetRow(int row) { m_row = row; } - void SetCol(int col) { m_col = col; } - - bool operator==(const wxGBPosition& p) const { return m_row == p.m_row && m_col == p.m_col; } - bool operator!=(const wxGBPosition& p) const { return !(*this == p); } - -private: - int m_row; - int m_col; -}; - - -class WXDLLEXPORT wxGBSpan -{ -public: - wxGBSpan() : m_rowspan(1), m_colspan(1) {} - wxGBSpan(int rowspan, int colspan) : m_rowspan(rowspan), m_colspan(colspan) {} - - // default copy ctor and assignment operator are okay. - - int GetRowspan() const { return m_rowspan; } - int GetColspan() const { return m_colspan; } - void SetRowspan(int rowspan) { m_rowspan = rowspan; } - void SetColspan(int colspan) { m_colspan = colspan; } - - bool operator==(const wxGBSpan& o) const { return m_rowspan == o.m_rowspan && m_colspan == o.m_colspan; } - bool operator!=(const wxGBSpan& o) const { return !(*this == o); } - -private: - int m_rowspan; - int m_colspan; -}; - - -extern WXDLLEXPORT_DATA(const wxGBSpan) wxDefaultSpan; - - -//--------------------------------------------------------------------------- -// wxGBSizerItem -//--------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxGridBagSizer; - - -class WXDLLEXPORT wxGBSizerItem : public wxSizerItem -{ -public: - // spacer - wxGBSizerItem( int width, - int height, - const wxGBPosition& pos, - const wxGBSpan& span, - int flag, - int border, - wxObject* userData); - - // window - wxGBSizerItem( wxWindow *window, - const wxGBPosition& pos, - const wxGBSpan& span, - int flag, - int border, - wxObject* userData ); - - // subsizer - wxGBSizerItem( wxSizer *sizer, - const wxGBPosition& pos, - const wxGBSpan& span, - int flag, - int border, - wxObject* userData ); - - // default ctor - wxGBSizerItem(); - - - // Get the grid position of the item - wxGBPosition GetPos() const { return m_pos; } - void GetPos(int& row, int& col) const; - - // Get the row and column spanning of the item - wxGBSpan GetSpan() const { return m_span; } - void GetSpan(int& rowspan, int& colspan) const; - - // If the item is already a member of a sizer then first ensure that there - // is no other item that would intersect with this one at the new - // position, then set the new position. Returns true if the change is - // successful and after the next Layout the item will be moved. - bool SetPos( const wxGBPosition& pos ); - - // If the item is already a member of a sizer then first ensure that there - // is no other item that would intersect with this one with its new - // spanning size, then set the new spanning. Returns true if the change - // 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 - bool Intersects(const wxGBSizerItem& other); - - // Returns true if the given pos/span would intersect with this item. - bool Intersects(const wxGBPosition& pos, const wxGBSpan& span); - - // Get the row and column of the endpoint of this item - void GetEndPos(int& row, int& col); - - - wxGridBagSizer* GetGBSizer() const { return m_gbsizer; } - void SetGBSizer(wxGridBagSizer* sizer) { m_gbsizer = sizer; } - - -protected: - wxGBPosition m_pos; - wxGBSpan m_span; - wxGridBagSizer* m_gbsizer; // so SetPos/SetSpan can check for intersects - - -private: - DECLARE_DYNAMIC_CLASS(wxGBSizerItem) - DECLARE_NO_COPY_CLASS(wxGBSizerItem) -}; - - -//--------------------------------------------------------------------------- -// wxGridBagSizer -//--------------------------------------------------------------------------- - - -class WXDLLEXPORT wxGridBagSizer : public wxFlexGridSizer -{ -public: - wxGridBagSizer(int vgap = 0, int hgap = 0 ); - - // The Add methods return true if the item was successfully placed at the - // given position, false if something was already there. - wxSizerItem* Add( wxWindow *window, - const wxGBPosition& pos, - const wxGBSpan& span = wxDefaultSpan, - int flag = 0, - int border = 0, - wxObject* userData = NULL ); - wxSizerItem* Add( wxSizer *sizer, - const wxGBPosition& pos, - const wxGBSpan& span = wxDefaultSpan, - int flag = 0, - int border = 0, - wxObject* userData = NULL ); - wxSizerItem* Add( int width, - int height, - const wxGBPosition& pos, - const wxGBSpan& span = wxDefaultSpan, - int flag = 0, - int border = 0, - wxObject* userData = NULL ); - wxSizerItem* Add( wxGBSizerItem *item ); - - - // Get/Set the size used for cells in the grid with no item. - wxSize GetEmptyCellSize() const { return m_emptyCellSize; } - void SetEmptyCellSize(const wxSize& sz) { m_emptyCellSize = sz; } - - // Get the size of the specified cell, including hgap and vgap. Only - // valid after a Layout. - wxSize GetCellSize(int row, int col) const; - - // Get the grid position of the specified item (non-recursive) - wxGBPosition GetItemPosition(wxWindow *window); - wxGBPosition GetItemPosition(wxSizer *sizer); - wxGBPosition GetItemPosition(size_t index); - - // Set the grid position of the specified item. Returns true on success. - // If the move is not allowed (because an item is already there) then - // false is returned. (non-recursive) - bool SetItemPosition(wxWindow *window, const wxGBPosition& pos); - bool SetItemPosition(wxSizer *sizer, const wxGBPosition& pos); - bool SetItemPosition(size_t index, const wxGBPosition& pos); - - // Get the row/col spanning of the specified item (non-recursive) - wxGBSpan GetItemSpan(wxWindow *window); - wxGBSpan GetItemSpan(wxSizer *sizer); - wxGBSpan GetItemSpan(size_t index); - - // Set the row/col spanning of the specified item. Returns true on - // success. If the move is not allowed (because an item is already there) - // then false is returned. (non-recursive) - bool SetItemSpan(wxWindow *window, const wxGBSpan& span); - bool SetItemSpan(wxSizer *sizer, const wxGBSpan& span); - bool SetItemSpan(size_t index, const wxGBSpan& span); - - - // Find the sizer item for the given window or subsizer, returns NULL if - // not found. (non-recursive) - wxGBSizerItem* FindItem(wxWindow* window); - wxGBSizerItem* FindItem(wxSizer* sizer); - - - // Return the sizer item for the given grid cell, or NULL if there is no - // item at that position. (non-recursive) - wxGBSizerItem* FindItemAtPosition(const wxGBPosition& pos); - - - // Return the sizer item located at the point given in pt, or NULL if - // there is no item at that point. The (x,y) coordinates in pt correspond - // to the client coordinates of the window using the sizer for - // layout. (non-recursive) - wxGBSizerItem* FindItemAtPoint(const wxPoint& pt); - - - // Return the sizer item that has a matching user data (it only compares - // pointer values) or NULL if not found. (non-recursive) - wxGBSizerItem* FindItemWithData(const wxObject* userData); - - - // These are what make the sizer do size calculations and layout - virtual void RecalcSizes(); - virtual wxSize CalcMin(); - - - // Look at all items and see if any intersect (or would overlap) the given - // item. Returns true if so, false if there would be no overlap. If an - // excludeItem is given then it will not be checked for intersection, for - // example it may be the item we are checking the position of. - bool CheckForIntersection(wxGBSizerItem* item, wxGBSizerItem* excludeItem = NULL); - bool CheckForIntersection(const wxGBPosition& pos, const wxGBSpan& span, wxGBSizerItem* excludeItem = NULL); - - - // The Add base class virtuals should not be used with this class, but - // we'll try to make them automatically select a location for the item - // anyway. - virtual wxSizerItem* Add( wxWindow *window, int proportion = 0, int flag = 0, int border = 0, wxObject* userData = NULL ); - virtual wxSizerItem* Add( wxSizer *sizer, int proportion = 0, int flag = 0, int border = 0, wxObject* userData = NULL ); - virtual wxSizerItem* Add( int width, int height, int proportion = 0, int flag = 0, int border = 0, wxObject* userData = NULL ); - - // The Insert and Prepend base class virtuals that are not appropriate for - // this class and should not be used. Their implementation in this class - // simply fails. - virtual wxSizerItem* Add( wxSizerItem *item ); - virtual wxSizerItem* Insert( size_t index, wxWindow *window, int proportion = 0, int flag = 0, int border = 0, wxObject* userData = NULL ); - virtual wxSizerItem* Insert( size_t index, wxSizer *sizer, int proportion = 0, int flag = 0, int border = 0, wxObject* userData = NULL ); - virtual wxSizerItem* Insert( size_t index, int width, int height, int proportion = 0, int flag = 0, int border = 0, wxObject* userData = NULL ); - virtual wxSizerItem* Insert( size_t index, wxSizerItem *item ); - virtual wxSizerItem* Prepend( wxWindow *window, int proportion = 0, int flag = 0, int border = 0, wxObject* userData = NULL ); - virtual wxSizerItem* Prepend( wxSizer *sizer, int proportion = 0, int flag = 0, int border = 0, wxObject* userData = NULL ); - virtual wxSizerItem* Prepend( int width, int height, int proportion = 0, int flag = 0, int border = 0, wxObject* userData = NULL ); - virtual wxSizerItem* Prepend( wxSizerItem *item ); - - -protected: - wxGBPosition FindEmptyCell(); -#if wxABI_VERSION >= 20808 - void AdjustForOverflow(); -#endif - - wxSize m_emptyCellSize; - - -private: - - DECLARE_CLASS(wxGridBagSizer) - DECLARE_NO_COPY_CLASS(wxGridBagSizer) -}; - -//--------------------------------------------------------------------------- -#endif diff --git a/desmume/src/windows/wx/include/wx/gdicmn.h b/desmume/src/windows/wx/include/wx/gdicmn.h deleted file mode 100644 index 3ec1f6ac6..000000000 --- a/desmume/src/windows/wx/include/wx/gdicmn.h +++ /dev/null @@ -1,755 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/gdicmn.h -// Purpose: Common GDI classes, types and declarations -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: gdicmn.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GDICMNH__ -#define _WX_GDICMNH__ - -// --------------------------------------------------------------------------- -// headers -// --------------------------------------------------------------------------- - -#include "wx/defs.h" -#include "wx/list.h" -#include "wx/string.h" -#include "wx/fontenc.h" -#include "wx/hashmap.h" -#include "wx/math.h" - -// --------------------------------------------------------------------------- -// forward declarations -// --------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxBitmap; -class WXDLLIMPEXP_FWD_CORE wxBrush; -class WXDLLIMPEXP_FWD_CORE wxColour; -class WXDLLIMPEXP_FWD_CORE wxCursor; -class WXDLLIMPEXP_FWD_CORE wxFont; -class WXDLLIMPEXP_FWD_CORE wxIcon; -class WXDLLIMPEXP_FWD_CORE wxPalette; -class WXDLLIMPEXP_FWD_CORE wxPen; -class WXDLLIMPEXP_FWD_CORE wxRegion; -class WXDLLIMPEXP_FWD_BASE wxString; - -// --------------------------------------------------------------------------- -// constants -// --------------------------------------------------------------------------- - -// Bitmap flags -enum wxBitmapType -{ - wxBITMAP_TYPE_INVALID, // should be == 0 for compatibility! - wxBITMAP_TYPE_BMP, - wxBITMAP_TYPE_BMP_RESOURCE, - wxBITMAP_TYPE_RESOURCE = wxBITMAP_TYPE_BMP_RESOURCE, - wxBITMAP_TYPE_ICO, - wxBITMAP_TYPE_ICO_RESOURCE, - wxBITMAP_TYPE_CUR, - wxBITMAP_TYPE_CUR_RESOURCE, - wxBITMAP_TYPE_XBM, - wxBITMAP_TYPE_XBM_DATA, - wxBITMAP_TYPE_XPM, - wxBITMAP_TYPE_XPM_DATA, - wxBITMAP_TYPE_TIF, - wxBITMAP_TYPE_TIF_RESOURCE, - wxBITMAP_TYPE_GIF, - wxBITMAP_TYPE_GIF_RESOURCE, - wxBITMAP_TYPE_PNG, - wxBITMAP_TYPE_PNG_RESOURCE, - wxBITMAP_TYPE_JPEG, - wxBITMAP_TYPE_JPEG_RESOURCE, - wxBITMAP_TYPE_PNM, - wxBITMAP_TYPE_PNM_RESOURCE, - wxBITMAP_TYPE_PCX, - wxBITMAP_TYPE_PCX_RESOURCE, - wxBITMAP_TYPE_PICT, - wxBITMAP_TYPE_PICT_RESOURCE, - wxBITMAP_TYPE_ICON, - wxBITMAP_TYPE_ICON_RESOURCE, - wxBITMAP_TYPE_ANI, - wxBITMAP_TYPE_IFF, - wxBITMAP_TYPE_TGA, - wxBITMAP_TYPE_MACCURSOR, - wxBITMAP_TYPE_MACCURSOR_RESOURCE, - wxBITMAP_TYPE_ANY = 50 -}; - -// Standard cursors -enum wxStockCursor -{ - wxCURSOR_NONE, // should be 0 - wxCURSOR_ARROW, - wxCURSOR_RIGHT_ARROW, - wxCURSOR_BULLSEYE, - wxCURSOR_CHAR, - wxCURSOR_CROSS, - wxCURSOR_HAND, - wxCURSOR_IBEAM, - wxCURSOR_LEFT_BUTTON, - wxCURSOR_MAGNIFIER, - wxCURSOR_MIDDLE_BUTTON, - wxCURSOR_NO_ENTRY, - wxCURSOR_PAINT_BRUSH, - wxCURSOR_PENCIL, - wxCURSOR_POINT_LEFT, - wxCURSOR_POINT_RIGHT, - wxCURSOR_QUESTION_ARROW, - wxCURSOR_RIGHT_BUTTON, - wxCURSOR_SIZENESW, - wxCURSOR_SIZENS, - wxCURSOR_SIZENWSE, - wxCURSOR_SIZEWE, - wxCURSOR_SIZING, - wxCURSOR_SPRAYCAN, - wxCURSOR_WAIT, - wxCURSOR_WATCH, - wxCURSOR_BLANK, -#ifdef __WXGTK__ - wxCURSOR_DEFAULT, // standard X11 cursor -#endif -#ifdef __WXMAC__ - wxCURSOR_COPY_ARROW , // MacOS Theme Plus arrow -#endif -#ifdef __X__ - // Not yet implemented for Windows - wxCURSOR_CROSS_REVERSE, - wxCURSOR_DOUBLE_ARROW, - wxCURSOR_BASED_ARROW_UP, - wxCURSOR_BASED_ARROW_DOWN, -#endif // X11 - - wxCURSOR_ARROWWAIT, - - wxCURSOR_MAX -}; - -#ifndef __WXGTK__ - #define wxCURSOR_DEFAULT wxCURSOR_ARROW -#endif - -// --------------------------------------------------------------------------- -// macros -// --------------------------------------------------------------------------- - -/* Useful macro for creating icons portably, for example: - - wxIcon *icon = new wxICON(mondrian); - - expands into: - - wxIcon *icon = new wxIcon("mondrian"); // On wxMSW - wxIcon *icon = new wxIcon(mondrian_xpm); // On wxGTK - */ - -#ifdef __WXMSW__ - // Load from a resource - #define wxICON(X) wxIcon(wxT(#X)) -#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( (const char**) X##_xpm ) -#elif defined(__WXDFB__) - // Initialize from an included XPM - #define wxICON(X) wxIcon( (const char**) X##_xpm ) -#elif defined(__WXGTK__) - // Initialize from an included XPM - #define wxICON(X) wxIcon( (const char**) X##_xpm ) -#elif defined(__WXMAC__) - // Initialize from an included XPM - #define wxICON(X) wxIcon( (const char**) X##_xpm ) -#elif defined(__WXMOTIF__) - // Initialize from an included XPM - #define wxICON(X) wxIcon( X##_xpm ) -#elif defined(__WXX11__) - // Initialize from an included XPM - #define wxICON(X) wxIcon( X##_xpm ) -#else - // This will usually mean something on any platform - #define wxICON(X) wxIcon(wxT(#X)) -#endif // platform - -/* Another macro: this one is for portable creation of bitmaps. We assume that - under Unix bitmaps live in XPMs and under Windows they're in ressources. - */ - -#if defined(__WXMSW__) || defined(__WXPM__) - #define wxBITMAP(name) wxBitmap(wxT(#name), wxBITMAP_TYPE_RESOURCE) -#elif defined(__WXGTK__) || \ - defined(__WXMOTIF__) || \ - defined(__WXX11__) || \ - defined(__WXMAC__) || \ - defined(__WXMGL__) || \ - defined(__WXDFB__) || \ - defined(__WXCOCOA__) - // Initialize from an included XPM - #define wxBITMAP(name) wxBitmap( (const char**) name##_xpm ) -#else // other platforms - #define wxBITMAP(name) wxBitmap(name##_xpm, wxBITMAP_TYPE_XPM) -#endif // platform - -// =========================================================================== -// classes -// =========================================================================== - -// --------------------------------------------------------------------------- -// wxSize -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxSize -{ -public: - // members are public for compatibility, don't use them directly. - int x, y; - - // constructors - wxSize() : x(0), y(0) { } - wxSize(int xx, int yy) : x(xx), y(yy) { } - - // no copy ctor or assignment operator - the defaults are ok - - bool operator==(const wxSize& sz) const { return x == sz.x && y == sz.y; } - bool operator!=(const wxSize& sz) const { return x != sz.x || y != sz.y; } - - wxSize operator+(const wxSize& sz) const { return wxSize(x + sz.x, y + sz.y); } - wxSize operator-(const wxSize& sz) const { return wxSize(x - sz.x, y - sz.y); } - wxSize operator/(int i) const { return wxSize(x / i, y / i); } - wxSize operator*(int i) const { return wxSize(x * i, y * i); } - - wxSize& operator+=(const wxSize& sz) { x += sz.x; y += sz.y; return *this; } - wxSize& operator-=(const wxSize& sz) { x -= sz.x; y -= sz.y; return *this; } - wxSize& operator/=(const int i) { x /= i; y /= i; return *this; } - wxSize& operator*=(const int i) { x *= i; y *= i; return *this; } - - void IncTo(const wxSize& sz) - { if ( sz.x > x ) x = sz.x; if ( sz.y > y ) y = sz.y; } - void DecTo(const wxSize& sz) - { if ( sz.x < x ) x = sz.x; if ( sz.y < y ) y = sz.y; } - - void IncBy(int dx, int dy) { x += dx; y += dy; } - void IncBy(const wxSize& sz) { IncBy(sz.x, sz.y); } - void IncBy(int d) { IncBy(d, d); } - - void DecBy(int dx, int dy) { IncBy(-dx, -dy); } - void DecBy(const wxSize& sz) { DecBy(sz.x, sz.y); } - void DecBy(int d) { DecBy(d, d); } - - - wxSize& Scale(float xscale, float yscale) - { x = (int)(x*xscale); y = (int)(y*yscale); return *this; } - - // accessors - void Set(int xx, int yy) { x = xx; y = yy; } - void SetWidth(int w) { x = w; } - void SetHeight(int h) { y = h; } - - int GetWidth() const { return x; } - int GetHeight() const { return y; } - - bool IsFullySpecified() const { return x != wxDefaultCoord && y != wxDefaultCoord; } - - // combine this size with the other one replacing the default (i.e. equal - // to wxDefaultCoord) components of this object with those of the other - void SetDefaults(const wxSize& size) - { - if ( x == wxDefaultCoord ) - x = size.x; - if ( y == wxDefaultCoord ) - y = size.y; - } - - // compatibility - int GetX() const { return x; } - int GetY() const { return y; } -}; - -// --------------------------------------------------------------------------- -// Point classes: with real or integer coordinates -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxRealPoint -{ -public: - double x; - double y; - - wxRealPoint() : x(0.0), y(0.0) { } - wxRealPoint(double xx, double yy) : x(xx), y(yy) { } - - wxRealPoint operator+(const wxRealPoint& pt) const { return wxRealPoint(x + pt.x, y + pt.y); } - wxRealPoint operator-(const wxRealPoint& pt) const { return wxRealPoint(x - pt.x, y - pt.y); } - - bool operator==(const wxRealPoint& pt) const - { - return wxIsSameDouble(x, pt.x) && wxIsSameDouble(y, pt.y); - } - bool operator!=(const wxRealPoint& pt) const { return !(*this == pt); } -}; - - -class WXDLLEXPORT wxPoint -{ -public: - int x, y; - - wxPoint() : x(0), y(0) { } - wxPoint(int xx, int yy) : x(xx), y(yy) { } - - // no copy ctor or assignment operator - the defaults are ok - - // comparison - bool operator==(const wxPoint& p) const { return x == p.x && y == p.y; } - bool operator!=(const wxPoint& p) const { return !(*this == p); } - - // arithmetic operations (component wise) - wxPoint operator+(const wxPoint& p) const { return wxPoint(x + p.x, y + p.y); } - wxPoint operator-(const wxPoint& p) const { return wxPoint(x - p.x, y - p.y); } - - wxPoint& operator+=(const wxPoint& p) { x += p.x; y += p.y; return *this; } - wxPoint& operator-=(const wxPoint& p) { x -= p.x; y -= p.y; return *this; } - - wxPoint& operator+=(const wxSize& s) { x += s.GetWidth(); y += s.GetHeight(); return *this; } - wxPoint& operator-=(const wxSize& s) { x -= s.GetWidth(); y -= s.GetHeight(); return *this; } - - wxPoint operator+(const wxSize& s) const { return wxPoint(x + s.GetWidth(), y + s.GetHeight()); } - wxPoint operator-(const wxSize& s) const { return wxPoint(x - s.GetWidth(), y - s.GetHeight()); } - - wxPoint operator-() const { return wxPoint(-x, -y); } -}; - -// --------------------------------------------------------------------------- -// wxRect -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxRect -{ -public: - wxRect() - : x(0), y(0), width(0), height(0) - { } - wxRect(int xx, int yy, int ww, int hh) - : x(xx), y(yy), width(ww), height(hh) - { } - wxRect(const wxPoint& topLeft, const wxPoint& bottomRight); - wxRect(const wxPoint& pt, const wxSize& size) - : x(pt.x), y(pt.y), width(size.x), height(size.y) - { } - wxRect(const wxSize& size) - : x(0), y(0), width(size.x), height(size.y) - { } - - // default copy ctor and assignment operators ok - - int GetX() const { return x; } - void SetX(int xx) { x = xx; } - - int GetY() const { return y; } - void SetY(int yy) { y = yy; } - - int GetWidth() const { return width; } - void SetWidth(int w) { width = w; } - - int GetHeight() const { return height; } - void SetHeight(int h) { height = h; } - - wxPoint GetPosition() const { return wxPoint(x, y); } - void SetPosition( const wxPoint &p ) { x = p.x; y = p.y; } - - wxSize GetSize() const { return wxSize(width, height); } - void SetSize( const wxSize &s ) { width = s.GetWidth(); height = s.GetHeight(); } - - bool IsEmpty() const { return (width <= 0) || (height <= 0); } - - int GetLeft() const { return x; } - int GetTop() const { return y; } - int GetBottom() const { return y + height - 1; } - int GetRight() const { return x + width - 1; } - - void SetLeft(int left) { x = left; } - void SetRight(int right) { width = right - x + 1; } - void SetTop(int top) { y = top; } - void SetBottom(int bottom) { height = bottom - y + 1; } - - wxPoint GetTopLeft() const { return GetPosition(); } - wxPoint GetLeftTop() const { return GetTopLeft(); } - void SetTopLeft(const wxPoint &p) { SetPosition(p); } - void SetLeftTop(const wxPoint &p) { SetTopLeft(p); } - - wxPoint GetBottomRight() const { return wxPoint(GetRight(), GetBottom()); } - wxPoint GetRightBottom() const { return GetBottomRight(); } - void SetBottomRight(const wxPoint &p) { SetRight(p.x); SetBottom(p.y); } - void SetRightBottom(const wxPoint &p) { SetBottomRight(p); } - - wxPoint GetTopRight() const { return wxPoint(GetRight(), GetTop()); } - wxPoint GetRightTop() const { return GetTopRight(); } - void SetTopRight(const wxPoint &p) { SetRight(p.x); SetTop(p.y); } - void SetRightTop(const wxPoint &p) { SetTopLeft(p); } - - wxPoint GetBottomLeft() const { return wxPoint(GetLeft(), GetBottom()); } - wxPoint GetLeftBottom() const { return GetBottomLeft(); } - void SetBottomLeft(const wxPoint &p) { SetLeft(p.x); SetBottom(p.y); } - void SetLeftBottom(const wxPoint &p) { SetBottomLeft(p); } - - // operations with rect - wxRect& Inflate(wxCoord dx, wxCoord dy); - wxRect& Inflate(const wxSize& d) { return Inflate(d.x, d.y); } - wxRect& Inflate(wxCoord d) { return Inflate(d, d); } - wxRect Inflate(wxCoord dx, wxCoord dy) const - { - wxRect r = *this; - r.Inflate(dx, dy); - return r; - } - - wxRect& Deflate(wxCoord dx, wxCoord dy) { return Inflate(-dx, -dy); } - wxRect& Deflate(const wxSize& d) { return Inflate(-d.x, -d.y); } - wxRect& Deflate(wxCoord d) { return Inflate(-d); } - wxRect Deflate(wxCoord dx, wxCoord dy) const - { - wxRect r = *this; - r.Deflate(dx, dy); - return r; - } - - void Offset(wxCoord dx, wxCoord dy) { x += dx; y += dy; } - void Offset(const wxPoint& pt) { Offset(pt.x, pt.y); } - - wxRect& Intersect(const wxRect& rect); - wxRect Intersect(const wxRect& rect) const - { - wxRect r = *this; - r.Intersect(rect); - return r; - } - - wxRect& Union(const wxRect& rect); - wxRect Union(const wxRect& rect) const - { - wxRect r = *this; - r.Union(rect); - return r; - } - - // compare rectangles - bool operator==(const wxRect& rect) const; - bool operator!=(const wxRect& rect) const { return !(*this == rect); } - - // return true if the point is (not strcitly) inside the rect - bool Contains(int x, int y) const; - bool Contains(const wxPoint& pt) const { return Contains(pt.x, pt.y); } - // return true if the rectangle is (not strcitly) inside the rect - bool Contains(const wxRect& rect) const; - -#if WXWIN_COMPATIBILITY_2_6 - // use Contains() instead - wxDEPRECATED( bool Inside(int x, int y) const ); - wxDEPRECATED( bool Inside(const wxPoint& pt) const ); - wxDEPRECATED( bool Inside(const wxRect& rect) const ); -#endif // WXWIN_COMPATIBILITY_2_6 - - // return true if the rectangles have a non empty intersection - bool Intersects(const wxRect& rect) const; - - - // these are like Union() but don't ignore empty rectangles - wxRect operator+(const wxRect& rect) const; - wxRect& operator+=(const wxRect& rect) - { - *this = *this + rect; - return *this; - } - - - // centre this rectangle in the given (usually, but not necessarily, - // larger) one - wxRect CentreIn(const wxRect& r, int dir = wxBOTH) const - { - return wxRect(dir & wxHORIZONTAL ? r.x + (r.width - width)/2 : x, - dir & wxVERTICAL ? r.y + (r.height - height)/2 : y, - width, height); - } - - wxRect CenterIn(const wxRect& r, int dir = wxBOTH) const - { - return CentreIn(r, dir); - } - -public: - int x, y, width, height; -}; - -#if WXWIN_COMPATIBILITY_2_6 -inline bool wxRect::Inside(int cx, int cy) const { return Contains(cx, cy); } -inline bool wxRect::Inside(const wxPoint& pt) const { return Contains(pt); } -inline bool wxRect::Inside(const wxRect& rect) const { return Contains(rect); } -#endif // WXWIN_COMPATIBILITY_2_6 - - -// --------------------------------------------------------------------------- -// Management of pens, brushes and fonts -// --------------------------------------------------------------------------- - -typedef wxInt8 wxDash; - -class WXDLLIMPEXP_CORE wxGDIObjListBase { -public: - wxGDIObjListBase(); - ~wxGDIObjListBase(); - -protected: - wxList list; -}; - -class WXDLLIMPEXP_CORE wxPenList: public wxGDIObjListBase -{ -public: - wxPen *FindOrCreatePen(const wxColour& colour, int width, int style); -#if WXWIN_COMPATIBILITY_2_6 - wxDEPRECATED( void AddPen(wxPen*) ); - wxDEPRECATED( void RemovePen(wxPen*) ); -#endif -}; - -class WXDLLIMPEXP_CORE wxBrushList: public wxGDIObjListBase -{ -public: - wxBrush *FindOrCreateBrush(const wxColour& colour, int style = wxSOLID); -#if WXWIN_COMPATIBILITY_2_6 - wxDEPRECATED( void AddBrush(wxBrush*) ); - wxDEPRECATED( void RemoveBrush(wxBrush*) ); -#endif -}; - -class WXDLLIMPEXP_CORE wxFontList: public wxGDIObjListBase -{ -public: - wxFont *FindOrCreateFont(int pointSize, int family, int style, int weight, - bool underline = false, - const wxString& face = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); -#if WXWIN_COMPATIBILITY_2_6 - wxDEPRECATED( void AddFont(wxFont*) ); - wxDEPRECATED( void RemoveFont(wxFont*) ); -#endif -}; - -WX_DECLARE_STRING_HASH_MAP(wxColour*, wxStringToColourHashMap); - -class WXDLLEXPORT wxColourDatabase -{ -public: - wxColourDatabase(); - ~wxColourDatabase(); - - // find colour by name or name for the given colour - wxColour Find(const wxString& name) const; - wxString FindName(const wxColour& colour) const; - - // add a new colour to the database - void AddColour(const wxString& name, const wxColour& colour); - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, use Find() instead - wxDEPRECATED( wxColour *FindColour(const wxString& name) ); -#endif // WXWIN_COMPATIBILITY_2_6 - - -#ifdef __WXPM__ - // PM keeps its own type of colour table - long* m_palTable; - size_t m_nSize; -#endif - -private: - // load the database with the built in colour values when called for the - // first time, do nothing after this - void Initialize(); - - wxStringToColourHashMap *m_map; -}; - -class WXDLLEXPORT wxResourceCache: public wxList -{ -public: - wxResourceCache() { } -#if !wxUSE_STL - wxResourceCache(const unsigned int keyType) : wxList(keyType) { } -#endif - virtual ~wxResourceCache(); -}; - -// --------------------------------------------------------------------------- -// global variables -// --------------------------------------------------------------------------- - -// Lists of GDI objects -extern WXDLLEXPORT_DATA(wxPenList*) wxThePenList; -extern WXDLLEXPORT_DATA(wxBrushList*) wxTheBrushList; -extern WXDLLEXPORT_DATA(wxFontList*) wxTheFontList; - -/* Stock objects - - wxStockGDI creates the stock GDI objects on demand. Pointers to the - created objects are stored in the ms_stockObject array, which is indexed - by the Item enum values. Platorm-specific fonts can be created by - implementing a derived class with an override for the GetFont function. - wxStockGDI operates as a singleton, accessed through the ms_instance - pointer. By default this pointer is set to an instance of wxStockGDI. - A derived class must arrange to set this pointer to an instance of itself. -*/ -class WXDLLIMPEXP_CORE wxStockGDI -{ -public: - enum Item { - BRUSH_BLACK, - BRUSH_BLUE, - BRUSH_CYAN, - BRUSH_GREEN, - BRUSH_GREY, - BRUSH_LIGHTGREY, - BRUSH_MEDIUMGREY, - BRUSH_RED, - BRUSH_TRANSPARENT, - BRUSH_WHITE, - COLOUR_BLACK, - COLOUR_BLUE, - COLOUR_CYAN, - COLOUR_GREEN, - COLOUR_LIGHTGREY, - COLOUR_RED, - COLOUR_WHITE, - CURSOR_CROSS, - CURSOR_HOURGLASS, - CURSOR_STANDARD, - FONT_ITALIC, - FONT_NORMAL, - FONT_SMALL, - FONT_SWISS, - PEN_BLACK, - PEN_BLACKDASHED, - PEN_CYAN, - PEN_GREEN, - PEN_GREY, - PEN_LIGHTGREY, - PEN_MEDIUMGREY, - PEN_RED, - PEN_TRANSPARENT, - PEN_WHITE, - ITEMCOUNT - }; - - wxStockGDI(); - virtual ~wxStockGDI(); - static void DeleteAll(); - - static wxStockGDI& instance() { return *ms_instance; } - - static const wxBrush* GetBrush(Item item); - static const wxColour* GetColour(Item item); - static const wxCursor* GetCursor(Item item); - // Can be overridden by platform-specific derived classes - virtual const wxFont* GetFont(Item item); - static const wxPen* GetPen(Item item); - -protected: - static wxStockGDI* ms_instance; - - static wxObject* ms_stockObject[ITEMCOUNT]; - - DECLARE_NO_COPY_CLASS(wxStockGDI) -}; - -#define wxITALIC_FONT wxStockGDI::instance().GetFont(wxStockGDI::FONT_ITALIC) -#define wxNORMAL_FONT wxStockGDI::instance().GetFont(wxStockGDI::FONT_NORMAL) -#define wxSMALL_FONT wxStockGDI::instance().GetFont(wxStockGDI::FONT_SMALL) -#define wxSWISS_FONT wxStockGDI::instance().GetFont(wxStockGDI::FONT_SWISS) - -#define wxBLACK_DASHED_PEN wxStockGDI::GetPen(wxStockGDI::PEN_BLACKDASHED) -#define wxBLACK_PEN wxStockGDI::GetPen(wxStockGDI::PEN_BLACK) -#define wxCYAN_PEN wxStockGDI::GetPen(wxStockGDI::PEN_CYAN) -#define wxGREEN_PEN wxStockGDI::GetPen(wxStockGDI::PEN_GREEN) -#define wxGREY_PEN wxStockGDI::GetPen(wxStockGDI::PEN_GREY) -#define wxLIGHT_GREY_PEN wxStockGDI::GetPen(wxStockGDI::PEN_LIGHTGREY) -#define wxMEDIUM_GREY_PEN wxStockGDI::GetPen(wxStockGDI::PEN_MEDIUMGREY) -#define wxRED_PEN wxStockGDI::GetPen(wxStockGDI::PEN_RED) -#define wxTRANSPARENT_PEN wxStockGDI::GetPen(wxStockGDI::PEN_TRANSPARENT) -#define wxWHITE_PEN wxStockGDI::GetPen(wxStockGDI::PEN_WHITE) - -#define wxBLACK_BRUSH wxStockGDI::GetBrush(wxStockGDI::BRUSH_BLACK) -#define wxBLUE_BRUSH wxStockGDI::GetBrush(wxStockGDI::BRUSH_BLUE) -#define wxCYAN_BRUSH wxStockGDI::GetBrush(wxStockGDI::BRUSH_CYAN) -#define wxGREEN_BRUSH wxStockGDI::GetBrush(wxStockGDI::BRUSH_GREEN) -#define wxGREY_BRUSH wxStockGDI::GetBrush(wxStockGDI::BRUSH_GREY) -#define wxLIGHT_GREY_BRUSH wxStockGDI::GetBrush(wxStockGDI::BRUSH_LIGHTGREY) -#define wxMEDIUM_GREY_BRUSH wxStockGDI::GetBrush(wxStockGDI::BRUSH_MEDIUMGREY) -#define wxRED_BRUSH wxStockGDI::GetBrush(wxStockGDI::BRUSH_RED) -#define wxTRANSPARENT_BRUSH wxStockGDI::GetBrush(wxStockGDI::BRUSH_TRANSPARENT) -#define wxWHITE_BRUSH wxStockGDI::GetBrush(wxStockGDI::BRUSH_WHITE) - -#define wxBLACK wxStockGDI::GetColour(wxStockGDI::COLOUR_BLACK) -#define wxBLUE wxStockGDI::GetColour(wxStockGDI::COLOUR_BLUE) -#define wxCYAN wxStockGDI::GetColour(wxStockGDI::COLOUR_CYAN) -#define wxGREEN wxStockGDI::GetColour(wxStockGDI::COLOUR_GREEN) -#define wxLIGHT_GREY wxStockGDI::GetColour(wxStockGDI::COLOUR_LIGHTGREY) -#define wxRED wxStockGDI::GetColour(wxStockGDI::COLOUR_RED) -#define wxWHITE wxStockGDI::GetColour(wxStockGDI::COLOUR_WHITE) - -#define wxCROSS_CURSOR wxStockGDI::GetCursor(wxStockGDI::CURSOR_CROSS) -#define wxHOURGLASS_CURSOR wxStockGDI::GetCursor(wxStockGDI::CURSOR_HOURGLASS) -#define wxSTANDARD_CURSOR wxStockGDI::GetCursor(wxStockGDI::CURSOR_STANDARD) - -// 'Null' objects -extern WXDLLEXPORT_DATA(wxBitmap) wxNullBitmap; -extern WXDLLEXPORT_DATA(wxIcon) wxNullIcon; -extern WXDLLEXPORT_DATA(wxCursor) wxNullCursor; -extern WXDLLEXPORT_DATA(wxPen) wxNullPen; -extern WXDLLEXPORT_DATA(wxBrush) wxNullBrush; -extern WXDLLEXPORT_DATA(wxPalette) wxNullPalette; -extern WXDLLEXPORT_DATA(wxFont) wxNullFont; -extern WXDLLEXPORT_DATA(wxColour) wxNullColour; - -extern WXDLLEXPORT_DATA(wxColourDatabase*) wxTheColourDatabase; - -extern WXDLLEXPORT_DATA(const wxChar) wxPanelNameStr[]; - -extern WXDLLEXPORT_DATA(const wxSize) wxDefaultSize; -extern WXDLLEXPORT_DATA(const wxPoint) wxDefaultPosition; - -// --------------------------------------------------------------------------- -// global functions -// --------------------------------------------------------------------------- - -// resource management -extern void WXDLLEXPORT wxInitializeStockLists(); -extern void WXDLLEXPORT wxDeleteStockLists(); - -// is the display colour (or monochrome)? -extern bool WXDLLEXPORT wxColourDisplay(); - -// Returns depth of screen -extern int WXDLLEXPORT wxDisplayDepth(); -#define wxGetDisplayDepth wxDisplayDepth - -// get the display size -extern void WXDLLEXPORT wxDisplaySize(int *width, int *height); -extern wxSize WXDLLEXPORT wxGetDisplaySize(); -extern void WXDLLEXPORT wxDisplaySizeMM(int *width, int *height); -extern wxSize WXDLLEXPORT wxGetDisplaySizeMM(); - -// Get position and size of the display workarea -extern void WXDLLEXPORT wxClientDisplayRect(int *x, int *y, int *width, int *height); -extern wxRect WXDLLEXPORT wxGetClientDisplayRect(); - -// set global cursor -extern void WXDLLEXPORT wxSetCursor(const wxCursor& cursor); - -#endif - // _WX_GDICMNH__ diff --git a/desmume/src/windows/wx/include/wx/gdiobj.h b/desmume/src/windows/wx/include/wx/gdiobj.h deleted file mode 100644 index 55e722bf6..000000000 --- a/desmume/src/windows/wx/include/wx/gdiobj.h +++ /dev/null @@ -1,51 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/gdiobj.h -// Purpose: wxGDIObject base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: gdiobj.h 42211 2006-10-21 17:19:11Z SN $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GDIOBJ_H_BASE_ -#define _WX_GDIOBJ_H_BASE_ - -#include "wx/object.h" - -// ---------------------------------------------------------------------------- -// wxGDIRefData is the base class for wxXXXData structures which contain the -// real data for the GDI object and are shared among all wxWin objects sharing -// the same native GDI object -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxGDIRefData: public wxObjectRefData { }; - -// ---------------------------------------------------------------------------- -// wxGDIObject -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxGDIObject: public wxObject -{ -public: - bool IsNull() const { return m_refData == NULL; } - -#if defined(__WXMSW__) || defined(__WXPM__) || defined(__WXPALMOS__) - // Creates the resource - virtual bool RealizeResource() { return false; } - - // Frees the resource - virtual bool FreeResource(bool WXUNUSED(force) = false) { return false; } - - virtual bool IsFree() const { return false; } - - // Returns handle. - virtual WXHANDLE GetResourceHandle() const { return 0; } -#endif // defined(__WXMSW__) || defined(__WXPM__) - - DECLARE_DYNAMIC_CLASS(wxGDIObject) -}; - -#endif - // _WX_GDIOBJ_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/generic/aboutdlgg.h b/desmume/src/windows/wx/include/wx/generic/aboutdlgg.h deleted file mode 100644 index ce524a5c9..000000000 --- a/desmume/src/windows/wx/include/wx/generic/aboutdlgg.h +++ /dev/null @@ -1,87 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/aboutdlgg.h -// Purpose: generic wxAboutBox() implementation -// Author: Vadim Zeitlin -// Created: 2006-10-07 -// RCS-ID: $Id: aboutdlgg.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 2006 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_ABOUTDLGG_H_ -#define _WX_GENERIC_ABOUTDLGG_H_ - -#include "wx/defs.h" - -#if wxUSE_ABOUTDLG - -#include "wx/dialog.h" - -class WXDLLIMPEXP_FWD_ADV wxAboutDialogInfo; -class WXDLLIMPEXP_FWD_CORE wxSizer; -class WXDLLIMPEXP_FWD_CORE wxSizerFlags; - -// ---------------------------------------------------------------------------- -// wxGenericAboutDialog: generic "About" dialog implementation -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxGenericAboutDialog : public wxDialog -{ -public: - // constructors and Create() method - // -------------------------------- - - // default ctor, you must use Create() to really initialize the dialog - wxGenericAboutDialog() { Init(); } - - // ctor which fully initializes the object - wxGenericAboutDialog(const wxAboutDialogInfo& info) - { - Init(); - - (void)Create(info); - } - - // this method must be called if and only if the default ctor was used - bool Create(const wxAboutDialogInfo& info); - -protected: - // this virtual method may be overridden to add some more controls to the - // dialog - // - // notice that for this to work you must call Create() from the derived - // class ctor and not use the base class ctor directly as otherwise the - // virtual function of the derived class wouldn't be called - virtual void DoAddCustomControls() { } - - // add arbitrary control to the text sizer contents with the specified - // flags - void AddControl(wxWindow *win, const wxSizerFlags& flags); - - // add arbitrary control to the text sizer contents and center it - void AddControl(wxWindow *win); - - // add the text, if it's not empty, to the text sizer contents - void AddText(const wxString& text); - -#if wxUSE_COLLPANE - // add a wxCollapsiblePane containing the given text - void AddCollapsiblePane(const wxString& title, const wxString& text); -#endif // wxUSE_COLLPANE - -private: - // common part of all ctors - void Init() { m_sizerText = NULL; } - - - wxSizer *m_sizerText; -}; - -// unlike wxAboutBox which can show either the native or generic about dialog, -// this function always shows the generic one -WXDLLIMPEXP_ADV void wxGenericAboutBox(const wxAboutDialogInfo& info); - -#endif // wxUSE_ABOUTDLG - -#endif // _WX_GENERIC_ABOUTDLGG_H_ - diff --git a/desmume/src/windows/wx/include/wx/generic/accel.h b/desmume/src/windows/wx/include/wx/generic/accel.h deleted file mode 100644 index c22e08643..000000000 --- a/desmume/src/windows/wx/include/wx/generic/accel.h +++ /dev/null @@ -1,50 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/accel.h -// Purpose: wxAcceleratorTable class -// Author: Robert Roebling -// RCS-ID: $Id: accel.h 42752 2006-10-30 19:26:48Z VZ $ -// Copyright: (c) Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_ACCEL_H_ -#define _WX_GENERIC_ACCEL_H_ - -class WXDLLEXPORT wxKeyEvent; - -// ---------------------------------------------------------------------------- -// wxAcceleratorTable -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxAcceleratorTable : public wxObject -{ -public: - wxAcceleratorTable(); - wxAcceleratorTable(int n, const wxAcceleratorEntry entries[]); - virtual ~wxAcceleratorTable(); - - bool Ok() const { return IsOk(); } - bool IsOk() const; - - void Add(const wxAcceleratorEntry& entry); - void Remove(const wxAcceleratorEntry& entry); - - // implementation - // -------------- - - wxMenuItem *GetMenuItem(const wxKeyEvent& event) const; - int GetCommand(const wxKeyEvent& event) const; - - const wxAcceleratorEntry *GetEntry(const wxKeyEvent& event) const; - -protected: - // ref counting code - virtual wxObjectRefData *CreateRefData() const; - virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const; - -private: - DECLARE_DYNAMIC_CLASS(wxAcceleratorTable) -}; - -#endif // _WX_GENERIC_ACCEL_H_ - diff --git a/desmume/src/windows/wx/include/wx/generic/animate.h b/desmume/src/windows/wx/include/wx/generic/animate.h deleted file mode 100644 index 28cb4b8bb..000000000 --- a/desmume/src/windows/wx/include/wx/generic/animate.h +++ /dev/null @@ -1,178 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/animate.h -// Purpose: wxAnimation and wxAnimationCtrl -// Author: Julian Smart and Guillermo Rodriguez Garcia -// Modified by: Francesco Montorsi -// Created: 13/8/99 -// RCS-ID: $Id: animate.h 58350 2009-01-24 10:00:38Z FM $ -// Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_ANIMATEH__ -#define _WX_GENERIC_ANIMATEH__ - -#include "wx/bitmap.h" - -// ---------------------------------------------------------------------------- -// wxAnimation -// ---------------------------------------------------------------------------- - -WX_DECLARE_LIST_WITH_DECL(wxAnimationDecoder, wxAnimationDecoderList, class WXDLLIMPEXP_ADV); - -class WXDLLIMPEXP_ADV wxAnimation : public wxAnimationBase -{ -public: -#if wxABI_VERSION >= 20810 - wxAnimation() {} - wxAnimation(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY) - { LoadFile(name, type); } -#endif - virtual bool IsOk() const - { return m_refData != NULL; } - - virtual unsigned int GetFrameCount() const; - virtual int GetDelay(unsigned int i) const; - virtual wxImage GetFrame(unsigned int i) const; - virtual wxSize GetSize() const; - - virtual bool LoadFile(const wxString& filename, - wxAnimationType type = wxANIMATION_TYPE_ANY); - virtual bool Load(wxInputStream& stream, - wxAnimationType type = wxANIMATION_TYPE_ANY); - - // extended interface used by the generic implementation of wxAnimationCtrl - wxPoint GetFramePosition(unsigned int frame) const; - wxSize GetFrameSize(unsigned int frame) const; - wxAnimationDisposal GetDisposalMethod(unsigned int frame) const; - wxColour GetTransparentColour(unsigned int frame) const; - wxColour GetBackgroundColour() const; - -protected: - static wxAnimationDecoderList sm_handlers; - -public: - static inline wxAnimationDecoderList& GetHandlers() { return sm_handlers; } - static void AddHandler(wxAnimationDecoder *handler); - static void InsertHandler(wxAnimationDecoder *handler); - static const wxAnimationDecoder *FindHandler( wxAnimationType animType ); - - static void CleanUpHandlers(); - static void InitStandardHandlers(); - - DECLARE_DYNAMIC_CLASS(wxAnimation) -}; - - -// ---------------------------------------------------------------------------- -// wxAnimationCtrl -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxAnimationCtrl: public wxAnimationCtrlBase -{ -public: - wxAnimationCtrl() { Init(); } - wxAnimationCtrl(wxWindow *parent, - wxWindowID id, - const wxAnimation& anim = wxNullAnimation, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxAC_DEFAULT_STYLE, - const wxString& name = wxAnimationCtrlNameStr) - { - Init(); - - Create(parent, id, anim, pos, size, style, name); - } - - void Init(); - - bool Create(wxWindow *parent, wxWindowID id, - const wxAnimation& anim = wxNullAnimation, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxAC_DEFAULT_STYLE, - const wxString& name = wxAnimationCtrlNameStr); - - ~wxAnimationCtrl(); - -public: - virtual bool LoadFile(const wxString& filename, wxAnimationType type = wxANIMATION_TYPE_ANY); - - virtual void Stop(); - virtual bool Play() - { return Play(true /* looped */); } - virtual bool IsPlaying() const - { return m_isPlaying; } - - void SetAnimation(const wxAnimation &animation); - wxAnimation GetAnimation() const - { return m_animation; } - - virtual void SetInactiveBitmap(const wxBitmap &bmp); - - // override base class method - virtual bool SetBackgroundColour(const wxColour& col); - -public: // event handlers - - void OnPaint(wxPaintEvent& event); - void OnTimer(wxTimerEvent& event); - void OnSize(wxSizeEvent& event); - -public: // extended API specific to this implementation of wxAnimateCtrl - - // Specify whether the animation's background colour is to be shown (the default), - // or whether the window background should show through - void SetUseWindowBackgroundColour(bool useWinBackground = true) - { m_useWinBackgroundColour = useWinBackground; } - bool IsUsingWindowBackgroundColour() const - { return m_useWinBackgroundColour; } - - // This overload of Play() lets you specify if the animation must loop or not - bool Play(bool looped); - - // Draw the current frame of the animation into given DC. - // This is fast as current frame is always cached. - void DrawCurrentFrame(wxDC& dc); - - // Returns a wxBitmap with the current frame drawn in it - wxBitmap& GetBackingStore() - { return m_backingStore; } - -protected: // internal utilities - - // resize this control to fit m_animation - void FitToAnimation(); - - // Draw the background; use this when e.g. previous frame had wxANIM_TOBACKGROUND disposal. - void DisposeToBackground(); - void DisposeToBackground(wxDC& dc); - void DisposeToBackground(wxDC& dc, const wxPoint &pos, const wxSize &sz); - - void IncrementalUpdateBackingStore(); - bool RebuildBackingStoreUpToFrame(unsigned int); - void DrawFrame(wxDC &dc, unsigned int); - - virtual void DisplayStaticImage(); - virtual wxSize DoGetBestSize() const; - -protected: - unsigned int m_currentFrame; // Current frame - bool m_looped; // Looped, or not - wxTimer m_timer; // The timer - wxAnimation m_animation; // The animation - - bool m_isPlaying; // Is the animation playing? - bool m_useWinBackgroundColour; // Use animation bg colour or window bg colour? - - wxBitmap m_backingStore; // The frames are drawn here and then blitted - // on the screen - -private: - typedef wxAnimationCtrlBase base_type; - DECLARE_DYNAMIC_CLASS(wxAnimationCtrl) - DECLARE_EVENT_TABLE() -}; - -#endif // _WX_GENERIC_ANIMATEH__ diff --git a/desmume/src/windows/wx/include/wx/generic/bmpcbox.h b/desmume/src/windows/wx/include/wx/generic/bmpcbox.h deleted file mode 100644 index e91e0afdd..000000000 --- a/desmume/src/windows/wx/include/wx/generic/bmpcbox.h +++ /dev/null @@ -1,170 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/bmpcbox.h -// Purpose: wxBitmapComboBox -// Author: Jaakko Salli -// Modified by: -// Created: Aug-30-2006 -// RCS-ID: $Id: bmpcbox.h 42046 2006-10-16 09:30:01Z ABX $ -// Copyright: (c) Jaakko Salli -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_BMPCBOX_H_ -#define _WX_GENERIC_BMPCBOX_H_ - - -#define wxGENERIC_BITMAPCOMBOBOX 1 - -#include "wx/odcombo.h" - -// ---------------------------------------------------------------------------- -// wxBitmapComboBox: a wxComboBox that allows images to be shown -// in front of string items. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxBitmapComboBox : public wxOwnerDrawnComboBox, - public wxBitmapComboBoxBase -{ -public: - - // ctors and such - wxBitmapComboBox() : wxOwnerDrawnComboBox(), wxBitmapComboBoxBase() - { - Init(); - } - - wxBitmapComboBox(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, - const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxBitmapComboBoxNameStr) - : wxOwnerDrawnComboBox(), - wxBitmapComboBoxBase() - { - Init(); - - (void)Create(parent, id, value, pos, size, n, - choices, style, validator, name); - } - - wxBitmapComboBox(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxBitmapComboBoxNameStr); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - int n, - const wxString choices[], - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxBitmapComboBoxNameStr); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxBitmapComboBoxNameStr); - - virtual ~wxBitmapComboBox(); - - // Adds item with image to the end of the combo box. - int Append(const wxString& item, const wxBitmap& bitmap = wxNullBitmap) - { return DoAppendWithImage(item, bitmap); } - - int Append(const wxString& item, const wxBitmap& bitmap, void *clientData) - { int n = DoAppendWithImage(item, bitmap); SetClientData(n, clientData); return n; } - int Append(const wxString& item, const wxBitmap& bitmap, wxClientData *clientData) - { int n = DoAppendWithImage(item, bitmap); SetClientObject(n, clientData); return n; } - - // Returns size of image used in list. - virtual wxSize GetBitmapSize() const - { - return m_usedImgSize; - } - - // Returns the image of the item with the given index. - virtual wxBitmap GetItemBitmap(unsigned int n) const; - - // Inserts item with image into the list before pos. Not valid for wxCB_SORT or wxCB_SORT - // styles, use Append instead. - int Insert(const wxString& item, const wxBitmap& bitmap, unsigned int pos) - { return DoInsertWithImage(item, bitmap, pos); } - - int Insert(const wxString& item, const wxBitmap& bitmap, - unsigned int pos, void *clientData); - int Insert(const wxString& item, const wxBitmap& bitmap, - unsigned int pos, wxClientData *clientData); - - // Sets the image for the given item. - virtual void SetItemBitmap(unsigned int n, const wxBitmap& bitmap); - - virtual void Clear(); - virtual void Delete(unsigned int n); - -protected: - - virtual void OnDrawBackground(wxDC& dc, const wxRect& rect, int item, int flags) const; - virtual void OnDrawItem(wxDC& dc, const wxRect& rect, int item, int flags) const; - virtual wxCoord OnMeasureItem(size_t item) const; - virtual wxCoord OnMeasureItemWidth(size_t item) const; - - virtual int DoAppendWithImage(const wxString& item, const wxBitmap& bitmap); - virtual int DoInsertWithImage(const wxString& item, const wxBitmap& bitmap, - unsigned int pos); - - virtual int DoAppend(const wxString& item); - virtual int DoInsert(const wxString& item, unsigned int pos); - - virtual bool SetFont(const wxFont& font); - - virtual wxSize DoGetBestSize() const; - - // Event handlers - void OnSize(wxSizeEvent& event); - - // Recalculates amount of empty space needed in front of - // text in control itself. - void DetermineIndent(); - - bool OnAddBitmap(const wxBitmap& bitmap); - - // Adds image to position - called in Append/Insert before - // string is added. - bool DoInsertBitmap(const wxBitmap& image, unsigned int pos); - - - wxArrayPtrVoid m_bitmaps; // Images associated with items - wxSize m_usedImgSize; // Size of bitmaps - -private: - int m_imgAreaWidth; // Width and height of area next to text field - int m_fontHeight; - bool m_inResize; - - void Init(); - void PostCreate(); - - DECLARE_EVENT_TABLE() - - DECLARE_DYNAMIC_CLASS(wxBitmapComboBox) -}; - -#endif // _WX_GENERIC_BMPCBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/busyinfo.h b/desmume/src/windows/wx/include/wx/generic/busyinfo.h deleted file mode 100644 index c29a0f96d..000000000 --- a/desmume/src/windows/wx/include/wx/generic/busyinfo.h +++ /dev/null @@ -1,42 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/busyinfo.h -// Purpose: Information window (when app is busy) -// Author: Vaclav Slavik -// Copyright: (c) 1999 Vaclav Slavik -// RCS-ID: $Id: busyinfo.h 49804 2007-11-10 01:09:42Z VZ $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __BUSYINFO_H__ -#define __BUSYINFO_H__ - -#include "wx/defs.h" - -#if wxUSE_BUSYINFO - -class WXDLLIMPEXP_FWD_CORE wxFrame; -class WXDLLIMPEXP_FWD_CORE wxWindow; - -//-------------------------------------------------------------------------------- -// wxBusyInfo -// Displays progress information -// Can be used in exactly same way as wxBusyCursor -//-------------------------------------------------------------------------------- - -class WXDLLEXPORT wxBusyInfo : public wxObject -{ -public: - wxBusyInfo(const wxString& message, wxWindow *parent = NULL); - - virtual ~wxBusyInfo(); - -private: - wxFrame *m_InfoFrame; - - DECLARE_NO_COPY_CLASS(wxBusyInfo) -}; - - -#endif // wxUSE_BUSYINFO - -#endif // __BUSYINFO_H__ diff --git a/desmume/src/windows/wx/include/wx/generic/buttonbar.h b/desmume/src/windows/wx/include/wx/generic/buttonbar.h deleted file mode 100644 index 6fa2c702a..000000000 --- a/desmume/src/windows/wx/include/wx/generic/buttonbar.h +++ /dev/null @@ -1,123 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/buttonbar.h -// Purpose: wxButtonToolBar declaration -// Author: Julian Smart, after Robert Roebling, Vadim Zeitlin, SciTech -// Modified by: -// Created: 2006-04-13 -// Id: $Id: buttonbar.h 38714 2006-04-14 15:49:57Z JS $ -// Copyright: (c) Julian Smart, Robert Roebling, Vadim Zeitlin, -// SciTech Software, Inc. -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BUTTONBAR_H_ -#define _WX_BUTTONBAR_H_ - -#include "wx/bmpbuttn.h" -#include "wx/toolbar.h" - -class WXDLLEXPORT wxButtonToolBarTool; - -// ---------------------------------------------------------------------------- -// wxButtonToolBar -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxButtonToolBar : public wxToolBarBase -{ -public: - // construction/destruction - wxButtonToolBar() { Init(); } - wxButtonToolBar(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxToolBarNameStr) - { - Init(); - - Create(parent, id, pos, size, style, name); - } - - bool Create( wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxToolBarNameStr ); - - virtual ~wxButtonToolBar(); - - virtual bool Realize(); - - virtual void SetToolShortHelp(int id, const wxString& helpString); - virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const; - -protected: - // common part of all ctors - void Init(); - - // implement base class pure virtuals - virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool); - virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool); - - virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable); - 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); - - virtual wxSize DoGetBestClientSize() const; - - // calculate layout - void DoLayout(); - - // get the bounding rect for the given tool - wxRect GetToolRect(wxToolBarToolBase *tool) const; - - // get the rect limits depending on the orientation: top/bottom for a - // vertical toolbar, left/right for a horizontal one - void GetRectLimits(const wxRect& rect, wxCoord *start, wxCoord *end) const; - - // receives button commands - void OnCommand(wxCommandEvent& event); - - // paints a border - void OnPaint(wxPaintEvent& event); - - // detects mouse clicks outside buttons - void OnLeftUp(wxMouseEvent& event); - -private: - // have we calculated the positions of our tools? - bool m_needsLayout; - - // the width of a separator - wxCoord m_widthSeparator; - - // the total size of all toolbar elements - wxCoord m_maxWidth, - m_maxHeight; - - // the height of a label - int m_labelHeight; - - // the space above the label - int m_labelMargin; - -private: - DECLARE_DYNAMIC_CLASS(wxButtonToolBar) - DECLARE_EVENT_TABLE() -}; - -#endif - // _WX_BUTTONBAR_H_ - diff --git a/desmume/src/windows/wx/include/wx/generic/calctrl.h b/desmume/src/windows/wx/include/wx/generic/calctrl.h deleted file mode 100644 index 43b854c64..000000000 --- a/desmume/src/windows/wx/include/wx/generic/calctrl.h +++ /dev/null @@ -1,324 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: generic/calctrl.h -// Purpose: generic implementation of date-picker control -// Author: Vadim Zeitlin -// Modified by: -// Created: 29.12.99 -// RCS-ID: $Id: calctrl.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 1999 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_CALCTRL_H -#define _WX_GENERIC_CALCTRL_H - -#include "wx/control.h" // the base class -#include "wx/dcclient.h" // for wxPaintDC - -class WXDLLIMPEXP_FWD_CORE wxComboBox; -class WXDLLIMPEXP_FWD_CORE wxStaticText; -class WXDLLIMPEXP_FWD_CORE wxSpinCtrl; - -#define wxCalendarNameStr _T("CalendarCtrl") - -// ---------------------------------------------------------------------------- -// wxCalendarCtrl: a control allowing the user to pick a date interactively -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxCalendarCtrl : public wxControl -{ -public: - // construction - wxCalendarCtrl() { Init(); } - wxCalendarCtrl(wxWindow *parent, - wxWindowID id, - const wxDateTime& date = wxDefaultDateTime, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCAL_SHOW_HOLIDAYS | wxWANTS_CHARS, - const wxString& name = wxCalendarNameStr); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxDateTime& date = wxDefaultDateTime, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCAL_SHOW_HOLIDAYS | wxWANTS_CHARS, - const wxString& name = wxCalendarNameStr); - - virtual ~wxCalendarCtrl(); - - virtual bool Destroy(); - - // set/get the current date - // ------------------------ - - bool SetDate(const wxDateTime& date); // we need to be able to control if the event should be sent in SetDateAndNotify(...) - const wxDateTime& GetDate() const { return m_date; } - - // set/get the range in which selection can occur - // --------------------------------------------- - - bool SetLowerDateLimit(const wxDateTime& date = wxDefaultDateTime); - const wxDateTime& GetLowerDateLimit() const { return m_lowdate; } - bool SetUpperDateLimit(const wxDateTime& date = wxDefaultDateTime); - const wxDateTime& GetUpperDateLimit() const { return m_highdate; } - - bool SetDateRange(const wxDateTime& lowerdate = wxDefaultDateTime, const wxDateTime& upperdate = wxDefaultDateTime); - - // calendar mode - // ------------- - - // some calendar styles can't be changed after the control creation by - // just using SetWindowStyle() and Refresh() and the functions below - // should be used instead for them - - // corresponds to wxCAL_NO_YEAR_CHANGE bit - void EnableYearChange(bool enable = true); - - // corresponds to wxCAL_NO_MONTH_CHANGE bit - void EnableMonthChange(bool enable = true); - - // corresponds to wxCAL_SHOW_HOLIDAYS bit - void EnableHolidayDisplay(bool display = true); - - // customization - // ------------- - - // header colours are used for painting the weekdays at the top - void SetHeaderColours(const wxColour& colFg, const wxColour& colBg) - { - m_colHeaderFg = colFg; - m_colHeaderBg = colBg; - } - - const wxColour& GetHeaderColourFg() const { return m_colHeaderFg; } - const wxColour& GetHeaderColourBg() const { return m_colHeaderBg; } - - // highlight colour is used for the currently selected date - void SetHighlightColours(const wxColour& colFg, const wxColour& colBg) - { - m_colHighlightFg = colFg; - m_colHighlightBg = colBg; - } - - const wxColour& GetHighlightColourFg() const { return m_colHighlightFg; } - const wxColour& GetHighlightColourBg() const { return m_colHighlightBg; } - - // holiday colour is used for the holidays (if style & wxCAL_SHOW_HOLIDAYS) - void SetHolidayColours(const wxColour& colFg, const wxColour& colBg) - { - m_colHolidayFg = colFg; - m_colHolidayBg = colBg; - } - - const wxColour& GetHolidayColourFg() const { return m_colHolidayFg; } - const wxColour& GetHolidayColourBg() const { return m_colHolidayBg; } - - // an item without custom attributes is drawn with the default colours and - // font and without border, setting custom attributes allows to modify this - // - // the day parameter should be in 1..31 range, for days 29, 30, 31 the - // corresponding attribute is just unused if there is no such day in the - // current month - - wxCalendarDateAttr *GetAttr(size_t day) const - { - wxCHECK_MSG( day > 0 && day < 32, NULL, _T("invalid day") ); - - return m_attrs[day - 1]; - } - - void SetAttr(size_t day, wxCalendarDateAttr *attr) - { - wxCHECK_RET( day > 0 && day < 32, _T("invalid day") ); - - delete m_attrs[day - 1]; - m_attrs[day - 1] = attr; - } - - void SetHoliday(size_t day); - - void ResetAttr(size_t day) { SetAttr(day, (wxCalendarDateAttr *)NULL); } - - // returns one of wxCAL_HITTEST_XXX constants and fills either date or wd - // with the corresponding value (none for NOWHERE, the date for DAY and wd - // for HEADER) - wxCalendarHitTestResult HitTest(const wxPoint& pos, - wxDateTime *date = NULL, - wxDateTime::WeekDay *wd = NULL); - - // implementation only from now on - // ------------------------------- - - // forward these functions to all subcontrols - virtual bool Enable(bool enable = true); - virtual bool Show(bool show = true); - - virtual void SetWindowStyleFlag(long style); - - virtual wxVisualAttributes GetDefaultAttributes() const - { return GetClassDefaultAttributes(GetWindowVariant()); } - - static wxVisualAttributes - GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); - - void OnSysColourChanged(wxSysColourChangedEvent& event); - -protected: - // override some base class virtuals - virtual wxSize DoGetBestSize() const; - virtual void DoGetPosition(int *x, int *y) const; - virtual void DoGetSize(int *width, int *height) const; - virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags); - virtual void DoMoveWindow(int x, int y, int width, int height); - -private: - // common part of all ctors - void Init(); - - // startup colours and reinitialization after colour changes in system - void InitColours(); - - // event handlers - void OnPaint(wxPaintEvent& event); - void OnClick(wxMouseEvent& event); - void OnDClick(wxMouseEvent& event); - void OnChar(wxKeyEvent& event); - void OnMonthChange(wxCommandEvent& event); - void OnYearChange(wxCommandEvent& event); - void OnYearTextChange(wxCommandEvent& event); - - // (re)calc m_widthCol and m_heightRow - void RecalcGeometry(); - - // set the date and send the notification - void SetDateAndNotify(const wxDateTime& date); - - // get the week (row, in range 1..6) for the given date - size_t GetWeek(const wxDateTime& date) const; - - // get the date from which we start drawing days - wxDateTime GetStartDate() const; - - // is this date shown? - bool IsDateShown(const wxDateTime& date) const; - - // is this date in the given range? - bool IsDateInRange(const wxDateTime& date) const; - - // range helpers - bool ChangeYear(wxDateTime* target) const; - bool ChangeMonth(wxDateTime* target) const; - - // redraw the given date - void RefreshDate(const wxDateTime& date); - - // change the date inside the same month/year - void ChangeDay(const wxDateTime& date); - - // set the attributes for the holidays if needed - void SetHolidayAttrs(); - - // reset all holidays - void ResetHolidayAttrs(); - - // generate the given calendar event(s) - void GenerateEvent(wxEventType type) - { - wxCalendarEvent event(this, type); - (void)GetEventHandler()->ProcessEvent(event); - } - - void GenerateEvents(wxEventType type1, wxEventType type2) - { - GenerateEvent(type1); - GenerateEvent(type2); - } - - // do we allow changing the month/year? - bool AllowMonthChange() const - { - return (GetWindowStyle() & wxCAL_NO_MONTH_CHANGE) - != wxCAL_NO_MONTH_CHANGE; - } - bool AllowYearChange() const - { - return !(GetWindowStyle() & wxCAL_NO_YEAR_CHANGE); - } - - // show the correct controls - void ShowCurrentControls(); - - // create the month combo and year spin controls - void CreateMonthComboBox(); - void CreateYearSpinCtrl(); - -public: - // get the currently shown control for month/year - wxControl *GetMonthControl() const; - wxControl *GetYearControl() const; - -private: - // OnPaint helper-methods - - // Highlight the [fromdate : todate] range using pen and brush - void HighlightRange(wxPaintDC* dc, const wxDateTime& fromdate, const wxDateTime& todate, const wxPen* pen, const wxBrush* brush); - - // Get the "coordinates" for the date relative to the month currently displayed. - // using (day, week): upper left coord is (1, 1), lower right coord is (7, 6) - // if the date isn't visible (-1, -1) is put in (day, week) and false is returned - bool GetDateCoord(const wxDateTime& date, int *day, int *week) const; - - // Set the flag for SetDate(): otherwise it would overwrite the year - // typed in by the user - void SetUserChangedYear() { m_userChangedYear = true; } - - // the subcontrols - wxStaticText *m_staticMonth; - wxComboBox *m_comboMonth; - - wxStaticText *m_staticYear; - wxSpinCtrl *m_spinYear; - - // the current selection - wxDateTime m_date; - - // the date-range - wxDateTime m_lowdate; - wxDateTime m_highdate; - - // default attributes - wxColour m_colHighlightFg, - m_colHighlightBg, - m_colHolidayFg, - m_colHolidayBg, - m_colHeaderFg, - m_colHeaderBg, - m_colBackground, - m_colSorrounding; - - // the attributes for each of the month days - wxCalendarDateAttr *m_attrs[31]; - - // the width and height of one column/row in the calendar - wxCoord m_widthCol, - m_heightRow, - m_rowOffset; - - wxRect m_leftArrowRect, - m_rightArrowRect; - - // the week day names - wxString m_weekdays[7]; - - // true if SetDate() is being called as the result of changing the year in - // the year control - bool m_userChangedYear; - - DECLARE_DYNAMIC_CLASS(wxCalendarCtrl) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxCalendarCtrl) -}; - -#endif // _WX_GENERIC_CALCTRL_H diff --git a/desmume/src/windows/wx/include/wx/generic/caret.h b/desmume/src/windows/wx/include/wx/generic/caret.h deleted file mode 100644 index 5b8de00ed..000000000 --- a/desmume/src/windows/wx/include/wx/generic/caret.h +++ /dev/null @@ -1,95 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: generic/caret.h -// Purpose: generic wxCaret class -// Author: Vadim Zeitlin (original code by Robert Roebling) -// Modified by: -// Created: 25.05.99 -// RCS-ID: $Id: caret.h 42397 2006-10-25 12:12:56Z VS $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CARET_H_ -#define _WX_CARET_H_ - -#include "wx/timer.h" -#include "wx/dc.h" -#include "wx/overlay.h" - -#ifdef wxHAS_NATIVE_OVERLAY - #define wxHAS_CARET_USING_OVERLAYS -#endif - -class WXDLLIMPEXP_CORE wxCaret; - -class WXDLLEXPORT wxCaretTimer : public wxTimer -{ -public: - wxCaretTimer(wxCaret *caret); - virtual void Notify(); - -private: - wxCaret *m_caret; -}; - -class WXDLLIMPEXP_CORE wxCaret : public wxCaretBase -{ -public: - // ctors - // ----- - // default - use Create() - wxCaret() : m_timer(this) { InitGeneric(); } - // creates a block caret associated with the given window - wxCaret(wxWindowBase *window, int width, int height) - : wxCaretBase(window, width, height), m_timer(this) { InitGeneric(); } - wxCaret(wxWindowBase *window, const wxSize& size) - : wxCaretBase(window, size), m_timer(this) { InitGeneric(); } - - virtual ~wxCaret(); - - // implementation - // -------------- - - // called by wxWindow (not using the event tables) - virtual void OnSetFocus(); - virtual void OnKillFocus(); - - // called by wxCaretTimer - void OnTimer(); - -protected: - virtual void DoShow(); - virtual void DoHide(); - virtual void DoMove(); - virtual void DoSize(); - - // blink the caret once - void Blink(); - - // refresh the caret - void Refresh(); - - // draw the caret on the given DC - void DoDraw(wxDC *dc); - -private: - // GTK specific initialization - void InitGeneric(); - -#ifdef wxHAS_CARET_USING_OVERLAYS - // the overlay for displaying the caret - wxOverlay m_overlay; -#else - // the bitmap holding the part of window hidden by the caret when it was - // at (m_xOld, m_yOld) - wxBitmap m_bmpUnderCaret; - int m_xOld, - m_yOld; -#endif - - wxCaretTimer m_timer; - bool m_blinkedOut, // true => caret hidden right now - m_hasFocus; // true => our window has focus -}; - -#endif // _WX_CARET_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/choicdgg.h b/desmume/src/windows/wx/include/wx/generic/choicdgg.h deleted file mode 100644 index 79bc395d3..000000000 --- a/desmume/src/windows/wx/include/wx/generic/choicdgg.h +++ /dev/null @@ -1,320 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/choicdgg.h -// Purpose: Generic choice dialogs -// 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 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_CHOICDGG_H_ -#define _WX_GENERIC_CHOICDGG_H_ - -#include "wx/dynarray.h" -#include "wx/dialog.h" - -class WXDLLIMPEXP_FWD_CORE wxListBoxBase; - -// ---------------------------------------------------------------------------- -// some (ugly...) constants -// ---------------------------------------------------------------------------- - -#define wxCHOICE_HEIGHT 150 -#define wxCHOICE_WIDTH 200 - -#ifdef __WXWINCE__ -#define wxCHOICEDLG_STYLE \ - (wxDEFAULT_DIALOG_STYLE | wxOK | wxCANCEL | wxCENTRE) -#else -#define wxCHOICEDLG_STYLE \ - (wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxOK | wxCANCEL | wxCENTRE) -#endif - -// ---------------------------------------------------------------------------- -// wxAnyChoiceDialog: a base class for dialogs containing a listbox -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxAnyChoiceDialog : public wxDialog -{ -public: - wxAnyChoiceDialog() { } - - wxAnyChoiceDialog(wxWindow *parent, - const wxString& message, - const wxString& caption, - int n, const wxString *choices, - long styleDlg = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition, - long styleLbox = wxLB_ALWAYS_SB) - { - (void)Create(parent, message, caption, n, choices, - styleDlg, pos, styleLbox); - } - wxAnyChoiceDialog(wxWindow *parent, - const wxString& message, - const wxString& caption, - const wxArrayString& choices, - long styleDlg = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition, - long styleLbox = wxLB_ALWAYS_SB) - { - (void)Create(parent, message, caption, choices, - styleDlg, pos, styleLbox); - } - - bool Create(wxWindow *parent, - const wxString& message, - const wxString& caption, - int n, const wxString *choices, - long styleDlg = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition, - long styleLbox = wxLB_ALWAYS_SB); - bool Create(wxWindow *parent, - const wxString& message, - const wxString& caption, - const wxArrayString& choices, - long styleDlg = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition, - long styleLbox = wxLB_ALWAYS_SB); - -protected: - wxListBoxBase *m_listbox; - - virtual wxListBoxBase *CreateList(int n, - const wxString *choices, - long styleLbox); - - DECLARE_NO_COPY_CLASS(wxAnyChoiceDialog) -}; - -// ---------------------------------------------------------------------------- -// wxSingleChoiceDialog: a dialog with single selection listbox -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSingleChoiceDialog : public wxAnyChoiceDialog -{ -public: - wxSingleChoiceDialog() - { - m_selection = -1; - } - - wxSingleChoiceDialog(wxWindow *parent, - const wxString& message, - const wxString& caption, - int n, - const wxString *choices, - char **clientData = (char **)NULL, - long style = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition); - wxSingleChoiceDialog(wxWindow *parent, - const wxString& message, - const wxString& caption, - const wxArrayString& choices, - char **clientData = (char **)NULL, - long style = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition); - - bool Create(wxWindow *parent, - const wxString& message, - const wxString& caption, - int n, - const wxString *choices, - char **clientData = (char **)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, - long style = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition); - - void SetSelection(int sel); - int GetSelection() const { return m_selection; } - wxString GetStringSelection() const { return m_stringSelection; } - - // obsolete function (NB: no need to make it return wxChar, it's untyped) - char *GetSelectionClientData() const { return (char *)m_clientData; } - - // implementation from now on - void OnOK(wxCommandEvent& event); -#ifndef __SMARTPHONE__ - void OnListBoxDClick(wxCommandEvent& event); -#endif -#ifdef __WXWINCE__ - void OnJoystickButtonDown(wxJoystickEvent& event); -#endif - -protected: - int m_selection; - wxString m_stringSelection; - - void DoChoice(); - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxSingleChoiceDialog) - DECLARE_EVENT_TABLE() -}; - -// ---------------------------------------------------------------------------- -// wxMultiChoiceDialog: a dialog with multi selection listbox -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMultiChoiceDialog : public wxAnyChoiceDialog -{ -public: - wxMultiChoiceDialog() { } - - wxMultiChoiceDialog(wxWindow *parent, - const wxString& message, - const wxString& caption, - int n, - const wxString *choices, - long style = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition) - { - (void)Create(parent, message, caption, n, choices, style, pos); - } - wxMultiChoiceDialog(wxWindow *parent, - const wxString& message, - const wxString& caption, - const wxArrayString& choices, - long style = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition) - { - (void)Create(parent, message, caption, choices, style, pos); - } - - bool Create(wxWindow *parent, - const wxString& message, - const wxString& caption, - int n, - const wxString *choices, - long style = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition); - bool Create(wxWindow *parent, - const wxString& message, - const wxString& caption, - const wxArrayString& choices, - long style = wxCHOICEDLG_STYLE, - const wxPoint& pos = wxDefaultPosition); - - void SetSelections(const wxArrayInt& selections); - wxArrayInt GetSelections() const { return m_selections; } - - // implementation from now on - virtual bool TransferDataFromWindow(); - -protected: -#if wxUSE_CHECKLISTBOX - virtual wxListBoxBase *CreateList(int n, - const wxString *choices, - long styleLbox); -#endif // wxUSE_CHECKLISTBOX - - wxArrayInt m_selections; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxMultiChoiceDialog) -}; - -// ---------------------------------------------------------------------------- -// wrapper functions which can be used to get selection(s) from the user -// ---------------------------------------------------------------------------- - -// get the user selection as a string -WXDLLEXPORT wxString wxGetSingleChoice(const wxString& message, - const wxString& caption, - const wxArrayString& choices, - wxWindow *parent = NULL, - int x = wxDefaultCoord, - int y = wxDefaultCoord, - bool centre = true, - int width = wxCHOICE_WIDTH, - int height = wxCHOICE_HEIGHT); - -WXDLLEXPORT wxString wxGetSingleChoice(const wxString& message, - const wxString& caption, - int n, const wxString *choices, - wxWindow *parent = NULL, - int x = wxDefaultCoord, - int y = wxDefaultCoord, - bool centre = true, - int width = wxCHOICE_WIDTH, - int height = wxCHOICE_HEIGHT); - -// Same as above but gets position in list of strings, instead of string, -// or -1 if no selection -WXDLLEXPORT int wxGetSingleChoiceIndex(const wxString& message, - const wxString& caption, - const wxArrayString& choices, - wxWindow *parent = NULL, - int x = wxDefaultCoord, - int y = wxDefaultCoord, - bool centre = true, - int width = wxCHOICE_WIDTH, - int height = wxCHOICE_HEIGHT); - -WXDLLEXPORT int wxGetSingleChoiceIndex(const wxString& message, - const wxString& caption, - int n, const wxString *choices, - wxWindow *parent = NULL, - int x = wxDefaultCoord, - int y = wxDefaultCoord, - bool centre = true, - int width = wxCHOICE_WIDTH, - int height = wxCHOICE_HEIGHT); - -// Return client data instead or NULL if cancelled -WXDLLEXPORT void* wxGetSingleChoiceData(const wxString& message, - const wxString& caption, - const wxArrayString& choices, - void **client_data, - wxWindow *parent = NULL, - int x = wxDefaultCoord, - int y = wxDefaultCoord, - bool centre = true, - int width = wxCHOICE_WIDTH, - int height = wxCHOICE_HEIGHT); - -WXDLLEXPORT void* wxGetSingleChoiceData(const wxString& message, - const wxString& caption, - int n, const wxString *choices, - void **client_data, - wxWindow *parent = NULL, - int x = wxDefaultCoord, - int y = wxDefaultCoord, - bool centre = true, - int width = wxCHOICE_WIDTH, - int height = wxCHOICE_HEIGHT); - -// fill the array with the indices of the chosen items, it will be empty -// if no items were selected or Cancel was pressed - return the number of -// selections -WXDLLEXPORT size_t wxGetMultipleChoices(wxArrayInt& selections, - const wxString& message, - const wxString& caption, - int n, const wxString *choices, - wxWindow *parent = NULL, - int x = wxDefaultCoord, - int y = wxDefaultCoord, - bool centre = true, - int width = wxCHOICE_WIDTH, - int height = wxCHOICE_HEIGHT); - -WXDLLEXPORT size_t wxGetMultipleChoices(wxArrayInt& selections, - const wxString& message, - const wxString& caption, - const wxArrayString& choices, - wxWindow *parent = NULL, - int x = wxDefaultCoord, - int y = wxDefaultCoord, - bool centre = true, - int width = wxCHOICE_WIDTH, - int height = wxCHOICE_HEIGHT); - -#endif // _WX_GENERIC_CHOICDGG_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/clrpickerg.h b/desmume/src/windows/wx/include/wx/generic/clrpickerg.h deleted file mode 100644 index a67f1181f..000000000 --- a/desmume/src/windows/wx/include/wx/generic/clrpickerg.h +++ /dev/null @@ -1,98 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/clrpickerg.h -// Purpose: wxGenericColourButton header -// Author: Francesco Montorsi (based on Vadim Zeitlin's code) -// Modified by: -// Created: 14/4/2006 -// Copyright: (c) Vadim Zeitlin, Francesco Montorsi -// RCS-ID: $Id: clrpickerg.h 58967 2009-02-17 13:31:28Z SC $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CLRPICKER_H_ -#define _WX_CLRPICKER_H_ - -#include "wx/button.h" -#include "wx/cmndata.h" - -//----------------------------------------------------------------------------- -// wxGenericColourButton: a button which brings up a wxColourDialog -//----------------------------------------------------------------------------- - -// show the colour in HTML form (#AABBCC) as colour button label -#define wxCLRBTN_SHOW_LABEL 100 - -// the default style -#define wxCLRBTN_DEFAULT_STYLE (wxCLRBTN_SHOW_LABEL) - -#ifndef wxCLRBTN_USES_BMP_BUTTON - #define wxCLRBTN_USES_BMP_BUTTON 0 -#endif - -#if wxCLRBTN_USES_BMP_BUTTON - #include "wx/bmpbutton.h" - #define wxCLRBTN_BASE_CLASS wxBitmapButton -#else - #define wxCLRBTN_BASE_CLASS wxButton -#endif - -class WXDLLIMPEXP_CORE wxGenericColourButton : public wxCLRBTN_BASE_CLASS, - public wxColourPickerWidgetBase -{ -public: - wxGenericColourButton() {} - wxGenericColourButton(wxWindow *parent, - wxWindowID id, - const wxColour& col = *wxBLACK, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCLRBTN_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxColourPickerWidgetNameStr) - { - Create(parent, id, col, pos, size, style, validator, name); - } - - virtual ~wxGenericColourButton() {} - - -public: // API extensions specific for wxGenericColourButton - - // user can override this to init colour data in a different way - virtual void InitColourData(); - - // returns the colour data shown in wxColourDialog - wxColourData *GetColourData() { return &ms_data; } - - -public: - - bool Create(wxWindow *parent, - wxWindowID id, - const wxColour& col = *wxBLACK, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCLRBTN_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxColourPickerWidgetNameStr); - - void OnButtonClick(wxCommandEvent &); - - -protected: - - wxSize DoGetBestSize() const; - - void UpdateColour(); - - // the colour data shown in wxColourPickerCtrlGeneric - // controls. This member is static so that all colour pickers - // in the program share the same set of custom colours. - static wxColourData ms_data; - -private: - DECLARE_DYNAMIC_CLASS(wxGenericColourButton) -}; - - -#endif // _WX_CLRPICKER_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/collpaneg.h b/desmume/src/windows/wx/include/wx/generic/collpaneg.h deleted file mode 100644 index 412c67980..000000000 --- a/desmume/src/windows/wx/include/wx/generic/collpaneg.h +++ /dev/null @@ -1,105 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/collpaneg.h -// Purpose: wxGenericCollapsiblePane -// Author: Francesco Montorsi -// Modified by: -// Created: 8/10/2006 -// RCS-ID: $Id: collpaneg.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) Francesco Montorsi -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_COLLAPSABLE_PANE_H_GENERIC_ -#define _WX_COLLAPSABLE_PANE_H_GENERIC_ - -// forward declared -class WXDLLIMPEXP_FWD_CORE wxButton; -class WXDLLIMPEXP_FWD_CORE wxStaticLine; - -// class name -extern WXDLLIMPEXP_DATA_CORE(const wxChar) wxCollapsiblePaneNameStr[]; - -// ---------------------------------------------------------------------------- -// wxGenericCollapsiblePane -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxGenericCollapsiblePane : public wxCollapsiblePaneBase -{ -public: - wxGenericCollapsiblePane() { Init(); } - - wxGenericCollapsiblePane(wxWindow *parent, - wxWindowID winid, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCP_DEFAULT_STYLE, - const wxValidator& val = wxDefaultValidator, - const wxString& name = wxCollapsiblePaneNameStr) - { - Init(); - - Create(parent, winid, label, pos, size, style, val, name); - } - - void Init() - { - m_pButton = NULL; - m_pPane = NULL; - m_pStaticLine = NULL; - m_sz = NULL; - } - - ~wxGenericCollapsiblePane(); - - bool Create(wxWindow *parent, - wxWindowID winid, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCP_DEFAULT_STYLE, - const wxValidator& val = wxDefaultValidator, - const wxString& name = wxCollapsiblePaneNameStr); - - // public wxCollapsiblePane API - virtual void Collapse(bool collapse = true); - virtual void SetLabel(const wxString &label); - - virtual bool IsCollapsed() const - { return m_pPane==NULL || !m_pPane->IsShown(); } - virtual wxWindow *GetPane() const - { return m_pPane; } - virtual wxString GetLabel() const - { return m_strLabel; } - - virtual bool Layout(); - - // implementation only, don't use - void OnStateChange(const wxSize& sizeNew); - -protected: - // overridden methods - virtual wxSize DoGetBestSize() const; - - wxString GetBtnLabel() const; - int GetBorder() const; - - // child controls - wxButton *m_pButton; - wxStaticLine *m_pStaticLine; - wxWindow *m_pPane; - wxSizer *m_sz; - - // the button label without ">>" or "<<" - wxString m_strLabel; - -private: - // event handlers - void OnButton(wxCommandEvent &ev); - void OnSize(wxSizeEvent &ev); - - DECLARE_DYNAMIC_CLASS(wxGenericCollapsiblePane) - DECLARE_EVENT_TABLE() -}; - -#endif // _WX_COLLAPSABLE_PANE_H_GENERIC_ diff --git a/desmume/src/windows/wx/include/wx/generic/colour.h b/desmume/src/windows/wx/include/wx/generic/colour.h deleted file mode 100644 index 826e2c363..000000000 --- a/desmume/src/windows/wx/include/wx/generic/colour.h +++ /dev/null @@ -1,75 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/colour.h -// Purpose: wxColour class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: colour.h 41751 2006-10-08 21:56:55Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_COLOUR_H_ -#define _WX_GENERIC_COLOUR_H_ - -#include "wx/object.h" - -// Colour -class WXDLLEXPORT wxColour: public wxColourBase -{ -public: - // constructors - // ------------ - - // default - wxColour(); - DEFINE_STD_WXCOLOUR_CONSTRUCTORS - - // copy ctors and assignment operators - wxColour(const wxColour& col); - wxColour& operator=(const wxColour& col); - - // dtor - virtual ~wxColour(); - - // accessors - bool Ok() const { return IsOk(); } - bool IsOk() const { return m_isInit; } - - unsigned char Red() const { return m_red; } - unsigned char Green() const { return m_green; } - unsigned char Blue() const { return m_blue; } - unsigned char Alpha() const { return m_alpha; } - - // comparison - bool operator==(const wxColour& colour) const - { - return (m_red == colour.m_red && - m_green == colour.m_green && - m_blue == colour.m_blue && - m_alpha == colour.m_alpha && - m_isInit == colour.m_isInit); - } - - bool operator!=(const wxColour& colour) const { return !(*this == colour); } - -protected: - - // Helper function - void Init(); - - virtual void - InitRGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a); - -private: - bool m_isInit; - unsigned char m_red; - unsigned char m_blue; - unsigned char m_green; - unsigned char m_alpha; - -private: - DECLARE_DYNAMIC_CLASS(wxColour) -}; - -#endif // _WX_GENERIC_COLOUR_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/colrdlgg.h b/desmume/src/windows/wx/include/wx/generic/colrdlgg.h deleted file mode 100644 index 77a3d6e3d..000000000 --- a/desmume/src/windows/wx/include/wx/generic/colrdlgg.h +++ /dev/null @@ -1,120 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/colrdlgg.h -// Purpose: wxGenericColourDialog -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: colrdlgg.h 37164 2006-01-26 17:20:50Z ABX $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __COLORDLGH_G__ -#define __COLORDLGH_G__ - -#include "wx/defs.h" -#include "wx/gdicmn.h" -#include "wx/dialog.h" -#include "wx/cmndata.h" - -#define wxID_ADD_CUSTOM 3000 - -#if wxUSE_SLIDER - - #define wxID_RED_SLIDER 3001 - #define wxID_GREEN_SLIDER 3002 - #define wxID_BLUE_SLIDER 3003 - - class WXDLLEXPORT wxSlider; - -#endif // wxUSE_SLIDER - -class WXDLLEXPORT wxGenericColourDialog : public wxDialog -{ -public: - wxGenericColourDialog(); - wxGenericColourDialog(wxWindow *parent, - wxColourData *data = (wxColourData *) NULL); - virtual ~wxGenericColourDialog(); - - bool Create(wxWindow *parent, wxColourData *data = (wxColourData *) NULL); - - wxColourData &GetColourData() { return colourData; } - - virtual int ShowModal(); - - // Internal functions - void OnMouseEvent(wxMouseEvent& event); - void OnPaint(wxPaintEvent& event); - - virtual void CalculateMeasurements(); - virtual void CreateWidgets(); - virtual void InitializeColours(); - - virtual void PaintBasicColours(wxDC& dc); - virtual void PaintCustomColours(wxDC& dc); - virtual void PaintCustomColour(wxDC& dc); - virtual void PaintHighlight(wxDC& dc, bool draw); - - virtual void OnBasicColourClick(int which); - virtual void OnCustomColourClick(int which); - - void OnAddCustom(wxCommandEvent& event); - -#if wxUSE_SLIDER - void OnRedSlider(wxCommandEvent& event); - void OnGreenSlider(wxCommandEvent& event); - void OnBlueSlider(wxCommandEvent& event); -#endif // wxUSE_SLIDER - - void OnCloseWindow(wxCloseEvent& event); - -protected: - wxColourData colourData; - wxWindow *dialogParent; - - // Area reserved for grids of colours - wxRect standardColoursRect; - wxRect customColoursRect; - wxRect singleCustomColourRect; - - // Size of each colour rectangle - wxPoint smallRectangleSize; - - // For single customizable colour - wxPoint customRectangleSize; - - // Grid spacing (between rectangles) - int gridSpacing; - - // Section spacing (between left and right halves of dialog box) - int sectionSpacing; - - // 48 'standard' colours - wxColour standardColours[48]; - - // 16 'custom' colours - wxColour customColours[16]; - - // Which colour is selected? An index into one of the two areas. - int colourSelection; - int whichKind; // 1 for standard colours, 2 for custom colours, - -#if wxUSE_SLIDER - wxSlider *redSlider; - wxSlider *greenSlider; - wxSlider *blueSlider; -#endif // wxUSE_SLIDER - - int buttonY; - - int okButtonX; - int customButtonX; - - // static bool colourDialogCancelled; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxGenericColourDialog) -}; - -#endif diff --git a/desmume/src/windows/wx/include/wx/generic/combo.h b/desmume/src/windows/wx/include/wx/generic/combo.h deleted file mode 100644 index 1b2518539..000000000 --- a/desmume/src/windows/wx/include/wx/generic/combo.h +++ /dev/null @@ -1,140 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/combo.h -// Purpose: Generic wxComboCtrl -// Author: Jaakko Salli -// Modified by: -// Created: Apr-30-2006 -// RCS-ID: $Id: combo.h 41835 2006-10-09 20:12:19Z RR $ -// Copyright: (c) Jaakko Salli -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_COMBOCTRL_H_ -#define _WX_GENERIC_COMBOCTRL_H_ - -#if wxUSE_COMBOCTRL - -// Only define generic if native doesn't have all the features -#if !defined(wxCOMBOCONTROL_FULLY_FEATURED) - -// ---------------------------------------------------------------------------- -// Generic wxComboCtrl -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - -// all actions of single line text controls are supported - -// popup/dismiss the choice window -#define wxACTION_COMBOBOX_POPUP _T("popup") -#define wxACTION_COMBOBOX_DISMISS _T("dismiss") - -#endif - -extern WXDLLIMPEXP_DATA_CORE(const wxChar) wxComboBoxNameStr[]; - -class WXDLLEXPORT wxGenericComboCtrl : public wxComboCtrlBase -{ -public: - // ctors and such - wxGenericComboCtrl() : wxComboCtrlBase() { Init(); } - - wxGenericComboCtrl(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr) - : wxComboCtrlBase() - { - Init(); - - (void)Create(parent, id, value, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr); - - virtual ~wxGenericComboCtrl(); - - void SetCustomPaintWidth( int width ); - - virtual bool IsKeyPopupToggle(const wxKeyEvent& event) const; - - static int GetFeatures() { return wxComboCtrlFeatures::All; } - -#if defined(__WXUNIVERSAL__) - // we have our own input handler and our own actions - virtual bool PerformAction(const wxControlAction& action, - long numArg = 0l, - const wxString& strArg = wxEmptyString); -#endif - -protected: - - // Mandatory virtuals - virtual void OnResize(); - - // Event handlers - void OnPaintEvent( wxPaintEvent& event ); - void OnMouseEvent( wxMouseEvent& event ); - -private: - void Init(); - - DECLARE_EVENT_TABLE() - - DECLARE_DYNAMIC_CLASS(wxGenericComboCtrl) -}; - - -#ifndef _WX_COMBOCONTROL_H_ - -// If native wxComboCtrl was not defined, then prepare a simple -// front-end so that wxRTTI works as expected. - -class WXDLLEXPORT wxComboCtrl : public wxGenericComboCtrl -{ -public: - wxComboCtrl() : wxGenericComboCtrl() {} - - wxComboCtrl(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr) - : wxGenericComboCtrl() - { - (void)Create(parent, id, value, pos, size, style, validator, name); - } - - virtual ~wxComboCtrl() {} - -protected: - -private: - DECLARE_DYNAMIC_CLASS(wxComboCtrl) -}; - -#endif // _WX_COMBOCONTROL_H_ - -#else - -#define wxGenericComboCtrl wxComboCtrl - -#endif // !defined(wxCOMBOCONTROL_FULLY_FEATURED) - -#endif // wxUSE_COMBOCTRL -#endif - // _WX_GENERIC_COMBOCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/dataview.h b/desmume/src/windows/wx/include/wx/generic/dataview.h deleted file mode 100644 index e6222abc6..000000000 --- a/desmume/src/windows/wx/include/wx/generic/dataview.h +++ /dev/null @@ -1,311 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/dataview.h -// Purpose: wxDataViewCtrl generic implementation header -// Author: Robert Roebling -// Id: $Id: dataview.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1998 Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __GENERICDATAVIEWCTRLH__ -#define __GENERICDATAVIEWCTRLH__ - -#include "wx/defs.h" -#include "wx/object.h" -#include "wx/list.h" -#include "wx/control.h" -#include "wx/scrolwin.h" -#include "wx/icon.h" - -// --------------------------------------------------------- -// classes -// --------------------------------------------------------- - -class WXDLLIMPEXP_FWD_ADV wxDataViewCtrl; -class WXDLLIMPEXP_FWD_ADV wxDataViewMainWindow; -class WXDLLIMPEXP_FWD_ADV wxDataViewHeaderWindow; - -// --------------------------------------------------------- -// wxDataViewRenderer -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewRenderer: public wxDataViewRendererBase -{ -public: - wxDataViewRenderer( const wxString &varianttype, wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); - virtual ~wxDataViewRenderer(); - - virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0; - virtual wxSize GetSize() = 0; - - virtual bool Activate( wxRect WXUNUSED(cell), - wxDataViewListModel *WXUNUSED(model), - unsigned int WXUNUSED(col), - unsigned int WXUNUSED(row) ) - { return false; } - - virtual bool LeftClick( wxPoint WXUNUSED(cursor), - wxRect WXUNUSED(cell), - wxDataViewListModel *WXUNUSED(model), - unsigned int WXUNUSED(col), - unsigned int WXUNUSED(row) ) - { return false; } - virtual bool RightClick( wxPoint WXUNUSED(cursor), - wxRect WXUNUSED(cell), - wxDataViewListModel *WXUNUSED(model), - unsigned int WXUNUSED(col), - unsigned int WXUNUSED(row) ) - { return false; } - virtual bool StartDrag( wxPoint WXUNUSED(cursor), - wxRect WXUNUSED(cell), - wxDataViewListModel *WXUNUSED(model), - unsigned int WXUNUSED(col), - unsigned int WXUNUSED(row) ) - { return false; } - - // Create DC on request - virtual wxDC *GetDC(); - -private: - wxDC *m_dc; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewCustomRenderer -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewCustomRenderer: public wxDataViewRenderer -{ -public: - wxDataViewCustomRenderer( const wxString &varianttype = wxT("string"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewTextRenderer -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewTextRenderer: public wxDataViewCustomRenderer -{ -public: - wxDataViewTextRenderer( const wxString &varianttype = wxT("string"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); - - bool SetValue( const wxVariant &value ); - bool GetValue( wxVariant &value ); - - bool Render( wxRect cell, wxDC *dc, int state ); - wxSize GetSize(); - -private: - wxString m_text; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewTextRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewBitmapRenderer -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewBitmapRenderer: public wxDataViewCustomRenderer -{ -public: - wxDataViewBitmapRenderer( const wxString &varianttype = wxT("wxBitmap"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); - - bool SetValue( const wxVariant &value ); - bool GetValue( wxVariant &value ); - - bool Render( wxRect cell, wxDC *dc, int state ); - wxSize GetSize(); - -private: - wxIcon m_icon; - wxBitmap m_bitmap; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewBitmapRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewToggleRenderer -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewToggleRenderer: public wxDataViewCustomRenderer -{ -public: - wxDataViewToggleRenderer( const wxString &varianttype = wxT("bool"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); - - bool SetValue( const wxVariant &value ); - bool GetValue( wxVariant &value ); - - bool Render( wxRect cell, wxDC *dc, int state ); - bool Activate( wxRect cell, wxDataViewListModel *model, unsigned int col, unsigned int row ); - wxSize GetSize(); - -private: - bool m_toggle; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewToggleRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewProgressRenderer -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewProgressRenderer: public wxDataViewCustomRenderer -{ -public: - wxDataViewProgressRenderer( const wxString &label = wxEmptyString, - const wxString &varianttype = wxT("long"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT ); - virtual ~wxDataViewProgressRenderer(); - - bool SetValue( const wxVariant &value ); - - virtual bool Render( wxRect cell, wxDC *dc, int state ); - virtual wxSize GetSize(); - -private: - wxString m_label; - int m_value; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewProgressRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewDateRenderer -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewDateRenderer: public wxDataViewCustomRenderer -{ -public: - wxDataViewDateRenderer( const wxString &varianttype = wxT("datetime"), - wxDataViewCellMode mode = wxDATAVIEW_CELL_ACTIVATABLE ); - - bool SetValue( const wxVariant &value ); - - virtual bool Render( wxRect cell, wxDC *dc, int state ); - virtual wxSize GetSize(); - virtual bool Activate( wxRect cell, - wxDataViewListModel *model, unsigned int col, unsigned int row ); - -private: - wxDateTime m_date; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewDateRenderer) -}; - -// --------------------------------------------------------- -// wxDataViewColumn -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewColumn: public wxDataViewColumnBase -{ -public: - wxDataViewColumn( const wxString &title, wxDataViewRenderer *renderer, unsigned int model_column, - int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE ); - wxDataViewColumn( const wxBitmap &bitmap, wxDataViewRenderer *renderer, unsigned int model_column, - int width = 80, int flags = wxDATAVIEW_COL_RESIZABLE ); - virtual ~wxDataViewColumn(); - - virtual void SetTitle( const wxString &title ); - virtual void SetBitmap( const wxBitmap &bitmap ); - - virtual void SetAlignment( wxAlignment align ); - - virtual void SetSortable( bool sortable ); - virtual bool GetSortable(); - virtual void SetSortOrder( bool ascending ); - virtual bool IsSortOrderAscending(); - - virtual int GetWidth(); - -private: - int m_width; - int m_fixedWidth; - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn) -}; - -// --------------------------------------------------------- -// wxDataViewCtrl -// --------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDataViewCtrl: public wxDataViewCtrlBase, - public wxScrollHelperNative -{ -public: - wxDataViewCtrl() : wxScrollHelperNative(this) - { - Init(); - } - - wxDataViewCtrl( wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator ) - : wxScrollHelperNative(this) - { - Create(parent, id, pos, size, style, validator ); - } - - virtual ~wxDataViewCtrl(); - - void Init(); - - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator ); - - virtual bool AssociateModel( wxDataViewListModel *model ); - virtual bool AppendColumn( wxDataViewColumn *col ); - - virtual void SetSelection( int row ); // -1 for unselect - virtual void SetSelectionRange( unsigned int from, unsigned int to ); - virtual void SetSelections( const wxArrayInt& aSelections); - virtual void Unselect( unsigned int row ); - - virtual bool IsSelected( unsigned int row ) const; - virtual int GetSelection() const; - virtual int GetSelections(wxArrayInt& aSelections) const; - -private: - friend class wxDataViewMainWindow; - friend class wxDataViewHeaderWindow; - wxDataViewListModelNotifier *m_notifier; - wxDataViewMainWindow *m_clientArea; - wxDataViewHeaderWindow *m_headerArea; - -private: - void OnSize( wxSizeEvent &event ); - - // we need to return a special WM_GETDLGCODE value to process just the - // arrows but let the other navigation characters through -#ifdef __WXMSW__ - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); -#endif // __WXMSW__ - - WX_FORWARD_TO_SCROLL_HELPER() - -private: - DECLARE_DYNAMIC_CLASS(wxDataViewCtrl) - DECLARE_NO_COPY_CLASS(wxDataViewCtrl) - DECLARE_EVENT_TABLE() -}; - - -#endif // __GENERICDATAVIEWCTRLH__ diff --git a/desmume/src/windows/wx/include/wx/generic/datectrl.h b/desmume/src/windows/wx/include/wx/generic/datectrl.h deleted file mode 100644 index bb3f01efc..000000000 --- a/desmume/src/windows/wx/include/wx/generic/datectrl.h +++ /dev/null @@ -1,91 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: generic/datectrl.h -// Purpose: generic wxDatePickerCtrl implementation -// Author: Andreas Pflug -// Modified by: -// Created: 2005-01-19 -// RCS-ID: $Id: datectrl.h 42539 2006-10-27 18:02:21Z RR $ -// Copyright: (c) 2005 Andreas Pflug -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_DATECTRL_H_ -#define _WX_GENERIC_DATECTRL_H_ - -class WXDLLIMPEXP_ADV wxCalendarDateAttr; -class WXDLLIMPEXP_ADV wxCalendarCtrl; -class WXDLLIMPEXP_ADV wxCalendarEvent; -class WXDLLIMPEXP_ADV wxComboCtrl; -class WXDLLIMPEXP_ADV wxCalendarComboPopup; - -class WXDLLIMPEXP_ADV wxDatePickerCtrlGeneric : public wxDatePickerCtrlBase -{ -public: - // creating the control - wxDatePickerCtrlGeneric() { Init(); } - virtual ~wxDatePickerCtrlGeneric(); - wxDatePickerCtrlGeneric(wxWindow *parent, - wxWindowID id, - const wxDateTime& date = wxDefaultDateTime, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDP_DEFAULT | wxDP_SHOWCENTURY, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxDatePickerCtrlNameStr) - { - 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 = wxDP_DEFAULT | wxDP_SHOWCENTURY, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxDatePickerCtrlNameStr); - - // wxDatePickerCtrl methods - void SetValue(const wxDateTime& date); - wxDateTime GetValue() const; - - bool GetRange(wxDateTime *dt1, wxDateTime *dt2) const; - void SetRange(const wxDateTime &dt1, const wxDateTime &dt2); - - bool SetDateRange(const wxDateTime& lowerdate = wxDefaultDateTime, - const wxDateTime& upperdate = wxDefaultDateTime); - - // extra methods available only in this (generic) implementation - bool SetFormat(const wxChar *fmt); - wxCalendarCtrl *GetCalendar() const { return m_cal; } - - - // implementation only from now on - // ------------------------------- - - // overridden base class methods - virtual bool Destroy(); - -protected: - virtual wxSize DoGetBestSize() const; - -private: - void Init(); - - void OnText(wxCommandEvent &event); - void OnSize(wxSizeEvent& event); - void OnFocus(wxFocusEvent& event); - - wxCalendarCtrl *m_cal; - wxComboCtrl* m_combo; - wxCalendarComboPopup* m_popup; - - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxDatePickerCtrlGeneric) -}; - -#endif // _WX_GENERIC_DATECTRL_H_ - diff --git a/desmume/src/windows/wx/include/wx/generic/dcpsg.h b/desmume/src/windows/wx/include/wx/generic/dcpsg.h deleted file mode 100644 index 5477bb961..000000000 --- a/desmume/src/windows/wx/include/wx/generic/dcpsg.h +++ /dev/null @@ -1,154 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/dcps.h -// Purpose: wxPostScriptDC class -// Author: Julian Smart and others -// Modified by: -// RCS-ID: $Id: dcpsg.h 41751 2006-10-08 21:56:55Z VZ $ -// Copyright: (c) Julian Smart and Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DCPSG_H_ -#define _WX_DCPSG_H_ - -#include "wx/defs.h" - -#if wxUSE_PRINTING_ARCHITECTURE - -#if wxUSE_POSTSCRIPT - -#include "wx/dc.h" -#include "wx/dialog.h" -#include "wx/module.h" -#include "wx/cmndata.h" - -extern WXDLLIMPEXP_DATA_CORE(int) wxPageNumber; - -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- - -class wxPostScriptDC; - -//----------------------------------------------------------------------------- -// wxPostScriptDC -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxPostScriptDC: public wxDC -{ -public: - wxPostScriptDC(); - - // Recommended constructor - wxPostScriptDC(const wxPrintData& printData); - - // Recommended destructor :-) - virtual ~wxPostScriptDC(); - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const; - - bool CanDrawBitmap() const { return true; } - - void Clear(); - void SetFont( const wxFont& font ); - void SetPen( const wxPen& pen ); - void SetBrush( const wxBrush& brush ); - void SetLogicalFunction( int function ); - void SetBackground( const wxBrush& brush ); - - void DestroyClippingRegion(); - - bool StartDoc(const wxString& message); - void EndDoc(); - void StartPage(); - void EndPage(); - - wxCoord GetCharHeight() const; - wxCoord GetCharWidth() const; - bool CanGetTextExtent() const { return true; } - - // Resolution in pixels per logical inch - wxSize GetPPI() const; - - void SetAxisOrientation( bool xLeftRight, bool yBottomUp ); - void SetDeviceOrigin( wxCoord x, wxCoord y ); - - void SetBackgroundMode(int WXUNUSED(mode)) { } - void SetPalette(const wxPalette& WXUNUSED(palette)) { } - - wxPrintData& GetPrintData() { return m_printData; } - void SetPrintData(const wxPrintData& data) { m_printData = data; } - - virtual int GetDepth() const { return 24; } - - static void SetResolution(int ppi); - static int GetResolution(); - - void PsPrintf( const wxChar* fmt, ... ); - void PsPrint( const char* psdata ); - void PsPrint( int ch ); - -#if wxUSE_UNICODE - void PsPrint( const wxChar* psdata ) { PsPrint( wxConvUTF8.cWX2MB( psdata ) ); } -#endif - -private: - static float ms_PSScaleFactor; - -protected: - bool DoFloodFill(wxCoord x1, wxCoord y1, const wxColour &col, int style = wxFLOOD_SURFACE); - bool DoGetPixel(wxCoord x1, wxCoord y1, wxColour *col) const; - void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); - void DoCrossHair(wxCoord x, wxCoord y) ; - void DoDrawArc(wxCoord x1,wxCoord y1,wxCoord x2,wxCoord y2,wxCoord xc,wxCoord yc); - void DoDrawEllipticArc(wxCoord x,wxCoord y,wxCoord w,wxCoord h,double sa,double ea); - void DoDrawPoint(wxCoord x, wxCoord y); - void DoDrawLines(int n, wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0); - void DoDrawPolygon(int n, wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0, int fillStyle = wxODDEVEN_RULE); - void DoDrawPolyPolygon(int n, int count[], wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0, int fillStyle = wxODDEVEN_RULE); - void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - void DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height, double radius = 20); - void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); -#if wxUSE_SPLINES - void DoDrawSpline(wxList *points); -#endif // wxUSE_SPLINES - bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, - wxDC *source, wxCoord xsrc, wxCoord ysrc, int rop = wxCOPY, bool useMask = false, - wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord); - void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y); - void DoDrawBitmap(const wxBitmap& bitmap, wxCoord x, wxCoord y, bool useMask = false); - void DoDrawText(const wxString& text, wxCoord x, wxCoord y); - void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y, double angle); - void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - void DoSetClippingRegionAsRegion( const wxRegion &WXUNUSED(clip)) { } - void DoGetTextExtent(const wxString& string, wxCoord *x, wxCoord *y, - wxCoord *descent = NULL, - wxCoord *externalLeading = NULL, - wxFont *theFont = NULL) const; - void DoGetSize(int* width, int* height) const; - void DoGetSizeMM(int *width, int *height) const; - - FILE* m_pstream; // PostScript output stream - wxString m_title; - unsigned char m_currentRed; - unsigned char m_currentGreen; - unsigned char m_currentBlue; - int m_pageNumber; - bool m_clipping; - double m_underlinePosition; - double m_underlineThickness; - wxPrintData m_printData; - -private: - DECLARE_DYNAMIC_CLASS(wxPostScriptDC) -}; - -#endif - // wxUSE_POSTSCRIPT - -#endif - // wxUSE_PRINTING_ARCHITECTURE - -#endif - // _WX_DCPSG_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/dirctrlg.h b/desmume/src/windows/wx/include/wx/generic/dirctrlg.h deleted file mode 100644 index 190850ce9..000000000 --- a/desmume/src/windows/wx/include/wx/generic/dirctrlg.h +++ /dev/null @@ -1,295 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: dirctrlg.h -// Purpose: wxGenericDirCtrl class -// Builds on wxDirCtrl class written by Robert Roebling for the -// wxFile application, modified by Harm van der Heijden. -// Further modified for Windows. -// Author: Robert Roebling, Harm van der Heijden, Julian Smart et al -// Modified by: -// Created: 21/3/2000 -// RCS-ID: $Id: dirctrlg.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Robert Roebling, Harm van der Heijden, Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DIRCTRL_H_ -#define _WX_DIRCTRL_H_ - -#if wxUSE_DIRDLG || wxUSE_FILEDLG - #include "wx/imaglist.h" -#endif - -#if wxUSE_DIRDLG - -#include "wx/treectrl.h" -#include "wx/dialog.h" -#include "wx/dirdlg.h" -#include "wx/choice.h" - -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxTextCtrl; -class WXDLLIMPEXP_FWD_CORE wxImageList; -class WXDLLIMPEXP_FWD_BASE wxHashTable; - -//----------------------------------------------------------------------------- -// Extra styles for wxGenericDirCtrl -//----------------------------------------------------------------------------- - -enum -{ - // Only allow directory viewing/selection, no files - wxDIRCTRL_DIR_ONLY = 0x0010, - // When setting the default path, select the first file in the directory - wxDIRCTRL_SELECT_FIRST = 0x0020, - // Show the filter list - wxDIRCTRL_SHOW_FILTERS = 0x0040, - // Use 3D borders on internal controls - wxDIRCTRL_3D_INTERNAL = 0x0080, - // Editable labels - wxDIRCTRL_EDIT_LABELS = 0x0100 -}; - -//----------------------------------------------------------------------------- -// wxDirItemData -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxDirItemData : public wxTreeItemData -{ -public: - wxDirItemData(const wxString& path, const wxString& name, bool isDir); - virtual ~wxDirItemData(){} - void SetNewDirName(const wxString& path); - - bool HasSubDirs() const; - bool HasFiles(const wxString& spec = wxEmptyString) const; - - wxString m_path, m_name; - bool m_isHidden; - bool m_isExpanded; - bool m_isDir; -}; - -//----------------------------------------------------------------------------- -// wxDirCtrl -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxDirFilterListCtrl; - -class WXDLLEXPORT wxGenericDirCtrl: public wxControl -{ -public: - wxGenericDirCtrl(); - wxGenericDirCtrl(wxWindow *parent, const wxWindowID id = wxID_ANY, - const wxString &dir = wxDirDialogDefaultFolderStr, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDIRCTRL_3D_INTERNAL|wxSUNKEN_BORDER, - const wxString& filter = wxEmptyString, - int defaultFilter = 0, - const wxString& name = wxTreeCtrlNameStr ) - { - Init(); - Create(parent, id, dir, pos, size, style, filter, defaultFilter, name); - } - - bool Create(wxWindow *parent, const wxWindowID id = wxID_ANY, - const wxString &dir = wxDirDialogDefaultFolderStr, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDIRCTRL_3D_INTERNAL|wxSUNKEN_BORDER, - const wxString& filter = wxEmptyString, - int defaultFilter = 0, - const wxString& name = wxTreeCtrlNameStr ); - - virtual void Init(); - - virtual ~wxGenericDirCtrl(); - - void OnExpandItem(wxTreeEvent &event ); - void OnCollapseItem(wxTreeEvent &event ); - void OnBeginEditItem(wxTreeEvent &event ); - void OnEndEditItem(wxTreeEvent &event ); - void OnSize(wxSizeEvent &event ); - - // Try to expand as much of the given path as possible. - virtual bool ExpandPath(const wxString& path); - // collapse the path - virtual bool CollapsePath(const wxString& path); - - // Accessors - - virtual inline wxString GetDefaultPath() const { return m_defaultPath; } - virtual void SetDefaultPath(const wxString& path) { m_defaultPath = path; } - - // Get dir or filename - virtual wxString GetPath() const; - - // Get selected filename path only (else empty string). - // I.e. don't count a directory as a selection - virtual wxString GetFilePath() const; - virtual void SetPath(const wxString& path); - - virtual void ShowHidden( bool show ); - virtual bool GetShowHidden() { return m_showHidden; } - - virtual wxString GetFilter() const { return m_filter; } - virtual void SetFilter(const wxString& filter); - - virtual int GetFilterIndex() const { return m_currentFilter; } - virtual void SetFilterIndex(int n); - - virtual wxTreeItemId GetRootId() { return m_rootId; } - - virtual wxTreeCtrl* GetTreeCtrl() const { return m_treeCtrl; } - virtual wxDirFilterListCtrl* GetFilterListCtrl() const { return m_filterListCtrl; } - - // Helper - virtual void SetupSections(); - -#if WXWIN_COMPATIBILITY_2_4 - // Parse the filter into an array of filters and an array of descriptions - virtual int ParseFilter(const wxString& filterStr, wxArrayString& filters, wxArrayString& descriptions); -#endif // WXWIN_COMPATIBILITY_2_4 - - // Find the child that matches the first part of 'path'. - // E.g. if a child path is "/usr" and 'path' is "/usr/include" - // then the child for /usr is returned. - // If the path string has been used (we're at the leaf), done is set to true - virtual wxTreeItemId FindChild(wxTreeItemId parentId, const wxString& path, bool& done); - - // Resize the components of the control - virtual void DoResize(); - - // Collapse & expand the tree, thus re-creating it from scratch: - virtual void ReCreateTree(); - - // Collapse the entire tree - virtual void CollapseTree(); - -protected: - virtual void ExpandRoot(); - virtual void ExpandDir(wxTreeItemId parentId); - virtual void CollapseDir(wxTreeItemId parentId); - virtual const wxTreeItemId AddSection(const wxString& path, const wxString& name, int imageId = 0); - virtual wxTreeItemId AppendItem (const wxTreeItemId & parent, - const wxString & text, - int image = -1, int selectedImage = -1, - wxTreeItemData * data = NULL); - //void FindChildFiles(wxTreeItemId id, int dirFlags, wxArrayString& filenames); - virtual wxTreeCtrl* CreateTreeCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long treeStyle); - - // Extract description and actual filter from overall filter string - bool ExtractWildcard(const wxString& filterStr, int n, wxString& filter, wxString& description); - -private: - bool m_showHidden; - wxTreeItemId m_rootId; - wxString m_defaultPath; // Starting path - long m_styleEx; // Extended style - wxString m_filter; // Wildcards in same format as per wxFileDialog - int m_currentFilter; // The current filter index - wxString m_currentFilterStr; // Current filter string - wxTreeCtrl* m_treeCtrl; - wxDirFilterListCtrl* m_filterListCtrl; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxGenericDirCtrl) - DECLARE_NO_COPY_CLASS(wxGenericDirCtrl) -}; - -//----------------------------------------------------------------------------- -// wxDirFilterListCtrl -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxDirFilterListCtrl: public wxChoice -{ -public: - wxDirFilterListCtrl() { Init(); } - wxDirFilterListCtrl(wxGenericDirCtrl* parent, const wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0) - { - Init(); - Create(parent, id, pos, size, style); - } - - bool Create(wxGenericDirCtrl* parent, const wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0); - - void Init(); - - virtual ~wxDirFilterListCtrl() {} - - //// Operations - void FillFilterList(const wxString& filter, int defaultFilter); - - //// Events - void OnSelFilter(wxCommandEvent& event); - -protected: - wxGenericDirCtrl* m_dirCtrl; - - DECLARE_EVENT_TABLE() - DECLARE_CLASS(wxDirFilterListCtrl) - DECLARE_NO_COPY_CLASS(wxDirFilterListCtrl) -}; - -#if !defined(__WXMSW__) && !defined(__WXMAC__) && !defined(__WXPM__) - #define wxDirCtrl wxGenericDirCtrl -#endif - -// Symbols for accessing individual controls -#define wxID_TREECTRL 7000 -#define wxID_FILTERLISTCTRL 7001 - -#endif // wxUSE_DIRDLG - -//------------------------------------------------------------------------- -// wxFileIconsTable - use wxTheFileIconsTable which is created as necessary -//------------------------------------------------------------------------- - -#if wxUSE_DIRDLG || wxUSE_FILEDLG - -class WXDLLEXPORT wxFileIconsTable -{ -public: - wxFileIconsTable(); - ~wxFileIconsTable(); - - enum iconId_Type - { - folder, - folder_open, - computer, - drive, - cdrom, - floppy, - removeable, - file, - executable - }; - - int GetIconID(const wxString& extension, const wxString& mime = wxEmptyString); - wxImageList *GetSmallImageList(); - -protected: - void Create(); // create on first use - - wxImageList *m_smallImageList; - wxHashTable *m_HashTable; -}; - -// The global fileicons table -extern WXDLLEXPORT_DATA(wxFileIconsTable *) wxTheFileIconsTable; - -#endif // wxUSE_DIRDLG || wxUSE_FILEDLG - -#endif - // _WX_DIRCTRLG_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/dirdlgg.h b/desmume/src/windows/wx/include/wx/generic/dirdlgg.h deleted file mode 100644 index 73b61b529..000000000 --- a/desmume/src/windows/wx/include/wx/generic/dirdlgg.h +++ /dev/null @@ -1,89 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/dirdlgg.h -// Purpose: wxGenericDirCtrl class -// Builds on wxDirCtrl class written by Robert Roebling for the -// wxFile application, modified by Harm van der Heijden. -// Further modified for Windows. -// Author: Robert Roebling, Harm van der Heijden, Julian Smart et al -// Modified by: -// Created: 21/3/2000 -// RCS-ID: $Id: dirdlgg.h 39402 2006-05-28 23:32:12Z VZ $ -// Copyright: (c) Robert Roebling, Harm van der Heijden, Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DIRDLGG_H_ -#define _WX_DIRDLGG_H_ - -class WXDLLEXPORT wxGenericDirCtrl; -class WXDLLEXPORT wxTextCtrl; -class WXDLLEXPORT wxTreeEvent; - -// we may be included directly as well as from wx/dirdlg.h (FIXME) -extern WXDLLEXPORT_DATA(const wxChar) wxDirDialogNameStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxDirSelectorPromptStr[]; - -#ifndef wxDD_DEFAULT_STYLE -#ifdef __WXWINCE__ - #define wxDD_DEFAULT_STYLE wxDEFAULT_DIALOG_STYLE -#else - #define wxDD_DEFAULT_STYLE (wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) -#endif -#endif - -#include "wx/dialog.h" - -//----------------------------------------------------------------------------- -// wxGenericDirDialog -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxGenericDirDialog : public wxDirDialogBase -{ -public: - wxGenericDirDialog() : wxDirDialogBase() { } - - wxGenericDirDialog(wxWindow* parent, - const wxString& title = wxDirSelectorPromptStr, - const wxString& defaultPath = wxEmptyString, - long style = wxDD_DEFAULT_STYLE, - const wxPoint& pos = wxDefaultPosition, - const wxSize& sz = wxDefaultSize,//Size(450, 550), - const wxString& name = wxDirDialogNameStr); - - bool Create(wxWindow* parent, - const wxString& title = wxDirSelectorPromptStr, - const wxString& defaultPath = wxEmptyString, - long style = wxDD_DEFAULT_STYLE, - const wxPoint& pos = wxDefaultPosition, - const wxSize& sz = wxDefaultSize,//Size(450, 550), - const wxString& name = wxDirDialogNameStr); - - //// Accessors - void SetPath(const wxString& path); - wxString GetPath() const; - - //// Overrides - virtual int ShowModal(); - virtual void EndModal(int retCode); - - // this one is specific to wxGenericDirDialog - wxTextCtrl* GetInputCtrl() const { return m_input; } - -protected: - //// Event handlers - void OnCloseWindow(wxCloseEvent& event); - void OnOK(wxCommandEvent& event); - void OnTreeSelected(wxTreeEvent &event); - void OnTreeKeyDown(wxTreeEvent &event); - void OnNew(wxCommandEvent& event); - void OnGoHome(wxCommandEvent& event); - void OnShowHidden(wxCommandEvent& event); - - wxGenericDirCtrl* m_dirCtrl; - wxTextCtrl* m_input; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxGenericDirDialog) -}; - -#endif // _WX_DIRDLGG_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/dragimgg.h b/desmume/src/windows/wx/include/wx/generic/dragimgg.h deleted file mode 100644 index f5cdd447f..000000000 --- a/desmume/src/windows/wx/include/wx/generic/dragimgg.h +++ /dev/null @@ -1,271 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/dragimgg.h -// Purpose: wxDragImage class: a kind of a cursor, that can cope -// with more sophisticated images -// Author: Julian Smart -// Modified by: -// Created: 29/2/2000 -// RCS-ID: $Id: dragimgg.h 42397 2006-10-25 12:12:56Z VS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DRAGIMGG_H_ -#define _WX_DRAGIMGG_H_ - -#include "wx/bitmap.h" -#include "wx/icon.h" -#include "wx/cursor.h" -#include "wx/treectrl.h" -#include "wx/listctrl.h" -#include "wx/log.h" -#include "wx/overlay.h" - -/* - To use this class, create a wxDragImage when you start dragging, for example: - - void MyTreeCtrl::OnBeginDrag(wxTreeEvent& event) - { -#ifdef __WXMSW__ - ::UpdateWindow((HWND) GetHWND()); // We need to implement this in wxWidgets -#endif - - CaptureMouse(); - - m_dragImage = new wxDragImage(* this, itemId); - m_dragImage->BeginDrag(wxPoint(0, 0), this); - m_dragImage->Move(pt, this); - m_dragImage->Show(this); - ... - } - - In your OnMouseMove function, hide the image, do any display updating required, - then move and show the image again: - - void MyTreeCtrl::OnMouseMove(wxMouseEvent& event) - { - if (m_dragMode == MY_TREE_DRAG_NONE) - { - event.Skip(); - return; - } - - // Prevent screen corruption by hiding the image - if (m_dragImage) - m_dragImage->Hide(this); - - // Do some updating of the window, such as highlighting the drop target - ... - -#ifdef __WXMSW__ - if (updateWindow) - ::UpdateWindow((HWND) GetHWND()); -#endif - - // Move and show the image again - m_dragImage->Move(event.GetPosition(), this); - m_dragImage->Show(this); - } - - Eventually we end the drag and delete the drag image. - - void MyTreeCtrl::OnLeftUp(wxMouseEvent& event) - { - ... - - // End the drag and delete the drag image - if (m_dragImage) - { - m_dragImage->EndDrag(this); - delete m_dragImage; - m_dragImage = NULL; - } - ReleaseMouse(); - } -*/ - -/* - * wxGenericDragImage - */ - -class WXDLLEXPORT wxGenericDragImage: public wxObject -{ -public: - - // Ctors & dtor - //////////////////////////////////////////////////////////////////////////// - - wxGenericDragImage(const wxCursor& cursor = wxNullCursor) - { - Init(); - Create(cursor); - } - - wxGenericDragImage(const wxBitmap& image, const wxCursor& cursor = wxNullCursor) - { - Init(); - - Create(image, cursor); - } - - wxGenericDragImage(const wxIcon& image, const wxCursor& cursor = wxNullCursor) - { - Init(); - - Create(image, cursor); - } - - wxGenericDragImage(const wxString& str, const wxCursor& cursor = wxNullCursor) - { - Init(); - - Create(str, cursor); - } - -#if WXWIN_COMPATIBILITY_2_6 - // don't use in new code, use versions without hot spot parameter - wxDEPRECATED( wxGenericDragImage(const wxCursor& cursor, const wxPoint& cursorHotspot) ); - wxDEPRECATED( wxGenericDragImage(const wxBitmap& image, const wxCursor& cursor, const wxPoint& cursorHotspot) ); - wxDEPRECATED( wxGenericDragImage(const wxIcon& image, const wxCursor& cursor, const wxPoint& cursorHotspot) ); - wxDEPRECATED( wxGenericDragImage(const wxString& str, const wxCursor& cursor, const wxPoint& cursorHotspot) ); - wxDEPRECATED( bool Create(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_6 - -#if wxUSE_TREECTRL - wxGenericDragImage(const wxTreeCtrl& treeCtrl, wxTreeItemId& id) - { - Init(); - - Create(treeCtrl, id); - } -#endif - -#if wxUSE_LISTCTRL - wxGenericDragImage(const wxListCtrl& listCtrl, long id) - { - Init(); - - Create(listCtrl, id); - } -#endif - - virtual ~wxGenericDragImage(); - - // Attributes - //////////////////////////////////////////////////////////////////////////// - - // For efficiency, tell wxGenericDragImage to use a bitmap that's already - // created (e.g. from last drag) - void SetBackingBitmap(wxBitmap* bitmap) { -#ifndef wxHAS_NATIVE_OVERLAY - m_pBackingBitmap = bitmap; -#endif - } - - // Operations - //////////////////////////////////////////////////////////////////////////// - - // Create a drag image with a virtual image (need to override DoDrawImage, GetImageRect) - bool Create(const wxCursor& cursor = wxNullCursor); - - // Create a drag image from a bitmap and optional cursor - bool Create(const wxBitmap& image, const wxCursor& cursor = wxNullCursor); - - // Create a drag image from an icon and optional cursor - bool Create(const wxIcon& image, const wxCursor& cursor = wxNullCursor); - - // Create a drag image from a string and optional cursor - bool Create(const wxString& str, const wxCursor& cursor = wxNullCursor); - -#if wxUSE_TREECTRL - // Create a drag image for the given tree control item - bool Create(const wxTreeCtrl& treeCtrl, wxTreeItemId& id); -#endif - -#if wxUSE_LISTCTRL - // Create a drag image for the given list control item - bool Create(const wxListCtrl& listCtrl, long id); -#endif - - // Begin drag. hotspot is the location of the drag position relative to the upper-left - // corner of the image. - bool BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullScreen = false, wxRect* rect = (wxRect*) NULL); - - // Begin drag. hotspot is the location of the drag position relative to the upper-left - // corner of the image. This is full screen only. fullScreenRect gives the - // position of the window on the screen, to restrict the drag to. - bool BeginDrag(const wxPoint& hotspot, wxWindow* window, wxWindow* fullScreenRect); - - // End drag - bool EndDrag(); - - // Move the image: call from OnMouseMove. Pt is in window client coordinates if window - // is non-NULL, or in screen coordinates if NULL. - bool Move(const wxPoint& pt); - - // Show the image - bool Show(); - - // Hide the image - bool Hide(); - - // Implementation - //////////////////////////////////////////////////////////////////////////// - - void Init(); - - // Override this if you are using a virtual image (drawing your own image) - virtual wxRect GetImageRect(const wxPoint& pos) const; - - // Override this if you are using a virtual image (drawing your own image) - virtual bool DoDrawImage(wxDC& dc, const wxPoint& pos) const; - - // Override this if you wish to draw the window contents to the backing bitmap - // yourself. This can be desirable if you wish to avoid flicker by not having to - // redraw the window itself before dragging in order to be graphic-minus-dragged-objects. - // Instead, paint the drag image's backing bitmap to be correct, and leave the window - // to be updated only when dragging the objects away (thus giving a smoother appearance). - virtual bool UpdateBackingFromWindow(wxDC& windowDC, wxMemoryDC& destDC, - const wxRect& sourceRect, const wxRect& destRect) const; - - // Erase and redraw simultaneously if possible - virtual bool RedrawImage(const wxPoint& oldPos, const wxPoint& newPos, bool eraseOld, bool drawNew); - -protected: - wxBitmap m_bitmap; - wxIcon m_icon; - wxCursor m_cursor; - wxCursor m_oldCursor; -// wxPoint m_hotspot; - wxPoint m_offset; // The hostpot value passed to BeginDrag - wxPoint m_position; - bool m_isDirty; - bool m_isShown; - wxWindow* m_window; - wxDC* m_windowDC; - -#ifdef wxHAS_NATIVE_OVERLAY - wxOverlay m_overlay; - wxDCOverlay* m_dcOverlay; -#else - // Stores the window contents while we're dragging the image around - wxBitmap m_backingBitmap; - wxBitmap* m_pBackingBitmap; // Pointer to existing backing bitmap - // (pass to wxGenericDragImage as an efficiency measure) - // A temporary bitmap for repairing/redrawing - wxBitmap m_repairBitmap; -#endif // !wxHAS_NATIVE_OVERLAY - - wxRect m_boundingRect; - bool m_fullScreen; - -private: - DECLARE_DYNAMIC_CLASS(wxGenericDragImage) - DECLARE_NO_COPY_CLASS(wxGenericDragImage) -}; - -#endif - // _WX_DRAGIMGG_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/fdrepdlg.h b/desmume/src/windows/wx/include/wx/generic/fdrepdlg.h deleted file mode 100644 index c28732213..000000000 --- a/desmume/src/windows/wx/include/wx/generic/fdrepdlg.h +++ /dev/null @@ -1,71 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/fdrepdlg.h -// Purpose: wxGenericFindReplaceDialog class -// Author: Markus Greither -// Modified by: -// Created: 25/05/2001 -// RCS-ID: -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_FDREPDLG_H_ -#define _WX_GENERIC_FDREPDLG_H_ - -class WXDLLEXPORT wxCheckBox; -class WXDLLEXPORT wxRadioBox; -class WXDLLEXPORT wxTextCtrl; - -// ---------------------------------------------------------------------------- -// wxGenericFindReplaceDialog: dialog for searching / replacing text -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxGenericFindReplaceDialog : public wxFindReplaceDialogBase -{ -public: - wxGenericFindReplaceDialog() { Init(); } - - wxGenericFindReplaceDialog(wxWindow *parent, - wxFindReplaceData *data, - const wxString& title, - int style = 0) - { - Init(); - - (void)Create(parent, data, title, style); - } - - bool Create(wxWindow *parent, - wxFindReplaceData *data, - const wxString& title, - int style = 0); - -protected: - void Init(); - - void SendEvent(const wxEventType& evtType); - - void OnFind(wxCommandEvent& event); - void OnReplace(wxCommandEvent& event); - void OnReplaceAll(wxCommandEvent& event); - void OnCancel(wxCommandEvent& event); - - void OnUpdateFindUI(wxUpdateUIEvent& event); - - void OnCloseWindow(wxCloseEvent& event); - - wxCheckBox *m_chkCase, - *m_chkWord; - - wxRadioBox *m_radioDir; - - wxTextCtrl *m_textFind, - *m_textRepl; - -private: - DECLARE_DYNAMIC_CLASS(wxGenericFindReplaceDialog) - - DECLARE_EVENT_TABLE() -}; - -#endif // _WX_GENERIC_FDREPDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/filedlgg.h b/desmume/src/windows/wx/include/wx/generic/filedlgg.h deleted file mode 100644 index 70da48c38..000000000 --- a/desmume/src/windows/wx/include/wx/generic/filedlgg.h +++ /dev/null @@ -1,307 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/filedlgg.h -// Purpose: wxGenericFileDialog -// Author: Robert Roebling -// Modified by: -// Created: 8/17/99 -// Copyright: (c) Robert Roebling -// RCS-ID: $Id: filedlgg.h 39631 2006-06-08 10:05:42Z RR $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FILEDLGG_H_ -#define _WX_FILEDLGG_H_ - -#include "wx/listctrl.h" -#include "wx/datetime.h" -#include "wx/filefn.h" -#include "wx/filedlg.h" - -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxBitmapButton; -class WXDLLEXPORT wxCheckBox; -class WXDLLEXPORT wxChoice; -class WXDLLEXPORT wxFileData; -class WXDLLEXPORT wxFileCtrl; -class WXDLLEXPORT wxGenericFileDialog; -class WXDLLEXPORT wxListEvent; -class WXDLLEXPORT wxListItem; -class WXDLLEXPORT wxStaticText; -class WXDLLEXPORT wxTextCtrl; - -//------------------------------------------------------------------------- -// wxGenericFileDialog -//------------------------------------------------------------------------- - -class WXDLLEXPORT wxGenericFileDialog: public wxFileDialogBase -{ -public: - wxGenericFileDialog() : wxFileDialogBase() { Init(); } - - wxGenericFileDialog(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, - bool bypassGenericImpl = false ); - - 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, - bool bypassGenericImpl = false ); - - virtual ~wxGenericFileDialog(); - - virtual void SetMessage(const wxString& message) { SetTitle(message); } - virtual void SetPath(const wxString& path); - virtual void SetFilterIndex(int filterIndex); - virtual void SetWildcard(const wxString& wildCard); - - // for multiple file selection - virtual void GetPaths(wxArrayString& paths) const; - virtual void GetFilenames(wxArrayString& files) const; - - // implementation only from now on - // ------------------------------- - - virtual int ShowModal(); - virtual bool Show( bool show = true ); - - void OnSelected( wxListEvent &event ); - void OnActivated( wxListEvent &event ); - void OnList( wxCommandEvent &event ); - void OnReport( wxCommandEvent &event ); - void OnUp( wxCommandEvent &event ); - void OnHome( wxCommandEvent &event ); - void OnListOk( wxCommandEvent &event ); - void OnNew( wxCommandEvent &event ); - void OnChoiceFilter( wxCommandEvent &event ); - void OnTextEnter( wxCommandEvent &event ); - void OnTextChange( wxCommandEvent &event ); - void OnCheck( wxCommandEvent &event ); - - virtual void HandleAction( const wxString &fn ); - - virtual void UpdateControls(); - -private: - // Don't use this implementation at all :-) - bool m_bypassGenericImpl; - -protected: - // use the filter with the given index - void DoSetFilterIndex(int filterindex); - - wxString m_filterExtension; - wxChoice *m_choice; - wxTextCtrl *m_text; - wxFileCtrl *m_list; - wxCheckBox *m_check; - wxStaticText *m_static; - wxBitmapButton *m_upDirButton; - wxBitmapButton *m_newDirButton; - -private: - void Init(); - DECLARE_DYNAMIC_CLASS(wxGenericFileDialog) - DECLARE_EVENT_TABLE() - - // these variables are preserved between wxGenericFileDialog calls - static long ms_lastViewStyle; // list or report? - static bool ms_lastShowHidden; // did we show hidden files? -}; - -#ifdef wxUSE_GENERIC_FILEDIALOG - -class WXDLLEXPORT wxFileDialog: public wxGenericFileDialog -{ -public: - wxFileDialog() {} - - wxFileDialog(wxWindow *parent, - const wxString& message = wxFileSelectorPromptStr, - const wxString& defaultDir = wxEmptyString, - const wxString& defaultFile = wxEmptyString, - const wxString& wildCard = wxFileSelectorDefaultWildcardStr, - long style = 0, - const wxPoint& pos = wxDefaultPosition) - :wxGenericFileDialog(parent, message, defaultDir, defaultFile, wildCard, style, pos) - { - } - -private: - DECLARE_DYNAMIC_CLASS(wxFileDialog) -}; - -#endif // wxUSE_GENERIC_FILEDIALOG - -//----------------------------------------------------------------------------- -// wxFileData - a class to hold the file info for the wxFileCtrl -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxFileData -{ -public: - enum fileType - { - is_file = 0x0000, - is_dir = 0x0001, - is_link = 0x0002, - is_exe = 0x0004, - is_drive = 0x0008 - }; - - wxFileData() { Init(); } - // Full copy constructor - wxFileData( const wxFileData& fileData ) { Copy(fileData); } - // Create a filedata from this information - wxFileData( const wxString &filePath, const wxString &fileName, - fileType type, int image_id ); - - // make a full copy of the other wxFileData - void Copy( const wxFileData &other ); - - // (re)read the extra data about the file from the system - void ReadData(); - - // get the name of the file, dir, drive - wxString GetFileName() const { return m_fileName; } - // get the full path + name of the file, dir, path - wxString GetFilePath() const { return m_filePath; } - // Set the path + name and name of the item - void SetNewName( const wxString &filePath, const wxString &fileName ); - - // Get the size of the file in bytes - wxFileOffset GetSize() const { return m_size; } - // Get the type of file, either file extension or , , - wxString GetFileType() const; - // get the last modification time - wxDateTime GetDateTime() const { return m_dateTime; } - // Get the time as a formatted string - wxString GetModificationTime() const; - // in UNIX get rwx for file, in MSW get attributes ARHS - wxString GetPermissions() const { return m_permissions; } - // Get the id of the image used in a wxImageList - int GetImageId() const { return m_image; } - - bool IsFile() const { return !IsDir() && !IsLink() && !IsDrive(); } - bool IsDir() const { return (m_type & is_dir ) != 0; } - bool IsLink() const { return (m_type & is_link ) != 0; } - bool IsExe() const { return (m_type & is_exe ) != 0; } - bool IsDrive() const { return (m_type & is_drive) != 0; } - - // Get/Set the type of file, file/dir/drive/link - int GetType() const { return m_type; } - - // the wxFileCtrl fields in report view - enum fileListFieldType - { - FileList_Name, - FileList_Size, - FileList_Type, - FileList_Time, -#if defined(__UNIX__) || defined(__WIN32__) - FileList_Perm, -#endif // defined(__UNIX__) || defined(__WIN32__) - FileList_Max - }; - - // Get the entry for report view of wxFileCtrl - wxString GetEntry( fileListFieldType num ) const; - - // Get a string representation of the file info - wxString GetHint() const; - // initialize a wxListItem attributes - void MakeItem( wxListItem &item ); - - // operators - wxFileData& operator = (const wxFileData& fd) { Copy(fd); return *this; } - -protected: - wxString m_fileName; - wxString m_filePath; - wxFileOffset m_size; - wxDateTime m_dateTime; - wxString m_permissions; - int m_type; - int m_image; - -private: - void Init(); -}; - -//----------------------------------------------------------------------------- -// wxFileCtrl -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxFileCtrl : public wxListCtrl -{ -public: - wxFileCtrl(); - wxFileCtrl( wxWindow *win, - wxWindowID id, - const wxString &wild, - bool showHidden, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxLC_LIST, - const wxValidator &validator = wxDefaultValidator, - const wxString &name = wxT("filelist") ); - virtual ~wxFileCtrl(); - - virtual void ChangeToListMode(); - virtual void ChangeToReportMode(); - virtual void ChangeToSmallIconMode(); - virtual void ShowHidden( bool show = true ); - bool GetShowHidden() const { return m_showHidden; } - - virtual long Add( wxFileData *fd, wxListItem &item ); - virtual void UpdateItem(const wxListItem &item); - virtual void UpdateFiles(); - virtual void MakeDir(); - virtual void GoToParentDir(); - virtual void GoToHomeDir(); - virtual void GoToDir( const wxString &dir ); - virtual void SetWild( const wxString &wild ); - wxString GetWild() const { return m_wild; } - wxString GetDir() const { return m_dirName; } - - void OnListDeleteItem( wxListEvent &event ); - void OnListDeleteAllItems( wxListEvent &event ); - void OnListEndLabelEdit( wxListEvent &event ); - void OnListColClick( wxListEvent &event ); - - virtual void SortItems(wxFileData::fileListFieldType field, bool foward); - bool GetSortDirection() const { return m_sort_foward; } - wxFileData::fileListFieldType GetSortField() const { return m_sort_field; } - -protected: - void FreeItemData(wxListItem& item); - void FreeAllItemsData(); - - wxString m_dirName; - bool m_showHidden; - wxString m_wild; - - bool m_sort_foward; - wxFileData::fileListFieldType m_sort_field; - -private: - DECLARE_DYNAMIC_CLASS(wxFileCtrl) - DECLARE_EVENT_TABLE() -}; - -#endif // _WX_FILEDLGG_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/filepickerg.h b/desmume/src/windows/wx/include/wx/generic/filepickerg.h deleted file mode 100644 index 502587bea..000000000 --- a/desmume/src/windows/wx/include/wx/generic/filepickerg.h +++ /dev/null @@ -1,213 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/filepickerg.h -// Purpose: wxGenericFileDirButton, wxGenericFileButton, wxGenericDirButton -// Author: Francesco Montorsi -// Modified by: -// Created: 14/4/2006 -// Copyright: (c) Francesco Montorsi -// RCS-ID: $Id: filepickerg.h 40100 2006-07-15 15:13:04Z VS $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FILEDIRPICKER_H_ -#define _WX_FILEDIRPICKER_H_ - -#include "wx/button.h" -#include "wx/filedlg.h" -#include "wx/dirdlg.h" - - -extern WXDLLEXPORT_DATA(const wxEventType) wxEVT_COMMAND_DIRPICKER_CHANGED; -extern WXDLLEXPORT_DATA(const wxEventType) wxEVT_COMMAND_FILEPICKER_CHANGED; - - -//----------------------------------------------------------------------------- -// wxGenericFileDirButton: a button which brings up a wx{File|Dir}Dialog -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxGenericFileDirButton : public wxButton, - public wxFileDirPickerWidgetBase -{ -public: - wxGenericFileDirButton() { } - wxGenericFileDirButton(wxWindow *parent, - wxWindowID id, - const wxString& label = wxFilePickerWidgetLabel, - const wxString& path = wxEmptyString, - const wxString &message = wxFileSelectorPromptStr, - const wxString &wildcard = wxFileSelectorDefaultWildcardStr, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxFilePickerWidgetNameStr) - { - Create(parent, id, label, path, message, wildcard, - pos, size, style, validator, name); - } - - virtual ~wxGenericFileDirButton() {} - - virtual wxControl *AsControl() { return this; } - -public: // overrideable - - virtual wxDialog *CreateDialog() = 0; - - virtual wxWindow *GetDialogParent() - { return GetParent(); } - - virtual wxEventType GetEventType() const = 0; - -public: - - bool Create(wxWindow *parent, wxWindowID id, - const wxString& label = wxFilePickerWidgetLabel, - const wxString& path = wxEmptyString, - const wxString &message = wxFileSelectorPromptStr, - const wxString &wildcard = wxFileSelectorDefaultWildcardStr, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxFilePickerWidgetNameStr); - - // event handler for the click - void OnButtonClick(wxCommandEvent &); - -protected: - wxString m_message, m_wildcard; -}; - - -//----------------------------------------------------------------------------- -// wxGenericFileButton: a button which brings up a wxFileDialog -//----------------------------------------------------------------------------- - -#define wxFILEBTN_DEFAULT_STYLE (wxFLP_OPEN) - -class WXDLLIMPEXP_CORE wxGenericFileButton : public wxGenericFileDirButton -{ -public: - wxGenericFileButton() {} - wxGenericFileButton(wxWindow *parent, - wxWindowID id, - const wxString& label = wxFilePickerWidgetLabel, - const wxString& path = wxEmptyString, - const wxString &message = wxFileSelectorPromptStr, - const wxString &wildcard = wxFileSelectorDefaultWildcardStr, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxFILEBTN_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxFilePickerWidgetNameStr) - { - Create(parent, id, label, path, message, wildcard, - pos, size, style, validator, name); - } - -public: // overrideable - - virtual long GetDialogStyle() const - { - long filedlgstyle = 0; - - if (this->HasFlag(wxFLP_OPEN)) - filedlgstyle |= wxFD_OPEN; - if (this->HasFlag(wxFLP_SAVE)) - filedlgstyle |= wxFD_SAVE; - if (this->HasFlag(wxFLP_OVERWRITE_PROMPT)) - filedlgstyle |= wxFD_OVERWRITE_PROMPT; - if (this->HasFlag(wxFLP_FILE_MUST_EXIST)) - filedlgstyle |= wxFD_FILE_MUST_EXIST; - if (this->HasFlag(wxFLP_CHANGE_DIR)) - filedlgstyle |= wxFD_CHANGE_DIR; - - 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; - } - - wxEventType GetEventType() const - { return wxEVT_COMMAND_FILEPICKER_CHANGED; } - -protected: - void UpdateDialogPath(wxDialog *p) - { wxStaticCast(p, wxFileDialog)->SetPath(m_path); } - void UpdatePathFromDialog(wxDialog *p) - { m_path = wxStaticCast(p, wxFileDialog)->GetPath(); } - -private: - DECLARE_DYNAMIC_CLASS(wxGenericFileButton) -}; - - -//----------------------------------------------------------------------------- -// wxGenericDirButton: a button which brings up a wxDirDialog -//----------------------------------------------------------------------------- - -#define wxDIRBTN_DEFAULT_STYLE 0 - -class WXDLLIMPEXP_CORE wxGenericDirButton : public wxGenericFileDirButton -{ -public: - wxGenericDirButton() {} - wxGenericDirButton(wxWindow *parent, - wxWindowID id, - const wxString& label = wxDirPickerWidgetLabel, - const wxString& path = wxEmptyString, - const wxString &message = wxDirSelectorPromptStr, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDIRBTN_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxDirPickerWidgetNameStr) - { - Create(parent, id, label, path, message, wxEmptyString, - pos, size, style, validator, name); - } - -public: // overrideable - - virtual long GetDialogStyle() const - { - long dirdlgstyle = wxDD_DEFAULT_STYLE; - - if (this->HasFlag(wxDIRP_DIR_MUST_EXIST)) - dirdlgstyle |= wxDD_DIR_MUST_EXIST; - if (this->HasFlag(wxDIRP_CHANGE_DIR)) - dirdlgstyle |= wxDD_CHANGE_DIR; - - return dirdlgstyle; - } - - virtual wxDialog *CreateDialog() - { - return new wxDirDialog(GetDialogParent(), m_message, m_path, - GetDialogStyle()); - } - - wxEventType GetEventType() const - { return wxEVT_COMMAND_DIRPICKER_CHANGED; } - -protected: - void UpdateDialogPath(wxDialog *p) - { wxStaticCast(p, wxDirDialog)->SetPath(m_path); } - void UpdatePathFromDialog(wxDialog *p) - { m_path = wxStaticCast(p, wxDirDialog)->GetPath(); } - -private: - DECLARE_DYNAMIC_CLASS(wxGenericDirButton) -}; - - -#endif // _WX_FILEDIRPICKER_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/fontdlgg.h b/desmume/src/windows/wx/include/wx/generic/fontdlgg.h deleted file mode 100644 index 6a4b80b29..000000000 --- a/desmume/src/windows/wx/include/wx/generic/fontdlgg.h +++ /dev/null @@ -1,120 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/fontdlgg.h -// Purpose: wxGenericFontDialog -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: fontdlgg.h 39286 2006-05-23 11:16:47Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_FONTDLGG_H -#define _WX_GENERIC_FONTDLGG_H - -#include "wx/defs.h" -#include "wx/gdicmn.h" -#include "wx/font.h" -#include "wx/dialog.h" -#include "wx/cmndata.h" - -#ifdef __WXWINCE__ -#define USE_SPINCTRL_FOR_POINT_SIZE 1 -class WXDLLEXPORT wxSpinEvent; -#else -#define USE_SPINCTRL_FOR_POINT_SIZE 0 -#endif - -/* - * FONT DIALOG - */ - -class WXDLLEXPORT wxChoice; -class WXDLLEXPORT wxText; -class WXDLLEXPORT wxCheckBox; -class WXDLLEXPORT wxFontPreviewer; - -enum -{ - wxID_FONT_UNDERLINE = 3000, - wxID_FONT_STYLE, - wxID_FONT_WEIGHT, - wxID_FONT_FAMILY, - wxID_FONT_COLOUR, - wxID_FONT_SIZE -}; - -class WXDLLEXPORT wxGenericFontDialog : public wxFontDialogBase -{ -public: - wxGenericFontDialog() { Init(); } - wxGenericFontDialog(wxWindow *parent) - : wxFontDialogBase(parent) { Init(); } - wxGenericFontDialog(wxWindow *parent, const wxFontData& data) - : wxFontDialogBase(parent, data) { Init(); } - virtual ~wxGenericFontDialog(); - - virtual int ShowModal(); - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, for backwards compatibility only - wxDEPRECATED( wxGenericFontDialog(wxWindow *parent, const wxFontData *data) ); -#endif // WXWIN_COMPATIBILITY_2_6 - - // Internal functions - void OnCloseWindow(wxCloseEvent& event); - - virtual void CreateWidgets(); - virtual void InitializeFont(); - - void OnChangeFont(wxCommandEvent& event); - -#if USE_SPINCTRL_FOR_POINT_SIZE - void OnChangeSize(wxSpinEvent& event); -#endif - -protected: - - virtual bool DoCreate(wxWindow *parent); - -private: - - // common part of all ctors - void Init(); - - void DoChangeFont(); - - wxFont m_dialogFont; - - wxChoice *m_familyChoice; - wxChoice *m_styleChoice; - wxChoice *m_weightChoice; - wxChoice *m_colourChoice; - wxCheckBox *m_underLineCheckBox; - -#if !USE_SPINCTRL_FOR_POINT_SIZE - wxChoice *m_pointSizeChoice; -#endif - - wxFontPreviewer *m_previewer; - bool m_useEvents; - - // static bool fontDialogCancelled; - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxGenericFontDialog) -}; - -WXDLLEXPORT const wxChar *wxFontFamilyIntToString(int family); -WXDLLEXPORT const wxChar *wxFontWeightIntToString(int weight); -WXDLLEXPORT const wxChar *wxFontStyleIntToString(int style); -WXDLLEXPORT int wxFontFamilyStringToInt(wxChar *family); -WXDLLEXPORT int wxFontWeightStringToInt(wxChar *weight); -WXDLLEXPORT int wxFontStyleStringToInt(wxChar *style); - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, for backwards compatibility only -inline wxGenericFontDialog::wxGenericFontDialog(wxWindow *parent, const wxFontData *data) - :wxFontDialogBase(parent) { Init(); InitFontData(data); Create(parent); } -#endif // WXWIN_COMPATIBILITY_2_6 - -#endif // _WX_GENERIC_FONTDLGG_H diff --git a/desmume/src/windows/wx/include/wx/generic/fontpickerg.h b/desmume/src/windows/wx/include/wx/generic/fontpickerg.h deleted file mode 100644 index ead764513..000000000 --- a/desmume/src/windows/wx/include/wx/generic/fontpickerg.h +++ /dev/null @@ -1,82 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/fontpickerg.h -// Purpose: wxGenericFontButton header -// Author: Francesco Montorsi -// Modified by: -// Created: 14/4/2006 -// Copyright: (c) Francesco Montorsi -// RCS-ID: $Id: fontpickerg.h 42999 2006-11-03 21:54:13Z VZ $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FONTPICKER_H_ -#define _WX_FONTPICKER_H_ - -#include "wx/button.h" -#include "wx/cmndata.h" - -//----------------------------------------------------------------------------- -// wxGenericFontButton: a button which brings up a wxColourDialog -//----------------------------------------------------------------------------- - -#define wxFONTBTN_DEFAULT_STYLE \ - (wxFNTP_FONTDESC_AS_LABEL | wxFNTP_USEFONT_FOR_LABEL) - -class WXDLLIMPEXP_CORE wxGenericFontButton : public wxButton, - public wxFontPickerWidgetBase -{ -public: - wxGenericFontButton() {} - wxGenericFontButton(wxWindow *parent, - wxWindowID id, - const wxFont &initial = wxNullFont, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxFONTBTN_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxFontPickerWidgetNameStr) - { - Create(parent, id, initial, pos, size, style, validator, name); - } - - virtual ~wxGenericFontButton() {} - - -public: // API extensions specific for wxGenericFontButton - - // user can override this to init font data in a different way - virtual void InitFontData(); - - // returns the font data shown in wxColourDialog - wxFontData *GetFontData() { return &ms_data; } - - -public: - - bool Create(wxWindow *parent, - wxWindowID id, - const wxFont &initial = *wxNORMAL_FONT, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxFONTBTN_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxFontPickerWidgetNameStr); - - void OnButtonClick(wxCommandEvent &); - - -protected: - - void UpdateFont(); - - // the colour data shown in wxColourPickerCtrlGeneric - // controls. This member is static so that all colour pickers - // in the program share the same set of custom colours. - static wxFontData ms_data; - -private: - DECLARE_DYNAMIC_CLASS(wxGenericFontButton) -}; - - -#endif // _WX_FONTPICKER_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/grid.h b/desmume/src/windows/wx/include/wx/generic/grid.h deleted file mode 100644 index e84bb7dd7..000000000 --- a/desmume/src/windows/wx/include/wx/generic/grid.h +++ /dev/null @@ -1,2302 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/grid.h -// Purpose: wxGrid and related classes -// Author: Michael Bedward (based on code by Julian Smart, Robin Dunn) -// Modified by: Santiago Palacios -// Created: 1/08/1999 -// RCS-ID: $Id: grid.h 55568 2008-09-12 12:49:11Z VZ $ -// Copyright: (c) Michael Bedward -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_GRID_H_ -#define _WX_GENERIC_GRID_H_ - -#include "wx/defs.h" - -#if wxUSE_GRID - -#include "wx/scrolwin.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxGridNameStr[]; - -// Default parameters for wxGrid -// -#define WXGRID_DEFAULT_NUMBER_ROWS 10 -#define WXGRID_DEFAULT_NUMBER_COLS 10 -#if defined(__WXMSW__) || defined(__WXGTK20__) -#define WXGRID_DEFAULT_ROW_HEIGHT 25 -#else -#define WXGRID_DEFAULT_ROW_HEIGHT 30 -#endif // __WXMSW__ -#define WXGRID_DEFAULT_COL_WIDTH 80 -#define WXGRID_DEFAULT_COL_LABEL_HEIGHT 32 -#define WXGRID_DEFAULT_ROW_LABEL_WIDTH 82 -#define WXGRID_LABEL_EDGE_ZONE 2 -#define WXGRID_MIN_ROW_HEIGHT 15 -#define WXGRID_MIN_COL_WIDTH 15 -#define WXGRID_DEFAULT_SCROLLBAR_WIDTH 16 - -// type names for grid table values -#define wxGRID_VALUE_STRING _T("string") -#define wxGRID_VALUE_BOOL _T("bool") -#define wxGRID_VALUE_NUMBER _T("long") -#define wxGRID_VALUE_FLOAT _T("double") -#define wxGRID_VALUE_CHOICE _T("choice") - -#define wxGRID_VALUE_TEXT wxGRID_VALUE_STRING -#define wxGRID_VALUE_LONG wxGRID_VALUE_NUMBER - -#if wxABI_VERSION >= 20808 - // magic constant which tells (to some functions) to automatically - // calculate the appropriate size - #define wxGRID_AUTOSIZE (-1) -#endif // wxABI_VERSION >= 20808 - -// ---------------------------------------------------------------------------- -// forward declarations -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_ADV wxGrid; -class WXDLLIMPEXP_FWD_ADV wxGridCellAttr; -class WXDLLIMPEXP_FWD_ADV wxGridCellAttrProviderData; -class WXDLLIMPEXP_FWD_ADV wxGridColLabelWindow; -class WXDLLIMPEXP_FWD_ADV wxGridCornerLabelWindow; -class WXDLLIMPEXP_FWD_ADV wxGridRowLabelWindow; -class WXDLLIMPEXP_FWD_ADV wxGridWindow; -class WXDLLIMPEXP_FWD_ADV wxGridTypeRegistry; -class WXDLLIMPEXP_FWD_ADV wxGridSelection; - -class WXDLLIMPEXP_FWD_CORE wxCheckBox; -class WXDLLIMPEXP_FWD_CORE wxComboBox; -class WXDLLIMPEXP_FWD_CORE wxTextCtrl; -#if wxUSE_SPINCTRL -class WXDLLIMPEXP_FWD_CORE wxSpinCtrl; -#endif - -// ---------------------------------------------------------------------------- -// macros -// ---------------------------------------------------------------------------- - -#define wxSafeIncRef(p) if ( p ) (p)->IncRef() -#define wxSafeDecRef(p) if ( p ) (p)->DecRef() - -// ---------------------------------------------------------------------------- -// wxGridCellWorker: common base class for wxGridCellRenderer and -// wxGridCellEditor -// -// NB: this is more an implementation convenience than a design issue, so this -// class is not documented and is not public at all -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxGridCellWorker : public wxClientDataContainer -{ -public: - wxGridCellWorker() { m_nRef = 1; } - - // this class is ref counted: it is created with ref count of 1, so - // calling DecRef() once will delete it. Calling IncRef() allows to lock - // it until the matching DecRef() is called - void IncRef() { m_nRef++; } - void DecRef() { if ( --m_nRef == 0 ) delete this; } - - // interpret renderer parameters: arbitrary string whose interpretatin is - // left to the derived classes - virtual void SetParameters(const wxString& params); - -protected: - // virtual dtor for any base class - private because only DecRef() can - // delete us - virtual ~wxGridCellWorker(); - -private: - size_t m_nRef; - - // suppress the stupid gcc warning about the class having private dtor and - // no friends - friend class wxGridCellWorkerDummyFriend; -}; - -// ---------------------------------------------------------------------------- -// wxGridCellRenderer: this class is responsible for actually drawing the cell -// in the grid. You may pass it to the wxGridCellAttr (below) to change the -// format of one given cell or to wxGrid::SetDefaultRenderer() to change the -// view of all cells. This is an ABC, you will normally use one of the -// predefined derived classes or derive your own class from it. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxGridCellRenderer : public wxGridCellWorker -{ -public: - // draw the given cell on the provided DC inside the given rectangle - // using the style specified by the attribute and the default or selected - // state corresponding to the isSelected value. - // - // this pure virtual function has a default implementation which will - // prepare the DC using the given attribute: it will draw the rectangle - // with the bg colour from attr and set the text colour and font - virtual void Draw(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - const wxRect& rect, - int row, int col, - bool isSelected) = 0; - - // get the preferred size of the cell for its contents - virtual wxSize GetBestSize(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - int row, int col) = 0; - - // create a new object which is the copy of this one - virtual wxGridCellRenderer *Clone() const = 0; -}; - -// the default renderer for the cells containing string data -class WXDLLIMPEXP_ADV wxGridCellStringRenderer : public wxGridCellRenderer -{ -public: - // draw the string - virtual void Draw(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - const wxRect& rect, - int row, int col, - bool isSelected); - - // return the string extent - virtual wxSize GetBestSize(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - int row, int col); - - virtual wxGridCellRenderer *Clone() const - { return new wxGridCellStringRenderer; } - -protected: - // set the text colours before drawing - void SetTextColoursAndFont(const wxGrid& grid, - const wxGridCellAttr& attr, - wxDC& dc, - bool isSelected); - - // calc the string extent for given string/font - wxSize DoGetBestSize(const wxGridCellAttr& attr, - wxDC& dc, - const wxString& text); -}; - -// the default renderer for the cells containing numeric (long) data -class WXDLLIMPEXP_ADV wxGridCellNumberRenderer : public wxGridCellStringRenderer -{ -public: - // draw the string right aligned - virtual void Draw(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - const wxRect& rect, - int row, int col, - bool isSelected); - - virtual wxSize GetBestSize(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - int row, int col); - - virtual wxGridCellRenderer *Clone() const - { return new wxGridCellNumberRenderer; } - -protected: - wxString GetString(const wxGrid& grid, int row, int col); -}; - -class WXDLLIMPEXP_ADV wxGridCellFloatRenderer : public wxGridCellStringRenderer -{ -public: - wxGridCellFloatRenderer(int width = -1, int precision = -1); - - // 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(); } - - // draw the string right aligned with given width/precision - virtual void Draw(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - const wxRect& rect, - int row, int col, - bool isSelected); - - virtual wxSize GetBestSize(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - int row, int col); - - // parameters string format is "width[,precision]" - virtual void SetParameters(const wxString& params); - - virtual wxGridCellRenderer *Clone() const; - -protected: - wxString GetString(const wxGrid& grid, int row, int col); - -private: - // formatting parameters - int m_width, - m_precision; - - wxString m_format; -}; - -// renderer for boolean fields -class WXDLLIMPEXP_ADV wxGridCellBoolRenderer : public wxGridCellRenderer -{ -public: - // draw a check mark or nothing - virtual void Draw(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - const wxRect& rect, - int row, int col, - bool isSelected); - - // return the checkmark size - virtual wxSize GetBestSize(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - int row, int col); - - virtual wxGridCellRenderer *Clone() const - { return new wxGridCellBoolRenderer; } - -private: - static wxSize ms_sizeCheckMark; -}; - -// ---------------------------------------------------------------------------- -// wxGridCellEditor: This class is responsible for providing and manipulating -// the in-place edit controls for the grid. Instances of wxGridCellEditor -// (actually, instances of derived classes since it is an ABC) can be -// associated with the cell attributes for individual cells, rows, columns, or -// even for the entire grid. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxGridCellEditor : public wxGridCellWorker -{ -public: - wxGridCellEditor(); - - bool IsCreated() { return m_control != NULL; } - wxControl* GetControl() { return m_control; } - void SetControl(wxControl* control) { m_control = control; } - - wxGridCellAttr* GetCellAttr() { return m_attr; } - void SetCellAttr(wxGridCellAttr* attr) { m_attr = attr; } - - // Creates the actual edit control - virtual void Create(wxWindow* parent, - wxWindowID id, - wxEvtHandler* evtHandler) = 0; - - // Size and position the edit control - virtual void SetSize(const wxRect& rect); - - // Show or hide the edit control, use the specified attributes to set - // colours/fonts for it - virtual void Show(bool show, wxGridCellAttr *attr = (wxGridCellAttr *)NULL); - - // Draws the part of the cell not occupied by the control: the base class - // version just fills it with background colour from the attribute - virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr); - - // Fetch the value from the table and prepare the edit control - // to begin editing. Set the focus to the edit control. - virtual void BeginEdit(int row, int col, wxGrid* grid) = 0; - - // Complete the editing of the current cell. Returns true if the value has - // changed. If necessary, the control may be destroyed. - virtual bool EndEdit(int row, int col, wxGrid* grid) = 0; - - // Reset the value in the control back to its starting value - virtual void Reset() = 0; - - // return true to allow the given key to start editing: the base class - // version only checks that the event has no modifiers. The derived - // classes are supposed to do "if ( base::IsAcceptedKey() && ... )" in - // their IsAcceptedKey() implementation, although, of course, it is not a - // mandatory requirment. - // - // NB: if the key is F2 (special), editing will always start and this - // method will not be called at all (but StartingKey() will) - virtual bool IsAcceptedKey(wxKeyEvent& event); - - // If the editor is enabled by pressing keys on the grid, this will be - // called to let the editor do something about that first key if desired - virtual void StartingKey(wxKeyEvent& event); - - // if the editor is enabled by clicking on the cell, this method will be - // called - virtual void StartingClick(); - - // Some types of controls on some platforms may need some help - // with the Return key. - virtual void HandleReturn(wxKeyEvent& event); - - // Final cleanup - virtual void Destroy(); - - // create a new object which is the copy of this one - virtual wxGridCellEditor *Clone() const = 0; - - // added GetValue so we can get the value which is in the control - virtual wxString GetValue() const = 0; - -protected: - // the dtor is private because only DecRef() can delete us - virtual ~wxGridCellEditor(); - - // the control we show on screen - wxControl* m_control; - - // a temporary pointer to the attribute being edited - wxGridCellAttr* m_attr; - - // if we change the colours/font of the control from the default ones, we - // must restore the default later and we save them here between calls to - // Show(true) and Show(false) - wxColour m_colFgOld, - m_colBgOld; - wxFont m_fontOld; - - // suppress the stupid gcc warning about the class having private dtor and - // no friends - friend class wxGridCellEditorDummyFriend; - - DECLARE_NO_COPY_CLASS(wxGridCellEditor) -}; - -#if wxUSE_TEXTCTRL - -// the editor for string/text data -class WXDLLIMPEXP_ADV wxGridCellTextEditor : public wxGridCellEditor -{ -public: - wxGridCellTextEditor(); - - virtual void Create(wxWindow* parent, - wxWindowID id, - wxEvtHandler* evtHandler); - virtual void SetSize(const wxRect& rect); - - virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr); - - virtual bool IsAcceptedKey(wxKeyEvent& event); - virtual void BeginEdit(int row, int col, wxGrid* grid); - virtual bool EndEdit(int row, int col, wxGrid* grid); - - virtual void Reset(); - virtual void StartingKey(wxKeyEvent& event); - virtual void HandleReturn(wxKeyEvent& event); - - // parameters string format is "max_width" - virtual void SetParameters(const wxString& params); - - virtual wxGridCellEditor *Clone() const - { return new wxGridCellTextEditor; } - - // added GetValue so we can get the value which is in the control - virtual wxString GetValue() const; - -protected: - wxTextCtrl *Text() const { return (wxTextCtrl *)m_control; } - - // parts of our virtual functions reused by the derived classes - void DoBeginEdit(const wxString& startValue); - void DoReset(const wxString& startValue); - -private: - size_t m_maxChars; // max number of chars allowed - wxString m_startValue; - - DECLARE_NO_COPY_CLASS(wxGridCellTextEditor) -}; - -// the editor for numeric (long) data -class WXDLLIMPEXP_ADV wxGridCellNumberEditor : public wxGridCellTextEditor -{ -public: - // allows to specify the range - if min == max == -1, no range checking is - // done - wxGridCellNumberEditor(int min = -1, int max = -1); - - virtual void Create(wxWindow* parent, - wxWindowID id, - wxEvtHandler* evtHandler); - - virtual bool IsAcceptedKey(wxKeyEvent& event); - virtual void BeginEdit(int row, int col, wxGrid* grid); - virtual bool EndEdit(int row, int col, wxGrid* grid); - - virtual void Reset(); - virtual void StartingKey(wxKeyEvent& event); - - // parameters string format is "min,max" - virtual void SetParameters(const wxString& params); - - virtual wxGridCellEditor *Clone() const - { return new wxGridCellNumberEditor(m_min, m_max); } - - // added GetValue so we can get the value which is in the control - virtual wxString GetValue() const; - -protected: -#if wxUSE_SPINCTRL - wxSpinCtrl *Spin() const { return (wxSpinCtrl *)m_control; } -#endif - - // if HasRange(), we use wxSpinCtrl - otherwise wxTextCtrl - bool HasRange() const - { -#if wxUSE_SPINCTRL - return m_min != m_max; -#else - return false; -#endif - } - - // string representation of m_valueOld - wxString GetString() const - { return wxString::Format(_T("%ld"), m_valueOld); } - -private: - int m_min, - m_max; - - long m_valueOld; - - DECLARE_NO_COPY_CLASS(wxGridCellNumberEditor) -}; - -// the editor for floating point numbers (double) data -class WXDLLIMPEXP_ADV wxGridCellFloatEditor : public wxGridCellTextEditor -{ -public: - wxGridCellFloatEditor(int width = -1, int precision = -1); - - virtual void Create(wxWindow* parent, - wxWindowID id, - wxEvtHandler* evtHandler); - - virtual bool IsAcceptedKey(wxKeyEvent& event); - virtual void BeginEdit(int row, int col, wxGrid* grid); - virtual bool EndEdit(int row, int col, wxGrid* grid); - - virtual void Reset(); - virtual void StartingKey(wxKeyEvent& event); - - virtual wxGridCellEditor *Clone() const - { return new wxGridCellFloatEditor(m_width, m_precision); } - - // parameters string format is "width,precision" - virtual void SetParameters(const wxString& params); - -protected: - // string representation of m_valueOld - wxString GetString() const; - -private: - int m_width, - m_precision; - double m_valueOld; - - DECLARE_NO_COPY_CLASS(wxGridCellFloatEditor) -}; - -#endif // wxUSE_TEXTCTRL - -#if wxUSE_CHECKBOX - -// the editor for boolean data -class WXDLLIMPEXP_ADV wxGridCellBoolEditor : public wxGridCellEditor -{ -public: - wxGridCellBoolEditor() { } - - virtual void Create(wxWindow* parent, - wxWindowID id, - wxEvtHandler* evtHandler); - - virtual void SetSize(const wxRect& rect); - virtual void Show(bool show, wxGridCellAttr *attr = NULL); - - virtual bool IsAcceptedKey(wxKeyEvent& event); - virtual void BeginEdit(int row, int col, wxGrid* grid); - virtual bool EndEdit(int row, int col, wxGrid* grid); - - virtual void Reset(); - virtual void StartingClick(); - virtual void StartingKey(wxKeyEvent& event); - - virtual wxGridCellEditor *Clone() const - { return new wxGridCellBoolEditor; } - - // added GetValue so we can get the value which is in the control, see - // also UseStringValues() - virtual wxString GetValue() const; - - // set the string values returned by GetValue() for the true and false - // states, respectively - static void UseStringValues(const wxString& valueTrue = _T("1"), - const wxString& valueFalse = wxEmptyString); - - // return true if the given string is equal to the string representation of - // true value which we currently use - static bool IsTrueValue(const wxString& value); - -protected: - wxCheckBox *CBox() const { return (wxCheckBox *)m_control; } - -private: - bool m_startValue; - - static wxString ms_stringValues[2]; - - DECLARE_NO_COPY_CLASS(wxGridCellBoolEditor) -}; - -#endif // wxUSE_CHECKBOX - -#if wxUSE_COMBOBOX - -// the editor for string data allowing to choose from the list of strings -class WXDLLIMPEXP_ADV wxGridCellChoiceEditor : public wxGridCellEditor -{ -public: - // if !allowOthers, user can't type a string not in choices array - wxGridCellChoiceEditor(size_t count = 0, - const wxString choices[] = NULL, - bool allowOthers = false); - wxGridCellChoiceEditor(const wxArrayString& choices, - bool allowOthers = false); - - virtual void Create(wxWindow* parent, - wxWindowID id, - wxEvtHandler* evtHandler); - - virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr); - - virtual void BeginEdit(int row, int col, wxGrid* grid); - virtual bool EndEdit(int row, int col, wxGrid* grid); - - virtual void Reset(); - - // parameters string format is "item1[,item2[...,itemN]]" - virtual void SetParameters(const wxString& params); - - virtual wxGridCellEditor *Clone() const; - - // added GetValue so we can get the value which is in the control - virtual wxString GetValue() const; - -protected: - wxComboBox *Combo() const { return (wxComboBox *)m_control; } - -// DJC - (MAPTEK) you at least need access to m_choices if you -// wish to override this class -protected: - wxString m_startValue; - wxArrayString m_choices; - bool m_allowOthers; - - DECLARE_NO_COPY_CLASS(wxGridCellChoiceEditor) -}; - -#endif // wxUSE_COMBOBOX - -// ---------------------------------------------------------------------------- -// wxGridCellAttr: this class can be used to alter the cells appearance in -// the grid by changing their colour/font/... from default. An object of this -// class may be returned by wxGridTable::GetAttr(). -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxGridCellAttr : public wxClientDataContainer -{ -public: - enum wxAttrKind - { - Any, - Default, - Cell, - Row, - Col, - Merged - }; - - // ctors - wxGridCellAttr(wxGridCellAttr *attrDefault = NULL) - { - Init(attrDefault); - - // MB: args used to be 0,0 here but wxALIGN_LEFT is 0 - SetAlignment(-1, -1); - } - - // VZ: considering the number of members wxGridCellAttr has now, this ctor - // seems to be pretty useless... may be we should just remove it? - wxGridCellAttr(const wxColour& colText, - const wxColour& colBack, - const wxFont& font, - int hAlign, - int vAlign) - : m_colText(colText), m_colBack(colBack), m_font(font) - { - Init(); - SetAlignment(hAlign, vAlign); - } - - // creates a new copy of this object - wxGridCellAttr *Clone() const; - void MergeWith(wxGridCellAttr *mergefrom); - - // this class is ref counted: it is created with ref count of 1, so - // calling DecRef() once will delete it. Calling IncRef() allows to lock - // it until the matching DecRef() is called - void IncRef() { m_nRef++; } - void DecRef() { if ( --m_nRef == 0 ) delete this; } - - // setters - void SetTextColour(const wxColour& colText) { m_colText = colText; } - void SetBackgroundColour(const wxColour& colBack) { m_colBack = colBack; } - void SetFont(const wxFont& font) { m_font = font; } - void SetAlignment(int hAlign, int vAlign) - { - m_hAlign = hAlign; - m_vAlign = vAlign; - } - void SetSize(int num_rows, int num_cols); - void SetOverflow(bool allow = true) - { m_overflow = allow ? Overflow : SingleCell; } - void SetReadOnly(bool isReadOnly = true) - { m_isReadOnly = isReadOnly ? ReadOnly : ReadWrite; } - - // takes ownership of the pointer - void SetRenderer(wxGridCellRenderer *renderer) - { wxSafeDecRef(m_renderer); m_renderer = renderer; } - void SetEditor(wxGridCellEditor* editor) - { wxSafeDecRef(m_editor); m_editor = editor; } - - 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 HasAlignment() const { return (m_hAlign != -1 || m_vAlign != -1); } - bool HasRenderer() const { return m_renderer != NULL; } - bool HasEditor() const { return m_editor != NULL; } - bool HasReadWriteMode() const { return m_isReadOnly != Unset; } - bool HasOverflowMode() const { return m_overflow != UnsetOverflow; } - bool HasSize() const { return m_sizeRows != 1 || m_sizeCols != 1; } - - const wxColour& GetTextColour() const; - const wxColour& GetBackgroundColour() const; - const wxFont& GetFont() const; - void GetAlignment(int *hAlign, int *vAlign) const; - void GetSize(int *num_rows, int *num_cols) const; - bool GetOverflow() const - { return m_overflow != SingleCell; } - wxGridCellRenderer *GetRenderer(wxGrid* grid, int row, int col) const; - wxGridCellEditor *GetEditor(wxGrid* grid, int row, int col) const; - - bool IsReadOnly() const { return m_isReadOnly == wxGridCellAttr::ReadOnly; } - - wxAttrKind GetKind() { return m_attrkind; } - - void SetDefAttr(wxGridCellAttr* defAttr) { m_defGridAttr = defAttr; } - -protected: - // the dtor is private because only DecRef() can delete us - virtual ~wxGridCellAttr() - { - wxSafeDecRef(m_renderer); - wxSafeDecRef(m_editor); - } - -private: - enum wxAttrReadMode - { - Unset = -1, - ReadWrite, - ReadOnly - }; - - enum wxAttrOverflowMode - { - UnsetOverflow = -1, - Overflow, - SingleCell - }; - - // the common part of all ctors - void Init(wxGridCellAttr *attrDefault = NULL); - - - // the ref count - when it goes to 0, we die - size_t m_nRef; - - wxColour m_colText, - m_colBack; - wxFont m_font; - int m_hAlign, - m_vAlign; - int m_sizeRows, - m_sizeCols; - - wxAttrOverflowMode m_overflow; - - wxGridCellRenderer* m_renderer; - wxGridCellEditor* m_editor; - wxGridCellAttr* m_defGridAttr; - - wxAttrReadMode m_isReadOnly; - - wxAttrKind m_attrkind; - - // use Clone() instead - DECLARE_NO_COPY_CLASS(wxGridCellAttr) - - // suppress the stupid gcc warning about the class having private dtor and - // no friends - friend class wxGridCellAttrDummyFriend; -}; - -// ---------------------------------------------------------------------------- -// wxGridCellAttrProvider: class used by wxGridTableBase to retrieve/store the -// cell attributes. -// ---------------------------------------------------------------------------- - -// implementation note: we separate it from wxGridTableBase because we wish to -// avoid deriving a new table class if possible, and sometimes it will be -// enough to just derive another wxGridCellAttrProvider instead -// -// the default implementation is reasonably efficient for the generic case, -// but you might still wish to implement your own for some specific situations -// if you have performance problems with the stock one -class WXDLLIMPEXP_ADV wxGridCellAttrProvider : public wxClientDataContainer -{ -public: - wxGridCellAttrProvider(); - virtual ~wxGridCellAttrProvider(); - - // DecRef() must be called on the returned pointer - virtual wxGridCellAttr *GetAttr(int row, int col, - wxGridCellAttr::wxAttrKind kind ) const; - - // all these functions take ownership of the pointer, don't call DecRef() - // on it - virtual void SetAttr(wxGridCellAttr *attr, int row, int col); - virtual void SetRowAttr(wxGridCellAttr *attr, int row); - virtual void SetColAttr(wxGridCellAttr *attr, int col); - - // these functions must be called whenever some rows/cols are deleted - // because the internal data must be updated then - void UpdateAttrRows( size_t pos, int numRows ); - void UpdateAttrCols( size_t pos, int numCols ); - -private: - void InitData(); - - wxGridCellAttrProviderData *m_data; - - DECLARE_NO_COPY_CLASS(wxGridCellAttrProvider) -}; - -////////////////////////////////////////////////////////////////////// -// -// Grid table classes -// -////////////////////////////////////////////////////////////////////// - - -class WXDLLIMPEXP_ADV wxGridTableBase : public wxObject, public wxClientDataContainer -{ -public: - wxGridTableBase(); - virtual ~wxGridTableBase(); - - // You must override these functions in a derived table class - // - virtual int GetNumberRows() = 0; - virtual int GetNumberCols() = 0; - virtual bool IsEmptyCell( int row, int col ) = 0; - virtual wxString GetValue( int row, int col ) = 0; - virtual void SetValue( int row, int col, const wxString& value ) = 0; - - // Data type determination and value access - virtual wxString GetTypeName( int row, int col ); - virtual bool CanGetValueAs( int row, int col, const wxString& typeName ); - virtual bool CanSetValueAs( int row, int col, const wxString& typeName ); - - virtual long GetValueAsLong( int row, int col ); - virtual double GetValueAsDouble( int row, int col ); - virtual bool GetValueAsBool( int row, int col ); - - virtual void SetValueAsLong( int row, int col, long value ); - virtual void SetValueAsDouble( int row, int col, double value ); - virtual void SetValueAsBool( int row, int col, bool value ); - - // For user defined types - virtual void* GetValueAsCustom( int row, int col, const wxString& typeName ); - virtual void SetValueAsCustom( int row, int col, const wxString& typeName, void* value ); - - - // Overriding these is optional - // - virtual void SetView( wxGrid *grid ) { m_view = grid; } - virtual wxGrid * GetView() const { return m_view; } - - virtual void Clear() {} - virtual bool InsertRows( size_t pos = 0, size_t numRows = 1 ); - virtual bool AppendRows( size_t numRows = 1 ); - virtual bool DeleteRows( size_t pos = 0, size_t numRows = 1 ); - virtual bool InsertCols( size_t pos = 0, size_t numCols = 1 ); - virtual bool AppendCols( size_t numCols = 1 ); - virtual bool DeleteCols( size_t pos = 0, size_t numCols = 1 ); - - virtual wxString GetRowLabelValue( int row ); - virtual wxString GetColLabelValue( int col ); - virtual void SetRowLabelValue( int WXUNUSED(row), const wxString& ) {} - virtual void SetColLabelValue( int WXUNUSED(col), const wxString& ) {} - - // Attribute handling - // - - // give us the attr provider to use - we take ownership of the pointer - void SetAttrProvider(wxGridCellAttrProvider *attrProvider); - - // get the currently used attr provider (may be NULL) - wxGridCellAttrProvider *GetAttrProvider() const { return m_attrProvider; } - - // Does this table allow attributes? Default implementation creates - // a wxGridCellAttrProvider if necessary. - virtual bool CanHaveAttributes(); - - // by default forwarded to wxGridCellAttrProvider if any. May be - // overridden to handle attributes directly in the table. - virtual wxGridCellAttr *GetAttr( int row, int col, - wxGridCellAttr::wxAttrKind kind ); - - - // these functions take ownership of the pointer - virtual void SetAttr(wxGridCellAttr* attr, int row, int col); - virtual void SetRowAttr(wxGridCellAttr *attr, int row); - virtual void SetColAttr(wxGridCellAttr *attr, int col); - -private: - wxGrid * m_view; - wxGridCellAttrProvider *m_attrProvider; - - DECLARE_ABSTRACT_CLASS(wxGridTableBase) - DECLARE_NO_COPY_CLASS(wxGridTableBase) -}; - - -// ---------------------------------------------------------------------------- -// wxGridTableMessage -// ---------------------------------------------------------------------------- - -// IDs for messages sent from grid table to view -// -enum wxGridTableRequest -{ - wxGRIDTABLE_REQUEST_VIEW_GET_VALUES = 2000, - wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES, - wxGRIDTABLE_NOTIFY_ROWS_INSERTED, - wxGRIDTABLE_NOTIFY_ROWS_APPENDED, - wxGRIDTABLE_NOTIFY_ROWS_DELETED, - wxGRIDTABLE_NOTIFY_COLS_INSERTED, - wxGRIDTABLE_NOTIFY_COLS_APPENDED, - wxGRIDTABLE_NOTIFY_COLS_DELETED -}; - -class WXDLLIMPEXP_ADV wxGridTableMessage -{ -public: - wxGridTableMessage(); - wxGridTableMessage( wxGridTableBase *table, int id, - int comInt1 = -1, - int comInt2 = -1 ); - - void SetTableObject( wxGridTableBase *table ) { m_table = table; } - wxGridTableBase * GetTableObject() const { return m_table; } - void SetId( int id ) { m_id = id; } - int GetId() { return m_id; } - void SetCommandInt( int comInt1 ) { m_comInt1 = comInt1; } - int GetCommandInt() { return m_comInt1; } - void SetCommandInt2( int comInt2 ) { m_comInt2 = comInt2; } - int GetCommandInt2() { return m_comInt2; } - -private: - wxGridTableBase *m_table; - int m_id; - int m_comInt1; - int m_comInt2; - - DECLARE_NO_COPY_CLASS(wxGridTableMessage) -}; - - - -// ------ wxGridStringArray -// A 2-dimensional array of strings for data values -// - -WX_DECLARE_OBJARRAY_WITH_DECL(wxArrayString, wxGridStringArray, - class WXDLLIMPEXP_ADV); - - - -// ------ wxGridStringTable -// -// Simplest type of data table for a grid for small tables of strings -// that are stored in memory -// - -class WXDLLIMPEXP_ADV wxGridStringTable : public wxGridTableBase -{ -public: - wxGridStringTable(); - wxGridStringTable( int numRows, int numCols ); - virtual ~wxGridStringTable(); - - // these are pure virtual in wxGridTableBase - // - int GetNumberRows(); - int GetNumberCols(); - wxString GetValue( int row, int col ); - void SetValue( int row, int col, const wxString& s ); - bool IsEmptyCell( int row, int col ); - - // overridden functions from wxGridTableBase - // - void Clear(); - bool InsertRows( size_t pos = 0, size_t numRows = 1 ); - bool AppendRows( size_t numRows = 1 ); - bool DeleteRows( size_t pos = 0, size_t numRows = 1 ); - bool InsertCols( size_t pos = 0, size_t numCols = 1 ); - bool AppendCols( size_t numCols = 1 ); - bool DeleteCols( size_t pos = 0, size_t numCols = 1 ); - - void SetRowLabelValue( int row, const wxString& ); - void SetColLabelValue( int col, const wxString& ); - wxString GetRowLabelValue( int row ); - wxString GetColLabelValue( int col ); - -private: - wxGridStringArray m_data; - - // These only get used if you set your own labels, otherwise the - // GetRow/ColLabelValue functions return wxGridTableBase defaults - // - wxArrayString m_rowLabels; - wxArrayString m_colLabels; - - DECLARE_DYNAMIC_CLASS_NO_COPY( wxGridStringTable ) -}; - - - -// ============================================================================ -// Grid view classes -// ============================================================================ - -// ---------------------------------------------------------------------------- -// wxGridCellCoords: location of a cell in the grid -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxGridCellCoords -{ -public: - wxGridCellCoords() { m_row = m_col = -1; } - wxGridCellCoords( int r, int c ) { m_row = r; m_col = c; } - - // default copy ctor is ok - - int GetRow() const { return m_row; } - void SetRow( int n ) { m_row = n; } - int GetCol() const { return m_col; } - void SetCol( int n ) { m_col = n; } - void Set( int row, int col ) { m_row = row; m_col = col; } - - wxGridCellCoords& operator=( const wxGridCellCoords& other ) - { - if ( &other != this ) - { - m_row=other.m_row; - m_col=other.m_col; - } - return *this; - } - - bool operator==( const wxGridCellCoords& other ) const - { - return (m_row == other.m_row && m_col == other.m_col); - } - - bool operator!=( const wxGridCellCoords& other ) const - { - return (m_row != other.m_row || m_col != other.m_col); - } - - bool operator!() const - { - return (m_row == -1 && m_col == -1 ); - } - -private: - int m_row; - int m_col; -}; - - -// For comparisons... -// -extern WXDLLIMPEXP_ADV wxGridCellCoords wxGridNoCellCoords; -extern WXDLLIMPEXP_ADV wxRect wxGridNoCellRect; - -// An array of cell coords... -// -WX_DECLARE_OBJARRAY_WITH_DECL(wxGridCellCoords, wxGridCellCoordsArray, - class WXDLLIMPEXP_ADV); - -// ---------------------------------------------------------------------------- -// wxGrid -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxGrid : public wxScrolledWindow -{ -public: - wxGrid() ; - - wxGrid( wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxWANTS_CHARS, - const wxString& name = wxGridNameStr ); - - bool Create( wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxWANTS_CHARS, - const wxString& name = wxGridNameStr ); - - virtual ~wxGrid(); - - enum wxGridSelectionModes {wxGridSelectCells, - wxGridSelectRows, - wxGridSelectColumns}; - - bool CreateGrid( int numRows, int numCols, - wxGrid::wxGridSelectionModes selmode = - wxGrid::wxGridSelectCells ); - - void SetSelectionMode(wxGrid::wxGridSelectionModes selmode); - wxGrid::wxGridSelectionModes GetSelectionMode() const; - - // ------ grid dimensions - // - int GetNumberRows() { return m_numRows; } - int GetNumberCols() { return m_numCols; } - - - // ------ display update functions - // - wxArrayInt CalcRowLabelsExposed( const wxRegion& reg ); - - wxArrayInt CalcColLabelsExposed( const wxRegion& reg ); - wxGridCellCoordsArray CalcCellsExposed( const wxRegion& reg ); - - - // ------ event handlers - // - void ProcessRowLabelMouseEvent( wxMouseEvent& event ); - void ProcessColLabelMouseEvent( wxMouseEvent& event ); - void ProcessCornerLabelMouseEvent( wxMouseEvent& event ); - void ProcessGridCellMouseEvent( wxMouseEvent& event ); - bool ProcessTableMessage( wxGridTableMessage& ); - - void DoEndDragResizeRow(); - void DoEndDragResizeCol(); - void DoEndDragMoveCol(); - - wxGridTableBase * GetTable() const { return m_table; } - bool SetTable( wxGridTableBase *table, bool takeOwnership = false, - wxGrid::wxGridSelectionModes selmode = - wxGrid::wxGridSelectCells ); - - void ClearGrid(); - bool InsertRows( int pos = 0, int numRows = 1, bool updateLabels = true ); - bool AppendRows( int numRows = 1, bool updateLabels = true ); - bool DeleteRows( int pos = 0, int numRows = 1, bool updateLabels = true ); - bool InsertCols( int pos = 0, int numCols = 1, bool updateLabels = true ); - bool AppendCols( int numCols = 1, bool updateLabels = true ); - bool DeleteCols( int pos = 0, int numCols = 1, bool updateLabels = true ); - - void DrawGridCellArea( wxDC& dc , const wxGridCellCoordsArray& cells ); - void DrawGridSpace( wxDC& dc ); - void DrawCellBorder( wxDC& dc, const wxGridCellCoords& ); - void DrawAllGridLines( wxDC& dc, const wxRegion & reg ); - void DrawCell( wxDC& dc, const wxGridCellCoords& ); - void DrawHighlight(wxDC& dc, const wxGridCellCoordsArray& cells); - - // this function is called when the current cell highlight must be redrawn - // and may be overridden by the user - virtual void DrawCellHighlight( wxDC& dc, const wxGridCellAttr *attr ); - - virtual void DrawRowLabels( wxDC& dc, const wxArrayInt& rows ); - virtual void DrawRowLabel( wxDC& dc, int row ); - - virtual void DrawColLabels( wxDC& dc, const wxArrayInt& cols ); - virtual void DrawColLabel( wxDC& dc, int col ); - - - // ------ Cell text drawing functions - // - void DrawTextRectangle( wxDC& dc, const wxString&, const wxRect&, - int horizontalAlignment = wxALIGN_LEFT, - int verticalAlignment = wxALIGN_TOP, - int textOrientation = wxHORIZONTAL ); - - void DrawTextRectangle( wxDC& dc, const wxArrayString& lines, const wxRect&, - int horizontalAlignment = wxALIGN_LEFT, - int verticalAlignment = wxALIGN_TOP, - int textOrientation = wxHORIZONTAL ); - - - // Split a string containing newline chararcters into an array of - // strings and return the number of lines - // - void StringToLines( const wxString& value, wxArrayString& lines ); - - void GetTextBoxSize( const wxDC& dc, - const wxArrayString& lines, - long *width, long *height ); - - - // ------ - // Code that does a lot of grid modification can be enclosed - // between BeginBatch() and EndBatch() calls to avoid screen - // flicker - // - void BeginBatch() { m_batchCount++; } - void EndBatch(); - - int GetBatchCount() { return m_batchCount; } - - virtual void Refresh(bool eraseb = true, - const wxRect* rect = (const wxRect *) NULL); - - // Use this, rather than wxWindow::Refresh(), to force an - // immediate repainting of the grid. Has no effect if you are - // already inside a BeginBatch / EndBatch block. - // - // This function is necessary because wxGrid has a minimal OnPaint() - // handler to reduce screen flicker. - // - void ForceRefresh(); - - - // ------ edit control functions - // - bool IsEditable() const { return m_editable; } - void EnableEditing( bool edit ); - - void EnableCellEditControl( bool enable = true ); - void DisableCellEditControl() { EnableCellEditControl(false); } - bool CanEnableCellControl() const; - bool IsCellEditControlEnabled() const; - bool IsCellEditControlShown() const; - - bool IsCurrentCellReadOnly() const; - - void ShowCellEditControl(); - void HideCellEditControl(); - void SaveEditControlValue(); - - - // ------ grid location functions - // Note that all of these functions work with the logical coordinates of - // grid cells and labels so you will need to convert from device - // coordinates for mouse events etc. - // - void XYToCell( int x, int y, wxGridCellCoords& ); - int YToRow( int y ); - int XToCol( int x, bool clipToMinMax = false ); - - int YToEdgeOfRow( int y ); - int XToEdgeOfCol( int x ); - - wxRect CellToRect( int row, int col ); - wxRect CellToRect( const wxGridCellCoords& coords ) - { return CellToRect( coords.GetRow(), coords.GetCol() ); } - - int GetGridCursorRow() { return m_currentCellCoords.GetRow(); } - int GetGridCursorCol() { return m_currentCellCoords.GetCol(); } - - // check to see if a cell is either wholly visible (the default arg) or - // at least partially visible in the grid window - // - bool IsVisible( int row, int col, bool wholeCellVisible = true ); - bool IsVisible( const wxGridCellCoords& coords, bool wholeCellVisible = true ) - { return IsVisible( coords.GetRow(), coords.GetCol(), wholeCellVisible ); } - void MakeCellVisible( int row, int col ); - void MakeCellVisible( const wxGridCellCoords& coords ) - { MakeCellVisible( coords.GetRow(), coords.GetCol() ); } - - - // ------ grid cursor movement functions - // - void SetGridCursor( int row, int col ) - { SetCurrentCell( wxGridCellCoords(row, col) ); } - - bool MoveCursorUp( bool expandSelection ); - bool MoveCursorDown( bool expandSelection ); - bool MoveCursorLeft( bool expandSelection ); - bool MoveCursorRight( bool expandSelection ); - bool MovePageDown(); - bool MovePageUp(); - bool MoveCursorUpBlock( bool expandSelection ); - bool MoveCursorDownBlock( bool expandSelection ); - bool MoveCursorLeftBlock( bool expandSelection ); - bool MoveCursorRightBlock( bool expandSelection ); - - - // ------ label and gridline formatting - // - int GetDefaultRowLabelSize() { return WXGRID_DEFAULT_ROW_LABEL_WIDTH; } - int GetRowLabelSize() { return m_rowLabelWidth; } - int GetDefaultColLabelSize() { return WXGRID_DEFAULT_COL_LABEL_HEIGHT; } - int GetColLabelSize() { return m_colLabelHeight; } - wxColour GetLabelBackgroundColour() { return m_labelBackgroundColour; } - wxColour GetLabelTextColour() { return m_labelTextColour; } - wxFont GetLabelFont() { return m_labelFont; } - void GetRowLabelAlignment( int *horiz, int *vert ); - void GetColLabelAlignment( int *horiz, int *vert ); - int GetColLabelTextOrientation(); - wxString GetRowLabelValue( int row ); - wxString GetColLabelValue( int col ); - wxColour GetGridLineColour() { return m_gridLineColour; } - - // these methods may be overridden to customize individual grid lines - // appearance - virtual wxPen GetDefaultGridLinePen(); - virtual wxPen GetRowGridLinePen(int row); - virtual wxPen GetColGridLinePen(int col); - wxColour GetCellHighlightColour() { return m_cellHighlightColour; } - int GetCellHighlightPenWidth() { return m_cellHighlightPenWidth; } - int GetCellHighlightROPenWidth() { return m_cellHighlightROPenWidth; } - - void SetRowLabelSize( int width ); - void SetColLabelSize( int height ); - void SetLabelBackgroundColour( const wxColour& ); - void SetLabelTextColour( const wxColour& ); - void SetLabelFont( const wxFont& ); - void SetRowLabelAlignment( int horiz, int vert ); - void SetColLabelAlignment( int horiz, int vert ); - void SetColLabelTextOrientation( int textOrientation ); - void SetRowLabelValue( int row, const wxString& ); - void SetColLabelValue( int col, const wxString& ); - void SetGridLineColour( const wxColour& ); - void SetCellHighlightColour( const wxColour& ); - void SetCellHighlightPenWidth(int width); - void SetCellHighlightROPenWidth(int width); - - void EnableDragRowSize( bool enable = true ); - void DisableDragRowSize() { EnableDragRowSize( false ); } - bool CanDragRowSize() { return m_canDragRowSize; } - void EnableDragColSize( bool enable = true ); - void DisableDragColSize() { EnableDragColSize( false ); } - bool CanDragColSize() { return m_canDragColSize; } - void EnableDragColMove( bool enable = true ); - void DisableDragColMove() { EnableDragColMove( false ); } - bool CanDragColMove() { return m_canDragColMove; } - void EnableDragGridSize(bool enable = true); - void DisableDragGridSize() { EnableDragGridSize(false); } - bool CanDragGridSize() { return m_canDragGridSize; } - - void EnableDragCell( bool enable = true ); - void DisableDragCell() { EnableDragCell( false ); } - bool CanDragCell() { return m_canDragCell; } - - // this sets the specified attribute for this cell or in this row/col - void SetAttr(int row, int col, wxGridCellAttr *attr); - void SetRowAttr(int row, wxGridCellAttr *attr); - void SetColAttr(int col, wxGridCellAttr *attr); - - // returns the attribute we may modify in place: a new one if this cell - // doesn't have any yet or the existing one if it does - // - // DecRef() must be called on the returned pointer, as usual - wxGridCellAttr *GetOrCreateCellAttr(int row, int col) const; - - - // shortcuts for setting the column parameters - - // set the format for the data in the column: default is string - void SetColFormatBool(int col); - void SetColFormatNumber(int col); - void SetColFormatFloat(int col, int width = -1, int precision = -1); - void SetColFormatCustom(int col, const wxString& typeName); - - void EnableGridLines( bool enable = true ); - bool GridLinesEnabled() { return m_gridLinesEnabled; } - - // ------ row and col formatting - // - int GetDefaultRowSize(); - int GetRowSize( int row ); - int GetDefaultColSize(); - int GetColSize( int col ); - wxColour GetDefaultCellBackgroundColour(); - wxColour GetCellBackgroundColour( int row, int col ); - wxColour GetDefaultCellTextColour(); - wxColour GetCellTextColour( int row, int col ); - wxFont GetDefaultCellFont(); - wxFont GetCellFont( int row, int col ); - void GetDefaultCellAlignment( int *horiz, int *vert ); - void GetCellAlignment( int row, int col, int *horiz, int *vert ); - bool GetDefaultCellOverflow(); - bool GetCellOverflow( int row, int col ); - void GetCellSize( int row, int col, int *num_rows, int *num_cols ); - - void SetDefaultRowSize( int height, bool resizeExistingRows = false ); - void SetRowSize( int row, int height ); - void SetDefaultColSize( int width, bool resizeExistingCols = false ); - - void SetColSize( int col, int width ); - - //Column positions - int GetColAt( int colPos ) const - { - if ( m_colAt.IsEmpty() ) - return colPos; - else - return m_colAt[colPos]; - } - - void SetColPos( int colID, int newPos ); - - int GetColPos( int colID ) const - { - if ( m_colAt.IsEmpty() ) - return colID; - else - { - for ( int i = 0; i < m_numCols; i++ ) - { - if ( m_colAt[i] == colID ) - return i; - } - } - - return -1; - } - - // automatically size the column or row to fit to its contents, if - // setAsMin is true, this optimal width will also be set as minimal width - // for this column - void AutoSizeColumn( int col, bool setAsMin = true ) - { AutoSizeColOrRow(col, setAsMin, true); } - void AutoSizeRow( int row, bool setAsMin = true ) - { AutoSizeColOrRow(row, setAsMin, false); } - - // auto size all columns (very ineffective for big grids!) - void AutoSizeColumns( bool setAsMin = true ) - { (void)SetOrCalcColumnSizes(false, setAsMin); } - - void AutoSizeRows( bool setAsMin = true ) - { (void)SetOrCalcRowSizes(false, setAsMin); } - - // auto size the grid, that is make the columns/rows of the "right" size - // and also set the grid size to just fit its contents - void AutoSize(); - - // autosize row height depending on label text - void AutoSizeRowLabelSize( int row ); - - // autosize column width depending on label text - void AutoSizeColLabelSize( int col ); - - // column won't be resized to be lesser width - this must be called during - // the grid creation because it won't resize the column if it's already - // narrower than the minimal width - void SetColMinimalWidth( int col, int width ); - void SetRowMinimalHeight( int row, int width ); - - /* These members can be used to query and modify the minimal - * acceptable size of grid rows and columns. Call this function in - * your code which creates the grid if you want to display cells - * with a size smaller than the default acceptable minimum size. - * Like the members SetColMinimalWidth and SetRowMinimalWidth, - * the existing rows or columns will not be checked/resized. - */ - void SetColMinimalAcceptableWidth( int width ); - void SetRowMinimalAcceptableHeight( int width ); - int GetColMinimalAcceptableWidth() const; - int GetRowMinimalAcceptableHeight() const; - - void SetDefaultCellBackgroundColour( const wxColour& ); - void SetCellBackgroundColour( int row, int col, const wxColour& ); - void SetDefaultCellTextColour( const wxColour& ); - - void SetCellTextColour( int row, int col, const wxColour& ); - void SetDefaultCellFont( const wxFont& ); - void SetCellFont( int row, int col, const wxFont& ); - void SetDefaultCellAlignment( int horiz, int vert ); - void SetCellAlignment( int row, int col, int horiz, int vert ); - void SetDefaultCellOverflow( bool allow ); - void SetCellOverflow( int row, int col, bool allow ); - void SetCellSize( int row, int col, int num_rows, int num_cols ); - - // takes ownership of the pointer - void SetDefaultRenderer(wxGridCellRenderer *renderer); - void SetCellRenderer(int row, int col, wxGridCellRenderer *renderer); - wxGridCellRenderer *GetDefaultRenderer() const; - wxGridCellRenderer* GetCellRenderer(int row, int col); - - // takes ownership of the pointer - void SetDefaultEditor(wxGridCellEditor *editor); - void SetCellEditor(int row, int col, wxGridCellEditor *editor); - wxGridCellEditor *GetDefaultEditor() const; - wxGridCellEditor* GetCellEditor(int row, int col); - - - - // ------ cell value accessors - // - wxString GetCellValue( int row, int col ) - { - if ( m_table ) - { - return m_table->GetValue( row, col ); - } - else - { - return wxEmptyString; - } - } - - wxString GetCellValue( const wxGridCellCoords& coords ) - { return GetCellValue( coords.GetRow(), coords.GetCol() ); } - - void SetCellValue( int row, int col, const wxString& s ); - void SetCellValue( const wxGridCellCoords& coords, const wxString& s ) - { SetCellValue( coords.GetRow(), coords.GetCol(), s ); } - - // returns true if the cell can't be edited - bool IsReadOnly(int row, int col) const; - - // make the cell editable/readonly - void SetReadOnly(int row, int col, bool isReadOnly = true); - - // ------ select blocks of cells - // - void SelectRow( int row, bool addToSelected = false ); - void SelectCol( int col, bool addToSelected = false ); - - void SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol, - bool addToSelected = false ); - - void SelectBlock( const wxGridCellCoords& topLeft, - const wxGridCellCoords& bottomRight, - bool addToSelected = false ) - { SelectBlock( topLeft.GetRow(), topLeft.GetCol(), - bottomRight.GetRow(), bottomRight.GetCol(), - addToSelected ); } - - void SelectAll(); - - bool IsSelection(); - - // ------ deselect blocks or cells - // - void DeselectRow( int row ); - void DeselectCol( int col ); - void DeselectCell( int row, int col ); - - void ClearSelection(); - - bool IsInSelection( int row, int col ) const; - - bool IsInSelection( const wxGridCellCoords& coords ) const - { return IsInSelection( coords.GetRow(), coords.GetCol() ); } - - wxGridCellCoordsArray GetSelectedCells() const; - wxGridCellCoordsArray GetSelectionBlockTopLeft() const; - wxGridCellCoordsArray GetSelectionBlockBottomRight() const; - wxArrayInt GetSelectedRows() const; - wxArrayInt GetSelectedCols() const; - - // This function returns the rectangle that encloses the block of cells - // limited by TopLeft and BottomRight cell in device coords and clipped - // to the client size of the grid window. - // - wxRect BlockToDeviceRect( const wxGridCellCoords & topLeft, - const wxGridCellCoords & bottomRight ); - - // Access or update the selection fore/back colours - wxColour GetSelectionBackground() const - { return m_selectionBackground; } - wxColour GetSelectionForeground() const - { return m_selectionForeground; } - - void SetSelectionBackground(const wxColour& c) { m_selectionBackground = c; } - void SetSelectionForeground(const wxColour& c) { m_selectionForeground = c; } - - - // Methods for a registry for mapping data types to Renderers/Editors - void RegisterDataType(const wxString& typeName, - wxGridCellRenderer* renderer, - wxGridCellEditor* editor); - // DJC MAPTEK - virtual wxGridCellEditor* GetDefaultEditorForCell(int row, int col) const; - wxGridCellEditor* GetDefaultEditorForCell(const wxGridCellCoords& c) const - { return GetDefaultEditorForCell(c.GetRow(), c.GetCol()); } - virtual wxGridCellRenderer* GetDefaultRendererForCell(int row, int col) const; - virtual wxGridCellEditor* GetDefaultEditorForType(const wxString& typeName) const; - virtual wxGridCellRenderer* GetDefaultRendererForType(const wxString& typeName) const; - - // grid may occupy more space than needed for its rows/columns, this - // function allows to set how big this extra space is - void SetMargins(int extraWidth, int extraHeight) - { - m_extraWidth = extraWidth; - m_extraHeight = extraHeight; - - CalcDimensions(); - } - - // Accessors for component windows - wxWindow* GetGridWindow() { return (wxWindow*)m_gridWin; } - wxWindow* GetGridRowLabelWindow() { return (wxWindow*)m_rowLabelWin; } - wxWindow* GetGridColLabelWindow() { return (wxWindow*)m_colLabelWin; } - wxWindow* GetGridCornerLabelWindow() { return (wxWindow*)m_cornerLabelWin; } - - // Allow adjustment of scroll increment. The default is (15, 15). - void SetScrollLineX(int x) { m_scrollLineX = x; } - void SetScrollLineY(int y) { m_scrollLineY = y; } - int GetScrollLineX() const { return m_scrollLineX; } - int GetScrollLineY() const { return m_scrollLineY; } - - // Implementation - int GetScrollX(int x) const - { - return (x + GetScrollLineX() - 1) / GetScrollLineX(); - } - - int GetScrollY(int y) const - { - return (y + GetScrollLineY() - 1) / GetScrollLineY(); - } - - - // override some base class functions - virtual bool Enable(bool enable = true); - - - // ------ For compatibility with previous wxGrid only... - // - // ************************************************ - // ** Don't use these in new code because they ** - // ** are liable to disappear in a future ** - // ** revision ** - // ************************************************ - // - - wxGrid( wxWindow *parent, - int x, int y, int w = wxDefaultCoord, int h = wxDefaultCoord, - long style = wxWANTS_CHARS, - const wxString& name = wxPanelNameStr ) - : wxScrolledWindow( parent, wxID_ANY, wxPoint(x,y), wxSize(w,h), - (style|wxWANTS_CHARS), name ) - { - Create(); - } - - void SetCellValue( const wxString& val, int row, int col ) - { SetCellValue( row, col, val ); } - - void UpdateDimensions() - { CalcDimensions(); } - - int GetRows() { return GetNumberRows(); } - int GetCols() { return GetNumberCols(); } - int GetCursorRow() { return GetGridCursorRow(); } - int GetCursorColumn() { return GetGridCursorCol(); } - - int GetScrollPosX() { return 0; } - int GetScrollPosY() { return 0; } - - void SetScrollX( int WXUNUSED(x) ) { } - void SetScrollY( int WXUNUSED(y) ) { } - - void SetColumnWidth( int col, int width ) - { SetColSize( col, width ); } - - int GetColumnWidth( int col ) - { return GetColSize( col ); } - - void SetRowHeight( int row, int height ) - { SetRowSize( row, height ); } - - // GetRowHeight() is below - - int GetViewHeight() // returned num whole rows visible - { return 0; } - - int GetViewWidth() // returned num whole cols visible - { return 0; } - - void SetLabelSize( int orientation, int sz ) - { - if ( orientation == wxHORIZONTAL ) - SetColLabelSize( sz ); - else - SetRowLabelSize( sz ); - } - - int GetLabelSize( int orientation ) - { - if ( orientation == wxHORIZONTAL ) - return GetColLabelSize(); - else - return GetRowLabelSize(); - } - - void SetLabelAlignment( int orientation, int align ) - { - if ( orientation == wxHORIZONTAL ) - SetColLabelAlignment( align, -1 ); - else - SetRowLabelAlignment( align, -1 ); - } - - int GetLabelAlignment( int orientation, int WXUNUSED(align) ) - { - int h, v; - if ( orientation == wxHORIZONTAL ) - { - GetColLabelAlignment( &h, &v ); - return h; - } - else - { - GetRowLabelAlignment( &h, &v ); - return h; - } - } - - void SetLabelValue( int orientation, const wxString& val, int pos ) - { - if ( orientation == wxHORIZONTAL ) - SetColLabelValue( pos, val ); - else - SetRowLabelValue( pos, val ); - } - - wxString GetLabelValue( int orientation, int pos) - { - if ( orientation == wxHORIZONTAL ) - return GetColLabelValue( pos ); - else - return GetRowLabelValue( pos ); - } - - wxFont GetCellTextFont() const - { return m_defaultCellAttr->GetFont(); } - - wxFont GetCellTextFont(int WXUNUSED(row), int WXUNUSED(col)) const - { return m_defaultCellAttr->GetFont(); } - - void SetCellTextFont(const wxFont& fnt) - { SetDefaultCellFont( fnt ); } - - void SetCellTextFont(const wxFont& fnt, int row, int col) - { SetCellFont( row, col, fnt ); } - - void SetCellTextColour(const wxColour& val, int row, int col) - { SetCellTextColour( row, col, val ); } - - void SetCellTextColour(const wxColour& col) - { SetDefaultCellTextColour( col ); } - - void SetCellBackgroundColour(const wxColour& col) - { SetDefaultCellBackgroundColour( col ); } - - void SetCellBackgroundColour(const wxColour& colour, int row, int col) - { SetCellBackgroundColour( row, col, colour ); } - - bool GetEditable() { return IsEditable(); } - void SetEditable( bool edit = true ) { EnableEditing( edit ); } - bool GetEditInPlace() { return IsCellEditControlEnabled(); } - - void SetEditInPlace(bool WXUNUSED(edit) = true) { } - - void SetCellAlignment( int align, int row, int col) - { SetCellAlignment(row, col, align, wxALIGN_CENTER); } - void SetCellAlignment( int WXUNUSED(align) ) {} - void SetCellBitmap(wxBitmap *WXUNUSED(bitmap), int WXUNUSED(row), int WXUNUSED(col)) - { } - void SetDividerPen(const wxPen& WXUNUSED(pen)) { } - wxPen& GetDividerPen() const; - void OnActivate(bool WXUNUSED(active)) {} - - // ******** End of compatibility functions ********** - - - - // ------ control IDs - enum { wxGRID_CELLCTRL = 2000, - wxGRID_TOPCTRL }; - - // ------ control types - enum { wxGRID_TEXTCTRL = 2100, - wxGRID_CHECKBOX, - wxGRID_CHOICE, - wxGRID_COMBOBOX }; - - // overridden wxWindow methods - virtual void Fit(); - -protected: - virtual wxSize DoGetBestSize() const; - - bool m_created; - - wxGridWindow *m_gridWin; - wxGridRowLabelWindow *m_rowLabelWin; - wxGridColLabelWindow *m_colLabelWin; - wxGridCornerLabelWindow *m_cornerLabelWin; - - wxGridTableBase *m_table; - bool m_ownTable; - - int m_numRows; - int m_numCols; - - wxGridCellCoords m_currentCellCoords; - - wxGridCellCoords m_selectingTopLeft; - wxGridCellCoords m_selectingBottomRight; - wxGridCellCoords m_selectingKeyboard; - wxGridSelection *m_selection; - wxColour m_selectionBackground; - wxColour m_selectionForeground; - - // NB: *never* access m_row/col arrays directly because they are created - // on demand, *always* use accessor functions instead! - - // init the m_rowHeights/Bottoms arrays with default values - void InitRowHeights(); - - int m_defaultRowHeight; - int m_minAcceptableRowHeight; - wxArrayInt m_rowHeights; - wxArrayInt m_rowBottoms; - - // init the m_colWidths/Rights arrays - void InitColWidths(); - - int m_defaultColWidth; - int m_minAcceptableColWidth; - wxArrayInt m_colWidths; - wxArrayInt m_colRights; - - // get the col/row coords - int GetColWidth(int col) const; - int GetColLeft(int col) const; - int GetColRight(int col) const; - - // this function must be public for compatibility... -public: - int GetRowHeight(int row) const; -protected: - - int GetRowTop(int row) const; - int GetRowBottom(int row) const; - - int m_rowLabelWidth; - int m_colLabelHeight; - - // the size of the margin left to the right and bottom of the cell area - int m_extraWidth, - m_extraHeight; - - wxColour m_labelBackgroundColour; - wxColour m_labelTextColour; - wxFont m_labelFont; - - int m_rowLabelHorizAlign; - int m_rowLabelVertAlign; - int m_colLabelHorizAlign; - int m_colLabelVertAlign; - int m_colLabelTextOrientation; - - bool m_defaultRowLabelValues; - bool m_defaultColLabelValues; - - wxColour m_gridLineColour; - bool m_gridLinesEnabled; - wxColour m_cellHighlightColour; - int m_cellHighlightPenWidth; - int m_cellHighlightROPenWidth; - - - // common part of AutoSizeColumn/Row() and GetBestSize() - int SetOrCalcColumnSizes(bool calcOnly, bool setAsMin = true); - int SetOrCalcRowSizes(bool calcOnly, bool setAsMin = true); - - // common part of AutoSizeColumn/Row() - void AutoSizeColOrRow(int n, bool setAsMin, bool column /* or row? */); - - // if a column has a minimal width, it will be the value for it in this - // hash table - wxLongToLongHashMap m_colMinWidths, - m_rowMinHeights; - - // get the minimal width of the given column/row - int GetColMinimalWidth(int col) const; - int GetRowMinimalHeight(int col) const; - - // do we have some place to store attributes in? - bool CanHaveAttributes(); - - // cell attribute cache (currently we only cache 1, may be will do - // more/better later) - struct CachedAttr - { - int row, col; - wxGridCellAttr *attr; - } m_attrCache; - - // invalidates the attribute cache - void ClearAttrCache(); - - // adds an attribute to cache - void CacheAttr(int row, int col, wxGridCellAttr *attr) const; - - // looks for an attr in cache, returns true if found - bool LookupAttr(int row, int col, wxGridCellAttr **attr) const; - - // looks for the attr in cache, if not found asks the table and caches the - // result - wxGridCellAttr *GetCellAttr(int row, int col) const; - wxGridCellAttr *GetCellAttr(const wxGridCellCoords& coords ) - { return GetCellAttr( coords.GetRow(), coords.GetCol() ); } - - // the default cell attr object for cells that don't have their own - wxGridCellAttr* m_defaultCellAttr; - - - bool m_inOnKeyDown; - int m_batchCount; - - - wxGridTypeRegistry* m_typeRegistry; - - enum CursorMode - { - WXGRID_CURSOR_SELECT_CELL, - WXGRID_CURSOR_RESIZE_ROW, - WXGRID_CURSOR_RESIZE_COL, - WXGRID_CURSOR_SELECT_ROW, - WXGRID_CURSOR_SELECT_COL, - WXGRID_CURSOR_MOVE_COL - }; - - // this method not only sets m_cursorMode but also sets the correct cursor - // for the given mode and, if captureMouse is not false releases the mouse - // if it was captured and captures it if it must be captured - // - // for this to work, you should always use it and not set m_cursorMode - // directly! - void ChangeCursorMode(CursorMode mode, - wxWindow *win = (wxWindow *)NULL, - bool captureMouse = true); - - wxWindow *m_winCapture; // the window which captured the mouse - CursorMode m_cursorMode; - - //Column positions - wxArrayInt m_colAt; - int m_moveToCol; - - bool m_canDragRowSize; - bool m_canDragColSize; - bool m_canDragColMove; - bool m_canDragGridSize; - bool m_canDragCell; - int m_dragLastPos; - int m_dragRowOrCol; - bool m_isDragging; - wxPoint m_startDragPos; - - bool m_waitForSlowClick; - - wxGridCellCoords m_selectionStart; - - wxCursor m_rowResizeCursor; - wxCursor m_colResizeCursor; - - bool m_editable; // applies to whole grid - bool m_cellEditCtrlEnabled; // is in-place edit currently shown? - - int m_scrollLineX; // X scroll increment - int m_scrollLineY; // Y scroll increment - - void Create(); - void Init(); - void CalcDimensions(); - void CalcWindowSizes(); - bool Redimension( wxGridTableMessage& ); - - - int SendEvent( const wxEventType, int row, int col, wxMouseEvent& ); - int SendEvent( const wxEventType, int row, int col ); - int SendEvent( const wxEventType type) - { - return SendEvent(type, - m_currentCellCoords.GetRow(), - m_currentCellCoords.GetCol()); - } - - void OnPaint( wxPaintEvent& ); - void OnSize( wxSizeEvent& ); - void OnKeyDown( wxKeyEvent& ); - void OnKeyUp( wxKeyEvent& ); - void OnChar( wxKeyEvent& ); - void OnEraseBackground( wxEraseEvent& ); - - - void SetCurrentCell( const wxGridCellCoords& coords ); - void SetCurrentCell( int row, int col ) - { SetCurrentCell( wxGridCellCoords(row, col) ); } - - void HighlightBlock( int topRow, int leftCol, int bottomRow, int rightCol ); - - void HighlightBlock( const wxGridCellCoords& topLeft, - const wxGridCellCoords& bottomRight ) - { HighlightBlock( topLeft.GetRow(), topLeft.GetCol(), - bottomRight.GetRow(), bottomRight.GetCol() ); } - - // ------ functions to get/send data (see also public functions) - // - bool GetModelValues(); - bool SetModelValues(); - -private: - // Calculate the minimum acceptable size for labels area - wxCoord CalcColOrRowLabelAreaMinSize(bool column /* or row? */); - - friend class WXDLLIMPEXP_FWD_ADV wxGridSelection; - - DECLARE_DYNAMIC_CLASS( wxGrid ) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxGrid) -}; - - -// ---------------------------------------------------------------------------- -// Grid event class and event types -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxGridEvent : public wxNotifyEvent -{ -public: - wxGridEvent() - : wxNotifyEvent(), m_row(-1), m_col(-1), m_x(-1), m_y(-1), - m_selecting(0), m_control(0), m_meta(0), m_shift(0), m_alt(0) - { - } - - wxGridEvent(int id, wxEventType type, wxObject* obj, - int row=-1, int col=-1, int x=-1, int y=-1, bool sel = true, - bool control = false, bool shift = false, bool alt = false, bool meta = false); - - virtual int GetRow() { return m_row; } - virtual int GetCol() { return m_col; } - wxPoint GetPosition() { return wxPoint( m_x, m_y ); } - bool Selecting() { return m_selecting; } - bool ControlDown() { return m_control; } - bool MetaDown() { return m_meta; } - bool ShiftDown() { return m_shift; } - bool AltDown() { return m_alt; } - bool CmdDown() - { -#if defined(__WXMAC__) || defined(__WXCOCOA__) - return MetaDown(); -#else - return ControlDown(); -#endif - } - - virtual wxEvent *Clone() const { return new wxGridEvent(*this); } - -protected: - int m_row; - int m_col; - int m_x; - int m_y; - bool m_selecting; - bool m_control; - bool m_meta; - bool m_shift; - bool m_alt; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridEvent) -}; - -class WXDLLIMPEXP_ADV wxGridSizeEvent : public wxNotifyEvent -{ -public: - wxGridSizeEvent() - : wxNotifyEvent(), m_rowOrCol(-1), m_x(-1), m_y(-1), - m_control(0), m_meta(0), m_shift(0), m_alt(0) - { - } - - wxGridSizeEvent(int id, wxEventType type, wxObject* obj, - int rowOrCol=-1, int x=-1, int y=-1, - bool control = false, bool shift = false, bool alt = false, bool meta = false); - - int GetRowOrCol() { return m_rowOrCol; } - wxPoint GetPosition() { return wxPoint( m_x, m_y ); } - bool ControlDown() { return m_control; } - bool MetaDown() { return m_meta; } - bool ShiftDown() { return m_shift; } - bool AltDown() { return m_alt; } - bool CmdDown() - { -#if defined(__WXMAC__) || defined(__WXCOCOA__) - return MetaDown(); -#else - return ControlDown(); -#endif - } - - virtual wxEvent *Clone() const { return new wxGridSizeEvent(*this); } - -protected: - int m_rowOrCol; - int m_x; - int m_y; - bool m_control; - bool m_meta; - bool m_shift; - bool m_alt; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridSizeEvent) -}; - - -class WXDLLIMPEXP_ADV wxGridRangeSelectEvent : public wxNotifyEvent -{ -public: - wxGridRangeSelectEvent() - : wxNotifyEvent() - { - m_topLeft = wxGridNoCellCoords; - m_bottomRight = wxGridNoCellCoords; - m_selecting = false; - m_control = false; - m_meta = false; - m_shift = false; - m_alt = false; - } - - wxGridRangeSelectEvent(int id, wxEventType type, wxObject* obj, - const wxGridCellCoords& topLeft, - const wxGridCellCoords& bottomRight, - bool sel = true, - bool control = false, bool shift = false, - bool alt = false, bool meta = false); - - wxGridCellCoords GetTopLeftCoords() { return m_topLeft; } - wxGridCellCoords GetBottomRightCoords() { return m_bottomRight; } - int GetTopRow() { return m_topLeft.GetRow(); } - int GetBottomRow() { return m_bottomRight.GetRow(); } - int GetLeftCol() { return m_topLeft.GetCol(); } - int GetRightCol() { return m_bottomRight.GetCol(); } - bool Selecting() { return m_selecting; } - bool ControlDown() { return m_control; } - bool MetaDown() { return m_meta; } - bool ShiftDown() { return m_shift; } - bool AltDown() { return m_alt; } - bool CmdDown() - { -#if defined(__WXMAC__) || defined(__WXCOCOA__) - return MetaDown(); -#else - return ControlDown(); -#endif - } - - virtual wxEvent *Clone() const { return new wxGridRangeSelectEvent(*this); } - -protected: - wxGridCellCoords m_topLeft; - wxGridCellCoords m_bottomRight; - bool m_selecting; - bool m_control; - bool m_meta; - bool m_shift; - bool m_alt; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridRangeSelectEvent) -}; - - -class WXDLLIMPEXP_ADV wxGridEditorCreatedEvent : public wxCommandEvent { -public: - wxGridEditorCreatedEvent() - : wxCommandEvent() - { - m_row = 0; - m_col = 0; - m_ctrl = NULL; - } - - wxGridEditorCreatedEvent(int id, wxEventType type, wxObject* obj, - int row, int col, wxControl* ctrl); - - int GetRow() { return m_row; } - int GetCol() { return m_col; } - wxControl* GetControl() { return m_ctrl; } - void SetRow(int row) { m_row = row; } - void SetCol(int col) { m_col = col; } - void SetControl(wxControl* ctrl) { m_ctrl = ctrl; } - - virtual wxEvent *Clone() const { return new wxGridEditorCreatedEvent(*this); } - -private: - int m_row; - int m_col; - wxControl* m_ctrl; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridEditorCreatedEvent) -}; - - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_CELL_LEFT_CLICK, 1580) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_CELL_RIGHT_CLICK, 1581) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_CELL_LEFT_DCLICK, 1582) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_CELL_RIGHT_DCLICK, 1583) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_LABEL_LEFT_CLICK, 1584) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_LABEL_RIGHT_CLICK, 1585) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_LABEL_LEFT_DCLICK, 1586) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_LABEL_RIGHT_DCLICK, 1587) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_ROW_SIZE, 1588) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_COL_SIZE, 1589) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_RANGE_SELECT, 1590) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_CELL_CHANGE, 1591) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_SELECT_CELL, 1592) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_EDITOR_SHOWN, 1593) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_EDITOR_HIDDEN, 1594) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_EDITOR_CREATED, 1595) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_CELL_BEGIN_DRAG, 1596) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_GRID_COL_MOVE, 1597) -END_DECLARE_EVENT_TYPES() - - -typedef void (wxEvtHandler::*wxGridEventFunction)(wxGridEvent&); -typedef void (wxEvtHandler::*wxGridSizeEventFunction)(wxGridSizeEvent&); -typedef void (wxEvtHandler::*wxGridRangeSelectEventFunction)(wxGridRangeSelectEvent&); -typedef void (wxEvtHandler::*wxGridEditorCreatedEventFunction)(wxGridEditorCreatedEvent&); - -#define wxGridEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxGridEventFunction, &func) - -#define wxGridSizeEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxGridSizeEventFunction, &func) - -#define wxGridRangeSelectEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxGridRangeSelectEventFunction, &func) - -#define wxGridEditorCreatedEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxGridEditorCreatedEventFunction, &func) - -#define wx__DECLARE_GRIDEVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_GRID_ ## evt, id, wxGridEventHandler(fn)) - -#define wx__DECLARE_GRIDSIZEEVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_GRID_ ## evt, id, wxGridSizeEventHandler(fn)) - -#define wx__DECLARE_GRIDRANGESELEVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_GRID_ ## evt, id, wxGridRangeSelectEventHandler(fn)) - -#define wx__DECLARE_GRIDEDITOREVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_GRID_ ## evt, id, wxGridEditorCreatedEventHandler(fn)) - -#define EVT_GRID_CMD_CELL_LEFT_CLICK(id, fn) wx__DECLARE_GRIDEVT(CELL_LEFT_CLICK, id, fn) -#define EVT_GRID_CMD_CELL_RIGHT_CLICK(id, fn) wx__DECLARE_GRIDEVT(CELL_RIGHT_CLICK, id, fn) -#define EVT_GRID_CMD_CELL_LEFT_DCLICK(id, fn) wx__DECLARE_GRIDEVT(CELL_LEFT_DCLICK, id, fn) -#define EVT_GRID_CMD_CELL_RIGHT_DCLICK(id, fn) wx__DECLARE_GRIDEVT(CELL_RIGHT_DCLICK, id, fn) -#define EVT_GRID_CMD_LABEL_LEFT_CLICK(id, fn) wx__DECLARE_GRIDEVT(LABEL_LEFT_CLICK, id, fn) -#define EVT_GRID_CMD_LABEL_RIGHT_CLICK(id, fn) wx__DECLARE_GRIDEVT(LABEL_RIGHT_CLICK, id, fn) -#define EVT_GRID_CMD_LABEL_LEFT_DCLICK(id, fn) wx__DECLARE_GRIDEVT(LABEL_LEFT_DCLICK, id, fn) -#define EVT_GRID_CMD_LABEL_RIGHT_DCLICK(id, fn) wx__DECLARE_GRIDEVT(LABEL_RIGHT_DCLICK, id, fn) -#define EVT_GRID_CMD_ROW_SIZE(id, fn) wx__DECLARE_GRIDSIZEEVT(ROW_SIZE, id, fn) -#define EVT_GRID_CMD_COL_SIZE(id, fn) wx__DECLARE_GRIDSIZEEVT(COL_SIZE, id, fn) -#define EVT_GRID_CMD_COL_MOVE(id, fn) wx__DECLARE_GRIDEVT(COL_MOVE, id, fn) -#define EVT_GRID_CMD_RANGE_SELECT(id, fn) wx__DECLARE_GRIDRANGESELEVT(RANGE_SELECT, id, fn) -#define EVT_GRID_CMD_CELL_CHANGE(id, fn) wx__DECLARE_GRIDEVT(CELL_CHANGE, id, fn) -#define EVT_GRID_CMD_SELECT_CELL(id, fn) wx__DECLARE_GRIDEVT(SELECT_CELL, id, fn) -#define EVT_GRID_CMD_EDITOR_SHOWN(id, fn) wx__DECLARE_GRIDEVT(EDITOR_SHOWN, id, fn) -#define EVT_GRID_CMD_EDITOR_HIDDEN(id, fn) wx__DECLARE_GRIDEVT(EDITOR_HIDDEN, id, fn) -#define EVT_GRID_CMD_EDITOR_CREATED(id, fn) wx__DECLARE_GRIDEDITOREVT(EDITOR_CREATED, id, fn) -#define EVT_GRID_CMD_CELL_BEGIN_DRAG(id, fn) wx__DECLARE_GRIDEVT(CELL_BEGIN_DRAG, id, fn) - -// same as above but for any id (exists mainly for backwards compatibility but -// then it's also true that you rarely have multiple grid in the same window) -#define EVT_GRID_CELL_LEFT_CLICK(fn) EVT_GRID_CMD_CELL_LEFT_CLICK(wxID_ANY, fn) -#define EVT_GRID_CELL_RIGHT_CLICK(fn) EVT_GRID_CMD_CELL_RIGHT_CLICK(wxID_ANY, fn) -#define EVT_GRID_CELL_LEFT_DCLICK(fn) EVT_GRID_CMD_CELL_LEFT_DCLICK(wxID_ANY, fn) -#define EVT_GRID_CELL_RIGHT_DCLICK(fn) EVT_GRID_CMD_CELL_RIGHT_DCLICK(wxID_ANY, fn) -#define EVT_GRID_LABEL_LEFT_CLICK(fn) EVT_GRID_CMD_LABEL_LEFT_CLICK(wxID_ANY, fn) -#define EVT_GRID_LABEL_RIGHT_CLICK(fn) EVT_GRID_CMD_LABEL_RIGHT_CLICK(wxID_ANY, fn) -#define EVT_GRID_LABEL_LEFT_DCLICK(fn) EVT_GRID_CMD_LABEL_LEFT_DCLICK(wxID_ANY, fn) -#define EVT_GRID_LABEL_RIGHT_DCLICK(fn) EVT_GRID_CMD_LABEL_RIGHT_DCLICK(wxID_ANY, fn) -#define EVT_GRID_ROW_SIZE(fn) EVT_GRID_CMD_ROW_SIZE(wxID_ANY, fn) -#define EVT_GRID_COL_SIZE(fn) EVT_GRID_CMD_COL_SIZE(wxID_ANY, fn) -#define EVT_GRID_COL_MOVE(fn) EVT_GRID_CMD_COL_MOVE(wxID_ANY, fn) -#define EVT_GRID_RANGE_SELECT(fn) EVT_GRID_CMD_RANGE_SELECT(wxID_ANY, fn) -#define EVT_GRID_CELL_CHANGE(fn) EVT_GRID_CMD_CELL_CHANGE(wxID_ANY, fn) -#define EVT_GRID_SELECT_CELL(fn) EVT_GRID_CMD_SELECT_CELL(wxID_ANY, fn) -#define EVT_GRID_EDITOR_SHOWN(fn) EVT_GRID_CMD_EDITOR_SHOWN(wxID_ANY, fn) -#define EVT_GRID_EDITOR_HIDDEN(fn) EVT_GRID_CMD_EDITOR_HIDDEN(wxID_ANY, fn) -#define EVT_GRID_EDITOR_CREATED(fn) EVT_GRID_CMD_EDITOR_CREATED(wxID_ANY, fn) -#define EVT_GRID_CELL_BEGIN_DRAG(fn) EVT_GRID_CMD_CELL_BEGIN_DRAG(wxID_ANY, fn) - -#if 0 // TODO: implement these ? others ? - -extern const int wxEVT_GRID_CREATE_CELL; -extern const int wxEVT_GRID_CHANGE_LABELS; -extern const int wxEVT_GRID_CHANGE_SEL_LABEL; - -#define EVT_GRID_CREATE_CELL(fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_GRID_CREATE_CELL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxGridEventFunction, &fn ), NULL ), -#define EVT_GRID_CHANGE_LABELS(fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_GRID_CHANGE_LABELS, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxGridEventFunction, &fn ), NULL ), -#define EVT_GRID_CHANGE_SEL_LABEL(fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_GRID_CHANGE_SEL_LABEL, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxGridEventFunction, &fn ), NULL ), - -#endif - -#endif // wxUSE_GRID -#endif // _WX_GENERIC_GRID_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/gridctrl.h b/desmume/src/windows/wx/include/wx/generic/gridctrl.h deleted file mode 100644 index 2581fd288..000000000 --- a/desmume/src/windows/wx/include/wx/generic/gridctrl.h +++ /dev/null @@ -1,158 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// Name: generic/gridctrl.h -// Purpose: wxGrid controls -// Author: Paul Gammans, Roger Gammans -// Modified by: -// Created: 11/04/2001 -// RCS-ID: $Id: gridctrl.h 48089 2007-08-15 11:46:57Z VZ $ -// Copyright: (c) The Computer Surgery (paul@compsurg.co.uk) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_GRIDCTRL_H_ -#define _WX_GENERIC_GRIDCTRL_H_ - -#include "wx/grid.h" - -#if wxUSE_GRID - -#define wxGRID_VALUE_CHOICEINT _T("choiceint") -#define wxGRID_VALUE_DATETIME _T("datetime") - -#if wxUSE_DATETIME - -#include "wx/datetime.h" - -// the default renderer for the cells containing Time and dates.. -class WXDLLIMPEXP_ADV wxGridCellDateTimeRenderer : public wxGridCellStringRenderer -{ -public: - wxGridCellDateTimeRenderer(const wxString& outformat = wxDefaultDateTimeFormat, - const wxString& informat = wxDefaultDateTimeFormat); - - // draw the string right aligned - virtual void Draw(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - const wxRect& rect, - int row, int col, - bool isSelected); - - virtual wxSize GetBestSize(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - int row, int col); - - virtual wxGridCellRenderer *Clone() const; - - // parameters string format is "width[,precision]" - virtual void SetParameters(const wxString& params); - -protected: - wxString GetString(const wxGrid& grid, int row, int col); - - wxString m_iformat; - wxString m_oformat; - wxDateTime m_dateDef; - wxDateTime::TimeZone m_tz; -}; - -#endif // wxUSE_DATETIME - -// the default renderer for the cells containing Time and dates.. -class WXDLLIMPEXP_ADV wxGridCellEnumRenderer : public wxGridCellStringRenderer -{ -public: - wxGridCellEnumRenderer( const wxString& choices = wxEmptyString ); - - // draw the string right aligned - virtual void Draw(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - const wxRect& rect, - int row, int col, - bool isSelected); - - virtual wxSize GetBestSize(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - int row, int col); - - virtual wxGridCellRenderer *Clone() const; - - // parameters string format is "item1[,item2[...,itemN]]" - virtual void SetParameters(const wxString& params); - -protected: - wxString GetString(const wxGrid& grid, int row, int col); - - wxArrayString m_choices; -}; - - -#if wxUSE_COMBOBOX - -class WXDLLIMPEXP_ADV wxGridCellEnumEditor : public wxGridCellChoiceEditor -{ -public: - wxGridCellEnumEditor( const wxString& choices = wxEmptyString ); - virtual ~wxGridCellEnumEditor() {} - - virtual wxGridCellEditor* Clone() const; - - virtual bool EndEdit(int row, int col, wxGrid* grid); - virtual void BeginEdit(int row, int col, wxGrid* grid); - -private: - long int m_startint; - - DECLARE_NO_COPY_CLASS(wxGridCellEnumEditor) -}; - -#endif // wxUSE_COMBOBOX - -class WXDLLIMPEXP_ADV wxGridCellAutoWrapStringEditor : public wxGridCellTextEditor -{ -public: - wxGridCellAutoWrapStringEditor() : wxGridCellTextEditor() { } - virtual void Create(wxWindow* parent, - wxWindowID id, - wxEvtHandler* evtHandler); - - virtual wxGridCellEditor *Clone() const - { return new wxGridCellAutoWrapStringEditor; } - - DECLARE_NO_COPY_CLASS(wxGridCellAutoWrapStringEditor) -}; - -class WXDLLIMPEXP_ADV wxGridCellAutoWrapStringRenderer : public wxGridCellStringRenderer -{ -public: - wxGridCellAutoWrapStringRenderer() : wxGridCellStringRenderer() { } - - virtual void Draw(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - const wxRect& rect, - int row, int col, - bool isSelected); - - virtual wxSize GetBestSize(wxGrid& grid, - wxGridCellAttr& attr, - wxDC& dc, - int row, int col); - - virtual wxGridCellRenderer *Clone() const - { return new wxGridCellAutoWrapStringRenderer; } - -private: - wxArrayString GetTextLines( wxGrid& grid, - wxDC& dc, - const wxGridCellAttr& attr, - const wxRect& rect, - int row, int col); - -}; - -#endif // wxUSE_GRID -#endif // _WX_GENERIC_GRIDCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/gridsel.h b/desmume/src/windows/wx/include/wx/generic/gridsel.h deleted file mode 100644 index fff21a368..000000000 --- a/desmume/src/windows/wx/include/wx/generic/gridsel.h +++ /dev/null @@ -1,88 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/gridsel.h -// Purpose: wxGridSelection -// Author: Stefan Neis -// Modified by: -// Created: 20/02/2000 -// RCS-ID: $$ -// Copyright: (c) Stefan Neis -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_GRIDSEL_H_ -#define _WX_GENERIC_GRIDSEL_H_ - -#include "wx/defs.h" - -#if wxUSE_GRID - -#include "wx/grid.h" - -class WXDLLIMPEXP_ADV wxGridSelection -{ -public: - wxGridSelection( wxGrid * grid, wxGrid::wxGridSelectionModes sel = - wxGrid::wxGridSelectCells ); - bool IsSelection(); - bool IsInSelection ( int row, int col ); - void SetSelectionMode(wxGrid::wxGridSelectionModes selmode); - wxGrid::wxGridSelectionModes GetSelectionMode() { return m_selectionMode; } - void SelectRow( int row, - bool ControlDown = false, bool ShiftDown = false, - bool AltDown = false, bool MetaDown = false ); - void SelectCol( int col, - bool ControlDown = false, bool ShiftDown = false, - bool AltDown = false, bool MetaDown = false ); - void SelectBlock( int topRow, int leftCol, - int bottomRow, int rightCol, - bool ControlDown = false, bool ShiftDown = false, - bool AltDown = false, bool MetaDown = false, - bool sendEvent = true ); - void SelectCell( int row, int col, - bool ControlDown = false, bool ShiftDown = false, - bool AltDown = false, bool MetaDown = false, - bool sendEvent = true ); - void ToggleCellSelection( int row, int col, - bool ControlDown = false, - bool ShiftDown = false, - bool AltDown = false, bool MetaDown = false ); - void ClearSelection(); - - void UpdateRows( size_t pos, int numRows ); - void UpdateCols( size_t pos, int numCols ); - -private: - int BlockContain( int topRow1, int leftCol1, - int bottomRow1, int rightCol1, - int topRow2, int leftCol2, - int bottomRow2, int rightCol2 ); - // returns 1, if Block1 contains Block2, - // -1, if Block2 contains Block1, - // 0, otherwise - - int BlockContainsCell( int topRow, int leftCol, - int bottomRow, int rightCol, - int row, int col ) - // returns 1, if Block contains Cell, - // 0, otherwise - { - return ( topRow <= row && row <= bottomRow && - leftCol <= col && col <= rightCol ); - } - - wxGridCellCoordsArray m_cellSelection; - wxGridCellCoordsArray m_blockSelectionTopLeft; - wxGridCellCoordsArray m_blockSelectionBottomRight; - wxArrayInt m_rowSelection; - wxArrayInt m_colSelection; - - wxGrid *m_grid; - wxGrid::wxGridSelectionModes m_selectionMode; - - friend class WXDLLIMPEXP_FWD_ADV wxGrid; - - DECLARE_NO_COPY_CLASS(wxGridSelection) -}; - -#endif // wxUSE_GRID -#endif // _WX_GENERIC_GRIDSEL_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/helpext.h b/desmume/src/windows/wx/include/wx/generic/helpext.h deleted file mode 100644 index 62d5c6748..000000000 --- a/desmume/src/windows/wx/include/wx/generic/helpext.h +++ /dev/null @@ -1,166 +0,0 @@ -/*-*- c++ -*-******************************************************** - * helpext.h - an external help controller for wxWidgets * - * * - * (C) 1998 by Karsten Ballueder (Ballueder@usa.net) * - * License: wxWindows licence * - * * - * $Id: helpext.h 50711 2007-12-15 02:57:58Z VZ $ - *******************************************************************/ - -#ifndef __WX_HELPEXT_H_ -#define __WX_HELPEXT_H_ - -#if wxUSE_HELP - -#include "wx/helpbase.h" - -/** - This class implements help via an external browser. - It requires the name of a directory containing the documentation - and a file mapping numerical Section numbers to relative URLS. - - The map file contains two or three fields per line: - numeric_id relative_URL [; comment/documentation] - - The numeric_id is the id used to look up the entry in - DisplaySection()/DisplayBlock(). The relative_URL is a filename of - an html file, relative to the help directory. The optional - comment/documentation field (after a ';') is used for keyword - searches, so some meaningful text here does not hurt. - If the documentation itself contains a ';', only the part before - that will be displayed in the listbox, but all of it used for search. - - Lines starting with ';' will be ignored. -*/ - -class WXDLLIMPEXP_ADV wxExtHelpController : public wxHelpControllerBase -{ -public: - wxExtHelpController(wxWindow* parentWindow = NULL); - virtual ~wxExtHelpController(); - - /** Tell it which browser to use. - The Netscape support will check whether Netscape is already - running (by looking at the .netscape/lock file in the user's - home directory) and tell it to load the page into the existing - window. - @param browsername The command to call a browser/html viewer. - @param isNetscape Set this to true if the browser is some variant of Netscape. - */ - void SetBrowser(const wxString& browsername = wxEmptyString, - bool isNetscape = false); - - // Set viewer: new name for SetBrowser - virtual void SetViewer(const wxString& viewer = wxEmptyString, - long flags = wxHELP_NETSCAPE); - - /** This must be called to tell the controller where to find the - documentation. - If a locale is set, look in file/localename, i.e. - If passed "/usr/local/myapp/help" and the current wxLocale is - set to be "de", then look in "/usr/local/myapp/help/de/" - first and fall back to "/usr/local/myapp/help" if that - doesn't exist. - - @param file - NOT a filename, but a directory name. - @return true on success - */ - virtual bool Initialize(const wxString& dir, int WXUNUSED(server)) - { return Initialize(dir); } - - /** This must be called to tell the controller where to find the - documentation. - If a locale is set, look in file/localename, i.e. - If passed "/usr/local/myapp/help" and the current wxLocale is - set to be "de", then look in "/usr/local/myapp/help/de/" - first and fall back to "/usr/local/myapp/help" if that - doesn't exist. - @param dir - directory name where to fine the help files - @return true on success - */ - virtual bool Initialize(const wxString& dir); - - /** If file is "", reloads file given in Initialize. - @file Name of help directory. - @return true on success - */ - virtual bool LoadFile(const wxString& file = wxEmptyString); - - /** Display list of all help entries. - @return true on success - */ - virtual bool DisplayContents(void); - /** Display help for id sectionNo. - @return true on success - */ - virtual bool DisplaySection(int sectionNo); - /** Display help for id sectionNo -- identical with DisplaySection(). - @return true on success - */ - virtual bool DisplaySection(const wxString& section); - /** Display help for URL (using DisplayHelp) or keyword (using KeywordSearch) - @return true on success - */ - virtual bool DisplayBlock(long blockNo); - /** Search comment/documentation fields in map file and present a - list to chose from. - @key k string to search for, empty string will list all entries - @return true on success - */ - virtual bool KeywordSearch(const wxString& k, - wxHelpSearchMode mode = wxHELP_SEARCH_ALL); - - /// does nothing - virtual bool Quit(void); - /// does nothing - virtual void OnQuit(void); - - /// Call the browser using a relative URL. - virtual bool DisplayHelp(const wxString &) ; - - /// Allows one to override the default settings for the help frame. - virtual void SetFrameParameters(const wxString& WXUNUSED(title), - const wxSize& WXUNUSED(size), - const wxPoint& WXUNUSED(pos) = wxDefaultPosition, - bool WXUNUSED(newFrameEachTime) = false) - { - // does nothing by default - } - /// Obtains the latest settings used by the help frame and the help - /// frame. - virtual wxFrame *GetFrameParameters(wxSize *WXUNUSED(size) = NULL, - wxPoint *WXUNUSED(pos) = NULL, - bool *WXUNUSED(newFrameEachTime) = NULL) - { - return (wxFrame*) NULL;// does nothing by default - } - -protected: - /// Filename of currently active map file. - wxString m_helpDir; - /// How many entries do we have in the map file? - int m_NumOfEntries; - /// A list containing all id,url,documentation triples. - wxList *m_MapList; - -private: - // parse a single line of the map file (called by LoadFile()) - // - // return true if the line was valid or false otherwise - bool ParseMapFileLine(const wxString& line); - - /// Deletes the list and all objects. - void DeleteList(void); - - - /// How to call the html viewer. - wxString m_BrowserName; - /// Is the viewer a variant of netscape? - bool m_BrowserIsNetscape; - - DECLARE_CLASS(wxExtHelpController) -}; - -#endif // wxUSE_HELP - -#endif // __WX_HELPEXT_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/icon.h b/desmume/src/windows/wx/include/wx/generic/icon.h deleted file mode 100644 index de7d23834..000000000 --- a/desmume/src/windows/wx/include/wx/generic/icon.h +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/icon.h -// Purpose: wxIcon implementation for ports where it's same as wxBitmap -// Author: Julian Smart -// Modified by: -// Created: 17/09/98 -// RCS-ID: $Id: icon.h 42752 2006-10-30 19:26:48Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_ICON_H_ -#define _WX_GENERIC_ICON_H_ - -#include "wx/bitmap.h" - -//----------------------------------------------------------------------------- -// wxIcon -//----------------------------------------------------------------------------- - -#ifndef wxICON_DEFAULT_BITMAP_TYPE -#define wxICON_DEFAULT_BITMAP_TYPE wxBITMAP_TYPE_XPM -#endif - -class WXDLLIMPEXP_CORE wxIcon: public wxBitmap -{ -public: - wxIcon(); - - wxIcon( const char **bits, int width=-1, int height=-1 ); - wxIcon( char **bits, int width=-1, int height=-1 ); - - // For compatibility with wxMSW where desired size is sometimes required to - // distinguish between multiple icons in a resource. - wxIcon( const wxString& filename, - wxBitmapType type = wxICON_DEFAULT_BITMAP_TYPE, - int WXUNUSED(desiredWidth)=-1, int WXUNUSED(desiredHeight)=-1 ) : - wxBitmap(filename, type) - { - } - - wxIcon(const wxIconLocation& loc) - : wxBitmap(loc.GetFileName(), wxBITMAP_TYPE_ANY) - { - } - - // create from bitmap (which should have a mask unless it's monochrome): - // there shouldn't be any implicit bitmap -> icon conversion (i.e. no - // ctors, assignment operators...), but it's ok to have such function - void CopyFromBitmap(const wxBitmap& bmp); - -private: - DECLARE_DYNAMIC_CLASS(wxIcon) -}; - -#endif // _WX_GENERIC_ICON_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/imaglist.h b/desmume/src/windows/wx/include/wx/generic/imaglist.h deleted file mode 100644 index 92db6dc87..000000000 --- a/desmume/src/windows/wx/include/wx/generic/imaglist.h +++ /dev/null @@ -1,82 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/imaglist.h -// Purpose: -// Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling and Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __IMAGELISTH_G__ -#define __IMAGELISTH_G__ - -#include "wx/defs.h" -#include "wx/list.h" -#include "wx/icon.h" - -class WXDLLEXPORT wxDC; -class WXDLLEXPORT wxBitmap; -class WXDLLEXPORT wxColour; - - -class WXDLLEXPORT wxGenericImageList: public wxObject -{ -public: - wxGenericImageList() { m_width = m_height = 0; } - wxGenericImageList( int width, int height, bool mask = true, int initialCount = 1 ); - virtual ~wxGenericImageList(); - bool Create( int width, int height, bool mask = true, int initialCount = 1 ); - bool Create(); - - virtual int GetImageCount() const; - virtual bool GetSize( int index, int &width, int &height ) const; - - int Add( const wxBitmap& bitmap ); - int Add( const wxBitmap& bitmap, const wxBitmap& mask ); - int Add( const wxBitmap& bitmap, const wxColour& maskColour ); - wxBitmap GetBitmap(int index) const; - wxIcon GetIcon(int index) const; - bool Replace( int index, const wxBitmap &bitmap ); - bool Replace( int index, const wxBitmap &bitmap, const wxBitmap& mask ); - bool Remove( int index ); - bool RemoveAll(); - - virtual bool Draw(int index, wxDC& dc, int x, int y, - int flags = wxIMAGELIST_DRAW_NORMAL, - bool solidBackground = false); - - // Internal use only - const wxBitmap *GetBitmapPtr(int index) const; -private: - wxList m_images; - - int m_width; - int m_height; - - DECLARE_DYNAMIC_CLASS(wxGenericImageList) -}; - -#ifndef wxHAS_NATIVE_IMAGELIST - -/* - * wxImageList has to be a real class or we have problems with - * the run-time information. - */ - -class WXDLLEXPORT wxImageList: public wxGenericImageList -{ - DECLARE_DYNAMIC_CLASS(wxImageList) - -public: - wxImageList() {} - - wxImageList( int width, int height, bool mask = true, int initialCount = 1 ) - : wxGenericImageList(width, height, mask, initialCount) - { - } -}; -#endif // !wxHAS_NATIVE_IMAGELIST - -#endif // __IMAGELISTH_G__ - diff --git a/desmume/src/windows/wx/include/wx/generic/laywin.h b/desmume/src/windows/wx/include/wx/generic/laywin.h deleted file mode 100644 index ffb1f1a8d..000000000 --- a/desmume/src/windows/wx/include/wx/generic/laywin.h +++ /dev/null @@ -1,222 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: laywin.h -// Purpose: Implements a simple layout algorithm, plus -// wxSashLayoutWindow which is an example of a window with -// layout-awareness (via event handlers). This is suited to -// IDE-style window layout. -// Author: Julian Smart -// Modified by: -// Created: 04/01/98 -// RCS-ID: $Id: laywin.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LAYWIN_H_G_ -#define _WX_LAYWIN_H_G_ - -#if wxUSE_SASH - #include "wx/sashwin.h" -#endif // wxUSE_SASH - -#include "wx/event.h" - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_QUERY_LAYOUT_INFO, 1500) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_CALCULATE_LAYOUT, 1501) -END_DECLARE_EVENT_TYPES() - -enum wxLayoutOrientation -{ - wxLAYOUT_HORIZONTAL, - wxLAYOUT_VERTICAL -}; - -enum wxLayoutAlignment -{ - wxLAYOUT_NONE, - wxLAYOUT_TOP, - wxLAYOUT_LEFT, - wxLAYOUT_RIGHT, - wxLAYOUT_BOTTOM -}; - -// Not sure this is necessary -// Tell window which dimension we're sizing on -#define wxLAYOUT_LENGTH_Y 0x0008 -#define wxLAYOUT_LENGTH_X 0x0000 - -// Use most recently used length -#define wxLAYOUT_MRU_LENGTH 0x0010 - -// Only a query, so don't actually move it. -#define wxLAYOUT_QUERY 0x0100 - -/* - * This event is used to get information about window alignment, - * orientation and size. - */ - -class WXDLLIMPEXP_ADV wxQueryLayoutInfoEvent: public wxEvent -{ -public: - wxQueryLayoutInfoEvent(wxWindowID id = 0) - { - SetEventType(wxEVT_QUERY_LAYOUT_INFO); - m_requestedLength = 0; - m_flags = 0; - m_id = id; - m_alignment = wxLAYOUT_TOP; - m_orientation = wxLAYOUT_HORIZONTAL; - } - - // Read by the app - void SetRequestedLength(int length) { m_requestedLength = length; } - int GetRequestedLength() const { return m_requestedLength; } - - void SetFlags(int flags) { m_flags = flags; } - int GetFlags() const { return m_flags; } - - // Set by the app - void SetSize(const wxSize& size) { m_size = size; } - wxSize GetSize() const { return m_size; } - - void SetOrientation(wxLayoutOrientation orient) { m_orientation = orient; } - wxLayoutOrientation GetOrientation() const { return m_orientation; } - - void SetAlignment(wxLayoutAlignment align) { m_alignment = align; } - wxLayoutAlignment GetAlignment() const { return m_alignment; } - - virtual wxEvent *Clone() const { return new wxQueryLayoutInfoEvent(*this); } - -protected: - int m_flags; - int m_requestedLength; - wxSize m_size; - wxLayoutOrientation m_orientation; - wxLayoutAlignment m_alignment; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxQueryLayoutInfoEvent) -}; - -typedef void (wxEvtHandler::*wxQueryLayoutInfoEventFunction)(wxQueryLayoutInfoEvent&); - -#define EVT_QUERY_LAYOUT_INFO(func) \ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_QUERY_LAYOUT_INFO, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxQueryLayoutInfoEventFunction, & func ), NULL ), - -/* - * This event is used to take a bite out of the available client area. - */ - -class WXDLLIMPEXP_ADV wxCalculateLayoutEvent: public wxEvent -{ -public: - wxCalculateLayoutEvent(wxWindowID id = 0) - { - SetEventType(wxEVT_CALCULATE_LAYOUT); - m_flags = 0; - m_id = id; - } - - // Read by the app - void SetFlags(int flags) { m_flags = flags; } - int GetFlags() const { return m_flags; } - - // Set by the app - void SetRect(const wxRect& rect) { m_rect = rect; } - wxRect GetRect() const { return m_rect; } - - virtual wxEvent *Clone() const { return new wxCalculateLayoutEvent(*this); } - -protected: - int m_flags; - wxRect m_rect; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCalculateLayoutEvent) -}; - -typedef void (wxEvtHandler::*wxCalculateLayoutEventFunction)(wxCalculateLayoutEvent&); - -#define EVT_CALCULATE_LAYOUT(func) \ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_CALCULATE_LAYOUT, wxID_ANY, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxCalculateLayoutEventFunction, & func ), NULL ), - -#if wxUSE_SASH - -// This is window that can remember alignment/orientation, does its own layout, -// and can provide sashes too. Useful for implementing docked windows with sashes in -// an IDE-style interface. -class WXDLLIMPEXP_ADV wxSashLayoutWindow: public wxSashWindow -{ -public: - wxSashLayoutWindow() - { - Init(); - } - - wxSashLayoutWindow(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = wxT("layoutWindow")) - { - Create(parent, id, pos, size, style, name); - } - - bool Create(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = wxT("layoutWindow")); - -// Accessors - inline wxLayoutAlignment GetAlignment() const { return m_alignment; } - inline wxLayoutOrientation GetOrientation() const { return m_orientation; } - - inline void SetAlignment(wxLayoutAlignment align) { m_alignment = align; } - inline void SetOrientation(wxLayoutOrientation orient) { m_orientation = orient; } - - // Give the window default dimensions - inline void SetDefaultSize(const wxSize& size) { m_defaultSize = size; } - -// Event handlers - // Called by layout algorithm to allow window to take a bit out of the - // client rectangle, and size itself if not in wxLAYOUT_QUERY mode. - void OnCalculateLayout(wxCalculateLayoutEvent& event); - - // Called by layout algorithm to retrieve information about the window. - void OnQueryLayoutInfo(wxQueryLayoutInfoEvent& event); - -private: - void Init(); - - wxLayoutAlignment m_alignment; - wxLayoutOrientation m_orientation; - wxSize m_defaultSize; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxSashLayoutWindow) - DECLARE_EVENT_TABLE() -}; - -#endif // wxUSE_SASH - -class WXDLLIMPEXP_FWD_CORE wxMDIParentFrame; -class WXDLLIMPEXP_FWD_CORE wxFrame; - -// This class implements the layout algorithm -class WXDLLIMPEXP_ADV wxLayoutAlgorithm: public wxObject -{ -public: - wxLayoutAlgorithm() {} - -#if wxUSE_MDI_ARCHITECTURE - // The MDI client window is sized to whatever's left over. - bool LayoutMDIFrame(wxMDIParentFrame* frame, wxRect* rect = (wxRect*) NULL); -#endif // wxUSE_MDI_ARCHITECTURE - - // mainWindow is sized to whatever's left over. This function for backward - // compatibility; use LayoutWindow. - bool LayoutFrame(wxFrame* frame, wxWindow* mainWindow = (wxWindow*) NULL); - - // mainWindow is sized to whatever's left over. - bool LayoutWindow(wxWindow* frame, wxWindow* mainWindow = (wxWindow*) NULL); -}; - -#endif - // _WX_LAYWIN_H_G_ diff --git a/desmume/src/windows/wx/include/wx/generic/listctrl.h b/desmume/src/windows/wx/include/wx/generic/listctrl.h deleted file mode 100644 index 410964925..000000000 --- a/desmume/src/windows/wx/include/wx/generic/listctrl.h +++ /dev/null @@ -1,281 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/listctrl.h -// Purpose: Generic list control -// Author: Robert Roebling -// Created: 01/02/97 -// RCS-ID: $Id: listctrl.h 46432 2007-06-13 03:46:20Z SC $ -// Copyright: (c) 1998 Robert Roebling and Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_LISTCTRL_H_ -#define _WX_GENERIC_LISTCTRL_H_ - -#include "wx/textctrl.h" - -class WXDLLIMPEXP_CORE wxImageList; - -#if wxUSE_DRAG_AND_DROP -class WXDLLEXPORT wxDropTarget; -#endif - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - - -//----------------------------------------------------------------------------- -// internal classes -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxListHeaderWindow; -class WXDLLEXPORT wxListMainWindow; - -//----------------------------------------------------------------------------- -// wxListCtrl -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxGenericListCtrl: public wxControl -{ -public: - - wxGenericListCtrl(); - wxGenericListCtrl( wxWindow *parent, - wxWindowID winid = wxID_ANY, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxLC_ICON, - const wxValidator& validator = wxDefaultValidator, - const wxString &name = wxListCtrlNameStr) - { - Create(parent, winid, pos, size, style, validator, name); - } - virtual ~wxGenericListCtrl(); - - bool Create( wxWindow *parent, - wxWindowID winid = wxID_ANY, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxLC_ICON, - const wxValidator& validator = wxDefaultValidator, - const wxString &name = wxListCtrlNameStr); - - bool GetColumn( int col, wxListItem& item ) const; - bool SetColumn( int col, 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 - wxRect GetViewRect() const; - - bool GetItem( wxListItem& info ) const; - bool SetItem( wxListItem& info ) ; - long SetItem( long index, int col, const wxString& label, int imageId = -1 ); - int GetItemState( long item, long stateMask ) const; - bool SetItemState( long item, long state, long stateMask); - bool SetItemImage( long item, int image, int selImage = -1 ); - bool SetItemColumnImage( long item, long column, int image ); - wxString GetItemText( long item ) const; - void SetItemText( long item, const wxString& str ); - wxUIntPtr GetItemData( long item ) const; -#if wxABI_VERSION >= 20804 - bool SetItemPtrData(long item, wxUIntPtr data); -#endif // wxABI 2.8.4+ - bool SetItemData(long item, long data); - bool GetItemRect( long item, wxRect& rect, int code = wxLIST_RECT_BOUNDS ) const; - bool GetItemPosition( long item, wxPoint& pos ) const; - bool SetItemPosition( long item, const wxPoint& pos ); // not supported in wxGLC - int GetItemCount() const; - int GetColumnCount() const; - void SetItemSpacing( int spacing, bool isSmall = false ); - wxSize GetItemSpacing() const; - void SetItemTextColour( long item, const wxColour& col); - wxColour GetItemTextColour( long item ) const; - void SetItemBackgroundColour( long item, const wxColour &col); - wxColour GetItemBackgroundColour( long item ) const; - void SetItemFont( long item, const wxFont &f); - wxFont GetItemFont( long item ) const; - int GetSelectedItemCount() const; - wxColour GetTextColour() const; - void SetTextColour(const wxColour& col); - long GetTopItem() const; - - void SetSingleStyle( long style, bool add = true ) ; - void SetWindowStyleFlag( long style ); - void RecreateWindow() {} - long GetNextItem( long item, int geometry = wxLIST_NEXT_ALL, int state = wxLIST_STATE_DONTCARE ) const; - wxImageList *GetImageList( int which ) const; - void SetImageList( wxImageList *imageList, int which ); - void AssignImageList( wxImageList *imageList, int which ); - bool Arrange( int flag = wxLIST_ALIGN_DEFAULT ); // always wxLIST_ALIGN_LEFT in wxGLC - - void ClearAll(); - bool DeleteItem( long item ); - bool DeleteAllItems(); - bool DeleteAllColumns(); - bool DeleteColumn( int col ); - - void SetItemCount(long count); - - wxTextCtrl *EditLabel(long item, - wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)); - wxTextCtrl* GetEditControl() const; - void Edit( long item ) { EditLabel(item); } - - bool EnsureVisible( long item ); - long FindItem( long start, const wxString& str, bool partial = false ); - long FindItem( long start, wxUIntPtr data ); - long FindItem( long start, const wxPoint& pt, int direction ); // not supported in wxGLC - long HitTest( const wxPoint& point, int& flags, long *pSubItem = NULL ) const; - long InsertItem(wxListItem& info); - 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, long data ); - bool Update( long item ); - // Must provide overload to avoid hiding it (and warnings about it) - virtual void Update() { wxControl::Update(); } - - // 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); } - - // refresh items selectively (only useful for virtual list controls) - void RefreshItem(long item); - void RefreshItems(long itemFrom, long itemTo); - -#if WXWIN_COMPATIBILITY_2_6 - // obsolete, don't use - wxDEPRECATED( int GetItemSpacing( bool isSmall ) const ); -#endif // WXWIN_COMPATIBILITY_2_6 - - virtual wxVisualAttributes GetDefaultAttributes() const - { - return GetClassDefaultAttributes(GetWindowVariant()); - } - - static wxVisualAttributes - GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); - - // implementation only from now on - // ------------------------------- - - void OnInternalIdle( ); - void OnSize( wxSizeEvent &event ); - - // We have to hand down a few functions - virtual void Refresh(bool eraseBackground = true, - const wxRect *rect = NULL); - - virtual void Freeze(); - virtual void Thaw(); - - virtual bool SetBackgroundColour( const wxColour &colour ); - virtual bool SetForegroundColour( const wxColour &colour ); - virtual wxColour GetBackgroundColour() const; - virtual wxColour GetForegroundColour() const; - virtual bool SetFont( const wxFont &font ); - virtual bool SetCursor( const wxCursor &cursor ); - - virtual int GetScrollPos(int orient) const; - virtual void SetScrollPos(int orient, int pos, bool refresh = true); - -#if wxUSE_DRAG_AND_DROP - virtual void SetDropTarget( wxDropTarget *dropTarget ); - virtual wxDropTarget *GetDropTarget() const; -#endif - - virtual bool ShouldInheritColours() const { return false; } - virtual void SetFocus(); - - // implementation - // -------------- - - wxImageList *m_imageListNormal; - wxImageList *m_imageListSmall; - wxImageList *m_imageListState; // what's that ? - bool m_ownsImageListNormal, - m_ownsImageListSmall, - m_ownsImageListState; - wxListHeaderWindow *m_headerWin; - wxListMainWindow *m_mainWin; - wxCoord m_headerHeight; - -protected: - virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); - - // take into account the coordinates difference between the container - // window and the list control window itself here - virtual void DoClientToScreen( int *x, int *y ) const; - virtual void DoScreenToClient( int *x, int *y ) const; - - virtual wxSize DoGetBestSize() const; - - // return the text for the given column of the given item - virtual wxString OnGetItemText(long item, long column) const; - - // return the icon for the given item. In report view, OnGetItemImage will - // only be called for the first column. See OnGetItemColumnImage for - // details. - virtual int OnGetItemImage(long item) const; - - // return the icon for the given item and column. - virtual int OnGetItemColumnImage(long item, long column) const; - - // return the attribute for the item (may return NULL if none) - virtual wxListItemAttr *OnGetItemAttr(long item) const; - - // it calls our OnGetXXX() functions - friend class WXDLLEXPORT wxListMainWindow; - -private: - // create the header window - void CreateHeaderWindow(); - - // calculate and set height of the header - void CalculateAndSetHeaderHeight(); - - // reposition the header and the main window in the report view depending - // on whether it should be shown or not - void ResizeReportView(bool showHeader); - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxGenericListCtrl) -}; - -#if (!defined(__WXMSW__) || defined(__WXUNIVERSAL__)) && (!defined(__WXMAC__) || defined(__WXUNIVERSAL__)) -/* - * wxListCtrl has to be a real class or we have problems with - * the run-time information. - */ - -class WXDLLEXPORT wxListCtrl: public wxGenericListCtrl -{ - DECLARE_DYNAMIC_CLASS(wxListCtrl) - -public: - wxListCtrl() {} - - wxListCtrl(wxWindow *parent, wxWindowID winid = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxLC_ICON, - const wxValidator &validator = wxDefaultValidator, - const wxString &name = wxListCtrlNameStr) - : wxGenericListCtrl(parent, winid, pos, size, style, validator, name) - { - } - -}; -#endif // !__WXMSW__ || __WXUNIVERSAL__ - -#endif // _WX_GENERIC_LISTCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/logg.h b/desmume/src/windows/wx/include/wx/generic/logg.h deleted file mode 100644 index 855c0c2f3..000000000 --- a/desmume/src/windows/wx/include/wx/generic/logg.h +++ /dev/null @@ -1,129 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/logg.h -// Purpose: Assorted wxLogXXX functions, and wxLog (sink for logs) -// Author: Vadim Zeitlin -// Modified by: -// Created: 29/01/98 -// RCS-ID: $Id: logg.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LOGG_H_ -#define _WX_LOGG_H_ - -#if wxUSE_GUI - -// ---------------------------------------------------------------------------- -// the following log targets are only compiled in if the we're compiling the -// GUI part (andnot just the base one) of the library, they're implemented in -// src/generic/logg.cpp *and not src/common/log.cpp unlike all the rest) -// ---------------------------------------------------------------------------- - -#if wxUSE_TEXTCTRL - -// log everything to a text window (GUI only of course) -class WXDLLEXPORT wxLogTextCtrl : public wxLog -{ -public: - wxLogTextCtrl(wxTextCtrl *pTextCtrl); - -protected: - // implement sink function - virtual void DoLogString(const wxChar *szString, time_t t); - -private: - // the control we use - wxTextCtrl *m_pTextCtrl; - - DECLARE_NO_COPY_CLASS(wxLogTextCtrl) -}; - -#endif // wxUSE_TEXTCTRL - -// ---------------------------------------------------------------------------- -// GUI log target, the default one for wxWidgets programs -// ---------------------------------------------------------------------------- - -#if wxUSE_LOGGUI - -class WXDLLEXPORT wxLogGui : public wxLog -{ -public: - // ctor - wxLogGui(); - - // show all messages that were logged since the last Flush() - virtual void Flush(); - -protected: - virtual void DoLog(wxLogLevel level, const wxChar *szString, time_t t); - - // empty everything - void Clear(); - - wxArrayString m_aMessages; // the log message texts - wxArrayInt m_aSeverity; // one of wxLOG_XXX values - wxArrayLong m_aTimes; // the time of each message - bool m_bErrors, // do we have any errors? - m_bWarnings, // any warnings? - m_bHasMessages; // any messages at all? - -}; - -#endif // wxUSE_LOGGUI - -// ---------------------------------------------------------------------------- -// (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 -// close it, clear the log contents or save it to the file. -// ---------------------------------------------------------------------------- - -#if wxUSE_LOGWINDOW - -class WXDLLEXPORT wxLogWindow : public wxLogPassThrough -{ -public: - wxLogWindow(wxWindow *pParent, // the parent frame (can be NULL) - const wxChar *szTitle, // the title of the frame - bool bShow = true, // show window immediately? - bool bPassToOld = true); // pass messages to the old target? - - virtual ~wxLogWindow(); - - // window operations - // show/hide the log window - void Show(bool bShow = true); - // retrieve the pointer to the frame - wxFrame *GetFrame() const; - - // overridables - // called immediately after the log frame creation allowing for - // any extra initializations - virtual void OnFrameCreate(wxFrame *frame); - // called if the user closes the window interactively, will not be - // called if it is destroyed for another reason (such as when program - // exits) - return true from here to allow the frame to close, false - // to prevent this from happening - virtual bool OnFrameClose(wxFrame *frame); - // called right before the log frame is going to be deleted: will - // always be called unlike OnFrameClose() - virtual void OnFrameDelete(wxFrame *frame); - -protected: - virtual void DoLog(wxLogLevel level, const wxChar *szString, time_t t); - virtual void DoLogString(const wxChar *szString, time_t t); - -private: - wxLogFrame *m_pLogFrame; // the log frame - - DECLARE_NO_COPY_CLASS(wxLogWindow) -}; - -#endif // wxUSE_LOGWINDOW - -#endif // wxUSE_GUI - -#endif // _WX_LOGG_H_ - diff --git a/desmume/src/windows/wx/include/wx/generic/mask.h b/desmume/src/windows/wx/include/wx/generic/mask.h deleted file mode 100644 index 41c85e3c4..000000000 --- a/desmume/src/windows/wx/include/wx/generic/mask.h +++ /dev/null @@ -1,54 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/mask.h -// Purpose: generic implementation of wxMask -// Author: Vadim Zeitlin -// Created: 2006-09-28 -// RCS-ID: $Id: mask.h 41495 2006-09-28 23:02:39Z VZ $ -// Copyright: (c) 2006 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_MASKG_H_ -#define _WX_GENERIC_MASKG_H_ - -// ---------------------------------------------------------------------------- -// generic wxMask implementation -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMask : public wxMaskBase -{ -public: - wxMask() { } - wxMask(const wxBitmap& bitmap, const wxColour& colour) - { - InitFromColour(bitmap, colour); - } - -#if wxUSE_PALETTE - wxMask(const wxBitmap& bitmap, int paletteIndex) - { - Create(bitmap, paletteIndex); - } -#endif // wxUSE_PALETTE - - wxMask(const wxBitmap& bitmap) - { - InitFromMonoBitmap(bitmap); - } - - // implementation-only from now on - wxBitmap GetBitmap() const { return m_bitmap; } - -private: - // implement wxMaskBase pure virtuals - virtual void FreeData(); - virtual bool InitFromColour(const wxBitmap& bitmap, const wxColour& colour); - virtual bool InitFromMonoBitmap(const wxBitmap& bitmap); - - wxBitmap m_bitmap; - - DECLARE_DYNAMIC_CLASS(wxMask) -}; - -#endif // _WX_GENERIC_MASKG_H_ - diff --git a/desmume/src/windows/wx/include/wx/generic/mdig.h b/desmume/src/windows/wx/include/wx/generic/mdig.h deleted file mode 100644 index 99d924399..000000000 --- a/desmume/src/windows/wx/include/wx/generic/mdig.h +++ /dev/null @@ -1,335 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/mdig.h -// Purpose: Generic MDI (Multiple Document Interface) classes -// Author: Hans Van Leemputten -// Modified by: -// Created: 29/07/2002 -// RCS-ID: $Id: mdig.h 41223 2006-09-14 17:36:18Z PC $ -// Copyright: (c) Hans Van Leemputten -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MDIG_H_ -#define _WX_MDIG_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/frame.h" -#include "wx/panel.h" -#include "wx/notebook.h" - -extern WXDLLEXPORT_DATA(const wxChar) wxStatusLineNameStr[]; - - -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxGenericMDIParentFrame; -class WXDLLEXPORT wxGenericMDIClientWindow; -class WXDLLEXPORT wxGenericMDIChildFrame; - -//----------------------------------------------------------------------------- -// wxGenericMDIParentFrame -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxGenericMDIParentFrame: public wxFrame -{ -public: - wxGenericMDIParentFrame(); - wxGenericMDIParentFrame(wxWindow *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, - const wxString& name = wxFrameNameStr); - - virtual ~wxGenericMDIParentFrame(); - bool Create( wxWindow *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, - const wxString& name = wxFrameNameStr ); - -#if wxUSE_MENUS - wxMenu* GetWindowMenu() const { return m_pWindowMenu; }; - void SetWindowMenu(wxMenu* pMenu); - - virtual void SetMenuBar(wxMenuBar *pMenuBar); -#endif // wxUSE_MENUS - - void SetChildMenuBar(wxGenericMDIChildFrame *pChild); - - virtual bool ProcessEvent(wxEvent& event); - - wxGenericMDIChildFrame *GetActiveChild() const; - inline void SetActiveChild(wxGenericMDIChildFrame* pChildFrame); - - wxGenericMDIClientWindow *GetClientWindow() const; - virtual wxGenericMDIClientWindow *OnCreateClient(); - - virtual void Cascade() { /* Has no effect */ } - virtual void Tile(wxOrientation WXUNUSED(orient) = wxHORIZONTAL) { } - virtual void ArrangeIcons() { /* Has no effect */ } - virtual void ActivateNext(); - virtual void ActivatePrevious(); - -protected: - wxGenericMDIClientWindow *m_pClientWindow; - wxGenericMDIChildFrame *m_pActiveChild; -#if wxUSE_MENUS - wxMenu *m_pWindowMenu; - wxMenuBar *m_pMyMenuBar; -#endif // wxUSE_MENUS - -protected: - void Init(); - -#if wxUSE_MENUS - void RemoveWindowMenu(wxMenuBar *pMenuBar); - void AddWindowMenu(wxMenuBar *pMenuBar); - - void DoHandleMenu(wxCommandEvent &event); -#endif // wxUSE_MENUS - - virtual void DoGetClientSize(int *width, int *height) const; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxGenericMDIParentFrame) -}; - -//----------------------------------------------------------------------------- -// wxGenericMDIChildFrame -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxGenericMDIChildFrame: public wxPanel -{ -public: - wxGenericMDIChildFrame(); - wxGenericMDIChildFrame( wxGenericMDIParentFrame *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr ); - - virtual ~wxGenericMDIChildFrame(); - bool Create( wxGenericMDIParentFrame *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr ); - -#if wxUSE_MENUS - virtual void SetMenuBar( wxMenuBar *menu_bar ); - virtual wxMenuBar *GetMenuBar() const; -#endif // wxUSE_MENUS - - virtual void SetTitle(const wxString& title); - virtual wxString GetTitle() const; - - virtual void Activate(); - -#if wxUSE_STATUSBAR - // no status bars - virtual wxStatusBar* CreateStatusBar( int WXUNUSED(number) = 1, - long WXUNUSED(style) = 1, - wxWindowID WXUNUSED(winid) = 1, - const wxString& WXUNUSED(name) = wxEmptyString) - { return (wxStatusBar*)NULL; } - - virtual wxStatusBar *GetStatusBar() const { return (wxStatusBar*)NULL; } - virtual void SetStatusText( const wxString &WXUNUSED(text), int WXUNUSED(number)=0 ) {} - virtual void SetStatusWidths( int WXUNUSED(n), const int WXUNUSED(widths_field)[] ) {} -#endif - - // no size hints - virtual void DoSetSizeHints( int WXUNUSED(minW), - int WXUNUSED(minH), - int WXUNUSED(maxW) = wxDefaultCoord, - int WXUNUSED(maxH) = wxDefaultCoord, - int WXUNUSED(incW) = wxDefaultCoord, - int WXUNUSED(incH) = wxDefaultCoord) {} - -#if wxUSE_TOOLBAR - // no toolbar bars - virtual wxToolBar* CreateToolBar( long WXUNUSED(style), - wxWindowID WXUNUSED(winid), - const wxString& WXUNUSED(name) ) - { return (wxToolBar*)NULL; } - virtual wxToolBar *GetToolBar() const { return (wxToolBar*)NULL; } -#endif - - // no icon - void SetIcon( const wxIcon& WXUNUSED(icon) ) { } - void SetIcons( const wxIconBundle& WXUNUSED(icons) ) { } - - // no maximize etc - virtual void Maximize( bool WXUNUSED(maximize) = true) { /* Has no effect */ } - virtual void Restore() { /* Has no effect */ } - virtual void Iconize(bool WXUNUSED(iconize) = true) { /* Has no effect */ } - virtual bool IsMaximized() const { return true; } - virtual bool IsIconized() const { return false; } - virtual bool ShowFullScreen(bool WXUNUSED(show), long WXUNUSED(style)) { return false; } - virtual bool IsFullScreen() const { return false; } - - virtual bool IsTopLevel() const { return false; } - - void OnMenuHighlight(wxMenuEvent& event); - void OnActivate(wxActivateEvent& event); - - // The next 2 are copied from top level... - void OnCloseWindow(wxCloseEvent& event); - void OnSize(wxSizeEvent& event); - - void SetMDIParentFrame(wxGenericMDIParentFrame* parentFrame); - wxGenericMDIParentFrame* GetMDIParentFrame() const; - -protected: - wxGenericMDIParentFrame *m_pMDIParentFrame; - wxRect m_MDIRect; - wxString m_Title; - -#if wxUSE_MENUS - wxMenuBar *m_pMenuBar; -#endif // wxUSE_MENUS - -protected: - void Init(); - - virtual void DoMoveWindow(int x, int y, int width, int height); - - // This function needs to be called when a size change is confirmed, - // we needed this function to prevent any body from the outside - // changing the panel... it messes the UI layout when we would allow it. - void ApplyMDIChildFrameRect(); - -private: - DECLARE_DYNAMIC_CLASS(wxGenericMDIChildFrame) - DECLARE_EVENT_TABLE() - - friend class wxGenericMDIClientWindow; -}; - -//----------------------------------------------------------------------------- -// wxGenericMDIClientWindow -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxGenericMDIClientWindow: public wxNotebook -{ -public: - wxGenericMDIClientWindow(); - wxGenericMDIClientWindow( wxGenericMDIParentFrame *parent, long style = 0 ); - virtual ~wxGenericMDIClientWindow(); - virtual bool CreateClient( wxGenericMDIParentFrame *parent, long style = wxVSCROLL | wxHSCROLL ); - - virtual int SetSelection(size_t nPage); - -protected: - void PageChanged(int OldSelection, int newSelection); - - void OnPageChanged(wxNotebookEvent& event); - void OnSize(wxSizeEvent& event); - -private: - DECLARE_DYNAMIC_CLASS(wxGenericMDIClientWindow) - DECLARE_EVENT_TABLE() -}; - - -/* - * Define normal wxMDI classes based on wxGenericMDI - */ - -#ifndef wxUSE_GENERIC_MDI_AS_NATIVE -#if defined(__WXUNIVERSAL__) || defined(__WXPM__) || defined(__WXCOCOA__) -#define wxUSE_GENERIC_MDI_AS_NATIVE 1 -#else -#define wxUSE_GENERIC_MDI_AS_NATIVE 0 -#endif -#endif // wxUSE_GENERIC_MDI_AS_NATIVE - -#if wxUSE_GENERIC_MDI_AS_NATIVE - -class wxMDIChildFrame ; - -//----------------------------------------------------------------------------- -// wxMDIParentFrame -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxMDIParentFrame: public wxGenericMDIParentFrame -{ -public: - wxMDIParentFrame() {} - wxMDIParentFrame(wxWindow *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, - const wxString& name = wxFrameNameStr) - :wxGenericMDIParentFrame(parent, winid, title, pos, size, style, name) - { - } - - wxMDIChildFrame * GetActiveChild() const ; - - -private: - DECLARE_DYNAMIC_CLASS(wxMDIParentFrame) -}; - -//----------------------------------------------------------------------------- -// wxMDIChildFrame -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxMDIChildFrame: public wxGenericMDIChildFrame -{ -public: - wxMDIChildFrame() {} - - wxMDIChildFrame( wxGenericMDIParentFrame *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr ) - :wxGenericMDIChildFrame(parent, winid, title, pos, size, style, name) - { - } -private: - DECLARE_DYNAMIC_CLASS(wxMDIChildFrame) -}; - -//----------------------------------------------------------------------------- -// wxMDIClientWindow -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxMDIClientWindow: public wxGenericMDIClientWindow -{ -public: - wxMDIClientWindow() {} - - wxMDIClientWindow( wxGenericMDIParentFrame *parent, long style = 0 ) - :wxGenericMDIClientWindow(parent, style) - { - } - -private: - DECLARE_DYNAMIC_CLASS(wxMDIClientWindow) -}; - -#endif - -#endif - // _WX_MDIG_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/msgdlgg.h b/desmume/src/windows/wx/include/wx/generic/msgdlgg.h deleted file mode 100644 index 46c5d599e..000000000 --- a/desmume/src/windows/wx/include/wx/generic/msgdlgg.h +++ /dev/null @@ -1,44 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/msgdlgg.h -// Purpose: Generic wxMessageDialog -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: msgdlgg.h 49765 2007-11-09 18:32:38Z DE $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __MSGDLGH_G__ -#define __MSGDLGH_G__ - -#include "wx/defs.h" -#include "wx/dialog.h" - -// type is an 'or' (|) of wxOK, wxCANCEL, wxYES_NO -// Returns wxYES/NO/OK/CANCEL - -extern WXDLLEXPORT_DATA(const wxChar) wxMessageBoxCaptionStr[]; - -class WXDLLEXPORT wxGenericMessageDialog: public wxDialog, public wxMessageDialogBase -{ -DECLARE_DYNAMIC_CLASS(wxGenericMessageDialog) - -public: - wxGenericMessageDialog(wxWindow *parent, const wxString& message, - const wxString& caption = wxMessageBoxCaptionStr, - long style = wxOK|wxCENTRE, const wxPoint& pos = wxDefaultPosition); - - void OnYes(wxCommandEvent& event); - void OnNo(wxCommandEvent& event); - void OnCancel(wxCommandEvent& event); - -private: - DECLARE_EVENT_TABLE() -}; - -#if (!defined( __WXMSW__ ) && !defined( __WXMAC__) && !defined(__WXPM__) && !defined(__WXCOCOA__)) || defined(__WXUNIVERSAL__) -#define wxMessageDialog wxGenericMessageDialog -#endif - -#endif // __MSGDLGH_G__ diff --git a/desmume/src/windows/wx/include/wx/generic/notebook.h b/desmume/src/windows/wx/include/wx/generic/notebook.h deleted file mode 100644 index 2b9e109e2..000000000 --- a/desmume/src/windows/wx/include/wx/generic/notebook.h +++ /dev/null @@ -1,160 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: notebook.h -// Purpose: wxNotebook class (a.k.a. property sheet, tabbed dialog) -// Author: Julian Smart -// Modified by: -// RCS-ID: $Id: notebook.h 41738 2006-10-08 17:37:23Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_NOTEBOOK_H_ -#define _WX_NOTEBOOK_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- -#include "wx/event.h" -#include "wx/control.h" - -// ---------------------------------------------------------------------------- -// types -// ---------------------------------------------------------------------------- - -// fwd declarations -class WXDLLEXPORT wxImageList; -class WXDLLEXPORT wxWindow; -class WXDLLEXPORT wxTabView; - -// ---------------------------------------------------------------------------- -// wxNotebook -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxNotebook : public wxNotebookBase -{ -public: - // ctors - // ----- - // default for dynamic class - wxNotebook(); - // the same arguments as for wxControl (@@@ any special styles?) - wxNotebook(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxNotebookNameStr); - // Create() function - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxNotebookNameStr); - // dtor - virtual ~wxNotebook(); - - // accessors - // --------- - // Find the position of the wxNotebookPage, -1 if not found. - int FindPagePosition(wxNotebookPage* page) const; - - // set the currently selected page, return the index of the previously - // selected one (or -1 on error) - // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events - int SetSelection(size_t nPage); - // cycle thru the tabs - // void AdvanceSelection(bool bForward = true); - // get the currently selected page - int GetSelection() const { return m_nSelection; } - - // changes selected page without sending events - int ChangeSelection(size_t nPage); - - // set/get the title of a page - bool SetPageText(size_t nPage, const wxString& strText); - wxString GetPageText(size_t nPage) const; - - // get the number of rows for a control with wxNB_MULTILINE style (not all - // versions support it - they will always return 1 then) - virtual int GetRowCount() const ; - - // sets/returns item's image index in the current image list - int GetPageImage(size_t nPage) const; - 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); - - // operations - // ---------- - // remove one page from the notebook, and delete the page. - bool DeletePage(size_t nPage); - bool DeletePage(wxNotebookPage* page); - // remove one page from the notebook, without deleting the page. - bool RemovePage(size_t nPage); - bool RemovePage(wxNotebookPage* page); - virtual wxWindow* DoRemovePage(size_t nPage); - - // remove all pages - bool DeleteAllPages(); - // the same as AddPage(), but adds it at the specified position - bool InsertPage(size_t nPage, - wxNotebookPage *pPage, - const wxString& strText, - bool bSelect = false, - int imageId = -1); - - // callbacks - // --------- - void OnSize(wxSizeEvent& event); - void OnInternalIdle(); - void OnSelChange(wxNotebookEvent& event); - void OnSetFocus(wxFocusEvent& event); - void OnNavigationKey(wxNavigationKeyEvent& event); - - // base class virtuals - // ------------------- - virtual void Command(wxCommandEvent& event); - virtual void SetConstraintSizes(bool recurse = true); - virtual bool DoPhase(int nPhase); - - virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; - - // Implementation - - // wxNotebook on Motif uses a generic wxTabView to implement itself. - wxTabView *GetTabView() const { return m_tabView; } - void SetTabView(wxTabView *v) { m_tabView = v; } - - void OnMouseEvent(wxMouseEvent& event); - void OnPaint(wxPaintEvent& event); - - virtual wxRect GetAvailableClientSize(); - - // Implementation: calculate the layout of the view rect - // and resize the children if required - bool RefreshLayout(bool force = true); - -protected: - // common part of all ctors - void Init(); - - // helper functions - void ChangePage(int nOldSel, int nSel); // change pages - - int m_nSelection; // the current selection (-1 if none) - - wxTabView* m_tabView; - - DECLARE_DYNAMIC_CLASS(wxNotebook) - DECLARE_EVENT_TABLE() -}; - -#endif // _WX_NOTEBOOK_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/numdlgg.h b/desmume/src/windows/wx/include/wx/generic/numdlgg.h deleted file mode 100644 index 06c0d2f01..000000000 --- a/desmume/src/windows/wx/include/wx/generic/numdlgg.h +++ /dev/null @@ -1,79 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/numdlgg.h -// Purpose: wxNumberEntryDialog class -// Author: John Labenski -// Modified by: -// Created: 07.02.04 (extracted from textdlgg.cpp) -// RCS-ID: $Id: numdlgg.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __NUMDLGH_G__ -#define __NUMDLGH_G__ - -#include "wx/defs.h" - -#if wxUSE_NUMBERDLG - -#include "wx/dialog.h" - -#if wxUSE_SPINCTRL - class WXDLLIMPEXP_FWD_CORE wxSpinCtrl; -#else - class WXDLLIMPEXP_FWD_CORE wxTextCtrl; -#endif // wxUSE_SPINCTRL - -// ---------------------------------------------------------------------------- -// wxNumberEntryDialog: a dialog with spin control, [ok] and [cancel] buttons -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxNumberEntryDialog : public wxDialog -{ -public: - wxNumberEntryDialog(wxWindow *parent, - const wxString& message, - const wxString& prompt, - const wxString& caption, - long value, long min, long max, - const wxPoint& pos = wxDefaultPosition); - - long GetValue() const { return m_value; } - - // implementation only - void OnOK(wxCommandEvent& event); - void OnCancel(wxCommandEvent& event); - -protected: - -#if wxUSE_SPINCTRL - wxSpinCtrl *m_spinctrl; -#else - wxTextCtrl *m_spinctrl; -#endif // wxUSE_SPINCTRL - - long m_value, m_min, m_max; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxNumberEntryDialog) - DECLARE_NO_COPY_CLASS(wxNumberEntryDialog) -}; - -// ---------------------------------------------------------------------------- -// function to get a number from user -// ---------------------------------------------------------------------------- - -long WXDLLEXPORT -wxGetNumberFromUser(const wxString& message, - const wxString& prompt, - const wxString& caption, - long value = 0, - long min = 0, - long max = 100, - wxWindow *parent = (wxWindow *)NULL, - const wxPoint& pos = wxDefaultPosition); - -#endif // wxUSE_NUMBERDLG - -#endif // __NUMDLGH_G__ diff --git a/desmume/src/windows/wx/include/wx/generic/paletteg.h b/desmume/src/windows/wx/include/wx/generic/paletteg.h deleted file mode 100644 index 52fa95bc1..000000000 --- a/desmume/src/windows/wx/include/wx/generic/paletteg.h +++ /dev/null @@ -1,49 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/paletteg.h -// Purpose: -// Author: Robert Roebling -// Created: 01/02/97 -// RCS-ID: $Id: paletteg.h 42752 2006-10-30 19:26:48Z VZ $ -// Copyright: (c) 1998 Robert Roebling and Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - - -#ifndef __WX_PALETTEG_H__ -#define __WX_PALETTEG_H__ - -#include "wx/defs.h" -#include "wx/object.h" -#include "wx/gdiobj.h" -#include "wx/gdicmn.h" - -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxPalette; - -//----------------------------------------------------------------------------- -// wxPalette -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxPalette: public wxPaletteBase -{ -public: - wxPalette(); - wxPalette( int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue ); - virtual ~wxPalette(); - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const; - - bool Create( int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue); - int GetPixel( unsigned char red, unsigned char green, unsigned char blue ) const; - bool GetRGB( int pixel, unsigned char *red, unsigned char *green, unsigned char *blue ) const; - - virtual int GetColoursCount() const; - -private: - DECLARE_DYNAMIC_CLASS(wxPalette) -}; - -#endif // __WX_PALETTEG_H__ diff --git a/desmume/src/windows/wx/include/wx/generic/panelg.h b/desmume/src/windows/wx/include/wx/generic/panelg.h deleted file mode 100644 index f211a995c..000000000 --- a/desmume/src/windows/wx/include/wx/generic/panelg.h +++ /dev/null @@ -1,95 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/panelg.h -// Purpose: wxPanel: a container for child controls -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: panelg.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_PANEL_H_ -#define _WX_GENERIC_PANEL_H_ - -// ---------------------------------------------------------------------------- -// headers and forward declarations -// ---------------------------------------------------------------------------- - -#include "wx/window.h" -#include "wx/containr.h" - -class WXDLLIMPEXP_FWD_CORE wxControlContainer; - -extern WXDLLEXPORT_DATA(const wxChar) wxPanelNameStr[]; - -// ---------------------------------------------------------------------------- -// wxPanel contains other controls and implements TAB traversal between them -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPanel : public wxWindow -{ -public: - wxPanel() { Init(); } - - // Old-style constructor (no default values for coordinates to avoid - // ambiguity with the new one) - wxPanel(wxWindow *parent, - int x, int y, int width, int height, - long style = wxTAB_TRAVERSAL | wxNO_BORDER, - const wxString& name = wxPanelNameStr) - { - Init(); - - Create(parent, wxID_ANY, wxPoint(x, y), wxSize(width, height), style, name); - } - - // Constructor - wxPanel(wxWindow *parent, - wxWindowID winid = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxTAB_TRAVERSAL | wxNO_BORDER, - const wxString& name = wxPanelNameStr) - { - Init(); - - Create(parent, winid, pos, size, style, name); - } - - // Pseudo ctor - bool Create(wxWindow *parent, - wxWindowID winid = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxTAB_TRAVERSAL | wxNO_BORDER, - const wxString& name = wxPanelNameStr); - - virtual ~wxPanel(); - - // implementation from now on - // -------------------------- - - // calls layout for layout constraints and sizers - void OnSize(wxSizeEvent& event); - - virtual void InitDialog(); - -#ifdef __WXUNIVERSAL__ - virtual bool IsCanvasWindow() const { return true; } -#endif - - - WX_DECLARE_CONTROL_CONTAINER(); - -protected: - // common part of all ctors - void Init(); - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxPanel) - DECLARE_EVENT_TABLE() -}; - -#endif - // _WX_GENERIC_PANEL_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/printps.h b/desmume/src/windows/wx/include/wx/generic/printps.h deleted file mode 100644 index 107a2a29b..000000000 --- a/desmume/src/windows/wx/include/wx/generic/printps.h +++ /dev/null @@ -1,68 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: printps.h -// Purpose: wxPostScriptPrinter, wxPostScriptPrintPreview -// wxGenericPageSetupDialog -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: printps.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __PRINTPSH__ -#define __PRINTPSH__ - -#include "wx/prntbase.h" - -#if wxUSE_PRINTING_ARCHITECTURE && wxUSE_POSTSCRIPT - -// ---------------------------------------------------------------------------- -// Represents the printer: manages printing a wxPrintout object -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPostScriptPrinter : public wxPrinterBase -{ -public: - wxPostScriptPrinter(wxPrintDialogData *data = (wxPrintDialogData *) NULL); - virtual ~wxPostScriptPrinter(); - - virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = true); - virtual wxDC* PrintDialog(wxWindow *parent); - virtual bool Setup(wxWindow *parent); - -private: - DECLARE_DYNAMIC_CLASS(wxPostScriptPrinter) -}; - -// ---------------------------------------------------------------------------- -// wxPrintPreview: programmer creates an object of this class to preview a -// wxPrintout. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPostScriptPrintPreview : public wxPrintPreviewBase -{ -public: - wxPostScriptPrintPreview(wxPrintout *printout, - wxPrintout *printoutForPrinting = (wxPrintout *) NULL, - wxPrintDialogData *data = (wxPrintDialogData *) NULL); - wxPostScriptPrintPreview(wxPrintout *printout, - wxPrintout *printoutForPrinting, - wxPrintData *data); - - virtual ~wxPostScriptPrintPreview(); - - virtual bool Print(bool interactive); - virtual void DetermineScaling(); - -private: - void Init(wxPrintout *printout, wxPrintout *printoutForPrinting); - -private: - DECLARE_CLASS(wxPostScriptPrintPreview) -}; - -#endif - -#endif -// __PRINTPSH__ diff --git a/desmume/src/windows/wx/include/wx/generic/prntdlgg.h b/desmume/src/windows/wx/include/wx/generic/prntdlgg.h deleted file mode 100644 index 2215e1066..000000000 --- a/desmume/src/windows/wx/include/wx/generic/prntdlgg.h +++ /dev/null @@ -1,256 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: prntdlgg.h -// Purpose: wxGenericPrintDialog, wxGenericPrintSetupDialog, -// wxGenericPageSetupDialog -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: prntdlgg.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __PRINTDLGH_G_ -#define __PRINTDLGH_G_ - -#include "wx/defs.h" - -#if wxUSE_PRINTING_ARCHITECTURE - -#include "wx/dialog.h" -#include "wx/cmndata.h" -#include "wx/prntbase.h" -#include "wx/printdlg.h" -#include "wx/listctrl.h" - -#if wxUSE_POSTSCRIPT - #include "wx/dcps.h" -#endif - -class WXDLLIMPEXP_FWD_CORE wxTextCtrl; -class WXDLLIMPEXP_FWD_CORE wxButton; -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; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// This is not clear why all these enums start with 10 or 30 but do not change it -// without good reason to avoid some subtle backwards compatibility breakage - -enum -{ - wxPRINTID_STATIC = 10, - wxPRINTID_RANGE, - wxPRINTID_FROM, - wxPRINTID_TO, - wxPRINTID_COPIES, - wxPRINTID_PRINTTOFILE, - wxPRINTID_SETUP -}; - -enum -{ - wxPRINTID_LEFTMARGIN = 30, - wxPRINTID_RIGHTMARGIN, - wxPRINTID_TOPMARGIN, - wxPRINTID_BOTTOMMARGIN -}; - -enum -{ - wxPRINTID_PRINTCOLOUR = 10, - wxPRINTID_ORIENTATION, - wxPRINTID_COMMAND, - wxPRINTID_OPTIONS, - wxPRINTID_PAPERSIZE, - wxPRINTID_PRINTER -}; - -#if wxUSE_POSTSCRIPT - -//---------------------------------------------------------------------------- -// wxPostScriptNativeData -//---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPostScriptPrintNativeData: public wxPrintNativeDataBase -{ -public: - wxPostScriptPrintNativeData(); - virtual ~wxPostScriptPrintNativeData(); - - virtual bool TransferTo( wxPrintData &data ); - virtual bool TransferFrom( const wxPrintData &data ); - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const { return true; } - - const wxString& GetPrinterCommand() const { return m_printerCommand; } - const wxString& GetPrinterOptions() const { return m_printerOptions; } - const wxString& GetPreviewCommand() const { return m_previewCommand; } - const wxString& GetFontMetricPath() const { return m_afmPath; } - double GetPrinterScaleX() const { return m_printerScaleX; } - double GetPrinterScaleY() const { return m_printerScaleY; } - long GetPrinterTranslateX() const { return m_printerTranslateX; } - long GetPrinterTranslateY() const { return m_printerTranslateY; } - - void SetPrinterCommand(const wxString& command) { m_printerCommand = command; } - void SetPrinterOptions(const wxString& options) { m_printerOptions = options; } - void SetPreviewCommand(const wxString& command) { m_previewCommand = command; } - void SetFontMetricPath(const wxString& path) { m_afmPath = path; } - void SetPrinterScaleX(double x) { m_printerScaleX = x; } - void SetPrinterScaleY(double y) { m_printerScaleY = y; } - void SetPrinterScaling(double x, double y) { m_printerScaleX = x; m_printerScaleY = y; } - void SetPrinterTranslateX(long x) { m_printerTranslateX = x; } - void SetPrinterTranslateY(long y) { m_printerTranslateY = y; } - void SetPrinterTranslation(long x, long y) { m_printerTranslateX = x; m_printerTranslateY = y; } - -#if wxUSE_STREAMS - wxOutputStream *GetOutputStream() { return m_outputStream; } - void SetOutputStream( wxOutputStream *output ) { m_outputStream = output; } -#endif - -private: - wxString m_printerCommand; - wxString m_previewCommand; - wxString m_printerOptions; - wxString m_afmPath; - double m_printerScaleX; - double m_printerScaleY; - long m_printerTranslateX; - long m_printerTranslateY; -#if wxUSE_STREAMS - wxOutputStream *m_outputStream; -#endif - -private: - DECLARE_DYNAMIC_CLASS(wxPostScriptPrintNativeData) -}; - -// ---------------------------------------------------------------------------- -// Simulated Print and Print Setup dialogs for non-Windows platforms (and -// Windows using PostScript print/preview) -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxGenericPrintDialog : public wxPrintDialogBase -{ -public: - wxGenericPrintDialog(wxWindow *parent, - wxPrintDialogData* data = (wxPrintDialogData*)NULL); - wxGenericPrintDialog(wxWindow *parent, wxPrintData* data); - - virtual ~wxGenericPrintDialog(); - - void OnSetup(wxCommandEvent& event); - void OnRange(wxCommandEvent& event); - void OnOK(wxCommandEvent& event); - - virtual bool TransferDataFromWindow(); - virtual bool TransferDataToWindow(); - - virtual int ShowModal(); - - wxPrintData& GetPrintData() - { return m_printDialogData.GetPrintData(); } - - wxPrintDialogData& GetPrintDialogData() { return m_printDialogData; } - wxDC *GetPrintDC(); - -public: -// wxStaticText* m_printerMessage; - wxButton* m_setupButton; -// wxButton* m_helpButton; - wxRadioBox* m_rangeRadioBox; - wxTextCtrl* m_fromText; - wxTextCtrl* m_toText; - wxTextCtrl* m_noCopiesText; - wxCheckBox* m_printToFileCheckBox; -// wxCheckBox* m_collateCopiesCheckBox; - - wxPrintDialogData m_printDialogData; - -protected: - void Init(wxWindow *parent); - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxGenericPrintDialog) -}; - -class WXDLLEXPORT wxGenericPrintSetupDialog : public wxDialog -{ -public: - // There are no configuration options for the dialog, so we - // just pass the wxPrintData object (no wxPrintSetupDialogData class needed) - wxGenericPrintSetupDialog(wxWindow *parent, wxPrintData* data); - virtual ~wxGenericPrintSetupDialog(); - - void Init(wxPrintData* data); - - void OnPrinter(wxListEvent& event); - - virtual bool TransferDataFromWindow(); - virtual bool TransferDataToWindow(); - - virtual wxComboBox *CreatePaperTypeChoice(); - -public: - wxListCtrl* m_printerListCtrl; - wxRadioBox* m_orientationRadioBox; - wxTextCtrl* m_printerCommandText; - wxTextCtrl* m_printerOptionsText; - wxCheckBox* m_colourCheckBox; - wxComboBox* m_paperTypeChoice; - - wxPrintData m_printData; - wxPrintData& GetPrintData() { return m_printData; } - - // After pressing OK, write data here. - wxPrintData* m_targetData; - -private: - DECLARE_EVENT_TABLE() - DECLARE_CLASS(wxGenericPrintSetupDialog) -}; -#endif - // wxUSE_POSTSCRIPT - -class WXDLLEXPORT wxGenericPageSetupDialog : public wxPageSetupDialogBase -{ -public: - wxGenericPageSetupDialog(wxWindow *parent = NULL, - wxPageSetupDialogData* data = NULL); - virtual ~wxGenericPageSetupDialog(); - - virtual bool TransferDataFromWindow(); - virtual bool TransferDataToWindow(); - - virtual wxPageSetupDialogData& GetPageSetupDialogData(); - - void OnPrinter(wxCommandEvent& event); - wxComboBox *CreatePaperTypeChoice(int* x, int* y); - -public: - wxButton* m_printerButton; - wxRadioBox* m_orientationRadioBox; - wxTextCtrl* m_marginLeftText; - wxTextCtrl* m_marginTopText; - wxTextCtrl* m_marginRightText; - wxTextCtrl* m_marginBottomText; - wxComboBox* m_paperTypeChoice; - - wxPageSetupDialogData m_pageData; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxGenericPageSetupDialog) -}; - -#endif - -#endif -// __PRINTDLGH_G_ diff --git a/desmume/src/windows/wx/include/wx/generic/progdlgg.h b/desmume/src/windows/wx/include/wx/generic/progdlgg.h deleted file mode 100644 index 02210b3ca..000000000 --- a/desmume/src/windows/wx/include/wx/generic/progdlgg.h +++ /dev/null @@ -1,172 +0,0 @@ -//////////////////////////////////////////////////// -// Name: progdlgg.h -// Purpose: wxProgressDialog class -// Author: Karsten Ballueder -// Modified by: -// Created: 09.05.1999 -// RCS-ID: $Id: progdlgg.h 50711 2007-12-15 02:57:58Z VZ $ -// Copyright: (c) Karsten Ballueder -// Licence: wxWindows licence -//////////////////////////////////////////////////// - -#ifndef __PROGDLGH_G__ -#define __PROGDLGH_G__ - -#include "wx/defs.h" -#include "wx/progdlg.h" - -#if wxUSE_PROGRESSDLG - -#include "wx/dialog.h" - -class WXDLLIMPEXP_FWD_CORE wxButton; -class WXDLLIMPEXP_FWD_CORE wxGauge; -class WXDLLIMPEXP_FWD_CORE wxStaticText; - -/* Progress dialog which shows a moving progress bar. - Taken from the Mahogany project.*/ - -class WXDLLEXPORT wxProgressDialog : public wxDialog -{ -DECLARE_DYNAMIC_CLASS(wxProgressDialog) -public: - /* Creates and displays dialog, disables event handling for other - frames or parent frame to avoid recursion problems. - @param title title for window - @param message message to display in window - @param maximum value for status bar, if <= 0, no bar is shown - @param parent window or NULL - @param style is the bit mask of wxPD_XXX constants from wx/defs.h - */ - wxProgressDialog(const wxString &title, wxString const &message, - int maximum = 100, - wxWindow *parent = NULL, - int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE); - /* Destructor. - Re-enables event handling for other windows. - */ - virtual ~wxProgressDialog(); - - /* Update the status bar to the new value. - @param value new value - @param newmsg if used, new message to display - @returns true if ABORT button has not been pressed - */ - virtual bool Update(int value, const wxString& newmsg = wxEmptyString, bool *skip = NULL); - - /* Switches the dialog to use a gauge in indeterminate mode and calls - wxGauge::Pulse() to show to the user a bit of progress */ - virtual bool Pulse(const wxString& newmsg = wxEmptyString, bool *skip = NULL); - - // Must provide overload to avoid hiding it (and warnings about it) - virtual void Update() { wxDialog::Update(); } - - /* Can be called to continue after the cancel button has been pressed, but - the program decided to continue the operation (e.g., user didn't - confirm it) - */ - void Resume(); - - virtual bool Show( bool show = true ); - -protected: - // callback for optional abort button - void OnCancel(wxCommandEvent& event); - - // callback for optional skip button - void OnSkip(wxCommandEvent& event); - - // callback to disable "hard" window closing - void OnClose(wxCloseEvent& event); - - // must be called to reenable the other windows temporarily disabled while - // the dialog was shown - void ReenableOtherWindows(); - -private: - // 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 - wxStaticText *CreateLabel(const wxString& text, wxSizer *sizer); - - // updates the label message - void UpdateMessage(const wxString &newmsg); - - // common part of Update() and Pulse(), returns true if not cancelled - bool DoAfterUpdate(bool *skip); - - // shortcuts for enabling buttons - void EnableClose(); - void EnableSkip(bool enable=true); - void EnableAbort(bool enable=true); - inline void DisableSkip() { EnableSkip(false); } - inline void DisableAbort() { EnableAbort(false); } - - // the status bar - wxGauge *m_gauge; - // the message displayed - wxStaticText *m_msg; - // displayed elapsed, estimated, remaining time - class wxStaticText *m_elapsed, - *m_estimated, - *m_remaining; - // time when the dialog was created - unsigned long m_timeStart; - // time when the dialog was closed or cancelled - unsigned long m_timeStop; - // time between the moment the dialog was closed/cancelled and resume - unsigned long m_break; - - // parent top level window (may be NULL) - wxWindow *m_parentTop; - - // continue processing or not (return value for Update()) - enum - { - Uncancelable = -1, // dialog can't be canceled - Canceled, // can be cancelled and, in fact, was - Continue, // can be cancelled but wasn't - Finished // finished, waiting to be removed from screen - } m_state; - - // skip some portion - bool m_skip; - -#if !defined(__SMARTPHONE__) - // the abort and skip buttons (or NULL if none) - wxButton *m_btnAbort; - wxButton *m_btnSkip; -#endif - - // the maximum value - int m_maximum; - - // saves the time when elapsed time was updated so there is only one - // update per second - unsigned long m_last_timeupdate; - // tells how often a change of the estimated time has to be confirmed - // before it is actually displayed - this reduces the frequence of updates - // of estimated and remaining time - const int m_delay; - // counts the confirmations - int m_ctdelay; - unsigned long m_display_estimated; - - bool m_hasAbortButton, - m_hasSkipButton; - -#if defined(__WXMSW__ ) || defined(__WXPM__) - // the factor we use to always keep the value in 16 bit range as the native - // control only supports ranges from 0 to 65,535 - size_t m_factor; -#endif // __WXMSW__ - - // for wxPD_APP_MODAL case - class WXDLLIMPEXP_FWD_CORE wxWindowDisabler *m_winDisabler; - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxProgressDialog) -}; - -#endif // wxUSE_PROGRESSDLG - -#endif // __PROGDLGH_G__ diff --git a/desmume/src/windows/wx/include/wx/generic/propdlg.h b/desmume/src/windows/wx/include/wx/generic/propdlg.h deleted file mode 100644 index 8c2199116..000000000 --- a/desmume/src/windows/wx/include/wx/generic/propdlg.h +++ /dev/null @@ -1,163 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/propdlg.h -// Purpose: wxPropertySheetDialog -// Author: Julian Smart -// Modified by: -// Created: 2005-03-12 -// RCS-ID: $Id: propdlg.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PROPDLG_H_ -#define _WX_PROPDLG_H_ - -#include "wx/defs.h" - -#if wxUSE_BOOKCTRL - -#include "wx/dialog.h" - -class WXDLLIMPEXP_FWD_CORE wxBookCtrlBase; - -//----------------------------------------------------------------------------- -// wxPropertySheetDialog -// A platform-independent properties dialog. -// -// * on PocketPC, a flat-look 'property sheet' notebook will be used, with -// no OK/Cancel/Help buttons -// * on other platforms, a normal notebook will be used, with standard buttons -// -// To use this class, call Create from your derived class. -// Then create pages and add to the book control. Finally call CreateButtons and -// LayoutDialog. -// -// For example: -// -// MyPropertySheetDialog::Create(...) -// { -// wxPropertySheetDialog::Create(...); -// -// // Add page -// wxPanel* panel = new wxPanel(GetBookCtrl(), ...); -// GetBookCtrl()->AddPage(panel, wxT("General")); -// -// CreateButtons(); -// LayoutDialog(); -// } -// -// Override CreateBookCtrl and AddBookCtrl to create and add a different -// kind of book control. -//----------------------------------------------------------------------------- - -// Use the platform default -#define wxPROPSHEET_DEFAULT 0x0001 - -// Use a notebook -#define wxPROPSHEET_NOTEBOOK 0x0002 - -// Use a toolbook -#define wxPROPSHEET_TOOLBOOK 0x0004 - -// Use a choicebook -#define wxPROPSHEET_CHOICEBOOK 0x0008 - -// Use a listbook -#define wxPROPSHEET_LISTBOOK 0x0010 - -// Use a wxButtonToolBar toolbook -#define wxPROPSHEET_BUTTONTOOLBOOK 0x0020 - -// Use a treebook -#define wxPROPSHEET_TREEBOOK 0x0040 - -// Shrink dialog to fit current page -#define wxPROPSHEET_SHRINKTOFIT 0x0100 - -class WXDLLIMPEXP_ADV wxPropertySheetDialog : public wxDialog -{ -public: - wxPropertySheetDialog() : wxDialog() { Init(); } - - wxPropertySheetDialog(wxWindow* parent, wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& sz = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE, - const wxString& name = wxDialogNameStr) - { - Init(); - Create(parent, id, title, pos, sz, style, name); - } - - bool Create(wxWindow* parent, wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& sz = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE, - const wxString& name = wxDialogNameStr); - -//// Accessors - - // Set and get the notebook - void SetBookCtrl(wxBookCtrlBase* book) { m_bookCtrl = book; } - wxBookCtrlBase* GetBookCtrl() const { return m_bookCtrl; } - - // Set and get the inner sizer - void SetInnerSize(wxSizer* sizer) { m_innerSizer = sizer; } - wxSizer* GetInnerSizer() const { return m_innerSizer ; } - - // Set and get the book style - void SetSheetStyle(long sheetStyle) { m_sheetStyle = sheetStyle; } - long GetSheetStyle() const { return m_sheetStyle ; } - - // Set and get the border around the whole dialog - void SetSheetOuterBorder(int border) { m_sheetOuterBorder = border; } - int GetSheetOuterBorder() const { return m_sheetOuterBorder ; } - - // Set and get the border around the book control only - void SetSheetInnerBorder(int border) { m_sheetInnerBorder = border; } - int GetSheetInnerBorder() const { return m_sheetInnerBorder ; } - -/// Operations - - // Creates the buttons (none on PocketPC) - virtual void CreateButtons(int flags = wxOK|wxCANCEL); - - // Lay out the dialog, to be called after pages have been created - virtual void LayoutDialog(int centreFlags = wxBOTH); - -/// Implementation - - // Creates the book control. If you want to use a different kind of - // control, override. - virtual wxBookCtrlBase* CreateBookCtrl(); - - // Adds the book control to the inner sizer. - virtual void AddBookCtrl(wxSizer* sizer); - - // Set the focus - void OnActivate(wxActivateEvent& event); - - // Resize dialog if necessary - void OnIdle(wxIdleEvent& event); - -private: - void Init(); - -protected: - wxBookCtrlBase* m_bookCtrl; - wxSizer* m_innerSizer; // sizer for extra space - long m_sheetStyle; - int m_sheetOuterBorder; - int m_sheetInnerBorder; - int m_selectedPage; - - DECLARE_DYNAMIC_CLASS(wxPropertySheetDialog) - DECLARE_EVENT_TABLE() -}; - -#endif // wxUSE_BOOKCTRL - -#endif // _WX_PROPDLG_H_ - diff --git a/desmume/src/windows/wx/include/wx/generic/region.h b/desmume/src/windows/wx/include/wx/generic/region.h deleted file mode 100644 index 1a27f289f..000000000 --- a/desmume/src/windows/wx/include/wx/generic/region.h +++ /dev/null @@ -1,79 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/region.h -// Purpose: generic wxRegion class -// Author: David Elliott -// Modified by: -// Created: 2004/04/12 -// RCS-ID: $Id: region.h 41429 2006-09-25 11:47:23Z VZ $ -// Copyright: (c) 2004 David Elliott -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_REGION_H__ -#define _WX_GENERIC_REGION_H__ - -class WXDLLEXPORT wxRegionGeneric : public wxRegionBase -{ -public: - wxRegionGeneric(wxCoord x, wxCoord y, wxCoord w, wxCoord h); - wxRegionGeneric(const wxPoint& topLeft, const wxPoint& bottomRight); - wxRegionGeneric(const wxRect& rect); - wxRegionGeneric(); - virtual ~wxRegionGeneric(); - - // wxRegionBase pure virtuals - virtual void Clear(); - virtual bool IsEmpty() const; - -protected: - virtual wxObjectRefData *CreateRefData() const; - virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const; - - // wxRegionBase pure virtuals - virtual bool DoIsEqual(const wxRegion& region) const; - virtual bool DoGetBox(wxCoord& x, wxCoord& y, wxCoord& w, wxCoord& h) const; - virtual wxRegionContain DoContainsPoint(wxCoord x, wxCoord y) const; - virtual wxRegionContain DoContainsRect(const wxRect& rect) const; - - virtual bool DoOffset(wxCoord x, wxCoord y); - virtual bool DoUnionWithRect(const wxRect& rect); - virtual bool DoUnionWithRegion(const wxRegion& region); - virtual bool DoIntersect(const wxRegion& region); - virtual bool DoSubtract(const wxRegion& region); - virtual bool DoXor(const wxRegion& region); - - friend class WXDLLEXPORT wxRegionIteratorGeneric; -}; - -class WXDLLEXPORT wxRegionIteratorGeneric : public wxObject -{ -public: - wxRegionIteratorGeneric(); - wxRegionIteratorGeneric(const wxRegionGeneric& region); - wxRegionIteratorGeneric(const wxRegionIteratorGeneric& iterator); - virtual ~wxRegionIteratorGeneric(); - - wxRegionIteratorGeneric& operator=(const wxRegionIteratorGeneric& iterator); - - void Reset() { m_current = 0; } - void Reset(const wxRegionGeneric& region); - - operator bool () const { return HaveRects(); } - bool HaveRects() const; - - wxRegionIteratorGeneric& operator++(); - wxRegionIteratorGeneric operator++(int); - - long GetX() const; - long GetY() const; - long GetW() const; - long GetWidth() const { return GetW(); } - long GetH() const; - long GetHeight() const { return GetH(); } - wxRect GetRect() const; -private: - long m_current; - wxRegionGeneric m_region; -}; - -#endif // _WX_GENERIC_REGION_H__ diff --git a/desmume/src/windows/wx/include/wx/generic/sashwin.h b/desmume/src/windows/wx/include/wx/generic/sashwin.h deleted file mode 100644 index 457a4a729..000000000 --- a/desmume/src/windows/wx/include/wx/generic/sashwin.h +++ /dev/null @@ -1,261 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: sashwin.h -// Purpose: wxSashWindow implementation. A sash window has an optional -// sash on each edge, allowing it to be dragged. An event -// is generated when the sash is released. -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: sashwin.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SASHWIN_H_G_ -#define _WX_SASHWIN_H_G_ - -#if wxUSE_SASH - -#include "wx/defs.h" -#include "wx/window.h" -#include "wx/string.h" - -#define wxSASH_DRAG_NONE 0 -#define wxSASH_DRAG_DRAGGING 1 -#define wxSASH_DRAG_LEFT_DOWN 2 - -enum wxSashEdgePosition { - wxSASH_TOP = 0, - wxSASH_RIGHT, - wxSASH_BOTTOM, - wxSASH_LEFT, - wxSASH_NONE = 100 -}; - -/* - * wxSashEdge represents one of the four edges of a window. - */ - -class WXDLLIMPEXP_ADV wxSashEdge -{ -public: - wxSashEdge() - { m_show = false; -#if WXWIN_COMPATIBILITY_2_6 - m_border = false; -#endif - m_margin = 0; } - - bool m_show; // Is the sash showing? -#if WXWIN_COMPATIBILITY_2_6 - bool m_border; // Do we draw a border? -#endif - int m_margin; // The margin size -}; - -/* - * wxSashWindow flags - */ - -#define wxSW_NOBORDER 0x0000 -//#define wxSW_3D 0x0010 -#define wxSW_BORDER 0x0020 -#define wxSW_3DSASH 0x0040 -#define wxSW_3DBORDER 0x0080 -#define wxSW_3D (wxSW_3DSASH | wxSW_3DBORDER) - -/* - * wxSashWindow allows any of its edges to have a sash which can be dragged - * to resize the window. The actual content window will be created as a child - * of wxSashWindow. - */ - -class WXDLLIMPEXP_ADV wxSashWindow: public wxWindow -{ -public: - // Default constructor - wxSashWindow() - { - Init(); - } - - // Normal constructor - wxSashWindow(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = wxT("sashWindow")) - { - Init(); - Create(parent, id, pos, size, style, name); - } - - virtual ~wxSashWindow(); - - bool Create(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = wxT("sashWindow")); - - // Set whether there's a sash in this position - void SetSashVisible(wxSashEdgePosition edge, bool sash); - - // Get whether there's a sash in this position - bool GetSashVisible(wxSashEdgePosition edge) const { return m_sashes[edge].m_show; } - -#if WXWIN_COMPATIBILITY_2_6 - // Set whether there's a border in this position - // This value is unused in wxSashWindow. - void SetSashBorder(wxSashEdgePosition edge, bool border) { m_sashes[edge].m_border = border; } - - // Get whether there's a border in this position - // This value is unused in wxSashWindow. - bool HasBorder(wxSashEdgePosition edge) const { return m_sashes[edge].m_border; } -#endif - - // Get border size - int GetEdgeMargin(wxSashEdgePosition edge) const { return m_sashes[edge].m_margin; } - - // Sets the default sash border size - void SetDefaultBorderSize(int width) { m_borderSize = width; } - - // Gets the default sash border size - int GetDefaultBorderSize() const { return m_borderSize; } - - // Sets the addition border size between child and sash window - void SetExtraBorderSize(int width) { m_extraBorderSize = width; } - - // Gets the addition border size between child and sash window - int GetExtraBorderSize() const { return m_extraBorderSize; } - - virtual void SetMinimumSizeX(int min) { m_minimumPaneSizeX = min; } - virtual void SetMinimumSizeY(int min) { m_minimumPaneSizeY = min; } - virtual int GetMinimumSizeX() const { return m_minimumPaneSizeX; } - virtual int GetMinimumSizeY() const { return m_minimumPaneSizeY; } - - virtual void SetMaximumSizeX(int max) { m_maximumPaneSizeX = max; } - virtual void SetMaximumSizeY(int max) { m_maximumPaneSizeY = max; } - virtual int GetMaximumSizeX() const { return m_maximumPaneSizeX; } - virtual int GetMaximumSizeY() const { return m_maximumPaneSizeY; } - -//////////////////////////////////////////////////////////////////////////// -// Implementation - - // Paints the border and sash - void OnPaint(wxPaintEvent& event); - - // Handles mouse events - void OnMouseEvent(wxMouseEvent& ev); - - // Adjusts the panes - void OnSize(wxSizeEvent& event); - -#if defined(__WXMSW__) || defined(__WXMAC__) - // Handle cursor correctly - void OnSetCursor(wxSetCursorEvent& event); -#endif // wxMSW - - // Draws borders - void DrawBorders(wxDC& dc); - - // Draws the sashes - void DrawSash(wxSashEdgePosition edge, wxDC& dc); - - // Draws the sashes - void DrawSashes(wxDC& dc); - - // Draws the sash tracker (for whilst moving the sash) - void DrawSashTracker(wxSashEdgePosition edge, int x, int y); - - // Tests for x, y over sash - wxSashEdgePosition SashHitTest(int x, int y, int tolerance = 2); - - // Resizes subwindows - void SizeWindows(); - - // Initialize colours - void InitColours(); - -private: - void Init(); - - wxSashEdge m_sashes[4]; - int m_dragMode; - wxSashEdgePosition m_draggingEdge; - int m_oldX; - int m_oldY; - int m_borderSize; - int m_extraBorderSize; - int m_firstX; - int m_firstY; - int m_minimumPaneSizeX; - int m_minimumPaneSizeY; - int m_maximumPaneSizeX; - int m_maximumPaneSizeY; - wxCursor* m_sashCursorWE; - wxCursor* m_sashCursorNS; - wxColour m_lightShadowColour; - wxColour m_mediumShadowColour; - wxColour m_darkShadowColour; - wxColour m_hilightColour; - wxColour m_faceColour; - bool m_mouseCaptured; - wxCursor* m_currentCursor; - -private: - DECLARE_DYNAMIC_CLASS(wxSashWindow) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxSashWindow) -}; - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, - wxEVT_SASH_DRAGGED, wxEVT_FIRST + 1200) -END_DECLARE_EVENT_TYPES() - -enum wxSashDragStatus -{ - wxSASH_STATUS_OK, - wxSASH_STATUS_OUT_OF_RANGE -}; - -class WXDLLIMPEXP_ADV wxSashEvent: public wxCommandEvent -{ -public: - wxSashEvent(int id = 0, wxSashEdgePosition edge = wxSASH_NONE) - { - m_eventType = (wxEventType) wxEVT_SASH_DRAGGED; - m_id = id; - m_edge = edge; - } - - void SetEdge(wxSashEdgePosition edge) { m_edge = edge; } - wxSashEdgePosition GetEdge() const { return m_edge; } - - //// The rectangle formed by the drag operation - void SetDragRect(const wxRect& rect) { m_dragRect = rect; } - wxRect GetDragRect() const { return m_dragRect; } - - //// Whether the drag caused the rectangle to be reversed (e.g. - //// dragging the top below the bottom) - void SetDragStatus(wxSashDragStatus status) { m_dragStatus = status; } - wxSashDragStatus GetDragStatus() const { return m_dragStatus; } - -private: - wxSashEdgePosition m_edge; - wxRect m_dragRect; - wxSashDragStatus m_dragStatus; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxSashEvent) -}; - -typedef void (wxEvtHandler::*wxSashEventFunction)(wxSashEvent&); - -#define wxSashEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSashEventFunction, &func) - -#define EVT_SASH_DRAGGED(id, fn) \ - wx__DECLARE_EVT1(wxEVT_SASH_DRAGGED, id, wxSashEventHandler(fn)) -#define EVT_SASH_DRAGGED_RANGE(id1, id2, fn) \ - wx__DECLARE_EVT2(wxEVT_SASH_DRAGGED, id1, id2, wxSashEventHandler(fn)) - -#endif // wxUSE_SASH - -#endif - // _WX_SASHWIN_H_G_ diff --git a/desmume/src/windows/wx/include/wx/generic/scrolwin.h b/desmume/src/windows/wx/include/wx/generic/scrolwin.h deleted file mode 100644 index 1677315fc..000000000 --- a/desmume/src/windows/wx/include/wx/generic/scrolwin.h +++ /dev/null @@ -1,27 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/scrolwin.h -// Purpose: wxGenericScrolledWindow class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: scrolwin.h 35875 2005-10-10 18:24:27Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_SCROLLWIN_H_ -#define _WX_GENERIC_SCROLLWIN_H_ - -// ---------------------------------------------------------------------------- -// headers and constants -// ---------------------------------------------------------------------------- - -#include "wx/window.h" -#include "wx/panel.h" - -// ---------------------------------------------------------------------------- -// wxGenericScrolledWindow -// ---------------------------------------------------------------------------- - -#endif // _WX_GENERIC_SCROLLWIN_H_ - diff --git a/desmume/src/windows/wx/include/wx/generic/spinctlg.h b/desmume/src/windows/wx/include/wx/generic/spinctlg.h deleted file mode 100644 index 7874e441f..000000000 --- a/desmume/src/windows/wx/include/wx/generic/spinctlg.h +++ /dev/null @@ -1,183 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/spinctlg.h -// Purpose: generic wxSpinCtrl class -// Author: Vadim Zeitlin -// Modified by: -// Created: 28.10.99 -// RCS-ID: $Id: spinctlg.h 52582 2008-03-17 13:46:31Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_SPINCTRL_H_ -#define _WX_GENERIC_SPINCTRL_H_ - -// ---------------------------------------------------------------------------- -// wxSpinCtrl is a combination of wxSpinButton and wxTextCtrl, so if -// wxSpinButton is available, this is what we do - but if it isn't, we still -// define wxSpinCtrl class which then has the same appearance as wxTextCtrl but -// the different interface. This allows to write programs using wxSpinCtrl -// without tons of #ifdefs. -// ---------------------------------------------------------------------------- - -#if wxUSE_SPINBTN - -class WXDLLEXPORT wxSpinButton; -class WXDLLEXPORT wxTextCtrl; - -// ---------------------------------------------------------------------------- -// wxSpinCtrl is a combination of wxTextCtrl and wxSpinButton -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSpinCtrl : public wxControl -{ -public: - wxSpinCtrl() { Init(); } - - wxSpinCtrl(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_ARROW_KEYS, - int min = 0, int max = 100, int initial = 0, - const wxString& name = _T("wxSpinCtrl")) - { - Init(); - Create(parent, id, value, pos, size, style, min, max, initial, name); - } - - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_ARROW_KEYS, - int min = 0, int max = 100, int initial = 0, - const wxString& name = _T("wxSpinCtrl")); - - virtual ~wxSpinCtrl(); - - // operations - void SetValue(int val); - void SetValue(const wxString& text); - void SetRange(int min, int max); - void SetSelection(long from, long to); - - // accessors - int GetValue() const; - int GetMin() const; - int GetMax() const; - - // implementation from now on - - // forward these functions to all subcontrols - virtual bool Enable(bool enable = true); - virtual bool Show(bool show = true); - virtual bool Reparent(wxWindow *newParent); - - // get the subcontrols - wxTextCtrl *GetText() const { return m_text; } - wxSpinButton *GetSpinButton() const { return m_btn; } - - // set the value of the text (only) - void SetTextValue(int val); - - // put the numeric value of the string in the text ctrl into val and return - // true or return false if the text ctrl doesn't contain a number or if the - // number is out of range - bool GetTextValue(int *val) const; - -protected: - // override the base class virtuals involved into geometry calculations - virtual wxSize DoGetBestSize() const; - virtual void DoMoveWindow(int x, int y, int width, int height); - - // common part of all ctors - void Init(); - -private: - // the subcontrols - wxTextCtrl *m_text; - wxSpinButton *m_btn; - -private: - DECLARE_DYNAMIC_CLASS(wxSpinCtrl) -}; - -#else // !wxUSE_SPINBTN - -// ---------------------------------------------------------------------------- -// wxSpinCtrl is just a text control -// ---------------------------------------------------------------------------- - -#include "wx/textctrl.h" - -class WXDLLEXPORT wxSpinCtrl : public wxTextCtrl -{ -public: - wxSpinCtrl() { Init(); } - - wxSpinCtrl(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_ARROW_KEYS, - int min = 0, int max = 100, int initial = 0, - const wxString& name = _T("wxSpinCtrl")) - { - Create(parent, id, value, pos, size, style, min, max, initial, name); - } - - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_ARROW_KEYS, - int min = 0, int max = 100, int initial = 0, - const wxString& name = _T("wxSpinCtrl")) - { - SetRange(min, max); - - bool ok = wxTextCtrl::Create(parent, id, value, pos, size, style, - wxDefaultValidator, name); - SetValue(initial); - - return ok; - } - - // accessors - int GetValue(int WXUNUSED(dummy) = 1) const - { - int n; - if ( (wxSscanf(wxTextCtrl::GetValue(), wxT("%d"), &n) != 1) ) - n = INT_MIN; - - return n; - } - - int GetMin() const { return m_min; } - int GetMax() const { return m_max; } - - // operations - void SetValue(const wxString& value) { wxTextCtrl::SetValue(value); } - void SetValue(int val) { wxString s; s << val; wxTextCtrl::SetValue(s); } - void SetRange(int min, int max) { m_min = min; m_max = max; } - -protected: - // initialize m_min/max with the default values - void Init() { SetRange(0, 100); } - - int m_min; - int m_max; - -private: - DECLARE_DYNAMIC_CLASS(wxSpinCtrl) -}; - -#endif // wxUSE_SPINBTN/!wxUSE_SPINBTN - -#endif // _WX_GENERIC_SPINCTRL_H_ - diff --git a/desmume/src/windows/wx/include/wx/generic/splash.h b/desmume/src/windows/wx/include/wx/generic/splash.h deleted file mode 100644 index ff49d630d..000000000 --- a/desmume/src/windows/wx/include/wx/generic/splash.h +++ /dev/null @@ -1,92 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: splash.h -// Purpose: Splash screen class -// Author: Julian Smart -// Modified by: -// Created: 28/6/2000 -// RCS-ID: $Id: splash.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SPLASH_H_ -#define _WX_SPLASH_H_ - -#include "wx/bitmap.h" -#include "wx/timer.h" -#include "wx/frame.h" - - -/* - * A window for displaying a splash screen - */ - -#define wxSPLASH_CENTRE_ON_PARENT 0x01 -#define wxSPLASH_CENTRE_ON_SCREEN 0x02 -#define wxSPLASH_NO_CENTRE 0x00 -#define wxSPLASH_TIMEOUT 0x04 -#define wxSPLASH_NO_TIMEOUT 0x00 - -class WXDLLIMPEXP_FWD_ADV wxSplashScreenWindow; - -/* - * wxSplashScreen - */ - -class WXDLLIMPEXP_ADV wxSplashScreen: public wxFrame -{ -public: - // for RTTI macros only - wxSplashScreen() {} - wxSplashScreen(const wxBitmap& bitmap, long splashStyle, int milliseconds, - wxWindow* parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSIMPLE_BORDER|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP); - virtual ~wxSplashScreen(); - - void OnCloseWindow(wxCloseEvent& event); - void OnNotify(wxTimerEvent& event); - - long GetSplashStyle() const { return m_splashStyle; } - wxSplashScreenWindow* GetSplashWindow() const { return m_window; } - int GetTimeout() const { return m_milliseconds; } - -protected: - wxSplashScreenWindow* m_window; - long m_splashStyle; - int m_milliseconds; - wxTimer m_timer; - - DECLARE_DYNAMIC_CLASS(wxSplashScreen) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxSplashScreen) -}; - -/* - * wxSplashScreenWindow - */ - -class WXDLLIMPEXP_ADV wxSplashScreenWindow: public wxWindow -{ -public: - wxSplashScreenWindow(const wxBitmap& bitmap, wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxNO_BORDER); - - 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; } - -protected: - wxBitmap m_bitmap; - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxSplashScreenWindow) -}; - - -#endif - // _WX_SPLASH_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/splitter.h b/desmume/src/windows/wx/include/wx/generic/splitter.h deleted file mode 100644 index ac651f269..000000000 --- a/desmume/src/windows/wx/include/wx/generic/splitter.h +++ /dev/null @@ -1,406 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/splitter.h -// Purpose: wxSplitterWindow class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: splitter.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_SPLITTER_H_ -#define _WX_GENERIC_SPLITTER_H_ - -#include "wx/window.h" // base class declaration -#include "wx/containr.h" // wxControlContainer - -class WXDLLIMPEXP_FWD_CORE wxSplitterEvent; - -// --------------------------------------------------------------------------- -// splitter constants -// --------------------------------------------------------------------------- - -enum wxSplitMode -{ - wxSPLIT_HORIZONTAL = 1, - wxSPLIT_VERTICAL -}; - -enum -{ - wxSPLIT_DRAG_NONE, - wxSPLIT_DRAG_DRAGGING, - wxSPLIT_DRAG_LEFT_DOWN -}; - -// --------------------------------------------------------------------------- -// wxSplitterWindow maintains one or two panes, with -// an optional vertical or horizontal split which -// can be used with the mouse or programmatically. -// --------------------------------------------------------------------------- - -// TODO: -// 1) Perhaps make the borders sensitive to dragging in order to create a split. -// The MFC splitter window manages scrollbars as well so is able to -// put sash buttons on the scrollbars, but we probably don't want to go down -// this path. -// 2) for wxWidgets 2.0, we must find a way to set the WS_CLIPCHILDREN style -// to prevent flickering. (WS_CLIPCHILDREN doesn't work in all cases so can't be -// standard). - -class WXDLLEXPORT wxSplitterWindow: public wxWindow -{ -public: - -//////////////////////////////////////////////////////////////////////////// -// Public API - - // Default constructor - wxSplitterWindow() - { - Init(); - } - - // Normal constructor - wxSplitterWindow(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_3D, - const wxString& name = wxT("splitter")) - { - Init(); - Create(parent, id, pos, size, style, name); - } - - virtual ~wxSplitterWindow(); - - bool Create(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_3D, - const wxString& name = wxT("splitter")); - - // Gets the only or left/top pane - wxWindow *GetWindow1() const { return m_windowOne; } - - // Gets the right/bottom pane - wxWindow *GetWindow2() const { return m_windowTwo; } - - // Sets the split mode - void SetSplitMode(int mode) - { - wxASSERT_MSG( mode == wxSPLIT_VERTICAL || mode == wxSPLIT_HORIZONTAL, - _T("invalid split mode") ); - - m_splitMode = (wxSplitMode)mode; - } - - // Gets the split mode - wxSplitMode GetSplitMode() const { return m_splitMode; } - - // Initialize with one window - void Initialize(wxWindow *window); - - // Associates the given window with window 2, drawing the appropriate sash - // and changing the split mode. - // Does nothing and returns false if the window is already split. - // A sashPosition of 0 means choose a default sash position, - // negative sashPosition specifies the size of right/lower pane as it's - // absolute value rather than the size of left/upper pane. - virtual bool SplitVertically(wxWindow *window1, - wxWindow *window2, - int sashPosition = 0) - { return DoSplit(wxSPLIT_VERTICAL, window1, window2, sashPosition); } - virtual bool SplitHorizontally(wxWindow *window1, - wxWindow *window2, - int sashPosition = 0) - { return DoSplit(wxSPLIT_HORIZONTAL, window1, window2, sashPosition); } - - // Removes the specified (or second) window from the view - // Doesn't actually delete the window. - bool Unsplit(wxWindow *toRemove = (wxWindow *) NULL); - - // Replaces one of the windows with another one (neither old nor new - // parameter should be NULL) - bool ReplaceWindow(wxWindow *winOld, wxWindow *winNew); - - // Make sure the child window sizes are updated. This is useful - // for reducing flicker by updating the sizes before a - // window is shown, if you know the overall size is correct. - void UpdateSize(); - - // Is the window split? - bool IsSplit() const { return (m_windowTwo != NULL); } - - // Sets the sash size - void SetSashSize(int width) { m_sashSize = width; } - - // Sets the border size - void SetBorderSize(int WXUNUSED(width)) { } - - // Gets the sash size - int GetSashSize() const; - - // Gets the border size - int GetBorderSize() const; - - // Set the sash position - void SetSashPosition(int position, bool redraw = true); - - // Gets the sash position - int GetSashPosition() const { return m_sashPosition; } - - // Set the sash gravity - void SetSashGravity(double gravity); - - // Gets the sash gravity - double GetSashGravity() const { return m_sashGravity; } - - // If this is zero, we can remove panes by dragging the sash. - void SetMinimumPaneSize(int min); - int GetMinimumPaneSize() const { return m_minimumPaneSize; } - - // NB: the OnXXX() functions below are for backwards compatibility only, - // don't use them in new code but handle the events instead! - - // called when the sash position is about to change, may return a new value - // for the sash or -1 to prevent the change from happening at all - virtual int OnSashPositionChanging(int newSashPosition); - - // Called when the sash position is about to be changed, return - // false from here to prevent the change from taking place. - // Repositions sash to minimum position if pane would be too small. - // newSashPosition here is always positive or zero. - virtual bool OnSashPositionChange(int newSashPosition); - - // If the sash is moved to an extreme position, a subwindow - // is removed from the splitter window, and the app is - // notified. The app should delete or hide the window. - virtual void OnUnsplit(wxWindow *removed); - - // Called when the sash is double-clicked. - // The default behaviour is to remove the sash if the - // minimum pane size is zero. - virtual void OnDoubleClickSash(int x, int y); - -//////////////////////////////////////////////////////////////////////////// -// Implementation - - // Paints the border and sash - void OnPaint(wxPaintEvent& event); - - // Handles mouse events - void OnMouseEvent(wxMouseEvent& ev); - - // Adjusts the panes - void OnSize(wxSizeEvent& event); - - // In live mode, resize child windows in idle time - void OnInternalIdle(); - - // Draws the sash - virtual void DrawSash(wxDC& dc); - - // Draws the sash tracker (for whilst moving the sash) - virtual void DrawSashTracker(int x, int y); - - // Tests for x, y over sash - virtual bool SashHitTest(int x, int y, int tolerance = 5); - - // 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 - -protected: - // event handlers -#if defined(__WXMSW__) || defined(__WXMAC__) - void OnSetCursor(wxSetCursorEvent& event); -#endif // wxMSW - - // send the given event, return false if the event was processed and vetoed - // by the user code - bool DoSendEvent(wxSplitterEvent& event); - - // common part of all ctors - void Init(); - - // common part of SplitVertically() and SplitHorizontally() - bool DoSplit(wxSplitMode mode, - wxWindow *window1, wxWindow *window2, - int sashPosition); - - // adjusts sash position with respect to min. pane and window sizes - int AdjustSashPosition(int sashPos) const; - - // get either width or height depending on the split mode - int GetWindowSize() const; - - // convert the user specified sash position which may be > 0 (as is), < 0 - // (specifying the size of the right pane) or 0 (use default) to the real - // position to be passed to DoSetSashPosition() - int ConvertSashPosition(int sashPos) const; - - // set the real sash position, sashPos here must be positive - // - // returns true if the sash position has been changed, false otherwise - bool DoSetSashPosition(int sashPos); - - // set the sash position and send an event about it having been changed - void SetSashPositionAndNotify(int sashPos); - - // callbacks executed when we detect that the mouse has entered or left - // the sash - virtual void OnEnterSash(); - virtual void OnLeaveSash(); - - // set the cursor appropriate for the current split mode - void SetResizeCursor(); - - // redraw the splitter if its "hotness" changed if necessary - void RedrawIfHotSensitive(bool isHot); - - // return the best size of the splitter equal to best sizes of its - // subwindows - virtual wxSize DoGetBestSize() const; - - - wxSplitMode m_splitMode; - wxWindow* m_windowOne; - wxWindow* m_windowTwo; - int m_dragMode; - int m_oldX; - int m_oldY; - int m_sashPosition; // Number of pixels from left or top - double m_sashGravity; - int m_sashSize; - wxSize m_lastSize; - int m_requestedSashPosition; - int m_sashPositionCurrent; // while dragging - int m_firstX; - int m_firstY; - int m_minimumPaneSize; - wxCursor m_sashCursorWE; - wxCursor m_sashCursorNS; - wxPen *m_sashTrackerPen; - - // when in live mode, set this to true to resize children in idle - 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() - DECLARE_NO_COPY_CLASS(wxSplitterWindow) -}; - -// ---------------------------------------------------------------------------- -// event class and macros -// ---------------------------------------------------------------------------- - -// we reuse the same class for all splitter event types because this is the -// usual wxWin convention, but the three event types have different kind of -// data associated with them, so the accessors can be only used if the real -// event type matches with the one for which the accessors make sense -class WXDLLEXPORT wxSplitterEvent : public wxNotifyEvent -{ -public: - wxSplitterEvent(wxEventType type = wxEVT_NULL, - wxSplitterWindow *splitter = (wxSplitterWindow *)NULL) - : wxNotifyEvent(type) - { - SetEventObject(splitter); - if (splitter) m_id = splitter->GetId(); - } - - // SASH_POS_CHANGED methods - - // setting the sash position to -1 prevents the change from taking place at - // all - void SetSashPosition(int pos) - { - wxASSERT( GetEventType() == wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED - || GetEventType() == wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING); - - m_data.pos = pos; - } - - int GetSashPosition() const - { - wxASSERT( GetEventType() == wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED - || GetEventType() == wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING); - - return m_data.pos; - } - - // UNSPLIT event methods - wxWindow *GetWindowBeingRemoved() const - { - wxASSERT( GetEventType() == wxEVT_COMMAND_SPLITTER_UNSPLIT ); - - return m_data.win; - } - - // DCLICK event methods - int GetX() const - { - wxASSERT( GetEventType() == wxEVT_COMMAND_SPLITTER_DOUBLECLICKED ); - - return m_data.pt.x; - } - - int GetY() const - { - wxASSERT( GetEventType() == wxEVT_COMMAND_SPLITTER_DOUBLECLICKED ); - - return m_data.pt.y; - } - -private: - friend class WXDLLIMPEXP_FWD_CORE wxSplitterWindow; - - // data for the different types of event - union - { - int pos; // position for SASH_POS_CHANGED event - wxWindow *win; // window being removed for UNSPLIT event - struct - { - int x, y; - } pt; // position of double click for DCLICK event - } m_data; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxSplitterEvent) -}; - -typedef void (wxEvtHandler::*wxSplitterEventFunction)(wxSplitterEvent&); - -#define wxSplitterEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSplitterEventFunction, &func) - -#define wx__DECLARE_SPLITTEREVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_SPLITTER_ ## evt, id, wxSplitterEventHandler(fn)) - -#define EVT_SPLITTER_SASH_POS_CHANGED(id, fn) \ - wx__DECLARE_SPLITTEREVT(SASH_POS_CHANGED, id, fn) - -#define EVT_SPLITTER_SASH_POS_CHANGING(id, fn) \ - wx__DECLARE_SPLITTEREVT(SASH_POS_CHANGING, id, fn) - -#define EVT_SPLITTER_DCLICK(id, fn) \ - wx__DECLARE_SPLITTEREVT(DOUBLECLICKED, id, fn) - -#define EVT_SPLITTER_UNSPLIT(id, fn) \ - wx__DECLARE_SPLITTEREVT(UNSPLIT, id, fn) - -#endif // _WX_GENERIC_SPLITTER_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/srchctlg.h b/desmume/src/windows/wx/include/wx/generic/srchctlg.h deleted file mode 100644 index d28856c56..000000000 --- a/desmume/src/windows/wx/include/wx/generic/srchctlg.h +++ /dev/null @@ -1,275 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/srchctlg.h -// Purpose: generic wxSearchCtrl class -// Author: Vince Harron -// Created: 2006-02-19 -// RCS-ID: $Id: srchctlg.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: Vince Harron -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_SEARCHCTRL_H_ -#define _WX_GENERIC_SEARCHCTRL_H_ - -#if wxUSE_SEARCHCTRL - -#include "wx/bitmap.h" - -class WXDLLIMPEXP_FWD_CORE wxSearchButton; -class WXDLLIMPEXP_FWD_CORE wxSearchTextCtrl; - -// ---------------------------------------------------------------------------- -// wxSearchCtrl is a combination of wxTextCtrl and wxSearchButton -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSearchCtrl : public wxSearchCtrlBase -{ -public: - // creation - // -------- - - wxSearchCtrl(); - wxSearchCtrl(wxWindow *parent, wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSearchCtrlNameStr); - - virtual ~wxSearchCtrl(); - - bool Create(wxWindow *parent, wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSearchCtrlNameStr); - -#if wxUSE_MENUS - // get/set search button menu - // -------------------------- - virtual void SetMenu( wxMenu* menu ); - virtual wxMenu* GetMenu(); -#endif // wxUSE_MENUS - - // get/set search options - // ---------------------- - virtual void ShowSearchButton( bool show ); - virtual bool IsSearchButtonVisible() const; - - virtual void ShowCancelButton( bool show ); - virtual bool IsCancelButtonVisible() const; - -#if wxABI_VERSION >= 20802 - // TODO: In 2.9 these should probably be virtual, and declared in the base class... - void SetDescriptiveText(const wxString& text); - wxString GetDescriptiveText() const; -#endif - - // accessors - // --------- - - virtual wxString GetValue() const; - virtual void SetValue(const wxString& value); - - virtual wxString GetRange(long from, long to) const; - - virtual int GetLineLength(long lineNo) const; - virtual wxString GetLineText(long lineNo) const; - virtual int GetNumberOfLines() const; - - virtual bool IsModified() const; - virtual bool IsEditable() const; - - // more readable flag testing methods - virtual bool IsSingleLine() const; - virtual bool IsMultiLine() const; - - // If the return values from and to are the same, there is no selection. - virtual void GetSelection(long* from, long* to) const; - - virtual wxString GetStringSelection() const; - - // operations - // ---------- - - // editing - virtual void Clear(); - virtual void Replace(long from, long to, const wxString& value); - virtual void Remove(long from, long to); - - // load/save the controls contents from/to the file - virtual bool LoadFile(const wxString& file); - virtual bool SaveFile(const wxString& file = wxEmptyString); - - // sets/clears the dirty flag - 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 WXUNUSED(len)); - - // writing text inserts it at the current position, appending always - // inserts it at the end - virtual void WriteText(const wxString& text); - virtual void AppendText(const wxString& text); - - // insert the character which would have resulted from this key event, - // return true if anything has been inserted - virtual bool EmulateKeyPress(const wxKeyEvent& event); - - // text control under some platforms supports the text styles: these - // methods allow to apply the given text style to the given selection or to - // set/get the style which will be used for all appended text - virtual bool SetStyle(long start, long end, const wxTextAttr& style); - virtual bool GetStyle(long position, wxTextAttr& style); - virtual bool SetDefaultStyle(const wxTextAttr& style); - virtual const wxTextAttr& GetDefaultStyle() const; - - // translate between the position (which is just an index in the text ctrl - // considering all its contents as a single strings) and (x, y) coordinates - // which represent column and line. - virtual long XYToPosition(long x, long y) const; - virtual bool PositionToXY(long pos, long *x, long *y) const; - - virtual void ShowPosition(long pos); - - // find the character at position given in pixels - // - // NB: pt is in device coords (not adjusted for the client area origin nor - // scrolling) - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const; - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, - wxTextCoord *col, - wxTextCoord *row) const; - - // Clipboard operations - virtual void Copy(); - virtual void Cut(); - virtual void Paste(); - - virtual bool CanCopy() const; - virtual bool CanCut() const; - virtual bool CanPaste() const; - - // Undo/redo - virtual void Undo(); - virtual void Redo(); - - virtual bool CanUndo() const; - virtual bool CanRedo() const; - - // Insertion point - virtual void SetInsertionPoint(long pos); - virtual void SetInsertionPointEnd(); - virtual long GetInsertionPoint() const; - virtual wxTextPos GetLastPosition() const; - - virtual void SetSelection(long from, long to); - virtual void SelectAll(); - virtual void SetEditable(bool editable); - -#if 0 - - // override streambuf method -#if wxHAS_TEXT_WINDOW_STREAM - int overflow(int i); -#endif // wxHAS_TEXT_WINDOW_STREAM - - // stream-like insertion operators: these are always available, whether we - // were, or not, compiled with streambuf support - wxTextCtrl& operator<<(const wxString& s); - wxTextCtrl& operator<<(int i); - wxTextCtrl& operator<<(long i); - wxTextCtrl& operator<<(float f); - wxTextCtrl& operator<<(double d); - wxTextCtrl& operator<<(const wxChar c); -#endif - - // do the window-specific processing after processing the update event - virtual void DoUpdateWindowUI(wxUpdateUIEvent& event); - - virtual bool ShouldInheritColours() const; - - // wxWindow overrides - virtual bool SetFont(const wxFont& font); - - // search control generic only - void SetSearchBitmap( const wxBitmap& bitmap ); - void SetCancelBitmap( const wxBitmap& bitmap ); -#if wxUSE_MENUS - void SetSearchMenuBitmap( const wxBitmap& bitmap ); -#endif // wxUSE_MENUS - -protected: - virtual void DoSetValue(const wxString& value, int flags = 0); - - // override the base class virtuals involved into geometry calculations - virtual wxSize DoGetBestSize() const; - virtual void DoMoveWindow(int x, int y, int width, int height); - virtual void LayoutControls(int x, int y, int width, int height); - - virtual void RecalcBitmaps(); - - void Init(); - - virtual wxBitmap RenderSearchBitmap( int x, int y, bool renderDrop ); - virtual wxBitmap RenderCancelBitmap( int x, int y ); - - virtual void OnSearchButton( wxCommandEvent& event ); - - void OnSetFocus( wxFocusEvent& event ); - void OnSize( wxSizeEvent& event ); - - bool HasMenu() const - { -#if wxUSE_MENUS - return m_menu != NULL; -#else // !wxUSE_MENUS - return false; -#endif // wxUSE_MENUS/!wxUSE_MENUS - } - -private: - friend class wxSearchButton; - -#if wxUSE_MENUS - void PopupSearchMenu(); -#endif // wxUSE_MENUS - - // the subcontrols - wxSearchTextCtrl *m_text; - wxSearchButton *m_searchButton; - wxSearchButton *m_cancelButton; -#if wxUSE_MENUS - wxMenu *m_menu; -#endif // wxUSE_MENUS - - bool m_searchButtonVisible; - bool m_cancelButtonVisible; - - bool m_searchBitmapUser; - bool m_cancelBitmapUser; -#if wxUSE_MENUS - bool m_searchMenuBitmapUser; -#endif // wxUSE_MENUS - - wxBitmap m_searchBitmap; - wxBitmap m_cancelBitmap; -#if wxUSE_MENUS - wxBitmap m_searchMenuBitmap; -#endif // wxUSE_MENUS - -private: - DECLARE_DYNAMIC_CLASS(wxSearchCtrl) - - DECLARE_EVENT_TABLE() -}; - -#endif // wxUSE_SEARCHCTRL - -#endif // _WX_GENERIC_SEARCHCTRL_H_ - diff --git a/desmume/src/windows/wx/include/wx/generic/statline.h b/desmume/src/windows/wx/include/wx/generic/statline.h deleted file mode 100644 index 114ec3592..000000000 --- a/desmume/src/windows/wx/include/wx/generic/statline.h +++ /dev/null @@ -1,62 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: generic/statline.h -// Purpose: a generic wxStaticLine class -// Author: Vadim Zeitlin -// Created: 28.06.99 -// Version: $Id: statline.h 43874 2006-12-09 14:52:59Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_STATLINE_H_ -#define _WX_GENERIC_STATLINE_H_ - -class wxStaticBox; - -// ---------------------------------------------------------------------------- -// wxStaticLine -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStaticLine : public wxStaticLineBase -{ - DECLARE_DYNAMIC_CLASS(wxStaticLine) - -public: - // constructors and pseudo-constructors - wxStaticLine() { m_statbox = NULL; } - - wxStaticLine( wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxLI_HORIZONTAL, - const wxString &name = wxStaticLineNameStr ) - { - Create(parent, id, pos, size, style, name); - } - - virtual ~wxStaticLine(); - - bool Create( wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxLI_HORIZONTAL, - const wxString &name = wxStaticLineNameStr ); - - // it's necessary to override this wxWindow function because we - // will want to return the main widget for m_statbox - // - WXWidget GetMainWidget() const; - - // override wxWindow methods to make things work - virtual void DoSetSize(int x, int y, int width, int height, - int sizeFlags = wxSIZE_AUTO); - virtual void DoMoveWindow(int x, int y, int width, int height); -protected: - // we implement the static line using a static box - wxStaticBox *m_statbox; -}; - -#endif // _WX_GENERIC_STATLINE_H_ - diff --git a/desmume/src/windows/wx/include/wx/generic/statusbr.h b/desmume/src/windows/wx/include/wx/generic/statusbr.h deleted file mode 100644 index 4852acde5..000000000 --- a/desmume/src/windows/wx/include/wx/generic/statusbr.h +++ /dev/null @@ -1,107 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/statusbr.h -// Purpose: wxStatusBarGeneric class -// Author: Julian Smart -// Modified by: VZ at 05.02.00 to derive from wxStatusBarBase -// Created: 01/02/97 -// RCS-ID: $Id: statusbr.h 41200 2006-09-13 19:10:31Z ABX $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_STATUSBR_H_ -#define _WX_GENERIC_STATUSBR_H_ - -#include "wx/defs.h" - -#if wxUSE_STATUSBAR - -#include "wx/pen.h" -#include "wx/arrstr.h" - -class WXDLLEXPORT wxStatusBarGeneric : public wxStatusBarBase -{ -public: - wxStatusBarGeneric() { Init(); } - wxStatusBarGeneric(wxWindow *parent, - wxWindowID winid = wxID_ANY, - long style = wxST_SIZEGRIP, - const wxString& name = wxStatusBarNameStr) - { - Init(); - - Create(parent, winid, style, name); - } - - virtual ~wxStatusBarGeneric(); - - bool Create(wxWindow *parent, wxWindowID winid = wxID_ANY, - long style = wxST_SIZEGRIP, - const wxString& name = wxStatusBarNameStr); - - // Create status line - virtual void SetFieldsCount(int number = 1, - const int *widths = (const int *) NULL); - - // Set status line text - virtual void SetStatusText(const wxString& text, int number = 0); - virtual wxString GetStatusText(int number = 0) const; - - // Set status line widths - virtual void SetStatusWidths(int n, const int widths_field[]); - - // Get the position and size of the field's internal bounding rectangle - virtual bool GetFieldRect(int i, wxRect& rect) const; - - // sets the minimal vertical size of the status bar - virtual void SetMinHeight(int height); - - virtual int GetBorderX() const { return m_borderX; } - virtual int GetBorderY() const { return m_borderY; } - - //////////////////////////////////////////////////////////////////////// - // Implementation - - virtual void DrawFieldText(wxDC& dc, int i); - virtual void DrawField(wxDC& dc, int i); - - void SetBorderX(int x); - void SetBorderY(int y); - - void OnPaint(wxPaintEvent& event); - - void OnLeftDown(wxMouseEvent& event); - void OnRightDown(wxMouseEvent& event); - - virtual void InitColours(); - - // Responds to colour changes - void OnSysColourChanged(wxSysColourChangedEvent& event); - -protected: - // common part of all ctors - void Init(); - - wxArrayString m_statusStrings; - - // the last known width of the client rect (used to rebuild cache) - int m_lastClientWidth; - // the widths of the status bar panes in pixels - wxArrayInt m_widthsAbs; - - int m_borderX; - int m_borderY; - wxPen m_mediumShadowPen; - wxPen m_hilightPen; - - virtual wxSize DoGetBestSize() const; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxStatusBarGeneric) -}; - -#endif // wxUSE_STATUSBAR - -#endif - // _WX_GENERIC_STATUSBR_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/tabg.h b/desmume/src/windows/wx/include/wx/generic/tabg.h deleted file mode 100644 index bdac54166..000000000 --- a/desmume/src/windows/wx/include/wx/generic/tabg.h +++ /dev/null @@ -1,363 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: tabg.h -// Purpose: Generic tabbed dialogs -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: tabg.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __TABGH_G__ -#define __TABGH_G__ - -#define WXTAB_VERSION 1.1 - -#include "wx/hashmap.h" -#include "wx/string.h" -#include "wx/dialog.h" -#include "wx/panel.h" -#include "wx/list.h" - -class WXDLLEXPORT wxTabView; - -/* - * A wxTabControl is the internal and visual representation - * of the tab. - */ - -class WXDLLEXPORT wxTabControl: public wxObject -{ -DECLARE_DYNAMIC_CLASS(wxTabControl) -public: - wxTabControl(wxTabView *v = (wxTabView *) NULL); - virtual ~wxTabControl(void); - - virtual void OnDraw(wxDC& dc, bool lastInRow); - void SetLabel(const wxString& str) { m_controlLabel = str; } - wxString GetLabel(void) const { return m_controlLabel; } - - void SetFont(const wxFont& f) { m_labelFont = f; } - wxFont *GetFont(void) const { return (wxFont*) & m_labelFont; } - - void SetSelected(bool sel) { m_isSelected = sel; } - bool IsSelected(void) const { return m_isSelected; } - - void SetPosition(int x, int y) { m_offsetX = x; m_offsetY = y; } - void SetSize(int x, int y) { m_width = x; m_height = y; } - - void SetRowPosition(int r) { m_rowPosition = r; } - int GetRowPosition() const { return m_rowPosition; } - void SetColPosition(int c) { m_colPosition = c; } - int GetColPosition() const { return m_colPosition; } - - int GetX(void) const { return m_offsetX; } - int GetY(void) const { return m_offsetY; } - int GetWidth(void) const { return m_width; } - int GetHeight(void) const { return m_height; } - - int GetId(void) const { return m_id; } - void SetId(int i) { m_id = i; } - - virtual bool HitTest(int x, int y) const ; - -protected: - wxTabView* m_view; - wxString m_controlLabel; - bool m_isSelected; - wxFont m_labelFont; - int m_offsetX; // Offsets from top-left of tab view area (the area below the tabs) - int m_offsetY; - int m_width; - int m_height; - int m_id; - int m_rowPosition; // Position in row from 0 - int m_colPosition; // Position in col from 0 -}; - -/* - * Each wxTabLayer is a list of tabs. E.g. there - * are 3 layers in the MS Word Options dialog. - */ - -class WXDLLEXPORT wxTabLayer: public wxList -{ -}; - -/* - * The wxTabView controls and draws the tabbed object - */ - -WX_DECLARE_LIST(wxTabLayer, wxTabLayerList); - -#define wxTAB_STYLE_DRAW_BOX 1 // Draws 3D boxes round tab layers -#define wxTAB_STYLE_COLOUR_INTERIOR 2 // Colours interior of tabs, otherwise draws outline - -class WXDLLEXPORT wxTabView: public wxObject -{ -DECLARE_DYNAMIC_CLASS(wxTabView) -public: - wxTabView(long style = wxTAB_STYLE_DRAW_BOX | wxTAB_STYLE_COLOUR_INTERIOR); - virtual ~wxTabView(); - - inline int GetNumberOfLayers() const { return m_layers.GetCount(); } -#if WXWIN_COMPATIBILITY_2_4 - inline wxList& GetLayers() { return *(wxList *)&m_layers; } -#else - inline wxTabLayerList& GetLayers() { return m_layers; } -#endif - - inline void SetWindow(wxWindow* wnd) { m_window = wnd; } - inline wxWindow* GetWindow(void) const { return m_window; } - - // Automatically positions tabs - wxTabControl *AddTab(int id, const wxString& label, wxTabControl *existingTab = (wxTabControl *) NULL); - - // Remove the tab without deleting the window - bool RemoveTab(int id); - - void ClearTabs(bool deleteTabs = true); - - bool SetTabText(int id, const wxString& label); - wxString GetTabText(int id) const; - - // Layout tabs (optional, e.g. if resizing window) - void LayoutTabs(); - - // Draw all tabs - virtual void Draw(wxDC& dc); - - // Process mouse event, return false if we didn't process it - virtual bool OnEvent(wxMouseEvent& event); - - // 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; }; - - // Allows use of application-supplied wxTabControl classes. - virtual wxTabControl *OnCreateTabControl(void) { return new wxTabControl(this); } - - void SetHighlightColour(const wxColour& col); - void SetShadowColour(const wxColour& col); - void SetBackgroundColour(const wxColour& col); - inline void SetTextColour(const wxColour& col) { m_textColour = col; } - - inline wxColour GetHighlightColour(void) const { return m_highlightColour; } - inline wxColour GetShadowColour(void) const { return m_shadowColour; } - inline wxColour GetBackgroundColour(void) const { return m_backgroundColour; } - inline wxColour GetTextColour(void) const { return m_textColour; } - inline const wxPen *GetHighlightPen(void) const { return m_highlightPen; } - inline const wxPen *GetShadowPen(void) const { return m_shadowPen; } - inline const wxPen *GetBackgroundPen(void) const { return m_backgroundPen; } - inline const wxBrush *GetBackgroundBrush(void) const { return m_backgroundBrush; } - - inline void SetViewRect(const wxRect& rect) { m_tabViewRect = rect; } - inline wxRect GetViewRect(void) const { return m_tabViewRect; } - - // Calculate tab width to fit to view, and optionally adjust the view - // to fit the tabs exactly. - int CalculateTabWidth(int noTabs, bool adjustView = false); - - inline void SetTabStyle(long style) { m_tabStyle = style; } - inline long GetTabStyle(void) const { return m_tabStyle; } - - inline void SetTabSize(int w, int h) { m_tabWidth = w; m_tabHeight = h; } - inline int GetTabWidth(void) const { return m_tabWidth; } - inline int GetTabHeight(void) const { return m_tabHeight; } - inline void SetTabSelectionHeight(int h) { m_tabSelectionHeight = h; } - inline int GetTabSelectionHeight(void) const { return m_tabSelectionHeight; } - - // Returns the total height of the tabs component -- this may be several - // times the height of a tab, if there are several tab layers (rows). - int GetTotalTabHeight(); - - inline int GetTopMargin(void) const { return m_topMargin; } - inline void SetTopMargin(int margin) { m_topMargin = margin; } - - void SetTabSelection(int sel, bool activateTool = true); - inline int GetTabSelection() const { return m_tabSelection; } - - // Find tab control for id - wxTabControl *FindTabControlForId(int id) const ; - - // Find tab control for layer, position (starting from zero) - wxTabControl *FindTabControlForPosition(int layer, int position) const ; - - inline int GetHorizontalTabOffset() const { return m_tabHorizontalOffset; } - inline int GetHorizontalTabSpacing() const { return m_tabHorizontalSpacing; } - inline void SetHorizontalTabOffset(int sp) { m_tabHorizontalOffset = sp; } - inline void SetHorizontalTabSpacing(int sp) { m_tabHorizontalSpacing = sp; } - - inline void SetVerticalTabTextSpacing(int s) { m_tabVerticalTextSpacing = s; } - inline int GetVerticalTabTextSpacing() const { return m_tabVerticalTextSpacing; } - - inline wxFont *GetTabFont() const { return (wxFont*) & m_tabFont; } - inline void SetTabFont(const wxFont& f) { m_tabFont = f; } - - inline wxFont *GetSelectedTabFont() const { return (wxFont*) & m_tabSelectedFont; } - inline void SetSelectedTabFont(const wxFont& f) { m_tabSelectedFont = f; } - // Find the node and the column at which this control is positioned. - wxList::compatibility_iterator FindTabNodeAndColumn(wxTabControl *control, int *col) const ; - - // Do the necessary to change to this tab - virtual bool ChangeTab(wxTabControl *control); - - // Move the selected tab to the bottom layer, if necessary, - // without calling app activation code - bool MoveSelectionTab(wxTabControl *control); - - inline int GetNumberOfTabs() const { return m_noTabs; } - -protected: - // List of layers, from front to back. - wxTabLayerList m_layers; - - // Selected tab - int m_tabSelection; - - // Usual tab height - int m_tabHeight; - - // The height of the selected tab - int m_tabSelectionHeight; - - // Usual tab width - int m_tabWidth; - - // Space between tabs - int m_tabHorizontalSpacing; - - // Space between top of normal tab and text - int m_tabVerticalTextSpacing; - - // Horizontal offset of each tab row above the first - int m_tabHorizontalOffset; - - // The distance between the bottom of the first tab row - // and the top of the client area (i.e. the margin) - int m_topMargin; - - // The position and size of the view above which the tabs are placed. - // I.e., the internal client area of the sheet. - wxRect m_tabViewRect; - - // Bitlist of styles - long m_tabStyle; - - // Colours - wxColour m_highlightColour; - wxColour m_shadowColour; - wxColour m_backgroundColour; - wxColour m_textColour; - - // Pen and brush cache - const wxPen* m_highlightPen; - const wxPen* m_shadowPen; - const wxPen* m_backgroundPen; - const wxBrush* m_backgroundBrush; - - wxFont m_tabFont; - wxFont m_tabSelectedFont; - - int m_noTabs; - - wxWindow* m_window; -}; - -/* - * A dialog box class that is tab-friendly - */ - -class WXDLLEXPORT wxTabbedDialog : public wxDialog -{ - DECLARE_DYNAMIC_CLASS(wxTabbedDialog) - -public: - wxTabbedDialog(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long windowStyle = wxDEFAULT_DIALOG_STYLE, - const wxString& name = wxDialogNameStr); - virtual ~wxTabbedDialog(); - - wxTabView *GetTabView() const { return m_tabView; } - void SetTabView(wxTabView *v) { m_tabView = v; } - - void OnCloseWindow(wxCloseEvent& event); - void OnMouseEvent(wxMouseEvent& event); - void OnPaint(wxPaintEvent& event); - -protected: - wxTabView* m_tabView; - -private: - DECLARE_EVENT_TABLE() -}; - -/* - * A panel class that is tab-friendly - */ - -class WXDLLEXPORT wxTabbedPanel : public wxPanel -{ - DECLARE_DYNAMIC_CLASS(wxTabbedPanel) - -public: - wxTabbedPanel(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long windowStyle = 0, - const wxString& name = wxPanelNameStr); - virtual ~wxTabbedPanel(); - - wxTabView *GetTabView() const { return m_tabView; } - void SetTabView(wxTabView *v) { m_tabView = v; } - - void OnMouseEvent(wxMouseEvent& event); - void OnPaint(wxPaintEvent& event); - -protected: - wxTabView* m_tabView; - -private: - DECLARE_EVENT_TABLE() -}; - -WX_DECLARE_HASH_MAP(int, wxWindow*, wxIntegerHash, wxIntegerEqual, - wxIntToWindowHashMap); - -class WXDLLEXPORT wxPanelTabView : public wxTabView -{ - DECLARE_DYNAMIC_CLASS(wxPanelTabView) - -public: - wxPanelTabView(wxPanel *pan, long style = wxTAB_STYLE_DRAW_BOX | wxTAB_STYLE_COLOUR_INTERIOR); - virtual ~wxPanelTabView(void); - - // Called when a tab is activated - virtual void OnTabActivate(int activateId, int deactivateId); - - // Specific to this class - void AddTabWindow(int id, wxWindow *window); - wxWindow *GetTabWindow(int id) const ; - void ClearWindows(bool deleteWindows = true); - wxWindow *GetCurrentWindow() const { return m_currentWindow; } - - void ShowWindowForTab(int id); - // wxList& GetWindows() const { return (wxList&) m_tabWindows; } - -protected: - // List of panels, one for each tab. Indexed - // by tab ID. - wxIntToWindowHashMap m_tabWindows; - wxWindow* m_currentWindow; - wxPanel* m_panel; -}; - -#endif - diff --git a/desmume/src/windows/wx/include/wx/generic/textdlgg.h b/desmume/src/windows/wx/include/wx/generic/textdlgg.h deleted file mode 100644 index f7809e58d..000000000 --- a/desmume/src/windows/wx/include/wx/generic/textdlgg.h +++ /dev/null @@ -1,113 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: textdlgg.h -// Purpose: wxTextEntryDialog class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: textdlgg.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __TEXTDLGH_G__ -#define __TEXTDLGH_G__ - -#include "wx/defs.h" - -#if wxUSE_TEXTDLG - -#include "wx/dialog.h" - -#if wxUSE_VALIDATORS -#include "wx/valtext.h" -#endif - -class WXDLLIMPEXP_FWD_CORE wxTextCtrl; - -extern WXDLLEXPORT_DATA(const wxChar) wxGetTextFromUserPromptStr[]; -extern WXDLLEXPORT_DATA(const wxChar) wxGetPasswordFromUserPromptStr[]; - -#define wxTextEntryDialogStyle (wxOK | wxCANCEL | wxCENTRE | wxWS_EX_VALIDATE_RECURSIVELY) - -// ---------------------------------------------------------------------------- -// wxTextEntryDialog: a dialog with text control, [ok] and [cancel] buttons -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTextEntryDialog : public wxDialog -{ -public: - wxTextEntryDialog(wxWindow *parent, - const wxString& message, - const wxString& caption = wxGetTextFromUserPromptStr, - const wxString& value = wxEmptyString, - long style = wxTextEntryDialogStyle, - const wxPoint& pos = wxDefaultPosition); - - void SetValue(const wxString& val); - wxString GetValue() const { return m_value; } - -#if wxUSE_VALIDATORS - void SetTextValidator( const wxTextValidator& validator ); - void SetTextValidator( long style = wxFILTER_NONE ); - wxTextValidator* GetTextValidator() { return (wxTextValidator*)m_textctrl->GetValidator(); } -#endif - // wxUSE_VALIDATORS - - // implementation only - void OnOK(wxCommandEvent& event); - -protected: - wxTextCtrl *m_textctrl; - wxString m_value; - long m_dialogStyle; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxTextEntryDialog) - DECLARE_NO_COPY_CLASS(wxTextEntryDialog) -}; - -// ---------------------------------------------------------------------------- -// wxPasswordEntryDialog: dialog with password control, [ok] and [cancel] -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPasswordEntryDialog : public wxTextEntryDialog -{ -public: - wxPasswordEntryDialog(wxWindow *parent, - const wxString& message, - const wxString& caption = wxGetPasswordFromUserPromptStr, - const wxString& value = wxEmptyString, - long style = wxTextEntryDialogStyle, - const wxPoint& pos = wxDefaultPosition); -private: - DECLARE_DYNAMIC_CLASS(wxPasswordEntryDialog) - DECLARE_NO_COPY_CLASS(wxPasswordEntryDialog) -}; - -// ---------------------------------------------------------------------------- -// function to get a string from user -// ---------------------------------------------------------------------------- - -wxString WXDLLEXPORT -wxGetTextFromUser(const wxString& message, - const wxString& caption = wxGetTextFromUserPromptStr, - const wxString& default_value = wxEmptyString, - wxWindow *parent = (wxWindow *) NULL, - wxCoord x = wxDefaultCoord, - wxCoord y = wxDefaultCoord, - bool centre = true); - -wxString WXDLLEXPORT -wxGetPasswordFromUser(const wxString& message, - const wxString& caption = wxGetPasswordFromUserPromptStr, - const wxString& default_value = wxEmptyString, - wxWindow *parent = (wxWindow *) NULL, - wxCoord x = wxDefaultCoord, - wxCoord y = wxDefaultCoord, - bool centre = true); - -#endif - // wxUSE_TEXTDLG -#endif - // __TEXTDLGH_G__ diff --git a/desmume/src/windows/wx/include/wx/generic/timer.h b/desmume/src/windows/wx/include/wx/generic/timer.h deleted file mode 100644 index 0f52c1b4a..000000000 --- a/desmume/src/windows/wx/include/wx/generic/timer.h +++ /dev/null @@ -1,45 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: timer.h -// Purpose: Generic implementation of wxTimer class -// Author: Vaclav Slavik -// Id: $Id: timer.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - - -#ifndef __WX_TIMER_H__ -#define __WX_TIMER_H__ - -//----------------------------------------------------------------------------- -// wxTimer -//----------------------------------------------------------------------------- - -class wxTimerDesc; - -class WXDLLEXPORT wxTimer : public wxTimerBase -{ -public: - wxTimer() { Init(); } - wxTimer(wxEvtHandler *owner, int timerid = -1) : wxTimerBase(owner, timerid) - { Init(); } - virtual ~wxTimer(); - - virtual bool Start(int millisecs = -1, bool oneShot = false); - virtual void Stop(); - - virtual bool IsRunning() const; - - // implementation - static void NotifyTimers(); - -protected: - void Init(); - -private: - wxTimerDesc *m_desc; - - DECLARE_ABSTRACT_CLASS(wxTimer) -}; - -#endif // __WX_TIMER_H__ diff --git a/desmume/src/windows/wx/include/wx/generic/treectlg.h b/desmume/src/windows/wx/include/wx/generic/treectlg.h deleted file mode 100644 index a555716f6..000000000 --- a/desmume/src/windows/wx/include/wx/generic/treectlg.h +++ /dev/null @@ -1,383 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/treectlg.h -// Purpose: wxTreeCtrl class -// Author: Robert Roebling -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: treectlg.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 1997,1998 Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _GENERIC_TREECTRL_H_ -#define _GENERIC_TREECTRL_H_ - -#if wxUSE_TREECTRL - -#include "wx/scrolwin.h" -#include "wx/pen.h" - -// ----------------------------------------------------------------------------- -// forward declaration -// ----------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxGenericTreeItem; - -class WXDLLIMPEXP_FWD_CORE wxTreeItemData; - -class WXDLLIMPEXP_FWD_CORE wxTreeRenameTimer; -class WXDLLIMPEXP_FWD_CORE wxTreeFindTimer; -class WXDLLIMPEXP_FWD_CORE wxTreeTextCtrl; -class WXDLLIMPEXP_FWD_CORE wxTextCtrl; - -// ----------------------------------------------------------------------------- -// wxGenericTreeCtrl - the tree control -// ----------------------------------------------------------------------------- - -class WXDLLEXPORT wxGenericTreeCtrl : public wxTreeCtrlBase, - public wxScrollHelper -{ -public: - // creation - // -------- - - wxGenericTreeCtrl() : wxTreeCtrlBase(), wxScrollHelper(this) { Init(); } - - wxGenericTreeCtrl(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxTR_DEFAULT_STYLE, - const wxValidator &validator = wxDefaultValidator, - const wxString& name = wxTreeCtrlNameStr) - : wxTreeCtrlBase(), - wxScrollHelper(this) - { - Init(); - Create(parent, id, pos, size, style, validator, name); - } - - virtual ~wxGenericTreeCtrl(); - - bool Create(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxTR_DEFAULT_STYLE, - const wxValidator &validator = wxDefaultValidator, - const wxString& name = wxTreeCtrlNameStr); - - - // implement base class pure virtuals - // ---------------------------------- - - virtual unsigned int GetCount() const; - - virtual unsigned int GetIndent() const { return m_indent; } - virtual void SetIndent(unsigned int indent); - - - virtual void SetImageList(wxImageList *imageList); - virtual void SetStateImageList(wxImageList *imageList); - - virtual wxString GetItemText(const wxTreeItemId& item) const; - virtual int GetItemImage(const wxTreeItemId& item, - wxTreeItemIcon which = wxTreeItemIcon_Normal) const; - virtual wxTreeItemData *GetItemData(const wxTreeItemId& item) const; - virtual wxColour GetItemTextColour(const wxTreeItemId& item) const; - virtual wxColour GetItemBackgroundColour(const wxTreeItemId& item) const; - virtual wxFont GetItemFont(const wxTreeItemId& item) const; - - virtual void SetItemText(const wxTreeItemId& item, const wxString& text); - virtual void SetItemImage(const wxTreeItemId& item, - int image, - wxTreeItemIcon which = wxTreeItemIcon_Normal); - virtual void SetItemData(const wxTreeItemId& item, wxTreeItemData *data); - - virtual void SetItemHasChildren(const wxTreeItemId& item, bool has = true); - virtual void SetItemBold(const wxTreeItemId& item, bool bold = true); - virtual void SetItemDropHighlight(const wxTreeItemId& item, bool highlight = true); - virtual void SetItemTextColour(const wxTreeItemId& item, const wxColour& col); - virtual void SetItemBackgroundColour(const wxTreeItemId& item, const wxColour& col); - virtual void SetItemFont(const wxTreeItemId& item, const wxFont& font); - - virtual bool IsVisible(const wxTreeItemId& item) const; - virtual bool ItemHasChildren(const wxTreeItemId& item) const; - virtual bool IsExpanded(const wxTreeItemId& item) const; - virtual bool IsSelected(const wxTreeItemId& item) const; - virtual bool IsBold(const wxTreeItemId& item) const; - - virtual size_t GetChildrenCount(const wxTreeItemId& item, - bool recursively = true) const; - - // navigation - // ---------- - - virtual wxTreeItemId GetRootItem() const { return m_anchor; } - virtual wxTreeItemId GetSelection() const { return m_current; } - virtual size_t GetSelections(wxArrayTreeItemIds&) const; - - virtual wxTreeItemId GetItemParent(const wxTreeItemId& item) const; - virtual wxTreeItemId GetFirstChild(const wxTreeItemId& item, - wxTreeItemIdValue& cookie) const; - virtual wxTreeItemId GetNextChild(const wxTreeItemId& item, - wxTreeItemIdValue& cookie) const; - virtual wxTreeItemId GetLastChild(const wxTreeItemId& item) const; - virtual wxTreeItemId GetNextSibling(const wxTreeItemId& item) const; - virtual wxTreeItemId GetPrevSibling(const wxTreeItemId& item) const; - - virtual wxTreeItemId GetFirstVisibleItem() const; - virtual wxTreeItemId GetNextVisible(const wxTreeItemId& item) const; - virtual wxTreeItemId GetPrevVisible(const wxTreeItemId& item) const; - - - // operations - // ---------- - - virtual wxTreeItemId AddRoot(const wxString& text, - int image = -1, int selectedImage = -1, - wxTreeItemData *data = NULL); - - virtual void Delete(const wxTreeItemId& item); - virtual void DeleteChildren(const wxTreeItemId& item); - virtual void DeleteAllItems(); - - virtual void Expand(const wxTreeItemId& item); - virtual void Collapse(const wxTreeItemId& item); - virtual void CollapseAndReset(const wxTreeItemId& item); - virtual void Toggle(const wxTreeItemId& item); - - virtual void Unselect(); - virtual void UnselectAll(); - virtual void SelectItem(const wxTreeItemId& item, bool select = true); - - virtual void EnsureVisible(const wxTreeItemId& item); - virtual void ScrollTo(const wxTreeItemId& item); - - virtual wxTextCtrl *EditLabel(const wxTreeItemId& item, - wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)); - virtual wxTextCtrl *GetEditControl() const; - virtual void EndEditLabel(const wxTreeItemId& item, - bool discardChanges = false); - - virtual void SortChildren(const wxTreeItemId& item); - - // items geometry - // -------------- - - virtual bool GetBoundingRect(const wxTreeItemId& item, - wxRect& rect, - bool textOnly = false) const; - - - // this version specific methods - // ----------------------------- - - wxImageList *GetButtonsImageList() const { return m_imageListButtons; } - void SetButtonsImageList(wxImageList *imageList); - void AssignButtonsImageList(wxImageList *imageList); - - void SetDropEffectAboveItem( bool above = false ) { m_dropEffectAboveItem = above; } - bool GetDropEffectAboveItem() const { return m_dropEffectAboveItem; } - - wxTreeItemId GetNext(const wxTreeItemId& item) const; - -#if WXWIN_COMPATIBILITY_2_6 - // use EditLabel() instead - void Edit( const wxTreeItemId& item ) { EditLabel(item); } -#endif // WXWIN_COMPATIBILITY_2_6 - -#if WXWIN_COMPATIBILITY_2_4 - // deprecated functions: use Set/GetItemImage directly - wxDEPRECATED( int GetItemSelectedImage(const wxTreeItemId& item) const ); - wxDEPRECATED( void SetItemSelectedImage(const wxTreeItemId& item, int image) ); - - // use the versions taking wxTreeItemIdValue cookies (note that - // GetNextChild() is not inside wxDEPRECATED on purpose, as otherwise we - // get twice as many warnings without any added benefit: it is always used - // with GetFirstChild() anyhow) - wxDEPRECATED( wxTreeItemId GetFirstChild(const wxTreeItemId& item, - long& cookie) const ); - wxTreeItemId GetNextChild(const wxTreeItemId& item, - long& cookie) const; -#endif // WXWIN_COMPATIBILITY_2_4 - - // implementation only from now on - - // overridden base class virtuals - virtual bool SetBackgroundColour(const wxColour& colour); - virtual bool SetForegroundColour(const wxColour& colour); - - virtual void Freeze(); - virtual void Thaw(); - virtual void Refresh(bool eraseBackground = true, const wxRect *rect = NULL); - - virtual bool SetFont( const wxFont &font ); - virtual void SetWindowStyle(const long styles); - - // callbacks - void OnPaint( wxPaintEvent &event ); - void OnSetFocus( wxFocusEvent &event ); - void OnKillFocus( wxFocusEvent &event ); - void OnChar( wxKeyEvent &event ); - void OnMouse( wxMouseEvent &event ); - void OnGetToolTip( wxTreeEvent &event ); - void OnSize( wxSizeEvent &event ); - void OnInternalIdle( ); - - virtual wxVisualAttributes GetDefaultAttributes() const - { - return GetClassDefaultAttributes(GetWindowVariant()); - } - - static wxVisualAttributes - GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); - - // implementation helpers - void AdjustMyScrollbars(); - - WX_FORWARD_TO_SCROLL_HELPER() - -protected: - friend class wxGenericTreeItem; - friend class wxTreeRenameTimer; - friend class wxTreeFindTimer; - friend class wxTreeTextCtrl; - - wxFont m_normalFont; - wxFont m_boldFont; - - wxGenericTreeItem *m_anchor; - wxGenericTreeItem *m_current, - *m_key_current, - // A hint to select a parent item after deleting a child - *m_select_me; - unsigned short m_indent; - int m_lineHeight; - wxPen m_dottedPen; - wxBrush *m_hilightBrush, - *m_hilightUnfocusedBrush; - bool m_hasFocus; - bool m_dirty; - bool m_ownsImageListButtons; - bool m_isDragging; // true between BEGIN/END drag events - bool m_lastOnSame; // last click on the same item as prev - wxImageList *m_imageListButtons; - - int m_freezeCount; - int m_dragCount; - wxPoint m_dragStart; - wxGenericTreeItem *m_dropTarget; - wxCursor m_oldCursor; // cursor is changed while dragging - wxGenericTreeItem *m_oldSelection; - wxGenericTreeItem *m_underMouse; // for visual effects - wxTreeTextCtrl *m_textCtrl; - - wxTimer *m_renameTimer; - - // incremental search data - wxString m_findPrefix; - wxTimer *m_findTimer; - - bool m_dropEffectAboveItem; - - // the common part of all ctors - void Init(); - - // misc helpers - void SendDeleteEvent(wxGenericTreeItem *itemBeingDeleted); - - void DrawBorder(const wxTreeItemId& item); - void DrawLine(const wxTreeItemId& item, bool below); - void DrawDropEffect(wxGenericTreeItem *item); - - void DoSelectItem(const wxTreeItemId& id, - bool unselect_others = true, - bool extended_select = false); - - virtual wxTreeItemId DoInsertItem(const wxTreeItemId& parent, - size_t previous, - const wxString& text, - int image, - int selectedImage, - wxTreeItemData *data); - virtual wxTreeItemId DoInsertAfter(const wxTreeItemId& parent, - const wxTreeItemId& idPrevious, - const wxString& text, - int image = -1, int selImage = -1, - wxTreeItemData *data = NULL); - virtual wxTreeItemId DoTreeHitTest(const wxPoint& point, int& flags) const; - - // called by wxTextTreeCtrl when it marks itself for deletion - void ResetTextControl(); - - // find the first item starting with the given prefix after the given item - wxTreeItemId FindItem(const wxTreeItemId& id, const wxString& prefix) const; - - bool HasButtons() const { return HasFlag(wxTR_HAS_BUTTONS); } - - void CalculateLineHeight(); - int GetLineHeight(wxGenericTreeItem *item) const; - void PaintLevel( wxGenericTreeItem *item, wxDC& dc, int level, int &y ); - void PaintItem( wxGenericTreeItem *item, wxDC& dc); - - void CalculateLevel( wxGenericTreeItem *item, wxDC &dc, int level, int &y ); - void CalculatePositions(); - void CalculateSize( wxGenericTreeItem *item, wxDC &dc ); - - void RefreshSubtree( wxGenericTreeItem *item ); - void RefreshLine( wxGenericTreeItem *item ); - - // redraw all selected items - void RefreshSelected(); - - // RefreshSelected() recursive helper - void RefreshSelectedUnder(wxGenericTreeItem *item); - - void OnRenameTimer(); - bool OnRenameAccept(wxGenericTreeItem *item, const wxString& value); - void OnRenameCancelled(wxGenericTreeItem *item); - - void FillArray(wxGenericTreeItem*, wxArrayTreeItemIds&) const; - void SelectItemRange( wxGenericTreeItem *item1, wxGenericTreeItem *item2 ); - bool TagAllChildrenUntilLast(wxGenericTreeItem *crt_item, wxGenericTreeItem *last_item, bool select); - bool TagNextChildren(wxGenericTreeItem *crt_item, wxGenericTreeItem *last_item, bool select); - void UnselectAllChildren( wxGenericTreeItem *item ); - void ChildrenClosing(wxGenericTreeItem* item); - - void DoDirtyProcessing(); - - virtual wxSize DoGetBestSize() const; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxGenericTreeCtrl) - DECLARE_NO_COPY_CLASS(wxGenericTreeCtrl) -}; - -#if !defined(__WXMSW__) || defined(__WXUNIVERSAL__) -/* - * wxTreeCtrl has to be a real class or we have problems with - * the run-time information. - */ - -class WXDLLEXPORT wxTreeCtrl: public wxGenericTreeCtrl -{ - DECLARE_DYNAMIC_CLASS(wxTreeCtrl) - -public: - wxTreeCtrl() {} - - wxTreeCtrl(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxTR_DEFAULT_STYLE, - const wxValidator &validator = wxDefaultValidator, - const wxString& name = wxTreeCtrlNameStr) - : wxGenericTreeCtrl(parent, id, pos, size, style, validator, name) - { - } -}; -#endif // !__WXMSW__ || __WXUNIVERSAL__ - -#endif // wxUSE_TREECTRL - -#endif // _GENERIC_TREECTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/generic/wizard.h b/desmume/src/windows/wx/include/wx/generic/wizard.h deleted file mode 100644 index 5d4d9bd60..000000000 --- a/desmume/src/windows/wx/include/wx/generic/wizard.h +++ /dev/null @@ -1,142 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/generic/wizard.h -// Purpose: declaration of generic wxWizard class -// Author: Vadim Zeitlin -// Modified by: Robert Vazan (sizers) -// Created: 28.09.99 -// RCS-ID: $Id: wizard.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 1999 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GENERIC_WIZARD_H_ -#define _WX_GENERIC_WIZARD_H_ - -// ---------------------------------------------------------------------------- -// wxWizard -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxButton; -class WXDLLIMPEXP_FWD_CORE wxStaticBitmap; -class WXDLLIMPEXP_FWD_ADV wxWizardEvent; -class WXDLLIMPEXP_FWD_CORE wxBoxSizer; -class WXDLLIMPEXP_FWD_ADV wxWizardSizer; - -class WXDLLIMPEXP_ADV wxWizard : public wxWizardBase -{ -public: - // ctor - wxWizard() { Init(); } - wxWizard(wxWindow *parent, - int id = wxID_ANY, - const wxString& title = wxEmptyString, - const wxBitmap& bitmap = wxNullBitmap, - const wxPoint& pos = wxDefaultPosition, - long style = wxDEFAULT_DIALOG_STYLE) - { - Init(); - Create(parent, id, title, bitmap, pos, style); - } - bool Create(wxWindow *parent, - int id = wxID_ANY, - const wxString& title = wxEmptyString, - const wxBitmap& bitmap = wxNullBitmap, - const wxPoint& pos = wxDefaultPosition, - long style = wxDEFAULT_DIALOG_STYLE); - void Init(); - -#if wxABI_VERSION >= 20804 - virtual ~wxWizard(); -#endif - - // implement base class pure virtuals - virtual bool RunWizard(wxWizardPage *firstPage); - virtual wxWizardPage *GetCurrentPage() const; - virtual void SetPageSize(const wxSize& size); - virtual wxSize GetPageSize() const; - virtual void FitToPage(const wxWizardPage *firstPage); - virtual wxSizer *GetPageAreaSizer() const; - virtual void SetBorder(int border); - - /// set/get bitmap -#if wxABI_VERSION >= 20805 - const wxBitmap& GetBitmap() const { return m_bitmap; } - void SetBitmap(const wxBitmap& bitmap); -#endif - - // implementation only from now on - // ------------------------------- - - // is the wizard running? - bool IsRunning() const { return m_page != NULL; } - - // show the prev/next page, but call TransferDataFromWindow on the current - // page first and return false without changing the page if - // TransferDataFromWindow() returns false - otherwise, returns true - bool ShowPage(wxWizardPage *page, bool goingForward = true); - - // do fill the dialog with controls - // this is app-overridable to, for example, set help and tooltip text - virtual void DoCreateControls(); - -protected: - // for compatibility only, doesn't do anything any more - void FinishLayout() { } - -private: - // was the dialog really created? - bool WasCreated() const { return m_btnPrev != NULL; } - - // event handlers - void OnCancel(wxCommandEvent& event); - void OnBackOrNext(wxCommandEvent& event); - void OnHelp(wxCommandEvent& event); - - void OnWizEvent(wxWizardEvent& event); - - void AddBitmapRow(wxBoxSizer *mainColumn); - void AddStaticLine(wxBoxSizer *mainColumn); - void AddBackNextPair(wxBoxSizer *buttonRow); - void AddButtonRow(wxBoxSizer *mainColumn); - - // the page size requested by user - wxSize m_sizePage; - - // the dialog position from the ctor - wxPoint m_posWizard; - - // wizard state - wxWizardPage *m_page; // the current page or NULL - wxBitmap m_bitmap; // the default bitmap to show - - // wizard controls - wxButton *m_btnPrev, // the "" or "Finish" button - wxStaticBitmap *m_statbmp; // the control for the bitmap - - // Border around page area sizer requested using SetBorder() - int m_border; - - // Whether RunWizard() was called - bool m_started; - - // Whether was modal (modeless has to be destroyed on finish or cancel) - bool m_wasModal; - - // True if pages are laid out using the sizer - bool m_usingSizer; - - // Page area sizer will be inserted here with padding - wxBoxSizer *m_sizerBmpAndPage; - - // Actual position and size of pages - wxWizardSizer *m_sizerPage; - - friend class wxWizardSizer; - - DECLARE_DYNAMIC_CLASS(wxWizard) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxWizard) -}; - -#endif // _WX_GENERIC_WIZARD_H_ diff --git a/desmume/src/windows/wx/include/wx/geometry.h b/desmume/src/windows/wx/include/wx/geometry.h deleted file mode 100644 index 385f36e98..000000000 --- a/desmume/src/windows/wx/include/wx/geometry.h +++ /dev/null @@ -1,814 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/geometry.h -// Purpose: Common Geometry Classes -// Author: Stefan Csomor -// Modified by: -// Created: 08/05/99 -// RCS-ID: $Id: geometry.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1999 Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GEOMETRY_H_ -#define _WX_GEOMETRY_H_ - -#include "wx/defs.h" - -#if wxUSE_GEOMETRY - -#include "wx/utils.h" -#include "wx/gdicmn.h" -#include "wx/math.h" - -class WXDLLIMPEXP_FWD_BASE wxDataInputStream; -class WXDLLIMPEXP_FWD_BASE wxDataOutputStream; - -// clipping from Cohen-Sutherland - -enum wxOutCode -{ - wxInside = 0x00 , - wxOutLeft = 0x01 , - wxOutRight = 0x02 , - wxOutTop = 0x08 , - wxOutBottom = 0x04 -}; - -class WXDLLEXPORT wxPoint2DInt -{ -public : - inline wxPoint2DInt(); - inline wxPoint2DInt( wxInt32 x , wxInt32 y ); - inline wxPoint2DInt( const wxPoint2DInt &pt ); - inline wxPoint2DInt( const wxPoint &pt ); - - // noops for this class, just return the coords - inline void GetFloor( wxInt32 *x , wxInt32 *y ) const; - inline void GetRounded( wxInt32 *x , wxInt32 *y ) const; - - inline wxDouble GetVectorLength() const; - wxDouble GetVectorAngle() const; - inline void SetVectorLength( wxDouble length ); - void SetVectorAngle( wxDouble degrees ); - void SetPolarCoordinates( wxInt32 angle , wxInt32 length ); - // set the vector length to 1.0, preserving the angle - inline void Normalize(); - - inline wxDouble GetDistance( const wxPoint2DInt &pt ) const; - inline wxDouble GetDistanceSquare( const wxPoint2DInt &pt ) const; - inline wxInt32 GetDotProduct( const wxPoint2DInt &vec ) const; - inline wxInt32 GetCrossProduct( const wxPoint2DInt &vec ) const; - - // the reflection of this point - inline wxPoint2DInt operator-(); - - inline wxPoint2DInt& operator=(const wxPoint2DInt& pt); - inline wxPoint2DInt& operator+=(const wxPoint2DInt& pt); - inline wxPoint2DInt& operator-=(const wxPoint2DInt& pt); - inline wxPoint2DInt& operator*=(const wxPoint2DInt& pt); - inline wxPoint2DInt& operator*=(wxDouble n); - inline wxPoint2DInt& operator*=(wxInt32 n); - inline wxPoint2DInt& operator/=(const wxPoint2DInt& pt); - inline wxPoint2DInt& operator/=(wxDouble n); - inline wxPoint2DInt& operator/=(wxInt32 n); - inline operator wxPoint() const; - inline bool operator==(const wxPoint2DInt& pt) const; - inline bool operator!=(const wxPoint2DInt& pt) const; - -#if wxUSE_STREAMS - void WriteTo( wxDataOutputStream &stream ) const; - void ReadFrom( wxDataInputStream &stream ); -#endif // wxUSE_STREAMS - - wxInt32 m_x; - wxInt32 m_y; -}; - -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() -{ - m_x = 0; - m_y = 0; -} - -inline wxPoint2DInt::wxPoint2DInt( wxInt32 x , wxInt32 y ) -{ - m_x = x; - m_y = y; -} - -inline wxPoint2DInt::wxPoint2DInt( const wxPoint2DInt &pt ) -{ - m_x = pt.m_x; - m_y = pt.m_y; -} - -inline wxPoint2DInt::wxPoint2DInt( const wxPoint &pt ) -{ - m_x = pt.x; - m_y = pt.y; -} - -inline void wxPoint2DInt::GetFloor( wxInt32 *x , wxInt32 *y ) const -{ - if ( x ) - *x = m_x; - if ( y ) - *y = m_y; -} - -inline void wxPoint2DInt::GetRounded( wxInt32 *x , wxInt32 *y ) const -{ - GetFloor(x, y); -} - -inline wxDouble wxPoint2DInt::GetVectorLength() const -{ - // cast needed MIPSpro compiler under SGI - return sqrt( (double)(m_x)*(m_x) + (m_y)*(m_y) ); -} - -inline void wxPoint2DInt::SetVectorLength( wxDouble length ) -{ - wxDouble before = GetVectorLength(); - m_x = (wxInt32)(m_x * length / before); - m_y = (wxInt32)(m_y * length / before); -} - -inline void wxPoint2DInt::Normalize() -{ - SetVectorLength( 1 ); -} - -inline wxDouble wxPoint2DInt::GetDistance( const wxPoint2DInt &pt ) const -{ - return sqrt( GetDistanceSquare( pt ) ); -} - -inline wxDouble wxPoint2DInt::GetDistanceSquare( const wxPoint2DInt &pt ) const -{ - return ( (wxDouble)(pt.m_x-m_x)*(pt.m_x-m_x) + (wxDouble)(pt.m_y-m_y)*(pt.m_y-m_y) ); -} - -inline wxInt32 wxPoint2DInt::GetDotProduct( const wxPoint2DInt &vec ) const -{ - return ( m_x * vec.m_x + m_y * vec.m_y ); -} - -inline wxInt32 wxPoint2DInt::GetCrossProduct( const wxPoint2DInt &vec ) const -{ - return ( m_x * vec.m_y - vec.m_x * m_y ); -} - -inline wxPoint2DInt::operator wxPoint() const -{ - return wxPoint( m_x, m_y); -} - -inline wxPoint2DInt wxPoint2DInt::operator-() -{ - return wxPoint2DInt( -m_x, -m_y); -} - -inline wxPoint2DInt& wxPoint2DInt::operator=(const wxPoint2DInt& pt) -{ - m_x = pt.m_x; - m_y = pt.m_y; - return *this; -} - -inline wxPoint2DInt& wxPoint2DInt::operator+=(const wxPoint2DInt& pt) -{ - m_x = m_x + pt.m_x; - m_y = m_y + pt.m_y; - return *this; -} - -inline wxPoint2DInt& wxPoint2DInt::operator-=(const wxPoint2DInt& pt) -{ - m_x = m_x - pt.m_x; - m_y = m_y - pt.m_y; - return *this; -} - -inline wxPoint2DInt& wxPoint2DInt::operator*=(const wxPoint2DInt& pt) -{ - m_x = m_x + pt.m_x; - m_y = m_y + pt.m_y; - return *this; -} - -inline wxPoint2DInt& wxPoint2DInt::operator/=(const wxPoint2DInt& pt) -{ - m_x = m_x - pt.m_x; - m_y = m_y - pt.m_y; - return *this; -} - -inline bool wxPoint2DInt::operator==(const wxPoint2DInt& pt) const -{ - return m_x == pt.m_x && m_y == pt.m_y; -} - -inline bool wxPoint2DInt::operator!=(const wxPoint2DInt& pt) const -{ - return m_x != pt.m_x || m_y != pt.m_y; -} - -inline wxPoint2DInt operator+(const wxPoint2DInt& pt1 , const wxPoint2DInt& pt2) -{ - return wxPoint2DInt( pt1.m_x + pt2.m_x , pt1.m_y + pt2.m_y ); -} - -inline wxPoint2DInt operator-(const wxPoint2DInt& pt1 , const wxPoint2DInt& pt2) -{ - return wxPoint2DInt( pt1.m_x - pt2.m_x , pt1.m_y - pt2.m_y ); -} - - -inline wxPoint2DInt operator*(const wxPoint2DInt& pt1 , const wxPoint2DInt& pt2) -{ - return wxPoint2DInt( pt1.m_x * pt2.m_x , pt1.m_y * pt2.m_y ); -} - -inline wxPoint2DInt operator*(wxInt32 n , const wxPoint2DInt& pt) -{ - return wxPoint2DInt( pt.m_x * n , pt.m_y * n ); -} - -inline wxPoint2DInt operator*(wxDouble n , const wxPoint2DInt& pt) -{ - return wxPoint2DInt( (int) (pt.m_x * n) , (int) (pt.m_y * n) ); -} - -inline wxPoint2DInt operator*(const wxPoint2DInt& pt , wxInt32 n) -{ - return wxPoint2DInt( pt.m_x * n , pt.m_y * n ); -} - -inline wxPoint2DInt operator*(const wxPoint2DInt& pt , wxDouble n) -{ - return wxPoint2DInt( (int) (pt.m_x * n) , (int) (pt.m_y * n) ); -} - -inline wxPoint2DInt operator/(const wxPoint2DInt& pt1 , const wxPoint2DInt& pt2) -{ - return wxPoint2DInt( pt1.m_x / pt2.m_x , pt1.m_y / pt2.m_y ); -} - -inline wxPoint2DInt operator/(const wxPoint2DInt& pt , wxInt32 n) -{ - return wxPoint2DInt( pt.m_x / n , pt.m_y / n ); -} - -inline wxPoint2DInt operator/(const wxPoint2DInt& pt , wxDouble n) -{ - return wxPoint2DInt( (int) (pt.m_x / n) , (int) (pt.m_y / n) ); -} - -// wxPoint2Ds represent a point or a vector in a 2d coordinate system - -class WXDLLEXPORT wxPoint2DDouble -{ -public : - inline wxPoint2DDouble(); - inline wxPoint2DDouble( wxDouble x , wxDouble y ); - inline wxPoint2DDouble( const wxPoint2DDouble &pt ); - wxPoint2DDouble( const wxPoint2DInt &pt ) - { m_x = (wxDouble) pt.m_x ; m_y = (wxDouble) pt.m_y ; } - wxPoint2DDouble( const wxPoint &pt ) - { m_x = (wxDouble) pt.x ; m_y = (wxDouble) pt.y ; } - - // two different conversions to integers, floor and rounding - inline void GetFloor( wxInt32 *x , wxInt32 *y ) const; - inline void GetRounded( wxInt32 *x , wxInt32 *y ) const; - - inline wxDouble GetVectorLength() const; - wxDouble GetVectorAngle() const ; - void SetVectorLength( wxDouble length ); - void SetVectorAngle( wxDouble degrees ); - void SetPolarCoordinates( wxDouble angle , wxDouble length ); - // set the vector length to 1.0, preserving the angle - void Normalize(); - - inline wxDouble GetDistance( const wxPoint2DDouble &pt ) const; - inline wxDouble GetDistanceSquare( const wxPoint2DDouble &pt ) const; - inline wxDouble GetDotProduct( const wxPoint2DDouble &vec ) const; - inline wxDouble GetCrossProduct( const wxPoint2DDouble &vec ) const; - - // the reflection of this point - inline wxPoint2DDouble operator-(); - - inline wxPoint2DDouble& operator=(const wxPoint2DDouble& pt); - inline wxPoint2DDouble& operator+=(const wxPoint2DDouble& pt); - inline wxPoint2DDouble& operator-=(const wxPoint2DDouble& pt); - inline wxPoint2DDouble& operator*=(const wxPoint2DDouble& pt); - inline wxPoint2DDouble& operator*=(wxDouble n); - inline wxPoint2DDouble& operator*=(wxInt32 n); - inline wxPoint2DDouble& operator/=(const wxPoint2DDouble& pt); - inline wxPoint2DDouble& operator/=(wxDouble n); - inline wxPoint2DDouble& operator/=(wxInt32 n); - - inline bool operator==(const wxPoint2DDouble& pt) const; - inline bool operator!=(const wxPoint2DDouble& pt) const; - - wxDouble m_x; - wxDouble m_y; -}; - -inline wxPoint2DDouble operator+(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2); -inline wxPoint2DDouble operator-(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2); -inline wxPoint2DDouble operator*(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2); -inline wxPoint2DDouble operator*(wxDouble n , const wxPoint2DDouble& pt); -inline wxPoint2DDouble operator*(wxInt32 n , const wxPoint2DDouble& pt); -inline wxPoint2DDouble operator*(const wxPoint2DDouble& pt , wxDouble n); -inline wxPoint2DDouble operator*(const wxPoint2DDouble& pt , wxInt32 n); -inline wxPoint2DDouble operator/(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2); -inline wxPoint2DDouble operator/(const wxPoint2DDouble& pt , wxDouble n); -inline wxPoint2DDouble operator/(const wxPoint2DDouble& pt , wxInt32 n); - -inline wxPoint2DDouble::wxPoint2DDouble() -{ - m_x = 0.0; - m_y = 0.0; -} - -inline wxPoint2DDouble::wxPoint2DDouble( wxDouble x , wxDouble y ) -{ - m_x = x; - m_y = y; -} - -inline wxPoint2DDouble::wxPoint2DDouble( const wxPoint2DDouble &pt ) -{ - m_x = pt.m_x; - m_y = pt.m_y; -} - -inline void wxPoint2DDouble::GetFloor( wxInt32 *x , wxInt32 *y ) const -{ - *x = (wxInt32) floor( m_x ); - *y = (wxInt32) floor( m_y ); -} - -inline void wxPoint2DDouble::GetRounded( wxInt32 *x , wxInt32 *y ) const -{ - *x = (wxInt32) floor( m_x + 0.5 ); - *y = (wxInt32) floor( m_y + 0.5); -} - -inline wxDouble wxPoint2DDouble::GetVectorLength() const -{ - return sqrt( (m_x)*(m_x) + (m_y)*(m_y) ) ; -} - -inline void wxPoint2DDouble::SetVectorLength( wxDouble length ) -{ - wxDouble before = GetVectorLength() ; - m_x = (m_x * length / before) ; - m_y = (m_y * length / before) ; -} - -inline void wxPoint2DDouble::Normalize() -{ - SetVectorLength( 1 ); -} - -inline wxDouble wxPoint2DDouble::GetDistance( const wxPoint2DDouble &pt ) const -{ - return sqrt( GetDistanceSquare( pt ) ); -} - -inline wxDouble wxPoint2DDouble::GetDistanceSquare( const wxPoint2DDouble &pt ) const -{ - return ( (pt.m_x-m_x)*(pt.m_x-m_x) + (pt.m_y-m_y)*(pt.m_y-m_y) ); -} - -inline wxDouble wxPoint2DDouble::GetDotProduct( const wxPoint2DDouble &vec ) const -{ - return ( m_x * vec.m_x + m_y * vec.m_y ); -} - -inline wxDouble wxPoint2DDouble::GetCrossProduct( const wxPoint2DDouble &vec ) const -{ - return ( m_x * vec.m_y - vec.m_x * m_y ); -} - -inline wxPoint2DDouble wxPoint2DDouble::operator-() -{ - return wxPoint2DDouble( -m_x, -m_y); -} - -inline wxPoint2DDouble& wxPoint2DDouble::operator=(const wxPoint2DDouble& pt) -{ - m_x = pt.m_x; - m_y = pt.m_y; - return *this; -} - -inline wxPoint2DDouble& wxPoint2DDouble::operator+=(const wxPoint2DDouble& pt) -{ - m_x = m_x + pt.m_x; - m_y = m_y + pt.m_y; - return *this; -} - -inline wxPoint2DDouble& wxPoint2DDouble::operator-=(const wxPoint2DDouble& pt) -{ - m_x = m_x - pt.m_x; - m_y = m_y - pt.m_y; - return *this; -} - -inline wxPoint2DDouble& wxPoint2DDouble::operator*=(const wxPoint2DDouble& pt) -{ - m_x = m_x * pt.m_x; - m_y = m_y * pt.m_y; - return *this; -} - -inline wxPoint2DDouble& wxPoint2DDouble::operator/=(const wxPoint2DDouble& pt) -{ - m_x = m_x / pt.m_x; - m_y = m_y / pt.m_y; - return *this; -} - -inline bool wxPoint2DDouble::operator==(const wxPoint2DDouble& pt) const -{ - return wxIsSameDouble(m_x, pt.m_x) && wxIsSameDouble(m_y, pt.m_y); -} - -inline bool wxPoint2DDouble::operator!=(const wxPoint2DDouble& pt) const -{ - return !(*this == pt); -} - -inline wxPoint2DDouble operator+(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2) -{ - return wxPoint2DDouble( pt1.m_x + pt2.m_x , pt1.m_y + pt2.m_y ); -} - -inline wxPoint2DDouble operator-(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2) -{ - return wxPoint2DDouble( pt1.m_x - pt2.m_x , pt1.m_y - pt2.m_y ); -} - - -inline wxPoint2DDouble operator*(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2) -{ - return wxPoint2DDouble( pt1.m_x * pt2.m_x , pt1.m_y * pt2.m_y ); -} - -inline wxPoint2DDouble operator*(wxDouble n , const wxPoint2DDouble& pt) -{ - return wxPoint2DDouble( pt.m_x * n , pt.m_y * n ); -} - -inline wxPoint2DDouble operator*(wxInt32 n , const wxPoint2DDouble& pt) -{ - return wxPoint2DDouble( pt.m_x * n , pt.m_y * n ); -} - -inline wxPoint2DDouble operator*(const wxPoint2DDouble& pt , wxDouble n) -{ - return wxPoint2DDouble( pt.m_x * n , pt.m_y * n ); -} - -inline wxPoint2DDouble operator*(const wxPoint2DDouble& pt , wxInt32 n) -{ - return wxPoint2DDouble( pt.m_x * n , pt.m_y * n ); -} - -inline wxPoint2DDouble operator/(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2) -{ - return wxPoint2DDouble( pt1.m_x / pt2.m_x , pt1.m_y / pt2.m_y ); -} - -inline wxPoint2DDouble operator/(const wxPoint2DDouble& pt , wxDouble n) -{ - return wxPoint2DDouble( pt.m_x / n , pt.m_y / n ); -} - -inline wxPoint2DDouble operator/(const wxPoint2DDouble& pt , wxInt32 n) -{ - return wxPoint2DDouble( pt.m_x / n , pt.m_y / n ); -} - -// wxRect2Ds are a axis-aligned rectangles, each side of the rect is parallel to the x- or m_y- axis. The rectangle is either defined by the -// top left and bottom right corner, or by the top left corner and size. A point is contained within the rectangle if -// left <= x < right and top <= m_y < bottom , thus it is a half open interval. - -class WXDLLEXPORT wxRect2DDouble -{ -public: - wxRect2DDouble() - { m_x = m_y = m_width = m_height = 0; } - wxRect2DDouble(wxDouble x, wxDouble y, wxDouble w, wxDouble h) - { m_x = x; m_y = y; m_width = w; m_height = h; } -/* - wxRect2DDouble(const wxPoint2DDouble& topLeft, const wxPoint2DDouble& bottomRight); - wxRect2DDouble(const wxPoint2DDouble& pos, const wxSize& size); - wxRect2DDouble(const wxRect2DDouble& rect); -*/ - // single attribute accessors - - inline wxPoint2DDouble GetPosition() - { return wxPoint2DDouble(m_x, m_y); } - 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 - - inline wxDouble GetLeft() const { return m_x; } - inline void SetLeft( wxDouble n ) { m_width += m_x - n; m_x = n; } - inline void MoveLeftTo( wxDouble n ) { m_x = n; } - inline wxDouble GetTop() const { return m_y; } - inline void SetTop( wxDouble n ) { m_height += m_y - n; m_y = n; } - inline void MoveTopTo( wxDouble n ) { m_y = n; } - inline wxDouble GetBottom() const { return m_y + m_height; } - inline void SetBottom( wxDouble n ) { m_height += n - (m_y+m_height);} - inline void MoveBottomTo( wxDouble n ) { m_y = n - m_height; } - inline wxDouble GetRight() const { return m_x + m_width; } - inline void SetRight( wxDouble n ) { m_width += n - (m_x+m_width) ; } - inline void MoveRightTo( wxDouble n ) { m_x = n - m_width; } - - inline wxPoint2DDouble GetLeftTop() const - { return wxPoint2DDouble( m_x , m_y ); } - inline void SetLeftTop( const wxPoint2DDouble &pt ) - { m_width += m_x - pt.m_x; m_height += m_y - pt.m_y; m_x = pt.m_x; m_y = pt.m_y; } - inline void MoveLeftTopTo( const wxPoint2DDouble &pt ) - { m_x = pt.m_x; m_y = pt.m_y; } - inline wxPoint2DDouble GetLeftBottom() const - { return wxPoint2DDouble( m_x , m_y + m_height ); } - inline void SetLeftBottom( const wxPoint2DDouble &pt ) - { m_width += m_x - pt.m_x; m_height += pt.m_y - (m_y+m_height) ; m_x = pt.m_x; } - inline void MoveLeftBottomTo( const wxPoint2DDouble &pt ) - { m_x = pt.m_x; m_y = pt.m_y - m_height; } - inline wxPoint2DDouble GetRightTop() const - { return wxPoint2DDouble( m_x+m_width , m_y ); } - inline void SetRightTop( const wxPoint2DDouble &pt ) - { m_width += pt.m_x - ( m_x + m_width ); m_height += m_y - pt.m_y; m_y = pt.m_y; } - inline void MoveRightTopTo( const wxPoint2DDouble &pt ) - { m_x = pt.m_x - m_width; m_y = pt.m_y; } - inline wxPoint2DDouble GetRightBottom() const - { return wxPoint2DDouble( m_x+m_width , m_y + m_height ); } - inline void SetRightBottom( const wxPoint2DDouble &pt ) - { m_width += pt.m_x - ( m_x + m_width ); m_height += pt.m_y - (m_y+m_height);} - inline void MoveRightBottomTo( const wxPoint2DDouble &pt ) - { m_x = pt.m_x - m_width; m_y = pt.m_y - m_height; } - inline wxPoint2DDouble GetCentre() const - { return wxPoint2DDouble( m_x+m_width/2 , m_y+m_height/2 ); } - inline void SetCentre( const wxPoint2DDouble &pt ) - { MoveCentreTo( pt ); } // since this is impossible without moving... - inline void MoveCentreTo( const wxPoint2DDouble &pt ) - { m_x += pt.m_x - (m_x+m_width/2) , m_y += pt.m_y -(m_y+m_height/2); } - inline wxOutCode GetOutCode( const wxPoint2DDouble &pt ) const - { return (wxOutCode) (( ( pt.m_x < m_x ) ? wxOutLeft : 0 ) + - ( ( pt.m_x > m_x + m_width ) ? wxOutRight : 0 ) + - ( ( pt.m_y < m_y ) ? wxOutTop : 0 ) + - ( ( pt.m_y > m_y + m_height ) ? wxOutBottom : 0 )); } - inline wxOutCode GetOutcode(const wxPoint2DDouble &pt) const - { return GetOutCode(pt) ; } - inline bool Contains( const wxPoint2DDouble &pt ) const - { return GetOutCode( pt ) == wxInside; } - inline bool Contains( const wxRect2DDouble &rect ) const - { return ( ( ( m_x <= rect.m_x ) && ( rect.m_x + rect.m_width <= m_x + m_width ) ) && - ( ( m_y <= rect.m_y ) && ( rect.m_y + rect.m_height <= m_y + m_height ) ) ); } - inline bool IsEmpty() const - { return m_width <= 0 || m_height <= 0; } - inline bool HaveEqualSize( const wxRect2DDouble &rect ) const - { return wxIsSameDouble(rect.m_width, m_width) && wxIsSameDouble(rect.m_height, m_height); } - - inline void Inset( wxDouble x , wxDouble y ) - { m_x += x; m_y += y; m_width -= 2 * x; m_height -= 2 * y; } - inline void Inset( wxDouble left , wxDouble top ,wxDouble right , wxDouble bottom ) - { m_x += left; m_y += top; m_width -= left + right; m_height -= top + bottom;} - inline void Offset( const wxPoint2DDouble &pt ) - { m_x += pt.m_x; m_y += pt.m_y; } - - void ConstrainTo( const wxRect2DDouble &rect ); - - inline wxPoint2DDouble Interpolate( wxInt32 widthfactor , wxInt32 heightfactor ) - { return wxPoint2DDouble( m_x + m_width * widthfactor , m_y + m_height * heightfactor ); } - - static void Intersect( const wxRect2DDouble &src1 , const wxRect2DDouble &src2 , wxRect2DDouble *dest ); - inline void Intersect( const wxRect2DDouble &otherRect ) - { Intersect( *this , otherRect , this ); } - inline wxRect2DDouble CreateIntersection( const wxRect2DDouble &otherRect ) const - { wxRect2DDouble result; Intersect( *this , otherRect , &result); return result; } - bool Intersects( const wxRect2DDouble &rect ) const; - - static void Union( const wxRect2DDouble &src1 , const wxRect2DDouble &src2 , wxRect2DDouble *dest ); - void Union( const wxRect2DDouble &otherRect ) - { Union( *this , otherRect , this ); } - void Union( const wxPoint2DDouble &pt ); - inline wxRect2DDouble CreateUnion( const wxRect2DDouble &otherRect ) const - { wxRect2DDouble result; Union( *this , otherRect , &result); return result; } - - inline void Scale( wxDouble f ) - { m_x *= f; m_y *= f; m_width *= f; m_height *= f;} - inline void Scale( wxInt32 num , wxInt32 denum ) - { m_x *= ((wxDouble)num)/((wxDouble)denum); m_y *= ((wxDouble)num)/((wxDouble)denum); - m_width *= ((wxDouble)num)/((wxDouble)denum); m_height *= ((wxDouble)num)/((wxDouble)denum);} - - wxRect2DDouble& operator = (const wxRect2DDouble& rect); - inline bool operator == (const wxRect2DDouble& rect) const - { return wxIsSameDouble(m_x, rect.m_x) && wxIsSameDouble(m_y, rect.m_y) && HaveEqualSize(rect); } - inline bool operator != (const wxRect2DDouble& rect) const - { return !(*this == rect); } - - wxDouble m_x; - wxDouble m_y; - wxDouble m_width; - wxDouble m_height; -}; - - -// wxRect2Ds are a axis-aligned rectangles, each side of the rect is parallel to the x- or m_y- axis. The rectangle is either defined by the -// top left and bottom right corner, or by the top left corner and size. A point is contained within the rectangle if -// left <= x < right and top <= m_y < bottom , thus it is a half open interval. - -class WXDLLEXPORT wxRect2DInt -{ -public: - wxRect2DInt() { m_x = m_y = m_width = m_height = 0; } - wxRect2DInt( const wxRect& r ) { m_x = r.x ; m_y = r.y ; m_width = r.width ; m_height = r.height ; } - wxRect2DInt(wxInt32 x, wxInt32 y, wxInt32 w, wxInt32 h) { m_x = x; m_y = y; m_width = w; m_height = h; } - wxRect2DInt(const wxPoint2DInt& topLeft, const wxPoint2DInt& bottomRight); - inline wxRect2DInt(const wxPoint2DInt& pos, const wxSize& size); - inline wxRect2DInt(const wxRect2DInt& rect); - - // single attribute accessors - - 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 - - inline wxInt32 GetLeft() const { return m_x; } - inline void SetLeft( wxInt32 n ) { m_width += m_x - n; m_x = n; } - inline void MoveLeftTo( wxInt32 n ) { m_x = n; } - inline wxInt32 GetTop() const { return m_y; } - inline void SetTop( wxInt32 n ) { m_height += m_y - n; m_y = n; } - inline void MoveTopTo( wxInt32 n ) { m_y = n; } - inline wxInt32 GetBottom() const { return m_y + m_height; } - inline void SetBottom( wxInt32 n ) { m_height += n - (m_y+m_height);} - inline void MoveBottomTo( wxInt32 n ) { m_y = n - m_height; } - inline wxInt32 GetRight() const { return m_x + m_width; } - inline void SetRight( wxInt32 n ) { m_width += n - (m_x+m_width) ; } - inline void MoveRightTo( wxInt32 n ) { m_x = n - m_width; } - - inline wxPoint2DInt GetLeftTop() const { return wxPoint2DInt( m_x , m_y ); } - inline void SetLeftTop( const wxPoint2DInt &pt ) { m_width += m_x - pt.m_x; m_height += m_y - pt.m_y; m_x = pt.m_x; m_y = pt.m_y; } - inline void MoveLeftTopTo( const wxPoint2DInt &pt ) { m_x = pt.m_x; m_y = pt.m_y; } - inline wxPoint2DInt GetLeftBottom() const { return wxPoint2DInt( m_x , m_y + m_height ); } - inline void SetLeftBottom( const wxPoint2DInt &pt ) { m_width += m_x - pt.m_x; m_height += pt.m_y - (m_y+m_height) ; m_x = pt.m_x; } - inline void MoveLeftBottomTo( const wxPoint2DInt &pt ) { m_x = pt.m_x; m_y = pt.m_y - m_height; } - inline wxPoint2DInt GetRightTop() const { return wxPoint2DInt( m_x+m_width , m_y ); } - inline void SetRightTop( const wxPoint2DInt &pt ) { m_width += pt.m_x - ( m_x + m_width ); m_height += m_y - pt.m_y; m_y = pt.m_y; } - inline void MoveRightTopTo( const wxPoint2DInt &pt ) { m_x = pt.m_x - m_width; m_y = pt.m_y; } - inline wxPoint2DInt GetRightBottom() const { return wxPoint2DInt( m_x+m_width , m_y + m_height ); } - inline void SetRightBottom( const wxPoint2DInt &pt ) { m_width += pt.m_x - ( m_x + m_width ); m_height += pt.m_y - (m_y+m_height);} - inline void MoveRightBottomTo( const wxPoint2DInt &pt ) { m_x = pt.m_x - m_width; m_y = pt.m_y - m_height; } - inline wxPoint2DInt GetCentre() const { return wxPoint2DInt( m_x+m_width/2 , m_y+m_height/2 ); } - inline void SetCentre( const wxPoint2DInt &pt ) { MoveCentreTo( pt ); } // since this is impossible without moving... - inline void MoveCentreTo( const wxPoint2DInt &pt ) { m_x += pt.m_x - (m_x+m_width/2) , m_y += pt.m_y -(m_y+m_height/2); } - inline wxOutCode GetOutCode( const wxPoint2DInt &pt ) const - { return (wxOutCode) (( ( pt.m_x < m_x ) ? wxOutLeft : 0 ) + - ( ( pt.m_x >= m_x + m_width ) ? wxOutRight : 0 ) + - ( ( pt.m_y < m_y ) ? wxOutTop : 0 ) + - ( ( pt.m_y >= m_y + m_height ) ? wxOutBottom : 0 )); } - inline wxOutCode GetOutcode( const wxPoint2DInt &pt ) const - { return GetOutCode( pt ) ; } - inline bool Contains( const wxPoint2DInt &pt ) const - { return GetOutCode( pt ) == wxInside; } - inline bool Contains( const wxRect2DInt &rect ) const - { return ( ( ( m_x <= rect.m_x ) && ( rect.m_x + rect.m_width <= m_x + m_width ) ) && - ( ( m_y <= rect.m_y ) && ( rect.m_y + rect.m_height <= m_y + m_height ) ) ); } - inline bool IsEmpty() const - { return ( m_width <= 0 || m_height <= 0 ); } - inline bool HaveEqualSize( const wxRect2DInt &rect ) const - { return ( rect.m_width == m_width && rect.m_height == m_height ); } - - inline void Inset( wxInt32 x , wxInt32 y ) { m_x += x; m_y += y; m_width -= 2 * x; m_height -= 2 * y; } - inline void Inset( wxInt32 left , wxInt32 top ,wxInt32 right , wxInt32 bottom ) - { m_x += left; m_y += top; m_width -= left + right; m_height -= top + bottom;} - inline void Offset( const wxPoint2DInt &pt ) { m_x += pt.m_x; m_y += pt.m_y; } - void ConstrainTo( const wxRect2DInt &rect ); - inline wxPoint2DInt Interpolate( wxInt32 widthfactor , wxInt32 heightfactor ) { return wxPoint2DInt( m_x + m_width * widthfactor , m_y + m_height * heightfactor ); } - - static void Intersect( const wxRect2DInt &src1 , const wxRect2DInt &src2 , wxRect2DInt *dest ); - inline void Intersect( const wxRect2DInt &otherRect ) { Intersect( *this , otherRect , this ); } - inline wxRect2DInt CreateIntersection( const wxRect2DInt &otherRect ) const { wxRect2DInt result; Intersect( *this , otherRect , &result); return result; } - bool Intersects( const wxRect2DInt &rect ) const; - - static void Union( const wxRect2DInt &src1 , const wxRect2DInt &src2 , wxRect2DInt *dest ); - void Union( const wxRect2DInt &otherRect ) { Union( *this , otherRect , this ); } - void Union( const wxPoint2DInt &pt ); - inline wxRect2DInt CreateUnion( const wxRect2DInt &otherRect ) const { wxRect2DInt result; Union( *this , otherRect , &result); return result; } - - inline void Scale( wxInt32 f ) { m_x *= f; m_y *= f; m_width *= f; m_height *= f;} - inline void Scale( wxInt32 num , wxInt32 denum ) - { m_x *= ((wxInt32)num)/((wxInt32)denum); m_y *= ((wxInt32)num)/((wxInt32)denum); - m_width *= ((wxInt32)num)/((wxInt32)denum); m_height *= ((wxInt32)num)/((wxInt32)denum);} - - wxRect2DInt& operator = (const wxRect2DInt& rect); - bool operator == (const wxRect2DInt& rect) const; - bool operator != (const wxRect2DInt& rect) const; - -#if wxUSE_STREAMS - void WriteTo( wxDataOutputStream &stream ) const; - void ReadFrom( wxDataInputStream &stream ); -#endif // wxUSE_STREAMS - - wxInt32 m_x; - wxInt32 m_y; - wxInt32 m_width; - wxInt32 m_height; -}; - -inline wxRect2DInt::wxRect2DInt( const wxRect2DInt &r ) -{ - m_x = r.m_x; - m_y = r.m_y; - m_width = r.m_width; - m_height = r.m_height; -} - -inline wxRect2DInt::wxRect2DInt( const wxPoint2DInt &a , const wxPoint2DInt &b) -{ - m_x = wxMin( a.m_x , b.m_x ); - m_y = wxMin( a.m_y , b.m_y ); - m_width = abs( a.m_x - b.m_x ); - m_height = abs( a.m_y - b.m_y ); -} - -inline wxRect2DInt::wxRect2DInt( const wxPoint2DInt& pos, const wxSize& size) -{ - m_x = pos.m_x; - m_y = pos.m_y; - m_width = size.x; - m_height = size.y; -} - -inline bool wxRect2DInt::operator == (const wxRect2DInt& rect) const -{ - return (m_x==rect.m_x && m_y==rect.m_y && - m_width==rect.m_width && m_height==rect.m_height); -} - -inline bool wxRect2DInt::operator != (const wxRect2DInt& rect) const -{ - return !(*this == rect); -} - -class wxTransform2D -{ -public : - virtual ~wxTransform2D() { } - virtual void Transform( wxPoint2DInt* pt )const = 0; - virtual void Transform( wxRect2DInt* r ) const; - virtual wxPoint2DInt Transform( const wxPoint2DInt &pt ) const; - virtual wxRect2DInt Transform( const wxRect2DInt &r ) const ; - - virtual void InverseTransform( wxPoint2DInt* pt ) const = 0; - virtual void InverseTransform( wxRect2DInt* r ) const ; - virtual wxPoint2DInt InverseTransform( const wxPoint2DInt &pt ) const ; - virtual wxRect2DInt InverseTransform( const wxRect2DInt &r ) const ; -}; - -inline void wxTransform2D::Transform( wxRect2DInt* r ) const - { wxPoint2DInt a = r->GetLeftTop() , b = r->GetRightBottom(); Transform( &a ); Transform( &b ); *r = wxRect2DInt( a , b ); } - -inline wxPoint2DInt wxTransform2D::Transform( const wxPoint2DInt &pt ) const - { wxPoint2DInt res = pt; Transform( &res ); return res; } - -inline wxRect2DInt wxTransform2D::Transform( const wxRect2DInt &r ) const - { wxRect2DInt res = r; Transform( &res ); return res; } - -inline void wxTransform2D::InverseTransform( wxRect2DInt* r ) const - { wxPoint2DInt a = r->GetLeftTop() , b = r->GetRightBottom(); InverseTransform( &a ); InverseTransform( &b ); *r = wxRect2DInt( a , b ); } - -inline wxPoint2DInt wxTransform2D::InverseTransform( const wxPoint2DInt &pt ) const - { wxPoint2DInt res = pt; InverseTransform( &res ); return res; } - -inline wxRect2DInt wxTransform2D::InverseTransform( const wxRect2DInt &r ) const - { wxRect2DInt res = r; InverseTransform( &res ); return res; } - - -#endif // wxUSE_GEOMETRY - -#endif // _WX_GEOMETRY_H_ diff --git a/desmume/src/windows/wx/include/wx/gifdecod.h b/desmume/src/windows/wx/include/wx/gifdecod.h deleted file mode 100644 index 7760d4759..000000000 --- a/desmume/src/windows/wx/include/wx/gifdecod.h +++ /dev/null @@ -1,110 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/gifdecod.h -// Purpose: wxGIFDecoder, GIF reader for wxImage and wxAnimation -// Author: Guillermo Rodriguez Garcia -// Version: 3.02 -// CVS-ID: $Id: gifdecod.h 45563 2007-04-21 18:17:50Z VZ $ -// Copyright: (c) 1999 Guillermo Rodriguez Garcia -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GIFDECOD_H_ -#define _WX_GIFDECOD_H_ - -#include "wx/defs.h" - -#if wxUSE_STREAMS && wxUSE_GIF - -#include "wx/stream.h" -#include "wx/image.h" -#include "wx/animdecod.h" -#include "wx/dynarray.h" - -// internal utility used to store a frame in 8bit-per-pixel format -class GIFImage; - - -// -------------------------------------------------------------------------- -// Constants -// -------------------------------------------------------------------------- - -// Error codes: -// Note that the error code wxGIF_TRUNCATED means that the image itself -// is most probably OK, but the decoder didn't reach the end of the data -// stream; this means that if it was not reading directly from file, -// the stream will not be correctly positioned. -// -enum wxGIFErrorCode -{ - wxGIF_OK = 0, // everything was OK - wxGIF_INVFORMAT, // error in GIF header - wxGIF_MEMERR, // error allocating memory - wxGIF_TRUNCATED // file appears to be truncated -}; - -// -------------------------------------------------------------------------- -// wxGIFDecoder class -// -------------------------------------------------------------------------- - -class WXDLLEXPORT wxGIFDecoder : public wxAnimationDecoder -{ -public: - // constructor, destructor, etc. - wxGIFDecoder(); - ~wxGIFDecoder(); - - // get data of current frame - unsigned char* GetData(unsigned int frame) const; - unsigned char* GetPalette(unsigned int frame) const; - unsigned int GetNcolours(unsigned int frame) const; - int GetTransparentColourIndex(unsigned int frame) const; - wxColour GetTransparentColour(unsigned int frame) const; - - virtual wxSize GetFrameSize(unsigned int frame) const; - virtual wxPoint GetFramePosition(unsigned int frame) const; - virtual wxAnimationDisposal GetDisposalMethod(unsigned int frame) const; - virtual long GetDelay(unsigned int frame) const; - - // GIFs can contain both static images and animations - bool IsAnimation() const - { return m_nFrames > 1; } - - // load function which returns more info than just Load(): - wxGIFErrorCode LoadGIF( wxInputStream& stream ); - - // free all internal frames - void Destroy(); - - // implementation of wxAnimationDecoder's pure virtuals - virtual bool CanRead( wxInputStream& stream ) const; - virtual bool Load( wxInputStream& stream ) - { return LoadGIF(stream) == wxGIF_OK; } - - bool ConvertToImage(unsigned int frame, wxImage *image) const; - - wxAnimationDecoder *Clone() const - { return new wxGIFDecoder; } - wxAnimationType GetType() const - { return wxANIMATION_TYPE_GIF; } - -private: - // array of all frames - wxArrayPtrVoid m_frames; - - // decoder state vars - int m_restbits; // remaining valid bits - unsigned int m_restbyte; // remaining bytes in this block - unsigned int m_lastbyte; // last byte read - unsigned char m_buffer[256]; // buffer for reading - unsigned char *m_bufp; // pointer to next byte in buffer - - int getcode(wxInputStream& stream, int bits, int abfin); - wxGIFErrorCode dgif(wxInputStream& stream, - GIFImage *img, int interl, int bits); - - DECLARE_NO_COPY_CLASS(wxGIFDecoder) -}; - -#endif // wxUSE_STREAM && wxUSE_GIF - -#endif // _WX_GIFDECOD_H_ diff --git a/desmume/src/windows/wx/include/wx/glcanvas.h b/desmume/src/windows/wx/include/wx/glcanvas.h deleted file mode 100644 index 25e2eac0b..000000000 --- a/desmume/src/windows/wx/include/wx/glcanvas.h +++ /dev/null @@ -1,86 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/glcanvas.h -// Purpose: wxGLCanvas base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: glcanvas.h 43623 2006-11-24 10:30:42Z MR $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GLCANVAS_H_BASE_ -#define _WX_GLCANVAS_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_GLCANVAS - -//--------------------------------------------------------------------------- -// Constants for attriblist -//--------------------------------------------------------------------------- - -// The generic GL implementation doesn't support most of these options, -// such as stereo, auxiliary buffers, alpha channel, and accum buffer. -// Other implementations may actually support them. - -enum -{ - WX_GL_RGBA=1, /* use true color palette */ - WX_GL_BUFFER_SIZE, /* bits for buffer if not WX_GL_RGBA */ - WX_GL_LEVEL, /* 0 for main buffer, >0 for overlay, <0 for underlay */ - WX_GL_DOUBLEBUFFER, /* use doublebuffer */ - WX_GL_STEREO, /* use stereoscopic display */ - WX_GL_AUX_BUFFERS, /* number of auxiliary buffers */ - WX_GL_MIN_RED, /* use red buffer with most bits (> MIN_RED bits) */ - WX_GL_MIN_GREEN, /* use green buffer with most bits (> MIN_GREEN bits) */ - WX_GL_MIN_BLUE, /* use blue buffer with most bits (> MIN_BLUE bits) */ - WX_GL_MIN_ALPHA, /* use alpha buffer with most bits (> MIN_ALPHA bits) */ - WX_GL_DEPTH_SIZE, /* bits for Z-buffer (0,16,32) */ - WX_GL_STENCIL_SIZE, /* bits for stencil buffer */ - WX_GL_MIN_ACCUM_RED, /* use red accum buffer with most bits (> MIN_ACCUM_RED bits) */ - WX_GL_MIN_ACCUM_GREEN, /* use green buffer with most bits (> MIN_ACCUM_GREEN bits) */ - 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) */ -}; - -#define wxGLCanvasName _T("GLCanvas") - -#if defined(__WXMSW__) -#include "wx/msw/glcanvas.h" -#elif defined(__WXMOTIF__) -#include "wx/x11/glcanvas.h" -#elif defined(__WXGTK20__) -#include "wx/gtk/glcanvas.h" -#elif defined(__WXGTK__) -#include "wx/gtk1/glcanvas.h" -#elif defined(__WXX11__) -#include "wx/x11/glcanvas.h" -#elif defined(__WXMAC__) -#include "wx/mac/glcanvas.h" -#elif defined(__WXCOCOA__) -#include "wx/cocoa/glcanvas.h" -#else -#error "wxGLCanvas not supported in this wxWidgets port" -#endif - -#include "wx/app.h" -class WXDLLIMPEXP_GL wxGLApp : public wxApp -{ -public: - wxGLApp() : wxApp() { } - virtual ~wxGLApp(); - - // use this in the constructor of the user-derived wxGLApp class to - // determine if an OpenGL rendering context with these attributes - // is available - returns true if so, false if not. - bool InitGLVisual(int *attribList); - -private: - DECLARE_DYNAMIC_CLASS(wxGLApp) -}; - -#endif - // wxUSE_GLCANVAS -#endif - // _WX_GLCANVAS_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/graphics.h b/desmume/src/windows/wx/include/wx/graphics.h deleted file mode 100644 index 34f831e91..000000000 --- a/desmume/src/windows/wx/include/wx/graphics.h +++ /dev/null @@ -1,732 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/graphics.h -// Purpose: graphics context header -// Author: Stefan Csomor -// Modified by: -// Created: -// Copyright: (c) Stefan Csomor -// RCS-ID: $Id: graphics.h 57953 2009-01-09 18:46:48Z SC $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GRAPHICS_H_ -#define _WX_GRAPHICS_H_ - -#include "wx/defs.h" - -#if wxUSE_GRAPHICS_CONTEXT - -#include "wx/geometry.h" -#include "wx/dynarray.h" - -class WXDLLIMPEXP_CORE wxWindowDC; -class WXDLLIMPEXP_CORE wxMemoryDC; -class WXDLLIMPEXP_CORE wxGraphicsContext; -class WXDLLIMPEXP_CORE wxGraphicsPath; -class WXDLLIMPEXP_CORE wxGraphicsMatrix; -class WXDLLIMPEXP_CORE wxGraphicsFigure; -class WXDLLIMPEXP_CORE wxGraphicsRenderer; -class WXDLLIMPEXP_CORE wxGraphicsPen; -class WXDLLIMPEXP_CORE wxGraphicsBrush; -class WXDLLIMPEXP_CORE wxGraphicsFont; -class WXDLLIMPEXP_CORE wxGraphicsBitmap; - -/* - * notes about the graphics context apis - * - * angles : are measured in radians, 0.0 being in direction of positiv x axis, PI/2 being - * in direction of positive y axis. - */ - -// Base class of all objects used for drawing in the new graphics API, the always point back to their -// originating rendering engine, there is no dynamic unloading of a renderer currently allowed, -// these references are not counted - -// -// The data used by objects like graphics pens etc is ref counted, in order to avoid unnecessary expensive -// duplication. Any operation on a shared instance that results in a modified state, uncouples this -// instance from the other instances that were shared - using copy on write semantics -// - -class WXDLLIMPEXP_CORE wxGraphicsObjectRefData : public wxObjectRefData -{ -public : - wxGraphicsObjectRefData( wxGraphicsRenderer* renderer ); - wxGraphicsObjectRefData( const wxGraphicsObjectRefData* data ); - wxGraphicsRenderer* GetRenderer() const ; - virtual wxGraphicsObjectRefData* Clone() const ; - -protected : - wxGraphicsRenderer* m_renderer; -} ; - -class WXDLLIMPEXP_CORE wxGraphicsObject : public wxObject -{ -public : - wxGraphicsObject() ; -#if wxABI_VERSION >= 20810 - wxGraphicsObject( const wxGraphicsObject& other) : wxObject( other ) {} - wxGraphicsObject& operator= (const wxGraphicsObject & other) { Ref(other); return *this;} -#endif - wxGraphicsObject( wxGraphicsRenderer* renderer ) ; - virtual ~wxGraphicsObject() ; - - bool IsNull() const ; - - // returns the renderer that was used to create this instance, or NULL if it has not been initialized yet - wxGraphicsRenderer* GetRenderer() const ; - wxGraphicsObjectRefData* GetGraphicsData() const ; -protected : - virtual wxObjectRefData* CreateRefData() const; - virtual wxObjectRefData* CloneRefData(const wxObjectRefData* data) const; - - DECLARE_DYNAMIC_CLASS(wxGraphicsObject) -} ; - -class WXDLLIMPEXP_CORE wxGraphicsPen : public wxGraphicsObject -{ -public : - wxGraphicsPen() {} -#if wxABI_VERSION >= 20810 - wxGraphicsPen( const wxGraphicsPen& other) : wxGraphicsObject( other ) {} - wxGraphicsPen& operator= (const wxGraphicsPen & other) { Ref(other); return *this;} -#endif - virtual ~wxGraphicsPen() {} -private : - DECLARE_DYNAMIC_CLASS(wxGraphicsPen) -} ; - -extern WXDLLEXPORT_DATA(wxGraphicsPen) wxNullGraphicsPen; - -class WXDLLIMPEXP_CORE wxGraphicsBrush : public wxGraphicsObject -{ -public : - wxGraphicsBrush() {} -#if wxABI_VERSION >= 20810 - wxGraphicsBrush( const wxGraphicsBrush& other) : wxGraphicsObject( other ) {} - wxGraphicsBrush& operator= (const wxGraphicsBrush & other) { Ref(other); return *this;} -#endif - virtual ~wxGraphicsBrush() {} -private : - DECLARE_DYNAMIC_CLASS(wxGraphicsBrush) -} ; - -extern WXDLLEXPORT_DATA(wxGraphicsBrush) wxNullGraphicsBrush; - -class WXDLLIMPEXP_CORE wxGraphicsFont : public wxGraphicsObject -{ -public : - wxGraphicsFont() {} -#if wxABI_VERSION >= 20810 - wxGraphicsFont( const wxGraphicsFont& other) : wxGraphicsObject( other ) {} - wxGraphicsFont& operator= (const wxGraphicsFont & other) { Ref(other); return *this;} -#endif - virtual ~wxGraphicsFont() {} -private : - DECLARE_DYNAMIC_CLASS(wxGraphicsFont) -} ; - -extern WXDLLEXPORT_DATA(wxGraphicsFont) wxNullGraphicsFont; - -class WXDLLIMPEXP_CORE wxGraphicsBitmap : public wxGraphicsObject -{ -public : - wxGraphicsBitmap() {} -#if wxABI_VERSION >= 20810 - wxGraphicsBitmap( const wxGraphicsBitmap& other) : wxGraphicsObject( other ) {} - wxGraphicsBitmap& operator= (const wxGraphicsBitmap & other) { Ref(other); return *this;} -#endif - virtual ~wxGraphicsBitmap() {} -private : - DECLARE_DYNAMIC_CLASS(wxGraphicsBitmap) -} ; - -extern WXDLLEXPORT_DATA(wxGraphicsBitmap) wxNullGraphicsBitmap; - -class WXDLLIMPEXP_CORE wxGraphicsMatrixData : public wxGraphicsObjectRefData -{ -public : - wxGraphicsMatrixData( wxGraphicsRenderer* renderer) : - wxGraphicsObjectRefData(renderer) {} - - virtual ~wxGraphicsMatrixData() {} - - // concatenates the matrix - virtual void Concat( const wxGraphicsMatrixData *t ) = 0; - - // sets the matrix to the respective values - virtual void Set(wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0, - wxDouble tx=0.0, wxDouble ty=0.0) = 0; - - // gets the component valuess of the matrix - virtual void Get(wxDouble* a=NULL, wxDouble* b=NULL, wxDouble* c=NULL, - wxDouble* d=NULL, wxDouble* tx=NULL, wxDouble* ty=NULL) const = 0; - - // makes this the inverse matrix - virtual void Invert() = 0; - - // returns true if the elements of the transformation matrix are equal ? - virtual bool IsEqual( const wxGraphicsMatrixData* t) const = 0; - - // return true if this is the identity matrix - virtual bool IsIdentity() const = 0; - - // - // transformation - // - - // 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 (radians) - virtual void Rotate( wxDouble angle ) = 0; - - // - // apply the transforms - // - - // applies that matrix to the point - virtual void TransformPoint( wxDouble *x, wxDouble *y ) const = 0; - - // applies the matrix except for translations - virtual void TransformDistance( wxDouble *dx, wxDouble *dy ) const =0; - - // returns the native representation - virtual void * GetNativeMatrix() const = 0; -} ; - -class WXDLLIMPEXP_CORE wxGraphicsMatrix : public wxGraphicsObject -{ -public : - wxGraphicsMatrix() {} -#if wxABI_VERSION >= 20810 - wxGraphicsMatrix( const wxGraphicsMatrix& other) : wxGraphicsObject( other ) {} - wxGraphicsMatrix& operator= (const wxGraphicsMatrix & other) { Ref(other); return *this;} -#endif - - virtual ~wxGraphicsMatrix() {} - - // concatenates the matrix - virtual void Concat( const wxGraphicsMatrix *t ); - void Concat( const wxGraphicsMatrix &t ) { Concat( &t ); } - - // sets the matrix to the respective values - virtual void Set(wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0, - wxDouble tx=0.0, wxDouble ty=0.0); - - // gets the component valuess of the matrix - virtual void Get(wxDouble* a=NULL, wxDouble* b=NULL, wxDouble* c=NULL, - wxDouble* d=NULL, wxDouble* tx=NULL, wxDouble* ty=NULL) const; - - // makes this the inverse matrix - virtual void Invert(); - - // returns true if the elements of the transformation matrix are equal ? - virtual bool IsEqual( const wxGraphicsMatrix* t) const; - bool IsEqual( const wxGraphicsMatrix& t) const { return IsEqual( &t ); } - - // return true if this is the identity matrix - virtual bool IsIdentity() const; - - // - // transformation - // - - // add the translation to this matrix - virtual void Translate( wxDouble dx , wxDouble dy ); - - // add the scale to this matrix - virtual void Scale( wxDouble xScale , wxDouble yScale ); - - // add the rotation to this matrix (radians) - virtual void Rotate( wxDouble angle ); - - // - // apply the transforms - // - - // applies that matrix to the point - virtual void TransformPoint( wxDouble *x, wxDouble *y ) const; - - // applies the matrix except for translations - virtual void TransformDistance( wxDouble *dx, wxDouble *dy ) const; - - // returns the native representation - virtual void * GetNativeMatrix() const; - - const wxGraphicsMatrixData* GetMatrixData() const - { return (const wxGraphicsMatrixData*) GetRefData(); } - wxGraphicsMatrixData* GetMatrixData() - { return (wxGraphicsMatrixData*) GetRefData(); } - -private : - DECLARE_DYNAMIC_CLASS(wxGraphicsMatrix) -} ; - -extern WXDLLEXPORT_DATA(wxGraphicsMatrix) wxNullGraphicsMatrix; - -class WXDLLIMPEXP_CORE wxGraphicsPathData : public wxGraphicsObjectRefData -{ -public : - wxGraphicsPathData(wxGraphicsRenderer* renderer) : wxGraphicsObjectRefData(renderer) {} - virtual ~wxGraphicsPathData() {} - - // - // These are the path primitives from which everything else can be constructed - // - - // begins a new subpath at (x,y) - virtual void MoveToPoint( wxDouble x, wxDouble y ) = 0; - - // adds a straight line from the current point to (x,y) - virtual void AddLineToPoint( wxDouble x, wxDouble y ) = 0; - - // adds a cubic Bezier curve from the current point, using two control points and an end point - virtual void AddCurveToPoint( wxDouble cx1, wxDouble cy1, wxDouble cx2, wxDouble cy2, wxDouble x, wxDouble y ) = 0; - - // adds another path - virtual void AddPath( const wxGraphicsPathData* path ) =0; - - // closes the current sub-path - virtual void CloseSubpath() = 0; - - // gets the last point of the current path, (0,0) if not yet set - virtual void GetCurrentPoint( wxDouble* x, wxDouble* y) const = 0; - - // adds an arc of a circle centering at (x,y) with radius (r) from startAngle to endAngle - virtual void AddArc( wxDouble x, wxDouble y, wxDouble r, wxDouble startAngle, wxDouble endAngle, bool clockwise ) = 0; - - // - // These are convenience functions which - if not available natively will be assembled - // using the primitives from above - // - - // adds a quadratic Bezier curve from the current point, using a control point and an end point - virtual void AddQuadCurveToPoint( wxDouble cx, wxDouble cy, wxDouble x, wxDouble y ); - - // appends a rectangle as a new closed subpath - virtual void AddRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h ); - - // appends an ellipsis as a new closed subpath fitting the passed rectangle - virtual void AddCircle( wxDouble x, wxDouble y, wxDouble r ); - - // appends a an arc to two tangents connecting (current) to (x1,y1) and (x1,y1) to (x2,y2), also a straight line from (current) to (x1,y1) - virtual void AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r ) ; - - // appends an ellipse - virtual void AddEllipse( wxDouble x, wxDouble y, wxDouble w, wxDouble h); - - // appends a rounded rectangle - virtual void AddRoundedRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h, wxDouble radius); - - // returns the native path - virtual void * GetNativePath() const = 0; - - // give the native path returned by GetNativePath() back (there might be some deallocations necessary) - virtual void UnGetNativePath(void *p) const= 0; - - // transforms each point of this path by the matrix - virtual void Transform( const wxGraphicsMatrixData* matrix ) =0; - - // gets the bounding box enclosing all points (possibly including control points) - virtual void GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wxDouble *h) const=0; - - virtual bool Contains( wxDouble x, wxDouble y, int fillStyle = wxODDEVEN_RULE) const=0; -}; - -class WXDLLIMPEXP_CORE wxGraphicsPath : public wxGraphicsObject -{ -public : - wxGraphicsPath() {} -#if wxABI_VERSION >= 20810 - wxGraphicsPath( const wxGraphicsPath& other) : wxGraphicsObject( other ) {} - wxGraphicsPath& operator= (const wxGraphicsPath & other) { Ref(other); return *this;} -#endif - virtual ~wxGraphicsPath() {} - - // - // These are the path primitives from which everything else can be constructed - // - - // begins a new subpath at (x,y) - virtual void MoveToPoint( wxDouble x, wxDouble y ); - void MoveToPoint( const wxPoint2DDouble& p); - - // adds a straight line from the current point to (x,y) - virtual void AddLineToPoint( wxDouble x, wxDouble y ); - void AddLineToPoint( const wxPoint2DDouble& p); - - // adds a cubic Bezier curve from the current point, using two control points and an end point - virtual void AddCurveToPoint( wxDouble cx1, wxDouble cy1, wxDouble cx2, wxDouble cy2, wxDouble x, wxDouble y ) ; - void AddCurveToPoint( const wxPoint2DDouble& c1, const wxPoint2DDouble& c2, const wxPoint2DDouble& e); - - // adds another path - virtual void AddPath( const wxGraphicsPath& path ); - - // closes the current sub-path - virtual void CloseSubpath() ; - - // gets the last point of the current path, (0,0) if not yet set - virtual void GetCurrentPoint( wxDouble* x, wxDouble* y) const; - wxPoint2DDouble GetCurrentPoint() const; - - // adds an arc of a circle centering at (x,y) with radius (r) from startAngle to endAngle - virtual void AddArc( wxDouble x, wxDouble y, wxDouble r, wxDouble startAngle, wxDouble endAngle, bool clockwise ) ; - void AddArc( const wxPoint2DDouble& c, wxDouble r, wxDouble startAngle, wxDouble endAngle, bool clockwise); - - // - // These are convenience functions which - if not available natively will be assembled - // using the primitives from above - // - - // adds a quadratic Bezier curve from the current point, using a control point and an end point - virtual void AddQuadCurveToPoint( wxDouble cx, wxDouble cy, wxDouble x, wxDouble y ); - - // appends a rectangle as a new closed subpath - virtual void AddRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h ); - - // appends an ellipsis as a new closed subpath fitting the passed rectangle - virtual void AddCircle( wxDouble x, wxDouble y, wxDouble r ); - - // appends a an arc to two tangents connecting (current) to (x1,y1) and (x1,y1) to (x2,y2), also a straight line from (current) to (x1,y1) - virtual void AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r ) ; - - // appends an ellipse - virtual void AddEllipse( wxDouble x, wxDouble y, wxDouble w, wxDouble h); - - // appends a rounded rectangle - virtual void AddRoundedRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h, wxDouble radius); - - // returns the native path - virtual void * GetNativePath() const; - - // give the native path returned by GetNativePath() back (there might be some deallocations necessary) - virtual void UnGetNativePath(void *p)const; - - // transforms each point of this path by the matrix - virtual void Transform( const wxGraphicsMatrix& matrix ); - - // gets the bounding box enclosing all points (possibly including control points) - virtual void GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wxDouble *h)const; - wxRect2DDouble GetBox()const; - - virtual bool Contains( wxDouble x, wxDouble y, int fillStyle = wxODDEVEN_RULE)const; - bool Contains( const wxPoint2DDouble& c, int fillStyle = wxODDEVEN_RULE)const; - - const wxGraphicsPathData* GetPathData() const - { return (const wxGraphicsPathData*) GetRefData(); } - wxGraphicsPathData* GetPathData() - { return (wxGraphicsPathData*) GetRefData(); } - -private : - DECLARE_DYNAMIC_CLASS(wxGraphicsPath) -} ; - -extern WXDLLEXPORT_DATA(wxGraphicsPath) wxNullGraphicsPath; - - -class WXDLLIMPEXP_CORE wxGraphicsContext : public wxGraphicsObject -{ -public: - wxGraphicsContext(wxGraphicsRenderer* renderer); - - virtual ~wxGraphicsContext(); - - static wxGraphicsContext* Create( const wxWindowDC& dc) ; - -#ifdef __WXMSW__ - static wxGraphicsContext * Create( const wxMemoryDC& dc) ; -#endif - - static wxGraphicsContext* CreateFromNative( void * context ) ; - - static wxGraphicsContext* CreateFromNativeWindow( void * window ) ; - - static wxGraphicsContext* Create( wxWindow* window ) ; - - // create a context that can be used for measuring texts only, no drawing allowed - static wxGraphicsContext * Create(); - - wxGraphicsPath CreatePath() const; - - virtual wxGraphicsPen CreatePen(const wxPen& pen) const; - - virtual wxGraphicsBrush CreateBrush(const wxBrush& brush ) const; - - // sets the brush to a linear gradient, starting at (x1,y1) with color c1 to (x2,y2) with color c2 - virtual wxGraphicsBrush CreateLinearGradientBrush( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2, - const wxColour&c1, const wxColour&c2) const; - - // sets the brush to a radial gradient originating at (xo,yc) with color oColor and ends on a circle around (xc,yc) - // with radius r and color cColor - virtual wxGraphicsBrush CreateRadialGradientBrush( wxDouble xo, wxDouble yo, wxDouble xc, wxDouble yc, wxDouble radius, - const wxColour &oColor, const wxColour &cColor) const; - - // sets the font - virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ) const; - -#if wxABI_VERSION >= 20809 - wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) const; -#endif - - //virtual wxGraphicsBitmap CreateSubBitmap( const wxGraphicsBitmap &bitmap, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) const; - - // create a 'native' matrix corresponding to these values - virtual wxGraphicsMatrix CreateMatrix( wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0, - wxDouble tx=0.0, wxDouble ty=0.0) const; - - // push the current state of the context, ie the transformation matrix on a stack - virtual void PushState() = 0; - - // pops a stored state from the stack - virtual void PopState() = 0; - - // clips drawings to the region intersected with the current clipping region - virtual void Clip( const wxRegion ®ion ) = 0; - - // clips drawings to the rect intersected with the current clipping region - virtual void Clip( wxDouble x, wxDouble y, wxDouble w, wxDouble h ) = 0; - - // resets the clipping to original extent - virtual void ResetClip() = 0 ; - - // returns the native context - virtual void * GetNativeContext() = 0; - - // returns the current logical function - virtual int GetLogicalFunction() const { return m_logicalFunction; } - - // sets the current logical function, returns true if it supported - virtual bool SetLogicalFunction(int function) ; - - // - // transformation : changes the current transformation matrix CTM of the context - // - - // translate - virtual void Translate( wxDouble dx , wxDouble dy ) = 0; - - // scale - virtual void Scale( wxDouble xScale , wxDouble yScale ) = 0; - - // rotate (radians) - virtual void Rotate( wxDouble angle ) = 0; - - // concatenates this transform with the current transform of this context - virtual void ConcatTransform( const wxGraphicsMatrix& matrix ) = 0; - - // sets the transform of this context - virtual void SetTransform( const wxGraphicsMatrix& matrix ) = 0; - - // gets the matrix of this context - virtual wxGraphicsMatrix GetTransform() const = 0; - // - // setting the paint - // - - // sets the pen - virtual void SetPen( const wxGraphicsPen& pen ); - - void SetPen( const wxPen& pen ); - - // sets the brush for filling - virtual void SetBrush( const wxGraphicsBrush& brush ); - - void SetBrush( const wxBrush& brush ); - - // sets the font - virtual void SetFont( const wxGraphicsFont& font ); - - void SetFont( const wxFont& font, const wxColour& colour ); - - - // strokes along a path with the current pen - virtual void StrokePath( const wxGraphicsPath& path ) = 0; - - // fills a path with the current brush - virtual void FillPath( const wxGraphicsPath& path, int fillStyle = wxODDEVEN_RULE ) = 0; - - // draws a path by first filling and then stroking - virtual void DrawPath( const wxGraphicsPath& path, int fillStyle = wxODDEVEN_RULE ); - - // - // text - // - - virtual void DrawText( const wxString &str, wxDouble x, wxDouble y ) = 0; - - virtual void DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle ); - - virtual void DrawText( const wxString &str, wxDouble x, wxDouble y, const wxGraphicsBrush& backgroundBrush ) ; - - virtual void DrawText( const wxString &str, wxDouble x, wxDouble y, wxDouble angle, const wxGraphicsBrush& backgroundBrush ); - - virtual void GetTextExtent( const wxString &text, wxDouble *width, wxDouble *height, - wxDouble *descent, wxDouble *externalLeading ) const = 0; - - virtual void GetPartialTextExtents(const wxString& text, wxArrayDouble& widths) const = 0; - - // - // image support - // -#if wxABI_VERSION >= 20809 - void DrawGraphicsBitmap( const wxGraphicsBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ); -#endif - - virtual void DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) = 0; - - virtual void DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) = 0; - - // - // convenience methods - // - - // strokes a single line - virtual void StrokeLine( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2); - - // stroke lines connecting each of the points - virtual void StrokeLines( size_t n, const wxPoint2DDouble *points); - - // stroke disconnected lines from begin to end points - virtual void StrokeLines( size_t n, const wxPoint2DDouble *beginPoints, const wxPoint2DDouble *endPoints); - - // draws a polygon - virtual void DrawLines( size_t n, const wxPoint2DDouble *points, int fillStyle = wxODDEVEN_RULE ); - - // draws a polygon - virtual void DrawRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h); - - // draws an ellipse - virtual void DrawEllipse( wxDouble x, wxDouble y, wxDouble w, wxDouble h); - - // draws a rounded rectangle - virtual void DrawRoundedRectangle( wxDouble x, wxDouble y, wxDouble w, wxDouble h, wxDouble radius); - - // wrappers using wxPoint2DDouble TODO - - // helper to determine if a 0.5 offset should be applied for the drawing operation - virtual bool ShouldOffset() const { return false; } - -protected : - - wxGraphicsPen m_pen; - wxGraphicsBrush m_brush; - wxGraphicsFont m_font; - int m_logicalFunction; - -private : - DECLARE_NO_COPY_CLASS(wxGraphicsContext) - DECLARE_ABSTRACT_CLASS(wxGraphicsContext) -}; - -#if 0 - -// -// A graphics figure allows to cache path, pen etc creations, also will be a basis for layering/grouping elements -// - -class WXDLLIMPEXP_CORE wxGraphicsFigure : public wxGraphicsObject -{ -public : - wxGraphicsFigure(wxGraphicsRenderer* renderer) ; -#if wxABI_VERSION >= 20810 - wxGraphicsFigure( const wxGraphicsFigure& other) : wxGraphicsObject( other ) {} - wxGraphicsFigure& operator= (const wxGraphicsFigure & other) { Ref(other); return *this;} -#endif - - virtual ~wxGraphicsFigure() ; - - void SetPath( wxGraphicsMatrix* matrix ); - - void SetMatrix( wxGraphicsPath* path); - - // draws this object on the context - virtual void Draw( wxGraphicsContext* cg ); - - // returns the path of this object - wxGraphicsPath* GetPath() { return m_path; } - - // returns the transformation matrix of this object, may be null if there is no transformation necessary - wxGraphicsMatrix* GetMatrix() { return m_matrix; } - -private : - wxGraphicsMatrix* m_matrix; - wxGraphicsPath* m_path; - - DECLARE_DYNAMIC_CLASS(wxGraphicsFigure) -} ; - -#endif - -// -// The graphics renderer is the instance corresponding to the rendering engine used, eg there is ONE core graphics renderer -// instance on OSX. This instance is pointed back to by all objects created by it. Therefore you can create eg additional -// paths at any point from a given matrix etc. -// - -class WXDLLIMPEXP_CORE wxGraphicsRenderer : public wxObject -{ -public : - wxGraphicsRenderer() {} - - virtual ~wxGraphicsRenderer() {} - - static wxGraphicsRenderer* GetDefaultRenderer(); - - // Context - - virtual wxGraphicsContext * CreateContext( const wxWindowDC& dc) = 0 ; -#ifdef __WXMSW__ - virtual wxGraphicsContext * CreateContext( const wxMemoryDC& dc) = 0 ; -#endif - virtual wxGraphicsContext * CreateContextFromNativeContext( void * context ) = 0; - - virtual wxGraphicsContext * CreateContextFromNativeWindow( void * window ) = 0; - - virtual wxGraphicsContext * CreateContext( wxWindow* window ) = 0; - - // create a context that can be used for measuring texts only, no drawing allowed - virtual wxGraphicsContext * CreateMeasuringContext() = 0; - - // Path - - virtual wxGraphicsPath CreatePath() = 0; - - // Matrix - - virtual wxGraphicsMatrix CreateMatrix( wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0, - wxDouble tx=0.0, wxDouble ty=0.0) = 0; - - // Paints - - virtual wxGraphicsPen CreatePen(const wxPen& pen) = 0 ; - - virtual wxGraphicsBrush CreateBrush(const wxBrush& brush ) = 0 ; - - // sets the brush to a linear gradient, starting at (x1,y1) with color c1 to (x2,y2) with color c2 - virtual wxGraphicsBrush CreateLinearGradientBrush( wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2, - const wxColour&c1, const wxColour&c2) = 0; - - // sets the brush to a radial gradient originating at (xo,yc) with color oColor and ends on a circle around (xc,yc) - // with radius r and color cColor - virtual wxGraphicsBrush CreateRadialGradientBrush( wxDouble xo, wxDouble yo, wxDouble xc, wxDouble yc, wxDouble radius, - const wxColour &oColor, const wxColour &cColor) = 0; - - // sets the font - virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ) = 0; - -#if wxABI_VERSION >= 20809 - wxGraphicsBitmap CreateBitmap( const wxBitmap &bmp ); -#endif - -private : - DECLARE_NO_COPY_CLASS(wxGraphicsRenderer) - DECLARE_ABSTRACT_CLASS(wxGraphicsRenderer) -} ; - -#endif - -#endif // _WX_GRAPHICS_H_ diff --git a/desmume/src/windows/wx/include/wx/grid.h b/desmume/src/windows/wx/include/wx/grid.h deleted file mode 100644 index 6c5012629..000000000 --- a/desmume/src/windows/wx/include/wx/grid.h +++ /dev/null @@ -1,18 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/grid.h -// Purpose: wxGrid base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: grid.h 33948 2005-05-04 18:57:50Z JS $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GRID_H_BASE_ -#define _WX_GRID_H_BASE_ - -#include "wx/generic/grid.h" - -#endif - // _WX_GRID_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/gsocket.h b/desmume/src/windows/wx/include/wx/gsocket.h deleted file mode 100644 index 83d8ee49b..000000000 --- a/desmume/src/windows/wx/include/wx/gsocket.h +++ /dev/null @@ -1,184 +0,0 @@ -/* ------------------------------------------------------------------------- - * Project: GSocket (Generic Socket) - * Name: gsocket.h - * Author: Guilhem Lavaux - * Guillermo Rodriguez Garcia (maintainer) - * Copyright: (c) Guilhem Lavaux - * Licence: wxWindows Licence - * Purpose: GSocket include file (system independent) - * CVSID: $Id: gsocket.h 33948 2005-05-04 18:57:50Z JS $ - * ------------------------------------------------------------------------- - */ - -#ifndef __GSOCKET_H -#define __GSOCKET_H - -#ifndef __GSOCKET_STANDALONE__ -#include "wx/defs.h" - -#include "wx/dlimpexp.h" /* for WXDLLIMPEXP_NET */ - -#endif - -#if wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) - -#include - -/* - Including sys/types.h under cygwin results in the warnings about "fd_set - having been defined in sys/types.h" when winsock.h is included later and - doesn't seem to be necessary anyhow. It's not needed under Mac neither. - */ -#if !defined(__WXMAC__) && !defined(__CYGWIN__) && !defined(__WXWINCE__) -#include -#endif - -#ifdef __WXWINCE__ -#include -#endif - -class GSocket; - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct _GAddress GAddress; - -typedef enum { - GSOCK_NOFAMILY = 0, - GSOCK_INET, - GSOCK_INET6, - GSOCK_UNIX -} GAddressType; - -typedef enum { - GSOCK_STREAMED, - GSOCK_UNSTREAMED -} GSocketStream; - -typedef enum { - GSOCK_NOERROR = 0, - GSOCK_INVOP, - GSOCK_IOERR, - GSOCK_INVADDR, - GSOCK_INVSOCK, - GSOCK_NOHOST, - GSOCK_INVPORT, - GSOCK_WOULDBLOCK, - GSOCK_TIMEDOUT, - GSOCK_MEMERR, - GSOCK_OPTERR -} GSocketError; - -/* See below for an explanation on how events work. - */ -typedef enum { - GSOCK_INPUT = 0, - GSOCK_OUTPUT = 1, - GSOCK_CONNECTION = 2, - GSOCK_LOST = 3, - GSOCK_MAX_EVENT = 4 -} GSocketEvent; - -enum { - GSOCK_INPUT_FLAG = 1 << GSOCK_INPUT, - GSOCK_OUTPUT_FLAG = 1 << GSOCK_OUTPUT, - GSOCK_CONNECTION_FLAG = 1 << GSOCK_CONNECTION, - GSOCK_LOST_FLAG = 1 << GSOCK_LOST -}; - -typedef int GSocketEventFlags; - -typedef void (*GSocketCallback)(GSocket *socket, GSocketEvent event, - char *cdata); - - -/* Functions tables for internal use by GSocket code: */ - -/* Actually this is a misnomer now, but reusing this name means I don't - have to ifdef app traits or common socket code */ -class GSocketGUIFunctionsTable -{ -public: - // needed since this class declares virtual members - virtual ~GSocketGUIFunctionsTable() { } - virtual bool OnInit() = 0; - virtual void OnExit() = 0; - virtual bool CanUseEventLoop() = 0; - virtual bool Init_Socket(GSocket *socket) = 0; - virtual void Destroy_Socket(GSocket *socket) = 0; -#ifndef __WINDOWS__ - virtual void Install_Callback(GSocket *socket, GSocketEvent event) = 0; - virtual void Uninstall_Callback(GSocket *socket, GSocketEvent event) = 0; -#endif - virtual void Enable_Events(GSocket *socket) = 0; - virtual void Disable_Events(GSocket *socket) = 0; -}; - - -/* Global initializers */ - -/* Sets GUI functions callbacks. Must be called *before* GSocket_Init - if the app uses async sockets. */ -void GSocket_SetGUIFunctions(GSocketGUIFunctionsTable *guifunc); - -/* GSocket_Init() must be called at the beginning */ -int GSocket_Init(void); - -/* GSocket_Cleanup() must be called at the end */ -void GSocket_Cleanup(void); - - -/* Constructors / Destructors */ - -GSocket *GSocket_new(void); - - -/* GAddress */ - -GAddress *GAddress_new(void); -GAddress *GAddress_copy(GAddress *address); -void GAddress_destroy(GAddress *address); - -void GAddress_SetFamily(GAddress *address, GAddressType type); -GAddressType GAddress_GetFamily(GAddress *address); - -/* The use of any of the next functions will set the address family to - * the specific one. For example if you use GAddress_INET_SetHostName, - * address family will be implicitly set to AF_INET. - */ - -GSocketError GAddress_INET_SetHostName(GAddress *address, const char *hostname); -GSocketError GAddress_INET_SetAnyAddress(GAddress *address); -GSocketError GAddress_INET_SetHostAddress(GAddress *address, - unsigned long hostaddr); -GSocketError GAddress_INET_SetPortName(GAddress *address, const char *port, - const char *protocol); -GSocketError GAddress_INET_SetPort(GAddress *address, unsigned short port); - -GSocketError GAddress_INET_GetHostName(GAddress *address, char *hostname, - size_t sbuf); -unsigned long GAddress_INET_GetHostAddress(GAddress *address); -unsigned short GAddress_INET_GetPort(GAddress *address); - -/* TODO: Define specific parts (INET6, UNIX) */ - -GSocketError GAddress_UNIX_SetPath(GAddress *address, const char *path); -GSocketError GAddress_UNIX_GetPath(GAddress *address, char *path, size_t sbuf); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -# if defined(__WINDOWS__) -# include "wx/msw/gsockmsw.h" -# elif defined(__WXMAC__) && !defined(__DARWIN__) -# include "wx/mac/gsockmac.h" -# else -# include "wx/unix/gsockunx.h" -# endif - -#endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */ - -#endif /* __GSOCKET_H */ diff --git a/desmume/src/windows/wx/include/wx/hash.h b/desmume/src/windows/wx/include/wx/hash.h deleted file mode 100644 index 69cc9ad53..000000000 --- a/desmume/src/windows/wx/include/wx/hash.h +++ /dev/null @@ -1,630 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/hash.h -// Purpose: wxHashTable class -// 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 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HASH_H__ -#define _WX_HASH_H__ - -#include "wx/defs.h" - -#if !wxUSE_STL && WXWIN_COMPATIBILITY_2_4 - #define wxUSE_OLD_HASH_TABLE 1 -#else - #define wxUSE_OLD_HASH_TABLE 0 -#endif - -#if !wxUSE_STL - #include "wx/object.h" -#else - class WXDLLIMPEXP_BASE wxObject; -#endif -#if wxUSE_OLD_HASH_TABLE - #include "wx/list.h" -#endif -#if WXWIN_COMPATIBILITY_2_4 - #include "wx/dynarray.h" -#endif - -// the default size of the hash -#define wxHASH_SIZE_DEFAULT (1000) - -/* - * A hash table is an array of user-definable size with lists - * of data items hanging off the array positions. Usually there'll - * be a hit, so no search is required; otherwise we'll have to run down - * the list to find the desired item. -*/ - -// ---------------------------------------------------------------------------- -// this is the base class for object hashes: hash tables which contain -// pointers to objects -// ---------------------------------------------------------------------------- - -#if wxUSE_OLD_HASH_TABLE - -class WXDLLIMPEXP_BASE wxHashTableBase : public wxObject -{ -public: - wxHashTableBase(); - - void Create(wxKeyType keyType = wxKEY_INTEGER, - size_t size = wxHASH_SIZE_DEFAULT); - void Destroy(); - - size_t GetSize() const { return m_hashSize; } - size_t GetCount() const { return m_count; } - - void DeleteContents(bool flag); - -protected: - // find the node for (key, value) - wxNodeBase *GetNode(long key, long value) const; - - // the array of lists in which we store the values for given key hash - wxListBase **m_hashTable; - - // the size of m_lists array - size_t m_hashSize; - - // the type of indexing we use - wxKeyType m_keyType; - - // the total number of elements in the hash - size_t m_count; - - // should we delete our data? - bool m_deleteContents; - -private: - // no copy ctor/assignment operator (yet) - DECLARE_NO_COPY_CLASS(wxHashTableBase) -}; - -#else // if !wxUSE_OLD_HASH_TABLE - -#if !defined(wxENUM_KEY_TYPE_DEFINED) -#define wxENUM_KEY_TYPE_DEFINED - -enum wxKeyType -{ - wxKEY_NONE, - wxKEY_INTEGER, - wxKEY_STRING -}; - -#endif - -union wxHashKeyValue -{ - long integer; - wxChar *string; -}; - -// for some compilers (AIX xlC), defining it as friend inside the class is not -// enough, so provide a real forward declaration -class WXDLLIMPEXP_FWD_BASE wxHashTableBase; - -class WXDLLIMPEXP_BASE wxHashTableBase_Node -{ - friend class WXDLLIMPEXP_FWD_BASE wxHashTableBase; - typedef class WXDLLIMPEXP_FWD_BASE wxHashTableBase_Node _Node; -public: - wxHashTableBase_Node( long key, void* value, - wxHashTableBase* table ); - wxHashTableBase_Node( const wxChar* key, void* value, - wxHashTableBase* table ); - ~wxHashTableBase_Node(); - - long GetKeyInteger() const { return m_key.integer; } - const wxChar* GetKeyString() const { return m_key.string; } - - void* GetData() const { return m_value; } - void SetData( void* data ) { m_value = data; } - -protected: - _Node* GetNext() const { return m_next; } - -protected: - // next node in the chain - wxHashTableBase_Node* m_next; - - // key - wxHashKeyValue m_key; - - // value - void* m_value; - - // pointer to the hash containing the node, used to remove the - // node from the hash when the user deletes the node iterating - // through it - // TODO: move it to wxHashTable_Node (only wxHashTable supports - // iteration) - wxHashTableBase* m_hashPtr; -}; - -class WXDLLIMPEXP_BASE wxHashTableBase -#if !wxUSE_STL - : public wxObject -#endif -{ - friend class WXDLLIMPEXP_FWD_BASE wxHashTableBase_Node; -public: - typedef wxHashTableBase_Node Node; - - wxHashTableBase(); - virtual ~wxHashTableBase() { } - - void Create( wxKeyType keyType = wxKEY_INTEGER, - size_t size = wxHASH_SIZE_DEFAULT ); - void Clear(); - void Destroy(); - - size_t GetSize() const { return m_size; } - size_t GetCount() const { return m_count; } - - void DeleteContents( bool flag ) { m_deleteContents = flag; } - - static long MakeKey(const wxChar *string); - -protected: - void DoPut( long key, long hash, void* data ); - void DoPut( const wxChar* key, long hash, void* data ); - void* DoGet( long key, long hash ) const; - void* DoGet( const wxChar* key, long hash ) const; - void* DoDelete( long key, long hash ); - void* DoDelete( const wxChar* key, long hash ); - -private: - // Remove the node from the hash, *only called from - // ~wxHashTable*_Node destructor - void DoRemoveNode( wxHashTableBase_Node* node ); - - // destroys data contained in the node if appropriate: - // deletes the key if it is a string and destrys - // the value if m_deleteContents is true - void DoDestroyNode( wxHashTableBase_Node* node ); - - // inserts a node in the table (at the end of the chain) - void DoInsertNode( size_t bucket, wxHashTableBase_Node* node ); - - // removes a node from the table (fiven a pointer to the previous - // but does not delete it (only deletes its contents) - void DoUnlinkNode( size_t bucket, wxHashTableBase_Node* node, - wxHashTableBase_Node* prev ); - - // unconditionally deletes node value (invoking the - // correct destructor) - virtual void DoDeleteContents( wxHashTableBase_Node* node ) = 0; - -protected: - // number of buckets - size_t m_size; - - // number of nodes (key/value pairs) - size_t m_count; - - // table - Node** m_table; - - // key typ (INTEGER/STRING) - wxKeyType m_keyType; - - // delete contents when hash is cleared - bool m_deleteContents; - -private: - DECLARE_NO_COPY_CLASS(wxHashTableBase) -}; - -#endif // wxUSE_OLD_HASH_TABLE - -#if !wxUSE_STL - -#if WXWIN_COMPATIBILITY_2_4 - -// ---------------------------------------------------------------------------- -// a hash table which stores longs -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxHashTableLong : public wxObject -{ -public: - wxHashTableLong(size_t size = wxHASH_SIZE_DEFAULT) - { Init(size); } - virtual ~wxHashTableLong(); - - void Create(size_t size = wxHASH_SIZE_DEFAULT); - void Destroy(); - - size_t GetSize() const { return m_hashSize; } - size_t GetCount() const { return m_count; } - - void Put(long key, long value); - long Get(long key) const; - long Delete(long key); - -protected: - void Init(size_t size); - -private: - wxArrayLong **m_values, - **m_keys; - - // the size of array above - size_t m_hashSize; - - // the total number of elements in the hash - size_t m_count; - - // not implemented yet - DECLARE_NO_COPY_CLASS(wxHashTableLong) -}; - -// ---------------------------------------------------------------------------- -// wxStringHashTable: a hash table which indexes strings with longs -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStringHashTable : public wxObject -{ -public: - wxStringHashTable(size_t sizeTable = wxHASH_SIZE_DEFAULT); - virtual ~wxStringHashTable(); - - // add a string associated with this key to the table - void Put(long key, const wxString& value); - - // get the string from the key: if not found, an empty string is returned - // and the wasFound is set to false if not NULL - wxString Get(long key, bool *wasFound = NULL) const; - - // remove the item, returning true if the item was found and deleted - bool Delete(long key) const; - - // clean up - void Destroy(); - -private: - wxArrayLong **m_keys; - wxArrayString **m_values; - - // the size of array above - size_t m_hashSize; - - DECLARE_NO_COPY_CLASS(wxStringHashTable) -}; - -#endif // WXWIN_COMPATIBILITY_2_4 - -#endif // !wxUSE_STL - -// ---------------------------------------------------------------------------- -// for compatibility only -// ---------------------------------------------------------------------------- - -#if !wxUSE_OLD_HASH_TABLE - -class WXDLLIMPEXP_BASE wxHashTable_Node : public wxHashTableBase_Node -{ - friend class WXDLLIMPEXP_FWD_BASE wxHashTable; -public: - wxHashTable_Node( long key, void* value, - wxHashTableBase* table ) - : wxHashTableBase_Node( key, value, table ) { } - wxHashTable_Node( const wxChar* key, void* value, - wxHashTableBase* table ) - : wxHashTableBase_Node( key, value, table ) { } - - wxObject* GetData() const - { return (wxObject*)wxHashTableBase_Node::GetData(); } - void SetData( wxObject* data ) - { wxHashTableBase_Node::SetData( data ); } - - wxHashTable_Node* GetNext() const - { return (wxHashTable_Node*)wxHashTableBase_Node::GetNext(); } -}; - -// should inherit protectedly, but it is public for compatibility in -// order to publicly inherit from wxObject -class WXDLLIMPEXP_BASE wxHashTable : public wxHashTableBase -{ - typedef wxHashTableBase hash; -public: - typedef wxHashTable_Node Node; - typedef wxHashTable_Node* compatibility_iterator; -public: - wxHashTable( wxKeyType keyType = wxKEY_INTEGER, - size_t size = wxHASH_SIZE_DEFAULT ) - : wxHashTableBase() { Create( keyType, size ); BeginFind(); } - wxHashTable( const wxHashTable& table ); - - virtual ~wxHashTable() { Destroy(); } - - const wxHashTable& operator=( const wxHashTable& ); - - // key and value are the same - void Put(long value, wxObject *object) - { DoPut( value, value, object ); } - void Put(long lhash, long value, wxObject *object) - { DoPut( value, lhash, object ); } - void Put(const wxChar *value, wxObject *object) - { DoPut( value, MakeKey( value ), object ); } - void Put(long lhash, const wxChar *value, wxObject *object) - { DoPut( value, lhash, object ); } - - // key and value are the same - wxObject *Get(long value) const - { return (wxObject*)DoGet( value, value ); } - wxObject *Get(long lhash, long value) const - { return (wxObject*)DoGet( value, lhash ); } - wxObject *Get(const wxChar *value) const - { return (wxObject*)DoGet( value, MakeKey( value ) ); } - wxObject *Get(long lhash, const wxChar *value) const - { return (wxObject*)DoGet( value, lhash ); } - - // Deletes entry and returns data if found - wxObject *Delete(long key) - { return (wxObject*)DoDelete( key, key ); } - wxObject *Delete(long lhash, long key) - { return (wxObject*)DoDelete( key, lhash ); } - wxObject *Delete(const wxChar *key) - { return (wxObject*)DoDelete( key, MakeKey( key ) ); } - wxObject *Delete(long lhash, const wxChar *key) - { return (wxObject*)DoDelete( key, lhash ); } - - // Construct your own integer key from a string, e.g. in case - // you need to combine it with something - long MakeKey(const wxChar *string) const - { return wxHashTableBase::MakeKey(string); } - - // Way of iterating through whole hash table (e.g. to delete everything) - // Not necessary, of course, if you're only storing pointers to - // objects maintained separately - void BeginFind() { m_curr = NULL; m_currBucket = 0; } - Node* Next(); - - void Clear() { wxHashTableBase::Clear(); } - - size_t GetCount() const { return wxHashTableBase::GetCount(); } -protected: - // copy helper - void DoCopy( const wxHashTable& copy ); - - // searches the next node starting from bucket bucketStart and sets - // m_curr to it and m_currBucket to its bucket - void GetNextNode( size_t bucketStart ); -private: - virtual void DoDeleteContents( wxHashTableBase_Node* node ); - - // current node - Node* m_curr; - - // bucket the current node belongs to - size_t m_currBucket; -}; - -#else // if wxUSE_OLD_HASH_TABLE - -class WXDLLIMPEXP_BASE wxHashTable : public wxObject -{ -public: - typedef wxNode Node; - typedef wxNode* compatibility_iterator; - - int n; - int current_position; - wxNode *current_node; - - unsigned int key_type; - wxList **hash_table; - - wxHashTable(int the_key_type = wxKEY_INTEGER, - int size = wxHASH_SIZE_DEFAULT); - virtual ~wxHashTable(); - - // copy ctor and assignment operator - wxHashTable(const wxHashTable& table) : wxObject() - { DoCopy(table); } - wxHashTable& operator=(const wxHashTable& table) - { Clear(); DoCopy(table); return *this; } - - void DoCopy(const wxHashTable& table); - - void Destroy(); - - bool Create(int the_key_type = wxKEY_INTEGER, - int size = wxHASH_SIZE_DEFAULT); - - // Note that there are 2 forms of Put, Get. - // With a key and a value, the *value* will be checked - // when a collision is detected. Otherwise, if there are - // 2 items with a different value but the same key, - // we'll retrieve the WRONG ONE. So where possible, - // supply the required value along with the key. - // In fact, the value-only versions make a key, and still store - // the value. The use of an explicit key might be required - // e.g. when combining several values into one key. - // When doing that, it's highly likely we'll get a collision, - // e.g. 1 + 2 = 3, 2 + 1 = 3. - - // key and value are NOT necessarily the same - void Put(long key, long value, wxObject *object); - void Put(long key, const wxChar *value, wxObject *object); - - // key and value are the same - void Put(long value, wxObject *object); - void Put(const wxChar *value, wxObject *object); - - // key and value not the same - wxObject *Get(long key, long value) const; - wxObject *Get(long key, const wxChar *value) const; - - // key and value are the same - wxObject *Get(long value) const; - wxObject *Get(const wxChar *value) const; - - // Deletes entry and returns data if found - wxObject *Delete(long key); - wxObject *Delete(const wxChar *key); - - wxObject *Delete(long key, int value); - wxObject *Delete(long key, const wxChar *value); - - // Construct your own integer key from a string, e.g. in case - // you need to combine it with something - long MakeKey(const wxChar *string) const; - - // Way of iterating through whole hash table (e.g. to delete everything) - // Not necessary, of course, if you're only storing pointers to - // objects maintained separately - - void BeginFind(); - Node* Next(); - - void DeleteContents(bool flag); - void Clear(); - - // Returns number of nodes - size_t GetCount() const { return m_count; } - -private: - size_t m_count; // number of elements in the hashtable - bool m_deleteContents; - - DECLARE_DYNAMIC_CLASS(wxHashTable) -}; - -#endif // wxUSE_OLD_HASH_TABLE - -#if !wxUSE_OLD_HASH_TABLE - -// defines a new type safe hash table which stores the elements of type eltype -// in lists of class listclass -#define _WX_DECLARE_HASH(eltype, dummy, hashclass, classexp) \ - classexp hashclass : public wxHashTableBase \ - { \ - public: \ - hashclass(wxKeyType keyType = wxKEY_INTEGER, \ - size_t size = wxHASH_SIZE_DEFAULT) \ - : wxHashTableBase() { Create(keyType, size); } \ - \ - virtual ~hashclass() { Destroy(); } \ - \ - void Put(long key, eltype *data) { DoPut(key, key, (void*)data); } \ - void Put(long lhash, long key, eltype *data) \ - { DoPut(key, lhash, (void*)data); } \ - eltype *Get(long key) const { return (eltype*)DoGet(key, key); } \ - eltype *Get(long lhash, long key) const \ - { return (eltype*)DoGet(key, lhash); } \ - eltype *Delete(long key) { return (eltype*)DoDelete(key, key); } \ - eltype *Delete(long lhash, long key) \ - { return (eltype*)DoDelete(key, lhash); } \ - private: \ - virtual void DoDeleteContents( wxHashTableBase_Node* node ) \ - { delete (eltype*)node->GetData(); } \ - \ - DECLARE_NO_COPY_CLASS(hashclass) \ - } - -#else // if wxUSE_OLD_HASH_TABLE - -#define _WX_DECLARE_HASH(eltype, listclass, hashclass, classexp) \ - classexp hashclass : public wxHashTableBase \ - { \ - public: \ - hashclass(wxKeyType keyType = wxKEY_INTEGER, \ - size_t size = wxHASH_SIZE_DEFAULT) \ - { Create(keyType, size); } \ - \ - virtual ~hashclass() { Destroy(); } \ - \ - void Put(long key, long val, eltype *data) { DoPut(key, val, data); } \ - void Put(long key, eltype *data) { DoPut(key, key, data); } \ - \ - eltype *Get(long key, long value) const \ - { \ - wxNodeBase *node = GetNode(key, value); \ - return node ? ((listclass::Node *)node)->GetData() : (eltype *)0; \ - } \ - eltype *Get(long key) const { return Get(key, key); } \ - \ - eltype *Delete(long key, long value) \ - { \ - eltype *data; \ - \ - wxNodeBase *node = GetNode(key, value); \ - if ( node ) \ - { \ - data = ((listclass::Node *)node)->GetData(); \ - \ - delete node; \ - m_count--; \ - } \ - else \ - { \ - data = (eltype *)0; \ - } \ - \ - return data; \ - } \ - eltype *Delete(long key) { return Delete(key, key); } \ - \ - protected: \ - void DoPut(long key, long value, eltype *data) \ - { \ - size_t slot = (size_t)abs((int)(key % (long)m_hashSize)); \ - \ - if ( !m_hashTable[slot] ) \ - { \ - m_hashTable[slot] = new listclass(m_keyType); \ - if ( m_deleteContents ) \ - m_hashTable[slot]->DeleteContents(true); \ - } \ - \ - ((listclass *)m_hashTable[slot])->Append(value, data); \ - m_count++; \ - } \ - \ - DECLARE_NO_COPY_CLASS(hashclass) \ - } - -#endif // wxUSE_OLD_HASH_TABLE - -// this macro is to be used in the user code -#define WX_DECLARE_HASH(el, list, hash) \ - _WX_DECLARE_HASH(el, list, hash, class) - -// and this one does exactly the same thing but should be used inside the -// library -#define WX_DECLARE_EXPORTED_HASH(el, list, hash) \ - _WX_DECLARE_HASH(el, list, hash, class WXDLLEXPORT) - -#define WX_DECLARE_USER_EXPORTED_HASH(el, list, hash, usergoo) \ - _WX_DECLARE_HASH(el, list, hash, class usergoo) - -// delete all hash elements -// -// NB: the class declaration of the hash elements must be visible from the -// place where you use this macro, otherwise the proper destructor may not -// be called (a decent compiler should give a warning about it, but don't -// count on it)! -#define WX_CLEAR_HASH_TABLE(hash) \ - { \ - (hash).BeginFind(); \ - wxHashTable::compatibility_iterator it = (hash).Next(); \ - while( it ) \ - { \ - delete it->GetData(); \ - it = (hash).Next(); \ - } \ - (hash).Clear(); \ - } - -#endif - // _WX_HASH_H__ diff --git a/desmume/src/windows/wx/include/wx/hashmap.h b/desmume/src/windows/wx/include/wx/hashmap.h deleted file mode 100644 index 425315dc0..000000000 --- a/desmume/src/windows/wx/include/wx/hashmap.h +++ /dev/null @@ -1,739 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/hashmap.h -// Purpose: wxHashMap class -// Author: Mattia Barbon -// Modified by: -// Created: 29/01/2002 -// RCS-ID: $Id: hashmap.h 57388 2008-12-17 09:34:48Z VZ $ -// Copyright: (c) Mattia Barbon -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HASHMAP_H_ -#define _WX_HASHMAP_H_ - -#include "wx/string.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 -// available either in std::tr1 or std namespace itself -// -// To summarize: if std::unordered_map is available use it, otherwise use tr1 -// and finally fall back to non-standard hash_map - -#if (defined(HAVE_EXT_HASH_MAP) || defined(HAVE_HASH_MAP)) \ - && (defined(HAVE_GNU_CXX_HASH_MAP) || defined(HAVE_STD_HASH_MAP)) - #define HAVE_STL_HASH_MAP -#endif - -#if wxUSE_STL && \ - (defined(HAVE_STD_UNORDERED_MAP) || defined(HAVE_TR1_UNORDERED_MAP)) - -#if defined(HAVE_STD_UNORDERED_MAP) - #include - #define WX_HASH_MAP_NAMESPACE std -#elif defined(HAVE_TR1_UNORDERED_MAP) - #include - #define WX_HASH_MAP_NAMESPACE std::tr1 -#endif - -#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) - -#if defined(HAVE_EXT_HASH_MAP) - #include -#elif defined(HAVE_HASH_MAP) - #include -#endif - -#if defined(HAVE_GNU_CXX_HASH_MAP) - #define WX_HASH_MAP_NAMESPACE __gnu_cxx -#elif defined(HAVE_STD_HASH_MAP) - #define WX_HASH_MAP_NAMESPACE std -#endif - -#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 - -#define wxNEEDS_WX_HASH_MAP - -#ifdef __WXWINCE__ -typedef int ptrdiff_t; -#else -#include // for ptrdiff_t -#endif - -// private -struct WXDLLIMPEXP_BASE _wxHashTable_NodeBase -{ - _wxHashTable_NodeBase() : m_nxt(0) {} - - _wxHashTable_NodeBase* m_nxt; - -// Cannot do this: -// DECLARE_NO_COPY_CLASS(_wxHashTable_NodeBase) -// without rewriting the macros, which require a public copy constructor. -}; - -// private -class WXDLLIMPEXP_BASE _wxHashTableBase2 -{ -public: - typedef void (*NodeDtor)(_wxHashTable_NodeBase*); - typedef unsigned long (*BucketFromNode)(_wxHashTableBase2*,_wxHashTable_NodeBase*); - typedef _wxHashTable_NodeBase* (*ProcessNode)(_wxHashTable_NodeBase*); -protected: - static _wxHashTable_NodeBase* DummyProcessNode(_wxHashTable_NodeBase* node); - static void DeleteNodes( size_t buckets, _wxHashTable_NodeBase** table, - NodeDtor dtor ); - static _wxHashTable_NodeBase* GetFirstNode( size_t buckets, - _wxHashTable_NodeBase** table ) - { - for( size_t i = 0; i < buckets; ++i ) - if( table[i] ) - return table[i]; - return 0; - } - - // as static const unsigned prime_count = 31 but works with all compilers - enum { prime_count = 31 }; - static const unsigned long ms_primes[prime_count]; - - // returns the first prime in ms_primes greater than n - static unsigned long GetNextPrime( unsigned long n ); - - // returns the first prime in ms_primes smaller than n - // ( or ms_primes[0] if n is very small ) - static unsigned long GetPreviousPrime( unsigned long n ); - - static void CopyHashTable( _wxHashTable_NodeBase** srcTable, - size_t srcBuckets, _wxHashTableBase2* dst, - _wxHashTable_NodeBase** dstTable, - BucketFromNode func, ProcessNode proc ); - - static void** AllocTable( size_t sz ) - { - return (void **)calloc(sz, sizeof(void*)); - } - static void FreeTable(void *table) - { - free(table); - } -}; - -#define _WX_DECLARE_HASHTABLE( VALUE_T, KEY_T, HASH_T, KEY_EX_T, KEY_EQ_T, CLASSNAME, CLASSEXP, SHOULD_GROW, SHOULD_SHRINK ) \ -CLASSEXP CLASSNAME : protected _wxHashTableBase2 \ -{ \ -public: \ - typedef KEY_T key_type; \ - typedef VALUE_T value_type; \ - typedef HASH_T hasher; \ - typedef KEY_EQ_T key_equal; \ - \ - typedef size_t size_type; \ - typedef ptrdiff_t difference_type; \ - typedef value_type* pointer; \ - typedef const value_type* const_pointer; \ - typedef value_type& reference; \ - typedef const value_type& const_reference; \ - /* should these be protected? */ \ - typedef const KEY_T const_key_type; \ - typedef const VALUE_T const_mapped_type; \ -public: \ - struct Node; \ - typedef KEY_EX_T key_extractor; \ - typedef CLASSNAME Self; \ -protected: \ - Node** m_table; \ - size_t m_tableBuckets; \ - size_t m_items; \ - hasher m_hasher; \ - key_equal m_equals; \ - key_extractor m_getKey; \ -public: \ - struct Node:public _wxHashTable_NodeBase \ - { \ - public: \ - Node( const value_type& value ) \ - : m_value( value ) {} \ - Node* m_next() { return (Node*)this->m_nxt; } \ - \ - value_type m_value; \ - }; \ - \ - CLASSEXP Iterator; \ - friend CLASSEXP Iterator; \ -protected: \ - static void DeleteNode( _wxHashTable_NodeBase* node ) \ - { \ - delete (Node*)node; \ - } \ -public: \ - /* */ \ - /* forward iterator */ \ - /* */ \ - CLASSEXP Iterator \ - { \ - public: \ - Node* m_node; \ - Self* m_ht; \ - \ - Iterator() : m_node(0), m_ht(0) {} \ - Iterator( Node* node, const Self* ht ) \ - : m_node(node), m_ht((Self*)ht) {} \ - bool operator ==( const Iterator& it ) const \ - { return m_node == it.m_node; } \ - bool operator !=( const Iterator& it ) const \ - { return m_node != it.m_node; } \ - protected: \ - Node* GetNextNode() \ - { \ - size_type bucket = GetBucketForNode(m_ht,m_node); \ - for( size_type i = bucket + 1; i < m_ht->m_tableBuckets; ++i ) \ - { \ - if( m_ht->m_table[i] ) \ - return m_ht->m_table[i]; \ - } \ - return 0; \ - } \ - \ - void PlusPlus() \ - { \ - Node* next = m_node->m_next(); \ - m_node = next ? next : GetNextNode(); \ - } \ - }; \ - \ -public: \ - CLASSEXP iterator : public Iterator \ - { \ - public: \ - iterator() : Iterator() {} \ - iterator( Node* node, Self* ht ) : Iterator( node, ht ) {} \ - 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); } \ - }; \ - \ - CLASSEXP const_iterator : public Iterator \ - { \ - public: \ - const_iterator() : Iterator() {} \ - const_iterator(iterator i) : Iterator(i) {} \ - const_iterator( Node* node, const Self* ht ) \ - : Iterator( node, (Self*)ht ) {} \ - 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); } \ - }; \ - \ - CLASSNAME( size_type sz = 10, const hasher& hfun = hasher(), \ - const key_equal& k_eq = key_equal(), \ - const key_extractor& k_ex = key_extractor() ) \ - : m_tableBuckets( GetNextPrime( (unsigned long) sz ) ), \ - m_items( 0 ), \ - m_hasher( hfun ), \ - m_equals( k_eq ), \ - m_getKey( k_ex ) \ - { \ - m_table = (Node**)AllocTable( m_tableBuckets ); \ - } \ - \ - CLASSNAME( const Self& ht ) \ - : m_table( 0 ), \ - m_tableBuckets( 0 ), \ - m_items( ht.m_items ), \ - m_hasher( ht.m_hasher ), \ - m_equals( ht.m_equals ), \ - m_getKey( ht.m_getKey ) \ - { \ - HashCopy( ht ); \ - } \ - \ - const Self& operator=( const Self& ht ) \ - { \ - clear(); \ - m_hasher = ht.m_hasher; \ - m_equals = ht.m_equals; \ - m_getKey = ht.m_getKey; \ - m_items = ht.m_items; \ - HashCopy( ht ); \ - return *this; \ - } \ - \ - ~CLASSNAME() \ - { \ - clear(); \ - \ - FreeTable(m_table); \ - } \ - \ - hasher hash_funct() { return m_hasher; } \ - key_equal key_eq() { return m_equals; } \ - \ - /* removes all elements from the hash table, but does not */ \ - /* shrink it ( perhaps it should ) */ \ - void clear() \ - { \ - DeleteNodes( m_tableBuckets, (_wxHashTable_NodeBase**)m_table, \ - DeleteNode ); \ - m_items = 0; \ - } \ - \ - size_type size() const { return m_items; } \ - size_type max_size() const { return size_type(-1); } \ - bool empty() const { return size() == 0; } \ - \ - const_iterator end() const { return const_iterator( 0, this ); } \ - iterator end() { return iterator( 0, this ); } \ - const_iterator begin() const \ - { return const_iterator( (Node*)GetFirstNode( m_tableBuckets, (_wxHashTable_NodeBase**)m_table ), this ); } \ - iterator begin() \ - { return iterator( (Node*)GetFirstNode( m_tableBuckets, (_wxHashTable_NodeBase**)m_table ), this ); } \ - \ - size_type erase( const const_key_type& key ) \ - { \ - Node** node = GetNodePtr( key ); \ - \ - if( !node ) \ - return 0; \ - \ - --m_items; \ - Node* temp = (*node)->m_next(); \ - delete *node; \ - (*node) = temp; \ - if( SHOULD_SHRINK( m_tableBuckets, m_items ) ) \ - ResizeTable( GetPreviousPrime( (unsigned long) m_tableBuckets ) - 1 ); \ - return 1; \ - } \ - \ -protected: \ - static size_type GetBucketForNode( Self* ht, Node* node ) \ - { \ - return ht->m_hasher( ht->m_getKey( node->m_value ) ) \ - % ht->m_tableBuckets; \ - } \ - static Node* CopyNode( Node* node ) { return new Node( *node ); } \ - \ - Node* GetOrCreateNode( const value_type& value, bool& created ) \ - { \ - const const_key_type& key = m_getKey( value ); \ - size_t bucket = m_hasher( key ) % m_tableBuckets; \ - Node* node = m_table[bucket]; \ - \ - while( node ) \ - { \ - if( m_equals( m_getKey( node->m_value ), key ) ) \ - { \ - created = false; \ - return node; \ - } \ - node = node->m_next(); \ - } \ - created = true; \ - return CreateNode( value, bucket); \ - }\ - Node * CreateNode( const value_type& value, size_t bucket ) \ - {\ - Node* node = new Node( value ); \ - node->m_nxt = m_table[bucket]; \ - m_table[bucket] = node; \ - \ - /* must be after the node is inserted */ \ - ++m_items; \ - if( SHOULD_GROW( m_tableBuckets, m_items ) ) \ - ResizeTable( m_tableBuckets ); \ - \ - return node; \ - } \ - void CreateNode( const value_type& value ) \ - {\ - CreateNode(value, m_hasher( m_getKey(value) ) % m_tableBuckets ); \ - }\ - \ - /* returns NULL if not found */ \ - Node** GetNodePtr( const const_key_type& key ) const \ - { \ - size_t bucket = m_hasher( key ) % m_tableBuckets; \ - Node** node = &m_table[bucket]; \ - \ - while( *node ) \ - { \ - if( m_equals( m_getKey( (*node)->m_value ), key ) ) \ - return node; \ - /* Tell the compiler to not do any strict-aliasing assumptions with a void cast? Can we make such a runtime guarantee? */ \ - node = (Node**)&(*node)->m_nxt; \ - } \ - \ - return NULL; \ - } \ - \ - /* returns NULL if not found */ \ - /* expressing it in terms of GetNodePtr is 5-8% slower :-( */ \ - Node* GetNode( const const_key_type& key ) const \ - { \ - size_t bucket = m_hasher( key ) % m_tableBuckets; \ - Node* node = m_table[bucket]; \ - \ - while( node ) \ - { \ - if( m_equals( m_getKey( node->m_value ), key ) ) \ - return node; \ - node = node->m_next(); \ - } \ - \ - return 0; \ - } \ - \ - void ResizeTable( size_t newSize ) \ - { \ - newSize = GetNextPrime( (unsigned long)newSize ); \ - Node** srcTable = m_table; \ - size_t srcBuckets = m_tableBuckets; \ - m_table = (Node**)AllocTable( newSize ); \ - m_tableBuckets = newSize; \ - \ - CopyHashTable( (_wxHashTable_NodeBase**)srcTable, srcBuckets, \ - this, (_wxHashTable_NodeBase**)m_table, \ - (BucketFromNode)GetBucketForNode,\ - (ProcessNode)&DummyProcessNode ); \ - FreeTable(srcTable); \ - } \ - \ - /* this must be called _after_ m_table has been cleaned */ \ - void HashCopy( const Self& ht ) \ - { \ - ResizeTable( ht.size() ); \ - CopyHashTable( (_wxHashTable_NodeBase**)ht.m_table, ht.m_tableBuckets,\ - (_wxHashTableBase2*)this, \ - (_wxHashTable_NodeBase**)m_table, \ - (BucketFromNode)GetBucketForNode, \ - (ProcessNode)CopyNode ); \ - } \ -}; - -// defines an STL-like pair class CLASSNAME storing two fields: first of type -// KEY_T and second of type VALUE_T -#define _WX_DECLARE_PAIR( KEY_T, VALUE_T, CLASSNAME, CLASSEXP ) \ -CLASSEXP CLASSNAME \ -{ \ -public: \ - typedef KEY_T t1; \ - typedef VALUE_T t2; \ - typedef const KEY_T const_t1; \ - typedef const VALUE_T const_t2; \ - \ - CLASSNAME( const const_t1& f, const const_t2& s ):first(t1(f)),second(t2(s)) {} \ - \ - t1 first; \ - t2 second; \ -}; - -// defines the class CLASSNAME returning the key part (of type KEY_T) from a -// pair of type PAIR_T -#define _WX_DECLARE_HASH_MAP_KEY_EX( KEY_T, PAIR_T, CLASSNAME, CLASSEXP ) \ -CLASSEXP CLASSNAME \ -{ \ - typedef KEY_T key_type; \ - typedef PAIR_T pair_type; \ - typedef const key_type const_key_type; \ - typedef const pair_type const_pair_type; \ - typedef const_key_type& const_key_reference; \ - typedef const_pair_type& const_pair_reference; \ -public: \ - CLASSNAME() { } \ - const_key_reference operator()( const_pair_reference pair ) const { return pair.first; }\ - \ - /* the dummy assignment operator is needed to suppress compiler */ \ - /* warnings from hash table class' operator=(): gcc complains about */ \ - /* "statement with no effect" without it */ \ - CLASSNAME& operator=(const CLASSNAME&) { return *this; } \ -}; - -// grow/shrink predicates -inline bool never_grow( size_t, size_t ) { return false; } -inline bool never_shrink( size_t, size_t ) { return false; } -inline bool grow_lf70( size_t buckets, size_t items ) -{ - return float(items)/float(buckets) >= 0.85; -} - -#endif // various hash map implementations - -// ---------------------------------------------------------------------------- -// hashing and comparison functors -// ---------------------------------------------------------------------------- - -// NB: implementation detail: all of these classes must have dummy assignment -// operators to suppress warnings about "statement with no effect" from gcc -// in the hash table class assignment operator (where they're assigned) - -#ifndef wxNEEDS_WX_HASH_MAP - -// integer types -class WXDLLIMPEXP_BASE wxIntegerHash -{ - WX_HASH_MAP_NAMESPACE::hash longHash; - WX_HASH_MAP_NAMESPACE::hash ulongHash; - WX_HASH_MAP_NAMESPACE::hash intHash; - WX_HASH_MAP_NAMESPACE::hash uintHash; - WX_HASH_MAP_NAMESPACE::hash shortHash; - WX_HASH_MAP_NAMESPACE::hash ushortHash; - -#if defined wxLongLong_t && !defined wxLongLongIsLong - // hash ought to work but doesn't on some compilers - #if (!defined SIZEOF_LONG_LONG && SIZEOF_LONG == 4) \ - || (defined SIZEOF_LONG_LONG && SIZEOF_LONG_LONG == SIZEOF_LONG * 2) - size_t longlongHash( wxLongLong_t x ) const - { - return longHash( wx_truncate_cast(long, x) ) ^ - longHash( wx_truncate_cast(long, x >> (sizeof(long) * 8)) ); - } - #elif defined SIZEOF_LONG_LONG && SIZEOF_LONG_LONG == SIZEOF_LONG - WX_HASH_MAP_NAMESPACE::hash longlongHash; - #else - WX_HASH_MAP_NAMESPACE::hash longlongHash; - #endif -#endif - -public: - wxIntegerHash() { } - size_t operator()( long x ) const { return longHash( x ); } - size_t operator()( unsigned long x ) const { return ulongHash( x ); } - size_t operator()( int x ) const { return intHash( x ); } - size_t operator()( unsigned int x ) const { return uintHash( x ); } - size_t operator()( short x ) const { return shortHash( x ); } - size_t operator()( unsigned short x ) const { return ushortHash( x ); } -#if defined wxLongLong_t && !defined wxLongLongIsLong - size_t operator()( wxLongLong_t x ) const { return longlongHash(x); } - size_t operator()( wxULongLong_t x ) const { return longlongHash(x); } -#endif - - wxIntegerHash& operator=(const wxIntegerHash&) { return *this; } -}; - -#else // wxNEEDS_WX_HASH_MAP - -// integer types -class WXDLLIMPEXP_BASE wxIntegerHash -{ -public: - wxIntegerHash() { } - unsigned long operator()( long x ) const { return (unsigned long)x; } - unsigned long operator()( unsigned long x ) const { return x; } - unsigned long operator()( int x ) const { return (unsigned long)x; } - unsigned long operator()( unsigned int x ) const { return x; } - unsigned long operator()( short x ) const { return (unsigned long)x; } - unsigned long operator()( unsigned short x ) const { return x; } -#if defined wxLongLong_t && !defined wxLongLongIsLong - wxULongLong_t operator()( wxLongLong_t x ) const { return wx_static_cast(wxULongLong_t, x); } - wxULongLong_t operator()( wxULongLong_t x ) const { return x; } -#endif - - wxIntegerHash& operator=(const wxIntegerHash&) { return *this; } -}; - -#endif // !wxNEEDS_WX_HASH_MAP/wxNEEDS_WX_HASH_MAP - -class WXDLLIMPEXP_BASE wxIntegerEqual -{ -public: - wxIntegerEqual() { } - bool operator()( long a, long b ) const { return a == b; } - bool operator()( unsigned long a, unsigned long b ) const { return a == b; } - bool operator()( int a, int b ) const { return a == b; } - bool operator()( unsigned int a, unsigned int b ) const { return a == b; } - bool operator()( short a, short b ) const { return a == b; } - bool operator()( unsigned short a, unsigned short b ) const { return a == b; } -#if defined wxLongLong_t && !defined wxLongLongIsLong - bool operator()( wxLongLong_t a, wxLongLong_t b ) const { return a == b; } - bool operator()( wxULongLong_t a, wxULongLong_t b ) const { return a == b; } -#endif - - wxIntegerEqual& operator=(const wxIntegerEqual&) { return *this; } -}; - -// pointers -class WXDLLIMPEXP_BASE wxPointerHash -{ -public: - wxPointerHash() { } - -#ifdef wxNEEDS_WX_HASH_MAP - wxUIntPtr operator()( const void* k ) const { return wxPtrToUInt(k); } -#else - wxUIntPtr operator()( const void* k ) const { return wxPtrToUInt(k); } -#endif - - wxPointerHash& operator=(const wxPointerHash&) { return *this; } -}; - -class WXDLLIMPEXP_BASE wxPointerEqual -{ -public: - wxPointerEqual() { } - bool operator()( const void* a, const void* b ) const { return a == b; } - - wxPointerEqual& operator=(const wxPointerEqual&) { return *this; } -}; - -// wxString, char*, wxChar* -class WXDLLIMPEXP_BASE wxStringHash -{ -public: - wxStringHash() {} - unsigned long operator()( const wxString& x ) const - { return wxCharStringHash( x.c_str() ); } - unsigned long operator()( const wxChar* x ) const - { return wxCharStringHash( x ); } - static unsigned long wxCharStringHash( const wxChar* ); -#if wxUSE_UNICODE - unsigned long operator()( const char* x ) const - { return charStringHash( x ); } - static unsigned long charStringHash( const char* ); -#endif // wxUSE_UNICODE - - wxStringHash& operator=(const wxStringHash&) { return *this; } -}; - -class WXDLLIMPEXP_BASE wxStringEqual -{ -public: - wxStringEqual() {} - bool operator()( const wxString& a, const wxString& b ) const - { return a == b; } - bool operator()( const wxChar* a, const wxChar* b ) const - { return wxStrcmp( a, b ) == 0; } -#if wxUSE_UNICODE - bool operator()( const char* a, const char* b ) const - { return strcmp( a, b ) == 0; } -#endif // wxUSE_UNICODE - - wxStringEqual& operator=(const wxStringEqual&) { return *this; } -}; - -#ifdef wxNEEDS_WX_HASH_MAP - -#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 ) \ -CLASSEXP CLASSNAME:public CLASSNAME##_wxImplementation_HashTable \ -{ \ -public: \ - typedef VALUE_T mapped_type; \ - _WX_DECLARE_PAIR( iterator, bool, Insert_Result, CLASSEXP ) \ - \ - wxEXPLICIT CLASSNAME( size_type hint = 100, hasher hf = hasher(), \ - key_equal eq = key_equal() ) \ - : CLASSNAME##_wxImplementation_HashTable( hint, hf, eq, \ - CLASSNAME##_wxImplementation_KeyEx() ) {} \ - \ - mapped_type& operator[]( const const_key_type& key ) \ - { \ - bool created; \ - return GetOrCreateNode( \ - CLASSNAME##_wxImplementation_Pair( key, mapped_type() ), \ - created)->m_value.second; \ - } \ - \ - const_iterator find( const const_key_type& key ) const \ - { \ - return const_iterator( GetNode( key ), this ); \ - } \ - \ - iterator find( const const_key_type& key ) \ - { \ - return iterator( GetNode( key ), this ); \ - } \ - \ - Insert_Result insert( const value_type& v ) \ - { \ - bool created; \ - Node *node = GetOrCreateNode( \ - CLASSNAME##_wxImplementation_Pair( v.first, v.second ), \ - created); \ - return Insert_Result(iterator(node, this), created); \ - } \ - \ - size_type erase( const key_type& k ) \ - { return CLASSNAME##_wxImplementation_HashTable::erase( k ); } \ - void erase( const iterator& it ) { erase( it->first ); } \ - void erase( const const_iterator& it ) { erase( it->first ); } \ - \ - /* count() == 0 | 1 */ \ - size_type count( const const_key_type& key ) \ - { \ - /* explicit cast needed to suppress CodeWarrior warnings */ \ - return (size_type)(GetNode( key ) ? 1 : 0); \ - } \ -} - -#endif // wxNEEDS_WX_HASH_MAP - -// these macros are to be used in the user code -#define WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME) \ - _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, class ) - -#define WX_DECLARE_STRING_HASH_MAP( VALUE_T, CLASSNAME ) \ - _WX_DECLARE_HASH_MAP( wxString, VALUE_T, wxStringHash, wxStringEqual, \ - CLASSNAME, class ) - -#define WX_DECLARE_VOIDPTR_HASH_MAP( VALUE_T, CLASSNAME ) \ - _WX_DECLARE_HASH_MAP( void*, VALUE_T, wxPointerHash, wxPointerEqual, \ - CLASSNAME, class ) - -// and these do exactly the same thing but should be used inside the -// library -#define WX_DECLARE_HASH_MAP_WITH_DECL( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, DECL) \ - _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, DECL ) - -#define WX_DECLARE_EXPORTED_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME) \ - WX_DECLARE_HASH_MAP_WITH_DECL( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, \ - CLASSNAME, class WXDLLEXPORT ) - -#define WX_DECLARE_STRING_HASH_MAP_WITH_DECL( VALUE_T, CLASSNAME, DECL ) \ - _WX_DECLARE_HASH_MAP( wxString, VALUE_T, wxStringHash, wxStringEqual, \ - CLASSNAME, DECL ) - -#define WX_DECLARE_EXPORTED_STRING_HASH_MAP( VALUE_T, CLASSNAME ) \ - WX_DECLARE_STRING_HASH_MAP_WITH_DECL( VALUE_T, CLASSNAME, \ - class WXDLLEXPORT ) - -#define WX_DECLARE_VOIDPTR_HASH_MAP_WITH_DECL( VALUE_T, CLASSNAME, DECL ) \ - _WX_DECLARE_HASH_MAP( void*, VALUE_T, wxPointerHash, wxPointerEqual, \ - CLASSNAME, DECL ) - -#define WX_DECLARE_EXPORTED_VOIDPTR_HASH_MAP( VALUE_T, CLASSNAME ) \ - WX_DECLARE_VOIDPTR_HASH_MAP_WITH_DECL( VALUE_T, CLASSNAME, \ - class WXDLLEXPORT ) - -// delete all hash elements -// -// NB: the class declaration of the hash elements must be visible from the -// place where you use this macro, otherwise the proper destructor may not -// be called (a decent compiler should give a warning about it, but don't -// count on it)! -#define WX_CLEAR_HASH_MAP(type, hashmap) \ - { \ - type::iterator it, en; \ - for( it = (hashmap).begin(), en = (hashmap).end(); it != en; ++it ) \ - delete it->second; \ - (hashmap).clear(); \ - } - -//--------------------------------------------------------------------------- -// Declarations of common hashmap classes - -WX_DECLARE_HASH_MAP_WITH_DECL( long, long, wxIntegerHash, wxIntegerEqual, - wxLongToLongHashMap, class WXDLLIMPEXP_BASE ); - - -#endif // _WX_HASHMAP_H_ diff --git a/desmume/src/windows/wx/include/wx/hashset.h b/desmume/src/windows/wx/include/wx/hashset.h deleted file mode 100644 index ed161cbf2..000000000 --- a/desmume/src/windows/wx/include/wx/hashset.h +++ /dev/null @@ -1,135 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/hashset.h -// Purpose: wxHashSet class -// Author: Mattia Barbon -// Modified by: -// Created: 11/08/2003 -// RCS-ID: $Id: hashset.h 55215 2008-08-23 18:54:04Z VZ $ -// Copyright: (c) Mattia Barbon -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HASHSET_H_ -#define _WX_HASHSET_H_ - -#include "wx/hashmap.h" - -// see comment in wx/hashmap.h which also applies to different standard hash -// set classes - -#if wxUSE_STL && \ - (defined(HAVE_STD_UNORDERED_SET) || defined(HAVE_TR1_UNORDERED_SET)) - -#if defined(HAVE_STD_UNORDERED_SET) - #include - #define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\ - typedef std::unordered_set< KEY_T, HASH_T, KEY_EQ_T > CLASSNAME -#elif defined(HAVE_TR1_UNORDERED_SET) - #include - #define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\ - typedef std::tr1::unordered_set< KEY_T, HASH_T, KEY_EQ_T > CLASSNAME -#else -#error Update this code: unordered_set is available, but I do not know where. -#endif - -#elif wxUSE_STL && defined(HAVE_STL_HASH_MAP) - -#if defined(HAVE_EXT_HASH_MAP) - #include -#elif defined(HAVE_HASH_MAP) - #include -#endif - -#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\ - typedef WX_HASH_MAP_NAMESPACE::hash_set< KEY_T, HASH_T, KEY_EQ_T > CLASSNAME - -#else // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP) - -// this is a complex way of defining an easily inlineable identity function... -#define _WX_DECLARE_HASH_SET_KEY_EX( KEY_T, CLASSNAME, CLASSEXP ) \ -CLASSEXP CLASSNAME \ -{ \ - typedef KEY_T key_type; \ - typedef const key_type const_key_type; \ - typedef const_key_type& const_key_reference; \ -public: \ - CLASSNAME() { } \ - const_key_reference operator()( const_key_reference key ) const \ - { return key; } \ - \ - /* the dummy assignment operator is needed to suppress compiler */ \ - /* warnings from hash table class' operator=(): gcc complains about */ \ - /* "statement with no effect" without it */ \ - CLASSNAME& operator=(const CLASSNAME&) { return *this; } \ -}; - -#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, 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 ) \ -CLASSEXP CLASSNAME:public CLASSNAME##_wxImplementation_HashTable \ -{ \ -public: \ - _WX_DECLARE_PAIR( iterator, bool, Insert_Result, CLASSEXP ) \ - \ - wxEXPLICIT CLASSNAME( size_type hint = 100, hasher hf = hasher(), \ - key_equal eq = key_equal() ) \ - : CLASSNAME##_wxImplementation_HashTable( hint, hf, eq, \ - CLASSNAME##_wxImplementation_KeyEx() ) {} \ - \ - Insert_Result insert( const key_type& key ) \ - { \ - bool created; \ - Node *node = GetOrCreateNode( key, created ); \ - return Insert_Result( iterator( node, this ), created ); \ - } \ - \ - const_iterator find( const const_key_type& key ) const \ - { \ - return const_iterator( GetNode( key ), this ); \ - } \ - \ - iterator find( const const_key_type& key ) \ - { \ - return iterator( GetNode( key ), this ); \ - } \ - \ - size_type erase( const key_type& k ) \ - { return CLASSNAME##_wxImplementation_HashTable::erase( k ); } \ - void erase( const iterator& it ) { erase( *it ); } \ - void erase( const const_iterator& it ) { erase( *it ); } \ - \ - /* count() == 0 | 1 */ \ - size_type count( const const_key_type& key ) \ - { return GetNode( key ) ? 1 : 0; } \ -} - -#endif // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP) - -// 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 ) - -// 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 ) - -#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 WXDLLEXPORT ) - -// delete all hash elements -// -// NB: the class declaration of the hash elements must be visible from the -// place where you use this macro, otherwise the proper destructor may not -// be called (a decent compiler should give a warning about it, but don't -// count on it)! -#define WX_CLEAR_HASH_SET(type, hashset) \ - { \ - type::iterator it, en; \ - for( it = (hashset).begin(), en = (hashset).end(); it != en; ++it ) \ - delete *it; \ - (hashset).clear(); \ - } - -#endif // _WX_HASHSET_H_ diff --git a/desmume/src/windows/wx/include/wx/help.h b/desmume/src/windows/wx/include/wx/help.h deleted file mode 100644 index f23330798..000000000 --- a/desmume/src/windows/wx/include/wx/help.h +++ /dev/null @@ -1,48 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: help.h -// Purpose: wxHelpController base header -// Author: wxWidgets Team -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: help.h 33948 2005-05-04 18:57:50Z JS $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELP_H_BASE_ -#define _WX_HELP_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_HELP - -#include "wx/helpbase.h" - -#ifdef __WXWINCE__ - #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" - - #define wxHelpController wxCHMHelpController -#else // !MSW - -#if wxUSE_WXHTML_HELP - #include "wx/html/helpctrl.h" - #define wxHelpController wxHtmlHelpController -#else - #include "wx/generic/helpext.h" - #define wxHelpController wxExtHelpController -#endif - -#endif // MSW/!MSW - -#endif // wxUSE_HELP - -#endif - // _WX_HELP_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/helpbase.h b/desmume/src/windows/wx/include/wx/helpbase.h deleted file mode 100644 index cc77ef102..000000000 --- a/desmume/src/windows/wx/include/wx/helpbase.h +++ /dev/null @@ -1,106 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: helpbase.h -// Purpose: Help system base classes -// Author: Julian Smart -// Modified by: -// Created: 04/01/98 -// RCS-ID: $Id: helpbase.h 45498 2007-04-16 13:03:05Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELPBASEH__ -#define _WX_HELPBASEH__ - -#include "wx/defs.h" - -#if wxUSE_HELP - -#include "wx/object.h" -#include "wx/string.h" -#include "wx/gdicmn.h" -#include "wx/frame.h" - -// Flags for SetViewer -#define wxHELP_NETSCAPE 1 - -// Search modes: -enum wxHelpSearchMode -{ - wxHELP_SEARCH_INDEX, - wxHELP_SEARCH_ALL -}; - -// Defines the API for help controllers -class WXDLLEXPORT wxHelpControllerBase: public wxObject -{ -public: - inline wxHelpControllerBase(wxWindow* parentWindow = NULL) { m_parentWindow = parentWindow; } - inline ~wxHelpControllerBase() {} - - // Must call this to set the filename and server name. - // server is only required when implementing TCP/IP-based - // help controllers. - virtual bool Initialize(const wxString& WXUNUSED(file), int WXUNUSED(server) ) { return false; } - virtual bool Initialize(const wxString& WXUNUSED(file)) { return false; } - - // Set viewer: only relevant to some kinds of controller - virtual void SetViewer(const wxString& WXUNUSED(viewer), long WXUNUSED(flags) = 0) {} - - // If file is "", reloads file given in Initialize - virtual bool LoadFile(const wxString& file = wxEmptyString) = 0; - - // Displays the contents - virtual bool DisplayContents(void) = 0; - - // Display the given section - virtual bool DisplaySection(int sectionNo) = 0; - - // Display the section using a context id - virtual bool DisplayContextPopup(int WXUNUSED(contextId)) { return false; } - - // Display the text in a popup, if possible - virtual bool DisplayTextPopup(const wxString& WXUNUSED(text), const wxPoint& WXUNUSED(pos)) { return false; } - - // By default, uses KeywordSection to display a topic. Implementations - // may override this for more specific behaviour. - virtual bool DisplaySection(const wxString& section) { return KeywordSearch(section); } - virtual bool DisplayBlock(long blockNo) = 0; - virtual bool KeywordSearch(const wxString& k, - wxHelpSearchMode mode = wxHELP_SEARCH_ALL) = 0; - /// Allows one to override the default settings for the help frame. - virtual void SetFrameParameters(const wxString& WXUNUSED(title), - const wxSize& WXUNUSED(size), - const wxPoint& WXUNUSED(pos) = wxDefaultPosition, - bool WXUNUSED(newFrameEachTime) = false) - { - // does nothing by default - } - /// Obtains the latest settings used by the help frame and the help - /// frame. - virtual wxFrame *GetFrameParameters(wxSize *WXUNUSED(size) = NULL, - wxPoint *WXUNUSED(pos) = NULL, - bool *WXUNUSED(newFrameEachTime) = NULL) - { - return (wxFrame*) NULL; // does nothing by default - } - - virtual bool Quit() = 0; - virtual void OnQuit() {} - - /// Set the window that can optionally be used for the help window's parent. - virtual void SetParentWindow(wxWindow* win) { m_parentWindow = win; } - - /// Get the window that can optionally be used for the help window's parent. - virtual wxWindow* GetParentWindow() const { return m_parentWindow; } - -protected: - wxWindow* m_parentWindow; -private: - DECLARE_CLASS(wxHelpControllerBase) -}; - -#endif // wxUSE_HELP - -#endif -// _WX_HELPBASEH__ diff --git a/desmume/src/windows/wx/include/wx/helphtml.h b/desmume/src/windows/wx/include/wx/helphtml.h deleted file mode 100644 index 4ed3d9894..000000000 --- a/desmume/src/windows/wx/include/wx/helphtml.h +++ /dev/null @@ -1,20 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: helphtml.h -// Purpose: Includes wx/html/helpctrl.h, for wxHtmlHelpController. -// Author: Julian Smart -// Modified by: -// Created: 2003-05-24 -// RCS-ID: $Id: helphtml.h 27408 2004-05-23 20:53:33Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __WX_HELPHTML_H_ -#define __WX_HELPHTML_H_ - -#if wxUSE_WXHTML_HELP -#include "wx/html/helpctrl.h" -#endif - -#endif // __WX_HELPHTML_H_ - diff --git a/desmume/src/windows/wx/include/wx/helpwin.h b/desmume/src/windows/wx/include/wx/helpwin.h deleted file mode 100644 index b15b245ec..000000000 --- a/desmume/src/windows/wx/include/wx/helpwin.h +++ /dev/null @@ -1,22 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: helpwin.h -// Purpose: Includes Windows or OS/2 help -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: helpwin.h 33948 2005-05-04 18:57:50Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELPWIN_H_BASE_ -#define _WX_HELPWIN_H_BASE_ - -#if defined(__WXMSW__) -#include "wx/msw/helpwin.h" -#elif defined(__WXPM__) -#include "wx/os2/helpwin.h" -#endif - -#endif - // _WX_HELPWIN_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/html/forcelnk.h b/desmume/src/windows/wx/include/wx/html/forcelnk.h deleted file mode 100644 index f54ad839d..000000000 --- a/desmume/src/windows/wx/include/wx/html/forcelnk.h +++ /dev/null @@ -1,62 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: forcelnk.h -// Purpose: see bellow -// Author: Vaclav Slavik -// RCS-ID: $Id: forcelnk.h 35686 2005-09-25 18:46:14Z VZ $ -// Copyright: (c) Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -/* - -DESCRPITON: - -mod_*.cpp files contain handlers for tags. These files are modules - they contain -one wxTagModule class and it's OnInit() method is called from wxApp's init method. -The module is called even if you only link it into the executable, so everything -seems wonderful. - -The problem is that we have these modules in LIBRARY and mod_*.cpp files contain -no method nor class which is known out of the module. So the linker won't -link these .o/.obj files into executable because it detected that it is not used -by the program. - -To workaround this I introduced set of macros FORCE_LINK_ME and FORCE_LINK. These -macros are generic and are not limited to mod_*.cpp files. You may find them quite -useful somewhere else... - -How to use them: -let's suppose you want to always link file foo.cpp and that you have module -always.cpp that is certainly always linked (e.g. the one with main() function -or htmlwin.cpp in wxHtml library). - -Place FORCE_LINK_ME(foo) somewhere in foo.cpp and FORCE_LINK(foo) somewhere -in always.cpp -See mod_*.cpp and htmlwin.cpp for example :-) - -*/ - - -#ifndef _WX_FORCELNK_H_ -#define _WX_FORCELNK_H_ - -#include "wx/link.h" - -// compatibility defines -#define FORCE_LINK wxFORCE_LINK_MODULE -#define FORCE_LINK_ME wxFORCE_LINK_THIS_MODULE - -#define FORCE_WXHTML_MODULES() \ - FORCE_LINK(m_layout) \ - FORCE_LINK(m_fonts) \ - FORCE_LINK(m_image) \ - FORCE_LINK(m_list) \ - FORCE_LINK(m_dflist) \ - FORCE_LINK(m_pre) \ - FORCE_LINK(m_hline) \ - FORCE_LINK(m_links) \ - FORCE_LINK(m_tables) \ - FORCE_LINK(m_style) - - -#endif // _WX_FORCELNK_H_ diff --git a/desmume/src/windows/wx/include/wx/html/helpctrl.h b/desmume/src/windows/wx/include/wx/html/helpctrl.h deleted file mode 100644 index bf0bd0574..000000000 --- a/desmume/src/windows/wx/include/wx/html/helpctrl.h +++ /dev/null @@ -1,153 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: helpctrl.h -// Purpose: wxHtmlHelpController -// Notes: Based on htmlhelp.cpp, implementing a monolithic -// HTML Help controller class, by Vaclav Slavik -// Author: Harm van der Heijden and Vaclav Slavik -// RCS-ID: $Id: helpctrl.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Harm van der Heijden and Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELPCTRL_H_ -#define _WX_HELPCTRL_H_ - -#include "wx/defs.h" - -#if wxUSE_WXHTML_HELP - -#include "wx/helpbase.h" -#include "wx/html/helpfrm.h" - -#define wxID_HTML_HELPFRAME (wxID_HIGHEST + 1) - -// This style indicates that the window is -// embedded in the application and must not be -// destroyed by the help controller. -#define wxHF_EMBEDDED 0x00008000 - -// Create a dialog for the help window. -#define wxHF_DIALOG 0x00010000 - -// Create a frame for the help window. -#define wxHF_FRAME 0x00020000 - -// Make the dialog modal when displaying help. -#define wxHF_MODAL 0x00040000 - -class WXDLLIMPEXP_FWD_HTML wxHtmlHelpDialog; -class WXDLLIMPEXP_FWD_HTML wxHtmlHelpWindow; -class WXDLLIMPEXP_FWD_HTML wxHtmlHelpFrame; -class WXDLLIMPEXP_FWD_HTML wxHtmlHelpDialog; - -class WXDLLIMPEXP_HTML wxHtmlHelpController : public wxHelpControllerBase // wxEvtHandler -{ - DECLARE_DYNAMIC_CLASS(wxHtmlHelpController) - -public: - wxHtmlHelpController(int style = wxHF_DEFAULT_STYLE, wxWindow* parentWindow = NULL); - virtual ~wxHtmlHelpController(); - - void SetTitleFormat(const wxString& format); - void SetTempDir(const wxString& path) { m_helpData.SetTempDir(path); } - bool AddBook(const wxString& book_url, bool show_wait_msg = false); - bool AddBook(const wxFileName& book_file, bool show_wait_msg = false); - - bool Display(const wxString& x); - bool Display(int id); - bool DisplayContents(); - bool DisplayIndex(); - bool KeywordSearch(const wxString& keyword, - wxHelpSearchMode mode = wxHELP_SEARCH_ALL); - - wxHtmlHelpWindow* GetHelpWindow() { return m_helpWindow; } - void SetHelpWindow(wxHtmlHelpWindow* helpWindow); - - wxHtmlHelpFrame* GetFrame() { return m_helpFrame; } - wxHtmlHelpDialog* GetDialog() { return m_helpDialog; } - - void UseConfig(wxConfigBase *config, const wxString& rootpath = wxEmptyString); - - // Assigns config object to the Ctrl. This config is then - // used in subsequent calls to Read/WriteCustomization of both help - // Ctrl and it's wxHtmlWindow - virtual void ReadCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); - virtual void WriteCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); - - //// Backward compatibility with wxHelpController API - - virtual bool Initialize(const wxString& file, int WXUNUSED(server) ) { return Initialize(file); } - virtual bool Initialize(const wxString& file); - virtual void SetViewer(const wxString& WXUNUSED(viewer), long WXUNUSED(flags) = 0) {} - virtual bool LoadFile(const wxString& file = wxT("")); - virtual bool DisplaySection(int sectionNo); - virtual bool DisplaySection(const wxString& section) { return Display(section); } - virtual bool DisplayBlock(long blockNo) { return DisplaySection(blockNo); } - virtual bool DisplayTextPopup(const wxString& text, const wxPoint& pos); - - virtual void SetFrameParameters(const wxString& title, - const wxSize& size, - const wxPoint& pos = wxDefaultPosition, - bool newFrameEachTime = false); - /// Obtains the latest settings used by the help frame and the help - /// frame. - virtual wxFrame *GetFrameParameters(wxSize *size = NULL, - wxPoint *pos = NULL, - bool *newFrameEachTime = NULL); - - // Get direct access to help data: - wxHtmlHelpData *GetHelpData() { return &m_helpData; } - - virtual bool Quit() ; - virtual void OnQuit() {} - - void OnCloseFrame(wxCloseEvent& evt); - - // Make the help controller's frame 'modal' if - // needed - void MakeModalIfNeeded(); - - // Find the top-most parent window - wxWindow* FindTopLevelWindow(); - -protected: - virtual wxWindow* CreateHelpWindow(); - virtual wxHtmlHelpFrame* CreateHelpFrame(wxHtmlHelpData *data); - virtual wxHtmlHelpDialog* CreateHelpDialog(wxHtmlHelpData *data); - virtual void DestroyHelpWindow(); - - wxHtmlHelpData m_helpData; - wxHtmlHelpWindow* m_helpWindow; - wxConfigBase * m_Config; - wxString m_ConfigRoot; - wxString m_titleFormat; - int m_FrameStyle; - wxHtmlHelpFrame* m_helpFrame; - wxHtmlHelpDialog* m_helpDialog; - - DECLARE_NO_COPY_CLASS(wxHtmlHelpController) -}; - -/* - * wxHtmlModalHelp - * A convenience class particularly for use on wxMac, - * where you can only show modal dialogs from a modal - * dialog. - * - * Use like this: - * - * wxHtmlModalHelp help(parent, filename, topic); - * - * If topic is empty, the help contents is displayed. - */ - -class WXDLLIMPEXP_HTML wxHtmlModalHelp -{ -public: - wxHtmlModalHelp(wxWindow* parent, const wxString& helpFile, const wxString& topic = wxEmptyString, - int style = wxHF_DEFAULT_STYLE | wxHF_DIALOG | wxHF_MODAL); -}; - -#endif // wxUSE_WXHTML_HELP - -#endif // _WX_HELPCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/html/helpdata.h b/desmume/src/windows/wx/include/wx/html/helpdata.h deleted file mode 100644 index fcd54d780..000000000 --- a/desmume/src/windows/wx/include/wx/html/helpdata.h +++ /dev/null @@ -1,266 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: helpdata.h -// Purpose: wxHtmlHelpData -// Notes: Based on htmlhelp.cpp, implementing a monolithic -// HTML Help controller class, by Vaclav Slavik -// Author: Harm van der Heijden and Vaclav Slavik -// RCS-ID: $Id: helpdata.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Harm van der Heijden and Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELPDATA_H_ -#define _WX_HELPDATA_H_ - -#include "wx/defs.h" - -#if wxUSE_HTML - -#include "wx/object.h" -#include "wx/string.h" -#include "wx/filesys.h" -#include "wx/dynarray.h" -#include "wx/font.h" - -class WXDLLIMPEXP_FWD_HTML wxHtmlHelpData; - -//-------------------------------------------------------------------------------- -// helper classes & structs -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlBookRecord -{ -public: - wxHtmlBookRecord(const wxString& bookfile, const wxString& basepath, - const wxString& title, const wxString& start) - { - m_BookFile = bookfile; - m_BasePath = basepath; - m_Title = title; - m_Start = start; - // for debugging, give the contents index obvious default values - m_ContentsStart = m_ContentsEnd = -1; - } - wxString GetBookFile() const { return m_BookFile; } - wxString GetTitle() const { return m_Title; } - wxString GetStart() const { return m_Start; } - wxString GetBasePath() const { return m_BasePath; } - /* SetContentsRange: store in the bookrecord where in the index/contents lists the - * book's records are stored. This to facilitate searching in a specific book. - * This code will have to be revised when loading/removing books becomes dynamic. - * (as opposed to appending only) - * Note that storing index range is pointless, because the index is alphab. sorted. */ - void SetContentsRange(int start, int end) { m_ContentsStart = start; m_ContentsEnd = end; } - int GetContentsStart() const { return m_ContentsStart; } - int GetContentsEnd() const { return m_ContentsEnd; } - - void SetTitle(const wxString& title) { m_Title = title; } - void SetBasePath(const wxString& path) { m_BasePath = path; } - void SetStart(const wxString& start) { m_Start = start; } - - // returns full filename of page (which is part of the book), - // i.e. with book's basePath prepended. If page is already absolute - // path, basePath is _not_ prepended. - wxString GetFullPath(const wxString &page) const; - -protected: - wxString m_BookFile; - wxString m_BasePath; - wxString m_Title; - wxString m_Start; - int m_ContentsStart; - int m_ContentsEnd; -}; - - -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxHtmlBookRecord, wxHtmlBookRecArray, - WXDLLIMPEXP_HTML); - -struct WXDLLIMPEXP_HTML wxHtmlHelpDataItem -{ - wxHtmlHelpDataItem() : level(0), parent(NULL), id(wxID_ANY), book(NULL) {} - - int level; - wxHtmlHelpDataItem *parent; - int id; - wxString name; - wxString page; - wxHtmlBookRecord *book; - - // returns full filename of m_Page, i.e. with book's basePath prepended - wxString GetFullPath() const { return book->GetFullPath(page); } - - // returns item indented with spaces if it has level>1: - wxString GetIndentedName() const; -}; - -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxHtmlHelpDataItem, wxHtmlHelpDataItems, - WXDLLIMPEXP_HTML); - -#if WXWIN_COMPATIBILITY_2_4 -// old interface to contents and index: -struct wxHtmlContentsItem -{ - wxHtmlContentsItem(); - wxHtmlContentsItem(const wxHtmlHelpDataItem& d); - wxHtmlContentsItem& operator=(const wxHtmlContentsItem& d); - ~wxHtmlContentsItem(); - - int m_Level; - int m_ID; - wxChar *m_Name; - wxChar *m_Page; - wxHtmlBookRecord *m_Book; - - // returns full filename of m_Page, i.e. with book's basePath prepended - wxString GetFullPath() const { return m_Book->GetFullPath(m_Page); } - -private: - bool m_autofree; -}; -#endif - - -//------------------------------------------------------------------------------ -// wxHtmlSearchEngine -// This class takes input streams and scans them for occurence -// of keyword(s) -//------------------------------------------------------------------------------ - -class WXDLLIMPEXP_HTML wxHtmlSearchEngine : public wxObject -{ -public: - wxHtmlSearchEngine() : wxObject() {} - virtual ~wxHtmlSearchEngine() {} - - // Sets the keyword we will be searching for - virtual void LookFor(const wxString& keyword, bool case_sensitive, bool whole_words_only); - - // Scans the stream for the keyword. - // Returns true if the stream contains keyword, fALSE otherwise - virtual bool Scan(const wxFSFile& file); - -private: - wxString m_Keyword; - bool m_CaseSensitive; - bool m_WholeWords; - - DECLARE_NO_COPY_CLASS(wxHtmlSearchEngine) -}; - - -// State information of a search action. I'd have preferred to make this a -// nested class inside wxHtmlHelpData, but that's against coding standards :-( -// Never construct this class yourself, obtain a copy from -// wxHtmlHelpData::PrepareKeywordSearch(const wxString& key) -class WXDLLIMPEXP_HTML wxHtmlSearchStatus -{ -public: - // constructor; supply wxHtmlHelpData ptr, the keyword and (optionally) the - // title of the book to search. By default, all books are searched. - wxHtmlSearchStatus(wxHtmlHelpData* base, const wxString& keyword, - bool case_sensitive, bool whole_words_only, - const wxString& book = wxEmptyString); - bool Search(); // do the next iteration - bool IsActive() { return m_Active; } - int GetCurIndex() { return m_CurIndex; } - int GetMaxIndex() { return m_MaxIndex; } - const wxString& GetName() { return m_Name; } - - const wxHtmlHelpDataItem *GetCurItem() const { return m_CurItem; } -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( wxHtmlContentsItem* GetContentsItem() ); -#endif - -private: - wxHtmlHelpData* m_Data; - wxHtmlSearchEngine m_Engine; - wxString m_Keyword, m_Name; - wxString m_LastPage; - wxHtmlHelpDataItem* m_CurItem; - bool m_Active; // search is not finished - int m_CurIndex; // where we are now - int m_MaxIndex; // number of files we search - // For progress bar: 100*curindex/maxindex = % complete - - DECLARE_NO_COPY_CLASS(wxHtmlSearchStatus) -}; - -class WXDLLIMPEXP_HTML wxHtmlHelpData : public wxObject -{ - DECLARE_DYNAMIC_CLASS(wxHtmlHelpData) - friend class wxHtmlSearchStatus; - -public: - wxHtmlHelpData(); - virtual ~wxHtmlHelpData(); - - // Sets directory where temporary files are stored. - // These temp files are index & contents file in binary (much faster to read) - // form. These files are NOT deleted on program's exit. - void SetTempDir(const wxString& path); - - // Adds new book. 'book' is location of .htb file (stands for "html book"). - // See documentation for details on its format. - // Returns success. - bool AddBook(const wxString& book); - bool AddBookParam(const wxFSFile& bookfile, - wxFontEncoding encoding, - const wxString& title, const wxString& contfile, - const wxString& indexfile = wxEmptyString, - const wxString& deftopic = wxEmptyString, - const wxString& path = wxEmptyString); - - // Some accessing stuff: - - // returns URL of page on basis of (file)name - wxString FindPageByName(const wxString& page); - // returns URL of page on basis of MS id - wxString FindPageById(int id); - - const wxHtmlBookRecArray& GetBookRecArray() const { return m_bookRecords; } - - const wxHtmlHelpDataItems& GetContentsArray() const { return m_contents; } - const wxHtmlHelpDataItems& GetIndexArray() const { return m_index; } - -#if WXWIN_COMPATIBILITY_2_4 - // deprecated interface, new interface is arrays-based (see above) - wxDEPRECATED( wxHtmlContentsItem* GetContents() ); - wxDEPRECATED( int GetContentsCnt() ); - wxDEPRECATED( wxHtmlContentsItem* GetIndex() ); - wxDEPRECATED( int GetIndexCnt() ); -#endif - -protected: - wxString m_tempPath; - - // each book has one record in this array: - wxHtmlBookRecArray m_bookRecords; - - wxHtmlHelpDataItems m_contents; // list of all available books and pages - wxHtmlHelpDataItems m_index; // list of index itesm - -#if WXWIN_COMPATIBILITY_2_4 - // deprecated data structures, set only if GetContents(), GetIndex() - // called - wxHtmlContentsItem* m_cacheContents; - wxHtmlContentsItem* m_cacheIndex; -private: - void CleanCompatibilityData(); -#endif - -protected: - // Imports .hhp files (MS HTML Help Workshop) - bool LoadMSProject(wxHtmlBookRecord *book, wxFileSystem& fsys, - const wxString& indexfile, const wxString& contentsfile); - // Reads binary book - bool LoadCachedBook(wxHtmlBookRecord *book, wxInputStream *f); - // Writes binary book - bool SaveCachedBook(wxHtmlBookRecord *book, wxOutputStream *f); - - DECLARE_NO_COPY_CLASS(wxHtmlHelpData) -}; - -#endif - -#endif diff --git a/desmume/src/windows/wx/include/wx/html/helpdlg.h b/desmume/src/windows/wx/include/wx/html/helpdlg.h deleted file mode 100644 index 9f10c6a4d..000000000 --- a/desmume/src/windows/wx/include/wx/html/helpdlg.h +++ /dev/null @@ -1,90 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/html/helpdlg.h -// Purpose: wxHtmlHelpDialog -// Notes: Based on htmlhelp.cpp, implementing a monolithic -// HTML Help controller class, by Vaclav Slavik -// Author: Harm van der Heijden, Vaclav Slavik, Julian Smart -// RCS-ID: $Id: helpdlg.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) Harm van der Heijden, Vaclav Slavik, Julian Smart -// Licence: wxWidgets licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELPDLG_H_ -#define _WX_HELPDLG_H_ - -#include "wx/defs.h" - -#if wxUSE_WXHTML_HELP - -#include "wx/html/helpdata.h" -#include "wx/window.h" -#include "wx/dialog.h" -#include "wx/frame.h" -#include "wx/config.h" -#include "wx/splitter.h" -#include "wx/notebook.h" -#include "wx/listbox.h" -#include "wx/choice.h" -#include "wx/combobox.h" -#include "wx/checkbox.h" -#include "wx/stattext.h" -#include "wx/html/htmlwin.h" -#include "wx/html/helpwnd.h" -#include "wx/html/htmprint.h" - -class WXDLLIMPEXP_FWD_HTML wxHtmlHelpController; -class WXDLLIMPEXP_FWD_HTML wxHtmlHelpWindow; - -class WXDLLIMPEXP_HTML wxHtmlHelpDialog : public wxDialog -{ - DECLARE_DYNAMIC_CLASS(wxHtmlHelpDialog) - -public: - wxHtmlHelpDialog(wxHtmlHelpData* data = NULL) { Init(data); } - wxHtmlHelpDialog(wxWindow* parent, wxWindowID wxWindowID, - const wxString& title = wxEmptyString, - int style = wxHF_DEFAULT_STYLE, wxHtmlHelpData* data = NULL); - virtual ~wxHtmlHelpDialog(); - - bool Create(wxWindow* parent, wxWindowID id, const wxString& title = wxEmptyString, - int style = wxHF_DEFAULT_STYLE); - - /// Returns the data associated with this dialog. - wxHtmlHelpData* GetData() { return m_Data; } - - /// Returns the controller that created this dialog. - wxHtmlHelpController* GetController() const { return m_helpController; } - - /// Sets the controller associated with this dialog. - void SetController(wxHtmlHelpController* controller) { m_helpController = controller; } - - /// Returns the help window. - wxHtmlHelpWindow* GetHelpWindow() const { return m_HtmlHelpWin; } - - // Sets format of title of the frame. Must contain exactly one "%s" - // (for title of displayed HTML page) - void SetTitleFormat(const wxString& format); - - // Override to add custom buttons to the toolbar - virtual void AddToolbarButtons(wxToolBar* WXUNUSED(toolBar), int WXUNUSED(style)) {} - -protected: - void Init(wxHtmlHelpData* data = NULL); - - void OnCloseWindow(wxCloseEvent& event); - -protected: - // Temporary pointer to pass to window - wxHtmlHelpData* m_Data; - wxString m_TitleFormat; // title of the help frame - wxHtmlHelpWindow *m_HtmlHelpWin; - wxHtmlHelpController* m_helpController; - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxHtmlHelpDialog) -}; - -#endif - // wxUSE_WXHTML_HELP - -#endif diff --git a/desmume/src/windows/wx/include/wx/html/helpfrm.h b/desmume/src/windows/wx/include/wx/html/helpfrm.h deleted file mode 100644 index 3a9b3e12b..000000000 --- a/desmume/src/windows/wx/include/wx/html/helpfrm.h +++ /dev/null @@ -1,147 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: helpfrm.h -// Purpose: wxHtmlHelpFrame -// Notes: Based on htmlhelp.cpp, implementing a monolithic -// HTML Help controller class, by Vaclav Slavik -// Author: Harm van der Heijden and Vaclav Slavik -// RCS-ID: $Id: helpfrm.h 50202 2007-11-23 21:29:29Z VZ $ -// Copyright: (c) Harm van der Heijden and Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELPFRM_H_ -#define _WX_HELPFRM_H_ - -#include "wx/defs.h" - -#if wxUSE_WXHTML_HELP - -#include "wx/helpbase.h" -#include "wx/html/helpdata.h" -#include "wx/window.h" -#include "wx/frame.h" -#include "wx/config.h" -#include "wx/splitter.h" -#include "wx/notebook.h" -#include "wx/listbox.h" -#include "wx/choice.h" -#include "wx/combobox.h" -#include "wx/checkbox.h" -#include "wx/stattext.h" -#include "wx/html/htmlwin.h" -#include "wx/html/helpwnd.h" -#include "wx/html/htmprint.h" - -class WXDLLIMPEXP_FWD_CORE wxButton; -class WXDLLIMPEXP_FWD_CORE wxTextCtrl; -class WXDLLIMPEXP_FWD_CORE wxTreeEvent; -class WXDLLIMPEXP_FWD_CORE wxTreeCtrl; - - -// style flags for the Help Frame -#define wxHF_TOOLBAR 0x0001 -#define wxHF_CONTENTS 0x0002 -#define wxHF_INDEX 0x0004 -#define wxHF_SEARCH 0x0008 -#define wxHF_BOOKMARKS 0x0010 -#define wxHF_OPEN_FILES 0x0020 -#define wxHF_PRINT 0x0040 -#define wxHF_FLAT_TOOLBAR 0x0080 -#define wxHF_MERGE_BOOKS 0x0100 -#define wxHF_ICONS_BOOK 0x0200 -#define wxHF_ICONS_BOOK_CHAPTER 0x0400 -#define wxHF_ICONS_FOLDER 0x0000 // this is 0 since it is default -#define wxHF_DEFAULT_STYLE (wxHF_TOOLBAR | wxHF_CONTENTS | \ - wxHF_INDEX | wxHF_SEARCH | \ - wxHF_BOOKMARKS | wxHF_PRINT) -//compatibility: -#define wxHF_OPENFILES wxHF_OPEN_FILES -#define wxHF_FLATTOOLBAR wxHF_FLAT_TOOLBAR -#define wxHF_DEFAULTSTYLE wxHF_DEFAULT_STYLE - -struct wxHtmlHelpMergedIndexItem; -class wxHtmlHelpMergedIndex; - -class WXDLLIMPEXP_FWD_CORE wxHelpControllerBase; -class WXDLLIMPEXP_FWD_HTML wxHtmlHelpController; -class WXDLLIMPEXP_FWD_HTML wxHtmlHelpWindow; - -class WXDLLIMPEXP_HTML wxHtmlHelpFrame : public wxFrame -{ - DECLARE_DYNAMIC_CLASS(wxHtmlHelpFrame) - -public: - wxHtmlHelpFrame(wxHtmlHelpData* data = NULL) { Init(data); } - wxHtmlHelpFrame(wxWindow* parent, wxWindowID wxWindowID, - const wxString& title = wxEmptyString, - int style = wxHF_DEFAULT_STYLE, wxHtmlHelpData* data = NULL, - wxConfigBase *config=NULL, const wxString& rootpath = wxEmptyString); - bool Create(wxWindow* parent, wxWindowID id, const wxString& title = wxEmptyString, - int style = wxHF_DEFAULT_STYLE, - wxConfigBase *config=NULL, const wxString& rootpath = wxEmptyString); - virtual ~wxHtmlHelpFrame(); - - /// Returns the data associated with the window. - wxHtmlHelpData* GetData() { return m_Data; } - - /// Returns the help controller associated with the window. - wxHtmlHelpController* GetController() const { return m_helpController; } - - /// Sets the help controller associated with the window. - void SetController(wxHtmlHelpController* controller) { m_helpController = controller; } - - /// Returns the help window. - wxHtmlHelpWindow* GetHelpWindow() const { return m_HtmlHelpWin; } - - // Sets format of title of the frame. Must contain exactly one "%s" - // (for title of displayed HTML page) - void SetTitleFormat(const wxString& format); - - // For compatibility - void UseConfig(wxConfigBase *config, const wxString& rootpath = wxEmptyString); - - // Make the help controller's frame 'modal' if - // needed - void AddGrabIfNeeded(); - - // Override to add custom buttons to the toolbar - virtual void AddToolbarButtons(wxToolBar* WXUNUSED(toolBar), int WXUNUSED(style)) {} - - // we don't want to prevent the app from closing just because a help window - // remains opened - virtual bool ShouldPreventAppExit() const { return false; } - -protected: - void Init(wxHtmlHelpData* data = NULL); - - void OnCloseWindow(wxCloseEvent& event); - void OnActivate(wxActivateEvent& event); - -#ifdef __WXMAC__ - void OnClose(wxCommandEvent& event); - void OnAbout(wxCommandEvent& event); -#endif - - // Images: - enum { - IMG_Book = 0, - IMG_Folder, - IMG_Page - }; - -protected: - wxHtmlHelpData* m_Data; - bool m_DataCreated; // m_Data created by frame, or supplied? - wxString m_TitleFormat; // title of the help frame - wxHtmlHelpWindow *m_HtmlHelpWin; - wxHtmlHelpController* m_helpController; - -private: - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxHtmlHelpFrame) -}; - -#endif // wxUSE_WXHTML_HELP - -#endif diff --git a/desmume/src/windows/wx/include/wx/html/helpwnd.h b/desmume/src/windows/wx/include/wx/html/helpwnd.h deleted file mode 100644 index e0541092c..000000000 --- a/desmume/src/windows/wx/include/wx/html/helpwnd.h +++ /dev/null @@ -1,300 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/html/helpwnd.h -// Purpose: wxHtmlHelpWindow -// Notes: Based on htmlhelp.cpp, implementing a monolithic -// HTML Help controller class, by Vaclav Slavik -// Author: Harm van der Heijden and Vaclav Slavik -// RCS-ID: $Id: helpwnd.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Harm van der Heijden and Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELPWND_H_ -#define _WX_HELPWND_H_ - -#include "wx/defs.h" - -#if wxUSE_WXHTML_HELP - -#include "wx/helpbase.h" -#include "wx/html/helpdata.h" -#include "wx/window.h" -#include "wx/frame.h" -#include "wx/config.h" -#include "wx/splitter.h" -#include "wx/notebook.h" -#include "wx/listbox.h" -#include "wx/choice.h" -#include "wx/combobox.h" -#include "wx/checkbox.h" -#include "wx/stattext.h" -#include "wx/html/htmlwin.h" -#include "wx/html/htmprint.h" - -class WXDLLIMPEXP_FWD_CORE wxButton; -class WXDLLIMPEXP_FWD_CORE wxTextCtrl; -class WXDLLIMPEXP_FWD_CORE wxTreeEvent; -class WXDLLIMPEXP_FWD_CORE wxTreeCtrl; - -// style flags for the Help Frame -#define wxHF_TOOLBAR 0x0001 -#define wxHF_CONTENTS 0x0002 -#define wxHF_INDEX 0x0004 -#define wxHF_SEARCH 0x0008 -#define wxHF_BOOKMARKS 0x0010 -#define wxHF_OPEN_FILES 0x0020 -#define wxHF_PRINT 0x0040 -#define wxHF_FLAT_TOOLBAR 0x0080 -#define wxHF_MERGE_BOOKS 0x0100 -#define wxHF_ICONS_BOOK 0x0200 -#define wxHF_ICONS_BOOK_CHAPTER 0x0400 -#define wxHF_ICONS_FOLDER 0x0000 // this is 0 since it is default -#define wxHF_DEFAULT_STYLE (wxHF_TOOLBAR | wxHF_CONTENTS | \ - wxHF_INDEX | wxHF_SEARCH | \ - wxHF_BOOKMARKS | wxHF_PRINT) -//compatibility: -#define wxHF_OPENFILES wxHF_OPEN_FILES -#define wxHF_FLATTOOLBAR wxHF_FLAT_TOOLBAR -#define wxHF_DEFAULTSTYLE wxHF_DEFAULT_STYLE - -struct wxHtmlHelpFrameCfg -{ - int x, y, w, h; - long sashpos; - bool navig_on; -}; - -struct wxHtmlHelpMergedIndexItem; -class wxHtmlHelpMergedIndex; - -class WXDLLIMPEXP_FWD_CORE wxHelpControllerBase; -class WXDLLIMPEXP_FWD_HTML wxHtmlHelpController; - -/*! - * Help window - */ - -class WXDLLIMPEXP_HTML wxHtmlHelpWindow : public wxWindow -{ - DECLARE_DYNAMIC_CLASS(wxHtmlHelpWindow) - -public: - wxHtmlHelpWindow(wxHtmlHelpData* data = NULL) { Init(data); } - wxHtmlHelpWindow(wxWindow* parent, wxWindowID wxWindowID, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int style = wxTAB_TRAVERSAL|wxNO_BORDER, - int helpStyle = wxHF_DEFAULT_STYLE, - wxHtmlHelpData* data = NULL); - bool Create(wxWindow* parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int style = wxTAB_TRAVERSAL|wxNO_BORDER, - int helpStyle = wxHF_DEFAULT_STYLE); - virtual ~wxHtmlHelpWindow(); - - wxHtmlHelpData* GetData() { return m_Data; } - wxHtmlHelpController* GetController() const { return m_helpController; } - void SetController(wxHtmlHelpController* controller); - - // Displays page x. If not found it will offect the user a choice of - // searching books. - // Looking for the page runs in these steps: - // 1. try to locate file named x (if x is for example "doc/howto.htm") - // 2. try to open starting page of book x - // 3. try to find x in contents (if x is for example "How To ...") - // 4. try to find x in index (if x is for example "How To ...") - bool Display(const wxString& x); - - // Alternative version that works with numeric ID. - // (uses extension to MS format, , see docs) - bool Display(const int id); - - // Displays help window and focuses contents. - bool DisplayContents(); - - // Displays help window and focuses index. - bool DisplayIndex(); - - // Searches for keyword. Returns true and display page if found, return - // false otherwise - // Syntax of keyword is Altavista-like: - // * words are separated by spaces - // (but "\"hello world\"" is only one world "hello world") - // * word may be pretended by + or - - // (+ : page must contain the word ; - : page can't contain the word) - // * if there is no + or - before the word, + is default - bool KeywordSearch(const wxString& keyword, - wxHelpSearchMode mode = wxHELP_SEARCH_ALL); - - void UseConfig(wxConfigBase *config, const wxString& rootpath = wxEmptyString) - { - m_Config = config; - m_ConfigRoot = rootpath; - ReadCustomization(config, rootpath); - } - - // Saves custom settings into cfg config. it will use the path 'path' - // if given, otherwise it will save info into currently selected path. - // saved values : things set by SetFonts, SetBorders. - void ReadCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); - void WriteCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); - - // call this to let wxHtmlHelpWindow know page changed - void NotifyPageChanged(); - - // Refreshes Contents and Index tabs - void RefreshLists(); - - // Gets the HTML window - wxHtmlWindow* GetHtmlWindow() const { return m_HtmlWin; } - - // Gets the splitter window - wxSplitterWindow* GetSplitterWindow() const { return m_Splitter; } - - // Gets the toolbar - wxToolBar* GetToolBar() const { return m_toolBar; } - - // Gets the configuration data - wxHtmlHelpFrameCfg& GetCfgData() { return m_Cfg; } - - // Gets the tree control - wxTreeCtrl *GetTreeCtrl() const { return m_ContentsBox; } - -protected: - void Init(wxHtmlHelpData* data = NULL); - - // Adds items to m_Contents tree control - void CreateContents(); - - // Adds items to m_IndexList - void CreateIndex(); - - // Add books to search choice panel - void CreateSearch(); - - // Updates "merged index" structure that combines indexes of all books - // into better searchable structure - void UpdateMergedIndex(); - - // Add custom buttons to toolbar - virtual void AddToolbarButtons(wxToolBar *toolBar, int style); - - // Displays options dialog (fonts etc.) - virtual void OptionsDialog(); - - void OnToolbar(wxCommandEvent& event); - void OnContentsSel(wxTreeEvent& event); - void OnIndexSel(wxCommandEvent& event); - void OnIndexFind(wxCommandEvent& event); - void OnIndexAll(wxCommandEvent& event); - void OnSearchSel(wxCommandEvent& event); - void OnSearch(wxCommandEvent& event); - void OnBookmarksSel(wxCommandEvent& event); - void OnSize(wxSizeEvent& event); - - // Images: - enum { - IMG_Book = 0, - IMG_Folder, - IMG_Page - }; - -protected: - wxHtmlHelpData* m_Data; - bool m_DataCreated; // m_Data created by frame, or supplied? - wxString m_TitleFormat; // title of the help frame - // below are various pointers to GUI components - wxHtmlWindow *m_HtmlWin; - wxSplitterWindow *m_Splitter; - wxPanel *m_NavigPan; - wxNotebook *m_NavigNotebook; - wxTreeCtrl *m_ContentsBox; - wxTextCtrl *m_IndexText; - wxButton *m_IndexButton; - wxButton *m_IndexButtonAll; - wxListBox *m_IndexList; - wxTextCtrl *m_SearchText; - wxButton *m_SearchButton; - wxListBox *m_SearchList; - wxChoice *m_SearchChoice; - wxStaticText *m_IndexCountInfo; - wxCheckBox *m_SearchCaseSensitive; - wxCheckBox *m_SearchWholeWords; - wxToolBar* m_toolBar; - - wxComboBox *m_Bookmarks; - wxArrayString m_BookmarksNames, m_BookmarksPages; - - wxHtmlHelpFrameCfg m_Cfg; - - wxConfigBase *m_Config; - wxString m_ConfigRoot; - - // pagenumbers of controls in notebook (usually 0,1,2) - int m_ContentsPage; - int m_IndexPage; - int m_SearchPage; - - // lists of available fonts (used in options dialog) - wxArrayString *m_NormalFonts, *m_FixedFonts; - int m_FontSize; // 0,1,2 = small,medium,big - wxString m_NormalFace, m_FixedFace; - - bool m_UpdateContents; - -#if wxUSE_PRINTING_ARCHITECTURE - wxHtmlEasyPrinting *m_Printer; -#endif - wxHashTable *m_PagesHash; - wxHtmlHelpController* m_helpController; - - int m_hfStyle; - -private: - void DoIndexFind(); - void DoIndexAll(); - void DisplayIndexItem(const wxHtmlHelpMergedIndexItem *it); - wxHtmlHelpMergedIndex *m_mergedIndex; - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxHtmlHelpWindow) -}; - -/*! - * Command IDs - */ - -enum -{ - //wxID_HTML_HELPFRAME = wxID_HIGHEST + 1, - wxID_HTML_PANEL = wxID_HIGHEST + 2, - wxID_HTML_BACK, - wxID_HTML_FORWARD, - wxID_HTML_UPNODE, - wxID_HTML_UP, - wxID_HTML_DOWN, - wxID_HTML_PRINT, - wxID_HTML_OPENFILE, - wxID_HTML_OPTIONS, - wxID_HTML_BOOKMARKSLIST, - wxID_HTML_BOOKMARKSADD, - wxID_HTML_BOOKMARKSREMOVE, - wxID_HTML_TREECTRL, - wxID_HTML_INDEXPAGE, - wxID_HTML_INDEXLIST, - wxID_HTML_INDEXTEXT, - wxID_HTML_INDEXBUTTON, - wxID_HTML_INDEXBUTTONALL, - wxID_HTML_NOTEBOOK, - wxID_HTML_SEARCHPAGE, - wxID_HTML_SEARCHTEXT, - wxID_HTML_SEARCHLIST, - wxID_HTML_SEARCHBUTTON, - wxID_HTML_SEARCHCHOICE, - wxID_HTML_COUNTINFO -}; - -#endif // wxUSE_WXHTML_HELP - -#endif diff --git a/desmume/src/windows/wx/include/wx/html/htmlcell.h b/desmume/src/windows/wx/include/wx/html/htmlcell.h deleted file mode 100644 index adb194dcc..000000000 --- a/desmume/src/windows/wx/include/wx/html/htmlcell.h +++ /dev/null @@ -1,673 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: htmlcell.h -// Purpose: wxHtmlCell class is used by wxHtmlWindow/wxHtmlWinParser -// as a basic visual element of HTML page -// Author: Vaclav Slavik -// RCS-ID: $Id: htmlcell.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1999-2003 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HTMLCELL_H_ -#define _WX_HTMLCELL_H_ - -#include "wx/defs.h" - -#if wxUSE_HTML - -#include "wx/html/htmltag.h" -#include "wx/html/htmldefs.h" -#include "wx/window.h" - - -class WXDLLIMPEXP_FWD_HTML wxHtmlWindowInterface; -class WXDLLIMPEXP_FWD_HTML wxHtmlLinkInfo; -class WXDLLIMPEXP_FWD_HTML wxHtmlCell; -class WXDLLIMPEXP_FWD_HTML wxHtmlContainerCell; - - -// wxHtmlSelection is data holder with information about text selection. -// Selection is defined by two positions (beginning and end of the selection) -// and two leaf(!) cells at these positions. -class WXDLLIMPEXP_HTML wxHtmlSelection -{ -public: - wxHtmlSelection() - : m_fromPos(wxDefaultPosition), m_toPos(wxDefaultPosition), - m_fromPrivPos(wxDefaultPosition), m_toPrivPos(wxDefaultPosition), - m_fromCell(NULL), m_toCell(NULL) {} - - void Set(const wxPoint& fromPos, const wxHtmlCell *fromCell, - const wxPoint& toPos, const wxHtmlCell *toCell); - void Set(const wxHtmlCell *fromCell, const wxHtmlCell *toCell); - - const wxHtmlCell *GetFromCell() const { return m_fromCell; } - const wxHtmlCell *GetToCell() const { return m_toCell; } - - // these values are in absolute coordinates: - const wxPoint& GetFromPos() const { return m_fromPos; } - const wxPoint& GetToPos() const { return m_toPos; } - - // these are From/ToCell's private data - const wxPoint& GetFromPrivPos() const { return m_fromPrivPos; } - const wxPoint& GetToPrivPos() const { return m_toPrivPos; } - void SetFromPrivPos(const wxPoint& pos) { m_fromPrivPos = pos; } - void SetToPrivPos(const wxPoint& pos) { m_toPrivPos = pos; } - void ClearPrivPos() { m_toPrivPos = m_fromPrivPos = wxDefaultPosition; } - - bool IsEmpty() const - { return m_fromPos == wxDefaultPosition && - m_toPos == wxDefaultPosition; } - -private: - wxPoint m_fromPos, m_toPos; - wxPoint m_fromPrivPos, m_toPrivPos; - const wxHtmlCell *m_fromCell, *m_toCell; -}; - - - -enum wxHtmlSelectionState -{ - wxHTML_SEL_OUT, // currently rendered cell is outside the selection - wxHTML_SEL_IN, // ... is inside selection - wxHTML_SEL_CHANGING // ... is the cell on which selection state changes -}; - -// Selection state is passed to wxHtmlCell::Draw so that it can render itself -// differently e.g. when inside text selection or outside it. -class WXDLLIMPEXP_HTML wxHtmlRenderingState -{ -public: - wxHtmlRenderingState() : m_selState(wxHTML_SEL_OUT) {} - - void SetSelectionState(wxHtmlSelectionState s) { m_selState = s; } - wxHtmlSelectionState GetSelectionState() const { return m_selState; } - - void SetFgColour(const wxColour& c) { m_fgColour = c; } - const wxColour& GetFgColour() const { return m_fgColour; } - void SetBgColour(const wxColour& c) { m_bgColour = c; } - const wxColour& GetBgColour() const { return m_bgColour; } - -private: - wxHtmlSelectionState m_selState; - wxColour m_fgColour, m_bgColour; -}; - - -// HTML rendering customization. This class is used when rendering wxHtmlCells -// as a callback: -class WXDLLIMPEXP_HTML wxHtmlRenderingStyle -{ -public: - virtual ~wxHtmlRenderingStyle() {} - virtual wxColour GetSelectedTextColour(const wxColour& clr) = 0; - virtual wxColour GetSelectedTextBgColour(const wxColour& clr) = 0; -}; - -// Standard style: -class WXDLLIMPEXP_HTML wxDefaultHtmlRenderingStyle : public wxHtmlRenderingStyle -{ -public: - virtual wxColour GetSelectedTextColour(const wxColour& clr); - virtual wxColour GetSelectedTextBgColour(const wxColour& clr); -}; - - -// Information given to cells when drawing them. Contains rendering state, -// selection information and rendering style object that can be used to -// customize the output. -class WXDLLIMPEXP_HTML wxHtmlRenderingInfo -{ -public: - wxHtmlRenderingInfo() : m_selection(NULL), m_style(NULL) {} - - void SetSelection(wxHtmlSelection *s) { m_selection = s; } - wxHtmlSelection *GetSelection() const { return m_selection; } - - void SetStyle(wxHtmlRenderingStyle *style) { m_style = style; } - wxHtmlRenderingStyle& GetStyle() { return *m_style; } - - wxHtmlRenderingState& GetState() { return m_state; } - -protected: - wxHtmlSelection *m_selection; - wxHtmlRenderingStyle *m_style; - wxHtmlRenderingState m_state; -}; - - -// Flags for wxHtmlCell::FindCellByPos -enum -{ - wxHTML_FIND_EXACT = 1, - wxHTML_FIND_NEAREST_BEFORE = 2, - wxHTML_FIND_NEAREST_AFTER = 4 -}; - - -// Superscript/subscript/normal script mode of a cell -enum wxHtmlScriptMode -{ - wxHTML_SCRIPT_NORMAL, - wxHTML_SCRIPT_SUB, - wxHTML_SCRIPT_SUP -}; - - -// --------------------------------------------------------------------------- -// wxHtmlCell -// Internal data structure. It represents fragments of parsed -// HTML page - a word, picture, table, horizontal line and so -// on. It is used by wxHtmlWindow to represent HTML page in -// memory. -// --------------------------------------------------------------------------- - - -class WXDLLIMPEXP_HTML wxHtmlCell : public wxObject -{ -public: - wxHtmlCell(); - virtual ~wxHtmlCell(); - - void SetParent(wxHtmlContainerCell *p) {m_Parent = p;} - wxHtmlContainerCell *GetParent() const {return m_Parent;} - - int GetPosX() const {return m_PosX;} - int GetPosY() const {return m_PosY;} - int GetWidth() const {return m_Width;} - - // Returns the maximum possible length of the cell. - // Call Layout at least once before using GetMaxTotalWidth() - virtual int GetMaxTotalWidth() const { return m_Width; } - - int GetHeight() const {return m_Height;} - int GetDescent() const {return m_Descent;} - - void SetScriptMode(wxHtmlScriptMode mode, long previousBase); - wxHtmlScriptMode GetScriptMode() const { return m_ScriptMode; } - long GetScriptBaseline() { return m_ScriptBaseline; } - - // Formatting cells are not visible on the screen, they only alter - // renderer's state. - bool IsFormattingCell() const { return m_Width == 0 && m_Height == 0; } - - const wxString& GetId() const { return m_id; } - void SetId(const wxString& id) { m_id = id; } - - // returns the link associated with this cell. The position is position - // within the cell so it varies from 0 to m_Width, from 0 to m_Height - virtual wxHtmlLinkInfo* GetLink(int WXUNUSED(x) = 0, - int WXUNUSED(y) = 0) const - { return m_Link; } - - // Returns cursor to be used when mouse is over the cell: - virtual wxCursor GetMouseCursor(wxHtmlWindowInterface *window) const; - -#if WXWIN_COMPATIBILITY_2_6 - // this was replaced by GetMouseCursor, don't use in new code! - virtual wxCursor GetCursor() const; -#endif - - // return next cell among parent's cells - wxHtmlCell *GetNext() const {return m_Next;} - // returns first child cell (if there are any, i.e. if this is container): - virtual wxHtmlCell* GetFirstChild() const { return NULL; } - - // members writing methods - virtual void SetPos(int x, int y) {m_PosX = x, m_PosY = y;} - void SetLink(const wxHtmlLinkInfo& link); - void SetNext(wxHtmlCell *cell) {m_Next = cell;} - - // 1. adjust cell's width according to the fact that maximal possible width - // is w. (this has sense when working with horizontal lines, tables - // etc.) - // 2. prepare layout (=fill-in m_PosX, m_PosY (and sometime m_Height) - // members) = place items to fit window, according to the width w - virtual void Layout(int w); - - // renders the cell - virtual void Draw(wxDC& WXUNUSED(dc), - int WXUNUSED(x), int WXUNUSED(y), - int WXUNUSED(view_y1), int WXUNUSED(view_y2), - wxHtmlRenderingInfo& WXUNUSED(info)) {} - - // proceed drawing actions in case the cell is not visible (scrolled out of - // screen). This is needed to change fonts, colors and so on. - virtual void DrawInvisible(wxDC& WXUNUSED(dc), - int WXUNUSED(x), int WXUNUSED(y), - wxHtmlRenderingInfo& WXUNUSED(info)) {} - - // This method returns pointer to the FIRST cell for that - // the condition - // is true. It first checks if the condition is true for this - // cell and then calls m_Next->Find(). (Note: it checks - // all subcells if the cell is container) - // Condition is unique condition identifier (see htmldefs.h) - // (user-defined condition IDs should start from 10000) - // and param is optional parameter - // Example : m_Cell->Find(wxHTML_COND_ISANCHOR, "news"); - // returns pointer to anchor news - virtual const wxHtmlCell* Find(int condition, const void* param) const; - - - // This function is called when mouse button is clicked over the cell. - // Returns true if a link is clicked, false otherwise. - // - // 'window' is pointer to wxHtmlWindowInterface of the window which - // generated the event. - // HINT: if this handling is not enough for you you should use - // wxHtmlWidgetCell - virtual bool ProcessMouseClick(wxHtmlWindowInterface *window, - const wxPoint& pos, - const wxMouseEvent& event); - -#if WXWIN_COMPATIBILITY_2_6 - // this was replaced by ProcessMouseClick, don't use in new code! - virtual void OnMouseClick(wxWindow *window, - int x, int y, const wxMouseEvent& event); -#endif - - // This method used to adjust pagebreak position. The parameter is variable - // that contains y-coordinate of page break (= horizontal line that should - // not be crossed by words, images etc.). If this cell cannot be divided - // into two pieces (each one on another page) then it moves the pagebreak - // few pixels up. - // - // Returned value : true if pagebreak was modified, false otherwise - // Usage : while (container->AdjustPagebreak(&p)) {} - virtual bool AdjustPagebreak(int *pagebreak, - wxArrayInt& known_pagebreaks) const; - - // Sets cell's behaviour on pagebreaks (see AdjustPagebreak). Default - // is true - the cell can be split on two pages - void SetCanLiveOnPagebreak(bool can) { m_CanLiveOnPagebreak = can; } - - // Can the line be broken before this cell? - virtual bool IsLinebreakAllowed() const - { return !IsFormattingCell(); } - - // Returns true for simple == terminal cells, i.e. not composite ones. - // This if for internal usage only and may disappear in future versions! - virtual bool IsTerminalCell() const { return true; } - - // Find a cell inside this cell positioned at the given coordinates - // (relative to this's positions). Returns NULL if no such cell exists. - // The flag can be used to specify whether to look for terminal or - // nonterminal cells or both. In either case, returned cell is deepest - // cell in cells tree that contains [x,y]. - virtual wxHtmlCell *FindCellByPos(wxCoord x, wxCoord y, - unsigned flags = wxHTML_FIND_EXACT) const; - - // Returns absolute position of the cell on HTML canvas. - // If rootCell is provided, then it's considered to be the root of the - // hierarchy and the returned value is relative to it. - wxPoint GetAbsPos(wxHtmlCell *rootCell = NULL) const; - - // Returns root cell of the hierarchy (i.e. grand-grand-...-parent that - // doesn't have a parent itself) - wxHtmlCell *GetRootCell() const; - - // Returns first (last) terminal cell inside this cell. It may return NULL, - // but it is rare -- only if there are no terminals in the tree. - virtual wxHtmlCell *GetFirstTerminal() const - { return wxConstCast(this, wxHtmlCell); } - virtual wxHtmlCell *GetLastTerminal() const - { return wxConstCast(this, wxHtmlCell); } - - // Returns cell's depth, i.e. how far under the root cell it is - // (if it is the root, depth is 0) - unsigned GetDepth() const; - - // Returns true if the cell appears before 'cell' in natural order of - // cells (= as they are read). If cell A is (grand)parent of cell B, - // then both A.IsBefore(B) and B.IsBefore(A) always return true. - bool IsBefore(wxHtmlCell *cell) const; - - // Converts the cell into text representation. If sel != NULL then - // only part of the cell inside the selection is converted. - virtual wxString ConvertToText(wxHtmlSelection *WXUNUSED(sel)) const - { return wxEmptyString; } - -protected: - // pointer to the next cell - wxHtmlCell *m_Next; - // pointer to parent cell - wxHtmlContainerCell *m_Parent; - - // dimensions of fragment (m_Descent is used to position text & images) - long m_Width, m_Height, m_Descent; - // position where the fragment is drawn: - long m_PosX, m_PosY; - - // superscript/subscript/normal: - wxHtmlScriptMode m_ScriptMode; - long m_ScriptBaseline; - - // destination address if this fragment is hypertext link, NULL otherwise - wxHtmlLinkInfo *m_Link; - // true if this cell can be placed on pagebreak, false otherwise - bool m_CanLiveOnPagebreak; - // unique identifier of the cell, generated from "id" property of tags - wxString m_id; - - DECLARE_ABSTRACT_CLASS(wxHtmlCell) - DECLARE_NO_COPY_CLASS(wxHtmlCell) -}; - - - - -// ---------------------------------------------------------------------------- -// Inherited cells: -// ---------------------------------------------------------------------------- - - -// ---------------------------------------------------------------------------- -// wxHtmlWordCell -// Single word in input stream. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlWordCell : public wxHtmlCell -{ -public: - wxHtmlWordCell(const wxString& word, const wxDC& dc); - void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2, - wxHtmlRenderingInfo& info); - virtual wxCursor GetMouseCursor(wxHtmlWindowInterface *window) const; - wxString ConvertToText(wxHtmlSelection *sel) const; - bool IsLinebreakAllowed() const { return m_allowLinebreak; } - - void SetPreviousWord(wxHtmlWordCell *cell); - -protected: - void SetSelectionPrivPos(const wxDC& dc, wxHtmlSelection *s) const; - void Split(const wxDC& dc, - const wxPoint& selFrom, const wxPoint& selTo, - unsigned& pos1, unsigned& pos2) const; - - wxString m_Word; - bool m_allowLinebreak; - - DECLARE_ABSTRACT_CLASS(wxHtmlWordCell) - DECLARE_NO_COPY_CLASS(wxHtmlWordCell) -}; - - - - - -// Container contains other cells, thus forming tree structure of rendering -// elements. Basic code of layout algorithm is contained in this class. -class WXDLLIMPEXP_HTML wxHtmlContainerCell : public wxHtmlCell -{ -public: - wxHtmlContainerCell(wxHtmlContainerCell *parent); - virtual ~wxHtmlContainerCell(); - - virtual void Layout(int w); - virtual void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2, - wxHtmlRenderingInfo& info); - virtual void DrawInvisible(wxDC& dc, int x, int y, - wxHtmlRenderingInfo& info); -/* virtual bool AdjustPagebreak(int *pagebreak, int *known_pagebreaks = NULL, int number_of_pages = 0) const;*/ - virtual bool AdjustPagebreak(int *pagebreak, wxArrayInt& known_pagebreaks) const; - - // insert cell at the end of m_Cells list - void InsertCell(wxHtmlCell *cell); - - // sets horizontal/vertical alignment - void SetAlignHor(int al) {m_AlignHor = al; m_LastLayout = -1;} - int GetAlignHor() const {return m_AlignHor;} - void SetAlignVer(int al) {m_AlignVer = al; m_LastLayout = -1;} - int GetAlignVer() const {return m_AlignVer;} - - // sets left-border indentation. units is one of wxHTML_UNITS_* constants - // what is combination of wxHTML_INDENT_* - void SetIndent(int i, int what, int units = wxHTML_UNITS_PIXELS); - // returns the indentation. ind is one of wxHTML_INDENT_* constants - int GetIndent(int ind) const; - // returns type of value returned by GetIndent(ind) - int GetIndentUnits(int ind) const; - - // sets alignment info based on given tag's params - void SetAlign(const wxHtmlTag& tag); - // sets floating width adjustment - // (examples : 32 percent of parent container, - // -15 pixels percent (this means 100 % - 15 pixels) - void SetWidthFloat(int w, int units) {m_WidthFloat = w; m_WidthFloatUnits = units; m_LastLayout = -1;} - void SetWidthFloat(const wxHtmlTag& tag, double pixel_scale = 1.0); - // sets minimal height of this container. - void SetMinHeight(int h, int align = wxHTML_ALIGN_TOP) {m_MinHeight = h; m_MinHeightAlign = align; m_LastLayout = -1;} - - void SetBackgroundColour(const wxColour& clr) {m_UseBkColour = true; m_BkColour = clr;} - // returns background colour (of wxNullColour if none set), so that widgets can - // adapt to it: - wxColour GetBackgroundColour(); - void SetBorder(const wxColour& clr1, const wxColour& clr2) {m_UseBorder = true; m_BorderColour1 = clr1, m_BorderColour2 = clr2;} - virtual wxHtmlLinkInfo* GetLink(int x = 0, int y = 0) const; - virtual const wxHtmlCell* Find(int condition, const void* param) const; - -#if WXWIN_COMPATIBILITY_2_6 - // this was replaced by ProcessMouseClick, don't use in new code! - virtual void OnMouseClick(wxWindow *window, - int x, int y, const wxMouseEvent& event); -#endif - virtual bool ProcessMouseClick(wxHtmlWindowInterface *window, - const wxPoint& pos, - const wxMouseEvent& event); - - virtual wxHtmlCell* GetFirstChild() const { return m_Cells; } -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( wxHtmlCell* GetFirstCell() const ); -#endif - // returns last child cell: - wxHtmlCell* GetLastChild() const { return m_LastCell; } - - // see comment in wxHtmlCell about this method - virtual bool IsTerminalCell() const { return false; } - - virtual wxHtmlCell *FindCellByPos(wxCoord x, wxCoord y, - unsigned flags = wxHTML_FIND_EXACT) const; - - virtual wxHtmlCell *GetFirstTerminal() const; - virtual wxHtmlCell *GetLastTerminal() const; - - - // Removes indentation on top or bottom of the container (i.e. above or - // below first/last terminal cell). For internal use only. - virtual void RemoveExtraSpacing(bool top, bool bottom); - - // Returns the maximum possible length of the container. - // Call Layout at least once before using GetMaxTotalWidth() - virtual int GetMaxTotalWidth() const { return m_MaxTotalWidth; } - -protected: - void UpdateRenderingStatePre(wxHtmlRenderingInfo& info, - wxHtmlCell *cell) const; - void UpdateRenderingStatePost(wxHtmlRenderingInfo& info, - wxHtmlCell *cell) const; - -protected: - int m_IndentLeft, m_IndentRight, m_IndentTop, m_IndentBottom; - // indentation of subcells. There is always m_Indent pixels - // big space between given border of the container and the subcells - // it m_Indent < 0 it is in PERCENTS, otherwise it is in pixels - int m_MinHeight, m_MinHeightAlign; - // minimal height. - wxHtmlCell *m_Cells, *m_LastCell; - // internal cells, m_Cells points to the first of them, m_LastCell to the last one. - // (LastCell is needed only to speed-up InsertCell) - int m_AlignHor, m_AlignVer; - // alignment horizontal and vertical (left, center, right) - int m_WidthFloat, m_WidthFloatUnits; - // width float is used in adjustWidth - bool m_UseBkColour; - wxColour m_BkColour; - // background color of this container - bool m_UseBorder; - wxColour m_BorderColour1, m_BorderColour2; - // borders color of this container - int m_LastLayout; - // if != -1 then call to Layout may be no-op - // if previous call to Layout has same argument - int m_MaxTotalWidth; - // Maximum possible length if ignoring line wrap - - - DECLARE_ABSTRACT_CLASS(wxHtmlContainerCell) - DECLARE_NO_COPY_CLASS(wxHtmlContainerCell) -}; - -#if WXWIN_COMPATIBILITY_2_4 -inline wxHtmlCell* wxHtmlContainerCell::GetFirstCell() const - { return GetFirstChild(); } -#endif - - - - -// --------------------------------------------------------------------------- -// wxHtmlColourCell -// Color changer. -// --------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlColourCell : public wxHtmlCell -{ -public: - wxHtmlColourCell(const wxColour& clr, int flags = wxHTML_CLR_FOREGROUND) : wxHtmlCell() {m_Colour = clr; m_Flags = flags;} - virtual void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2, - wxHtmlRenderingInfo& info); - virtual void DrawInvisible(wxDC& dc, int x, int y, - wxHtmlRenderingInfo& info); - -protected: - wxColour m_Colour; - unsigned m_Flags; - - DECLARE_ABSTRACT_CLASS(wxHtmlColourCell) - DECLARE_NO_COPY_CLASS(wxHtmlColourCell) -}; - - - - -//-------------------------------------------------------------------------------- -// wxHtmlFontCell -// Sets actual font used for text rendering -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlFontCell : public wxHtmlCell -{ -public: - wxHtmlFontCell(wxFont *font) : wxHtmlCell() { m_Font = (*font); } - virtual void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2, - wxHtmlRenderingInfo& info); - virtual void DrawInvisible(wxDC& dc, int x, int y, - wxHtmlRenderingInfo& info); - -protected: - wxFont m_Font; - - DECLARE_ABSTRACT_CLASS(wxHtmlFontCell) - DECLARE_NO_COPY_CLASS(wxHtmlFontCell) -}; - - - - - - -//-------------------------------------------------------------------------------- -// wxHtmlwidgetCell -// This cell is connected with wxWindow object -// You can use it to insert windows into HTML page -// (buttons, input boxes etc.) -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlWidgetCell : public wxHtmlCell -{ -public: - // !!! wnd must have correct parent! - // if w != 0 then the m_Wnd has 'floating' width - it adjust - // it's width according to parent container's width - // (w is percent of parent's width) - wxHtmlWidgetCell(wxWindow *wnd, int w = 0); - virtual ~wxHtmlWidgetCell() { m_Wnd->Destroy(); } - virtual void Draw(wxDC& dc, int x, int y, int view_y1, int view_y2, - wxHtmlRenderingInfo& info); - virtual void DrawInvisible(wxDC& dc, int x, int y, - wxHtmlRenderingInfo& info); - virtual void Layout(int w); - -protected: - wxWindow* m_Wnd; - int m_WidthFloat; - // width float is used in adjustWidth (it is in percents) - - DECLARE_ABSTRACT_CLASS(wxHtmlWidgetCell) - DECLARE_NO_COPY_CLASS(wxHtmlWidgetCell) -}; - - - -//-------------------------------------------------------------------------------- -// wxHtmlLinkInfo -// Internal data structure. It represents hypertext link -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlLinkInfo : public wxObject -{ -public: - wxHtmlLinkInfo() : wxObject() - { m_Href = m_Target = wxEmptyString; m_Event = NULL, m_Cell = NULL; } - wxHtmlLinkInfo(const wxString& href, const wxString& target = wxEmptyString) : wxObject() - { m_Href = href; m_Target = target; m_Event = NULL, m_Cell = NULL; } - wxHtmlLinkInfo(const wxHtmlLinkInfo& l) : wxObject() - { m_Href = l.m_Href, m_Target = l.m_Target, m_Event = l.m_Event; - m_Cell = l.m_Cell; } - wxHtmlLinkInfo& operator=(const wxHtmlLinkInfo& l) - { m_Href = l.m_Href, m_Target = l.m_Target, m_Event = l.m_Event; - m_Cell = l.m_Cell; return *this; } - - void SetEvent(const wxMouseEvent *e) { m_Event = e; } - void SetHtmlCell(const wxHtmlCell *e) { m_Cell = e; } - - wxString GetHref() const { return m_Href; } - wxString GetTarget() const { return m_Target; } - const wxMouseEvent* GetEvent() const { return m_Event; } - const wxHtmlCell* GetHtmlCell() const { return m_Cell; } - -private: - wxString m_Href, m_Target; - const wxMouseEvent *m_Event; - const wxHtmlCell *m_Cell; -}; - - - -// ---------------------------------------------------------------------------- -// wxHtmlTerminalCellsInterator -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlTerminalCellsInterator -{ -public: - wxHtmlTerminalCellsInterator(const wxHtmlCell *from, const wxHtmlCell *to) - : m_to(to), m_pos(from) {} - - operator bool() const { return m_pos != NULL; } - const wxHtmlCell* operator++(); - const wxHtmlCell* operator->() const { return m_pos; } - const wxHtmlCell* operator*() const { return m_pos; } - -private: - const wxHtmlCell *m_to, *m_pos; -}; - - - -#endif // wxUSE_HTML - -#endif // _WX_HTMLCELL_H_ - diff --git a/desmume/src/windows/wx/include/wx/html/htmldefs.h b/desmume/src/windows/wx/include/wx/html/htmldefs.h deleted file mode 100644 index d000e616f..000000000 --- a/desmume/src/windows/wx/include/wx/html/htmldefs.h +++ /dev/null @@ -1,104 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: htmldefs.h -// Purpose: constants for wxhtml library -// Author: Vaclav Slavik -// RCS-ID: $Id: htmldefs.h 40823 2006-08-25 16:52:58Z VZ $ -// Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - - -#ifndef _WX_HTMLDEFS_H_ -#define _WX_HTMLDEFS_H_ - -#include "wx/defs.h" - -#if wxUSE_HTML - -//-------------------------------------------------------------------------------- -// ALIGNMENTS -// Describes alignment of text etc. in containers -//-------------------------------------------------------------------------------- - -#define wxHTML_ALIGN_LEFT 0x0000 -#define wxHTML_ALIGN_RIGHT 0x0002 -#define wxHTML_ALIGN_JUSTIFY 0x0010 - -#define wxHTML_ALIGN_TOP 0x0004 -#define wxHTML_ALIGN_BOTTOM 0x0008 - -#define wxHTML_ALIGN_CENTER 0x0001 - - - -//-------------------------------------------------------------------------------- -// COLOR MODES -// Used by wxHtmlColourCell to determine clr of what is changing -//-------------------------------------------------------------------------------- - -#define wxHTML_CLR_FOREGROUND 0x0001 -#define wxHTML_CLR_BACKGROUND 0x0002 - - - -//-------------------------------------------------------------------------------- -// UNITS -// Used to specify units -//-------------------------------------------------------------------------------- - -#define wxHTML_UNITS_PIXELS 0x0001 -#define wxHTML_UNITS_PERCENT 0x0002 - - - -//-------------------------------------------------------------------------------- -// INDENTS -// Used to specify indetation relatives -//-------------------------------------------------------------------------------- - -#define wxHTML_INDENT_LEFT 0x0010 -#define wxHTML_INDENT_RIGHT 0x0020 -#define wxHTML_INDENT_TOP 0x0040 -#define wxHTML_INDENT_BOTTOM 0x0080 - -#define wxHTML_INDENT_HORIZONTAL (wxHTML_INDENT_LEFT | wxHTML_INDENT_RIGHT) -#define wxHTML_INDENT_VERTICAL (wxHTML_INDENT_TOP | wxHTML_INDENT_BOTTOM) -#define wxHTML_INDENT_ALL (wxHTML_INDENT_VERTICAL | wxHTML_INDENT_HORIZONTAL) - - - - -//-------------------------------------------------------------------------------- -// FIND CONDITIONS -// Identifiers of wxHtmlCell's Find() conditions -//-------------------------------------------------------------------------------- - -#define wxHTML_COND_ISANCHOR 1 - // Finds the anchor of 'param' name (pointer to wxString). - -#define wxHTML_COND_ISIMAGEMAP 2 - // Finds imagemap of 'param' name (pointer to wxString). - // (used exclusively by m_image.cpp) - -#define wxHTML_COND_USER 10000 - // User-defined conditions should start from this number - - -//-------------------------------------------------------------------------------- -// INTERNALS -// wxHTML internal constants -//-------------------------------------------------------------------------------- - - /* size of one scroll step of wxHtmlWindow in pixels */ -#define wxHTML_SCROLL_STEP 16 - - /* size of temporary buffer used during parsing */ -#define wxHTML_BUFLEN 1024 - - /* maximum number of pages printable via html printing */ -#define wxHTML_PRINT_MAX_PAGES 999 - -#endif // wxUSE_HTML - -#endif // _WX_HTMLDEFS_H_ - diff --git a/desmume/src/windows/wx/include/wx/html/htmlfilt.h b/desmume/src/windows/wx/include/wx/html/htmlfilt.h deleted file mode 100644 index 38b5ab344..000000000 --- a/desmume/src/windows/wx/include/wx/html/htmlfilt.h +++ /dev/null @@ -1,82 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: htmlfilt.h -// Purpose: filters -// Author: Vaclav Slavik -// RCS-ID: $Id: htmlfilt.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HTMLFILT_H_ -#define _WX_HTMLFILT_H_ - -#include "wx/defs.h" - -#if wxUSE_HTML - -#include "wx/filesys.h" - - -//-------------------------------------------------------------------------------- -// wxHtmlFilter -// This class is input filter. It can "translate" files -// in non-HTML format to HTML format -// interface to access certain -// kinds of files (HTPP, FTP, local, tar.gz etc..) -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlFilter : public wxObject -{ - DECLARE_ABSTRACT_CLASS(wxHtmlFilter) - -public: - wxHtmlFilter() : wxObject() {} - virtual ~wxHtmlFilter() {} - - // returns true if this filter is able to open&read given file - virtual bool CanRead(const wxFSFile& file) const = 0; - - // Reads given file and returns HTML document. - // Returns empty string if opening failed - virtual wxString ReadFile(const wxFSFile& file) const = 0; -}; - - - -//-------------------------------------------------------------------------------- -// wxHtmlFilterPlainText -// This filter is used as default filter if no other can -// be used (= uknown type of file). It is used by -// wxHtmlWindow itself. -//-------------------------------------------------------------------------------- - - -class WXDLLIMPEXP_HTML wxHtmlFilterPlainText : public wxHtmlFilter -{ - DECLARE_DYNAMIC_CLASS(wxHtmlFilterPlainText) - -public: - virtual bool CanRead(const wxFSFile& file) const; - virtual wxString ReadFile(const wxFSFile& file) const; -}; - -//-------------------------------------------------------------------------------- -// wxHtmlFilterHTML -// filter for text/html -//-------------------------------------------------------------------------------- - -class wxHtmlFilterHTML : public wxHtmlFilter -{ - DECLARE_DYNAMIC_CLASS(wxHtmlFilterHTML) - - public: - virtual bool CanRead(const wxFSFile& file) const; - virtual wxString ReadFile(const wxFSFile& file) const; -}; - - - -#endif // wxUSE_HTML - -#endif // _WX_HTMLFILT_H_ - diff --git a/desmume/src/windows/wx/include/wx/html/htmlpars.h b/desmume/src/windows/wx/include/wx/html/htmlpars.h deleted file mode 100644 index b1080863b..000000000 --- a/desmume/src/windows/wx/include/wx/html/htmlpars.h +++ /dev/null @@ -1,283 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: htmlpars.h -// Purpose: wxHtmlParser class (generic parser) -// Author: Vaclav Slavik -// RCS-ID: $Id: htmlpars.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HTMLPARS_H_ -#define _WX_HTMLPARS_H_ - -#include "wx/defs.h" -#if wxUSE_HTML - -#include "wx/html/htmltag.h" -#include "wx/filesys.h" -#include "wx/hash.h" -#include "wx/fontenc.h" - -class WXDLLIMPEXP_FWD_BASE wxMBConv; -class WXDLLIMPEXP_FWD_HTML wxHtmlParser; -class WXDLLIMPEXP_FWD_HTML wxHtmlTagHandler; -class WXDLLIMPEXP_FWD_HTML wxHtmlEntitiesParser; - -class wxHtmlTextPieces; -class wxHtmlParserState; - - -enum wxHtmlURLType -{ - wxHTML_URL_PAGE, - wxHTML_URL_IMAGE, - wxHTML_URL_OTHER -}; - -// This class handles generic parsing of HTML document : it scans -// the document and divides it into blocks of tags (where one block -// consists of starting and ending tag and of text between these -// 2 tags. -class WXDLLIMPEXP_HTML wxHtmlParser : public wxObject -{ - DECLARE_ABSTRACT_CLASS(wxHtmlParser) - -public: - wxHtmlParser(); - virtual ~wxHtmlParser(); - - // Sets the class which will be used for opening files - void SetFS(wxFileSystem *fs) { m_FS = fs; } - - wxFileSystem* GetFS() const { return m_FS; } - - // Opens file if the parser is allowed to open given URL (may be forbidden - // for security reasons) - virtual wxFSFile *OpenURL(wxHtmlURLType type, const wxString& url) const; - - // You can simply call this method when you need parsed output. - // This method does these things: - // 1. call InitParser(source); - // 2. call DoParsing(); - // 3. call GetProduct(); (its return value is then returned) - // 4. call DoneParser(); - wxObject* Parse(const wxString& source); - - // Sets the source. This must be called before running Parse() method. - virtual void InitParser(const wxString& source); - // This must be called after Parse(). - virtual void DoneParser(); - - // May be called during parsing to immediately return from Parse(). - virtual void StopParsing() { m_stopParsing = true; } - - // Parses the m_Source from begin_pos to end_pos-1. - // (in noparams version it parses whole m_Source) - void DoParsing(int begin_pos, int end_pos); - void DoParsing(); - - // Returns pointer to the tag at parser's current position - wxHtmlTag *GetCurrentTag() const { return m_CurTag; } - - // Returns product of parsing - // Returned value is result of parsing of the part. The type of this result - // depends on internal representation in derived parser - // (see wxHtmlWinParser for details). - virtual wxObject* GetProduct() = 0; - - // adds handler to the list & hash table of handlers. - virtual void AddTagHandler(wxHtmlTagHandler *handler); - - // Forces the handler to handle additional tags (not returned by GetSupportedTags). - // The handler should already be in use by this parser. - // Example: you want to parse following pseudo-html structure: - // - // - // - // - // This last it has different meaning, we don't want it to be parsed by myitems handler! - // handler can handle only 'myitems' (e.g. its GetSupportedTags returns "MYITEMS") - // you can call PushTagHandler(handler, "IT") when you find - // and call PopTagHandler() when you find - void PushTagHandler(wxHtmlTagHandler *handler, const wxString& tags); - - // Restores state before last call to PushTagHandler - void PopTagHandler(); - - wxString* GetSource() {return &m_Source;} - void SetSource(const wxString& src); - - // Sets HTML source and remembers current parser's state so that it can - // later be restored. This is useful for on-line modifications of - // HTML source (for example,
 handler replaces spaces with  
-    // and newlines with 
) - virtual void SetSourceAndSaveState(const wxString& src); - // Restores parser's state from stack or returns false if the stack is - // empty - virtual bool RestoreState(); - - // Returns HTML source inside the element (i.e. between the starting - // and ending tag) - wxString GetInnerSource(const wxHtmlTag& tag); - - // Parses HTML string 'markup' and extracts charset info from tag - // if present. Returns empty string if the tag is missing. - // For wxHTML's internal use. - static wxString ExtractCharsetInformation(const wxString& markup); - - // Returns entity parser object, used to substitute HTML &entities; - wxHtmlEntitiesParser *GetEntitiesParser() const { return m_entitiesParser; } - -protected: - // DOM structure - void CreateDOMTree(); - void DestroyDOMTree(); - void CreateDOMSubTree(wxHtmlTag *cur, - int begin_pos, int end_pos, - wxHtmlTagsCache *cache); - - // Adds text to the output. - // This is called from Parse() and must be overriden in derived classes. - // txt is not guaranteed to be only one word. It is largest continuous part of text - // (= not broken by tags) - // NOTE : using char* because of speed improvements - virtual void AddText(const wxChar* txt) = 0; - - // Adds tag and proceeds it. Parse() may (and usually is) called from this method. - // This is called from Parse() and may be overriden. - // Default behavior is that it looks for proper handler in m_Handlers. The tag is - // ignored if no hander is found. - // Derived class is *responsible* for filling in m_Handlers table. - virtual void AddTag(const wxHtmlTag& tag); - -protected: - // DOM tree: - wxHtmlTag *m_CurTag; - wxHtmlTag *m_Tags; - wxHtmlTextPieces *m_TextPieces; - size_t m_CurTextPiece; - - wxString m_Source; - - wxHtmlParserState *m_SavedStates; - - // handlers that handle particular tags. The table is accessed by - // key = tag's name. - // This attribute MUST be filled by derived class otherwise it would - // be empty and no tags would be recognized - // (see wxHtmlWinParser for details about filling it) - // m_HandlersHash is for random access based on knowledge of tag name (BR, P, etc.) - // it may (and often does) contain more references to one object - // m_HandlersList is list of all handlers and it is guaranteed to contain - // only one reference to each handler instance. - wxList m_HandlersList; - wxHashTable m_HandlersHash; - - DECLARE_NO_COPY_CLASS(wxHtmlParser) - - // class for opening files (file system) - wxFileSystem *m_FS; - // handlers stack used by PushTagHandler and PopTagHandler - wxList *m_HandlersStack; - - // entity parse - wxHtmlEntitiesParser *m_entitiesParser; - - // flag indicating that the parser should stop - bool m_stopParsing; -}; - - - -// This class (and derived classes) cooperates with wxHtmlParser. -// Each recognized tag is passed to handler which is capable -// of handling it. Each tag is handled in 3 steps: -// 1. Handler will modifies state of parser -// (using its public methods) -// 2. Parser parses source between starting and ending tag -// 3. Handler restores original state of the parser -class WXDLLIMPEXP_HTML wxHtmlTagHandler : public wxObject -{ - DECLARE_ABSTRACT_CLASS(wxHtmlTagHandler) - -public: - wxHtmlTagHandler() : wxObject () { m_Parser = NULL; } - - // Sets the parser. - // NOTE : each _instance_ of handler is guaranteed to be called - // only by one parser. This means you don't have to care about - // reentrancy. - virtual void SetParser(wxHtmlParser *parser) - { m_Parser = parser; } - - // Returns list of supported tags. The list is in uppercase and - // tags are delimited by ','. - // Example : "I,B,FONT,P" - // is capable of handling italic, bold, font and paragraph tags - virtual wxString GetSupportedTags() = 0; - - // This is hadling core method. It does all the Steps 1-3. - // To process step 2, you can call ParseInner() - // returned value : true if it called ParseInner(), - // false etherwise - virtual bool HandleTag(const wxHtmlTag& tag) = 0; - -protected: - // parses input between beginning and ending tag. - // m_Parser must be set. - void ParseInner(const wxHtmlTag& tag) - { m_Parser->DoParsing(tag.GetBeginPos(), tag.GetEndPos1()); } - - // Parses given source as if it was tag's inner code (see - // wxHtmlParser::GetInnerSource). Unlike ParseInner(), this method lets - // you specify the source code to parse. This is useful when you need to - // modify the inner text before parsing. - void ParseInnerSource(const wxString& source); - - wxHtmlParser *m_Parser; - - DECLARE_NO_COPY_CLASS(wxHtmlTagHandler) -}; - - -// This class is used to parse HTML entities in strings. It can handle -// both named entities and &#xxxx entries where xxxx is Unicode code. -class WXDLLIMPEXP_HTML wxHtmlEntitiesParser : public wxObject -{ - DECLARE_DYNAMIC_CLASS(wxHtmlEntitiesParser) - -public: - wxHtmlEntitiesParser(); - virtual ~wxHtmlEntitiesParser(); - - // Sets encoding of output string. - // Has no effect if wxUSE_WCHAR_T==0 or wxUSE_UNICODE==1 - void SetEncoding(wxFontEncoding encoding); - - // Parses entities in input and replaces them with respective characters - // (with respect to output encoding) - wxString Parse(const wxString& input); - - // Returns character for given entity or 0 if the enity is unknown - wxChar GetEntityChar(const wxString& entity); - - // Returns character that represents given Unicode code -#if wxUSE_UNICODE - wxChar GetCharForCode(unsigned code) { return (wxChar)code; } -#else - wxChar GetCharForCode(unsigned code); -#endif - -protected: -#if wxUSE_WCHAR_T && !wxUSE_UNICODE - wxMBConv *m_conv; - wxFontEncoding m_encoding; -#endif - - DECLARE_NO_COPY_CLASS(wxHtmlEntitiesParser) -}; - - -#endif - -#endif // _WX_HTMLPARS_H_ diff --git a/desmume/src/windows/wx/include/wx/html/htmlproc.h b/desmume/src/windows/wx/include/wx/html/htmlproc.h deleted file mode 100644 index eda556b49..000000000 --- a/desmume/src/windows/wx/include/wx/html/htmlproc.h +++ /dev/null @@ -1,58 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: htmlprep.h -// Purpose: HTML processor -// Author: Vaclav Slavik -// RCS-ID: $Id: htmlproc.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 2001 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HTMLPREP_H_ -#define _WX_HTMLPREP_H_ - -#include "wx/defs.h" - -#if wxUSE_HTML - -#include "wx/string.h" - -// Priority of preprocessor in the chain. The higher, the earlier it is used -enum -{ - wxHTML_PRIORITY_DONTCARE = 128, // if the order doesn't matter, use this - // priority - wxHTML_PRIORITY_SYSTEM = 256 // >=256 is only for wxHTML's internals -}; - -// Classes derived from this class serve as simple text processors for -// wxHtmlWindow. wxHtmlWindow runs HTML markup through all registered -// processors before displaying it, thus allowing for on-the-fly -// modifications of the markup. - -class WXDLLIMPEXP_HTML wxHtmlProcessor : public wxObject -{ - DECLARE_ABSTRACT_CLASS(wxHtmlProcessor) - -public: - wxHtmlProcessor() : wxObject(), m_enabled(true) {} - virtual ~wxHtmlProcessor() {} - - // Process input text and return processed result - virtual wxString Process(const wxString& text) const = 0; - - // Return priority value of this processor. The higher, the sooner - // is the processor applied to the text. - virtual int GetPriority() const { return wxHTML_PRIORITY_DONTCARE; } - - // Enable/disable the processor. wxHtmlWindow won't use a disabled - // processor even if it is in its processors queue. - virtual void Enable(bool enable = true) { m_enabled = enable; } - bool IsEnabled() const { return m_enabled; } - -protected: - bool m_enabled; -}; - -#endif // wxUSE_HTML - -#endif // _WX_HTMLPROC_H_ diff --git a/desmume/src/windows/wx/include/wx/html/htmltag.h b/desmume/src/windows/wx/include/wx/html/htmltag.h deleted file mode 100644 index 659611192..000000000 --- a/desmume/src/windows/wx/include/wx/html/htmltag.h +++ /dev/null @@ -1,148 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: htmltag.h -// Purpose: wxHtmlTag class (represents single tag) -// Author: Vaclav Slavik -// RCS-ID: $Id: htmltag.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HTMLTAG_H_ -#define _WX_HTMLTAG_H_ - -#include "wx/defs.h" - -#if wxUSE_HTML - -#include "wx/object.h" -#include "wx/arrstr.h" - -class WXDLLIMPEXP_FWD_CORE wxColour; -class WXDLLIMPEXP_FWD_HTML wxHtmlEntitiesParser; - -//----------------------------------------------------------------------------- -// wxHtmlTagsCache -// - internal wxHTML class, do not use! -//----------------------------------------------------------------------------- - -struct wxHtmlCacheItem; - -class WXDLLIMPEXP_HTML wxHtmlTagsCache : public wxObject -{ - DECLARE_DYNAMIC_CLASS(wxHtmlTagsCache) - -private: - wxHtmlCacheItem *m_Cache; - int m_CacheSize; - int m_CachePos; - -public: - wxHtmlTagsCache() : wxObject() {m_CacheSize = 0; m_Cache = NULL;} - wxHtmlTagsCache(const wxString& source); - virtual ~wxHtmlTagsCache() {free(m_Cache);} - - // Finds parameters for tag starting at at and fills the variables - void QueryTag(int at, int* end1, int* end2); - - DECLARE_NO_COPY_CLASS(wxHtmlTagsCache) -}; - - -//-------------------------------------------------------------------------------- -// wxHtmlTag -// This represents single tag. It is used as internal structure -// by wxHtmlParser. -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlTag : public wxObject -{ - DECLARE_CLASS(wxHtmlTag) - -protected: - // constructs wxHtmlTag object based on HTML tag. - // The tag begins (with '<' character) at position pos in source - // end_pos is position where parsing ends (usually end of document) - wxHtmlTag(wxHtmlTag *parent, - const wxString& source, int pos, int end_pos, - wxHtmlTagsCache *cache, - wxHtmlEntitiesParser *entParser); - friend class wxHtmlParser; -public: - virtual ~wxHtmlTag(); - - wxHtmlTag *GetParent() const {return m_Parent;} - wxHtmlTag *GetFirstSibling() const; - wxHtmlTag *GetLastSibling() const; - wxHtmlTag *GetChildren() const { return m_FirstChild; } - wxHtmlTag *GetPreviousSibling() const { return m_Prev; } - wxHtmlTag *GetNextSibling() const {return m_Next; } - // Return next tag, as if tree had been flattened - wxHtmlTag *GetNextTag() const; - - // Returns tag's name in uppercase. - inline wxString GetName() const {return m_Name;} - - // Returns true if the tag has given parameter. Parameter - // should always be in uppercase. - // Example : HasParam("SRC") returns true - bool HasParam(const wxString& par) const; - - // Returns value of the param. Value is in uppercase unless it is - // enclosed with " - // Example :

GetParam("ALIGN") returns (RIGHT) - //

GetParam("SRC") returns (WhaT.jpg) - // (or ("WhaT.jpg") if with_commas == true) - wxString GetParam(const wxString& par, bool with_commas = false) const; - - // Convenience functions: - bool GetParamAsColour(const wxString& par, wxColour *clr) const; - bool GetParamAsInt(const wxString& par, int *clr) const; - - // Scans param like scanf() functions family does. - // Example : ScanParam("COLOR", "\"#%X\"", &clr); - // This is always with with_commas=false - // Returns number of scanned values - // (like sscanf() does) - // NOTE: unlike scanf family, this function only accepts - // *one* parameter ! - int ScanParam(const wxString& par, const wxChar *format, void *param) const; - - // Returns string containing all params. - wxString GetAllParams() const; - - // return true if this there is matching ending tag - inline bool HasEnding() const {return m_End1 >= 0;} - - // returns beginning position of _internal_ block of text - // See explanation (returned value is marked with *): - // bla bla bla * bla bla intenal text bla bla - inline int GetBeginPos() const {return m_Begin;} - // returns ending position of _internal_ block of text. - // bla bla bla bla bla intenal text* bla bla - inline int GetEndPos1() const {return m_End1;} - // returns end position 2 : - // bla bla bla bla bla internal text* bla bla - inline int GetEndPos2() const {return m_End2;} - -private: - wxString m_Name; - int m_Begin, m_End1, m_End2; - wxArrayString m_ParamNames, m_ParamValues; - - // DOM tree relations: - wxHtmlTag *m_Next; - wxHtmlTag *m_Prev; - wxHtmlTag *m_FirstChild, *m_LastChild; - wxHtmlTag *m_Parent; - - DECLARE_NO_COPY_CLASS(wxHtmlTag) -}; - - - - - -#endif - -#endif // _WX_HTMLTAG_H_ - diff --git a/desmume/src/windows/wx/include/wx/html/htmlwin.h b/desmume/src/windows/wx/include/wx/html/htmlwin.h deleted file mode 100644 index 847fe7237..000000000 --- a/desmume/src/windows/wx/include/wx/html/htmlwin.h +++ /dev/null @@ -1,651 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: htmlwin.h -// Purpose: wxHtmlWindow class for parsing & displaying HTML -// Author: Vaclav Slavik -// RCS-ID: $Id: htmlwin.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HTMLWIN_H_ -#define _WX_HTMLWIN_H_ - -#include "wx/defs.h" -#if wxUSE_HTML - -#include "wx/window.h" -#include "wx/scrolwin.h" -#include "wx/config.h" -#include "wx/stopwatch.h" -#include "wx/html/winpars.h" -#include "wx/html/htmlcell.h" -#include "wx/filesys.h" -#include "wx/html/htmlfilt.h" -#include "wx/filename.h" -#include "wx/bitmap.h" - -class wxHtmlProcessor; -class wxHtmlWinModule; -class wxHtmlHistoryArray; -class wxHtmlProcessorList; -class WXDLLIMPEXP_FWD_HTML wxHtmlWinAutoScrollTimer; -class WXDLLIMPEXP_FWD_HTML wxHtmlCellEvent; -class WXDLLIMPEXP_FWD_HTML wxHtmlLinkEvent; - - -// wxHtmlWindow flags: -#define wxHW_SCROLLBAR_NEVER 0x0002 -#define wxHW_SCROLLBAR_AUTO 0x0004 -#define wxHW_NO_SELECTION 0x0008 - -#define wxHW_DEFAULT_STYLE wxHW_SCROLLBAR_AUTO - -/// Enum for wxHtmlWindow::OnOpeningURL and wxHtmlWindowInterface::OnOpeningURL -enum wxHtmlOpeningStatus -{ - /// Open the requested URL - wxHTML_OPEN, - /// Do not open the URL - wxHTML_BLOCK, - /// Redirect to another URL (returned from OnOpeningURL) - wxHTML_REDIRECT -}; - -/** - Abstract interface to a HTML rendering window (such as wxHtmlWindow or - wxHtmlListBox) that is passed to wxHtmlWinParser. It encapsulates all - communication from the parser to the window. - */ -class WXDLLIMPEXP_HTML wxHtmlWindowInterface -{ -public: - /// Ctor - wxHtmlWindowInterface() {} - virtual ~wxHtmlWindowInterface() {} - - /** - Called by the parser to set window's title to given text. - */ - virtual void SetHTMLWindowTitle(const wxString& title) = 0; - - /** - Called when a link is clicked. - - @param link information about the clicked link - */ - virtual void OnHTMLLinkClicked(const wxHtmlLinkInfo& link) = 0; - - /** - Called when the parser needs to open another URL (e.g. an image). - - @param type Type of the URL request (e.g. image) - @param url URL the parser wants to open - @param redirect If the return value is wxHTML_REDIRECT, then the - URL to redirect to will be stored in this variable - (the pointer must never be NULL) - - @return indicator of how to treat the request - */ - virtual wxHtmlOpeningStatus OnHTMLOpeningURL(wxHtmlURLType type, - const wxString& url, - wxString *redirect) const = 0; - - /** - Converts coordinates @a pos relative to given @a cell to - physical coordinates in the window. - */ - virtual wxPoint HTMLCoordsToWindow(wxHtmlCell *cell, - const wxPoint& pos) const = 0; - - /// Returns the window used for rendering (may be NULL). - virtual wxWindow* GetHTMLWindow() = 0; - - /// Returns background colour to use by default. - virtual wxColour GetHTMLBackgroundColour() const = 0; - - /// Sets window's background to colour @a clr. - virtual void SetHTMLBackgroundColour(const wxColour& clr) = 0; - - /// Sets window's background to given bitmap. - virtual void SetHTMLBackgroundImage(const wxBitmap& bmpBg) = 0; - - /// Sets status bar text. - virtual void SetHTMLStatusText(const wxString& text) = 0; - - /// Type of mouse cursor - enum HTMLCursor - { - /// Standard mouse cursor (typically an arrow) - HTMLCursor_Default, - /// Cursor shown over links - HTMLCursor_Link, - /// Cursor shown over selectable text - HTMLCursor_Text - }; - - /** - Returns mouse cursor of given @a type. - */ - virtual wxCursor GetHTMLCursor(HTMLCursor type) const = 0; -}; - -/** - Helper class that implements part of mouse handling for wxHtmlWindow and - wxHtmlListBox. Cursor changes and clicking on links are handled, text - selection is not. - */ -class WXDLLIMPEXP_HTML wxHtmlWindowMouseHelper -{ -protected: - /** - Ctor. - - @param iface Interface to the owner window. - */ - wxHtmlWindowMouseHelper(wxHtmlWindowInterface *iface); - - /** - Virtual dtor. - - It is not really needed in this case but at leats it prevents gcc from - complaining about its absence. - */ - virtual ~wxHtmlWindowMouseHelper() { } - - /// Returns true if the mouse moved since the last call to HandleIdle - bool DidMouseMove() const { return m_tmpMouseMoved; } - - /// Call this from EVT_MOTION event handler - void HandleMouseMoved(); - - /** - Call this from EVT_LEFT_UP handler (or, alternatively, EVT_LEFT_DOWN). - - @param rootCell HTML cell inside which the click occured. This doesn't - have to be the leaf cell, it can be e.g. toplevel - container, but the mouse must be inside the container's - area, otherwise the event would be ignored. - @param pos Mouse position in coordinates relative to @a cell - @param event The event that triggered the call - */ - bool HandleMouseClick(wxHtmlCell *rootCell, - const wxPoint& pos, const wxMouseEvent& event); - - /** - Call this from OnInternalIdle of the HTML displaying window. Handles - mouse movements and must be used together with HandleMouseMoved. - - @param rootCell HTML cell inside which the click occured. This doesn't - have to be the leaf cell, it can be e.g. toplevel - container, but the mouse must be inside the container's - area, otherwise the event would be ignored. - @param pos Current mouse position in coordinates relative to - @a cell - */ - void HandleIdle(wxHtmlCell *rootCell, const wxPoint& pos); - - /** - Called by HandleIdle when the mouse hovers over a cell. Default - behaviour is to do nothing. - - @param cell the cell the mouse is over - @param x, y coordinates of mouse relative to the cell - */ - virtual void OnCellMouseHover(wxHtmlCell *cell, wxCoord x, wxCoord y); - - /** - Called by HandleMouseClick when the user clicks on a cell. - Default behavior is to call wxHtmlWindowInterface::OnLinkClicked() - if this cell corresponds to a hypertext link. - - @param cell the cell the mouse is over - @param x, y coordinates of mouse relative to the cell - @param event The event that triggered the call - - - @return true if a link was clicked, false otherwise. - */ - virtual bool OnCellClicked(wxHtmlCell *cell, - wxCoord x, wxCoord y, - const wxMouseEvent& event); - -protected: - // this flag indicates if the mouse moved (used by HandleIdle) - bool m_tmpMouseMoved; - // contains last link name - wxHtmlLinkInfo *m_tmpLastLink; - // contains the last (terminal) cell which contained the mouse - wxHtmlCell *m_tmpLastCell; - -private: - wxHtmlWindowInterface *m_interface; -}; - -// ---------------------------------------------------------------------------- -// wxHtmlWindow -// (This is probably the only class you will directly use.) -// Purpose of this class is to display HTML page (either local -// file or downloaded via HTTP protocol) in a window. Width of -// window is constant - given in constructor - virtual height -// is changed dynamicly depending on page size. Once the -// window is created you can set it's content by calling -// SetPage(text) or LoadPage(filename). -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlWindow : public wxScrolledWindow, - public wxHtmlWindowInterface, - public wxHtmlWindowMouseHelper -{ - DECLARE_DYNAMIC_CLASS(wxHtmlWindow) - friend class wxHtmlWinModule; - -public: - wxHtmlWindow() : wxHtmlWindowMouseHelper(this) { Init(); } - wxHtmlWindow(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxHW_DEFAULT_STYLE, - const wxString& name = wxT("htmlWindow")) - : wxHtmlWindowMouseHelper(this) - { - Init(); - Create(parent, id, pos, size, style, name); - } - virtual ~wxHtmlWindow(); - - bool Create(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxHW_SCROLLBAR_AUTO, - const wxString& name = wxT("htmlWindow")); - - // Set HTML page and display it. !! source is HTML document itself, - // it is NOT address/filename of HTML document. If you want to - // specify document location, use LoadPage() istead - // Return value : false if an error occurred, true otherwise - virtual bool SetPage(const wxString& source); - - // Append to current page - bool AppendToPage(const wxString& source); - - // Load HTML page from given location. Location can be either - // a) /usr/wxGTK2/docs/html/wx.htm - // b) http://www.somewhere.uk/document.htm - // c) ftp://ftp.somesite.cz/pub/something.htm - // In case there is no prefix (http:,ftp:), the method - // will try to find it itself (1. local file, then http or ftp) - // After the page is loaded, the method calls SetPage() to display it. - // Note : you can also use path relative to previously loaded page - // Return value : same as SetPage - virtual bool LoadPage(const wxString& location); - - // Loads HTML page from file - bool LoadFile(const wxFileName& filename); - - // Returns full location of opened page - wxString GetOpenedPage() const {return m_OpenedPage;} - // Returns anchor within opened page - wxString GetOpenedAnchor() const {return m_OpenedAnchor;} - // Returns of opened page or empty string otherwise - wxString GetOpenedPageTitle() const {return m_OpenedPageTitle;} - - // Sets frame in which page title will be displayed. Format is format of - // frame title, e.g. "HtmlHelp : %s". It must contain exactly one %s - void SetRelatedFrame(wxFrame* frame, const wxString& format); - wxFrame* GetRelatedFrame() const {return m_RelatedFrame;} - -#if wxUSE_STATUSBAR - // After(!) calling SetRelatedFrame, this sets statusbar slot where messages - // will be displayed. Default is -1 = no messages. - void SetRelatedStatusBar(int bar); -#endif // wxUSE_STATUSBAR - - // Sets fonts to be used when displaying HTML page. - void SetFonts(const wxString& normal_face, const wxString& fixed_face, - const int *sizes = NULL); - - // Sets font sizes to be relative to the given size or the system - // default size; use either specified or default font - void SetStandardFonts(int size = -1, - const wxString& normal_face = wxEmptyString, - const wxString& fixed_face = wxEmptyString); - - // Sets space between text and window borders. - void SetBorders(int b) {m_Borders = b;} - - // Sets the bitmap to use for background (currnetly it will be tiled, - // when/if we have CSS support we could add other possibilities...) - void SetBackgroundImage(const wxBitmap& bmpBg) { m_bmpBg = bmpBg; } - - // Saves custom settings into cfg config. it will use the path 'path' - // if given, otherwise it will save info into currently selected path. - // saved values : things set by SetFonts, SetBorders. - virtual void ReadCustomization(wxConfigBase *cfg, wxString path = wxEmptyString); - // ... - virtual void WriteCustomization(wxConfigBase *cfg, wxString path = wxEmptyString); - - // Goes to previous/next page (in browsing history) - // Returns true if successful, false otherwise - bool HistoryBack(); - bool HistoryForward(); - bool HistoryCanBack(); - bool HistoryCanForward(); - // Resets history - void HistoryClear(); - - // Returns pointer to conteiners/cells structure. - // It should be used ONLY when printing - wxHtmlContainerCell* GetInternalRepresentation() const {return m_Cell;} - - // Adds input filter - static void AddFilter(wxHtmlFilter *filter); - - // Returns a pointer to the parser. - wxHtmlWinParser *GetParser() const { return m_Parser; } - - // Adds HTML processor to this instance of wxHtmlWindow: - void AddProcessor(wxHtmlProcessor *processor); - // Adds HTML processor to wxHtmlWindow class as whole: - static void AddGlobalProcessor(wxHtmlProcessor *processor); - - - // -- Callbacks -- - - // Sets the title of the window - // (depending on the information passed to SetRelatedFrame() method) - virtual void OnSetTitle(const wxString& title); - - // Called when user clicked on hypertext link. Default behavior is to - // call LoadPage(loc) - virtual void OnLinkClicked(const wxHtmlLinkInfo& link); - - // Called when wxHtmlWindow wants to fetch data from an URL (e.g. when - // loading a page or loading an image). The data are downloaded if and only if - // OnOpeningURL returns true. If OnOpeningURL returns wxHTML_REDIRECT, - // it must set *redirect to the new URL - virtual wxHtmlOpeningStatus OnOpeningURL(wxHtmlURLType WXUNUSED(type), - const wxString& WXUNUSED(url), - wxString *WXUNUSED(redirect)) const - { return wxHTML_OPEN; } - -#if wxUSE_CLIPBOARD - // Helper functions to select parts of page: - void SelectWord(const wxPoint& pos); - void SelectLine(const wxPoint& pos); - void SelectAll(); - - // Convert selection to text: - wxString SelectionToText() { return DoSelectionToText(m_selection); } - - // Converts current page to text: - wxString ToText(); -#endif // wxUSE_CLIPBOARD - - virtual void OnInternalIdle(); - - /// Returns standard HTML cursor as used by wxHtmlWindow - static wxCursor GetDefaultHTMLCursor(HTMLCursor type); - -protected: - void Init(); - - // Scrolls to anchor of this name. (Anchor is #news - // or #features etc. it is part of address sometimes: - // http://www.ms.mff.cuni.cz/~vsla8348/wxhtml/index.html#news) - // Return value : true if anchor exists, false otherwise - bool ScrollToAnchor(const wxString& anchor); - - // Prepares layout (= fill m_PosX, m_PosY for fragments) based on - // actual size of window. This method also setup scrollbars - void CreateLayout(); - - void OnEraseBackground(wxEraseEvent& event); - void OnPaint(wxPaintEvent& event); - void OnSize(wxSizeEvent& event); - void OnMouseMove(wxMouseEvent& event); - void OnMouseDown(wxMouseEvent& event); - void OnMouseUp(wxMouseEvent& event); -#if wxUSE_CLIPBOARD - void OnKeyUp(wxKeyEvent& event); - void OnDoubleClick(wxMouseEvent& event); - void OnCopy(wxCommandEvent& event); - void OnClipboardEvent(wxClipboardTextEvent& event); - void OnMouseEnter(wxMouseEvent& event); - void OnMouseLeave(wxMouseEvent& event); - void OnMouseCaptureLost(wxMouseCaptureLostEvent& event); -#endif // wxUSE_CLIPBOARD - - // Returns new filter (will be stored into m_DefaultFilter variable) - virtual wxHtmlFilter *GetDefaultFilter() {return new wxHtmlFilterPlainText;} - - // cleans static variables - static void CleanUpStatics(); - - // Returns true if text selection is enabled (wxClipboard must be available - // and wxHW_NO_SELECTION not used) - bool IsSelectionEnabled() const; - - enum ClipboardType - { - Primary, - Secondary - }; - - // Copies selection to clipboard if the clipboard support is available - // - // returns true if anything was copied to clipboard, false otherwise - bool CopySelection(ClipboardType t = Secondary); - -#if wxUSE_CLIPBOARD - // Automatic scrolling during selection: - void StopAutoScrolling(); -#endif // wxUSE_CLIPBOARD - - wxString DoSelectionToText(wxHtmlSelection *sel); - -public: - // wxHtmlWindowInterface methods: - virtual void SetHTMLWindowTitle(const wxString& title); - virtual void OnHTMLLinkClicked(const wxHtmlLinkInfo& link); - virtual wxHtmlOpeningStatus OnHTMLOpeningURL(wxHtmlURLType type, - const wxString& url, - wxString *redirect) const; - virtual wxPoint HTMLCoordsToWindow(wxHtmlCell *cell, - const wxPoint& pos) const; - virtual wxWindow* GetHTMLWindow(); - virtual wxColour GetHTMLBackgroundColour() const; - virtual void SetHTMLBackgroundColour(const wxColour& clr); - virtual void SetHTMLBackgroundImage(const wxBitmap& bmpBg); - virtual void SetHTMLStatusText(const wxString& text); - virtual wxCursor GetHTMLCursor(HTMLCursor type) const; - - // implementation of SetPage() - bool DoSetPage(const wxString& source); - -protected: - // This is pointer to the first cell in parsed data. (Note: the first cell - // is usually top one = all other cells are sub-cells of this one) - wxHtmlContainerCell *m_Cell; - // parser which is used to parse HTML input. - // Each wxHtmlWindow has it's own parser because sharing one global - // parser would be problematic (because of reentrancy) - wxHtmlWinParser *m_Parser; - // contains name of actualy opened page or empty string if no page opened - wxString m_OpenedPage; - // contains name of current anchor within m_OpenedPage - wxString m_OpenedAnchor; - // contains title of actualy opened page or empty string if no <TITLE> tag - wxString m_OpenedPageTitle; - // class for opening files (file system) - wxFileSystem* m_FS; - - wxFrame *m_RelatedFrame; - wxString m_TitleFormat; -#if wxUSE_STATUSBAR - // frame in which page title should be displayed & number of it's statusbar - // reserved for usage with this html window - int m_RelatedStatusBar; -#endif // wxUSE_STATUSBAR - - // borders (free space between text and window borders) - // defaults to 10 pixels. - int m_Borders; - - // current text selection or NULL - wxHtmlSelection *m_selection; - - // true if the user is dragging mouse to select text - bool m_makingSelection; - -#if wxUSE_CLIPBOARD - // time of the last doubleclick event, used to detect tripleclicks - // (tripleclicks are used to select whole line): - wxMilliClock_t m_lastDoubleClick; - - // helper class to automatically scroll the window if the user is selecting - // text and the mouse leaves wxHtmlWindow: - wxHtmlWinAutoScrollTimer *m_timerAutoScroll; -#endif // wxUSE_CLIPBOARD - -private: - // window content for double buffered rendering: - wxBitmap *m_backBuffer; - - // background image, may be invalid - wxBitmap m_bmpBg; - - // variables used when user is selecting text - wxPoint m_tmpSelFromPos; - wxHtmlCell *m_tmpSelFromCell; - - // if >0 contents of the window is not redrawn - // (in order to avoid ugly blinking) - int m_tmpCanDrawLocks; - - // list of HTML filters - static wxList m_Filters; - // this filter is used when no filter is able to read some file - static wxHtmlFilter *m_DefaultFilter; - - // html processors array: - wxHtmlProcessorList *m_Processors; - static wxHtmlProcessorList *m_GlobalProcessors; - - // browser history - wxHtmlHistoryArray *m_History; - int m_HistoryPos; - // if this FLAG is false, items are not added to history - bool m_HistoryOn; - - // a flag set if we need to erase background in OnPaint() (otherwise this - // is supposed to have been done in OnEraseBackground()) - bool m_eraseBgInOnPaint; - - // standard mouse cursors - static wxCursor *ms_cursorLink; - static wxCursor *ms_cursorText; - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxHtmlWindow) -}; - - - - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_HTML, - wxEVT_COMMAND_HTML_CELL_CLICKED, 1000) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_HTML, - wxEVT_COMMAND_HTML_CELL_HOVER, 1001) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_HTML, - wxEVT_COMMAND_HTML_LINK_CLICKED, 1002) -END_DECLARE_EVENT_TYPES() - - -/*! - * Html cell window event - */ - -class WXDLLIMPEXP_HTML wxHtmlCellEvent : public wxCommandEvent -{ -public: - wxHtmlCellEvent() {} - wxHtmlCellEvent(wxEventType commandType, int id, - wxHtmlCell *cell, const wxPoint &pt, - const wxMouseEvent &ev) - : wxCommandEvent(commandType, id) - { - m_cell = cell; - m_pt = pt; - m_mouseEvent = ev; - m_bLinkWasClicked = false; - } - - wxHtmlCell* GetCell() const { return m_cell; } - wxPoint GetPoint() const { return m_pt; } - wxMouseEvent GetMouseEvent() const { return m_mouseEvent; } - - void SetLinkClicked(bool linkclicked) { m_bLinkWasClicked=linkclicked; } - bool GetLinkClicked() const { return m_bLinkWasClicked; } - - // default copy ctor, assignment operator and dtor are ok - virtual wxEvent *Clone() const { return new wxHtmlCellEvent(*this); } - -private: - wxHtmlCell *m_cell; - wxMouseEvent m_mouseEvent; - wxPoint m_pt; - - bool m_bLinkWasClicked; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHtmlCellEvent) -}; - - - -/*! - * Html link event - */ - -class WXDLLIMPEXP_HTML wxHtmlLinkEvent : public wxCommandEvent -{ -public: - wxHtmlLinkEvent() {} - wxHtmlLinkEvent(int id, const wxHtmlLinkInfo &linkinfo) - : wxCommandEvent(wxEVT_COMMAND_HTML_LINK_CLICKED, id) - { - m_linkInfo = linkinfo; - } - - const wxHtmlLinkInfo &GetLinkInfo() const { return m_linkInfo; } - - // default copy ctor, assignment operator and dtor are ok - virtual wxEvent *Clone() const { return new wxHtmlLinkEvent(*this); } - -private: - wxHtmlLinkInfo m_linkInfo; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHtmlLinkEvent) -}; - - -typedef void (wxEvtHandler::*wxHtmlCellEventFunction)(wxHtmlCellEvent&); -typedef void (wxEvtHandler::*wxHtmlLinkEventFunction)(wxHtmlLinkEvent&); - -#define wxHtmlCellEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxHtmlCellEventFunction, &func) -#define wxHtmlLinkEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxHtmlLinkEventFunction, &func) - -#define EVT_HTML_CELL_CLICKED(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_HTML_CELL_CLICKED, id, wxHtmlCellEventHandler(fn)) -#define EVT_HTML_CELL_HOVER(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_HTML_CELL_HOVER, id, wxHtmlCellEventHandler(fn)) -#define EVT_HTML_LINK_CLICKED(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_HTML_LINK_CLICKED, id, wxHtmlLinkEventHandler(fn)) - - -#endif // wxUSE_HTML - -#endif // _WX_HTMLWIN_H_ - diff --git a/desmume/src/windows/wx/include/wx/html/htmprint.h b/desmume/src/windows/wx/include/wx/html/htmprint.h deleted file mode 100644 index ecc93e66e..000000000 --- a/desmume/src/windows/wx/include/wx/html/htmprint.h +++ /dev/null @@ -1,298 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: htmprint.h -// Purpose: html printing classes -// Author: Vaclav Slavik -// Created: 25/09/99 -// RCS-ID: $Id: htmprint.h 47862 2007-08-03 08:50:49Z JS $ -// Copyright: (c) Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HTMPRINT_H_ -#define _WX_HTMPRINT_H_ - -#include "wx/defs.h" - -#if wxUSE_HTML & wxUSE_PRINTING_ARCHITECTURE - -#include "wx/html/htmlcell.h" -#include "wx/html/winpars.h" -#include "wx/html/htmlfilt.h" - -#include "wx/print.h" -#include "wx/printdlg.h" - -#include <limits.h> // INT_MAX - -//-------------------------------------------------------------------------------- -// wxHtmlDCRenderer -// This class is capable of rendering HTML into specified -// portion of DC -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlDCRenderer : public wxObject -{ -public: - wxHtmlDCRenderer(); - virtual ~wxHtmlDCRenderer(); - - // Following 3 methods *must* be called before any call to Render: - - // Assign DC to this render - void SetDC(wxDC *dc, double pixel_scale = 1.0); - - // Sets size of output rectangle, in pixels. Note that you *can't* change - // width of the rectangle between calls to Render! (You can freely change height.) - void SetSize(int width, int height); - - // Sets the text to be displayed. - // Basepath is base directory (html string would be stored there if it was in - // file). It is used to determine path for loading images, for example. - // isdir is false if basepath is filename, true if it is directory name - // (see wxFileSystem for detailed explanation) - void SetHtmlText(const wxString& html, const wxString& basepath = wxEmptyString, bool isdir = true); - - // Sets fonts to be used when displaying HTML page. (if size null then default sizes used). - void SetFonts(const wxString& normal_face, const wxString& fixed_face, const int *sizes = NULL); - - // Sets font sizes to be relative to the given size or the system - // default size; use either specified or default font - void SetStandardFonts(int size = -1, - const wxString& normal_face = wxEmptyString, - const wxString& fixed_face = wxEmptyString); - - // [x,y] is position of upper-left corner of printing rectangle (see SetSize) - // from is y-coordinate of the very first visible cell - // to is y-coordinate of the next following page break, if any - // Returned value is y coordinate of first cell than didn't fit onto page. - // Use this value as 'from' in next call to Render in order to print multiple pages - // document - // If dont_render is TRUE then nothing is rendered into DC and it only counts - // pixels and return y coord of the next page - // - // known_pagebreaks and number_of_pages are used only when counting pages; - // otherwise, their default values should be used. Their purpose is to - // support pagebreaks using a subset of CSS2's <DIV>. The <DIV> handler - // needs to know what pagebreaks have already been set so that it doesn't - // set the same pagebreak twice. - // - // CAUTION! Render() changes DC's user scale and does NOT restore it! - int Render(int x, int y, wxArrayInt& known_pagebreaks, int from = 0, - int dont_render = FALSE, int to = INT_MAX); - - // returns total height of the html document - // (compare Render's return value with this) - int GetTotalHeight(); - -private: - wxDC *m_DC; - wxHtmlWinParser *m_Parser; - wxFileSystem *m_FS; - wxHtmlContainerCell *m_Cells; - int m_MaxWidth, m_Width, m_Height; - - DECLARE_NO_COPY_CLASS(wxHtmlDCRenderer) -}; - - - - - -enum { - wxPAGE_ODD, - wxPAGE_EVEN, - wxPAGE_ALL -}; - - - -//-------------------------------------------------------------------------------- -// wxHtmlPrintout -// This class is derived from standard wxWidgets printout class -// and is used to print HTML documents. -//-------------------------------------------------------------------------------- - - -class WXDLLIMPEXP_HTML wxHtmlPrintout : public wxPrintout -{ -public: - wxHtmlPrintout(const wxString& title = wxT("Printout")); - virtual ~wxHtmlPrintout(); - - void SetHtmlText(const wxString& html, const wxString &basepath = wxEmptyString, bool isdir = true); - // prepares the class for printing this html document. - // Must be called before using the class, in fact just after constructor - // - // basepath is base directory (html string would be stored there if it was in - // file). It is used to determine path for loading images, for example. - // isdir is false if basepath is filename, true if it is directory name - // (see wxFileSystem for detailed explanation) - - void SetHtmlFile(const wxString &htmlfile); - // same as SetHtmlText except that it takes regular file as the parameter - - void SetHeader(const wxString& header, int pg = wxPAGE_ALL); - void SetFooter(const wxString& footer, int pg = wxPAGE_ALL); - // sets header/footer for the document. The argument is interpreted as HTML document. - // You can use macros in it: - // @PAGENUM@ is replaced by page number - // @PAGESCNT@ is replaced by total number of pages - // - // pg is one of wxPAGE_ODD, wxPAGE_EVEN and wx_PAGE_ALL constants. - // You can set different header/footer for odd and even pages - - // Sets fonts to be used when displaying HTML page. (if size null then default sizes used). - void SetFonts(const wxString& normal_face, const wxString& fixed_face, const int *sizes = NULL); - - // Sets font sizes to be relative to the given size or the system - // default size; use either specified or default font - void SetStandardFonts(int size = -1, - const wxString& normal_face = wxEmptyString, - const wxString& fixed_face = wxEmptyString); - - void SetMargins(float top = 25.2, float bottom = 25.2, float left = 25.2, float right = 25.2, - float spaces = 5); - // sets margins in milimeters. Defaults to 1 inch for margins and 0.5cm for space - // between text and header and/or footer - - // wxPrintout stuff: - bool OnPrintPage(int page); - bool HasPage(int page); - void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo); - bool OnBeginDocument(int startPage, int endPage); - void OnPreparePrinting(); - - // Adds input filter - static void AddFilter(wxHtmlFilter *filter); - - // Cleanup - static void CleanUpStatics(); - -private: - - void RenderPage(wxDC *dc, int page); - // renders one page into dc - wxString TranslateHeader(const wxString& instr, int page); - // substitute @PAGENUM@ and @PAGESCNT@ by real values - void CountPages(); - // counts pages and fills m_NumPages and m_PageBreaks - - -private: - int m_NumPages; - //int m_PageBreaks[wxHTML_PRINT_MAX_PAGES]; - wxArrayInt m_PageBreaks; - - wxString m_Document, m_BasePath; - bool m_BasePathIsDir; - wxString m_Headers[2], m_Footers[2]; - - int m_HeaderHeight, m_FooterHeight; - wxHtmlDCRenderer *m_Renderer, *m_RendererHdr; - float m_MarginTop, m_MarginBottom, m_MarginLeft, m_MarginRight, m_MarginSpace; - - // list of HTML filters - static wxList m_Filters; - - DECLARE_NO_COPY_CLASS(wxHtmlPrintout) -}; - - - - - -//-------------------------------------------------------------------------------- -// wxHtmlEasyPrinting -// This class provides very simple interface to printing -// architecture. It allows you to print HTML documents only -// with very few commands. -// -// Note : do not create this class on stack only. -// You should create an instance on app startup and -// use this instance for all printing. Why? The class -// stores page&printer settings in it. -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlEasyPrinting : public wxObject -{ -public: - wxHtmlEasyPrinting(const wxString& name = wxT("Printing"), wxWindow *parentWindow = NULL); - virtual ~wxHtmlEasyPrinting(); - - bool PreviewFile(const wxString &htmlfile); - bool PreviewText(const wxString &htmltext, const wxString& basepath = wxEmptyString); - // Preview file / html-text for printing - // (and offers printing) - // basepath is base directory for opening subsequent files (e.g. from <img> tag) - - bool PrintFile(const wxString &htmlfile); - bool PrintText(const wxString &htmltext, const wxString& basepath = wxEmptyString); - // Print file / html-text w/o preview - - void PageSetup(); - // pop up printer or page setup dialog - - void SetHeader(const wxString& header, int pg = wxPAGE_ALL); - void SetFooter(const wxString& footer, int pg = wxPAGE_ALL); - // sets header/footer for the document. The argument is interpreted as HTML document. - // You can use macros in it: - // @PAGENUM@ is replaced by page number - // @PAGESCNT@ is replaced by total number of pages - // - // pg is one of wxPAGE_ODD, wxPAGE_EVEN and wx_PAGE_ALL constants. - // You can set different header/footer for odd and even pages - - void SetFonts(const wxString& normal_face, const wxString& fixed_face, const int *sizes = 0); - // Sets fonts to be used when displaying HTML page. (if size null then default sizes used) - - // Sets font sizes to be relative to the given size or the system - // default size; use either specified or default font - void SetStandardFonts(int size = -1, - const wxString& normal_face = wxEmptyString, - const wxString& fixed_face = wxEmptyString); - - wxPrintData *GetPrintData(); - wxPageSetupDialogData *GetPageSetupData() {return m_PageSetupData;} - // return page setting data objects. - // (You can set their parameters.) - -#if wxABI_VERSION >= 20805 - wxWindow* GetParentWindow() const { return m_ParentWindow; } - // get the parent window - void SetParentWindow(wxWindow* window) { m_ParentWindow = window; } - // set the parent window -#endif - -protected: - virtual wxHtmlPrintout *CreatePrintout(); - virtual bool DoPreview(wxHtmlPrintout *printout1, wxHtmlPrintout *printout2); - virtual bool DoPrint(wxHtmlPrintout *printout); - -private: - wxPrintData *m_PrintData; - wxPageSetupDialogData *m_PageSetupData; - wxString m_Name; - int m_FontsSizesArr[7]; - int *m_FontsSizes; - wxString m_FontFaceFixed, m_FontFaceNormal; - - enum FontMode - { - FontMode_Explicit, - FontMode_Standard - }; - FontMode m_fontMode; - - wxString m_Headers[2], m_Footers[2]; - wxWindow *m_ParentWindow; - - DECLARE_NO_COPY_CLASS(wxHtmlEasyPrinting) -}; - - - - -#endif // wxUSE_HTML & wxUSE_PRINTING_ARCHITECTURE - -#endif // _WX_HTMPRINT_H_ - diff --git a/desmume/src/windows/wx/include/wx/html/m_templ.h b/desmume/src/windows/wx/include/wx/html/m_templ.h deleted file mode 100644 index d75346c65..000000000 --- a/desmume/src/windows/wx/include/wx/html/m_templ.h +++ /dev/null @@ -1,84 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: m_templ.h -// Purpose: Modules template file -// Author: Vaclav Slavik -// RCS-ID: $Id: m_templ.h 30098 2004-10-26 10:32:38Z VS $ -// Copyright: (c) Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -/* - -DESCRIPTION: -This is set of macros for easier writing of tag handlers. How to use it? -See mod_fonts.cpp for example... - -Attention! This is quite strange C++ bastard. Before using it, -I STRONGLY recommend reading and understanding these macros!! - -*/ - - -#ifndef _WX_M_TEMPL_H_ -#define _WX_M_TEMPL_H_ - -#include "wx/defs.h" - -#if wxUSE_HTML - -#include "wx/html/winpars.h" - -#define TAG_HANDLER_BEGIN(name,tags) \ - class wxHTML_Handler_##name : public wxHtmlWinTagHandler \ - { \ - public: \ - wxString GetSupportedTags() {return wxT(tags);} - - - -#define TAG_HANDLER_VARS \ - private: - -#define TAG_HANDLER_CONSTR(name) \ - public: \ - wxHTML_Handler_##name () : wxHtmlWinTagHandler() - - -#define TAG_HANDLER_PROC(varib) \ - public: \ - bool HandleTag(const wxHtmlTag& varib) - - - -#define TAG_HANDLER_END(name) \ - }; - - - - -#define TAGS_MODULE_BEGIN(name) \ - class wxHTML_Module##name : public wxHtmlTagsModule \ - { \ - DECLARE_DYNAMIC_CLASS(wxHTML_Module##name ) \ - public: \ - void FillHandlersTable(wxHtmlWinParser *parser) \ - { - - - - -#define TAGS_MODULE_ADD(handler) \ - parser->AddTagHandler(new wxHTML_Handler_##handler); - - - - -#define TAGS_MODULE_END(name) \ - } \ - }; \ - IMPLEMENT_DYNAMIC_CLASS(wxHTML_Module##name , wxHtmlTagsModule) - - - -#endif -#endif diff --git a/desmume/src/windows/wx/include/wx/html/webkit.h b/desmume/src/windows/wx/include/wx/html/webkit.h deleted file mode 100644 index 16bd4fdf0..000000000 --- a/desmume/src/windows/wx/include/wx/html/webkit.h +++ /dev/null @@ -1,231 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/html/webkit.h -// Purpose: wxWebKitCtrl - embeddable web kit control -// Author: Jethro Grassie / Kevin Ollivier -// Modified by: -// Created: 2004-4-16 -// RCS-ID: $Id: webkit.h 53798 2008-05-28 06:12:34Z RD $ -// Copyright: (c) Jethro Grassie / Kevin Ollivier -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WEBKIT_H -#define _WX_WEBKIT_H - -#if wxUSE_WEBKIT - -#if !defined(__WXMAC__) && !defined(__WXCOCOA__) -#error "wxWebKitCtrl not implemented for this platform" -#endif - -#include "wx/control.h" - -// ---------------------------------------------------------------------------- -// Web Kit Control -// ---------------------------------------------------------------------------- - -class wxWebKitCtrl : public wxControl -{ -public: - DECLARE_DYNAMIC_CLASS(wxWebKitCtrl) - - wxWebKitCtrl() {}; - wxWebKitCtrl(wxWindow *parent, - wxWindowID winID, - const wxString& strURL, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxT("webkitctrl")) - { - Create(parent, winID, strURL, pos, size, style, validator, name); - }; - bool Create(wxWindow *parent, - wxWindowID winID, - const wxString& strURL, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxT("webkitctrl")); - virtual ~wxWebKitCtrl(); - - void LoadURL(const wxString &url); - - bool CanGoBack(); - bool CanGoForward(); - bool GoBack(); - bool GoForward(); - void Reload(); - void Stop(); - bool CanGetPageSource(); - wxString GetPageSource(); - void SetPageSource(const wxString& source, const wxString& baseUrl = wxEmptyString); - wxString GetPageURL(){ return m_currentURL; } - void SetPageTitle(const wxString& title) { m_pageTitle = title; } - wxString GetPageTitle(){ return m_pageTitle; } - - // since these worked in 2.6, add wrappers - void SetTitle(const wxString& title) { SetPageTitle(title); } - wxString GetTitle() { return GetPageTitle(); } - - wxString GetSelection(); - - bool CanIncreaseTextSize(); - void IncreaseTextSize(); - bool CanDecreaseTextSize(); - void DecreaseTextSize(); - - void Print(bool showPrompt=FALSE); - - void MakeEditable(bool enable=TRUE); - bool IsEditable(); - - wxString RunScript(const wxString& javascript); - - void SetScrollPos(int pos); - int GetScrollPos(); - - //we need to resize the webview when the control size changes - void OnSize(wxSizeEvent &event); - void OnMove(wxMoveEvent &event); - void OnMouseEvents(wxMouseEvent &event); -protected: - DECLARE_EVENT_TABLE() - void MacVisibilityChanged(); - -private: - wxWindow *m_parent; - wxWindowID m_windowID; - wxString m_currentURL; - 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. -}; - -// ---------------------------------------------------------------------------- -// Web Kit Events -// ---------------------------------------------------------------------------- - -enum { - wxWEBKIT_STATE_START = 1, - wxWEBKIT_STATE_NEGOTIATING = 2, - wxWEBKIT_STATE_REDIRECTING = 4, - wxWEBKIT_STATE_TRANSFERRING = 8, - wxWEBKIT_STATE_STOP = 16, - wxWEBKIT_STATE_FAILED = 32 -}; - -enum { - wxWEBKIT_NAV_LINK_CLICKED = 1, - wxWEBKIT_NAV_BACK_NEXT = 2, - wxWEBKIT_NAV_FORM_SUBMITTED = 4, - wxWEBKIT_NAV_RELOAD = 8, - wxWEBKIT_NAV_FORM_RESUBMITTED = 16, - wxWEBKIT_NAV_OTHER = 32 - -}; - - - -class wxWebKitBeforeLoadEvent : public wxCommandEvent -{ - DECLARE_DYNAMIC_CLASS( wxWebKitBeforeLoadEvent ) - -public: - bool IsCancelled() { return m_cancelled; } - void Cancel(bool cancel = true) { m_cancelled = cancel; } - wxString GetURL() { return m_url; } - void SetURL(const wxString& url) { m_url = url; } - void SetNavigationType(int navType) { m_navType = navType; } - int GetNavigationType() { return m_navType; } - - wxWebKitBeforeLoadEvent( wxWindow* win = (wxWindow*) NULL ); - wxEvent *Clone(void) const { return new wxWebKitBeforeLoadEvent(*this); } - -protected: - bool m_cancelled; - wxString m_url; - int m_navType; -}; - -class wxWebKitStateChangedEvent : public wxCommandEvent -{ - DECLARE_DYNAMIC_CLASS( wxWebKitStateChangedEvent ) - -public: - int GetState() { return m_state; } - void SetState(const int state) { m_state = state; } - wxString GetURL() { return m_url; } - void SetURL(const wxString& url) { m_url = url; } - - wxWebKitStateChangedEvent( wxWindow* win = (wxWindow*) NULL ); - wxEvent *Clone(void) const { return new wxWebKitStateChangedEvent(*this); } - -protected: - int m_state; - wxString m_url; -}; - - -#if wxABI_VERSION >= 20808 -class wxWebKitNewWindowEvent : public wxCommandEvent -{ - DECLARE_DYNAMIC_CLASS( wxWebViewNewWindowEvent ) -public: - wxString GetURL() const { return m_url; } - void SetURL(const wxString& url) { m_url = url; } - wxString GetTargetName() const { return m_targetName; } - void SetTargetName(const wxString& name) { m_targetName = name; } - - wxWebKitNewWindowEvent( wxWindow* win = (wxWindow*)(NULL)); - wxEvent *Clone(void) const { return new wxWebKitNewWindowEvent(*this); } - -private: - wxString m_url; - wxString m_targetName; -}; -#endif - -typedef void (wxEvtHandler::*wxWebKitStateChangedEventFunction)(wxWebKitStateChangedEvent&); -typedef void (wxEvtHandler::*wxWebKitBeforeLoadEventFunction)(wxWebKitBeforeLoadEvent&); -typedef void (wxEvtHandler::*wxWebKitNewWindowEventFunction)(wxWebKitNewWindowEvent&); - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_LOCAL_EVENT_TYPE(wxEVT_WEBKIT_BEFORE_LOAD, wxID_ANY) - DECLARE_LOCAL_EVENT_TYPE(wxEVT_WEBKIT_STATE_CHANGED, wxID_ANY) - DECLARE_LOCAL_EVENT_TYPE(wxEVT_WEBKIT_NEW_WINDOW, wxID_ANY) -END_DECLARE_EVENT_TYPES() - -#define EVT_WEBKIT_STATE_CHANGED(func) \ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBKIT_STATE_CHANGED, \ - wxID_ANY, \ - wxID_ANY, \ - (wxObjectEventFunction) \ - (wxWebKitStateChangedEventFunction) & func, \ - (wxObject *) NULL ), - -#define EVT_WEBKIT_BEFORE_LOAD(func) \ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBKIT_BEFORE_LOAD, \ - wxID_ANY, \ - wxID_ANY, \ - (wxObjectEventFunction) \ - (wxWebKitBeforeLoadEventFunction) & func, \ - (wxObject *) NULL ), - -#define EVT_WEBKIT_NEW_WINDOW(func) \ - DECLARE_EVENT_TABLE_ENTRY( wxEVT_WEBKIT_NEW_WINDOW, \ - wxID_ANY, \ - wxID_ANY, \ - (wxObjectEventFunction) \ - (wxWebKitNewWindowEventFunction) & func, \ - (wxObject *) NULL ), -#endif // wxUSE_WEBKIT - -#endif - // _WX_WEBKIT_H_ diff --git a/desmume/src/windows/wx/include/wx/html/winpars.h b/desmume/src/windows/wx/include/wx/html/winpars.h deleted file mode 100644 index 00ff54c40..000000000 --- a/desmume/src/windows/wx/include/wx/html/winpars.h +++ /dev/null @@ -1,292 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: winpars.h -// Purpose: wxHtmlWinParser class (parser to be used with wxHtmlWindow) -// Author: Vaclav Slavik -// RCS-ID: $Id: winpars.h 59260 2009-03-02 10:43:00Z VS $ -// Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WINPARS_H_ -#define _WX_WINPARS_H_ - -#include "wx/defs.h" -#if wxUSE_HTML - -#include "wx/module.h" -#include "wx/font.h" -#include "wx/html/htmlpars.h" -#include "wx/html/htmlcell.h" -#include "wx/encconv.h" - -class WXDLLIMPEXP_FWD_HTML wxHtmlWindow; -class WXDLLIMPEXP_FWD_HTML wxHtmlWindowInterface; -class WXDLLIMPEXP_FWD_HTML wxHtmlWinParser; -class WXDLLIMPEXP_FWD_HTML wxHtmlWinTagHandler; -class WXDLLIMPEXP_FWD_HTML wxHtmlTagsModule; -struct wxHtmlWinParser_TextParsingState; - - -//-------------------------------------------------------------------------------- -// wxHtmlWinParser -// This class is derived from wxHtmlParser and its mail goal -// is to parse HTML input so that it can be displayed in -// wxHtmlWindow. It uses special wxHtmlWinTagHandler. -//-------------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlWinParser : public wxHtmlParser -{ - DECLARE_ABSTRACT_CLASS(wxHtmlWinParser) - friend class wxHtmlWindow; - -public: - wxHtmlWinParser(wxHtmlWindowInterface *wndIface = NULL); - - virtual ~wxHtmlWinParser(); - - virtual void InitParser(const wxString& source); - virtual void DoneParser(); - virtual wxObject* GetProduct(); - - virtual wxFSFile *OpenURL(wxHtmlURLType type, const wxString& url) const; - - // Set's the DC used for parsing. If SetDC() is not called, - // parsing won't proceed - virtual void SetDC(wxDC *dc, double pixel_scale = 1.0) - { m_DC = dc; m_PixelScale = pixel_scale; } - - wxDC *GetDC() {return m_DC;} - double GetPixelScale() {return m_PixelScale;} - int GetCharHeight() const {return m_CharHeight;} - int GetCharWidth() const {return m_CharWidth;} - - // NOTE : these functions do _not_ return _actual_ - // height/width. They return h/w of default font - // for this DC. If you want actual values, call - // GetDC()->GetChar...() - - // returns interface to the rendering window - wxHtmlWindowInterface *GetWindowInterface() {return m_windowInterface;} -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, use GetWindowInterface()->GetHTMLWindow() instead - wxDEPRECATED( wxHtmlWindow *GetWindow() ); -#endif - - // Sets fonts to be used when displaying HTML page. (if size null then default sizes used). - void SetFonts(const wxString& normal_face, const wxString& fixed_face, const int *sizes = NULL); - - // Sets font sizes to be relative to the given size or the system - // default size; use either specified or default font - void SetStandardFonts(int size = -1, - const wxString& normal_face = wxEmptyString, - const wxString& fixed_face = wxEmptyString); - - // Adds tags module. see wxHtmlTagsModule for details. - static void AddModule(wxHtmlTagsModule *module); - - static void RemoveModule(wxHtmlTagsModule *module); - - // parsing-related methods. These methods are called by tag handlers: - - // Returns pointer to actual container. Common use in tag handler is : - // m_WParser->GetContainer()->InsertCell(new ...); - wxHtmlContainerCell *GetContainer() const {return m_Container;} - - // opens new container. This container is sub-container of opened - // container. Sets GetContainer to newly created container - // and returns it. - wxHtmlContainerCell *OpenContainer(); - - // works like OpenContainer except that new container is not created - // but c is used. You can use this to directly set actual container - wxHtmlContainerCell *SetContainer(wxHtmlContainerCell *c); - - // closes the container and sets actual Container to upper-level - // container - wxHtmlContainerCell *CloseContainer(); - - int GetFontSize() const {return m_FontSize;} - void SetFontSize(int s); - int GetFontBold() const {return m_FontBold;} - void SetFontBold(int x) {m_FontBold = x;} - int GetFontItalic() const {return m_FontItalic;} - void SetFontItalic(int x) {m_FontItalic = x;} - int GetFontUnderlined() const {return m_FontUnderlined;} - void SetFontUnderlined(int x) {m_FontUnderlined = x;} - int GetFontFixed() const {return m_FontFixed;} - void SetFontFixed(int x) {m_FontFixed = x;} - wxString GetFontFace() const {return GetFontFixed() ? m_FontFaceFixed : m_FontFaceNormal;} - void SetFontFace(const wxString& face); - - int GetAlign() const {return m_Align;} - void SetAlign(int a) {m_Align = a;} - - wxHtmlScriptMode GetScriptMode() const { return m_ScriptMode; } - void SetScriptMode(wxHtmlScriptMode mode) { m_ScriptMode = mode; } - long GetScriptBaseline() const { return m_ScriptBaseline; } - void SetScriptBaseline(long base) { m_ScriptBaseline = base; } - - const wxColour& GetLinkColor() const { return m_LinkColor; } - void SetLinkColor(const wxColour& clr) { m_LinkColor = clr; } - const wxColour& GetActualColor() const { return m_ActualColor; } - void SetActualColor(const wxColour& clr) { m_ActualColor = clr ;} - const wxHtmlLinkInfo& GetLink() const { return m_Link; } - void SetLink(const wxHtmlLinkInfo& link); - - // applies current parser state (link, sub/supscript, ...) to given cell - void ApplyStateToCell(wxHtmlCell *cell); - -#if !wxUSE_UNICODE - void SetInputEncoding(wxFontEncoding enc); - wxFontEncoding GetInputEncoding() const { return m_InputEnc; } - wxFontEncoding GetOutputEncoding() const { return m_OutputEnc; } - wxEncodingConverter *GetEncodingConverter() const { return m_EncConv; } -#endif - - // creates font depending on m_Font* members. - virtual wxFont* CreateCurrentFont(); - -#if wxABI_VERSION >= 20808 - enum WhitespaceMode - { - Whitespace_Normal, // normal mode, collapse whitespace - Whitespace_Pre // inside <pre>, keep whitespace as-is - }; - - // change the current whitespace handling mode - void SetWhitespaceMode(WhitespaceMode mode); - WhitespaceMode GetWhitespaceMode() const; -#endif // wxABI_VERSION >= 20808 - -protected: - virtual void AddText(const wxChar* txt); - -private: - void FlushWordBuf(wxChar *temp, int& templen, wxChar nbsp); - void AddWord(wxHtmlWordCell *c); - void AddWord(const wxString& word); - void AddPreBlock(const wxString& text); - - bool m_tmpLastWasSpace; - wxChar *m_tmpStrBuf; - size_t m_tmpStrBufSize; - // temporary variables used by AddText - wxHtmlWindowInterface *m_windowInterface; - // window we're parsing for - double m_PixelScale; - wxDC *m_DC; - // Device Context we're parsing for - static wxList m_Modules; - // list of tags modules (see wxHtmlTagsModule for details) - // This list is used to initialize m_Handlers member. - - wxHtmlContainerCell *m_Container; - // current container. See Open/CloseContainer for details. - - int m_FontBold, m_FontItalic, m_FontUnderlined, m_FontFixed; // this is not true,false but 1,0, we need it for indexing - int m_FontSize; /* -2 to +4, 0 is default */ - wxColour m_LinkColor; - wxColour m_ActualColor; - // basic font parameters. - wxHtmlLinkInfo m_Link; - // actual hypertext link or empty string - bool m_UseLink; - // true if m_Link is not empty - long m_CharHeight, m_CharWidth; - // average height of normal-sized text - int m_Align; - // actual alignment - wxHtmlScriptMode m_ScriptMode; - // current script mode (sub/sup/normal) - long m_ScriptBaseline; - // current sub/supscript base - - wxFont* m_FontsTable[2][2][2][2][7]; - wxString m_FontsFacesTable[2][2][2][2][7]; -#if !wxUSE_UNICODE - wxFontEncoding m_FontsEncTable[2][2][2][2][7]; -#endif - // table of loaded fonts. 1st four indexes are 0 or 1, depending on on/off - // state of these flags (from left to right): - // [bold][italic][underlined][fixed_size] - // last index is font size : from 0 to 6 (remapped from html sizes 1 to 7) - // Note : this table covers all possible combinations of fonts, but not - // all of them are used, so many items in table are usually NULL. - int m_FontsSizes[7]; - wxString m_FontFaceFixed, m_FontFaceNormal; - // html font sizes and faces of fixed and proportional fonts - -#if !wxUSE_UNICODE - wxFontEncoding m_InputEnc, m_OutputEnc; - // I/O font encodings - wxEncodingConverter *m_EncConv; -#endif - - // NB: this pointer replaces m_lastWordCell pointer in wx<=2.8.7; this - // way, wxHtmlWinParser remains ABI compatible with older versions - // despite addition of two fields in wxHtmlWinParser_TextParsingState - wxHtmlWinParser_TextParsingState *m_textParsingState; - - DECLARE_NO_COPY_CLASS(wxHtmlWinParser) -}; - - - - - - -//----------------------------------------------------------------------------- -// wxHtmlWinTagHandler -// This is basicly wxHtmlTagHandler except -// it is extended with protected member m_Parser pointing to -// the wxHtmlWinParser object -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlWinTagHandler : public wxHtmlTagHandler -{ - DECLARE_ABSTRACT_CLASS(wxHtmlWinTagHandler) - -public: - wxHtmlWinTagHandler() : wxHtmlTagHandler() {} - - virtual void SetParser(wxHtmlParser *parser) {wxHtmlTagHandler::SetParser(parser); m_WParser = (wxHtmlWinParser*) parser;} - -protected: - wxHtmlWinParser *m_WParser; // same as m_Parser, but overcasted - - DECLARE_NO_COPY_CLASS(wxHtmlWinTagHandler) -}; - - - - - - -//---------------------------------------------------------------------------- -// wxHtmlTagsModule -// This is basic of dynamic tag handlers binding. -// The class provides methods for filling parser's handlers -// hash table. -// (See documentation for details) -//---------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlTagsModule : public wxModule -{ - DECLARE_DYNAMIC_CLASS(wxHtmlTagsModule) - -public: - wxHtmlTagsModule() : wxModule() {} - - virtual bool OnInit(); - virtual void OnExit(); - - // This is called by wxHtmlWinParser. - // The method must simply call parser->AddTagHandler(new - // <handler_class_name>); for each handler - virtual void FillHandlersTable(wxHtmlWinParser * WXUNUSED(parser)) { } -}; - - -#endif - -#endif // _WX_WINPARS_H_ diff --git a/desmume/src/windows/wx/include/wx/htmllbox.h b/desmume/src/windows/wx/include/wx/htmllbox.h deleted file mode 100644 index 533b79171..000000000 --- a/desmume/src/windows/wx/include/wx/htmllbox.h +++ /dev/null @@ -1,325 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/htmllbox.h -// Purpose: wxHtmlListBox is a listbox whose items are wxHtmlCells -// Author: Vadim Zeitlin -// Modified by: -// Created: 31.05.03 -// RCS-ID: $Id: htmllbox.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HTMLLBOX_H_ -#define _WX_HTMLLBOX_H_ - -#include "wx/vlbox.h" // base class -#include "wx/html/htmlwin.h" -#include "wx/ctrlsub.h" - -#if wxUSE_FILESYSTEM - #include "wx/filesys.h" -#endif // wxUSE_FILESYSTEM - -class WXDLLIMPEXP_FWD_HTML wxHtmlCell; -class WXDLLIMPEXP_FWD_HTML wxHtmlWinParser; -class WXDLLIMPEXP_FWD_HTML wxHtmlListBoxCache; -class WXDLLIMPEXP_FWD_HTML wxHtmlListBoxStyle; - -extern WXDLLIMPEXP_DATA_HTML(const wxChar) wxHtmlListBoxNameStr[]; -extern WXDLLIMPEXP_DATA_HTML(const wxChar) wxSimpleHtmlListBoxNameStr[]; - -// ---------------------------------------------------------------------------- -// wxHtmlListBox -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_HTML wxHtmlListBox : public wxVListBox, - public wxHtmlWindowInterface, - public wxHtmlWindowMouseHelper -{ - DECLARE_ABSTRACT_CLASS(wxHtmlListBox) -public: - // constructors and such - // --------------------- - - // default constructor, you must call Create() later - wxHtmlListBox(); - - // normal constructor which calls Create() internally - wxHtmlListBox(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxHtmlListBoxNameStr); - - // really creates the control and sets the initial number of items in it - // (which may be changed later with SetItemCount()) - // - // the only special style which may be specified here is wxLB_MULTIPLE - // - // returns true on success or false if the control couldn't be created - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxHtmlListBoxNameStr); - - // destructor cleans up whatever resources we use - virtual ~wxHtmlListBox(); - - // override some base class virtuals - virtual void RefreshLine(size_t line); - virtual void RefreshLines(size_t from, size_t to); - virtual void RefreshAll(); - virtual void SetItemCount(size_t count); - -#if wxUSE_FILESYSTEM - // retrieve the file system used by the wxHtmlWinParser: if you use - // relative paths in your HTML, you should use its ChangePathTo() method - wxFileSystem& GetFileSystem() { return m_filesystem; } - const wxFileSystem& GetFileSystem() const { return m_filesystem; } -#endif // wxUSE_FILESYSTEM - - virtual void OnInternalIdle(); - -protected: - // this method must be implemented in the derived class and should return - // the body (i.e. without <html>) of the HTML for the given item - virtual wxString OnGetItem(size_t n) const = 0; - - // this function may be overridden to decorate HTML returned by OnGetItem() - virtual wxString OnGetItemMarkup(size_t n) const; - - - // this method allows to customize the selection appearance: it may be used - // to specify the colour of the text which normally has the given colour - // colFg when it is inside the selection - // - // by default, the original colour is not used at all and all text has the - // same (default for this system) colour inside selection - virtual wxColour GetSelectedTextColour(const wxColour& colFg) const; - - // this is the same as GetSelectedTextColour() but allows to customize the - // background colour -- this is even more rarely used as you can change it - // globally using SetSelectionBackground() - virtual wxColour GetSelectedTextBgColour(const wxColour& colBg) const; - - - // we implement both of these functions in terms of OnGetItem(), they are - // not supposed to be overridden by our descendants - virtual void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const; - virtual wxCoord OnMeasureItem(size_t n) const; - - // This method may be overriden to handle clicking on a link in - // the listbox. By default, clicking links is ignored. - virtual void OnLinkClicked(size_t n, const wxHtmlLinkInfo& link); - - // event handlers - void OnSize(wxSizeEvent& event); - void OnMouseMove(wxMouseEvent& event); - void OnLeftDown(wxMouseEvent& event); - - - // common part of all ctors - void Init(); - - // ensure that the given item is cached - void CacheItem(size_t n) const; - -private: - // wxHtmlWindowInterface methods: - virtual void SetHTMLWindowTitle(const wxString& title); - virtual void OnHTMLLinkClicked(const wxHtmlLinkInfo& link); - virtual wxHtmlOpeningStatus OnHTMLOpeningURL(wxHtmlURLType type, - const wxString& url, - wxString *redirect) const; - virtual wxPoint HTMLCoordsToWindow(wxHtmlCell *cell, - const wxPoint& pos) const; - virtual wxWindow* GetHTMLWindow(); - virtual wxColour GetHTMLBackgroundColour() const; - virtual void SetHTMLBackgroundColour(const wxColour& clr); - virtual void SetHTMLBackgroundImage(const wxBitmap& bmpBg); - virtual void SetHTMLStatusText(const wxString& text); - virtual wxCursor GetHTMLCursor(HTMLCursor type) const; - - // returns index of item that contains given HTML cell - size_t GetItemForCell(const wxHtmlCell *cell) const; - - // return physical coordinates of root wxHtmlCell of n-th item - wxPoint GetRootCellCoords(size_t n) const; - - // Converts physical coordinates stored in @a pos into coordinates - // relative to the root cell of the item under mouse cursor, if any. If no - // cell is found under the cursor, returns false. Otherwise stores the new - // coordinates back into @a pos and pointer to the cell under cursor into - // @a cell and returns true. - bool PhysicalCoordsToCell(wxPoint& pos, wxHtmlCell*& cell) const; - - // The opposite of PhysicalCoordsToCell: converts coordinates relative to - // given cell to physical coordinates in the window - wxPoint CellCoordsToPhysical(const wxPoint& pos, wxHtmlCell *cell) const; - -private: - // this class caches the pre-parsed HTML to speed up display - wxHtmlListBoxCache *m_cache; - - // HTML parser we use - wxHtmlWinParser *m_htmlParser; - -#if wxUSE_FILESYSTEM - // file system used by m_htmlParser - wxFileSystem m_filesystem; -#endif // wxUSE_FILESYSTEM - - // rendering style for the parser which allows us to customize our colours - wxHtmlListBoxStyle *m_htmlRendStyle; - - - // it calls our GetSelectedTextColour() and GetSelectedTextBgColour() - friend class wxHtmlListBoxStyle; - friend class wxHtmlListBoxWinInterface; - - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxHtmlListBox) -}; - - -// ---------------------------------------------------------------------------- -// wxSimpleHtmlListBox -// ---------------------------------------------------------------------------- - -#define wxHLB_DEFAULT_STYLE wxBORDER_SUNKEN -#define wxHLB_MULTIPLE wxLB_MULTIPLE - -class WXDLLIMPEXP_HTML wxSimpleHtmlListBox : public wxHtmlListBox, - public wxItemContainer -{ -public: - // wxListbox-compatible constructors - // --------------------------------- - - wxSimpleHtmlListBox() { } - - wxSimpleHtmlListBox(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - long style = wxHLB_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSimpleHtmlListBoxNameStr) - { - Create(parent, id, pos, size, n, choices, style, validator, name); - } - - wxSimpleHtmlListBox(wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = wxHLB_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSimpleHtmlListBoxNameStr) - { - Create(parent, id, pos, size, choices, style, validator, name); - } - - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - long style = wxHLB_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSimpleHtmlListBoxNameStr); - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = wxHLB_DEFAULT_STYLE, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSimpleHtmlListBoxNameStr); - - virtual ~wxSimpleHtmlListBox(); - - // these must be overloaded otherwise the compiler will complain - // about wxItemContainerImmutable::[G|S]etSelection being pure virtuals... - void SetSelection(int n) - { wxVListBox::SetSelection(n); } - int GetSelection() const - { return wxVListBox::GetSelection(); } - - // see ctrlsub.h for more info about this: - wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST - - - // accessing strings - // ----------------- - - virtual unsigned int GetCount() const - { return m_items.GetCount(); } - - virtual wxString GetString(unsigned int n) const; - - // override default unoptimized wxItemContainer::GetStrings() function - wxArrayString GetStrings() const - { return m_items; } - - virtual void SetString(unsigned int n, const wxString& s); - - virtual void Clear(); - virtual void Delete(unsigned int n); - - // override default unoptimized wxItemContainer::Append() function - void Append(const wxArrayString& strings); - - // since we override one Append() overload, we need to overload all others too - int Append(const wxString& item) - { return wxItemContainer::Append(item); } - int Append(const wxString& item, void *clientData) - { return wxItemContainer::Append(item, clientData); } - int Append(const wxString& item, wxClientData *clientData) - { return wxItemContainer::Append(item, clientData); } - - -protected: - - virtual int DoAppend(const wxString& item); - virtual int DoInsert(const wxString& item, unsigned int pos); - - virtual void DoSetItemClientData(unsigned int n, void *clientData) - { m_HTMLclientData[n] = clientData; } - - virtual void *DoGetItemClientData(unsigned int n) const - { return m_HTMLclientData[n]; } - virtual void DoSetItemClientObject(unsigned int n, wxClientData *clientData) - { m_HTMLclientData[n] = (void *)clientData; } - virtual wxClientData *DoGetItemClientObject(unsigned int n) const - { return (wxClientData *)m_HTMLclientData[n]; } - - // calls wxHtmlListBox::SetItemCount() and RefreshAll() - void UpdateCount(); - - // overload these functions just to change their visibility: users of - // wxSimpleHtmlListBox shouldn't be allowed to call them directly! - virtual void SetItemCount(size_t count) - { wxHtmlListBox::SetItemCount(count); } - virtual void SetLineCount(size_t count) - { wxHtmlListBox::SetLineCount(count); } - - virtual wxString OnGetItem(size_t n) const - { return m_items[n]; } - - wxArrayString m_items; - wxArrayPtrVoid m_HTMLclientData; - - // Note: For the benefit of old compilers (like gcc-2.8) this should - // not be named m_clientdata as that clashes with the name of an - // anonymous struct member in wxEvtHandler, which we derive from. - - DECLARE_NO_COPY_CLASS(wxSimpleHtmlListBox) -}; - -#endif // _WX_HTMLLBOX_H_ - diff --git a/desmume/src/windows/wx/include/wx/hyperlink.h b/desmume/src/windows/wx/include/wx/hyperlink.h deleted file mode 100644 index 8618466b8..000000000 --- a/desmume/src/windows/wx/include/wx/hyperlink.h +++ /dev/null @@ -1,231 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/hyperlink.h -// Purpose: Hyperlink control -// Author: David Norris <danorris@gmail.com>, Otto Wyss -// Modified by: Ryan Norton, Francesco Montorsi -// Created: 04/02/2005 -// RCS-ID: $Id: hyperlink.h 42409 2006-10-25 20:23:06Z RD $ -// Copyright: (c) 2005 David Norris -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HYPERLINK_H__ -#define _WX_HYPERLINK_H__ - -#include "wx/defs.h" - -#if wxUSE_HYPERLINKCTRL - -#include "wx/control.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -#define wxHL_CONTEXTMENU 0x0001 -#define wxHL_ALIGN_LEFT 0x0002 -#define wxHL_ALIGN_RIGHT 0x0004 -#define wxHL_ALIGN_CENTRE 0x0008 -#define wxHL_DEFAULT_STYLE (wxHL_CONTEXTMENU|wxNO_BORDER|wxHL_ALIGN_CENTRE) - -extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxHyperlinkCtrlNameStr[]; - - -// ---------------------------------------------------------------------------- -// wxHyperlinkCtrl -// ---------------------------------------------------------------------------- - -// A static text control that emulates a hyperlink. The link is displayed -// in an appropriate text style, derived from the control's normal font. -// When the mouse rolls over the link, the cursor changes to a hand and the -// link's color changes to the active color. -// -// Clicking on the link does not launch a web browser; instead, a -// HyperlinkEvent is fired. The event propagates upward until it is caught, -// just like a wxCommandEvent. -// -// Use the EVT_HYPERLINK() to catch link events. -class WXDLLIMPEXP_ADV wxHyperlinkCtrl : public wxControl -{ -public: - // Default constructor (for two-step construction). - wxHyperlinkCtrl() { } - - // Constructor. - wxHyperlinkCtrl(wxWindow *parent, - wxWindowID id, - const wxString& label, const wxString& url, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxHL_DEFAULT_STYLE, - const wxString& name = wxHyperlinkCtrlNameStr) - { - (void)Create(parent, id, label, url, pos, size, style, name); - } - - // Creation function (for two-step construction). - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& label, const wxString& url, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxHL_DEFAULT_STYLE, - const wxString& name = wxHyperlinkCtrlNameStr); - - - // get/set - wxColour GetHoverColour() const { return m_hoverColour; } - void SetHoverColour(const wxColour &colour) { m_hoverColour = colour; } - - wxColour GetNormalColour() const { return m_normalColour; } - void SetNormalColour(const wxColour &colour); - - wxColour GetVisitedColour() const { return m_visitedColour; } - void SetVisitedColour(const wxColour &colour); - - wxString GetURL() const { return m_url; } - void SetURL (const wxString &url) { m_url=url; } - - void SetVisited(bool visited = true) { m_visited=visited; } - bool GetVisited() const { return m_visited; } - - // NOTE: also wxWindow::Set/GetLabel, wxWindow::Set/GetBackgroundColour, - // wxWindow::Get/SetFont, wxWindow::Get/SetCursor are important ! - - -protected: - // event handlers - - // Renders the hyperlink. - void OnPaint(wxPaintEvent& 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 - // by the alignment of the label (wxHL_ALIGN_*). - wxRect GetLabelRect() const; - - // If the click originates inside the bounding box of the label, - // a flag is set so that an event will be fired when the left - // button is released. - void OnLeftDown(wxMouseEvent& event); - - // If the click both originated and finished inside the bounding box - // of the label, a HyperlinkEvent is fired. - void OnLeftUp(wxMouseEvent& event); - void OnRightUp(wxMouseEvent& event); - - // Changes the cursor to a hand, if the mouse is inside the label's - // bounding box. - void OnMotion(wxMouseEvent& event); - - // Changes the cursor back to the default, if necessary. - void OnLeaveWindow(wxMouseEvent& event); - - // handles "Copy URL" menuitem - void OnPopUpCopy(wxCommandEvent& event); - - // Refreshes the control to update label's position if necessary - void OnSize(wxSizeEvent& event); - - - // 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; - - // creates a context menu with "Copy URL" menuitem - virtual void DoContextMenu(const wxPoint &); - -private: - // URL associated with the link. This is transmitted inside - // the HyperlinkEvent fired when the user clicks on the label. - wxString m_url; - - // Foreground colours for various link types. - // NOTE: wxWindow::m_backgroundColour is used for background, - // wxWindow::m_foregroundColour is used to render non-visited links - wxColour m_hoverColour; - wxColour m_normalColour; - wxColour m_visitedColour; - - // True if the mouse cursor is inside the label's bounding box. - bool m_rollover; - - // True if the link has been clicked before. - bool m_visited; - - // True if a click is in progress (left button down) and the click - // originated inside the label's bounding box. - bool m_clicking; - -private: - DECLARE_DYNAMIC_CLASS(wxHyperlinkCtrl) - DECLARE_EVENT_TABLE() -}; - - -// ---------------------------------------------------------------------------- -// wxHyperlinkEvent -// ---------------------------------------------------------------------------- - -// Declare an event identifier. -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_HYPERLINK, 3700) -END_DECLARE_EVENT_TYPES() - -// -// An event fired when the user clicks on the label in a hyperlink control. -// See HyperlinkControl for details. -// -class WXDLLIMPEXP_ADV wxHyperlinkEvent : public wxCommandEvent -{ -public: - wxHyperlinkEvent() {} - wxHyperlinkEvent(wxObject *generator, wxWindowID id, const wxString& url) - : wxCommandEvent(wxEVT_COMMAND_HYPERLINK, id), - m_url(url) - { - SetEventObject(generator); - } - - // Returns the URL associated with the hyperlink control - // that the user clicked on. - wxString GetURL() const { return m_url; } - void SetURL(const wxString &url) { m_url=url; } - - // default copy ctor, assignment operator and dtor are ok - virtual wxEvent *Clone() const { return new wxHyperlinkEvent(*this); } - -private: - - // URL associated with the hyperlink control that the used clicked on. - wxString m_url; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxHyperlinkEvent) -}; - - -// ---------------------------------------------------------------------------- -// event types and macros -// ---------------------------------------------------------------------------- - -typedef void (wxEvtHandler::*wxHyperlinkEventFunction)(wxHyperlinkEvent&); - -#define wxHyperlinkEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxHyperlinkEventFunction, &func) - -#define EVT_HYPERLINK(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_HYPERLINK, id, wxHyperlinkEventHandler(fn)) - -#ifdef _WX_DEFINE_DATE_EVENTS_ - DEFINE_EVENT_TYPE(wxEVT_COMMAND_HYPERLINK) - - IMPLEMENT_DYNAMIC_CLASS(wxHyperlinkEvent, wxCommandEvent) -#endif - - -#endif // wxUSE_HYPERLINKCTRL - -#endif // _WX_HYPERLINK_H__ diff --git a/desmume/src/windows/wx/include/wx/icon.h b/desmume/src/windows/wx/include/wx/icon.h deleted file mode 100644 index fac90f555..000000000 --- a/desmume/src/windows/wx/include/wx/icon.h +++ /dev/null @@ -1,53 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/icon.h -// Purpose: wxIcon base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: icon.h 41538 2006-09-30 20:45:15Z RR $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ICON_H_BASE_ -#define _WX_ICON_H_BASE_ - -#include "wx/iconloc.h" - -#if defined(__WXPALMOS__) - #include "wx/generic/icon.h" -#elif defined(__WXMSW__) - #include "wx/msw/icon.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/icon.h" -#elif defined(__WXGTK20__) - #include "wx/generic/icon.h" -#elif defined(__WXGTK__) - #include "wx/generic/icon.h" -#elif defined(__WXX11__) - #include "wx/generic/icon.h" -#elif defined(__WXMGL__) - #define wxICON_DEFAULT_BITMAP_TYPE wxBITMAP_TYPE_ICO_RESOURCE - #include "wx/generic/icon.h" -#elif defined(__WXDFB__) - #include "wx/generic/icon.h" -#elif defined(__WXMAC__) - #include "wx/mac/icon.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/icon.h" -#elif defined(__WXPM__) - #include "wx/os2/icon.h" -#endif - -//----------------------------------------------------------------------------- -// wxVariant support -//----------------------------------------------------------------------------- - -#if wxUSE_VARIANT -#include "wx/variant.h" -DECLARE_VARIANT_OBJECT_EXPORTED(wxIcon,WXDLLEXPORT) -#endif - - -#endif - // _WX_ICON_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/iconbndl.h b/desmume/src/windows/wx/include/wx/iconbndl.h deleted file mode 100644 index 0ee8e9afe..000000000 --- a/desmume/src/windows/wx/include/wx/iconbndl.h +++ /dev/null @@ -1,69 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/iconbndl.h -// Purpose: wxIconBundle -// Author: Mattia barbon -// Modified by: -// Created: 23.03.02 -// RCS-ID: $Id: iconbndl.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Mattia Barbon -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ICONBNDL_H_ -#define _WX_ICONBNDL_H_ - -#include "wx/dynarray.h" -// for wxSize -#include "wx/gdicmn.h" - -class WXDLLIMPEXP_FWD_CORE wxIcon; -class WXDLLIMPEXP_FWD_BASE wxString; - -WX_DECLARE_EXPORTED_OBJARRAY( wxIcon, wxIconArray ); - -// this class can't load bitmaps of type wxBITMAP_TYPE_ICO_RESOURCE, -// if you need them, you have to load them manually and call -// wxIconCollection::AddIcon -class WXDLLEXPORT wxIconBundle -{ -public: - // default constructor - wxIconBundle() : m_icons() {} - // initializes the bundle with the icon(s) found in the file - wxIconBundle( const wxString& file, long type ) : m_icons() - { AddIcon( file, type ); } - // initializes the bundle with a single icon - wxIconBundle( const wxIcon& icon ) : m_icons() - { AddIcon( icon ); } - - const wxIconBundle& operator =( const wxIconBundle& ic ); - wxIconBundle( const wxIconBundle& ic ) : m_icons() - { *this = ic; } - - ~wxIconBundle() { DeleteIcons(); } - - // adds all the icons contained in the file to the collection, - // if the collection already contains icons with the same - // width and height, they are replaced - void AddIcon( const wxString& file, long type ); - // adds the icon to the collection, if the collection already - // contains an icon with the same width and height, it is - // replaced - 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 - const wxIcon& GetIcon( const wxSize& size ) const; - // equivalent to GetIcon( wxSize( size, size ) ) - const wxIcon& GetIcon( wxCoord size = wxDefaultCoord ) const - { return GetIcon( wxSize( size, size ) ); } -private: - // delete all icons - void DeleteIcons(); -public: - wxIconArray m_icons; -}; - -#endif - // _WX_ICONBNDL_H_ diff --git a/desmume/src/windows/wx/include/wx/iconloc.h b/desmume/src/windows/wx/include/wx/iconloc.h deleted file mode 100644 index 41abc8fa7..000000000 --- a/desmume/src/windows/wx/include/wx/iconloc.h +++ /dev/null @@ -1,81 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/iconloc.h -// Purpose: declaration of wxIconLocation class -// Author: Vadim Zeitlin -// Modified by: -// Created: 21.06.2003 -// RCS-ID: $Id: iconloc.h 27408 2004-05-23 20:53:33Z JS $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ICONLOC_H_ -#define _WX_ICONLOC_H_ - -#include "wx/string.h" - -// ---------------------------------------------------------------------------- -// wxIconLocation: describes the location of an icon -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxIconLocationBase -{ -public: - // ctor takes the name of the file where the icon is - wxEXPLICIT wxIconLocationBase(const wxString& filename = wxEmptyString) - : m_filename(filename) { } - - // default copy ctor, assignment operator and dtor are ok - - - // returns true if this object is valid/initialized - bool IsOk() const { return !m_filename.empty(); } - - // set/get the icon file name - void SetFileName(const wxString& filename) { m_filename = filename; } - const wxString& GetFileName() const { return m_filename; } - -private: - wxString m_filename; -}; - -// under MSW the same file may contain several icons so we also store the -// index of the icon -#if defined(__WXMSW__) - -class WXDLLIMPEXP_BASE wxIconLocation : public wxIconLocationBase -{ -public: - // ctor takes the name of the file where the icon is and the icons index in - // the file - wxEXPLICIT wxIconLocation(const wxString& file = wxEmptyString, int num = 0); - - // set/get the icon index - void SetIndex(int num) { m_index = num; } - int GetIndex() const { return m_index; } - -private: - int m_index; -}; - -inline -wxIconLocation::wxIconLocation(const wxString& file, int num) - : wxIconLocationBase(file) -{ - SetIndex(num); -} - -#else // !MSW - -// must be a class because we forward declare it as class -class WXDLLIMPEXP_BASE wxIconLocation : public wxIconLocationBase -{ -public: - wxEXPLICIT wxIconLocation(const wxString& filename = wxEmptyString) - : wxIconLocationBase(filename) { } -}; - -#endif // platform - -#endif // _WX_ICONLOC_H_ - diff --git a/desmume/src/windows/wx/include/wx/imagbmp.h b/desmume/src/windows/wx/include/wx/imagbmp.h deleted file mode 100644 index b7a522236..000000000 --- a/desmume/src/windows/wx/include/wx/imagbmp.h +++ /dev/null @@ -1,165 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/imagbmp.h -// Purpose: wxImage BMP, ICO, CUR and ANI handlers -// Author: Robert Roebling, Chris Elliott -// RCS-ID: $Id: imagbmp.h 45498 2007-04-16 13:03:05Z VZ $ -// Copyright: (c) Robert Roebling, Chris Elliott -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGBMP_H_ -#define _WX_IMAGBMP_H_ - -#include "wx/image.h" - -// defines for saving the BMP file in different formats, Bits Per Pixel -// USE: wximage.SetOption( wxIMAGE_OPTION_BMP_FORMAT, wxBMP_xBPP ); -#define wxIMAGE_OPTION_BMP_FORMAT wxString(_T("wxBMP_FORMAT")) - -// These two options are filled in upon reading CUR file and can (should) be -// specified when saving a CUR file - they define the hotspot of the cursor: -#define wxIMAGE_OPTION_CUR_HOTSPOT_X wxT("HotSpotX") -#define wxIMAGE_OPTION_CUR_HOTSPOT_Y wxT("HotSpotY") - -#if WXWIN_COMPATIBILITY_2_4 - // Do not use these macros, they are deprecated - #define wxBMP_FORMAT wxIMAGE_OPTION_BMP_FORMAT - #define wxCUR_HOTSPOT_X wxIMAGE_OPTION_CUR_HOTSPOT_X - #define wxCUR_HOTSPOT_Y wxIMAGE_OPTION_CUR_HOTSPOT_Y -#endif - - -enum -{ - wxBMP_24BPP = 24, // default, do not need to set - //wxBMP_16BPP = 16, // wxQuantize can only do 236 colors? - wxBMP_8BPP = 8, // 8bpp, quantized colors - wxBMP_8BPP_GREY = 9, // 8bpp, rgb averaged to greys - wxBMP_8BPP_GRAY = wxBMP_8BPP_GREY, - wxBMP_8BPP_RED = 10, // 8bpp, red used as greyscale - wxBMP_8BPP_PALETTE = 11, // 8bpp, use the wxImage's palette - wxBMP_4BPP = 4, // 4bpp, quantized colors - wxBMP_1BPP = 1, // 1bpp, quantized "colors" - wxBMP_1BPP_BW = 2 // 1bpp, black & white from red -}; - -// ---------------------------------------------------------------------------- -// wxBMPHandler -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxBMPHandler : public wxImageHandler -{ -public: - wxBMPHandler() - { - m_name = _T("Windows bitmap file"); - m_extension = _T("bmp"); - m_type = wxBITMAP_TYPE_BMP; - m_mime = _T("image/x-bmp"); - } - -#if wxUSE_STREAMS - virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - -protected: - virtual bool DoCanRead( wxInputStream& stream ); - bool SaveDib(wxImage *image, wxOutputStream& stream, bool verbose, - bool IsBmp, bool IsMask); - bool DoLoadDib(wxImage *image, int width, int height, int bpp, int ncolors, - int comp, wxFileOffset bmpOffset, wxInputStream& stream, - bool verbose, bool IsBmp, bool hasPalette); - bool LoadDib(wxImage *image, wxInputStream& stream, bool verbose, bool IsBmp); -#endif // wxUSE_STREAMS - -private: - DECLARE_DYNAMIC_CLASS(wxBMPHandler) -}; - -#if wxUSE_ICO_CUR -// ---------------------------------------------------------------------------- -// wxICOHandler -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxICOHandler : public wxBMPHandler -{ -public: - wxICOHandler() - { - m_name = _T("Windows icon file"); - m_extension = _T("ico"); - m_type = wxBITMAP_TYPE_ICO; - m_mime = _T("image/x-ico"); - } - -#if wxUSE_STREAMS - virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - virtual bool DoLoadFile( wxImage *image, wxInputStream& stream, bool verbose, int index ); - virtual int GetImageCount( wxInputStream& stream ); -protected: - virtual bool DoCanRead( wxInputStream& stream ); -#endif // wxUSE_STREAMS - -private: - DECLARE_DYNAMIC_CLASS(wxICOHandler) -}; - - -// ---------------------------------------------------------------------------- -// wxCURHandler -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxCURHandler : public wxICOHandler -{ -public: - wxCURHandler() - { - m_name = _T("Windows cursor file"); - m_extension = _T("cur"); - m_type = wxBITMAP_TYPE_CUR; - m_mime = _T("image/x-cur"); - } - - // VS: This handler's meat is implemented inside wxICOHandler (the two - // formats are almost identical), but we hide this fact at - // the API level, since it is a mere implementation detail. - -protected: -#if wxUSE_STREAMS - virtual bool DoCanRead( wxInputStream& stream ); -#endif // wxUSE_STREAMS - -private: - DECLARE_DYNAMIC_CLASS(wxCURHandler) -}; -// ---------------------------------------------------------------------------- -// wxANIHandler -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxANIHandler : public wxCURHandler -{ -public: - wxANIHandler() - { - m_name = _T("Windows animated cursor file"); - m_extension = _T("ani"); - m_type = wxBITMAP_TYPE_ANI; - m_mime = _T("image/x-ani"); - } - - -#if wxUSE_STREAMS - virtual bool SaveFile( wxImage *WXUNUSED(image), wxOutputStream& WXUNUSED(stream), bool WXUNUSED(verbose=true) ){return false ;} - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - virtual int GetImageCount( wxInputStream& stream ); -protected: - virtual bool DoCanRead( wxInputStream& stream ); -#endif // wxUSE_STREAMS - -private: - DECLARE_DYNAMIC_CLASS(wxANIHandler) -}; - -#endif // wxUSE_ICO_CUR -#endif // _WX_IMAGBMP_H_ diff --git a/desmume/src/windows/wx/include/wx/image.h b/desmume/src/windows/wx/include/wx/image.h deleted file mode 100644 index 8048da442..000000000 --- a/desmume/src/windows/wx/include/wx/image.h +++ /dev/null @@ -1,454 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/image.h -// Purpose: wxImage class -// Author: Robert Roebling -// RCS-ID: $Id: image.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGE_H_ -#define _WX_IMAGE_H_ - -#include "wx/defs.h" - -#if wxUSE_IMAGE - -#include "wx/object.h" -#include "wx/string.h" -#include "wx/gdicmn.h" -#include "wx/hashmap.h" - -#if wxUSE_STREAMS -# include "wx/stream.h" -#endif - -// on some systems (Unixware 7.x) index is defined as a macro in the headers -// which breaks the compilation below -#undef index - -#define wxIMAGE_OPTION_QUALITY wxString(_T("quality")) -#define wxIMAGE_OPTION_FILENAME wxString(_T("FileName")) - -#define wxIMAGE_OPTION_RESOLUTION wxString(_T("Resolution")) -#define wxIMAGE_OPTION_RESOLUTIONX wxString(_T("ResolutionX")) -#define wxIMAGE_OPTION_RESOLUTIONY wxString(_T("ResolutionY")) - -#define wxIMAGE_OPTION_RESOLUTIONUNIT wxString(_T("ResolutionUnit")) - -// constants used with wxIMAGE_OPTION_RESOLUTIONUNIT -enum -{ - wxIMAGE_RESOLUTION_INCHES = 1, - wxIMAGE_RESOLUTION_CM = 2 -}; - -// Constants for wxImage::Scale() for determining the level of quality -enum -{ - wxIMAGE_QUALITY_NORMAL = 0, - wxIMAGE_QUALITY_HIGH = 1 -}; - -// alpha channel values: fully transparent, default threshold separating -// transparent pixels from opaque for a few functions dealing with alpha and -// fully opaque -const unsigned char wxIMAGE_ALPHA_TRANSPARENT = 0; -const unsigned char wxIMAGE_ALPHA_THRESHOLD = 0x80; -const unsigned char wxIMAGE_ALPHA_OPAQUE = 0xff; - -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxImageHandler; -class WXDLLIMPEXP_FWD_CORE wxImage; -class WXDLLIMPEXP_FWD_CORE wxPalette; - -//----------------------------------------------------------------------------- -// wxVariant support -//----------------------------------------------------------------------------- - -#if wxUSE_VARIANT -#include "wx/variant.h" -DECLARE_VARIANT_OBJECT_EXPORTED(wxImage,WXDLLEXPORT) -#endif - -//----------------------------------------------------------------------------- -// wxImageHandler -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxImageHandler: public wxObject -{ -public: - wxImageHandler() - : m_name(wxEmptyString), m_extension(wxEmptyString), m_mime(), m_type(0) - { } - -#if wxUSE_STREAMS - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); - - virtual int GetImageCount( wxInputStream& stream ); - - bool CanRead( wxInputStream& stream ) { return CallDoCanRead(stream); } - bool CanRead( const wxString& name ); -#endif // wxUSE_STREAMS - - void SetName(const wxString& name) { m_name = name; } - void SetExtension(const wxString& ext) { m_extension = ext; } - void SetType(long type) { m_type = type; } - void SetMimeType(const wxString& type) { m_mime = type; } - const wxString& GetName() const { return m_name; } - const wxString& GetExtension() const { return m_extension; } - long GetType() const { return m_type; } - const wxString& GetMimeType() const { return m_mime; } - -protected: -#if wxUSE_STREAMS - virtual bool DoCanRead( wxInputStream& stream ) = 0; - - // save the stream position, call DoCanRead() and restore the position - bool CallDoCanRead(wxInputStream& stream); -#endif // wxUSE_STREAMS - - wxString m_name; - wxString m_extension; - wxString m_mime; - long m_type; - -private: - DECLARE_CLASS(wxImageHandler) -}; - -//----------------------------------------------------------------------------- -// wxImageHistogram -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxImageHistogramEntry -{ -public: - wxImageHistogramEntry() { index = value = 0; } - unsigned long index; - unsigned long value; -}; - -WX_DECLARE_EXPORTED_HASH_MAP(unsigned long, wxImageHistogramEntry, - wxIntegerHash, wxIntegerEqual, - wxImageHistogramBase); - -class WXDLLEXPORT wxImageHistogram : public wxImageHistogramBase -{ -public: - wxImageHistogram() : wxImageHistogramBase(256) { } - - // get the key in the histogram for the given RGB values - static unsigned long MakeKey(unsigned char r, - unsigned char g, - unsigned char b) - { - return (r << 16) | (g << 8) | b; - } - - // find first colour that is not used in the image and has higher - // RGB values than RGB(startR, startG, startB) - // - // returns true and puts this colour in r, g, b (each of which may be NULL) - // on success or returns false if there are no more free colours - bool FindFirstUnusedColour(unsigned char *r, - unsigned char *g, - unsigned char *b, - unsigned char startR = 1, - unsigned char startG = 0, - unsigned char startB = 0 ) const; -}; - -//----------------------------------------------------------------------------- -// wxImage -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxImage: public wxObject -{ -public: - // red, green and blue are 8 bit unsigned integers in the range of 0..255 - // We use the identifier RGBValue instead of RGB, since RGB is #defined - class RGBValue - { - public: - RGBValue(unsigned char r=0, unsigned char g=0, unsigned char b=0) - : red(r), green(g), blue(b) {} - unsigned char red; - unsigned char green; - unsigned char blue; - }; - - // hue, saturation and value are doubles in the range 0.0..1.0 - class HSVValue - { - public: - HSVValue(double h=0.0, double s=0.0, double v=0.0) - : hue(h), saturation(s), value(v) {} - double hue; - double saturation; - double value; - }; - - wxImage(){} - wxImage( int width, int height, bool clear = true ); - wxImage( int width, int height, unsigned char* data, bool static_data = false ); - wxImage( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data = false ); - wxImage( const wxString& name, long type = wxBITMAP_TYPE_ANY, int index = -1 ); - wxImage( const wxString& name, const wxString& mimetype, int index = -1 ); - wxImage( const char* const* xpmData ); - -#if wxUSE_STREAMS - wxImage( wxInputStream& stream, long type = wxBITMAP_TYPE_ANY, int index = -1 ); - wxImage( wxInputStream& stream, const wxString& mimetype, int index = -1 ); -#endif // wxUSE_STREAMS - - bool Create( int width, int height, bool clear = true ); - bool Create( int width, int height, unsigned char* data, bool static_data = false ); - bool Create( int width, int height, unsigned char* data, unsigned char* alpha, bool static_data = false ); - bool Create( const char* const* xpmData ); -#ifdef __BORLANDC__ - // needed for Borland 5.5 - wxImage( char** xpmData ) { Create(wx_const_cast(const char* const*, xpmData)); } - bool Create( char** xpmData ) { return Create(wx_const_cast(const char* const*, xpmData)); } -#endif - void Destroy(); - - // creates an identical copy of the image (the = operator - // just raises the ref count) - wxImage Copy() const; - - // return the new image with size width*height - wxImage GetSubImage( const wxRect& rect) const; - - // Paste the image or part of this image into an image of the given size at the pos - // any newly exposed areas will be filled with the rgb colour - // by default if r = g = b = -1 then fill with this image's mask colour or find and - // set a suitable mask colour - wxImage Size( const wxSize& size, const wxPoint& pos, - int r = -1, int g = -1, int b = -1 ) const; - - // pastes image into this instance and takes care of - // the mask colour and out of bounds problems - void Paste( const wxImage &image, int x, int y ); - - // return the new image with size width*height - wxImage Scale( int width, int height, int quality = wxIMAGE_QUALITY_NORMAL ) const; - - // box averager and bicubic filters for up/down sampling - wxImage ResampleBox(int width, int height) const; - wxImage ResampleBicubic(int width, int height) const; - - // blur the image according to the specified pixel radius - wxImage Blur(int radius); - wxImage BlurHorizontal(int radius); - wxImage BlurVertical(int radius); - - wxImage ShrinkBy( int xFactor , int yFactor ) const ; - - // rescales the image in place - wxImage& Rescale( int width, int height, int quality = wxIMAGE_QUALITY_NORMAL ) { return *this = Scale(width, height, quality); } - - // resizes the image in place - wxImage& Resize( const wxSize& size, const wxPoint& pos, - int r = -1, int g = -1, int b = -1 ) { return *this = Size(size, pos, r, g, b); } - - // Rotates the image about the given point, 'angle' radians. - // Returns the rotated image, leaving this image intact. - wxImage Rotate(double angle, const wxPoint & centre_of_rotation, - bool interpolating = true, wxPoint * offset_after_rotation = (wxPoint*) NULL) const; - - wxImage Rotate90( bool clockwise = true ) const; - wxImage Mirror( bool horizontally = true ) const; - - // replace one colour with another - void Replace( unsigned char r1, unsigned char g1, unsigned char b1, - unsigned char r2, unsigned char g2, unsigned char b2 ); - - // Convert to greyscale image. Uses the luminance component (Y) of the image. - // The luma value (YUV) is calculated using (R * lr) + (G * lg) + (B * lb), defaults to ITU-T BT.601 - wxImage ConvertToGreyscale( double lr = 0.299, double lg = 0.587, double lb = 0.114 ) const; - - // convert to monochrome image (<r,g,b> will be replaced by white, - // everything else by black) - wxImage ConvertToMono( unsigned char r, unsigned char g, unsigned char b ) const; - - // these routines are slow but safe - void SetRGB( int x, int y, unsigned char r, unsigned char g, unsigned char b ); - void SetRGB( const wxRect& rect, unsigned char r, unsigned char g, unsigned char b ); - unsigned char GetRed( int x, int y ) const; - unsigned char GetGreen( int x, int y ) const; - unsigned char GetBlue( int x, int y ) const; - - void SetAlpha(int x, int y, unsigned char alpha); - unsigned char GetAlpha(int x, int y) const; - - // find first colour that is not used in the image and has higher - // RGB values than <startR,startG,startB> - bool FindFirstUnusedColour( unsigned char *r, unsigned char *g, unsigned char *b, - unsigned char startR = 1, unsigned char startG = 0, - unsigned char startB = 0 ) const; - // Set image's mask to the area of 'mask' that has <r,g,b> colour - bool SetMaskFromImage(const wxImage & mask, - unsigned char mr, unsigned char mg, unsigned char mb); - - // converts image's alpha channel to mask, if it has any, does nothing - // otherwise: - bool ConvertAlphaToMask(unsigned char threshold = wxIMAGE_ALPHA_THRESHOLD); - - // This method converts an image where the original alpha - // information is only available as a shades of a colour - // (actually shades of grey) typically when you draw anti- - // aliased text into a bitmap. The DC drawinf routines - // draw grey values on the black background although they - // actually mean to draw white with differnt alpha values. - // This method reverses it, assuming a black (!) background - // and white text (actually only the red channel is read). - // The method will then fill up the whole image with the - // colour given. - bool ConvertColourToAlpha( unsigned char r, unsigned char g, unsigned char b ); - - static bool CanRead( const wxString& name ); - static int GetImageCount( const wxString& name, long type = wxBITMAP_TYPE_ANY ); - virtual bool LoadFile( const wxString& name, long type = wxBITMAP_TYPE_ANY, int index = -1 ); - virtual bool LoadFile( const wxString& name, const wxString& mimetype, int index = -1 ); - -#if wxUSE_STREAMS - static bool CanRead( wxInputStream& stream ); - static int GetImageCount( wxInputStream& stream, long type = wxBITMAP_TYPE_ANY ); - virtual bool LoadFile( wxInputStream& stream, long type = wxBITMAP_TYPE_ANY, int index = -1 ); - virtual bool LoadFile( wxInputStream& stream, const wxString& mimetype, int index = -1 ); -#endif - - virtual bool SaveFile( const wxString& name ) const; - virtual bool SaveFile( const wxString& name, int type ) const; - virtual bool SaveFile( const wxString& name, const wxString& mimetype ) const; - -#if wxUSE_STREAMS - virtual bool SaveFile( wxOutputStream& stream, int type ) const; - virtual bool SaveFile( wxOutputStream& stream, const wxString& mimetype ) const; -#endif - - bool Ok() const { return IsOk(); } - bool IsOk() const; - int GetWidth() const; - int GetHeight() const; - - // these functions provide fastest access to wxImage data but should be - // used carefully as no checks are done - unsigned char *GetData() const; - void SetData( unsigned char *data, bool static_data=false ); - void SetData( unsigned char *data, int new_width, int new_height, bool static_data=false ); - - unsigned char *GetAlpha() const; // may return NULL! - bool HasAlpha() const { return GetAlpha() != NULL; } - void SetAlpha(unsigned char *alpha = NULL, bool static_data=false); - void InitAlpha(); - - // return true if this pixel is masked or has alpha less than specified - // threshold - bool IsTransparent(int x, int y, - unsigned char threshold = wxIMAGE_ALPHA_THRESHOLD) const; - - // Mask functions - void SetMaskColour( unsigned char r, unsigned char g, unsigned char b ); - // Get the current mask colour or find a suitable colour - // returns true if using current mask colour - bool GetOrFindMaskColour( unsigned char *r, unsigned char *g, unsigned char *b ) const; - unsigned char GetMaskRed() const; - unsigned char GetMaskGreen() const; - unsigned char GetMaskBlue() const; - void SetMask( bool mask = true ); - bool HasMask() const; - -#if wxUSE_PALETTE - // Palette functions - bool HasPalette() const; - const wxPalette& GetPalette() const; - void SetPalette(const wxPalette& palette); -#endif // wxUSE_PALETTE - - // Option functions (arbitrary name/value mapping) - void SetOption(const wxString& name, const wxString& value); - void SetOption(const wxString& name, int value); - wxString GetOption(const wxString& name) const; - int GetOptionInt(const wxString& name) const; - bool HasOption(const wxString& name) const; - - unsigned long CountColours( unsigned long stopafter = (unsigned long) -1 ) const; - - // Computes the histogram of the image and fills a hash table, indexed - // with integer keys built as 0xRRGGBB, containing wxImageHistogramEntry - // objects. Each of them contains an 'index' (useful to build a palette - // with the image colours) and a 'value', which is the number of pixels - // in the image with that colour. - // Returned value: # of entries in the histogram - unsigned long ComputeHistogram( wxImageHistogram &h ) const; - - // Rotates the hue of each pixel of the image. angle is a double in the range - // -1.0..1.0 where -1.0 is -360 degrees and 1.0 is 360 degrees - void RotateHue(double angle); - - static wxList& GetHandlers() { return sm_handlers; } - static void AddHandler( wxImageHandler *handler ); - static void InsertHandler( wxImageHandler *handler ); - static bool RemoveHandler( const wxString& name ); - static wxImageHandler *FindHandler( const wxString& name ); - static wxImageHandler *FindHandler( const wxString& extension, long imageType ); - static wxImageHandler *FindHandler( long imageType ); - static wxImageHandler *FindHandlerMime( const wxString& mimetype ); - - static wxString GetImageExtWildcard(); - - static void CleanUpHandlers(); - static void InitStandardHandlers(); - - static HSVValue RGBtoHSV(const RGBValue& rgb); - static RGBValue HSVtoRGB(const HSVValue& hsv); - - -protected: - static wxList sm_handlers; - - // return the index of the point with the given coordinates or -1 if the - // image is invalid of the coordinates are out of range - // - // note that index must be multiplied by 3 when using it with RGB array - long XYToIndex(int x, int y) const; - - virtual wxObjectRefData* CreateRefData() const; - virtual wxObjectRefData* CloneRefData(const wxObjectRefData* data) const; - -private: - friend class WXDLLIMPEXP_FWD_CORE wxImageHandler; - - DECLARE_DYNAMIC_CLASS(wxImage) -}; - - -extern void WXDLLEXPORT wxInitAllImageHandlers(); - -extern WXDLLEXPORT_DATA(wxImage) wxNullImage; - -//----------------------------------------------------------------------------- -// wxImage handlers -//----------------------------------------------------------------------------- - -#include "wx/imagbmp.h" -#include "wx/imagpng.h" -#include "wx/imaggif.h" -#include "wx/imagpcx.h" -#include "wx/imagjpeg.h" -#include "wx/imagtga.h" -#include "wx/imagtiff.h" -#include "wx/imagpnm.h" -#include "wx/imagxpm.h" -#include "wx/imagiff.h" - -#endif // wxUSE_IMAGE - -#endif - // _WX_IMAGE_H_ diff --git a/desmume/src/windows/wx/include/wx/imaggif.h b/desmume/src/windows/wx/include/wx/imaggif.h deleted file mode 100644 index 3a3e44db0..000000000 --- a/desmume/src/windows/wx/include/wx/imaggif.h +++ /dev/null @@ -1,48 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: imaggif.h -// Purpose: wxImage GIF handler -// Author: Vaclav Slavik & Guillermo Rodriguez Garcia -// RCS-ID: $Id: imaggif.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) Guillermo Rodriguez Garcia -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGGIF_H_ -#define _WX_IMAGGIF_H_ - -#include "wx/image.h" - - -//----------------------------------------------------------------------------- -// wxGIFHandler -//----------------------------------------------------------------------------- - -#if wxUSE_GIF - -class WXDLLEXPORT wxGIFHandler : public wxImageHandler -{ -public: - inline wxGIFHandler() - { - m_name = wxT("GIF file"); - m_extension = wxT("gif"); - m_type = wxBITMAP_TYPE_GIF; - m_mime = wxT("image/gif"); - } - -#if wxUSE_STREAMS - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); -protected: - virtual bool DoCanRead( wxInputStream& stream ); -#endif - -private: - DECLARE_DYNAMIC_CLASS(wxGIFHandler) -}; -#endif - - -#endif - // _WX_IMAGGIF_H_ - diff --git a/desmume/src/windows/wx/include/wx/imagiff.h b/desmume/src/windows/wx/include/wx/imagiff.h deleted file mode 100644 index d7920c2c0..000000000 --- a/desmume/src/windows/wx/include/wx/imagiff.h +++ /dev/null @@ -1,44 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: imagiff.h -// Purpose: wxImage handler for Amiga IFF images -// Author: Steffen Gutmann -// RCS-ID: $Id: imagiff.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) Steffen Gutmann, 2002 -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGE_IFF_H_ -#define _WX_IMAGE_IFF_H_ - -#include "wx/image.h" - -//----------------------------------------------------------------------------- -// wxIFFHandler -//----------------------------------------------------------------------------- - -#if wxUSE_IMAGE && wxUSE_IFF - -class WXDLLEXPORT wxIFFHandler : public wxImageHandler -{ -public: - wxIFFHandler() - { - m_name = wxT("IFF file"); - m_extension = wxT("iff"); - m_type = wxBITMAP_TYPE_IFF; - m_mime = wxT("image/x-iff"); - } - -#if wxUSE_STREAMS - virtual bool LoadFile(wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1); - virtual bool SaveFile(wxImage *image, wxOutputStream& stream, bool verbose=true); - virtual bool DoCanRead(wxInputStream& stream); -#endif - -private: - DECLARE_DYNAMIC_CLASS(wxIFFHandler) -}; - -#endif // wxUSE_IMAGE && wxUSE_IFF - -#endif // _WX_IMAGE_IFF_H_ diff --git a/desmume/src/windows/wx/include/wx/imagjpeg.h b/desmume/src/windows/wx/include/wx/imagjpeg.h deleted file mode 100644 index 06880683c..000000000 --- a/desmume/src/windows/wx/include/wx/imagjpeg.h +++ /dev/null @@ -1,48 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: imagjpeg.h -// Purpose: wxImage JPEG handler -// Author: Vaclav Slavik -// RCS-ID: $Id: imagjpeg.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGJPEG_H_ -#define _WX_IMAGJPEG_H_ - -#include "wx/defs.h" - -//----------------------------------------------------------------------------- -// wxJPEGHandler -//----------------------------------------------------------------------------- - -#if wxUSE_LIBJPEG - -#include "wx/image.h" - -class WXDLLEXPORT wxJPEGHandler: public wxImageHandler -{ -public: - inline wxJPEGHandler() - { - m_name = wxT("JPEG file"); - m_extension = wxT("jpg"); - m_type = wxBITMAP_TYPE_JPEG; - m_mime = wxT("image/jpeg"); - } - -#if wxUSE_STREAMS - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); -protected: - virtual bool DoCanRead( wxInputStream& stream ); -#endif - -private: - DECLARE_DYNAMIC_CLASS(wxJPEGHandler) -}; - -#endif // wxUSE_LIBJPEG - -#endif // _WX_IMAGJPEG_H_ - diff --git a/desmume/src/windows/wx/include/wx/imaglist.h b/desmume/src/windows/wx/include/wx/imaglist.h deleted file mode 100644 index 7c3c24ea3..000000000 --- a/desmume/src/windows/wx/include/wx/imaglist.h +++ /dev/null @@ -1,55 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/imaglist.h -// Purpose: wxImageList base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: imaglist.h 41288 2006-09-18 23:06:35Z VZ $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGLIST_H_BASE_ -#define _WX_IMAGLIST_H_BASE_ - -/* - * wxImageList is used for wxListCtrl, wxTreeCtrl. These controls refer to - * images for their items by an index into an image list. - * A wxImageList is capable of creating images with optional masks from - * a variety of sources - a single bitmap plus a colour to indicate the mask, - * two bitmaps, or an icon. - * - * Image lists can also create and draw images used for drag and drop functionality. - * This is not yet implemented in wxImageList. We need to discuss a generic API - * for doing drag and drop and see whether it ties in with the Win95 view of it. - * See below for candidate functions and an explanation of how they might be - * used. - */ - -// Flag values for Set/GetImageList -enum -{ - wxIMAGE_LIST_NORMAL, // Normal icons - wxIMAGE_LIST_SMALL, // Small icons - wxIMAGE_LIST_STATE // State icons: unimplemented (see WIN32 documentation) -}; - -// Flags for Draw -#define wxIMAGELIST_DRAW_NORMAL 0x0001 -#define wxIMAGELIST_DRAW_TRANSPARENT 0x0002 -#define wxIMAGELIST_DRAW_SELECTED 0x0004 -#define wxIMAGELIST_DRAW_FOCUSED 0x0008 - -#if defined(__WXMSW__) || defined(__WXMAC_CARBON__) - #define wxHAS_NATIVE_IMAGELIST -#endif - -#if !defined(wxHAS_NATIVE_IMAGELIST) - #include "wx/generic/imaglist.h" -#elif defined(__WXMSW__) - #include "wx/msw/imaglist.h" -#elif defined(__WXMAC_CARBON__) - #include "wx/mac/imaglist.h" -#endif - -#endif // _WX_IMAGLIST_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/imagpcx.h b/desmume/src/windows/wx/include/wx/imagpcx.h deleted file mode 100644 index c35fe0973..000000000 --- a/desmume/src/windows/wx/include/wx/imagpcx.h +++ /dev/null @@ -1,47 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: imagpcx.h -// Purpose: wxImage PCX handler -// Author: Guillermo Rodriguez Garcia <guille@iies.es> -// RCS-ID: $Id: imagpcx.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) 1999 Guillermo Rodriguez Garcia -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGPCX_H_ -#define _WX_IMAGPCX_H_ - -#include "wx/image.h" - - -//----------------------------------------------------------------------------- -// wxPCXHandler -//----------------------------------------------------------------------------- - -#if wxUSE_PCX -class WXDLLEXPORT wxPCXHandler : public wxImageHandler -{ -public: - inline wxPCXHandler() - { - m_name = wxT("PCX file"); - m_extension = wxT("pcx"); - m_type = wxBITMAP_TYPE_PCX; - m_mime = wxT("image/pcx"); - } - -#if wxUSE_STREAMS - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); -protected: - virtual bool DoCanRead( wxInputStream& stream ); -#endif // wxUSE_STREAMS - -private: - DECLARE_DYNAMIC_CLASS(wxPCXHandler) -}; -#endif // wxUSE_PCX - - -#endif - // _WX_IMAGPCX_H_ - diff --git a/desmume/src/windows/wx/include/wx/imagpng.h b/desmume/src/windows/wx/include/wx/imagpng.h deleted file mode 100644 index 5252e3aa0..000000000 --- a/desmume/src/windows/wx/include/wx/imagpng.h +++ /dev/null @@ -1,60 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: imagpng.h -// Purpose: wxImage PNG handler -// Author: Robert Roebling -// RCS-ID: $Id: imagpng.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGPNG_H_ -#define _WX_IMAGPNG_H_ - -#include "wx/defs.h" - -//----------------------------------------------------------------------------- -// wxPNGHandler -//----------------------------------------------------------------------------- - -#if wxUSE_LIBPNG - -#include "wx/image.h" - -#define wxIMAGE_OPTION_PNG_FORMAT wxT("PngFormat") -#define wxIMAGE_OPTION_PNG_BITDEPTH wxT("PngBitDepth") - -enum -{ - wxPNG_TYPE_COLOUR = 0, - wxPNG_TYPE_GREY = 2, - wxPNG_TYPE_GREY_RED = 3 -}; - -class WXDLLEXPORT wxPNGHandler: public wxImageHandler -{ -public: - inline wxPNGHandler() - { - m_name = wxT("PNG file"); - m_extension = wxT("png"); - m_type = wxBITMAP_TYPE_PNG; - m_mime = wxT("image/png"); - } - -#if wxUSE_STREAMS - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); -protected: - virtual bool DoCanRead( wxInputStream& stream ); -#endif - -private: - DECLARE_DYNAMIC_CLASS(wxPNGHandler) -}; - -#endif - // wxUSE_LIBPNG - -#endif - // _WX_IMAGPNG_H_ - diff --git a/desmume/src/windows/wx/include/wx/imagpnm.h b/desmume/src/windows/wx/include/wx/imagpnm.h deleted file mode 100644 index e6f5a50ae..000000000 --- a/desmume/src/windows/wx/include/wx/imagpnm.h +++ /dev/null @@ -1,46 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: imagpnm.h -// Purpose: wxImage PNM handler -// Author: Sylvain Bougnoux -// RCS-ID: $Id: imagpnm.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) Sylvain Bougnoux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGPNM_H_ -#define _WX_IMAGPNM_H_ - -#include "wx/image.h" - -//----------------------------------------------------------------------------- -// wxPNMHandler -//----------------------------------------------------------------------------- - -#if wxUSE_PNM -class WXDLLEXPORT wxPNMHandler : public wxImageHandler -{ -public: - inline wxPNMHandler() - { - m_name = wxT("PNM file"); - m_extension = wxT("pnm"); - m_type = wxBITMAP_TYPE_PNM; - m_mime = wxT("image/pnm"); - } - -#if wxUSE_STREAMS - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); -protected: - virtual bool DoCanRead( wxInputStream& stream ); -#endif - -private: - DECLARE_DYNAMIC_CLASS(wxPNMHandler) -}; -#endif - - -#endif - // _WX_IMAGPNM_H_ - diff --git a/desmume/src/windows/wx/include/wx/imagtga.h b/desmume/src/windows/wx/include/wx/imagtga.h deleted file mode 100644 index 3eec26e0c..000000000 --- a/desmume/src/windows/wx/include/wx/imagtga.h +++ /dev/null @@ -1,46 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/imagtga.h -// Purpose: wxImage TGA handler -// Author: Seth Jackson -// RCS-ID: $Id: imagtga.h 43843 2006-12-07 05:44:44Z PC $ -// Copyright: (c) 2005 Seth Jackson -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGTGA_H_ -#define _WX_IMAGTGA_H_ - -#include "wx/image.h" - -//----------------------------------------------------------------------------- -// wxTGAHandler -//----------------------------------------------------------------------------- - -#if wxUSE_TGA - -class WXDLLEXPORT wxTGAHandler : public wxImageHandler -{ -public: - wxTGAHandler() - { - m_name = wxT("TGA file"); - m_extension = wxT("tga"); - m_type = wxBITMAP_TYPE_TGA; - m_mime = wxT("image/tga"); - } - -#if wxUSE_STREAMS - virtual bool LoadFile(wxImage* image, wxInputStream& stream, - bool verbose = true, int index = -1); - virtual bool SaveFile(wxImage* image, wxOutputStream& stream, - bool verbose = true); -protected: - virtual bool DoCanRead(wxInputStream& stream); -#endif // wxUSE_STREAMS - - DECLARE_DYNAMIC_CLASS(wxTGAHandler) -}; - -#endif // wxUSE_TGA - -#endif // _WX_IMAGTGA_H_ diff --git a/desmume/src/windows/wx/include/wx/imagtiff.h b/desmume/src/windows/wx/include/wx/imagtiff.h deleted file mode 100644 index d236b75c0..000000000 --- a/desmume/src/windows/wx/include/wx/imagtiff.h +++ /dev/null @@ -1,49 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: imagtiff.h -// Purpose: wxImage TIFF handler -// Author: Robert Roebling -// RCS-ID: $Id: imagtiff.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGTIFF_H_ -#define _WX_IMAGTIFF_H_ - -#include "wx/defs.h" - -//----------------------------------------------------------------------------- -// wxTIFFHandler -//----------------------------------------------------------------------------- - -#if wxUSE_LIBTIFF - -#include "wx/image.h" - -// defines for wxImage::SetOption -#define wxIMAGE_OPTION_BITSPERSAMPLE wxString(_T("BitsPerSample")) -#define wxIMAGE_OPTION_SAMPLESPERPIXEL wxString(_T("SamplesPerPixel")) -#define wxIMAGE_OPTION_COMPRESSION wxString(_T("Compression")) -#define wxIMAGE_OPTION_IMAGEDESCRIPTOR wxString(_T("ImageDescriptor")) - -class WXDLLEXPORT wxTIFFHandler: public wxImageHandler -{ -public: - wxTIFFHandler(); - -#if wxUSE_STREAMS - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); - virtual int GetImageCount( wxInputStream& stream ); -protected: - virtual bool DoCanRead( wxInputStream& stream ); -#endif - -private: - DECLARE_DYNAMIC_CLASS(wxTIFFHandler) -}; - -#endif // wxUSE_LIBTIFF - -#endif // _WX_IMAGTIFF_H_ - diff --git a/desmume/src/windows/wx/include/wx/imagxpm.h b/desmume/src/windows/wx/include/wx/imagxpm.h deleted file mode 100644 index 6982e77af..000000000 --- a/desmume/src/windows/wx/include/wx/imagxpm.h +++ /dev/null @@ -1,45 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: imaggif.h -// Purpose: wxImage XPM handler -// Author: Vaclav Slavik -// RCS-ID: $Id: imagxpm.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) 2001 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGXPM_H_ -#define _WX_IMAGXPM_H_ - -#include "wx/image.h" - - -//----------------------------------------------------------------------------- -// wxXPMHandler -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxXPMHandler : public wxImageHandler -{ -public: - inline wxXPMHandler() - { - m_name = wxT("XPM file"); - m_extension = wxT("xpm"); - m_type = wxBITMAP_TYPE_XPM; - m_mime = wxT("image/xpm"); - } - -#if wxUSE_STREAMS - virtual bool LoadFile( wxImage *image, wxInputStream& stream, bool verbose=true, int index=-1 ); - virtual bool SaveFile( wxImage *image, wxOutputStream& stream, bool verbose=true ); -protected: - virtual bool DoCanRead( wxInputStream& stream ); -#endif - -private: - DECLARE_DYNAMIC_CLASS(wxXPMHandler) -}; - - -#endif - // _WX_IMAGXPM_H_ - diff --git a/desmume/src/windows/wx/include/wx/init.h b/desmume/src/windows/wx/include/wx/init.h deleted file mode 100644 index c40018cfe..000000000 --- a/desmume/src/windows/wx/include/wx/init.h +++ /dev/null @@ -1,95 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/init.h -// Purpose: wxWidgets initialization and finalization functions -// Author: Vadim Zeitlin -// Modified by: -// Created: 29.06.2003 -// RCS-ID: $Id: init.h 42109 2006-10-19 07:43:24Z MR $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_INIT_H_ -#define _WX_INIT_H_ - -#include "wx/defs.h" -#include "wx/wxchar.h" - -// ---------------------------------------------------------------------------- -// wxEntry helper functions which allow to have more fine grained control -// ---------------------------------------------------------------------------- - -// do common initialization, return true if ok (in this case wxEntryCleanup -// must be called later), otherwise the program can't use wxWidgets at all -// -// this function also creates wxTheApp as a side effect, if IMPLEMENT_APP -// hadn't been used a dummy default application object is created -// -// note that the parameters may be modified, this is why we pass them by -// reference! -extern bool WXDLLIMPEXP_BASE wxEntryStart(int& argc, wxChar **argv); - -// free the resources allocated by the library in wxEntryStart() and shut it -// down (wxEntryStart() may be called again afterwards if necessary) -extern void WXDLLIMPEXP_BASE wxEntryCleanup(); - - -// ---------------------------------------------------------------------------- -// wxEntry: this function initializes the library, runs the main event loop -// and cleans it up -// ---------------------------------------------------------------------------- - -// note that other, platform-specific, overloads of wxEntry may exist as well -// but this one always exists under all platforms -// -// returns the program exit code -extern int WXDLLIMPEXP_BASE wxEntry(int& argc, wxChar **argv); - -// we overload wxEntry[Start]() to take "char **" pointers too -#if wxUSE_UNICODE - -extern bool WXDLLIMPEXP_BASE wxEntryStart(int& argc, char **argv); -extern int WXDLLIMPEXP_BASE wxEntry(int& argc, char **argv); - -#endif// wxUSE_UNICODE - -// ---------------------------------------------------------------------------- -// Using the library without (explicit) application object: you may avoid using -// DECLARE_APP and IMPLEMENT_APP macros and call the functions below instead at -// the program startup and termination -// ---------------------------------------------------------------------------- - -// initialize the library (may be called as many times as needed, but each -// call to wxInitialize() must be matched by wxUninitialize()) -extern bool WXDLLIMPEXP_BASE wxInitialize(int argc = 0, wxChar **argv = NULL); - -// clean up -- the library can't be used any more after the last call to -// wxUninitialize() -extern void WXDLLIMPEXP_BASE wxUninitialize(); - -// create an object of this class on stack to initialize/cleanup the library -// automatically -class WXDLLIMPEXP_BASE wxInitializer -{ -public: - // initialize the library - wxInitializer(int argc = 0, wxChar **argv = NULL) - { - m_ok = wxInitialize(argc, argv); - } - - // has the initialization been successful? (explicit test) - bool IsOk() const { return m_ok; } - - // has the initialization been successful? (implicit test) - operator bool() const { return m_ok; } - - // dtor only does clean up if we initialized the library properly - ~wxInitializer() { if ( m_ok ) wxUninitialize(); } - -private: - bool m_ok; -}; - -#endif // _WX_INIT_H_ - diff --git a/desmume/src/windows/wx/include/wx/intl.h b/desmume/src/windows/wx/include/wx/intl.h deleted file mode 100644 index 02bef05b8..000000000 --- a/desmume/src/windows/wx/include/wx/intl.h +++ /dev/null @@ -1,632 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/intl.h -// Purpose: Internationalization and localisation for wxWidgets -// Author: Vadim Zeitlin -// Modified by: Michael N. Filippov <michael@idisys.iae.nsk.su> -// (2003/09/30 - plural forms support) -// Created: 29/01/98 -// RCS-ID: $Id: intl.h 53754 2008-05-26 18:50:17Z RD $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -// WARNING: Parts of this file are generated. See misc/languages/README for -// details. - -#ifndef _WX_INTL_H_ -#define _WX_INTL_H_ - -#include "wx/defs.h" -#include "wx/string.h" - -// Make wxLayoutDirection enum available without need for wxUSE_INTL so wxWindow, wxApp -// and other classes are not distrubed by wxUSE_INTL - -enum wxLayoutDirection -{ - wxLayout_Default, - wxLayout_LeftToRight, - wxLayout_RightToLeft -}; - -#if wxUSE_INTL - -#include "wx/fontenc.h" - -// ============================================================================ -// global decls -// ============================================================================ - -// ---------------------------------------------------------------------------- -// macros -// ---------------------------------------------------------------------------- - -// gettext() style macros (notice that xgettext should be invoked with -// --keyword="_" --keyword="wxPLURAL:1,2" options -// to extract the strings from the sources) -#ifndef WXINTL_NO_GETTEXT_MACRO - #define _(s) wxGetTranslation(_T(s)) - #define wxPLURAL(sing, plur, n) wxGetTranslation(_T(sing), _T(plur), n) -#endif - -// another one which just marks the strings for extraction, but doesn't -// perform the translation (use -kwxTRANSLATE with xgettext!) -#define wxTRANSLATE(str) _T(str) - -// ---------------------------------------------------------------------------- -// forward decls -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_BASE wxLocale; -class WXDLLIMPEXP_FWD_BASE wxLanguageInfoArray; -class wxMsgCatalog; - -// ============================================================================ -// locale support -// ============================================================================ - -// ---------------------------------------------------------------------------- -// wxLanguage: defines all supported languages -// ---------------------------------------------------------------------------- - -// --- --- --- generated code begins here --- --- --- - -// This enum is generated by misc/languages/genlang.py -// When making changes, please put them into misc/languages/langtabl.txt -enum wxLanguage -{ - // user's default/preffered language as got from OS: - wxLANGUAGE_DEFAULT, - // unknown language, if wxLocale::GetSystemLanguage fails: - wxLANGUAGE_UNKNOWN, - - wxLANGUAGE_ABKHAZIAN, - wxLANGUAGE_AFAR, - wxLANGUAGE_AFRIKAANS, - wxLANGUAGE_ALBANIAN, - wxLANGUAGE_AMHARIC, - wxLANGUAGE_ARABIC, - wxLANGUAGE_ARABIC_ALGERIA, - wxLANGUAGE_ARABIC_BAHRAIN, - wxLANGUAGE_ARABIC_EGYPT, - wxLANGUAGE_ARABIC_IRAQ, - wxLANGUAGE_ARABIC_JORDAN, - wxLANGUAGE_ARABIC_KUWAIT, - wxLANGUAGE_ARABIC_LEBANON, - wxLANGUAGE_ARABIC_LIBYA, - wxLANGUAGE_ARABIC_MOROCCO, - wxLANGUAGE_ARABIC_OMAN, - wxLANGUAGE_ARABIC_QATAR, - wxLANGUAGE_ARABIC_SAUDI_ARABIA, - wxLANGUAGE_ARABIC_SUDAN, - wxLANGUAGE_ARABIC_SYRIA, - wxLANGUAGE_ARABIC_TUNISIA, - wxLANGUAGE_ARABIC_UAE, - wxLANGUAGE_ARABIC_YEMEN, - wxLANGUAGE_ARMENIAN, - wxLANGUAGE_ASSAMESE, - wxLANGUAGE_AYMARA, - wxLANGUAGE_AZERI, - wxLANGUAGE_AZERI_CYRILLIC, - wxLANGUAGE_AZERI_LATIN, - wxLANGUAGE_BASHKIR, - wxLANGUAGE_BASQUE, - wxLANGUAGE_BELARUSIAN, - wxLANGUAGE_BENGALI, - wxLANGUAGE_BHUTANI, - wxLANGUAGE_BIHARI, - wxLANGUAGE_BISLAMA, - wxLANGUAGE_BRETON, - wxLANGUAGE_BULGARIAN, - wxLANGUAGE_BURMESE, - wxLANGUAGE_CAMBODIAN, - wxLANGUAGE_CATALAN, - wxLANGUAGE_CHINESE, - wxLANGUAGE_CHINESE_SIMPLIFIED, - wxLANGUAGE_CHINESE_TRADITIONAL, - wxLANGUAGE_CHINESE_HONGKONG, - wxLANGUAGE_CHINESE_MACAU, - wxLANGUAGE_CHINESE_SINGAPORE, - wxLANGUAGE_CHINESE_TAIWAN, - wxLANGUAGE_CORSICAN, - wxLANGUAGE_CROATIAN, - wxLANGUAGE_CZECH, - wxLANGUAGE_DANISH, - wxLANGUAGE_DUTCH, - wxLANGUAGE_DUTCH_BELGIAN, - wxLANGUAGE_ENGLISH, - wxLANGUAGE_ENGLISH_UK, - wxLANGUAGE_ENGLISH_US, - wxLANGUAGE_ENGLISH_AUSTRALIA, - wxLANGUAGE_ENGLISH_BELIZE, - wxLANGUAGE_ENGLISH_BOTSWANA, - wxLANGUAGE_ENGLISH_CANADA, - wxLANGUAGE_ENGLISH_CARIBBEAN, - wxLANGUAGE_ENGLISH_DENMARK, - wxLANGUAGE_ENGLISH_EIRE, - wxLANGUAGE_ENGLISH_JAMAICA, - wxLANGUAGE_ENGLISH_NEW_ZEALAND, - wxLANGUAGE_ENGLISH_PHILIPPINES, - wxLANGUAGE_ENGLISH_SOUTH_AFRICA, - wxLANGUAGE_ENGLISH_TRINIDAD, - wxLANGUAGE_ENGLISH_ZIMBABWE, - wxLANGUAGE_ESPERANTO, - wxLANGUAGE_ESTONIAN, - wxLANGUAGE_FAEROESE, - wxLANGUAGE_FARSI, - wxLANGUAGE_FIJI, - wxLANGUAGE_FINNISH, - wxLANGUAGE_FRENCH, - wxLANGUAGE_FRENCH_BELGIAN, - wxLANGUAGE_FRENCH_CANADIAN, - wxLANGUAGE_FRENCH_LUXEMBOURG, - wxLANGUAGE_FRENCH_MONACO, - wxLANGUAGE_FRENCH_SWISS, - wxLANGUAGE_FRISIAN, - wxLANGUAGE_GALICIAN, - wxLANGUAGE_GEORGIAN, - wxLANGUAGE_GERMAN, - wxLANGUAGE_GERMAN_AUSTRIAN, - wxLANGUAGE_GERMAN_BELGIUM, - wxLANGUAGE_GERMAN_LIECHTENSTEIN, - wxLANGUAGE_GERMAN_LUXEMBOURG, - wxLANGUAGE_GERMAN_SWISS, - wxLANGUAGE_GREEK, - wxLANGUAGE_GREENLANDIC, - wxLANGUAGE_GUARANI, - wxLANGUAGE_GUJARATI, - wxLANGUAGE_HAUSA, - wxLANGUAGE_HEBREW, - wxLANGUAGE_HINDI, - wxLANGUAGE_HUNGARIAN, - wxLANGUAGE_ICELANDIC, - wxLANGUAGE_INDONESIAN, - wxLANGUAGE_INTERLINGUA, - wxLANGUAGE_INTERLINGUE, - wxLANGUAGE_INUKTITUT, - wxLANGUAGE_INUPIAK, - wxLANGUAGE_IRISH, - wxLANGUAGE_ITALIAN, - wxLANGUAGE_ITALIAN_SWISS, - wxLANGUAGE_JAPANESE, - wxLANGUAGE_JAVANESE, - wxLANGUAGE_KANNADA, - wxLANGUAGE_KASHMIRI, - wxLANGUAGE_KASHMIRI_INDIA, - wxLANGUAGE_KAZAKH, - wxLANGUAGE_KERNEWEK, - wxLANGUAGE_KINYARWANDA, - wxLANGUAGE_KIRGHIZ, - wxLANGUAGE_KIRUNDI, - wxLANGUAGE_KONKANI, - wxLANGUAGE_KOREAN, - wxLANGUAGE_KURDISH, - wxLANGUAGE_LAOTHIAN, - wxLANGUAGE_LATIN, - wxLANGUAGE_LATVIAN, - wxLANGUAGE_LINGALA, - wxLANGUAGE_LITHUANIAN, - wxLANGUAGE_MACEDONIAN, - wxLANGUAGE_MALAGASY, - wxLANGUAGE_MALAY, - wxLANGUAGE_MALAYALAM, - wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM, - wxLANGUAGE_MALAY_MALAYSIA, - wxLANGUAGE_MALTESE, - wxLANGUAGE_MANIPURI, - wxLANGUAGE_MAORI, - wxLANGUAGE_MARATHI, - wxLANGUAGE_MOLDAVIAN, - wxLANGUAGE_MONGOLIAN, - wxLANGUAGE_NAURU, - wxLANGUAGE_NEPALI, - wxLANGUAGE_NEPALI_INDIA, - wxLANGUAGE_NORWEGIAN_BOKMAL, - wxLANGUAGE_NORWEGIAN_NYNORSK, - wxLANGUAGE_OCCITAN, - wxLANGUAGE_ORIYA, - wxLANGUAGE_OROMO, - wxLANGUAGE_PASHTO, - wxLANGUAGE_POLISH, - wxLANGUAGE_PORTUGUESE, - wxLANGUAGE_PORTUGUESE_BRAZILIAN, - wxLANGUAGE_PUNJABI, - wxLANGUAGE_QUECHUA, - wxLANGUAGE_RHAETO_ROMANCE, - wxLANGUAGE_ROMANIAN, - wxLANGUAGE_RUSSIAN, - wxLANGUAGE_RUSSIAN_UKRAINE, - wxLANGUAGE_SAMOAN, - wxLANGUAGE_SANGHO, - wxLANGUAGE_SANSKRIT, - wxLANGUAGE_SCOTS_GAELIC, - wxLANGUAGE_SERBIAN, - wxLANGUAGE_SERBIAN_CYRILLIC, - wxLANGUAGE_SERBIAN_LATIN, - wxLANGUAGE_SERBO_CROATIAN, - wxLANGUAGE_SESOTHO, - wxLANGUAGE_SETSWANA, - wxLANGUAGE_SHONA, - wxLANGUAGE_SINDHI, - wxLANGUAGE_SINHALESE, - wxLANGUAGE_SISWATI, - wxLANGUAGE_SLOVAK, - wxLANGUAGE_SLOVENIAN, - wxLANGUAGE_SOMALI, - wxLANGUAGE_SPANISH, - wxLANGUAGE_SPANISH_ARGENTINA, - wxLANGUAGE_SPANISH_BOLIVIA, - wxLANGUAGE_SPANISH_CHILE, - wxLANGUAGE_SPANISH_COLOMBIA, - wxLANGUAGE_SPANISH_COSTA_RICA, - wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC, - wxLANGUAGE_SPANISH_ECUADOR, - wxLANGUAGE_SPANISH_EL_SALVADOR, - wxLANGUAGE_SPANISH_GUATEMALA, - wxLANGUAGE_SPANISH_HONDURAS, - wxLANGUAGE_SPANISH_MEXICAN, - wxLANGUAGE_SPANISH_MODERN, - wxLANGUAGE_SPANISH_NICARAGUA, - wxLANGUAGE_SPANISH_PANAMA, - wxLANGUAGE_SPANISH_PARAGUAY, - wxLANGUAGE_SPANISH_PERU, - wxLANGUAGE_SPANISH_PUERTO_RICO, - wxLANGUAGE_SPANISH_URUGUAY, - wxLANGUAGE_SPANISH_US, - wxLANGUAGE_SPANISH_VENEZUELA, - wxLANGUAGE_SUNDANESE, - wxLANGUAGE_SWAHILI, - wxLANGUAGE_SWEDISH, - wxLANGUAGE_SWEDISH_FINLAND, - wxLANGUAGE_TAGALOG, - wxLANGUAGE_TAJIK, - wxLANGUAGE_TAMIL, - wxLANGUAGE_TATAR, - wxLANGUAGE_TELUGU, - wxLANGUAGE_THAI, - wxLANGUAGE_TIBETAN, - wxLANGUAGE_TIGRINYA, - wxLANGUAGE_TONGA, - wxLANGUAGE_TSONGA, - wxLANGUAGE_TURKISH, - wxLANGUAGE_TURKMEN, - wxLANGUAGE_TWI, - wxLANGUAGE_UIGHUR, - wxLANGUAGE_UKRAINIAN, - wxLANGUAGE_URDU, - wxLANGUAGE_URDU_INDIA, - wxLANGUAGE_URDU_PAKISTAN, - wxLANGUAGE_UZBEK, - wxLANGUAGE_UZBEK_CYRILLIC, - wxLANGUAGE_UZBEK_LATIN, - wxLANGUAGE_VIETNAMESE, - wxLANGUAGE_VOLAPUK, - wxLANGUAGE_WELSH, - wxLANGUAGE_WOLOF, - wxLANGUAGE_XHOSA, - wxLANGUAGE_YIDDISH, - wxLANGUAGE_YORUBA, - wxLANGUAGE_ZHUANG, - wxLANGUAGE_ZULU, - - // for custom, user-defined languages: - wxLANGUAGE_USER_DEFINED - - -#if wxABI_VERSION >= 20808 - // For binary compatibility, we can't put new items in their normal - // position in the enum, because it would change other values. We have to - // put it somewhere well outside normal range -- the particular value used - // is arbitrary: - , wxLANGUAGE_VALENCIAN = 0x1fffffff, - wxLANGUAGE_SAMI -#endif -}; - -// --- --- --- generated code ends here --- --- --- - -// ---------------------------------------------------------------------------- -// wxLanguageInfo: encapsulates wxLanguage to OS native lang.desc. -// translation information -// ---------------------------------------------------------------------------- - -struct WXDLLIMPEXP_BASE wxLanguageInfo -{ - int Language; // wxLanguage id - wxString CanonicalName; // Canonical name, e.g. fr_FR -#ifdef __WIN32__ - wxUint32 WinLang, // Win32 language identifiers - WinSublang; -#endif // __WIN32__ - wxString Description; // human-readable name of the language - wxLayoutDirection LayoutDirection; -}; - -// ---------------------------------------------------------------------------- -// wxLocaleCategory: the category of locale settings -// ---------------------------------------------------------------------------- - -enum wxLocaleCategory -{ - // (any) numbers - wxLOCALE_CAT_NUMBER, - - // date/time - wxLOCALE_CAT_DATE, - - // monetary value - wxLOCALE_CAT_MONEY, - - wxLOCALE_CAT_MAX -}; - -// ---------------------------------------------------------------------------- -// wxLocaleInfo: the items understood by wxLocale::GetInfo() -// ---------------------------------------------------------------------------- - -enum wxLocaleInfo -{ - // the thounsands separator - wxLOCALE_THOUSANDS_SEP, - - // the character used as decimal point - wxLOCALE_DECIMAL_POINT - -}; - -// ---------------------------------------------------------------------------- -// wxLocale: encapsulates all language dependent settings, including current -// message catalogs, date, time and currency formats (TODO) &c -// ---------------------------------------------------------------------------- - -enum wxLocaleInitFlags -{ - wxLOCALE_LOAD_DEFAULT = 0x0001, // load wxwin.mo? - wxLOCALE_CONV_ENCODING = 0x0002 // convert encoding on the fly? -}; - -class WXDLLIMPEXP_BASE wxLocale -{ -public: - // ctor & dtor - // ----------- - - // call Init() if you use this ctor - wxLocale() { DoCommonInit(); } - - // the ctor has a side effect of changing current locale - wxLocale(const wxChar *szName, // name (for messages) - const wxChar *szShort = (const wxChar *) NULL, // dir prefix (for msg files) - const wxChar *szLocale = (const wxChar *) NULL, // locale (for setlocale) - bool bLoadDefault = true, // preload wxstd.mo? - bool bConvertEncoding = false) // convert Win<->Unix if necessary? - { - DoCommonInit(); - - Init(szName, szShort, szLocale, bLoadDefault, bConvertEncoding); - } - - wxLocale(int language, // wxLanguage id or custom language - int flags = wxLOCALE_LOAD_DEFAULT | wxLOCALE_CONV_ENCODING) - { - DoCommonInit(); - - Init(language, flags); - } - - // the same as a function (returns true on success) - bool Init(const wxChar *szName, - const wxChar *szShort = (const wxChar *) NULL, - const wxChar *szLocale = (const wxChar *) NULL, - bool bLoadDefault = true, - bool bConvertEncoding = false); - - // same as second ctor (returns true on success) - bool Init(int language = wxLANGUAGE_DEFAULT, - int flags = wxLOCALE_LOAD_DEFAULT | wxLOCALE_CONV_ENCODING); - - // restores old locale - virtual ~wxLocale(); - - // Try to get user's (or OS's) preferred language setting. - // Return wxLANGUAGE_UNKNOWN if language-guessing algorithm failed - static int GetSystemLanguage(); - - // get the encoding used by default for text on this system, returns - // wxFONTENCODING_SYSTEM if it couldn't be determined - static wxFontEncoding GetSystemEncoding(); - - // get the string describing the system encoding, return empty string if - // couldn't be determined - static wxString GetSystemEncodingName(); - - // get the values of the given locale-dependent datum: the current locale - // is used, the US default value is returned if everything else fails - static wxString GetInfo(wxLocaleInfo index, wxLocaleCategory cat); - - // return true if the locale was set successfully - bool IsOk() const { return m_pszOldLocale != NULL; } - - // returns locale name - const wxChar *GetLocale() const { return m_strLocale; } - - // return current locale wxLanguage value - int GetLanguage() const { return m_language; } - - // return locale name to be passed to setlocale() - wxString GetSysName() const; - - // return 'canonical' name, i.e. in the form of xx[_YY], where xx is - // language code according to ISO 639 and YY is country name - // as specified by ISO 3166. - wxString GetCanonicalName() const { return m_strShort; } - - // add a prefix to the catalog lookup path: the message catalog files will be - // looked up under prefix/<lang>/LC_MESSAGES, prefix/LC_MESSAGES and prefix - // (in this order). - // - // This only applies to subsequent invocations of AddCatalog()! - static void AddCatalogLookupPathPrefix(const wxString& prefix); - - // add a catalog: it's searched for in standard places (current directory - // first, system one after), but the you may prepend additional directories to - // the search path with AddCatalogLookupPathPrefix(). - // - // The loaded catalog will be used for message lookup by GetString(). - // - // Returns 'true' if it was successfully loaded - bool AddCatalog(const wxChar *szDomain); - bool AddCatalog(const wxChar *szDomain, - wxLanguage msgIdLanguage, const wxChar *msgIdCharset); - - // check if the given locale is provided by OS and C run time - static bool IsAvailable(int lang); - - // check if the given catalog is loaded - bool IsLoaded(const wxChar *szDomain) const; - - // Retrieve the language info struct for the given language - // - // Returns NULL if no info found, pointer must *not* be deleted by caller - static const wxLanguageInfo *GetLanguageInfo(int lang); - - // Returns language name in English or empty string if the language - // is not in database - static wxString GetLanguageName(int lang); - - // Find the language for the given locale string which may be either a - // canonical ISO 2 letter language code ("xx"), a language code followed by - // the country code ("xx_XX") or a Windows full language name ("Xxxxx...") - // - // Returns NULL if no info found, pointer must *not* be deleted by caller - static const wxLanguageInfo *FindLanguageInfo(const wxString& locale); - - // Add custom language to the list of known languages. - // Notes: 1) wxLanguageInfo contains platform-specific data - // 2) must be called before Init to have effect - static void AddLanguage(const wxLanguageInfo& info); - - // retrieve the translation for a string in all loaded domains unless - // the szDomain parameter is specified (and then only this domain is - // searched) - // n - additional parameter for PluralFormsParser - // - // return original string if translation is not available - // (in this case an error message is generated the first time - // a string is not found; use wxLogNull to suppress it) - // - // domains are searched in the last to first order, i.e. catalogs - // added later override those added before. - virtual const wxChar *GetString(const wxChar *szOrigString, - const wxChar *szDomain = NULL) const; - // plural form version of the same: - virtual const wxChar *GetString(const wxChar *szOrigString, - const wxChar *szOrigString2, - size_t n, - const wxChar *szDomain = NULL) const; - - // Returns the current short name for the locale - const wxString& GetName() const { return m_strShort; } - - // return the contents of .po file header - wxString GetHeaderValue( const wxChar* szHeader, - const wxChar* szDomain = NULL ) const; - - // These two methods are for internal use only. First one creates - // ms_languagesDB if it doesn't already exist, second one destroys - // it. - static void CreateLanguagesDB(); - static void DestroyLanguagesDB(); - -private: - // find catalog by name in a linked list, return NULL if !found - wxMsgCatalog *FindCatalog(const wxChar *szDomain) const; - - // copy default table of languages from global static array to - // m_langugagesInfo, called by InitLanguagesDB - static void InitLanguagesDB(); - - // initialize the member fields to default values - void DoCommonInit(); - - wxString m_strLocale, // this locale name - m_strShort; // short name for the locale - int m_language; // this locale wxLanguage value - - const wxChar *m_pszOldLocale; // previous locale from setlocale() - wxLocale *m_pOldLocale; // previous wxLocale - - wxMsgCatalog *m_pMsgCat; // pointer to linked list of catalogs - - bool m_bConvertEncoding; - - bool m_initialized; - - static wxLanguageInfoArray *ms_languagesDB; - - DECLARE_NO_COPY_CLASS(wxLocale) -}; - -// ---------------------------------------------------------------------------- -// global functions -// ---------------------------------------------------------------------------- - -// get the current locale object (note that it may be NULL!) -extern WXDLLIMPEXP_BASE wxLocale* wxGetLocale(); - -// get the translation of the string in the current locale -inline const wxChar * -wxGetTranslation(const wxChar *sz, const wxChar* domain = NULL) -{ - wxLocale *pLoc = wxGetLocale(); - if (pLoc) - return pLoc->GetString(sz, domain); - else - return sz; -} - -inline const wxChar * -wxGetTranslation(const wxChar *sz1, const wxChar *sz2, - size_t n, - const wxChar *domain = NULL) -{ - wxLocale *pLoc = wxGetLocale(); - if (pLoc) - return pLoc->GetString(sz1, sz2, n, domain); - else - return n == 1 ? sz1 : sz2; -} - -#else // !wxUSE_INTL - -// the macros should still be defined - otherwise compilation would fail - -#if !defined(WXINTL_NO_GETTEXT_MACRO) - #if !defined(_) - #define _(s) (_T(s)) - #endif - #define wxPLURAL(sing, plur, n) ((n) == 1 ? _T(sing) : _T(plur)) -#endif - -#define wxTRANSLATE(str) _T(str) - -inline const wxChar * -wxGetTranslation(const wxChar *sz, const wxChar * WXUNUSED(domain) = NULL) -{ - return sz; -} - -#endif // wxUSE_INTL/!wxUSE_INTL - -// define this one just in case it occurs somewhere (instead of preferred -// wxTRANSLATE) too -#if !defined(WXINTL_NO_GETTEXT_MACRO) - #if !defined(gettext_noop) - #define gettext_noop(str) _T(str) - #endif - #if !defined(N_) - #define N_(s) _T(s) - #endif -#endif - -#endif // _WX_INTL_H_ diff --git a/desmume/src/windows/wx/include/wx/iosfwrap.h b/desmume/src/windows/wx/include/wx/iosfwrap.h deleted file mode 100644 index a4df4bfb9..000000000 --- a/desmume/src/windows/wx/include/wx/iosfwrap.h +++ /dev/null @@ -1,26 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/iosfwrap.h -// Purpose: includes the correct stream-related forward declarations -// Author: Jan van Dijk <jan@etpmod.phys.tue.nl> -// Modified by: -// Created: 18.12.2002 -// RCS-ID: $Id: iosfwrap.h 33555 2005-04-12 21:06:03Z ABX $ -// Copyright: wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#if wxUSE_STD_IOSTREAM - -#if wxUSE_IOSTREAMH - // There is no pre-ANSI iosfwd header so we include the full declarations. -# include <iostream.h> -#else -# include <iosfwd> -#endif - -#ifdef __WXMSW__ -# include "wx/msw/winundef.h" -#endif - -#endif // wxUSE_STD_IOSTREAM - diff --git a/desmume/src/windows/wx/include/wx/ioswrap.h b/desmume/src/windows/wx/include/wx/ioswrap.h deleted file mode 100644 index 0c94219f8..000000000 --- a/desmume/src/windows/wx/include/wx/ioswrap.h +++ /dev/null @@ -1,26 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/ioswrap.h -// Purpose: includes the correct iostream headers for current compiler -// Author: Vadim Zeitlin -// Modified by: -// Created: 03.02.99 -// RCS-ID: $Id: ioswrap.h 33555 2005-04-12 21:06:03Z ABX $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#if wxUSE_STD_IOSTREAM - -#if wxUSE_IOSTREAMH -# include <iostream.h> -#else -# include <iostream> -#endif - -#ifdef __WXMSW__ -# include "wx/msw/winundef.h" -#endif - -#endif - // wxUSE_STD_IOSTREAM - diff --git a/desmume/src/windows/wx/include/wx/ipc.h b/desmume/src/windows/wx/include/wx/ipc.h deleted file mode 100644 index 34d056dde..000000000 --- a/desmume/src/windows/wx/include/wx/ipc.h +++ /dev/null @@ -1,45 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/ipc.h -// Purpose: wrapper around different wxIPC classes implementations -// Author: Vadim Zeitlin -// Modified by: -// Created: 15.04.02 -// RCS-ID: $Id: ipc.h 35698 2005-09-25 20:49:40Z MW $ -// Copyright: (c) 2002 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IPC_H_ -#define _WX_IPC_H_ - -// Set wxUSE_DDE_FOR_IPC to 1 to use DDE for IPC under Windows. If it is set to -// 0, or if the platform is not Windows, use TCP/IP for IPC implementation - -#if !defined(wxUSE_DDE_FOR_IPC) - #ifdef __WXMSW__ - #define wxUSE_DDE_FOR_IPC 1 - #else - #define wxUSE_DDE_FOR_IPC 0 - #endif -#endif // !defined(wxUSE_DDE_FOR_IPC) - -#if !defined(__WINDOWS__) - #undef wxUSE_DDE_FOR_IPC - #define wxUSE_DDE_FOR_IPC 0 -#endif - -#if wxUSE_DDE_FOR_IPC - #define wxConnection wxDDEConnection - #define wxServer wxDDEServer - #define wxClient wxDDEClient - - #include "wx/dde.h" -#else // !wxUSE_DDE_FOR_IPC - #define wxConnection wxTCPConnection - #define wxServer wxTCPServer - #define wxClient wxTCPClient - - #include "wx/sckipc.h" -#endif // wxUSE_DDE_FOR_IPC/!wxUSE_DDE_FOR_IPC - -#endif // _WX_IPC_H_ diff --git a/desmume/src/windows/wx/include/wx/ipcbase.h b/desmume/src/windows/wx/include/wx/ipcbase.h deleted file mode 100644 index e12f52dfe..000000000 --- a/desmume/src/windows/wx/include/wx/ipcbase.h +++ /dev/null @@ -1,163 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: ipcbase.h -// Purpose: Base classes for IPC -// Author: Julian Smart -// Modified by: -// Created: 4/1/98 -// RCS-ID: $Id: ipcbase.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IPCBASEH__ -#define _WX_IPCBASEH__ - -#include "wx/defs.h" -#include "wx/object.h" -#include "wx/string.h" - -enum wxIPCFormat -{ - wxIPC_INVALID = 0, - wxIPC_TEXT = 1, /* CF_TEXT */ - wxIPC_BITMAP = 2, /* CF_BITMAP */ - wxIPC_METAFILE = 3, /* CF_METAFILEPICT */ - wxIPC_SYLK = 4, - wxIPC_DIF = 5, - wxIPC_TIFF = 6, - wxIPC_OEMTEXT = 7, /* CF_OEMTEXT */ - wxIPC_DIB = 8, /* CF_DIB */ - wxIPC_PALETTE = 9, - wxIPC_PENDATA = 10, - wxIPC_RIFF = 11, - wxIPC_WAVE = 12, - wxIPC_UNICODETEXT = 13, - wxIPC_ENHMETAFILE = 14, - wxIPC_FILENAME = 15, /* CF_HDROP */ - wxIPC_LOCALE = 16, - wxIPC_PRIVATE = 20 -}; - -class WXDLLIMPEXP_FWD_BASE wxServerBase; -class WXDLLIMPEXP_FWD_BASE wxClientBase; - -class WXDLLIMPEXP_BASE wxConnectionBase: public wxObject -{ - DECLARE_CLASS(wxConnectionBase) - -public: - wxConnectionBase(wxChar *buffer, int size); // use external buffer - wxConnectionBase(); // use internal, adaptive buffer - wxConnectionBase(const wxConnectionBase& copy); - virtual ~wxConnectionBase(void); - - void SetConnected( bool c ) { m_connected = c; } - bool GetConnected() { return m_connected; } - - // Calls that CLIENT can make - virtual bool Execute(const wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT ) = 0; - virtual bool Execute(const wxString& str) { return Execute(str, -1, wxIPC_TEXT); } - virtual wxChar *Request(const wxString& item, int *size = (int *) NULL, wxIPCFormat format = wxIPC_TEXT) = 0; - virtual bool Poke(const wxString& item, wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT) = 0; - virtual bool StartAdvise(const wxString& item) = 0; - virtual bool StopAdvise(const wxString& item) = 0; - - // Calls that SERVER can make - virtual bool Advise(const wxString& item, wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT) = 0; - - // Calls that both can make - virtual bool Disconnect(void) = 0; - - // Callbacks to SERVER - override at will - virtual bool OnExecute ( const wxString& WXUNUSED(topic), - wxChar *WXUNUSED(data), - int WXUNUSED(size), - wxIPCFormat WXUNUSED(format) ) - { return false; } - - virtual wxChar *OnRequest ( const wxString& WXUNUSED(topic), - const wxString& WXUNUSED(item), - int *WXUNUSED(size), - wxIPCFormat WXUNUSED(format) ) - { return (wxChar *) NULL; } - - virtual bool OnPoke ( const wxString& WXUNUSED(topic), - const wxString& WXUNUSED(item), - wxChar *WXUNUSED(data), - int WXUNUSED(size), - wxIPCFormat WXUNUSED(format) ) - { return false; } - - virtual bool OnStartAdvise ( const wxString& WXUNUSED(topic), - const wxString& WXUNUSED(item) ) - { return false; } - - virtual bool OnStopAdvise ( const wxString& WXUNUSED(topic), - const wxString& WXUNUSED(item) ) - { return false; } - - // Callbacks to CLIENT - override at will - virtual bool OnAdvise ( const wxString& WXUNUSED(topic), - const wxString& WXUNUSED(item), - wxChar *WXUNUSED(data), - int WXUNUSED(size), - wxIPCFormat WXUNUSED(format) ) - { return false; } - - // Callbacks to BOTH - override at will - // Default behaviour is to delete connection and return true - virtual bool OnDisconnect(void) = 0; - - // return a buffer at least this size, reallocating buffer if needed - // returns NULL if using an inadequate user buffer - it can't be resized - wxChar * GetBufferAtLeast( size_t bytes ); - -protected: - bool m_connected; -private: - wxChar * m_buffer; - size_t m_buffersize; - bool m_deletebufferwhendone; - - // can't use DECLARE_NO_COPY_CLASS(wxConnectionBase) because we already - // have copy ctor but still forbid the default assignment operator - wxConnectionBase& operator=(const wxConnectionBase&); -}; - - -class WXDLLIMPEXP_BASE wxServerBase: public wxObject -{ - DECLARE_CLASS(wxServerBase) - -public: - inline wxServerBase(void) {} - inline ~wxServerBase(void) {} - - // Returns false on error (e.g. port number is already in use) - virtual bool Create(const wxString& serverName) = 0; - - // Callbacks to SERVER - override at will - virtual wxConnectionBase *OnAcceptConnection(const wxString& topic) = 0; -}; - -class WXDLLIMPEXP_BASE wxClientBase: public wxObject -{ - DECLARE_CLASS(wxClientBase) - -public: - inline wxClientBase(void) {} - inline ~wxClientBase(void) {} - - virtual bool ValidHost(const wxString& host) = 0; - - // Call this to make a connection. Returns NULL if cannot. - virtual wxConnectionBase *MakeConnection(const wxString& host, - const wxString& server, - const wxString& topic) = 0; - - // Callbacks to CLIENT - override at will - virtual wxConnectionBase *OnMakeConnection(void) = 0; -}; - -#endif - // _WX_IPCBASEH__ diff --git a/desmume/src/windows/wx/include/wx/isql.h b/desmume/src/windows/wx/include/wx/isql.h deleted file mode 100644 index cec4920b3..000000000 --- a/desmume/src/windows/wx/include/wx/isql.h +++ /dev/null @@ -1,248 +0,0 @@ -/* - * isql.h - * - * $Id: isql.h 35518 2005-09-16 11:22:35Z JS $ - * - * iODBC defines - * - * The iODBC driver manager. - * - * Copyright (C) 1995 by Ke Jin <kejin@empress.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free - * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -#ifndef _ISQL_H -#define _ISQL_H - -#if defined(WIN32) -#define SQL_API __stdcall - -#ifndef FAR -#define FAR -#endif - -#elif defined(__OS2__) -#define SQL_API _Optlink - -#ifndef FAR -#define FAR -#define EXPORT -#define CALLBACK -#endif - -#else -#define FAR -#define EXPORT -#define CALLBACK -#define SQL_API EXPORT CALLBACK - -#ifndef __EMX__ -typedef void *HWND; -#endif -#endif - -typedef void *SQLHWND; - -typedef unsigned char UCHAR; -typedef long int SDWORD; -typedef short int SWORD; -typedef unsigned long int UDWORD; -typedef unsigned short int UWORD; -typedef long SQLINTEGER; -typedef UDWORD SQLUINTEGER; - -typedef void FAR *PTR; -typedef void FAR *HENV; -typedef void FAR *HDBC; -typedef void FAR *HSTMT; - -typedef signed short RETCODE; -#define SQLRETURN RETCODE - - -#define ODBCVER 0x0250 - -#define SQL_MAX_MESSAGE_LENGTH 512 -#define SQL_MAX_DSN_LENGTH 32 - -/* - * Function return codes - */ -#define SQL_INVALID_HANDLE (-2) -#define SQL_ERROR (-1) -#define SQL_SUCCESS 0 -#define SQL_SUCCESS_WITH_INFO 1 -#define SQL_NO_DATA_FOUND 100 - -/* - * Standard SQL datatypes, using ANSI type numbering - */ -#define SQL_CHAR 1 -#define SQL_NUMERIC 2 -#define SQL_DECIMAL 3 -#define SQL_INTEGER 4 -#define SQL_SMALLINT 5 -#define SQL_FLOAT 6 -#define SQL_REAL 7 -#define SQL_DOUBLE 8 -#define SQL_VARCHAR 12 - -#define SQL_TYPE_MIN SQL_CHAR -#define SQL_TYPE_NULL 0 -#define SQL_TYPE_MAX SQL_VARCHAR - -/* - * C datatype to SQL datatype mapping - */ -#define SQL_C_CHAR SQL_CHAR -#define SQL_C_LONG SQL_INTEGER -#define SQL_C_SHORT SQL_SMALLINT -#define SQL_C_FLOAT SQL_REAL -#define SQL_C_DOUBLE SQL_DOUBLE -#define SQL_C_DEFAULT 99 - -/* - * NULL status constants. - */ -#define SQL_NO_NULLS 0 -#define SQL_NULLABLE 1 -#define SQL_NULLABLE_UNKNOWN 2 - -/* - * Special length values - */ -#define SQL_NULL_DATA (-1) -#define SQL_DATA_AT_EXEC (-2) -#define SQL_NTS (-3) - -/* - * SQLFreeStmt - */ -#define SQL_CLOSE 0 -#define SQL_DROP 1 -#define SQL_UNBIND 2 -#define SQL_RESET_PARAMS 3 - -/* - * SQLTransact - */ -#define SQL_COMMIT 0 -#define SQL_ROLLBACK 1 - -/* - * SQLColAttributes - */ -#define SQL_COLUMN_COUNT 0 -#define SQL_COLUMN_NAME 1 -#define SQL_COLUMN_TYPE 2 -#define SQL_COLUMN_LENGTH 3 -#define SQL_COLUMN_PRECISION 4 -#define SQL_COLUMN_SCALE 5 -#define SQL_COLUMN_DISPLAY_SIZE 6 -#define SQL_COLUMN_NULLABLE 7 -#define SQL_COLUMN_UNSIGNED 8 -#define SQL_COLUMN_MONEY 9 -#define SQL_COLUMN_UPDATABLE 10 -#define SQL_COLUMN_AUTO_INCREMENT 11 -#define SQL_COLUMN_CASE_SENSITIVE 12 -#define SQL_COLUMN_SEARCHABLE 13 -#define SQL_COLUMN_TYPE_NAME 14 -#define SQL_COLUMN_TABLE_NAME 15 -#define SQL_COLUMN_OWNER_NAME 16 -#define SQL_COLUMN_QUALIFIER_NAME 17 -#define SQL_COLUMN_LABEL 18 - -#define SQL_COLATT_OPT_MAX SQL_COLUMN_LABEL -#define SQL_COLATT_OPT_MIN SQL_COLUMN_COUNT -#define SQL_COLUMN_DRIVER_START 1000 - -/* - * SQLColAttributes : SQL_COLUMN_UPDATABLE - */ -#define SQL_ATTR_READONLY 0 -#define SQL_ATTR_WRITE 1 -#define SQL_ATTR_READWRITE_UNKNOWN 2 - -/* - * SQLColAttributes : SQL_COLUMN_SEARCHABLE - */ -#define SQL_UNSEARCHABLE 0 -#define SQL_LIKE_ONLY 1 -#define SQL_ALL_EXCEPT_LIKE 2 -#define SQL_SEARCHABLE 3 - -/* - * NULL Handles - */ -#define SQL_NULL_HENV 0 -#define SQL_NULL_HDBC 0 -#define SQL_NULL_HSTMT 0 - - -/* - * Function Prototypes - */ -#ifdef __cplusplus -extern "C" -{ -#endif - - RETCODE SQL_API SQLAllocConnect (HENV henv, HDBC FAR * phdbc); - RETCODE SQL_API SQLAllocEnv (HENV FAR * phenv); - RETCODE SQL_API SQLAllocStmt (HDBC hdbc, HSTMT FAR * phstmt); - RETCODE SQL_API SQLBindCol (HSTMT hstmt, UWORD icol, SWORD fCType, - PTR rgbValue, SDWORD cbValueMax, SDWORD FAR * pcbValue); - RETCODE SQL_API SQLCancel (HSTMT hstmt); - RETCODE SQL_API SQLColAttributes (HSTMT hstmt, UWORD icol, UWORD fDescType, - PTR rgbDesc, SWORD cbDescMax, SWORD FAR * pcbDesc, SDWORD FAR * pfDesc); - RETCODE SQL_API SQLConnect (HDBC hdbc, UCHAR FAR * szDSN, SWORD cbDSN, - UCHAR FAR * szUID, SWORD cbUID, UCHAR FAR * szAuthStr, SWORD cbAuthStr); - RETCODE SQL_API SQLDescribeCol (HSTMT hstmt, UWORD icol, - UCHAR FAR * szColName, SWORD cbColNameMax, SWORD FAR * pcbColName, - SWORD FAR * pfSqlType, UDWORD FAR * pcbColDef, SWORD FAR * pibScale, - SWORD FAR * pfNullable); - RETCODE SQL_API SQLDisconnect (HDBC hdbc); - RETCODE SQL_API SQLError (HENV henv, HDBC hdbc, HSTMT hstmt, - UCHAR FAR * szSqlState, SDWORD FAR * pfNativeError, UCHAR FAR * szErrorMsg, - SWORD cbErrorMsgMax, SWORD FAR * pcbErrorMsg); - RETCODE SQL_API SQLExecDirect (HSTMT hstmt, UCHAR FAR * szSqlStr, - SDWORD cbSqlStr); - RETCODE SQL_API SQLExecute (HSTMT hstmt); - RETCODE SQL_API SQLFetch (HSTMT hstmt); - RETCODE SQL_API SQLFreeConnect (HDBC hdbc); - RETCODE SQL_API SQLFreeEnv (HENV henv); - RETCODE SQL_API SQLFreeStmt (HSTMT hstmt, UWORD fOption); - RETCODE SQL_API SQLGetCursorName (HSTMT hstmt, UCHAR FAR * szCursor, - SWORD cbCursorMax, SWORD FAR * pcbCursor); - RETCODE SQL_API SQLNumResultCols (HSTMT hstmt, SWORD FAR * pccol); - RETCODE SQL_API SQLPrepare (HSTMT hstmt, UCHAR FAR * szSqlStr, - SDWORD cbSqlStr); - RETCODE SQL_API SQLRowCount (HSTMT hstmt, SDWORD FAR * pcrow); - RETCODE SQL_API SQLSetCursorName (HSTMT hstmt, UCHAR FAR * szCursor, - SWORD cbCursor); - RETCODE SQL_API SQLTransact (HENV henv, HDBC hdbc, UWORD fType); - -/* - * Deprecated ODBC 1.0 function - Use SQLBindParameter - */ - RETCODE SQL_API SQLSetParam (HSTMT hstmt, UWORD ipar, SWORD fCType, - SWORD fSqlType, UDWORD cbColDef, SWORD ibScale, PTR rgbValue, - SDWORD FAR * pcbValue); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/desmume/src/windows/wx/include/wx/isqlext.h b/desmume/src/windows/wx/include/wx/isqlext.h deleted file mode 100644 index 1b2a833ac..000000000 --- a/desmume/src/windows/wx/include/wx/isqlext.h +++ /dev/null @@ -1,1178 +0,0 @@ -/* - * - * isqlext.h - * - * $Id: isqlext.h 30070 2004-10-22 19:11:07Z KH $ - * - * iODBC defines (ext) - * - * The iODBC driver manager. - * - * Copyright (C) 1995 by Ke Jin <kejin@empress.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the Free - * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -#ifndef _ISQLEXT_H -#define _ISQLEXT_H - -#include "wx/isql.h" - -/* - * Generic constants - */ -#define SQL_MAX_OPTION_STRING_LENGTH 256 - -/* - * Additional return codes - */ -#define SQL_STILL_EXECUTING 2 -#define SQL_NEED_DATA 99 - -/* - * SQL extended datatypes - */ -#define SQL_DATE 9 -#define SQL_TIME 10 -#define SQL_TIMESTAMP 11 -#define SQL_LONGVARCHAR (-1) -#define SQL_BINARY (-2) -#define SQL_VARBINARY (-3) -#define SQL_LONGVARBINARY (-4) -#define SQL_BIGINT (-5) -#define SQL_TINYINT (-6) -#define SQL_BIT (-7) - -#define SQL_INTERVAL_YEAR (-80) -#define SQL_INTERVAL_MONTH (-81) -#define SQL_INTERVAL_YEAR_TO_MONTH (-82) -#define SQL_INTERVAL_DAY (-83) -#define SQL_INTERVAL_HOUR (-84) -#define SQL_INTERVAL_MINUTE (-85) -#define SQL_INTERVAL_SECOND (-86) -#define SQL_INTERVAL_DAY_TO_HOUR (-87) -#define SQL_INTERVAL_DAY_TO_MINUTE (-88) -#define SQL_INTERVAL_DAY_TO_SECOND (-89) -#define SQL_INTERVAL_HOUR_TO_MINUTE (-90) -#define SQL_INTERVAL_HOUR_TO_SECOND (-91) -#define SQL_INTERVAL_MINUTE_TO_SECOND (-92) -#define SQL_UNICODE (-95) - -#define SQL_TYPE_DRIVER_START SQL_INTERVAL_YEAR -#define SQL_TYPE_DRIVER_END SQL_UNICODE - -#define SQL_SIGNED_OFFSET (-20) -#define SQL_UNSIGNED_OFFSET (-22) - -/* - * C datatype to SQL datatype mapping - */ -#define SQL_C_DATE SQL_DATE -#define SQL_C_TIME SQL_TIME -#define SQL_C_TIMESTAMP SQL_TIMESTAMP -#define SQL_C_BINARY SQL_BINARY -#define SQL_C_BIT SQL_BIT -#define SQL_C_TINYINT SQL_TINYINT -#define SQL_C_SLONG SQL_C_LONG+SQL_SIGNED_OFFSET -#define SQL_C_SSHORT SQL_C_SHORT+SQL_SIGNED_OFFSET -#define SQL_C_STINYINT SQL_TINYINT+SQL_SIGNED_OFFSET -#define SQL_C_ULONG SQL_C_LONG+SQL_UNSIGNED_OFFSET -#define SQL_C_USHORT SQL_C_SHORT+SQL_UNSIGNED_OFFSET -#define SQL_C_UTINYINT SQL_TINYINT+SQL_UNSIGNED_OFFSET -#define SQL_C_BOOKMARK SQL_C_ULONG - -/* - * Extended data types override sql.h defined - */ -#undef SQL_TYPE_MIN -#define SQL_TYPE_MIN SQL_BIT -#define SQL_ALL_TYPES 0 - -/* - * SQL portable types for C - DATE, TIME, TIMESTAMP - */ -typedef struct _DATE_STRUCT - { - SWORD year; - UWORD month; - UWORD day; - } -DATE_STRUCT; - -typedef struct _TIME_STRUCT - { - UWORD hour; - UWORD minute; - UWORD second; - } -TIME_STRUCT; - -typedef struct _TIMESTAMP_STRUCT - { - SWORD year; - UWORD month; - UWORD day; - UWORD hour; - UWORD minute; - UWORD second; - UDWORD fraction; - } -TIMESTAMP_STRUCT; - -typedef unsigned long int BOOKMARK; - -/* - * ---------------------------------------------------------------------- - * Level 1 Functions - * ---------------------------------------------------------------------- - */ - -/* - * SQLDriverConnect - */ -#define SQL_DRIVER_NOPROMPT 0 -#define SQL_DRIVER_COMPLETE 1 -#define SQL_DRIVER_PROMPT 2 -#define SQL_DRIVER_COMPLETE_REQUIRED 3 - -/* - * SQLGetData - */ -#define SQL_NO_TOTAL (-4) - -/* - * SQLBindParameter - */ -#define SQL_DEFAULT_PARAM (-5) -#define SQL_IGNORE (-6) -#define SQL_LEN_DATA_AT_EXEC_OFFSET (-100) -#define SQL_LEN_DATA_AT_EXEC(length) (-length+SQL_LEN_DATA_AT_EXEC_OFFSET) - -/* - * SQLGetFunctions - */ -#define SQL_API_SQLALLOCCONNECT 1 /* Core Functions */ -#define SQL_API_SQLALLOCENV 2 -#define SQL_API_SQLALLOCSTMT 3 -#define SQL_API_SQLBINDCOL 4 -#define SQL_API_SQLCANCEL 5 -#define SQL_API_SQLCOLATTRIBUTES 6 -#define SQL_API_SQLCONNECT 7 -#define SQL_API_SQLDESCRIBECOL 8 -#define SQL_API_SQLDISCONNECT 9 -#define SQL_API_SQLERROR 10 -#define SQL_API_SQLEXECDIRECT 11 -#define SQL_API_SQLEXECUTE 12 -#define SQL_API_SQLFETCH 13 -#define SQL_API_SQLFREECONNECT 14 -#define SQL_API_SQLFREEENV 15 -#define SQL_API_SQLFREESTMT 16 -#define SQL_API_SQLGETCURSORNAME 17 -#define SQL_API_SQLNUMRESULTCOLS 18 -#define SQL_API_SQLPREPARE 19 -#define SQL_API_SQLROWCOUNT 20 -#define SQL_API_SQLSETCURSORNAME 21 -#define SQL_API_SQLSETPARAM 22 -#define SQL_API_SQLTRANSACT 23 - -#define SQL_NUM_FUNCTIONS 23 - -#define SQL_EXT_API_START 40 - -#define SQL_API_SQLCOLUMNS 40 /* Level 1 Functions */ -#define SQL_API_SQLDRIVERCONNECT 41 -#define SQL_API_SQLGETCONNECTOPTION 42 -#define SQL_API_SQLGETDATA 43 -#define SQL_API_SQLGETFUNCTIONS 44 -#define SQL_API_SQLGETINFO 45 -#define SQL_API_SQLGETSTMTOPTION 46 -#define SQL_API_SQLGETTYPEINFO 47 -#define SQL_API_SQLPARAMDATA 48 -#define SQL_API_SQLPUTDATA 49 -#define SQL_API_SQLSETCONNECTOPTION 50 -#define SQL_API_SQLSETSTMTOPTION 51 -#define SQL_API_SQLSPECIALCOLUMNS 52 -#define SQL_API_SQLSTATISTICS 53 -#define SQL_API_SQLTABLES 54 - -#define SQL_API_SQLBROWSECONNECT 55 /* Level 2 Functions */ -#define SQL_API_SQLCOLUMNPRIVILEGES 56 -#define SQL_API_SQLDATASOURCES 57 -#define SQL_API_SQLDESCRIBEPARAM 58 -#define SQL_API_SQLEXTENDEDFETCH 59 -#define SQL_API_SQLFOREIGNKEYS 60 -#define SQL_API_SQLMORERESULTS 61 -#define SQL_API_SQLNATIVESQL 62 -#define SQL_API_SQLNUMPARAMS 63 -#define SQL_API_SQLPARAMOPTIONS 64 -#define SQL_API_SQLPRIMARYKEYS 65 -#define SQL_API_SQLPROCEDURECOLUMNS 66 -#define SQL_API_SQLPROCEDURES 67 -#define SQL_API_SQLSETPOS 68 -#define SQL_API_SQLSETSCROLLOPTIONS 69 -#define SQL_API_SQLTABLEPRIVILEGES 70 - -#define SQL_API_SQLDRIVERS 71 -#define SQL_API_SQLBINDPARAMETER 72 -#define SQL_EXT_API_LAST SQL_API_SQLBINDPARAMETER - -#define SQL_API_ALL_FUNCTIONS 0 - -#define SQL_NUM_EXTENSIONS (SQL_EXT_API_LAST-SQL_EXT_API_START+1) - -/* - * SQLGetInfo - */ -#define SQL_INFO_FIRST 0 -#define SQL_ACTIVE_CONNECTIONS 0 -#define SQL_ACTIVE_STATEMENTS 1 -#define SQL_DATA_SOURCE_NAME 2 -#define SQL_DRIVER_HDBC 3 -#define SQL_DRIVER_HENV 4 -#define SQL_DRIVER_HSTMT 5 -#define SQL_DRIVER_NAME 6 -#define SQL_DRIVER_VER 7 -#define SQL_FETCH_DIRECTION 8 -#define SQL_ODBC_API_CONFORMANCE 9 -#define SQL_ODBC_VER 10 -#define SQL_ROW_UPDATES 11 -#define SQL_ODBC_SAG_CLI_CONFORMANCE 12 -#define SQL_SERVER_NAME 13 -#define SQL_SEARCH_PATTERN_ESCAPE 14 -#define SQL_ODBC_SQL_CONFORMANCE 15 -#define SQL_DBMS_NAME 17 -#define SQL_DBMS_VER 18 -#define SQL_ACCESSIBLE_TABLES 19 -#define SQL_ACCESSIBLE_PROCEDURES 20 -#define SQL_PROCEDURES 21 -#define SQL_CONCAT_NULL_BEHAVIOR 22 -#define SQL_CURSOR_COMMIT_BEHAVIOR 23 -#define SQL_CURSOR_ROLLBACK_BEHAVIOR 24 -#define SQL_DATA_SOURCE_READ_ONLY 25 -#define SQL_DEFAULT_TXN_ISOLATION 26 -#define SQL_EXPRESSIONS_IN_ORDERBY 27 -#define SQL_IDENTIFIER_CASE 28 -#define SQL_IDENTIFIER_QUOTE_CHAR 29 -#define SQL_MAX_COLUMN_NAME_LEN 30 -#define SQL_MAX_CURSOR_NAME_LEN 31 -#define SQL_MAX_OWNER_NAME_LEN 32 -#define SQL_MAX_PROCEDURE_NAME_LEN 33 -#define SQL_MAX_QUALIFIER_NAME_LEN 34 -#define SQL_MAX_TABLE_NAME_LEN 35 -#define SQL_MULT_RESULT_SETS 36 -#define SQL_MULTIPLE_ACTIVE_TXN 37 -#define SQL_OUTER_JOINS 38 -#define SQL_OWNER_TERM 39 -#define SQL_PROCEDURE_TERM 40 -#define SQL_QUALIFIER_NAME_SEPARATOR 41 -#define SQL_QUALIFIER_TERM 42 -#define SQL_SCROLL_CONCURRENCY 43 -#define SQL_SCROLL_OPTIONS 44 -#define SQL_TABLE_TERM 45 -#define SQL_TXN_CAPABLE 46 -#define SQL_USER_NAME 47 -#define SQL_CONVERT_FUNCTIONS 48 -#define SQL_NUMERIC_FUNCTIONS 49 -#define SQL_STRING_FUNCTIONS 50 -#define SQL_SYSTEM_FUNCTIONS 51 -#define SQL_TIMEDATE_FUNCTIONS 52 -#define SQL_CONVERT_BIGINT 53 -#define SQL_CONVERT_BINARY 54 -#define SQL_CONVERT_BIT 55 -#define SQL_CONVERT_CHAR 56 -#define SQL_CONVERT_DATE 57 -#define SQL_CONVERT_DECIMAL 58 -#define SQL_CONVERT_DOUBLE 59 -#define SQL_CONVERT_FLOAT 60 -#define SQL_CONVERT_INTEGER 61 -#define SQL_CONVERT_LONGVARCHAR 62 -#define SQL_CONVERT_NUMERIC 63 -#define SQL_CONVERT_REAL 64 -#define SQL_CONVERT_SMALLINT 65 -#define SQL_CONVERT_TIME 66 -#define SQL_CONVERT_TIMESTAMP 67 -#define SQL_CONVERT_TINYINT 68 -#define SQL_CONVERT_VARBINARY 69 -#define SQL_CONVERT_VARCHAR 70 -#define SQL_CONVERT_LONGVARBINARY 71 -#define SQL_TXN_ISOLATION_OPTION 72 -#define SQL_ODBC_SQL_OPT_IEF 73 - -/* - * ODBC SDK 1.0 Additions - */ -#define SQL_CORRELATION_NAME 74 -#define SQL_NON_NULLABLE_COLUMNS 75 - -/* - * ODBC SDK 2.0 Additions - */ -#define SQL_DRIVER_HLIB 76 -#define SQL_DRIVER_ODBC_VER 77 -#define SQL_LOCK_TYPES 78 -#define SQL_POS_OPERATIONS 79 -#define SQL_POSITIONED_STATEMENTS 80 -#define SQL_GETDATA_EXTENSIONS 81 -#define SQL_BOOKMARK_PERSISTENCE 82 -#define SQL_STATIC_SENSITIVITY 83 -#define SQL_FILE_USAGE 84 -#define SQL_NULL_COLLATION 85 -#define SQL_ALTER_TABLE 86 -#define SQL_COLUMN_ALIAS 87 -#define SQL_GROUP_BY 88 -#define SQL_KEYWORDS 89 -#define SQL_ORDER_BY_COLUMNS_IN_SELECT 90 -#define SQL_OWNER_USAGE 91 -#define SQL_QUALIFIER_USAGE 92 -#define SQL_QUOTED_IDENTIFIER_CASE 93 -#define SQL_SPECIAL_CHARACTERS 94 -#define SQL_SUBQUERIES 95 -#define SQL_UNION 96 -#define SQL_MAX_COLUMNS_IN_GROUP_BY 97 -#define SQL_MAX_COLUMNS_IN_INDEX 98 -#define SQL_MAX_COLUMNS_IN_ORDER_BY 99 -#define SQL_MAX_COLUMNS_IN_SELECT 100 -#define SQL_MAX_COLUMNS_IN_TABLE 101 -#define SQL_MAX_INDEX_SIZE 102 -#define SQL_MAX_ROW_SIZE_INCLUDES_LONG 103 -#define SQL_MAX_ROW_SIZE 104 -#define SQL_MAX_STATEMENT_LEN 105 -#define SQL_MAX_TABLES_IN_SELECT 106 -#define SQL_MAX_USER_NAME_LEN 107 -#define SQL_MAX_CHAR_LITERAL_LEN 108 -#define SQL_TIMEDATE_ADD_INTERVALS 109 -#define SQL_TIMEDATE_DIFF_INTERVALS 110 -#define SQL_NEED_LONG_DATA_LEN 111 -#define SQL_MAX_BINARY_LITERAL_LEN 112 -#define SQL_LIKE_ESCAPE_CLAUSE 113 -#define SQL_QUALIFIER_LOCATION 114 - -/* - * ODBC SDK 2.01 Additions - */ -#define SQL_OJ_CAPABILITIES 65003 /* Temp value until ODBC 3.0 */ - -#define SQL_INFO_LAST SQL_QUALIFIER_LOCATION -#define SQL_INFO_DRIVER_START 1000 - - -/* - * SQL_CONVERT_* bitmask values - */ -#define SQL_CVT_CHAR 0x00000001L -#define SQL_CVT_NUMERIC 0x00000002L -#define SQL_CVT_DECIMAL 0x00000004L -#define SQL_CVT_INTEGER 0x00000008L -#define SQL_CVT_SMALLINT 0x00000010L -#define SQL_CVT_FLOAT 0x00000020L -#define SQL_CVT_REAL 0x00000040L -#define SQL_CVT_DOUBLE 0x00000080L -#define SQL_CVT_VARCHAR 0x00000100L -#define SQL_CVT_LONGVARCHAR 0x00000200L -#define SQL_CVT_BINARY 0x00000400L -#define SQL_CVT_VARBINARY 0x00000800L -#define SQL_CVT_BIT 0x00001000L -#define SQL_CVT_TINYINT 0x00002000L -#define SQL_CVT_BIGINT 0x00004000L -#define SQL_CVT_DATE 0x00008000L -#define SQL_CVT_TIME 0x00010000L -#define SQL_CVT_TIMESTAMP 0x00020000L -#define SQL_CVT_LONGVARBINARY 0x00040000L - -/* - * SQL_CONVERT_FUNCTIONS - */ -#define SQL_FN_CVT_CONVERT 0x00000001L - -/* - * SQL_STRING_FUNCTIONS - */ -#define SQL_FN_STR_CONCAT 0x00000001L -#define SQL_FN_STR_INSERT 0x00000002L -#define SQL_FN_STR_LEFT 0x00000004L -#define SQL_FN_STR_LTRIM 0x00000008L -#define SQL_FN_STR_LENGTH 0x00000010L -#define SQL_FN_STR_LOCATE 0x00000020L -#define SQL_FN_STR_LCASE 0x00000040L -#define SQL_FN_STR_REPEAT 0x00000080L -#define SQL_FN_STR_REPLACE 0x00000100L -#define SQL_FN_STR_RIGHT 0x00000200L -#define SQL_FN_STR_RTRIM 0x00000400L -#define SQL_FN_STR_SUBSTRING 0x00000800L -#define SQL_FN_STR_UCASE 0x00001000L -#define SQL_FN_STR_ASCII 0x00002000L -#define SQL_FN_STR_CHAR 0x00004000L -#define SQL_FN_STR_DIFFERENCE 0x00008000L -#define SQL_FN_STR_LOCATE_2 0x00010000L -#define SQL_FN_STR_SOUNDEX 0x00020000L -#define SQL_FN_STR_SPACE 0x00040000L - -/* - * SQL_NUMERIC_FUNCTIONS - */ -#define SQL_FN_NUM_ABS 0x00000001L -#define SQL_FN_NUM_ACOS 0x00000002L -#define SQL_FN_NUM_ASIN 0x00000004L -#define SQL_FN_NUM_ATAN 0x00000008L -#define SQL_FN_NUM_ATAN2 0x00000010L -#define SQL_FN_NUM_CEILING 0x00000020L -#define SQL_FN_NUM_COS 0x00000040L -#define SQL_FN_NUM_COT 0x00000080L -#define SQL_FN_NUM_EXP 0x00000100L -#define SQL_FN_NUM_FLOOR 0x00000200L -#define SQL_FN_NUM_LOG 0x00000400L -#define SQL_FN_NUM_MOD 0x00000800L -#define SQL_FN_NUM_SIGN 0x00001000L -#define SQL_FN_NUM_SIN 0x00002000L -#define SQL_FN_NUM_SQRT 0x00004000L -#define SQL_FN_NUM_TAN 0x00008000L -#define SQL_FN_NUM_PI 0x00010000L -#define SQL_FN_NUM_RAND 0x00020000L -#define SQL_FN_NUM_DEGREES 0x00040000L -#define SQL_FN_NUM_LOG10 0x00080000L -#define SQL_FN_NUM_POWER 0x00100000L -#define SQL_FN_NUM_RADIANS 0x00200000L -#define SQL_FN_NUM_ROUND 0x00400000L -#define SQL_FN_NUM_TRUNCATE 0x00800000L - -/* - * SQL_TIMEDATE_FUNCTIONS - */ -#define SQL_FN_TD_NOW 0x00000001L -#define SQL_FN_TD_CURDATE 0x00000002L -#define SQL_FN_TD_DAYOFMONTH 0x00000004L -#define SQL_FN_TD_DAYOFWEEK 0x00000008L -#define SQL_FN_TD_DAYOFYEAR 0x00000010L -#define SQL_FN_TD_MONTH 0x00000020L -#define SQL_FN_TD_QUARTER 0x00000040L -#define SQL_FN_TD_WEEK 0x00000080L -#define SQL_FN_TD_YEAR 0x00000100L -#define SQL_FN_TD_CURTIME 0x00000200L -#define SQL_FN_TD_HOUR 0x00000400L -#define SQL_FN_TD_MINUTE 0x00000800L -#define SQL_FN_TD_SECOND 0x00001000L -#define SQL_FN_TD_TIMESTAMPADD 0x00002000L -#define SQL_FN_TD_TIMESTAMPDIFF 0x00004000L -#define SQL_FN_TD_DAYNAME 0x00008000L -#define SQL_FN_TD_MONTHNAME 0x00010000L - -/* - * SQL_SYSTEM_FUNCTIONS - */ -#define SQL_FN_SYS_USERNAME 0x00000001L -#define SQL_FN_SYS_DBNAME 0x00000002L -#define SQL_FN_SYS_IFNULL 0x00000004L - -/* - * SQL_TIMEDATE_ADD_INTERVALS - * SQL_TIMEDATE_DIFF_INTERVALS - */ -#define SQL_FN_TSI_FRAC_SECOND 0x00000001L -#define SQL_FN_TSI_SECOND 0x00000002L -#define SQL_FN_TSI_MINUTE 0x00000004L -#define SQL_FN_TSI_HOUR 0x00000008L -#define SQL_FN_TSI_DAY 0x00000010L -#define SQL_FN_TSI_WEEK 0x00000020L -#define SQL_FN_TSI_MONTH 0x00000040L -#define SQL_FN_TSI_QUARTER 0x00000080L -#define SQL_FN_TSI_YEAR 0x00000100L - -/* - * SQL_ODBC_API_CONFORMANCE - */ -#define SQL_OAC_NONE 0x0000 -#define SQL_OAC_LEVEL1 0x0001 -#define SQL_OAC_LEVEL2 0x0002 - -/* - * SQL_ODBC_SAG_CLI_CONFORMANCE - */ -#define SQL_OSCC_NOT_COMPLIANT 0x0000 -#define SQL_OSCC_COMPLIANT 0x0001 - -/* - * SQL_ODBC_SQL_CONFORMANCE - */ -#define SQL_OSC_MINIMUM 0x0000 -#define SQL_OSC_CORE 0x0001 -#define SQL_OSC_EXTENDED 0x0002 - -/* - * SQL_CONCAT_NULL_BEHAVIOR - */ -#define SQL_CB_NULL 0x0000 -#define SQL_CB_NON_NULL 0x0001 - -/* - * SQL_CURSOR_COMMIT_BEHAVIOR - * SQL_CURSOR_ROLLBACK_BEHAVIOR - */ -#define SQL_CB_DELETE 0x0000 -#define SQL_CB_CLOSE 0x0001 -#define SQL_CB_PRESERVE 0x0002 - -/* - * SQL_IDENTIFIER_CASE - */ -#define SQL_IC_UPPER 0x0001 -#define SQL_IC_LOWER 0x0002 -#define SQL_IC_SENSITIVE 0x0003 -#define SQL_IC_MIXED 0x0004 - -/* - * SQL_TXN_CAPABLE - */ -#define SQL_TC_NONE 0x0000 -#define SQL_TC_DML 0x0001 -#define SQL_TC_ALL 0x0002 -#define SQL_TC_DDL_COMMIT 0x0003 -#define SQL_TC_DDL_IGNORE 0x0004 - -/* - * SQL_SCROLL_OPTIONS - */ -#define SQL_SO_FORWARD_ONLY 0x00000001L -#define SQL_SO_KEYSET_DRIVEN 0x00000002L -#define SQL_SO_DYNAMIC 0x00000004L -#define SQL_SO_MIXED 0x00000008L -#define SQL_SO_STATIC 0x00000010L - -/* - * SQL_SCROLL_CONCURRENCY - */ -#define SQL_SCCO_READ_ONLY 0x00000001L -#define SQL_SCCO_LOCK 0x00000002L -#define SQL_SCCO_OPT_ROWVER 0x00000004L -#define SQL_SCCO_OPT_VALUES 0x00000008L - -/* - * SQL_FETCH_DIRECTION - */ -#define SQL_FD_FETCH_NEXT 0x00000001L -#define SQL_FD_FETCH_FIRST 0x00000002L -#define SQL_FD_FETCH_LAST 0x00000004L -#define SQL_FD_FETCH_PRIOR 0x00000008L -#define SQL_FD_FETCH_ABSOLUTE 0x00000010L -#define SQL_FD_FETCH_RELATIVE 0x00000020L -#define SQL_FD_FETCH_RESUME 0x00000040L -#define SQL_FD_FETCH_BOOKMARK 0x00000080L - -/* - * SQL_TXN_ISOLATION_OPTION - */ -#define SQL_TXN_READ_UNCOMMITTED 0x00000001L -#define SQL_TXN_READ_COMMITTED 0x00000002L -#define SQL_TXN_REPEATABLE_READ 0x00000004L -#define SQL_TXN_SERIALIZABLE 0x00000008L -#define SQL_TXN_VERSIONING 0x00000010L - -/* - * SQL_CORRELATION_NAME - */ -#define SQL_CN_NONE 0x0000 -#define SQL_CN_DIFFERENT 0x0001 -#define SQL_CN_ANY 0x0002 - -/* - * SQL_NON_NULLABLE_COLUMNS - */ -#define SQL_NNC_NULL 0x0000 -#define SQL_NNC_NON_NULL 0x0001 - -/* - * SQL_NULL_COLLATION - */ -#define SQL_NC_HIGH 0x0000 -#define SQL_NC_LOW 0x0001 -#define SQL_NC_START 0x0002 -#define SQL_NC_END 0x0004 - -/* - * SQL_FILE_USAGE - */ -#define SQL_FILE_NOT_SUPPORTED 0x0000 -#define SQL_FILE_TABLE 0x0001 -#define SQL_FILE_QUALIFIER 0x0002 - -/* - * SQL_GETDATA_EXTENSIONS - */ -#define SQL_GD_ANY_COLUMN 0x00000001L -#define SQL_GD_ANY_ORDER 0x00000002L -#define SQL_GD_BLOCK 0x00000004L -#define SQL_GD_BOUND 0x00000008L - -/* - * SQL_ALTER_TABLE - */ -#define SQL_AT_ADD_COLUMN 0x00000001L -#define SQL_AT_DROP_COLUMN 0x00000002L - -/* - * SQL_POSITIONED_STATEMENTS - */ -#define SQL_PS_POSITIONED_DELETE 0x00000001L -#define SQL_PS_POSITIONED_UPDATE 0x00000002L -#define SQL_PS_SELECT_FOR_UPDATE 0x00000004L - -/* - * SQL_GROUP_BY - */ -#define SQL_GB_NOT_SUPPORTED 0x0000 -#define SQL_GB_GROUP_BY_EQUALS_SELECT 0x0001 -#define SQL_GB_GROUP_BY_CONTAINS_SELECT 0x0002 -#define SQL_GB_NO_RELATION 0x0003 - -/* - * SQL_OWNER_USAGE - */ -#define SQL_OU_DML_STATEMENTS 0x00000001L -#define SQL_OU_PROCEDURE_INVOCATION 0x00000002L -#define SQL_OU_TABLE_DEFINITION 0x00000004L -#define SQL_OU_INDEX_DEFINITION 0x00000008L -#define SQL_OU_PRIVILEGE_DEFINITION 0x00000010L - -/* - * SQL_QUALIFIER_USAGE - */ -#define SQL_QU_DML_STATEMENTS 0x00000001L -#define SQL_QU_PROCEDURE_INVOCATION 0x00000002L -#define SQL_QU_TABLE_DEFINITION 0x00000004L -#define SQL_QU_INDEX_DEFINITION 0x00000008L -#define SQL_QU_PRIVILEGE_DEFINITION 0x00000010L - -/* - * SQL_SUBQUERIES - */ -#define SQL_SQ_COMPARISON 0x00000001L -#define SQL_SQ_EXISTS 0x00000002L -#define SQL_SQ_IN 0x00000004L -#define SQL_SQ_QUANTIFIED 0x00000008L -#define SQL_SQ_CORRELATED_SUBQUERIES 0x00000010L - -/* - * SQL_UNION - */ -#define SQL_U_UNION 0x00000001L -#define SQL_U_UNION_ALL 0x00000002L - -/* - * SQL_BOOKMARK_PERSISTENCE - */ -#define SQL_BP_CLOSE 0x00000001L -#define SQL_BP_DELETE 0x00000002L -#define SQL_BP_DROP 0x00000004L -#define SQL_BP_TRANSACTION 0x00000008L -#define SQL_BP_UPDATE 0x00000010L -#define SQL_BP_OTHER_HSTMT 0x00000020L -#define SQL_BP_SCROLL 0x00000040L - -/* - * SQL_STATIC_SENSITIVITY - */ -#define SQL_SS_ADDITIONS 0x00000001L -#define SQL_SS_DELETIONS 0x00000002L -#define SQL_SS_UPDATES 0x00000004L - -/* - * SQL_LOCK_TYPES - */ -#define SQL_LCK_NO_CHANGE 0x00000001L -#define SQL_LCK_EXCLUSIVE 0x00000002L -#define SQL_LCK_UNLOCK 0x00000004L - -/* - * SQL_POS_OPERATIONS - */ -#define SQL_POS_POSITION 0x00000001L -#define SQL_POS_REFRESH 0x00000002L -#define SQL_POS_UPDATE 0x00000004L -#define SQL_POS_DELETE 0x00000008L -#define SQL_POS_ADD 0x00000010L - -/* - * SQL_QUALIFIER_LOCATION - */ -#define SQL_QL_START 0x0001L -#define SQL_QL_END 0x0002L - -/* - * SQL_OJ_CAPABILITIES - */ -#define SQL_OJ_LEFT 0x00000001L -#define SQL_OJ_RIGHT 0x00000002L -#define SQL_OJ_FULL 0x00000004L -#define SQL_OJ_NESTED 0x00000008L -#define SQL_OJ_NOT_ORDERED 0x00000010L -#define SQL_OJ_INNER 0x00000020L -#define SQL_OJ_ALL_COMPARISON_OPS 0x00000040L - -/* - * SQLGetStmtOption/SQLSetStmtOption - */ -#define SQL_QUERY_TIMEOUT 0 -#define SQL_MAX_ROWS 1 -#define SQL_NOSCAN 2 -#define SQL_MAX_LENGTH 3 -#define SQL_ASYNC_ENABLE 4 -#define SQL_BIND_TYPE 5 -#define SQL_CURSOR_TYPE 6 -#define SQL_CONCURRENCY 7 -#define SQL_KEYSET_SIZE 8 -#define SQL_ROWSET_SIZE 9 -#define SQL_SIMULATE_CURSOR 10 -#define SQL_RETRIEVE_DATA 11 -#define SQL_USE_BOOKMARKS 12 -#define SQL_GET_BOOKMARK 13 -#define SQL_ROW_NUMBER 14 - -#define SQL_STMT_OPT_MIN SQL_QUERY_TIMEOUT -#define SQL_STMT_OPT_MAX SQL_ROW_NUMBER - - -/* - * SQL_QUERY_TIMEOUT - */ -#define SQL_QUERY_TIMEOUT_DEFAULT 0UL - -/* - * SQL_MAX_ROWS - */ -#define SQL_MAX_ROWS_DEFAULT 0UL - -/* - * SQL_NOSCAN - */ -#define SQL_NOSCAN_OFF 0UL /* 1.0 FALSE */ -#define SQL_NOSCAN_ON 1UL /* 1.0 TRUE */ -#define SQL_NOSCAN_DEFAULT SQL_NOSCAN_OFF - -/* - * SQL_MAX_LENGTH - */ -#define SQL_MAX_LENGTH_DEFAULT 0UL - -/* - * SQL_ASYNC_ENABLE - */ -#define SQL_ASYNC_ENABLE_OFF 0UL -#define SQL_ASYNC_ENABLE_ON 1UL -#define SQL_ASYNC_ENABLE_DEFAULT SQL_ASYNC_ENABLE_OFF - -/* - * SQL_BIND_TYPE - */ -#define SQL_BIND_BY_COLUMN 0UL -#define SQL_BIND_TYPE_DEFAULT SQL_BIND_BY_COLUMN - -/* - * SQL_CONCURRENCY - */ -#define SQL_CONCUR_READ_ONLY 1 -#define SQL_CONCUR_LOCK 2 -#define SQL_CONCUR_ROWVER 3 -#define SQL_CONCUR_VALUES 4 -#define SQL_CONCUR_DEFAULT SQL_CONCUR_READ_ONLY - -/* - * SQL_CURSOR_TYPE - */ -#define SQL_CURSOR_FORWARD_ONLY 0UL -#define SQL_CURSOR_KEYSET_DRIVEN 1UL -#define SQL_CURSOR_DYNAMIC 2UL -#define SQL_CURSOR_STATIC 3UL -#define SQL_CURSOR_TYPE_DEFAULT SQL_CURSOR_FORWARD_ONLY - -/* - * SQL_ROWSET_SIZE - */ -#define SQL_ROWSET_SIZE_DEFAULT 1UL - -/* - * SQL_KEYSET_SIZE - */ -#define SQL_KEYSET_SIZE_DEFAULT 0UL - -/* - * SQL_SIMULATE_CURSOR - */ -#define SQL_SC_NON_UNIQUE 0UL -#define SQL_SC_TRY_UNIQUE 1UL -#define SQL_SC_UNIQUE 2UL - -/* - * SQL_RETRIEVE_DATA - */ -#define SQL_RD_OFF 0UL -#define SQL_RD_ON 1UL -#define SQL_RD_DEFAULT SQL_RD_ON - -/* - * SQL_USE_BOOKMARKS - */ -#define SQL_UB_OFF 0UL -#define SQL_UB_ON 1UL -#define SQL_UB_DEFAULT SQL_UB_OFF - -/* - * SQLSetConnectOption/SQLGetConnectOption - */ -#define SQL_ACCESS_MODE 101 -#define SQL_AUTOCOMMIT 102 -#define SQL_LOGIN_TIMEOUT 103 -#define SQL_OPT_TRACE 104 -#define SQL_OPT_TRACEFILE 105 -#define SQL_TRANSLATE_DLL 106 -#define SQL_TRANSLATE_OPTION 107 -#define SQL_TXN_ISOLATION 108 -#define SQL_CURRENT_QUALIFIER 109 -#define SQL_ODBC_CURSORS 110 -#define SQL_QUIET_MODE 111 -#define SQL_PACKET_SIZE 112 - -#define SQL_CONN_OPT_MIN SQL_ACCESS_MODE -#define SQL_CONN_OPT_MAX SQL_PACKET_SIZE -#define SQL_CONNECT_OPT_DRVR_START 1000 - - -/* - * SQL_ACCESS_MODE - */ -#define SQL_MODE_READ_WRITE 0UL -#define SQL_MODE_READ_ONLY 1UL -#define SQL_MODE_DEFAULT SQL_MODE_READ_WRITE - -/* - * SQL_AUTOCOMMIT - */ -#define SQL_AUTOCOMMIT_OFF 0UL -#define SQL_AUTOCOMMIT_ON 1UL -#define SQL_AUTOCOMMIT_DEFAULT SQL_AUTOCOMMIT_ON - -/* - * SQL_LOGIN_TIMEOUT - */ -#define SQL_LOGIN_TIMEOUT_DEFAULT 15UL - -/* - * SQL_OPT_TRACE - */ -#define SQL_OPT_TRACE_OFF 0UL -#define SQL_OPT_TRACE_ON 1UL -#define SQL_OPT_TRACE_DEFAULT SQL_OPT_TRACE_OFF -#define SQL_OPT_TRACE_FILE_DEFAULT "odbc.log" - -/* - * SQL_ODBC_CURSORS - */ -#define SQL_CUR_USE_IF_NEEDED 0UL -#define SQL_CUR_USE_ODBC 1UL -#define SQL_CUR_USE_DRIVER 2UL -#define SQL_CUR_DEFAULT SQL_CUR_USE_DRIVER - -/* - * SQLSpecialColumns - Column types and scopes - */ -#define SQL_BEST_ROWID 1 -#define SQL_ROWVER 2 - -#define SQL_SCOPE_CURROW 0 -#define SQL_SCOPE_TRANSACTION 1 -#define SQL_SCOPE_SESSION 2 - -/* - * SQLSetPos - */ -#define SQL_ENTIRE_ROWSET 0 - -/* - * SQLSetPos - */ -#define SQL_POSITION 0 -#define SQL_REFRESH 1 -#define SQL_UPDATE 2 -#define SQL_DELETE 3 -#define SQL_ADD 4 - -/* - * SQLSetPos - */ -#define SQL_LOCK_NO_CHANGE 0 -#define SQL_LOCK_EXCLUSIVE 1 -#define SQL_LOCK_UNLOCK 2 - -/* - * SQLSetPos - */ -#define SQL_POSITION_TO(hstmt,irow) \ - SQLSetPos(hstmt,irow,SQL_POSITION,SQL_LOCK_NO_CHANGE) -#define SQL_LOCK_RECORD(hstmt,irow,fLock) \ - SQLSetPos(hstmt,irow,SQL_POSITION,fLock) -#define SQL_REFRESH_RECORD(hstmt,irow,fLock) \ - SQLSetPos(hstmt,irow,SQL_REFRESH,fLock) -#define SQL_UPDATE_RECORD(hstmt,irow) \ - SQLSetPos(hstmt,irow,SQL_UPDATE,SQL_LOCK_NO_CHANGE) -#define SQL_DELETE_RECORD(hstmt,irow) \ - SQLSetPos(hstmt,irow,SQL_DELETE,SQL_LOCK_NO_CHANGE) -#define SQL_ADD_RECORD(hstmt,irow) \ - SQLSetPos(hstmt,irow,SQL_ADD,SQL_LOCK_NO_CHANGE) - -/* - * All the ODBC keywords - */ -#define SQL_ODBC_KEYWORDS \ -"ABSOLUTE,ACTION,ADA,ADD,ALL,ALLOCATE,ALTER,AND,ANY,ARE,AS,"\ -"ASC,ASSERTION,AT,AUTHORIZATION,AVG,"\ -"BEGIN,BETWEEN,BIT,BIT_LENGTH,BOTH,BY,CASCADE,CASCADED,CASE,CAST,CATALOG,"\ -"CHAR,CHAR_LENGTH,CHARACTER,CHARACTER_LENGTH,CHECK,CLOSE,COALESCE,"\ -"COBOL,COLLATE,COLLATION,COLUMN,COMMIT,CONNECT,CONNECTION,CONSTRAINT,"\ -"CONSTRAINTS,CONTINUE,CONVERT,CORRESPONDING,COUNT,CREATE,CROSS,CURRENT,"\ -"CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_USER,CURSOR,"\ -"DATE,DAY,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFERRABLE,"\ -"DEFERRED,DELETE,DESC,DESCRIBE,DESCRIPTOR,DIAGNOSTICS,DISCONNECT,"\ -"DISTINCT,DOMAIN,DOUBLE,DROP,"\ -"ELSE,END,END-EXEC,ESCAPE,EXCEPT,EXCEPTION,EXEC,EXECUTE,"\ -"EXISTS,EXTERNAL,EXTRACT,"\ -"FALSE,FETCH,FIRST,FLOAT,FOR,FOREIGN,FORTRAN,FOUND,FROM,FULL,"\ -"GET,GLOBAL,GO,GOTO,GRANT,GROUP,HAVING,HOUR,"\ -"IDENTITY,IMMEDIATE,IN,INCLUDE,INDEX,INDICATOR,INITIALLY,INNER,"\ -"INPUT,INSENSITIVE,INSERT,INTEGER,INTERSECT,INTERVAL,INTO,IS,ISOLATION,"\ -"JOIN,KEY,LANGUAGE,LAST,LEADING,LEFT,LEVEL,LIKE,LOCAL,LOWER,"\ -"MATCH,MAX,MIN,MINUTE,MODULE,MONTH,MUMPS,"\ -"NAMES,NATIONAL,NATURAL,NCHAR,NEXT,NO,NONE,NOT,NULL,NULLIF,NUMERIC,"\ -"OCTET_LENGTH,OF,ON,ONLY,OPEN,OPTION,OR,ORDER,OUTER,OUTPUT,OVERLAPS,"\ -"PAD,PARTIAL,PASCAL,PLI,POSITION,PRECISION,PREPARE,PRESERVE,"\ -"PRIMARY,PRIOR,PRIVILEGES,PROCEDURE,PUBLIC,"\ -"REFERENCES,RELATIVE,RESTRICT,REVOKE,RIGHT,ROLLBACK,ROWS,"\ -"SCHEMA,SCROLL,SECOND,SECTION,SELECT,SEQUENCE,SESSION,SESSION_USER,SET,SIZE,"\ -"SMALLINT,SOME,SPACE,SQL,SQLCA,SQLCODE,SQLERROR,SQLSTATE,SQLWARNING,"\ -"SUBSTRING,SUM,SYSTEM_USER,"\ -"TABLE,TEMPORARY,THEN,TIME,TIMESTAMP,TIMEZONE_HOUR,TIMEZONE_MINUTE,"\ -"TO,TRAILING,TRANSACTION,TRANSLATE,TRANSLATION,TRIM,TRUE,"\ -"UNION,UNIQUE,UNKNOWN,UPDATE,UPPER,USAGE,USER,USING,"\ -"VALUE,,VARCHAR,VARYING,VIEW,WHEN,WHENEVER,WHERE,WITH,WORK,YEAR" - -/* - * ---------------------------------------------------------------------- - * Level 2 Functions - * ---------------------------------------------------------------------- - */ - -/* - * SQLExtendedFetch - fFetchType - */ -#define SQL_FETCH_NEXT 1 -#define SQL_FETCH_FIRST 2 -#define SQL_FETCH_LAST 3 -#define SQL_FETCH_PRIOR 4 -#define SQL_FETCH_ABSOLUTE 5 -#define SQL_FETCH_RELATIVE 6 -#define SQL_FETCH_BOOKMARK 8 - -/* - * SQLExtendedFetch - rgfRowStatus - */ -#define SQL_ROW_SUCCESS 0 -#define SQL_ROW_DELETED 1 -#define SQL_ROW_UPDATED 2 -#define SQL_ROW_NOROW 3 -#define SQL_ROW_ADDED 4 -#define SQL_ROW_ERROR 5 - -/* - * SQLForeignKeys - UPDATE_RULE/DELETE_RULE - */ -#define SQL_CASCADE 0 -#define SQL_RESTRICT 1 -#define SQL_SET_NULL 2 - -/* - * SQLBindParameter - fParamType - * SQLProcedureColumns - COLUMN_TYPE - */ -#define SQL_PARAM_TYPE_UNKNOWN 0 -#define SQL_PARAM_INPUT 1 -#define SQL_PARAM_INPUT_OUTPUT 2 -#define SQL_RESULT_COL 3 -#define SQL_PARAM_OUTPUT 4 -#define SQL_RETURN_VALUE 5 - -/* - * SQLSetParam to SQLBindParameter conversion - */ -#define SQL_PARAM_TYPE_DEFAULT SQL_PARAM_INPUT_OUTPUT -#define SQL_SETPARAM_VALUE_MAX (-1L) - -/* - * SQLStatistics - fUnique - */ -#define SQL_INDEX_UNIQUE 0 -#define SQL_INDEX_ALL 1 - -/* - * SQLStatistics - fAccuracy - */ -#define SQL_QUICK 0 -#define SQL_ENSURE 1 - -/* - * SQLStatistics - TYPE - */ -#define SQL_TABLE_STAT 0 -#define SQL_INDEX_CLUSTERED 1 -#define SQL_INDEX_HASHED 2 -#define SQL_INDEX_OTHER 3 - -/* - * SQLProcedures - PROCEDURE_TYPE - */ -#define SQL_PT_UNKNOWN 0 -#define SQL_PT_PROCEDURE 1 -#define SQL_PT_FUNCTION 2 - -/* - * SQLSpecialColumns - PSEUDO_COLUMN - */ -#define SQL_PC_UNKNOWN 0 -#define SQL_PC_NOT_PSEUDO 1 -#define SQL_PC_PSEUDO 2 - -/* - * Deprecated defines from prior versions of ODBC - */ -#define SQL_DATABASE_NAME 16 -#define SQL_FD_FETCH_PREV SQL_FD_FETCH_PRIOR -#define SQL_FETCH_PREV SQL_FETCH_PRIOR -#define SQL_CONCUR_TIMESTAMP SQL_CONCUR_ROWVER -#define SQL_SCCO_OPT_TIMESTAMP SQL_SCCO_OPT_ROWVER -#define SQL_CC_DELETE SQL_CB_DELETE -#define SQL_CR_DELETE SQL_CB_DELETE -#define SQL_CC_CLOSE SQL_CB_CLOSE -#define SQL_CR_CLOSE SQL_CB_CLOSE -#define SQL_CC_PRESERVE SQL_CB_PRESERVE -#define SQL_CR_PRESERVE SQL_CB_PRESERVE -#define SQL_FETCH_RESUME 7 -#define SQL_SCROLL_FORWARD_ONLY 0L -#define SQL_SCROLL_KEYSET_DRIVEN (-1L) -#define SQL_SCROLL_DYNAMIC (-2L) -#define SQL_SCROLL_STATIC (-3L) -#define SQL_PC_NON_PSEUDO SQL_PC_NOT_PSEUDO - -#ifdef __cplusplus -extern "C" { -#endif -/* - * Level 1 function prototypes - */ -RETCODE SQL_API SQLColumns (HSTMT hstmt, UCHAR FAR * szTableQualifier, - SWORD cbTableQualifier, UCHAR FAR * szTableOwner, SWORD cbTableOwner, - UCHAR FAR * szTableName, SWORD cbTableName, UCHAR FAR * szColumnName, - SWORD cbColumnName); -/* glt - Changed HWND to SQLHWND to match MSW header typing */ -RETCODE SQL_API SQLDriverConnect (HDBC hdbc, SQLHWND hwnd, - UCHAR FAR * szConnStrIn, SWORD cbConnStrIn, UCHAR FAR * szConnStrOut, - SWORD cbConnStrOutMax, SWORD FAR * pcbConnStrOut, UWORD fDriverCompletion); -RETCODE SQL_API SQLGetConnectOption (HDBC hdbc, UWORD fOption, PTR pvParam); -RETCODE SQL_API SQLGetData (HSTMT hstmt, UWORD icol, SWORD fCType, - PTR rgbValue, SDWORD cbValueMax, SDWORD FAR * pcbValue); -RETCODE SQL_API SQLGetFunctions (HDBC hdbc, UWORD fFunction, - UWORD FAR * pfExists); -RETCODE SQL_API SQLGetInfo (HDBC hdbc, UWORD fInfoType, PTR rgbInfoValue, - SWORD cbInfoValueMax, SWORD FAR * pcbInfoValue); -RETCODE SQL_API SQLGetStmtOption (HSTMT hstmt, UWORD fOption, PTR pvParam); -RETCODE SQL_API SQLGetTypeInfo (HSTMT hstmt, SWORD fSqlType); -RETCODE SQL_API SQLParamData (HSTMT hstmt, PTR FAR * prgbValue); -RETCODE SQL_API SQLPutData (HSTMT hstmt, PTR rgbValue, SDWORD cbValue); -RETCODE SQL_API SQLSetConnectOption (HDBC hdbc, UWORD fOption, UDWORD vParam); -RETCODE SQL_API SQLSetStmtOption (HSTMT hstmt, UWORD fOption, UDWORD vParam); -RETCODE SQL_API SQLSpecialColumns (HSTMT hstmt, UWORD fColType, - UCHAR FAR * szTableQualifier, SWORD cbTableQualifier, - UCHAR FAR * szTableOwner, SWORD cbTableOwner, UCHAR FAR * szTableName, - SWORD cbTableName, UWORD fScope, UWORD fNullable); -RETCODE SQL_API SQLStatistics (HSTMT hstmt, UCHAR FAR * szTableQualifier, - SWORD cbTableQualifier, UCHAR FAR * szTableOwner, SWORD cbTableOwner, - UCHAR FAR * szTableName, SWORD cbTableName, UWORD fUnique, UWORD fAccuracy); -RETCODE SQL_API SQLTables (HSTMT hstmt, UCHAR FAR * szTableQualifier, - SWORD cbTableQualifier, UCHAR FAR * szTableOwner, SWORD cbTableOwner, - UCHAR FAR * szTableName, SWORD cbTableName, UCHAR FAR * szTableType, - SWORD cbTableType); - -/* - * Level 2 function prototypes - */ -RETCODE SQL_API SQLBrowseConnect (HDBC hdbc, - UCHAR FAR * szConnStrIn, SWORD cbConnStrIn, UCHAR FAR * szConnStrOut, - SWORD cbConnStrOutMax, SWORD FAR * pcbConnStrOut); -RETCODE SQL_API SQLColumnPrivileges (HSTMT hstmt, - UCHAR FAR * szTableQualifier, SWORD cbTableQualifier, - UCHAR FAR * szTableOwner, SWORD cbTableOwner, UCHAR FAR * szTableName, - SWORD cbTableName, UCHAR FAR * szColumnName, SWORD cbColumnName); -RETCODE SQL_API SQLDataSources (HENV henv, UWORD fDirection, - UCHAR FAR * szDSN, SWORD cbDSNMax, SWORD FAR * pcbDSN, - UCHAR FAR * szDescription, SWORD cbDescriptionMax, - SWORD FAR * pcbDescription); -RETCODE SQL_API SQLDescribeParam (HSTMT hstmt, UWORD ipar, - SWORD FAR * pfSqlType, UDWORD FAR * pcbColDef, SWORD FAR * pibScale, - SWORD FAR * pfNullable); -RETCODE SQL_API SQLExtendedFetch (HSTMT hstmt, UWORD fFetchType, SDWORD irow, - UDWORD FAR * pcrow, UWORD FAR * rgfRowStatus); -RETCODE SQL_API SQLForeignKeys (HSTMT hstmt, UCHAR FAR * szPkTableQualifier, - SWORD cbPkTableQualifier, UCHAR FAR * szPkTableOwner, SWORD cbPkTableOwner, - UCHAR FAR * szPkTableName, SWORD cbPkTableName, - UCHAR FAR * szFkTableQualifier, SWORD cbFkTableQualifier, - UCHAR FAR * szFkTableOwner, SWORD cbFkTableOwner, UCHAR FAR * szFkTableName, - SWORD cbFkTableName); -RETCODE SQL_API SQLMoreResults (HSTMT hstmt); -RETCODE SQL_API SQLNativeSql (HDBC hdbc, UCHAR FAR * szSqlStrIn, - SDWORD cbSqlStrIn, UCHAR FAR * szSqlStr, SDWORD cbSqlStrMax, - SDWORD FAR * pcbSqlStr); -RETCODE SQL_API SQLNumParams (HSTMT hstmt, SWORD FAR * pcpar); -RETCODE SQL_API SQLParamOptions (HSTMT hstmt, UDWORD crow, UDWORD FAR * pirow); -RETCODE SQL_API SQLPrimaryKeys (HSTMT hstmt, UCHAR FAR * szTableQualifier, - SWORD cbTableQualifier, UCHAR FAR * szTableOwner, SWORD cbTableOwner, - UCHAR FAR * szTableName, SWORD cbTableName); -RETCODE SQL_API SQLProcedureColumns (HSTMT hstmt, UCHAR FAR * szProcQualifier, - SWORD cbProcQualifier, UCHAR FAR * szProcOwner, SWORD cbProcOwner, - UCHAR FAR * szProcName, SWORD cbProcName, UCHAR FAR * szColumnName, - SWORD cbColumnName); -RETCODE SQL_API SQLProcedures (HSTMT hstmt, UCHAR FAR * szProcQualifier, - SWORD cbProcQualifier, UCHAR FAR * szProcOwner, SWORD cbProcOwner, - UCHAR FAR * szProcName, SWORD cbProcName); -RETCODE SQL_API SQLSetPos (HSTMT hstmt, UWORD irow, UWORD fOption, UWORD fLock); -RETCODE SQL_API SQLTablePrivileges (HSTMT hstmt, UCHAR FAR * szTableQualifier, - SWORD cbTableQualifier, UCHAR FAR * szTableOwner, SWORD cbTableOwner, - UCHAR FAR * szTableName, SWORD cbTableName); - -/* - * SDK 2.0 Additional function prototypes - */ -RETCODE SQL_API SQLDrivers (HENV henv, UWORD fDirection, - UCHAR FAR * szDriverDesc, SWORD cbDriverDescMax, SWORD FAR * pcbDriverDesc, - UCHAR FAR * szDriverAttributes, SWORD cbDrvrAttrMax, - SWORD FAR * pcbDrvrAttr); -RETCODE SQL_API SQLBindParameter (HSTMT hstmt, UWORD ipar, SWORD fParamType, - SWORD fCType, SWORD fSqlType, UDWORD cbColDef, SWORD ibScale, PTR rgbValue, - SDWORD cbValueMax, SDWORD FAR * pcbValue); - -/* - * Deprecated - use SQLSetStmtOptions - */ -RETCODE SQL_API SQLSetScrollOptions (HSTMT hstmt, UWORD fConcurrency, - SDWORD crowKeyset, UWORD crowRowset); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/desmume/src/windows/wx/include/wx/joystick.h b/desmume/src/windows/wx/include/wx/joystick.h deleted file mode 100644 index 388ab2e9a..000000000 --- a/desmume/src/windows/wx/include/wx/joystick.h +++ /dev/null @@ -1,38 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: joystick.h -// Purpose: wxJoystick base header -// Author: wxWidgets Team -// Modified by: -// Created: -// Copyright: (c) wxWidgets Team -// RCS-ID: $Id: joystick.h 32852 2005-03-16 16:18:31Z ABX $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_JOYSTICK_H_BASE_ -#define _WX_JOYSTICK_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_JOYSTICK - -#if defined(__WXMSW__) -#include "wx/msw/joystick.h" -#elif defined(__WXMOTIF__) -#include "wx/unix/joystick.h" -#elif defined(__WXGTK__) -#include "wx/unix/joystick.h" -#elif defined(__WXX11__) -#include "wx/unix/joystick.h" -#elif defined(__DARWIN__) -#include "wx/mac/corefoundation/joystick.h" -#elif defined(__WXMAC__) -#include "wx/mac/joystick.h" -#elif defined(__WXPM__) -#include "wx/os2/joystick.h" -#endif - -#endif // wxUSE_JOYSTICK - -#endif - // _WX_JOYSTICK_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/layout.h b/desmume/src/windows/wx/include/wx/layout.h deleted file mode 100644 index 06dc60934..000000000 --- a/desmume/src/windows/wx/include/wx/layout.h +++ /dev/null @@ -1,191 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/layout.h -// Purpose: OBSOLETE layout constraint classes, use sizers instead -// Author: Julian Smart -// Modified by: -// Created: 29/01/98 -// RCS-ID: $Id: layout.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 1998 Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LAYOUT_H_ -#define _WX_LAYOUT_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/object.h" - -// X stupidly defines these in X.h -#ifdef Above - #undef Above -#endif -#ifdef Below - #undef Below -#endif - -#if wxUSE_CONSTRAINTS - -// ---------------------------------------------------------------------------- -// forward declrations -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxWindowBase; -class WXDLLIMPEXP_FWD_CORE wxLayoutConstraints; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -#define wxLAYOUT_DEFAULT_MARGIN 0 - -enum wxEdge -{ - wxLeft, wxTop, wxRight, wxBottom, wxWidth, wxHeight, - wxCentre, wxCenter = wxCentre, wxCentreX, wxCentreY -}; - -enum wxRelationship -{ - wxUnconstrained = 0, - wxAsIs, - wxPercentOf, - wxAbove, - wxBelow, - wxLeftOf, - wxRightOf, - wxSameAs, - wxAbsolute -}; - -// ---------------------------------------------------------------------------- -// wxIndividualLayoutConstraint: a constraint on window position -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxIndividualLayoutConstraint : public wxObject -{ -public: - wxIndividualLayoutConstraint(); - - // note that default copy ctor and assignment operators are ok - - virtual ~wxIndividualLayoutConstraint(){} - - void Set(wxRelationship rel, wxWindowBase *otherW, wxEdge otherE, int val = 0, int marg = wxLAYOUT_DEFAULT_MARGIN); - - // - // Sibling relationships - // - void LeftOf(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); - void RightOf(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); - void Above(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); - void Below(wxWindowBase *sibling, int marg = wxLAYOUT_DEFAULT_MARGIN); - - // - // 'Same edge' alignment - // - void SameAs(wxWindowBase *otherW, wxEdge edge, int marg = wxLAYOUT_DEFAULT_MARGIN); - - // The edge is a percentage of the other window's edge - void PercentOf(wxWindowBase *otherW, wxEdge wh, int per); - - // - // Edge has absolute value - // - void Absolute(int val); - - // - // Dimension is unconstrained - // - void Unconstrained() { relationship = wxUnconstrained; } - - // - // Dimension is 'as is' (use current size settings) - // - void AsIs() { relationship = wxAsIs; } - - // - // Accessors - // - wxWindowBase *GetOtherWindow() { return otherWin; } - wxEdge GetMyEdge() const { return myEdge; } - void SetEdge(wxEdge which) { myEdge = which; } - void SetValue(int v) { value = v; } - int GetMargin() { return margin; } - void SetMargin(int m) { margin = m; } - int GetValue() const { return value; } - int GetPercent() const { return percent; } - int GetOtherEdge() const { return otherEdge; } - bool GetDone() const { return done; } - void SetDone(bool d) { done = d; } - wxRelationship GetRelationship() { return relationship; } - void SetRelationship(wxRelationship r) { relationship = r; } - - // Reset constraint if it mentions otherWin - bool ResetIfWin(wxWindowBase *otherW); - - // Try to satisfy constraint - bool SatisfyConstraint(wxLayoutConstraints *constraints, wxWindowBase *win); - - // Get the value of this edge or dimension, or if this - // is not determinable, -1. - int GetEdge(wxEdge which, wxWindowBase *thisWin, wxWindowBase *other) const; - -protected: - // To be allowed to modify the internal variables - friend class wxIndividualLayoutConstraint_Serialize; - - // 'This' window is the parent or sibling of otherWin - wxWindowBase *otherWin; - - wxEdge myEdge; - wxRelationship relationship; - int margin; - int value; - int percent; - wxEdge otherEdge; - bool done; - - DECLARE_DYNAMIC_CLASS(wxIndividualLayoutConstraint) -}; - -// ---------------------------------------------------------------------------- -// wxLayoutConstraints: the complete set of constraints for a window -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxLayoutConstraints : public wxObject -{ -public: - // Edge constraints - wxIndividualLayoutConstraint left; - wxIndividualLayoutConstraint top; - wxIndividualLayoutConstraint right; - wxIndividualLayoutConstraint bottom; - // Size constraints - wxIndividualLayoutConstraint width; - wxIndividualLayoutConstraint height; - // Centre constraints - wxIndividualLayoutConstraint centreX; - wxIndividualLayoutConstraint centreY; - - wxLayoutConstraints(); - - // note that default copy ctor and assignment operators are ok - - virtual ~wxLayoutConstraints(){} - - bool SatisfyConstraints(wxWindowBase *win, int *noChanges); - bool AreSatisfied() const - { - return left.GetDone() && top.GetDone() && - width.GetDone() && height.GetDone(); - } - - DECLARE_DYNAMIC_CLASS(wxLayoutConstraints) -}; - -#endif // wxUSE_CONSTRAINTS - -#endif // _WX_LAYOUT_H_ diff --git a/desmume/src/windows/wx/include/wx/laywin.h b/desmume/src/windows/wx/include/wx/laywin.h deleted file mode 100644 index c27d1e7db..000000000 --- a/desmume/src/windows/wx/include/wx/laywin.h +++ /dev/null @@ -1,18 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/laywin.h -// Purpose: wxSashLayoutWindow base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: laywin.h 33948 2005-05-04 18:57:50Z JS $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LAYWIN_H_BASE_ -#define _WX_LAYWIN_H_BASE_ - -#include "wx/generic/laywin.h" - -#endif - // _WX_LAYWIN_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/link.h b/desmume/src/windows/wx/include/wx/link.h deleted file mode 100644 index 394f2422e..000000000 --- a/desmume/src/windows/wx/include/wx/link.h +++ /dev/null @@ -1,32 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/link.h -// Purpose: macros to force linking modules which might otherwise be -// discarded by the linker -// Author: Vaclav Slavik -// RCS-ID: $Id: link.h 35722 2005-09-26 12:29:25Z VZ $ -// Copyright: (c) Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LINK_H_ -#define _WX_LINK_H_ - -// This must be part of the module you want to force: -#define wxFORCE_LINK_THIS_MODULE(module_name) \ - extern void _wx_link_dummy_func_##module_name (); \ - void _wx_link_dummy_func_##module_name () { } - - -// And this must be somewhere where it certainly will be linked: -#define wxFORCE_LINK_MODULE(module_name) \ - extern void _wx_link_dummy_func_##module_name (); \ - static struct wxForceLink##module_name \ - { \ - wxForceLink##module_name() \ - { \ - _wx_link_dummy_func_##module_name (); \ - } \ - } _wx_link_dummy_var_##module_name; - - -#endif // _WX_LINK_H_ diff --git a/desmume/src/windows/wx/include/wx/list.h b/desmume/src/windows/wx/include/wx/list.h deleted file mode 100644 index 4b5ae0689..000000000 --- a/desmume/src/windows/wx/include/wx/list.h +++ /dev/null @@ -1,1308 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/list.h -// Purpose: wxList, wxStringList classes -// 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 58742 2009-02-07 23:46:53Z VZ $ -// Copyright: (c) 1998 Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -/* - All this is quite ugly but serves two purposes: - 1. Be almost 100% compatible with old, untyped, wxList class - 2. Ensure compile-time type checking for the linked lists - - The idea is to have one base class (wxListBase) working with "void *" data, - but to hide these untyped functions - i.e. make them protected, so they - can only be used from derived classes which have inline member functions - working with right types. This achieves the 2nd goal. As for the first one, - we provide a special derivation of wxListBase called wxList which looks just - like the old class. -*/ - -#ifndef _WX_LISTH__ -#define _WX_LISTH__ - -// ----------------------------------------------------------------------------- -// headers -// ----------------------------------------------------------------------------- - -#include "wx/defs.h" -#include "wx/object.h" -#include "wx/string.h" - -#if wxUSE_STL - #include "wx/beforestd.h" - #include <algorithm> - #include <iterator> - #include <list> - #include "wx/afterstd.h" -#endif - -// ---------------------------------------------------------------------------- -// types -// ---------------------------------------------------------------------------- - -// type of compare function for list sort operation (as in 'qsort'): it should -// return a negative value, 0 or positive value if the first element is less -// than, equal or greater than the second - -extern "C" -{ -typedef int (* LINKAGEMODE wxSortCompareFunction)(const void *elem1, const void *elem2); -} - -class WXDLLIMPEXP_FWD_BASE wxObjectListNode; -typedef wxObjectListNode wxNode; - -// -typedef int (* LINKAGEMODE wxListIterateFunction)(void *current); - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -#if !defined(wxENUM_KEY_TYPE_DEFINED) -#define wxENUM_KEY_TYPE_DEFINED - -enum wxKeyType -{ - wxKEY_NONE, - wxKEY_INTEGER, - wxKEY_STRING -}; - -#endif - -#if wxUSE_STL - -#define wxLIST_COMPATIBILITY - -#define WX_DECLARE_LIST_3(elT, dummy1, liT, dummy2, decl) \ - WX_DECLARE_LIST_WITH_DECL(elT, liT, decl) -#define WX_DECLARE_LIST_PTR_3(elT, dummy1, liT, dummy2, decl) \ - WX_DECLARE_LIST_3(elT, dummy1, liT, dummy2, decl) - -#define WX_DECLARE_LIST_2(elT, liT, dummy, decl) \ - WX_DECLARE_LIST_WITH_DECL(elT, liT, decl) -#define WX_DECLARE_LIST_PTR_2(elT, liT, dummy, decl) \ - WX_DECLARE_LIST_2(elT, liT, dummy, decl) \ - -#define WX_DECLARE_LIST_WITH_DECL(elT, liT, decl) \ - WX_DECLARE_LIST_XO(elT*, liT, decl) - -#if !defined( __VISUALC__ ) - -template<class T> -class WXDLLIMPEXP_BASE wxList_SortFunction -{ -public: - wxList_SortFunction(wxSortCompareFunction f) : m_f(f) { } - bool operator()(const T& i1, const T& i2) - { return m_f((T*)&i1, (T*)&i2) < 0; } -private: - wxSortCompareFunction m_f; -}; - -#define WX_LIST_SORTFUNCTION( elT, f ) wxList_SortFunction<elT>(f) -#define VC6_WORKAROUND(elT, liT, decl) - -#else // if defined( __VISUALC__ ) - -#define WX_LIST_SORTFUNCTION( elT, f ) std::greater<elT>( f ) -#define VC6_WORKAROUND(elT, liT, decl) \ - decl liT; \ - \ - /* Workaround for broken VC6 STL incorrectly requires a std::greater<> */ \ - /* to be passed into std::list::sort() */ \ - template <> \ - struct std::greater<elT> \ - { \ - private: \ - wxSortCompareFunction m_CompFunc; \ - public: \ - greater( wxSortCompareFunction compfunc = NULL ) \ - : m_CompFunc( compfunc ) {} \ - bool operator()(const elT X, const elT Y) const \ - { \ - return m_CompFunc ? \ - ( m_CompFunc( X, Y ) < 0 ) : \ - ( X > Y ); \ - } \ - }; - -#endif // defined( __VISUALC__ ) - -/* - Note 1: the outer helper class _WX_LIST_HELPER_##liT below is a workaround - for mingw 3.2.3 compiler bug that prevents a static function of liT class - from being exported into dll. A minimal code snippet reproducing the bug: - - struct WXDLLEXPORT Foo - { - static void Bar(); - struct SomeInnerClass - { - friend class Foo; // comment this out to make it link - }; - ~Foo() - { - Bar(); - } - }; - - The program does not link under mingw_gcc 3.2.3 producing undefined - reference to Foo::Bar() function - - - Note 2: the EmptyList is needed to allow having a NULL pointer-like - invalid iterator. We used to use just an uninitialized iterator object - instead but this fails with some debug/checked versions of STL, notably the - glibc version activated with _GLIBCXX_DEBUG, so we need to have a separate - invalid iterator. - */ - -// the real wxList-class declaration -#define WX_DECLARE_LIST_XO(elT, liT, decl) \ - decl _WX_LIST_HELPER_##liT \ - { \ - typedef elT _WX_LIST_ITEM_TYPE_##liT; \ - public: \ - static void DeleteFunction( _WX_LIST_ITEM_TYPE_##liT X ); \ - }; \ - \ - VC6_WORKAROUND(elT, liT, decl) \ - decl liT : public std::list<elT> \ - { \ - private: \ - typedef std::list<elT> BaseListType; \ - static BaseListType EmptyList; \ - \ - bool m_destroy; \ - \ - public: \ - decl compatibility_iterator \ - { \ - private: \ - /* Workaround for broken VC6 nested class name resolution */ \ - typedef std::list<elT>::iterator iterator; \ - friend class liT; \ - \ - iterator m_iter; \ - liT * m_list; \ - \ - public: \ - compatibility_iterator() \ - : m_iter(EmptyList.end()), m_list( NULL ) {} \ - compatibility_iterator( liT* li, iterator i ) \ - : m_iter( i ), m_list( li ) {} \ - compatibility_iterator( const liT* li, iterator i ) \ - : m_iter( i ), m_list( const_cast< liT* >( li ) ) {} \ - \ - compatibility_iterator* operator->() { return this; } \ - const compatibility_iterator* operator->() const { return this; } \ - \ - bool operator==(const compatibility_iterator& i) const \ - { \ - wxASSERT_MSG( m_list && i.m_list, \ - _T("comparing invalid iterators is illegal") ); \ - return (m_list == i.m_list) && (m_iter == i.m_iter); \ - } \ - bool operator!=(const compatibility_iterator& i) const \ - { return !( operator==( i ) ); } \ - operator bool() const \ - { return m_list ? m_iter != m_list->end() : false; } \ - bool operator !() const \ - { return !( operator bool() ); } \ - \ - elT GetData() const \ - { return *m_iter; } \ - void SetData( elT e ) \ - { *m_iter = e; } \ - \ - compatibility_iterator GetNext() const \ - { \ - iterator i = m_iter; \ - return compatibility_iterator( m_list, ++i ); \ - } \ - compatibility_iterator GetPrevious() const \ - { \ - if ( m_iter == m_list->begin() ) \ - return compatibility_iterator(); \ - \ - iterator i = m_iter; \ - return compatibility_iterator( m_list, --i ); \ - } \ - int IndexOf() const \ - { \ - return *this ? std::distance( m_list->begin(), m_iter ) \ - : wxNOT_FOUND; \ - } \ - }; \ - public: \ - liT() : m_destroy( false ) {} \ - \ - compatibility_iterator Find( const elT e ) const \ - { \ - liT* _this = const_cast< liT* >( this ); \ - return compatibility_iterator( _this, \ - std::find( _this->begin(), _this->end(), e ) ); \ - } \ - \ - bool IsEmpty() const \ - { return empty(); } \ - size_t GetCount() const \ - { return size(); } \ - int Number() const \ - { return static_cast< int >( GetCount() ); } \ - \ - compatibility_iterator Item( size_t idx ) const \ - { \ - iterator i = const_cast< liT* >(this)->begin(); \ - std::advance( i, idx ); \ - return compatibility_iterator( this, i ); \ - } \ - elT operator[](size_t idx) const \ - { \ - return Item(idx).GetData(); \ - } \ - \ - compatibility_iterator GetFirst() const \ - { \ - return compatibility_iterator( this, \ - const_cast< liT* >(this)->begin() ); \ - } \ - compatibility_iterator GetLast() const \ - { \ - iterator i = const_cast< liT* >(this)->end(); \ - return compatibility_iterator( this, !empty() ? --i : i ); \ - } \ - compatibility_iterator Member( elT e ) const \ - { return Find( e ); } \ - compatibility_iterator Nth( int n ) const \ - { return Item( n ); } \ - int IndexOf( elT e ) const \ - { return Find( e ).IndexOf(); } \ - \ - compatibility_iterator Append( elT e ) \ - { \ - push_back( e ); \ - return GetLast(); \ - } \ - compatibility_iterator Insert( elT e ) \ - { \ - push_front( e ); \ - return compatibility_iterator( this, begin() ); \ - } \ - compatibility_iterator Insert(const compatibility_iterator &i, elT e) \ - { \ - return compatibility_iterator( this, insert( i.m_iter, e ) ); \ - } \ - compatibility_iterator Insert( size_t idx, elT e ) \ - { \ - return compatibility_iterator( this, \ - insert( Item( idx ).m_iter, e ) ); \ - } \ - \ - void DeleteContents( bool destroy ) \ - { m_destroy = destroy; } \ - bool GetDeleteContents() const \ - { return m_destroy; } \ - void Erase( const compatibility_iterator& i ) \ - { \ - if ( m_destroy ) \ - _WX_LIST_HELPER_##liT::DeleteFunction( i->GetData() ); \ - erase( i.m_iter ); \ - } \ - bool DeleteNode( const compatibility_iterator& i ) \ - { \ - if( i ) \ - { \ - Erase( i ); \ - return true; \ - } \ - return false; \ - } \ - bool DeleteObject( elT e ) \ - { \ - return DeleteNode( Find( e ) ); \ - } \ - void Clear() \ - { \ - if ( m_destroy ) \ - std::for_each( begin(), end(), \ - _WX_LIST_HELPER_##liT::DeleteFunction ); \ - clear(); \ - } \ - /* Workaround for broken VC6 std::list::sort() see above */ \ - void Sort( wxSortCompareFunction compfunc ) \ - { sort( WX_LIST_SORTFUNCTION( elT, compfunc ) ); } \ - ~liT() { Clear(); } \ - \ - /* It needs access to our EmptyList */ \ - friend decl compatibility_iterator; \ - } - -#define WX_DECLARE_LIST(elementtype, listname) \ - WX_DECLARE_LIST_WITH_DECL(elementtype, listname, class) -#define WX_DECLARE_LIST_PTR(elementtype, listname) \ - WX_DECLARE_LIST(elementtype, listname) - -#define WX_DECLARE_EXPORTED_LIST(elementtype, listname) \ - WX_DECLARE_LIST_WITH_DECL(elementtype, listname, class WXDLLEXPORT) -#define WX_DECLARE_EXPORTED_LIST_PTR(elementtype, listname) \ - WX_DECLARE_EXPORTED_LIST(elementtype, listname) - -#define WX_DECLARE_USER_EXPORTED_LIST(elementtype, listname, usergoo) \ - WX_DECLARE_LIST_WITH_DECL(elementtype, listname, class usergoo) -#define WX_DECLARE_USER_EXPORTED_LIST_PTR(elementtype, listname, usergoo) \ - WX_DECLARE_USER_EXPORTED_LIST(elementtype, listname, usergoo) - -// this macro must be inserted in your program after -// #include "wx/listimpl.cpp" -#define WX_DEFINE_LIST(name) "don't forget to include listimpl.cpp!" - -#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 - -// due to circular header dependencies this function has to be declared here -// (normally it's found in utils.h which includes itself list.h...) -#if WXWIN_COMPATIBILITY_2_4 -extern WXDLLIMPEXP_BASE wxChar* copystring(const wxChar *s); -#endif - -// undef it to get rid of old, deprecated functions -#define wxLIST_COMPATIBILITY - -// ----------------------------------------------------------------------------- -// key stuff: a list may be optionally keyed on integer or string key -// ----------------------------------------------------------------------------- - -union wxListKeyValue -{ - long integer; - wxChar *string; -}; - -// a struct which may contain both types of keys -// -// implementation note: on one hand, this class allows to have only one function -// for any keyed operation instead of 2 almost equivalent. OTOH, it's needed to -// resolve ambiguity which we would otherwise have with wxStringList::Find() and -// wxList::Find(const char *). -class WXDLLIMPEXP_BASE wxListKey -{ -public: - // implicit ctors - wxListKey() : m_keyType(wxKEY_NONE) - { } - wxListKey(long i) : m_keyType(wxKEY_INTEGER) - { m_key.integer = i; } - wxListKey(const wxChar *s) : m_keyType(wxKEY_STRING) - { m_key.string = wxStrdup(s); } - wxListKey(const wxString& s) : m_keyType(wxKEY_STRING) - { m_key.string = wxStrdup(s.c_str()); } - - // accessors - wxKeyType GetKeyType() const { return m_keyType; } - const wxChar *GetString() const - { wxASSERT( m_keyType == wxKEY_STRING ); return m_key.string; } - long GetNumber() const - { wxASSERT( m_keyType == wxKEY_INTEGER ); return m_key.integer; } - - // comparison - // Note: implementation moved to list.cpp to prevent BC++ inline - // expansion warning. - bool operator==(wxListKeyValue value) const ; - - // dtor - ~wxListKey() - { - if ( m_keyType == wxKEY_STRING ) - free(m_key.string); - } - -private: - wxKeyType m_keyType; - wxListKeyValue m_key; -}; - -// ----------------------------------------------------------------------------- -// wxNodeBase class is a (base for) node in a double linked list -// ----------------------------------------------------------------------------- - -extern WXDLLIMPEXP_DATA_BASE(wxListKey) wxDefaultListKey; - -class WXDLLIMPEXP_FWD_BASE wxListBase; - -class WXDLLIMPEXP_BASE wxNodeBase -{ -friend class wxListBase; -public: - // ctor - wxNodeBase(wxListBase *list = (wxListBase *)NULL, - wxNodeBase *previous = (wxNodeBase *)NULL, - wxNodeBase *next = (wxNodeBase *)NULL, - void *data = NULL, - const wxListKey& key = wxDefaultListKey); - - virtual ~wxNodeBase(); - - // FIXME no check is done that the list is really keyed on strings - const wxChar *GetKeyString() const { return m_key.string; } - long GetKeyInteger() const { return m_key.integer; } - - // Necessary for some existing code - void SetKeyString(wxChar* s) { m_key.string = s; } - void SetKeyInteger(long i) { m_key.integer = i; } - -#ifdef wxLIST_COMPATIBILITY - // compatibility methods, use Get* instead. - wxDEPRECATED( wxNode *Next() const ); - wxDEPRECATED( wxNode *Previous() const ); - wxDEPRECATED( wxObject *Data() const ); -#endif // wxLIST_COMPATIBILITY - -protected: - // all these are going to be "overloaded" in the derived classes - wxNodeBase *GetNext() const { return m_next; } - wxNodeBase *GetPrevious() const { return m_previous; } - - void *GetData() const { return m_data; } - void SetData(void *data) { m_data = data; } - - // get 0-based index of this node within the list or wxNOT_FOUND - int IndexOf() const; - - virtual void DeleteData() { } -public: - // for wxList::iterator - void** GetDataPtr() const { return &(((wxNodeBase*)this)->m_data); } -private: - // optional key stuff - wxListKeyValue m_key; - - void *m_data; // user data - wxNodeBase *m_next, // next and previous nodes in the list - *m_previous; - - wxListBase *m_list; // list we belong to - - DECLARE_NO_COPY_CLASS(wxNodeBase) -}; - -// ----------------------------------------------------------------------------- -// a double-linked list class -// ----------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_BASE wxList; - -class WXDLLIMPEXP_BASE wxListBase : public wxObject -{ -friend class WXDLLIMPEXP_FWD_BASE wxNodeBase; // should be able to call DetachNode() -friend class wxHashTableBase; // should be able to call untyped Find() - -public: - // default ctor & dtor - wxListBase(wxKeyType keyType = wxKEY_NONE) - { Init(keyType); } - virtual ~wxListBase(); - - // accessors - // count of items in the list - size_t GetCount() const { return m_count; } - - // return true if this list is empty - bool IsEmpty() const { return m_count == 0; } - - // operations - - // delete all nodes - void Clear(); - - // instruct it to destroy user data when deleting nodes - void DeleteContents(bool destroy) { m_destroy = destroy; } - - // query if to delete - bool GetDeleteContents() const - { return m_destroy; } - - // get the keytype - wxKeyType GetKeyType() const - { return m_keyType; } - - // set the keytype (required by the serial code) - void SetKeyType(wxKeyType keyType) - { wxASSERT( m_count==0 ); m_keyType = keyType; } - -#ifdef wxLIST_COMPATIBILITY - // compatibility methods from old wxList - wxDEPRECATED( int Number() const ); // use GetCount instead. - wxDEPRECATED( wxNode *First() const ); // use GetFirst - wxDEPRECATED( wxNode *Last() const ); // use GetLast - wxDEPRECATED( wxNode *Nth(size_t n) const ); // use Item - - // kludge for typesafe list migration in core classes. - wxDEPRECATED( operator wxList&() const ); -#endif // wxLIST_COMPATIBILITY - -protected: - - // all methods here are "overloaded" in derived classes to provide compile - // time type checking - - // create a node for the list of this type - virtual wxNodeBase *CreateNode(wxNodeBase *prev, wxNodeBase *next, - void *data, - const wxListKey& key = wxDefaultListKey) = 0; - -// Can't access these from derived classes otherwise (bug in Salford C++?) -#ifdef __SALFORDC__ -public: -#endif - - // ctors - // from an array - wxListBase(size_t count, void *elements[]); - // from a sequence of objects - wxListBase(void *object, ... /* terminate with NULL */); - -protected: - void Assign(const wxListBase& list) - { Clear(); DoCopy(list); } - - // get list head/tail - wxNodeBase *GetFirst() const { return m_nodeFirst; } - wxNodeBase *GetLast() const { return m_nodeLast; } - - // by (0-based) index - wxNodeBase *Item(size_t index) const; - - // get the list item's data - void *operator[](size_t n) const - { - wxNodeBase *node = Item(n); - - return node ? node->GetData() : (wxNodeBase *)NULL; - } - - // operations - // append to end of list - wxNodeBase *Prepend(void *object) - { return (wxNodeBase *)wxListBase::Insert(object); } - // append to beginning of list - wxNodeBase *Append(void *object); - // insert a new item at the beginning of the list - wxNodeBase *Insert(void *object) { return Insert( (wxNodeBase*)NULL, object); } - // insert a new item at the given position - wxNodeBase *Insert(size_t pos, void *object) - { return pos == GetCount() ? Append(object) - : Insert(Item(pos), object); } - // insert before given node or at front of list if prev == NULL - wxNodeBase *Insert(wxNodeBase *prev, void *object); - - // keyed append - wxNodeBase *Append(long key, void *object); - wxNodeBase *Append(const wxChar *key, void *object); - - // removes node from the list but doesn't delete it (returns pointer - // to the node or NULL if it wasn't found in the list) - wxNodeBase *DetachNode(wxNodeBase *node); - // delete element from list, returns false if node not found - bool DeleteNode(wxNodeBase *node); - // finds object pointer and deletes node (and object if DeleteContents - // is on), returns false if object not found - bool DeleteObject(void *object); - - // search (all return NULL if item not found) - // by data - wxNodeBase *Find(const void *object) const; - - // by key - wxNodeBase *Find(const wxListKey& key) const; - - // get 0-based index of object or wxNOT_FOUND - int IndexOf( void *object ) const; - - // this function allows the sorting of arbitrary lists by giving - // a function to compare two list elements. The list is sorted in place. - void Sort(const wxSortCompareFunction compfunc); - - // functions for iterating over the list - void *FirstThat(wxListIterateFunction func); - void ForEach(wxListIterateFunction func); - void *LastThat(wxListIterateFunction func); - - // for STL interface, "last" points to one after the last node - // of the controlled sequence (NULL for the end of the list) - void Reverse(); - void DeleteNodes(wxNodeBase* first, wxNodeBase* last); -private: - - // common part of all ctors - void Init(wxKeyType keyType = wxKEY_NONE); - - // helpers - // common part of copy ctor and assignment operator - void DoCopy(const wxListBase& list); - // common part of all Append()s - wxNodeBase *AppendCommon(wxNodeBase *node); - // free node's data and node itself - void DoDeleteNode(wxNodeBase *node); - - size_t m_count; // number of elements in the list - bool m_destroy; // destroy user data when deleting list items? - wxNodeBase *m_nodeFirst, // pointers to the head and tail of the list - *m_nodeLast; - - wxKeyType m_keyType; // type of our keys (may be wxKEY_NONE) -}; - -// ----------------------------------------------------------------------------- -// macros for definition of "template" list type -// ----------------------------------------------------------------------------- - -// and now some heavy magic... - -// declare a list type named 'name' and containing elements of type 'T *' -// (as a by product of macro expansion you also get wx##name##Node -// wxNode-derived type) -// -// implementation details: -// 1. We define _WX_LIST_ITEM_TYPE_##name typedef to save in it the item type -// for the list of given type - this allows us to pass only the list name -// to WX_DEFINE_LIST() even if it needs both the name and the type -// -// 2. We redefine all non-type-safe wxList functions with type-safe versions -// which don't take any space (everything is inline), but bring compile -// time error checking. -// -// 3. The macro which is usually used (WX_DECLARE_LIST) is defined in terms of -// a more generic WX_DECLARE_LIST_2 macro which, in turn, uses the most -// generic WX_DECLARE_LIST_3 one. The last macro adds a sometimes -// interesting capability to store polymorphic objects in the list and is -// particularly useful with, for example, "wxWindow *" list where the -// wxWindowBase pointers are put into the list, but wxWindow pointers are -// retrieved from it. -// -// 4. final hack is that WX_DECLARE_LIST_3 is defined in terms of -// WX_DECLARE_LIST_4 to allow defining classes without operator->() as -// it results in compiler warnings when this operator doesn't make sense -// (i.e. stored elements are not pointers) - -// common part of WX_DECLARE_LIST_3 and WX_DECLARE_LIST_PTR_3 -#define WX_DECLARE_LIST_4(T, Tbase, name, nodetype, classexp, ptrop) \ - typedef int (*wxSortFuncFor_##name)(const T **, const T **); \ - \ - classexp nodetype : public wxNodeBase \ - { \ - public: \ - nodetype(wxListBase *list = (wxListBase *)NULL, \ - nodetype *previous = (nodetype *)NULL, \ - nodetype *next = (nodetype *)NULL, \ - T *data = (T *)NULL, \ - const wxListKey& key = wxDefaultListKey) \ - : wxNodeBase(list, previous, next, data, key) { } \ - \ - nodetype *GetNext() const \ - { return (nodetype *)wxNodeBase::GetNext(); } \ - nodetype *GetPrevious() const \ - { return (nodetype *)wxNodeBase::GetPrevious(); } \ - \ - T *GetData() const \ - { return (T *)wxNodeBase::GetData(); } \ - void SetData(T *data) \ - { wxNodeBase::SetData(data); } \ - \ - protected: \ - virtual void DeleteData(); \ - \ - DECLARE_NO_COPY_CLASS(nodetype) \ - }; \ - \ - classexp name : public wxListBase \ - { \ - public: \ - typedef nodetype Node; \ - classexp compatibility_iterator \ - { \ - public: \ - compatibility_iterator(Node *ptr = NULL) : m_ptr(ptr) { } \ - \ - Node *operator->() const { return m_ptr; } \ - operator Node *() const { return m_ptr; } \ - \ - private: \ - Node *m_ptr; \ - }; \ - \ - name(wxKeyType keyType = wxKEY_NONE) : wxListBase(keyType) \ - { } \ - name(const name& list) : wxListBase(list.GetKeyType()) \ - { Assign(list); } \ - name(size_t count, T *elements[]) \ - : wxListBase(count, (void **)elements) { } \ - \ - name& operator=(const name& list) \ - { Assign(list); return *this; } \ - \ - nodetype *GetFirst() const \ - { return (nodetype *)wxListBase::GetFirst(); } \ - nodetype *GetLast() const \ - { return (nodetype *)wxListBase::GetLast(); } \ - \ - nodetype *Item(size_t index) const \ - { return (nodetype *)wxListBase::Item(index); } \ - \ - T *operator[](size_t index) const \ - { \ - nodetype *node = Item(index); \ - return node ? (T*)(node->GetData()) : (T*)NULL; \ - } \ - \ - nodetype *Append(Tbase *object) \ - { return (nodetype *)wxListBase::Append(object); } \ - nodetype *Insert(Tbase *object) \ - { return (nodetype *)Insert((nodetype*)NULL, object); } \ - nodetype *Insert(size_t pos, Tbase *object) \ - { return (nodetype *)wxListBase::Insert(pos, object); } \ - nodetype *Insert(nodetype *prev, Tbase *object) \ - { return (nodetype *)wxListBase::Insert(prev, object); } \ - \ - nodetype *Append(long key, void *object) \ - { return (nodetype *)wxListBase::Append(key, object); } \ - nodetype *Append(const wxChar *key, void *object) \ - { return (nodetype *)wxListBase::Append(key, object); } \ - \ - nodetype *DetachNode(nodetype *node) \ - { return (nodetype *)wxListBase::DetachNode(node); } \ - bool DeleteNode(nodetype *node) \ - { return wxListBase::DeleteNode(node); } \ - bool DeleteObject(Tbase *object) \ - { return wxListBase::DeleteObject(object); } \ - void Erase(nodetype *it) \ - { DeleteNode(it); } \ - \ - nodetype *Find(const Tbase *object) const \ - { return (nodetype *)wxListBase::Find(object); } \ - \ - virtual nodetype *Find(const wxListKey& key) const \ - { return (nodetype *)wxListBase::Find(key); } \ - \ - int IndexOf(Tbase *object) const \ - { return wxListBase::IndexOf(object); } \ - \ - void Sort(wxSortCompareFunction func) \ - { wxListBase::Sort(func); } \ - void Sort(wxSortFuncFor_##name func) \ - { Sort((wxSortCompareFunction)func); } \ - \ - protected: \ - virtual wxNodeBase *CreateNode(wxNodeBase *prev, wxNodeBase *next, \ - void *data, \ - const wxListKey& key = wxDefaultListKey) \ - { \ - return new nodetype(this, \ - (nodetype *)prev, (nodetype *)next, \ - (T *)data, key); \ - } \ - /* STL interface */ \ - public: \ - typedef size_t size_type; \ - typedef int difference_type; \ - typedef T* value_type; \ - typedef Tbase* base_value_type; \ - typedef value_type& reference; \ - typedef const value_type& const_reference; \ - typedef base_value_type& base_reference; \ - typedef const base_value_type& const_base_reference; \ - \ - classexp iterator \ - { \ - typedef name list; \ - public: \ - typedef nodetype Node; \ - typedef iterator itor; \ - typedef T* value_type; \ - typedef value_type* ptr_type; \ - typedef value_type& reference; \ - \ - Node* m_node; \ - Node* m_init; \ - public: \ - typedef reference reference_type; \ - typedef ptr_type pointer_type; \ - \ - iterator(Node* node, Node* init) : m_node(node), m_init(init) {}\ - iterator() : m_node(NULL), m_init(NULL) { } \ - reference_type operator*() const \ - { return *(pointer_type)m_node->GetDataPtr(); } \ - ptrop \ - itor& operator++() { m_node = m_node->GetNext(); return *this; }\ - const itor operator++(int) \ - { itor tmp = *this; m_node = m_node->GetNext(); return tmp; }\ - itor& operator--() \ - { \ - m_node = m_node ? m_node->GetPrevious() : m_init; \ - return *this; \ - } \ - const itor operator--(int) \ - { \ - itor tmp = *this; \ - m_node = m_node ? m_node->GetPrevious() : m_init; \ - return tmp; \ - } \ - bool operator!=(const itor& it) const \ - { return it.m_node != m_node; } \ - bool operator==(const itor& it) const \ - { return it.m_node == m_node; } \ - }; \ - classexp const_iterator \ - { \ - typedef name list; \ - public: \ - typedef nodetype Node; \ - typedef T* value_type; \ - typedef const value_type& const_reference; \ - typedef const_iterator itor; \ - typedef value_type* ptr_type; \ - \ - Node* m_node; \ - Node* m_init; \ - public: \ - typedef const_reference reference_type; \ - typedef const ptr_type pointer_type; \ - \ - const_iterator(Node* node, Node* init) \ - : m_node(node), m_init(init) { } \ - const_iterator() : m_node(NULL), m_init(NULL) { } \ - const_iterator(const iterator& it) \ - : m_node(it.m_node), m_init(it.m_init) { } \ - reference_type operator*() const \ - { return *(pointer_type)m_node->GetDataPtr(); } \ - ptrop \ - itor& operator++() { m_node = m_node->GetNext(); return *this; }\ - const itor operator++(int) \ - { itor tmp = *this; m_node = m_node->GetNext(); return tmp; }\ - itor& operator--() \ - { \ - m_node = m_node ? m_node->GetPrevious() : m_init; \ - return *this; \ - } \ - const itor operator--(int) \ - { \ - itor tmp = *this; \ - m_node = m_node ? m_node->GetPrevious() : m_init; \ - return tmp; \ - } \ - bool operator!=(const itor& it) const \ - { return it.m_node != m_node; } \ - bool operator==(const itor& it) const \ - { return it.m_node == m_node; } \ - }; \ - classexp reverse_iterator \ - { \ - typedef name list; \ - public: \ - typedef nodetype Node; \ - typedef T* value_type; \ - typedef reverse_iterator itor; \ - typedef value_type* ptr_type; \ - typedef value_type& reference; \ - \ - Node* m_node; \ - Node* m_init; \ - public: \ - typedef reference reference_type; \ - typedef ptr_type pointer_type; \ - \ - reverse_iterator(Node* node, Node* init) \ - : m_node(node), m_init(init) { } \ - reverse_iterator() : m_node(NULL), m_init(NULL) { } \ - reference_type operator*() const \ - { return *(pointer_type)m_node->GetDataPtr(); } \ - ptrop \ - itor& operator++() \ - { m_node = m_node->GetPrevious(); return *this; } \ - const itor operator++(int) \ - { itor tmp = *this; m_node = m_node->GetPrevious(); return tmp; }\ - itor& operator--() \ - { m_node = m_node ? m_node->GetNext() : m_init; return *this; } \ - const itor operator--(int) \ - { \ - itor tmp = *this; \ - m_node = m_node ? m_node->GetNext() : m_init; \ - return tmp; \ - } \ - bool operator!=(const itor& it) const \ - { return it.m_node != m_node; } \ - bool operator==(const itor& it) const \ - { return it.m_node == m_node; } \ - }; \ - classexp const_reverse_iterator \ - { \ - typedef name list; \ - public: \ - typedef nodetype Node; \ - typedef T* value_type; \ - typedef const_reverse_iterator itor; \ - typedef value_type* ptr_type; \ - typedef const value_type& const_reference; \ - \ - Node* m_node; \ - Node* m_init; \ - public: \ - typedef const_reference reference_type; \ - typedef const ptr_type pointer_type; \ - \ - const_reverse_iterator(Node* node, Node* init) \ - : m_node(node), m_init(init) { } \ - const_reverse_iterator() : m_node(NULL), m_init(NULL) { } \ - const_reverse_iterator(const reverse_iterator& it) \ - : m_node(it.m_node), m_init(it.m_init) { } \ - reference_type operator*() const \ - { return *(pointer_type)m_node->GetDataPtr(); } \ - ptrop \ - itor& operator++() \ - { m_node = m_node->GetPrevious(); return *this; } \ - const itor operator++(int) \ - { itor tmp = *this; m_node = m_node->GetPrevious(); return tmp; }\ - itor& operator--() \ - { m_node = m_node ? m_node->GetNext() : m_init; return *this;}\ - const itor operator--(int) \ - { \ - itor tmp = *this; \ - m_node = m_node ? m_node->GetNext() : m_init; \ - return tmp; \ - } \ - bool operator!=(const itor& it) const \ - { return it.m_node != m_node; } \ - bool operator==(const itor& it) const \ - { return it.m_node == m_node; } \ - }; \ - \ - wxEXPLICIT name(size_type n, const_reference v = value_type()) \ - { assign(n, v); } \ - name(const const_iterator& first, const const_iterator& last) \ - { assign(first, last); } \ - iterator begin() { return iterator(GetFirst(), GetLast()); } \ - const_iterator begin() const \ - { return const_iterator(GetFirst(), GetLast()); } \ - iterator end() { return iterator(NULL, GetLast()); } \ - const_iterator end() const { return const_iterator(NULL, GetLast()); }\ - reverse_iterator rbegin() \ - { return reverse_iterator(GetLast(), GetFirst()); } \ - const_reverse_iterator rbegin() const \ - { return const_reverse_iterator(GetLast(), GetFirst()); } \ - reverse_iterator rend() { return reverse_iterator(NULL, GetFirst()); }\ - const_reverse_iterator rend() const \ - { return const_reverse_iterator(NULL, GetFirst()); } \ - void resize(size_type n, value_type v = value_type()) \ - { \ - while (n < size()) \ - pop_back(); \ - while (n > size()) \ - push_back(v); \ - } \ - size_type size() const { return GetCount(); } \ - size_type max_size() const { return INT_MAX; } \ - bool empty() const { return IsEmpty(); } \ - reference front() { return *begin(); } \ - const_reference front() const { return *begin(); } \ - reference back() { iterator tmp = end(); return *--tmp; } \ - const_reference back() const { const_iterator tmp = end(); return *--tmp; }\ - void push_front(const_reference v = value_type()) \ - { Insert(GetFirst(), (const_base_reference)v); } \ - void pop_front() { DeleteNode(GetFirst()); } \ - void push_back(const_reference v = value_type()) \ - { Append((const_base_reference)v); } \ - void pop_back() { DeleteNode(GetLast()); } \ - void assign(const_iterator first, const const_iterator& last) \ - { \ - clear(); \ - for(; first != last; ++first) \ - Append((const_base_reference)*first); \ - } \ - void assign(size_type n, const_reference v = value_type()) \ - { \ - clear(); \ - for(size_type i = 0; i < n; ++i) \ - Append((const_base_reference)v); \ - } \ - iterator insert(const iterator& it, const_reference v = value_type())\ - { \ - if ( it == end() ) \ - Append((const_base_reference)v); \ - else \ - Insert(it.m_node, (const_base_reference)v); \ - iterator itprev(it); \ - return itprev--; \ - } \ - void insert(const iterator& it, size_type n, const_reference v = value_type())\ - { \ - for(size_type i = 0; i < n; ++i) \ - insert(it, v); \ - } \ - void insert(const iterator& it, const_iterator first, const const_iterator& last)\ - { \ - for(; first != last; ++first) \ - insert(it, *first); \ - } \ - iterator erase(const iterator& it) \ - { \ - iterator next = iterator(it.m_node->GetNext(), GetLast()); \ - DeleteNode(it.m_node); return next; \ - } \ - iterator erase(const iterator& first, const iterator& last) \ - { \ - iterator next = last; \ - if ( next != end() ) \ - ++next; \ - DeleteNodes(first.m_node, last.m_node); \ - return next; \ - } \ - void clear() { Clear(); } \ - void splice(const iterator& it, name& l, const iterator& first, const iterator& last)\ - { insert(it, first, last); l.erase(first, last); } \ - void splice(const iterator& it, name& l) \ - { splice(it, l, l.begin(), l.end() ); } \ - void splice(const iterator& it, name& l, const iterator& first) \ - { \ - if ( it != first ) \ - { \ - insert(it, *first); \ - l.erase(first); \ - } \ - } \ - void remove(const_reference v) \ - { DeleteObject((const_base_reference)v); } \ - void reverse() \ - { Reverse(); } \ - /* void swap(name& l) \ - { \ - { size_t t = m_count; m_count = l.m_count; l.m_count = t; } \ - { bool t = m_destroy; m_destroy = l.m_destroy; l.m_destroy = t; }\ - { wxNodeBase* t = m_nodeFirst; m_nodeFirst = l.m_nodeFirst; l.m_nodeFirst = t; }\ - { wxNodeBase* t = m_nodeLast; m_nodeLast = l.m_nodeLast; l.m_nodeLast = t; }\ - { wxKeyType t = m_keyType; m_keyType = l.m_keyType; l.m_keyType = t; }\ - } */ \ - } - -#define WX_LIST_PTROP \ - pointer_type operator->() const \ - { return (pointer_type)m_node->GetDataPtr(); } -#define WX_LIST_PTROP_NONE - -#define WX_DECLARE_LIST_3(T, Tbase, name, nodetype, classexp) \ - WX_DECLARE_LIST_4(T, Tbase, name, nodetype, classexp, WX_LIST_PTROP_NONE) -#define WX_DECLARE_LIST_PTR_3(T, Tbase, name, nodetype, classexp) \ - WX_DECLARE_LIST_4(T, Tbase, name, nodetype, classexp, WX_LIST_PTROP) - -#define WX_DECLARE_LIST_2(elementtype, listname, nodename, classexp) \ - WX_DECLARE_LIST_3(elementtype, elementtype, listname, nodename, classexp) -#define WX_DECLARE_LIST_PTR_2(elementtype, listname, nodename, classexp) \ - WX_DECLARE_LIST_PTR_3(elementtype, elementtype, listname, nodename, classexp) - -#define WX_DECLARE_LIST(elementtype, listname) \ - typedef elementtype _WX_LIST_ITEM_TYPE_##listname; \ - WX_DECLARE_LIST_2(elementtype, listname, wx##listname##Node, class) -#define WX_DECLARE_LIST_PTR(elementtype, listname) \ - typedef elementtype _WX_LIST_ITEM_TYPE_##listname; \ - WX_DECLARE_LIST_PTR_2(elementtype, listname, wx##listname##Node, class) - -#define WX_DECLARE_LIST_WITH_DECL(elementtype, listname, decl) \ - typedef elementtype _WX_LIST_ITEM_TYPE_##listname; \ - WX_DECLARE_LIST_2(elementtype, listname, wx##listname##Node, decl) - -#define WX_DECLARE_EXPORTED_LIST(elementtype, listname) \ - WX_DECLARE_LIST_WITH_DECL(elementtype, listname, class WXDLLEXPORT) - -#define WX_DECLARE_EXPORTED_LIST_PTR(elementtype, listname) \ - typedef elementtype _WX_LIST_ITEM_TYPE_##listname; \ - WX_DECLARE_LIST_PTR_2(elementtype, listname, wx##listname##Node, class WXDLLEXPORT) - -#define WX_DECLARE_USER_EXPORTED_LIST(elementtype, listname, usergoo) \ - typedef elementtype _WX_LIST_ITEM_TYPE_##listname; \ - WX_DECLARE_LIST_2(elementtype, listname, wx##listname##Node, class usergoo) -#define WX_DECLARE_USER_EXPORTED_LIST_PTR(elementtype, listname, usergoo) \ - typedef elementtype _WX_LIST_ITEM_TYPE_##listname; \ - WX_DECLARE_LIST_PTR_2(elementtype, listname, wx##listname##Node, class usergoo) - -// this macro must be inserted in your program after -// #include "wx/listimpl.cpp" -#define WX_DEFINE_LIST(name) "don't forget to include listimpl.cpp!" - -#define WX_DEFINE_EXPORTED_LIST(name) WX_DEFINE_LIST(name) -#define WX_DEFINE_USER_EXPORTED_LIST(name) WX_DEFINE_LIST(name) - -#endif // !wxUSE_STL - -// ============================================================================ -// now we can define classes 100% compatible with the old ones -// ============================================================================ - -// ---------------------------------------------------------------------------- -// commonly used list classes -// ---------------------------------------------------------------------------- - -#if defined(wxLIST_COMPATIBILITY) - -// inline compatibility functions - -#if !wxUSE_STL - -// ---------------------------------------------------------------------------- -// wxNodeBase deprecated methods -// ---------------------------------------------------------------------------- - -inline wxNode *wxNodeBase::Next() const { return (wxNode *)GetNext(); } -inline wxNode *wxNodeBase::Previous() const { return (wxNode *)GetPrevious(); } -inline wxObject *wxNodeBase::Data() const { return (wxObject *)GetData(); } - -// ---------------------------------------------------------------------------- -// wxListBase deprecated methods -// ---------------------------------------------------------------------------- - -inline int wxListBase::Number() const { return (int)GetCount(); } -inline wxNode *wxListBase::First() const { return (wxNode *)GetFirst(); } -inline wxNode *wxListBase::Last() const { return (wxNode *)GetLast(); } -inline wxNode *wxListBase::Nth(size_t n) const { return (wxNode *)Item(n); } -inline wxListBase::operator wxList&() const { return *(wxList*)this; } - -#endif - -// define this to make a lot of noise about use of the old wxList classes. -//#define wxWARN_COMPAT_LIST_USE - -// ---------------------------------------------------------------------------- -// wxList compatibility class: in fact, it's a list of wxObjects -// ---------------------------------------------------------------------------- - -WX_DECLARE_LIST_2(wxObject, wxObjectList, wxObjectListNode, - class WXDLLIMPEXP_BASE); - -class WXDLLIMPEXP_BASE wxList : public wxObjectList -{ -public: -#if defined(wxWARN_COMPAT_LIST_USE) && !wxUSE_STL - wxList() { }; - wxDEPRECATED( wxList(int key_type) ); -#elif !wxUSE_STL - wxList(int key_type = wxKEY_NONE); -#endif - - // this destructor is required for Darwin - ~wxList() { } - -#if !wxUSE_STL - wxList& operator=(const wxList& list) - { (void) wxListBase::operator=(list); return *this; } - - // compatibility methods - void Sort(wxSortCompareFunction compfunc) { wxListBase::Sort(compfunc); } -#endif - -#if wxUSE_STL -#else - wxNode *Member(wxObject *object) const { return (wxNode *)Find(object); } -#endif - -private: -#if !wxUSE_STL - DECLARE_DYNAMIC_CLASS(wxList) -#endif -}; - -#if !wxUSE_STL - -// ----------------------------------------------------------------------------- -// wxStringList class for compatibility with the old code -// ----------------------------------------------------------------------------- -WX_DECLARE_LIST_2(wxChar, wxStringListBase, wxStringListNode, class WXDLLIMPEXP_BASE); - -class WXDLLIMPEXP_BASE wxStringList : public wxStringListBase -{ -public: - // ctors and such - // default -#ifdef wxWARN_COMPAT_LIST_USE - wxStringList(); - wxDEPRECATED( wxStringList(const wxChar *first ...) ); -#else - wxStringList(); - wxStringList(const wxChar *first ...); -#endif - - // copying the string list: the strings are copied, too (extremely - // inefficient!) - wxStringList(const wxStringList& other) : wxStringListBase() { DeleteContents(true); DoCopy(other); } - wxStringList& operator=(const wxStringList& other) - { Clear(); DoCopy(other); return *this; } - - // operations - // makes a copy of the string - wxNode *Add(const wxChar *s); - - // Append to beginning of list - wxNode *Prepend(const wxChar *s); - - bool Delete(const wxChar *s); - - wxChar **ListToArray(bool new_copies = false) const; - bool Member(const wxChar *s) const; - - // alphabetic sort - void Sort(); - -private: - void DoCopy(const wxStringList&); // common part of copy ctor and operator= - - DECLARE_DYNAMIC_CLASS(wxStringList) -}; - -#else // if wxUSE_STL - -WX_DECLARE_LIST_XO(wxString, wxStringListBase, class WXDLLIMPEXP_BASE); - -class WXDLLIMPEXP_BASE wxStringList : public wxStringListBase -{ -public: - compatibility_iterator Append(wxChar* s) - { wxString tmp = s; delete[] s; return wxStringListBase::Append(tmp); } - compatibility_iterator Insert(wxChar* s) - { wxString tmp = s; delete[] s; return wxStringListBase::Insert(tmp); } - compatibility_iterator Insert(size_t pos, wxChar* s) - { - wxString tmp = s; - delete[] s; - return wxStringListBase::Insert(pos, tmp); - } - compatibility_iterator Add(const wxChar* s) - { push_back(s); return GetLast(); } - compatibility_iterator Prepend(const wxChar* s) - { push_front(s); return GetFirst(); } -}; - -#endif // wxUSE_STL - -#endif // wxLIST_COMPATIBILITY - -// delete all list elements -// -// NB: the class declaration of the list elements must be visible from the -// place where you use this macro, otherwise the proper destructor may not -// be called (a decent compiler should give a warning about it, but don't -// count on it)! -#define WX_CLEAR_LIST(type, list) \ - { \ - type::iterator it, en; \ - for( it = (list).begin(), en = (list).end(); it != en; ++it ) \ - delete *it; \ - (list).clear(); \ - } - -#endif // _WX_LISTH__ diff --git a/desmume/src/windows/wx/include/wx/listbase.h b/desmume/src/windows/wx/include/wx/listbase.h deleted file mode 100644 index 4685ebbbe..000000000 --- a/desmume/src/windows/wx/include/wx/listbase.h +++ /dev/null @@ -1,491 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/listbase.h -// Purpose: wxListCtrl class -// Author: Vadim Zeitlin -// Modified by: -// Created: 04.12.99 -// RCS-ID: $Id: listbase.h 46313 2007-06-03 22:38:28Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LISTBASE_H_BASE_ -#define _WX_LISTBASE_H_BASE_ - -#include "wx/colour.h" -#include "wx/font.h" -#include "wx/gdicmn.h" -#include "wx/event.h" - -// ---------------------------------------------------------------------------- -// types -// ---------------------------------------------------------------------------- - -// type of compare function for wxListCtrl sort operation -typedef int (wxCALLBACK *wxListCtrlCompare)(long item1, long item2, long sortData); - -// ---------------------------------------------------------------------------- -// wxListCtrl constants -// ---------------------------------------------------------------------------- - -// style flags -#define wxLC_VRULES 0x0001 -#define wxLC_HRULES 0x0002 - -#define wxLC_ICON 0x0004 -#define wxLC_SMALL_ICON 0x0008 -#define wxLC_LIST 0x0010 -#define wxLC_REPORT 0x0020 - -#define wxLC_ALIGN_TOP 0x0040 -#define wxLC_ALIGN_LEFT 0x0080 -#define wxLC_AUTOARRANGE 0x0100 -#define wxLC_VIRTUAL 0x0200 -#define wxLC_EDIT_LABELS 0x0400 -#define wxLC_NO_HEADER 0x0800 -#define wxLC_NO_SORT_HEADER 0x1000 -#define wxLC_SINGLE_SEL 0x2000 -#define wxLC_SORT_ASCENDING 0x4000 -#define wxLC_SORT_DESCENDING 0x8000 - -#define wxLC_MASK_TYPE (wxLC_ICON | wxLC_SMALL_ICON | wxLC_LIST | wxLC_REPORT) -#define wxLC_MASK_ALIGN (wxLC_ALIGN_TOP | wxLC_ALIGN_LEFT) -#define wxLC_MASK_SORT (wxLC_SORT_ASCENDING | wxLC_SORT_DESCENDING) - -// for compatibility only -#define wxLC_USER_TEXT wxLC_VIRTUAL - -// Omitted because -// (a) too much detail -// (b) not enough style flags -// (c) not implemented anyhow in the generic version -// -// #define wxLC_NO_SCROLL -// #define wxLC_NO_LABEL_WRAP -// #define wxLC_OWNERDRAW_FIXED -// #define wxLC_SHOW_SEL_ALWAYS - -// Mask flags to tell app/GUI what fields of wxListItem are valid -#define wxLIST_MASK_STATE 0x0001 -#define wxLIST_MASK_TEXT 0x0002 -#define wxLIST_MASK_IMAGE 0x0004 -#define wxLIST_MASK_DATA 0x0008 -#define wxLIST_SET_ITEM 0x0010 -#define wxLIST_MASK_WIDTH 0x0020 -#define wxLIST_MASK_FORMAT 0x0040 - -// State flags for indicating the state of an item -#define wxLIST_STATE_DONTCARE 0x0000 -#define wxLIST_STATE_DROPHILITED 0x0001 // MSW only -#define wxLIST_STATE_FOCUSED 0x0002 -#define wxLIST_STATE_SELECTED 0x0004 -#define wxLIST_STATE_CUT 0x0008 // MSW only -#define wxLIST_STATE_DISABLED 0x0010 // OS2 only -#define wxLIST_STATE_FILTERED 0x0020 // OS2 only -#define wxLIST_STATE_INUSE 0x0040 // OS2 only -#define wxLIST_STATE_PICKED 0x0080 // OS2 only -#define wxLIST_STATE_SOURCE 0x0100 // OS2 only - -// Hit test flags, used in HitTest -#define wxLIST_HITTEST_ABOVE 0x0001 // Above the client area. -#define wxLIST_HITTEST_BELOW 0x0002 // Below the client area. -#define wxLIST_HITTEST_NOWHERE 0x0004 // In the client area but below the last item. -#define wxLIST_HITTEST_ONITEMICON 0x0020 // On the bitmap associated with an item. -#define wxLIST_HITTEST_ONITEMLABEL 0x0080 // On the label (string) associated with an item. -#define wxLIST_HITTEST_ONITEMRIGHT 0x0100 // In the area to the right of an item. -#define wxLIST_HITTEST_ONITEMSTATEICON 0x0200 // On the state icon for a tree view item that is in a user-defined state. -#define wxLIST_HITTEST_TOLEFT 0x0400 // To the left of the client area. -#define wxLIST_HITTEST_TORIGHT 0x0800 // To the right of the client area. - -#define wxLIST_HITTEST_ONITEM (wxLIST_HITTEST_ONITEMICON | wxLIST_HITTEST_ONITEMLABEL | wxLIST_HITTEST_ONITEMSTATEICON) - -// GetSubItemRect constants -#define wxLIST_GETSUBITEMRECT_WHOLEITEM -1l - -// Flags for GetNextItem (MSW only except wxLIST_NEXT_ALL) -enum -{ - wxLIST_NEXT_ABOVE, // Searches for an item above the specified item - wxLIST_NEXT_ALL, // Searches for subsequent item by index - wxLIST_NEXT_BELOW, // Searches for an item below the specified item - wxLIST_NEXT_LEFT, // Searches for an item to the left of the specified item - wxLIST_NEXT_RIGHT // Searches for an item to the right of the specified item -}; - -// Alignment flags for Arrange (MSW only except wxLIST_ALIGN_LEFT) -enum -{ - wxLIST_ALIGN_DEFAULT, - wxLIST_ALIGN_LEFT, - wxLIST_ALIGN_TOP, - wxLIST_ALIGN_SNAP_TO_GRID -}; - -// Column format (MSW only except wxLIST_FORMAT_LEFT) -enum wxListColumnFormat -{ - wxLIST_FORMAT_LEFT, - wxLIST_FORMAT_RIGHT, - wxLIST_FORMAT_CENTRE, - wxLIST_FORMAT_CENTER = wxLIST_FORMAT_CENTRE -}; - -// Autosize values for SetColumnWidth -enum -{ - wxLIST_AUTOSIZE = -1, - wxLIST_AUTOSIZE_USEHEADER = -2 // partly supported by generic version -}; - -// Flag values for GetItemRect -enum -{ - wxLIST_RECT_BOUNDS, - wxLIST_RECT_ICON, - wxLIST_RECT_LABEL -}; - -// Flag values for FindItem (MSW only) -enum -{ - wxLIST_FIND_UP, - wxLIST_FIND_DOWN, - wxLIST_FIND_LEFT, - wxLIST_FIND_RIGHT -}; - -// ---------------------------------------------------------------------------- -// wxListItemAttr: a structure containing the visual attributes of an item -// ---------------------------------------------------------------------------- - -// TODO: this should be renamed to wxItemAttr or something general like this -// and used as base class for wxTextAttr which duplicates this class -// entirely currently -class WXDLLEXPORT wxListItemAttr -{ -public: - // ctors - wxListItemAttr() { } - wxListItemAttr(const wxColour& colText, - const wxColour& colBack, - const wxFont& font) - : m_colText(colText), m_colBack(colBack), m_font(font) - { - } - - // default copy ctor, assignment operator and dtor are ok - - - // setters - void SetTextColour(const wxColour& colText) { m_colText = colText; } - void SetBackgroundColour(const wxColour& colBack) { m_colBack = colBack; } - 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(); } - - const wxColour& GetTextColour() const { return m_colText; } - const wxColour& GetBackgroundColour() const { return m_colBack; } - const wxFont& GetFont() const { return m_font; } - - - // this is almost like assignment operator except it doesn't overwrite the - // fields unset in the source attribute - void AssignFrom(const wxListItemAttr& source) - { - if ( source.HasTextColour() ) - SetTextColour(source.GetTextColour()); - if ( source.HasBackgroundColour() ) - SetBackgroundColour(source.GetBackgroundColour()); - if ( source.HasFont() ) - SetFont(source.GetFont()); - } - -private: - wxColour m_colText, - m_colBack; - wxFont m_font; -}; - -// ---------------------------------------------------------------------------- -// wxListItem: the item or column info, used to exchange data with wxListCtrl -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxListItem : public wxObject -{ -public: - wxListItem() { Init(); m_attr = NULL; } - wxListItem(const wxListItem& item) - : wxObject(), - m_mask(item.m_mask), - m_itemId(item.m_itemId), - m_col(item.m_col), - m_state(item.m_state), - m_stateMask(item.m_stateMask), - m_text(item.m_text), - m_image(item.m_image), - m_data(item.m_data), - m_format(item.m_format), - m_width(item.m_width), - m_attr(NULL) - { - // copy list item attributes - if ( item.HasAttributes() ) - m_attr = new wxListItemAttr(*item.GetAttributes()); - } - virtual ~wxListItem() { delete m_attr; } - - // resetting - void Clear() { Init(); m_text.clear(); ClearAttributes(); } - void ClearAttributes() { if ( m_attr ) { delete m_attr; m_attr = NULL; } } - - // setters - void SetMask(long mask) - { m_mask = mask; } - void SetId(long id) - { m_itemId = id; } - void SetColumn(int col) - { m_col = col; } - void SetState(long state) - { m_mask |= wxLIST_MASK_STATE; m_state = state; m_stateMask |= state; } - void SetStateMask(long stateMask) - { m_stateMask = stateMask; } - void SetText(const wxString& text) - { m_mask |= wxLIST_MASK_TEXT; m_text = text; } - void SetImage(int image) - { m_mask |= wxLIST_MASK_IMAGE; m_image = image; } - void SetData(long data) - { m_mask |= wxLIST_MASK_DATA; m_data = data; } - void SetData(void *data) - { m_mask |= wxLIST_MASK_DATA; m_data = wxPtrToUInt(data); } - - void SetWidth(int width) - { m_mask |= wxLIST_MASK_WIDTH; m_width = width; } - void SetAlign(wxListColumnFormat align) - { m_mask |= wxLIST_MASK_FORMAT; m_format = align; } - - void SetTextColour(const wxColour& colText) - { Attributes().SetTextColour(colText); } - void SetBackgroundColour(const wxColour& colBack) - { Attributes().SetBackgroundColour(colBack); } - void SetFont(const wxFont& font) - { Attributes().SetFont(font); } - - // accessors - long GetMask() const { return m_mask; } - long GetId() const { return m_itemId; } - int GetColumn() const { return m_col; } - long GetState() const { return m_state & m_stateMask; } - const wxString& GetText() const { return m_text; } - int GetImage() const { return m_image; } - wxUIntPtr GetData() const { return m_data; } - - int GetWidth() const { return m_width; } - wxListColumnFormat GetAlign() const { return (wxListColumnFormat)m_format; } - - wxListItemAttr *GetAttributes() const { return m_attr; } - bool HasAttributes() const { return m_attr != NULL; } - - wxColour GetTextColour() const - { return HasAttributes() ? m_attr->GetTextColour() : wxNullColour; } - wxColour GetBackgroundColour() const - { return HasAttributes() ? m_attr->GetBackgroundColour() - : wxNullColour; } - wxFont GetFont() const - { return HasAttributes() ? m_attr->GetFont() : wxNullFont; } - - // this conversion is necessary to make old code using GetItem() to - // compile - operator long() const { return m_itemId; } - - // these members are public for compatibility - - long m_mask; // Indicates what fields are valid - long m_itemId; // The zero-based item position - int m_col; // Zero-based column, if in report mode - long m_state; // The state of the item - long m_stateMask;// Which flags of m_state are valid (uses same flags) - wxString m_text; // The label/header text - int m_image; // The zero-based index into an image list - wxUIntPtr m_data; // App-defined data - - // For columns only - int m_format; // left, right, centre - int m_width; // width of column - -#ifdef __WXPM__ - int m_miniImage; // handle to the mini image for OS/2 -#endif - -protected: - // creates m_attr if we don't have it yet - wxListItemAttr& Attributes() - { - if ( !m_attr ) - m_attr = new wxListItemAttr; - - return *m_attr; - } - - void Init() - { - m_mask = 0; - m_itemId = 0; - m_col = 0; - m_state = 0; - m_stateMask = 0; - m_image = -1; - m_data = 0; - - m_format = wxLIST_FORMAT_CENTRE; - m_width = 0; - } - - wxListItemAttr *m_attr; // optional pointer to the items style - -private: - // VZ: this is strange, we have a copy ctor but not operator=(), why? - wxListItem& operator=(const wxListItem& item); - - DECLARE_DYNAMIC_CLASS(wxListItem) -}; - -// ---------------------------------------------------------------------------- -// wxListEvent - the event class for the wxListCtrl notifications -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxListEvent : public wxNotifyEvent -{ -public: - wxListEvent(wxEventType commandType = wxEVT_NULL, int winid = 0) - : wxNotifyEvent(commandType, winid) - , m_code(0) - , m_oldItemIndex(0) - , m_itemIndex(0) - , m_col(0) - , m_pointDrag() - , m_item() - , m_editCancelled(false) - { } - - wxListEvent(const wxListEvent& event) - : wxNotifyEvent(event) - , m_code(event.m_code) - , m_oldItemIndex(event.m_oldItemIndex) - , m_itemIndex(event.m_itemIndex) - , m_col(event.m_col) - , m_pointDrag(event.m_pointDrag) - , m_item(event.m_item) - , m_editCancelled(event.m_editCancelled) - { } - - int GetKeyCode() const { return m_code; } - long GetIndex() const { return m_itemIndex; } - int GetColumn() const { return m_col; } - wxPoint GetPoint() const { return m_pointDrag; } - const wxString& GetLabel() const { return m_item.m_text; } - const wxString& GetText() const { return m_item.m_text; } - int GetImage() const { return m_item.m_image; } - long GetData() const { return wx_static_cast(long, m_item.m_data); } - long GetMask() const { return m_item.m_mask; } - const wxListItem& GetItem() const { return m_item; } - - // for wxEVT_COMMAND_LIST_CACHE_HINT only - long GetCacheFrom() const { return m_oldItemIndex; } - long GetCacheTo() const { return m_itemIndex; } - - // was label editing canceled? (for wxEVT_COMMAND_LIST_END_LABEL_EDIT only) - bool IsEditCancelled() const { return m_editCancelled; } - void SetEditCanceled(bool editCancelled) { m_editCancelled = editCancelled; } - - virtual wxEvent *Clone() const { return new wxListEvent(*this); } - -//protected: -- not for backwards compatibility - int m_code; - long m_oldItemIndex; // only for wxEVT_COMMAND_LIST_CACHE_HINT - long m_itemIndex; - int m_col; - wxPoint m_pointDrag; - - wxListItem m_item; - -protected: - bool m_editCancelled; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxListEvent) -}; - -// ---------------------------------------------------------------------------- -// wxListCtrl event macros -// ---------------------------------------------------------------------------- - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_BEGIN_DRAG, 700) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_BEGIN_RDRAG, 701) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT, 702) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_END_LABEL_EDIT, 703) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_DELETE_ITEM, 704) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS, 705) -#if WXWIN_COMPATIBILITY_2_4 - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_GET_INFO, 706) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_SET_INFO, 707) -#endif - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_SELECTED, 708) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_DESELECTED, 709) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_KEY_DOWN, 710) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_INSERT_ITEM, 711) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_CLICK, 712) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, 713) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK, 714) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_ACTIVATED, 715) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_CACHE_HINT, 716) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_RIGHT_CLICK, 717) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, 718) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_DRAGGING, 719) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_COL_END_DRAG, 720) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_LIST_ITEM_FOCUSED, 721) -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxListEventFunction)(wxListEvent&); - -#define wxListEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxListEventFunction, &func) - -#define wx__DECLARE_LISTEVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_LIST_ ## evt, id, wxListEventHandler(fn)) - -#define EVT_LIST_BEGIN_DRAG(id, fn) wx__DECLARE_LISTEVT(BEGIN_DRAG, id, fn) -#define EVT_LIST_BEGIN_RDRAG(id, fn) wx__DECLARE_LISTEVT(BEGIN_RDRAG, id, fn) -#define EVT_LIST_BEGIN_LABEL_EDIT(id, fn) wx__DECLARE_LISTEVT(BEGIN_LABEL_EDIT, id, fn) -#define EVT_LIST_END_LABEL_EDIT(id, fn) wx__DECLARE_LISTEVT(END_LABEL_EDIT, id, fn) -#define EVT_LIST_DELETE_ITEM(id, fn) wx__DECLARE_LISTEVT(DELETE_ITEM, id, fn) -#define EVT_LIST_DELETE_ALL_ITEMS(id, fn) wx__DECLARE_LISTEVT(DELETE_ALL_ITEMS, id, fn) -#define EVT_LIST_KEY_DOWN(id, fn) wx__DECLARE_LISTEVT(KEY_DOWN, id, fn) -#define EVT_LIST_INSERT_ITEM(id, fn) wx__DECLARE_LISTEVT(INSERT_ITEM, id, fn) - -#define EVT_LIST_COL_CLICK(id, fn) wx__DECLARE_LISTEVT(COL_CLICK, id, fn) -#define EVT_LIST_COL_RIGHT_CLICK(id, fn) wx__DECLARE_LISTEVT(COL_RIGHT_CLICK, id, fn) -#define EVT_LIST_COL_BEGIN_DRAG(id, fn) wx__DECLARE_LISTEVT(COL_BEGIN_DRAG, id, fn) -#define EVT_LIST_COL_DRAGGING(id, fn) wx__DECLARE_LISTEVT(COL_DRAGGING, id, fn) -#define EVT_LIST_COL_END_DRAG(id, fn) wx__DECLARE_LISTEVT(COL_END_DRAG, id, fn) - -#define EVT_LIST_ITEM_SELECTED(id, fn) wx__DECLARE_LISTEVT(ITEM_SELECTED, id, fn) -#define EVT_LIST_ITEM_DESELECTED(id, fn) wx__DECLARE_LISTEVT(ITEM_DESELECTED, id, fn) -#define EVT_LIST_ITEM_RIGHT_CLICK(id, fn) wx__DECLARE_LISTEVT(ITEM_RIGHT_CLICK, id, fn) -#define EVT_LIST_ITEM_MIDDLE_CLICK(id, fn) wx__DECLARE_LISTEVT(ITEM_MIDDLE_CLICK, id, fn) -#define EVT_LIST_ITEM_ACTIVATED(id, fn) wx__DECLARE_LISTEVT(ITEM_ACTIVATED, id, fn) -#define EVT_LIST_ITEM_FOCUSED(id, fn) wx__DECLARE_LISTEVT(ITEM_FOCUSED, id, fn) - -#define EVT_LIST_CACHE_HINT(id, fn) wx__DECLARE_LISTEVT(CACHE_HINT, id, fn) - - -#if WXWIN_COMPATIBILITY_2_4 -#define EVT_LIST_GET_INFO(id, fn) wx__DECLARE_LISTEVT(GET_INFO, id, fn) -#define EVT_LIST_SET_INFO(id, fn) wx__DECLARE_LISTEVT(SET_INFO, id, fn) -#endif - -#endif - // _WX_LISTCTRL_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/listbook.h b/desmume/src/windows/wx/include/wx/listbook.h deleted file mode 100644 index fe8484ee6..000000000 --- a/desmume/src/windows/wx/include/wx/listbook.h +++ /dev/null @@ -1,152 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/listbook.h -// Purpose: wxListbook: wxListCtrl and wxNotebook combination -// Author: Vadim Zeitlin -// Modified by: -// Created: 19.08.03 -// RCS-ID: $Id: listbook.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LISTBOOK_H_ -#define _WX_LISTBOOK_H_ - -#include "wx/defs.h" - -#if wxUSE_LISTBOOK - -#include "wx/bookctrl.h" - -class WXDLLIMPEXP_FWD_CORE wxListView; -class WXDLLIMPEXP_FWD_CORE wxListEvent; - -extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED; -extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING; - -// wxListbook flags -#define wxLB_DEFAULT wxBK_DEFAULT -#define wxLB_TOP wxBK_TOP -#define wxLB_BOTTOM wxBK_BOTTOM -#define wxLB_LEFT wxBK_LEFT -#define wxLB_RIGHT wxBK_RIGHT -#define wxLB_ALIGN_MASK wxBK_ALIGN_MASK - -// ---------------------------------------------------------------------------- -// wxListbook -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxListbook : public wxBookCtrlBase -{ -public: - wxListbook() - { - Init(); - } - - wxListbook(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxEmptyString) - { - Init(); - - (void)Create(parent, id, pos, size, style, name); - } - - // quasi ctor - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxEmptyString); - - - // overridden base class methods - virtual int GetSelection() const; - virtual bool SetPageText(size_t n, const wxString& strText); - virtual wxString GetPageText(size_t n) const; - virtual int GetPageImage(size_t n) const; - virtual bool SetPageImage(size_t n, int imageId); - virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; - virtual bool InsertPage(size_t n, - wxWindow *page, - const wxString& text, - bool bSelect = false, - int imageId = -1); - 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; - virtual void SetImageList(wxImageList *imageList); - - virtual bool DeleteAllPages(); - - wxListView* GetListView() const { return (wxListView*)m_bookctrl; } - -protected: - virtual wxWindow *DoRemovePage(size_t page); - - // get the size which the list control should have - virtual wxSize GetControllerSize() const; - - void UpdateSelectedPage(size_t newsel); - - wxBookCtrlBaseEvent* CreatePageChangingEvent() const; - void MakeChangedEvent(wxBookCtrlBaseEvent &event); - - // event handlers - void OnListSelected(wxListEvent& event); - void OnSize(wxSizeEvent& event); - - // the currently selected page or wxNOT_FOUND if none - int m_selection; - -private: - // common part of all constructors - void Init(); - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxListbook) -}; - -// ---------------------------------------------------------------------------- -// listbook event class and related stuff -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxListbookEvent : public wxBookCtrlBaseEvent -{ -public: - wxListbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0, - int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND) - : wxBookCtrlBaseEvent(commandType, id, nSel, nOldSel) - { - } - - wxListbookEvent(const wxListbookEvent& event) - : wxBookCtrlBaseEvent(event) - { - } - - virtual wxEvent *Clone() const { return new wxListbookEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxListbookEvent) -}; - -typedef void (wxEvtHandler::*wxListbookEventFunction)(wxListbookEvent&); - -#define wxListbookEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxListbookEventFunction, &func) - -#define EVT_LISTBOOK_PAGE_CHANGED(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED, winid, wxListbookEventHandler(fn)) - -#define EVT_LISTBOOK_PAGE_CHANGING(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, winid, wxListbookEventHandler(fn)) - -#endif // wxUSE_LISTBOOK - -#endif // _WX_LISTBOOK_H_ diff --git a/desmume/src/windows/wx/include/wx/listbox.h b/desmume/src/windows/wx/include/wx/listbox.h deleted file mode 100644 index c6a669d5c..000000000 --- a/desmume/src/windows/wx/include/wx/listbox.h +++ /dev/null @@ -1,166 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/listbox.h -// Purpose: wxListBox class interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 22.10.99 -// RCS-ID: $Id: listbox.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LISTBOX_H_BASE_ -#define _WX_LISTBOX_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_LISTBOX - -#include "wx/ctrlsub.h" // base class - -// forward declarations are enough here -class WXDLLIMPEXP_FWD_BASE wxArrayInt; -class WXDLLIMPEXP_FWD_BASE wxArrayString; - -// ---------------------------------------------------------------------------- -// global data -// ---------------------------------------------------------------------------- - -extern WXDLLEXPORT_DATA(const wxChar) wxListBoxNameStr[]; - -// ---------------------------------------------------------------------------- -// wxListBox interface is defined by the class wxListBoxBase -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxListBoxBase : public wxControlWithItems -{ -public: - wxListBoxBase() { } - virtual ~wxListBoxBase(); - - // all generic methods are in wxControlWithItems, except for the following - // ones which are not yet implemented by wxChoice/wxComboBox - void Insert(const wxString& item, unsigned int pos) - { /* return*/ wxControlWithItems::Insert(item,pos); } - void Insert(const wxString& item, unsigned int pos, void *clientData) - { /* return*/ wxControlWithItems::Insert(item,pos,clientData); } - void Insert(const wxString& item, unsigned int pos, wxClientData *clientData) - { /* return*/ wxControlWithItems::Insert(item,pos,clientData); } - - void InsertItems(unsigned int nItems, const wxString *items, unsigned int pos); - void InsertItems(const wxArrayString& items, unsigned int pos) - { DoInsertItems(items, pos); } - - void Set(int n, const wxString* items, void **clientData = NULL); - void Set(const wxArrayString& items, void **clientData = NULL) - { DoSetItems(items, clientData); } - - // multiple selection logic - virtual bool IsSelected(int n) const = 0; - virtual void SetSelection(int n) { DoSetSelection(n, true); } - void SetSelection(int n, bool select) { DoSetSelection(n, select); } - void Deselect(int n) { DoSetSelection(n, false); } - void DeselectAll(int itemToLeaveSelected = -1); - - virtual bool SetStringSelection(const wxString& s, bool select); - virtual bool SetStringSelection(const wxString& s) - { - return SetStringSelection(s, true); - } - - // works for single as well as multiple selection listboxes (unlike - // GetSelection which only works for listboxes with single selection) - virtual int GetSelections(wxArrayInt& aSelections) const = 0; - - // set the specified item at the first visible item or scroll to max - // range. - void SetFirstItem(int n) { DoSetFirstItem(n); } - void SetFirstItem(const wxString& s); - - // ensures that the given item is visible scrolling the listbox if - // necessary - virtual void EnsureVisible(int n); - - // a combination of Append() and EnsureVisible(): appends the item to the - // listbox and ensures that it is visible i.e. not scrolled out of view - void AppendAndEnsureVisible(const wxString& s); - - // return true if the listbox allows multiple selection - bool HasMultipleSelection() const - { - return (m_windowStyle & wxLB_MULTIPLE) || - (m_windowStyle & wxLB_EXTENDED); - } - - // return true if this listbox is sorted - bool IsSorted() const { return (m_windowStyle & wxLB_SORT) != 0; } - - // emulate selecting or deselecting the item event.GetInt() (depending on - // event.GetExtraLong()) - void Command(wxCommandEvent& event); - - // returns the item number at a point or wxNOT_FOUND - int HitTest(const wxPoint& point) const { return DoListHitTest(point); } - -#if WXWIN_COMPATIBILITY_2_6 - // compatibility - these functions are deprecated, use the new ones - // instead - wxDEPRECATED( bool Selected(int n) const ); -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - // NB: due to wxGTK implementation details, DoInsert() is implemented - // using DoInsertItems() and not the other way round - virtual int DoInsert(const wxString& item, unsigned int pos) - { InsertItems(1, &item, pos); return pos; } - - // to be implemented in derived classes - virtual void DoInsertItems(const wxArrayString& items, unsigned int pos) = 0; - virtual void DoSetItems(const wxArrayString& items, void **clientData) = 0; - - virtual void DoSetFirstItem(int n) = 0; - - virtual void DoSetSelection(int n, bool select) = 0; - - // there is already wxWindow::DoHitTest() so call this one differently - virtual int DoListHitTest(const wxPoint& WXUNUSED(point)) const - { return wxNOT_FOUND; } - - - DECLARE_NO_COPY_CLASS(wxListBoxBase) -}; - -#if WXWIN_COMPATIBILITY_2_6 - inline bool wxListBoxBase::Selected(int n) const { return IsSelected(n); } -#endif // WXWIN_COMPATIBILITY_2_6 - -// ---------------------------------------------------------------------------- -// include the platform-specific class declaration -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/listbox.h" -#elif defined(__WXMSW__) - #include "wx/msw/listbox.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/listbox.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/listbox.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/listbox.h" -#elif defined(__WXMAC__) - #include "wx/mac/listbox.h" -#elif defined(__WXPM__) - #include "wx/os2/listbox.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/listbox.h" -#endif - -#endif // wxUSE_LISTBOX - -#endif - // _WX_LISTBOX_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/listctrl.h b/desmume/src/windows/wx/include/wx/listctrl.h deleted file mode 100644 index 96b6fa7b1..000000000 --- a/desmume/src/windows/wx/include/wx/listctrl.h +++ /dev/null @@ -1,110 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/listctrl.h -// Purpose: wxListCtrl class -// Author: Vadim Zeitlin -// Modified by: -// Created: 04.12.99 -// RCS-ID: $Id: listctrl.h 46432 2007-06-13 03:46:20Z SC $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LISTCTRL_H_BASE_ -#define _WX_LISTCTRL_H_BASE_ - -#include "wx/defs.h" // headers should include this before first wxUSE_XXX check - -#if wxUSE_LISTCTRL - -#include "wx/listbase.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -extern WXDLLEXPORT_DATA(const wxChar) wxListCtrlNameStr[]; - -// ---------------------------------------------------------------------------- -// include the wxListCtrl class declaration -// ---------------------------------------------------------------------------- - -#if defined(__WIN32__) && !defined(__WXUNIVERSAL__) - #include "wx/msw/listctrl.h" -#elif defined(__WXMAC__) && !defined(__WXUNIVERSAL__) - #include "wx/mac/carbon/listctrl.h" -#else - #include "wx/generic/listctrl.h" -#endif - -// ---------------------------------------------------------------------------- -// wxListView: a class which provides a better API for list control -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxListView : public wxListCtrl -{ -public: - wxListView() { } - wxListView( wxWindow *parent, - wxWindowID winid = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxLC_REPORT, - const wxValidator& validator = wxDefaultValidator, - const wxString &name = wxListCtrlNameStr) - { - Create(parent, winid, pos, size, style, validator, name); - } - - // focus/selection stuff - // --------------------- - - // [de]select an item - void Select(long n, bool on = true) - { - SetItemState(n, on ? wxLIST_STATE_SELECTED : 0, wxLIST_STATE_SELECTED); - } - - // focus and show the given item - void Focus(long index) - { - SetItemState(index, wxLIST_STATE_FOCUSED, wxLIST_STATE_FOCUSED); - EnsureVisible(index); - } - - // get the currently focused item or -1 if none - long GetFocusedItem() const - { - return GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED); - } - - // get first and subsequent selected items, return -1 when no more - long GetNextSelected(long item) const - { return GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); } - long GetFirstSelected() const - { return GetNextSelected(-1); } - - // return true if the item is selected - bool IsSelected(long index) const - { return GetItemState(index, wxLIST_STATE_SELECTED) != 0; } - - // columns - // ------- - - void SetColumnImage(int col, int image) - { - wxListItem item; - item.SetMask(wxLIST_MASK_IMAGE); - item.SetImage(image); - SetColumn(col, item); - } - - void ClearColumnImage(int col) { SetColumnImage(col, -1); } - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxListView) -}; - -#endif // wxUSE_LISTCTRL - -#endif - // _WX_LISTCTRL_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/listimpl.cpp b/desmume/src/windows/wx/include/wx/listimpl.cpp deleted file mode 100644 index d43cfe99a..000000000 --- a/desmume/src/windows/wx/include/wx/listimpl.cpp +++ /dev/null @@ -1,39 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: listimpl.cpp -// Purpose: second-part of macro based implementation of template lists -// Author: Vadim Zeitlin -// Modified by: -// Created: 16/11/98 -// RCS-ID: $Id: listimpl.cpp 38893 2006-04-24 17:59:10Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#if wxUSE_STL - -#undef WX_DEFINE_LIST -#define WX_DEFINE_LIST(name) \ - void _WX_LIST_HELPER_##name::DeleteFunction( _WX_LIST_ITEM_TYPE_##name X )\ - { \ - delete X; \ - } \ - name::BaseListType name::EmptyList; - -#else // !wxUSE_STL - - #define _DEFINE_LIST(T, name) \ - void wx##name##Node::DeleteData() \ - { \ - delete (T *)GetData(); \ - } - - // redefine the macro so that now it will generate the class implementation - // old value would provoke a compile-time error if this file is not included - #undef WX_DEFINE_LIST - #define WX_DEFINE_LIST(name) _DEFINE_LIST(_WX_LIST_ITEM_TYPE_##name, name) - - // don't pollute preprocessor's name space - //#undef _DEFINE_LIST - -#endif // wxUSE_STL/!wxUSE_STL - diff --git a/desmume/src/windows/wx/include/wx/log.h b/desmume/src/windows/wx/include/wx/log.h deleted file mode 100644 index 288e8e552..000000000 --- a/desmume/src/windows/wx/include/wx/log.h +++ /dev/null @@ -1,653 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/log.h -// Purpose: Assorted wxLogXXX functions, and wxLog (sink for logs) -// Author: Vadim Zeitlin -// Modified by: -// Created: 29/01/98 -// RCS-ID: $Id: log.h 50993 2008-01-02 21:18:15Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LOG_H_ -#define _WX_LOG_H_ - -#include "wx/defs.h" - -// ---------------------------------------------------------------------------- -// common constants for use in wxUSE_LOG/!wxUSE_LOG -// ---------------------------------------------------------------------------- - -// the trace masks have been superceded by symbolic trace constants, they're -// for compatibility only andwill be removed soon - do NOT use them - -// meaning of different bits of the trace mask (which allows selectively -// enable/disable some trace messages) -#define wxTraceMemAlloc 0x0001 // trace memory allocation (new/delete) -#define wxTraceMessages 0x0002 // trace window messages/X callbacks -#define wxTraceResAlloc 0x0004 // trace GDI resource allocation -#define wxTraceRefCount 0x0008 // trace various ref counting operations - -#ifdef __WXMSW__ - #define wxTraceOleCalls 0x0100 // OLE interface calls -#endif - -// ---------------------------------------------------------------------------- -// types -// ---------------------------------------------------------------------------- - -// NB: these types are needed even if wxUSE_LOG == 0 -typedef unsigned long wxTraceMask; -typedef unsigned long wxLogLevel; - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/string.h" - -#if wxUSE_LOG - -#include "wx/arrstr.h" - -#ifndef __WXWINCE__ - #include <time.h> // for time_t -#endif - -#include "wx/dynarray.h" - -#ifndef wxUSE_LOG_DEBUG -# ifdef __WXDEBUG__ -# define wxUSE_LOG_DEBUG 1 -# else // !__WXDEBUG__ -# define wxUSE_LOG_DEBUG 0 -# endif -#endif - -// ---------------------------------------------------------------------------- -// forward declarations -// ---------------------------------------------------------------------------- - -#if wxUSE_GUI - class WXDLLIMPEXP_FWD_CORE wxTextCtrl; - class WXDLLIMPEXP_FWD_CORE wxLogFrame; - class WXDLLIMPEXP_FWD_CORE wxFrame; - class WXDLLIMPEXP_FWD_CORE wxWindow; -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// different standard log levels (you may also define your own) -enum -{ - wxLOG_FatalError, // program can't continue, abort immediately - wxLOG_Error, // a serious error, user must be informed about it - wxLOG_Warning, // user is normally informed about it but may be ignored - wxLOG_Message, // normal message (i.e. normal output of a non GUI app) - wxLOG_Status, // informational: might go to the status line of GUI app - wxLOG_Info, // informational message (a.k.a. 'Verbose') - wxLOG_Debug, // never shown to the user, disabled in release mode - wxLOG_Trace, // trace messages are also only enabled in debug mode - wxLOG_Progress, // used for progress indicator (not yet) - wxLOG_User = 100, // user defined levels start here - wxLOG_Max = 10000 -}; - -// symbolic trace masks - wxLogTrace("foo", "some trace message...") will be -// discarded unless the string "foo" has been added to the list of allowed -// ones with AddTraceMask() - -#define wxTRACE_MemAlloc wxT("memalloc") // trace memory allocation (new/delete) -#define wxTRACE_Messages wxT("messages") // trace window messages/X callbacks -#define wxTRACE_ResAlloc wxT("resalloc") // trace GDI resource allocation -#define wxTRACE_RefCount wxT("refcount") // trace various ref counting operations - -#ifdef __WXMSW__ - #define wxTRACE_OleCalls wxT("ole") // OLE interface calls -#endif - -#include "wx/iosfwrap.h" - -// ---------------------------------------------------------------------------- -// 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 -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxLog -{ -public: - // ctor - wxLog(){} - - // these functions allow to completely disable all log messages - - // is logging disabled now? - static bool IsEnabled() { return ms_doLog; } - - // change the flag state, return the previous one - static bool EnableLogging(bool doIt = true) - { bool doLogOld = ms_doLog; ms_doLog = doIt; return doLogOld; } - - // static sink function - see DoLog() for function to overload in the - // derived classes - static void OnLog(wxLogLevel level, const wxChar *szString, time_t t); - - // message buffering - - // flush shows all messages if they're not logged immediately (FILE - // and iostream logs don't need it, but wxGuiLog does to avoid showing - // 17 modal dialogs one after another) - virtual void Flush(); - - // flush the active target if any - static void FlushActive() - { - if ( !ms_suspendCount ) - { - wxLog *log = GetActiveTarget(); - if ( log ) - log->Flush(); - } - } - - // only one sink is active at each moment - // get current log target, will call wxApp::CreateLogTarget() to - // create one if none exists - static wxLog *GetActiveTarget(); - - // change log target, pLogger may be NULL - static wxLog *SetActiveTarget(wxLog *pLogger); - - // suspend the message flushing of the main target until the next call - // to Resume() - this is mainly for internal use (to prevent wxYield() - // from flashing the messages) - static void Suspend() { ms_suspendCount++; } - - // must be called for each Suspend()! - static void Resume() { ms_suspendCount--; } - - // functions controlling the default wxLog behaviour - // verbose mode is activated by standard command-line '-verbose' - // option - static void SetVerbose(bool bVerbose = true) { ms_bVerbose = bVerbose; } - - // Set log level. Log messages with level > logLevel will not be logged. - static void SetLogLevel(wxLogLevel logLevel) { ms_logLevel = logLevel; } - -#if wxABI_VERSION >= 20805 /* 2.8.5+ only */ - // should GetActiveTarget() try to create a new log object if the - // current is NULL? - static void DontCreateOnDemand(); -#endif - - // Make GetActiveTarget() create a new log object again. - static void DoCreateOnDemand(); - - // log the count of repeating messages instead of logging the messages - // multiple times - static void SetRepetitionCounting(bool bRepetCounting = true) - { ms_bRepetCounting = bRepetCounting; } - - // gets duplicate counting status - static bool GetRepetitionCounting() { return ms_bRepetCounting; } - - // trace mask (see wxTraceXXX constants for details) - static void SetTraceMask(wxTraceMask ulMask) { ms_ulTraceMask = ulMask; } - - // add string trace mask - static void AddTraceMask(const wxString& str) - { ms_aTraceMasks.push_back(str); } - - // add string trace mask - static void RemoveTraceMask(const wxString& str); - - // remove all string trace masks - static void ClearTraceMasks(); - - // get string trace masks - static const wxArrayString &GetTraceMasks() { return ms_aTraceMasks; } - - // sets the timestamp string: this is used as strftime() format string - // for the log targets which add time stamps to the messages - set it - // to NULL to disable time stamping completely. - static void SetTimestamp(const wxChar *ts) { ms_timestamp = ts; } - - - // accessors - - // gets the verbose status - static bool GetVerbose() { return ms_bVerbose; } - - // get trace mask - static wxTraceMask GetTraceMask() { return ms_ulTraceMask; } - - // is this trace mask in the list? - static bool IsAllowedTraceMask(const wxChar *mask); - - // return the current loglevel limit - static wxLogLevel GetLogLevel() { return ms_logLevel; } - - // get the current timestamp format string (may be NULL) - static const wxChar *GetTimestamp() { return ms_timestamp; } - - - // helpers - - // put the time stamp into the string if ms_timestamp != NULL (don't - // change it otherwise) - static void TimeStamp(wxString *str); - - // make dtor virtual for all derived classes - virtual ~wxLog(); - - - // this method exists for backwards compatibility only, don't use - bool HasPendingMessages() const { return true; } - -#if WXWIN_COMPATIBILITY_2_6 - // this function doesn't do anything any more, don't call it - wxDEPRECATED( static wxChar *SetLogBuffer(wxChar *buf, size_t size = 0) ); -#endif - -protected: - // the logging functions that can be overriden - - // default DoLog() prepends the time stamp and a prefix corresponding - // to the message to szString and then passes it to DoLogString() - virtual void DoLog(wxLogLevel level, const wxChar *szString, time_t t); - - // default DoLogString does nothing but is not pure virtual because if - // you override DoLog() you might not need it at all - virtual void DoLogString(const wxChar *szString, time_t t); - - // log a line containing the number of times the previous message was - // repeated and returns this number (which can be 0) - static unsigned DoLogNumberOfRepeats(); - -private: - // static variables - // ---------------- - - // traditional behaviour or counting repetitions - static bool ms_bRepetCounting; - static wxString ms_prevString; // previous message that was logged - // how many times the previous message was logged - static unsigned ms_prevCounter; - static time_t ms_prevTimeStamp;// timestamp of the previous message - static wxLogLevel ms_prevLevel; // level of the previous message - - static wxLog *ms_pLogger; // currently active log sink - static bool ms_doLog; // false => all logging disabled - static bool ms_bAutoCreate; // create new log targets on demand? - static bool ms_bVerbose; // false => ignore LogInfo messages - - static wxLogLevel ms_logLevel; // limit logging to levels <= ms_logLevel - - static size_t ms_suspendCount; // if positive, logs are not flushed - - // format string for strftime(), if NULL, time stamping log messages is - // disabled - static const wxChar *ms_timestamp; - - static wxTraceMask ms_ulTraceMask; // controls wxLogTrace behaviour - static wxArrayString ms_aTraceMasks; // more powerful filter for wxLogTrace - - - // this is the replacement of DoLogNumberOfRepeats() (which has to be kept - // to avoid breaking ABI in this version) - unsigned LogLastRepeatIfNeeded(); - - // implementation of the function above which supposes that the caller had - // already locked gs_prevCS - unsigned LogLastRepeatIfNeededUnlocked(); -}; - -// ---------------------------------------------------------------------------- -// "trivial" derivations of wxLog -// ---------------------------------------------------------------------------- - -// log everything to a buffer -class WXDLLIMPEXP_BASE wxLogBuffer : public wxLog -{ -public: - wxLogBuffer() { } - - // get the string contents with all messages logged - const wxString& GetBuffer() const { return m_str; } - - // show the buffer contents to the user in the best possible way (this uses - // wxMessageOutputMessageBox) and clear it - virtual void Flush(); - -protected: - virtual void DoLog(wxLogLevel level, const wxChar *szString, time_t t); - virtual void DoLogString(const wxChar *szString, time_t t); - -private: - wxString m_str; - - DECLARE_NO_COPY_CLASS(wxLogBuffer) -}; - - -// log everything to a "FILE *", stderr by default -class WXDLLIMPEXP_BASE wxLogStderr : public wxLog -{ -public: - // redirect log output to a FILE - wxLogStderr(FILE *fp = (FILE *) NULL); - -protected: - // implement sink function - virtual void DoLogString(const wxChar *szString, time_t t); - - FILE *m_fp; - - DECLARE_NO_COPY_CLASS(wxLogStderr) -}; - -#if wxUSE_STD_IOSTREAM - -// log everything to an "ostream", cerr by default -class WXDLLIMPEXP_BASE wxLogStream : public wxLog -{ -public: - // redirect log output to an ostream - wxLogStream(wxSTD ostream *ostr = (wxSTD ostream *) NULL); - -protected: - // implement sink function - virtual void DoLogString(const wxChar *szString, time_t t); - - // using ptr here to avoid including <iostream.h> from this file - wxSTD ostream *m_ostr; -}; - -#endif // wxUSE_STD_IOSTREAM - -// ---------------------------------------------------------------------------- -// /dev/null log target: suppress logging until this object goes out of scope -// ---------------------------------------------------------------------------- - -// example of usage: -/* - void Foo() - { - wxFile file; - - // wxFile.Open() normally complains if file can't be opened, we don't - // want it - wxLogNull logNo; - - if ( !file.Open("bar") ) - ... process error ourselves ... - - // ~wxLogNull called, old log sink restored - } - */ -class WXDLLIMPEXP_BASE wxLogNull -{ -public: - wxLogNull() : m_flagOld(wxLog::EnableLogging(false)) { } - ~wxLogNull() { (void)wxLog::EnableLogging(m_flagOld); } - -private: - bool m_flagOld; // the previous value of the wxLog::ms_doLog -}; - -// ---------------------------------------------------------------------------- -// chaining log target: installs itself as a log target and passes all -// messages to the real log target given to it in the ctor but also forwards -// them to the previously active one -// -// note that you don't have to call SetActiveTarget() with this class, it -// does it itself in its ctor -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxLogChain : public wxLog -{ -public: - wxLogChain(wxLog *logger); - virtual ~wxLogChain(); - - // change the new log target - void SetLog(wxLog *logger); - - // this can be used to temporarily disable (and then reenable) passing - // messages to the old logger (by default we do pass them) - void PassMessages(bool bDoPass) { m_bPassMessages = bDoPass; } - - // are we passing the messages to the previous log target? - bool IsPassingMessages() const { return m_bPassMessages; } - - // return the previous log target (may be NULL) - wxLog *GetOldLog() const { return m_logOld; } - - // override base class version to flush the old logger as well - virtual void Flush(); - - // call to avoid destroying the old log target -#if wxABI_VERSION >= 20805 /* 2.8.5+ only */ - void DetachOldLog() { m_logOld = NULL; } -#endif - -protected: - // pass the chain to the old logger if needed - virtual void DoLog(wxLogLevel level, const wxChar *szString, time_t t); - -private: - // the current log target - wxLog *m_logNew; - - // the previous log target - wxLog *m_logOld; - - // do we pass the messages to the old logger? - bool m_bPassMessages; - - DECLARE_NO_COPY_CLASS(wxLogChain) -}; - -// a chain log target which uses itself as the new logger -class WXDLLIMPEXP_BASE wxLogPassThrough : public wxLogChain -{ -public: - wxLogPassThrough(); - -private: - DECLARE_NO_COPY_CLASS(wxLogPassThrough) -}; - -#if wxUSE_GUI - // include GUI log targets: - #include "wx/generic/logg.h" -#endif // wxUSE_GUI - -// ============================================================================ -// global functions -// ============================================================================ - -// ---------------------------------------------------------------------------- -// Log functions should be used by application instead of stdio, iostream &c -// for log messages for easy redirection -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// get error code/error message from system in a portable way -// ---------------------------------------------------------------------------- - -// return the last system error code -WXDLLIMPEXP_BASE unsigned long wxSysErrorCode(); - -// return the error message for given (or last if 0) error code -WXDLLIMPEXP_BASE const wxChar* wxSysErrorMsg(unsigned long nErrCode = 0); - -// ---------------------------------------------------------------------------- -// define wxLog<level> -// ---------------------------------------------------------------------------- - -#define DECLARE_LOG_FUNCTION(level) \ -extern void WXDLLIMPEXP_BASE wxVLog##level(const wxChar *szFormat, \ - va_list argptr); \ -extern void WXDLLIMPEXP_BASE wxLog##level(const wxChar *szFormat, \ - ...) ATTRIBUTE_PRINTF_1 -#define DECLARE_LOG_FUNCTION2_EXP(level, argclass, arg, expdecl) \ -extern void expdecl wxVLog##level(argclass arg, \ - const wxChar *szFormat, \ - va_list argptr); \ -extern void expdecl wxLog##level(argclass arg, \ - const wxChar *szFormat, \ - ...) ATTRIBUTE_PRINTF_2 -#else // !wxUSE_LOG - -// log functions do nothing at all -#define DECLARE_LOG_FUNCTION(level) \ -inline void wxVLog##level(const wxChar *WXUNUSED(szFormat), \ - va_list WXUNUSED(argptr)) { } \ -inline void wxLog##level(const wxChar *WXUNUSED(szFormat), \ - ...) { } -#define DECLARE_LOG_FUNCTION2_EXP(level, argclass, arg, expdecl) \ -inline void wxVLog##level(argclass WXUNUSED(arg), \ - const wxChar *WXUNUSED(szFormat), \ - va_list WXUNUSED(argptr)) {} \ -inline void wxLog##level(argclass WXUNUSED(arg), \ - const wxChar *WXUNUSED(szFormat), \ - ...) { } - -// Empty Class to fake wxLogNull -class WXDLLIMPEXP_BASE wxLogNull -{ -public: - wxLogNull() { } -}; - -// Dummy macros to replace some functions. -#define wxSysErrorCode() (unsigned long)0 -#define wxSysErrorMsg( X ) (const wxChar*)NULL - -// Fake symbolic trace masks... for those that are used frequently -#define wxTRACE_OleCalls wxEmptyString // OLE interface calls - -#endif // wxUSE_LOG/!wxUSE_LOG - -#define DECLARE_LOG_FUNCTION2(level, argclass, arg) \ - DECLARE_LOG_FUNCTION2_EXP(level, argclass, arg, WXDLLIMPEXP_BASE) - - -// a generic function for all levels (level is passes as parameter) -DECLARE_LOG_FUNCTION2(Generic, wxLogLevel, level); - -// one function per each level -DECLARE_LOG_FUNCTION(FatalError); -DECLARE_LOG_FUNCTION(Error); -DECLARE_LOG_FUNCTION(Warning); -DECLARE_LOG_FUNCTION(Message); -DECLARE_LOG_FUNCTION(Info); -DECLARE_LOG_FUNCTION(Verbose); - -// this function sends the log message to the status line of the top level -// application frame, if any -DECLARE_LOG_FUNCTION(Status); - -#if wxUSE_GUI - // this one is the same as previous except that it allows to explicitly - class WXDLLIMPEXP_FWD_CORE wxFrame; - // specify the frame to which the output should go - DECLARE_LOG_FUNCTION2_EXP(Status, wxFrame *, pFrame, WXDLLIMPEXP_CORE); -#endif // wxUSE_GUI - -// additional one: as wxLogError, but also logs last system call error code -// and the corresponding error message if available -DECLARE_LOG_FUNCTION(SysError); - -// and another one which also takes the error code (for those broken APIs -// that don't set the errno (like registry APIs in Win32)) -DECLARE_LOG_FUNCTION2(SysError, long, lErrCode); - -// debug functions do nothing in release mode -#if wxUSE_LOG && wxUSE_LOG_DEBUG - DECLARE_LOG_FUNCTION(Debug); - - // there is no more unconditional LogTrace: it is not different from - // LogDebug and it creates overload ambiguities - //DECLARE_LOG_FUNCTION(Trace); - - // this version only logs the message if the mask had been added to the - // list of masks with AddTraceMask() - DECLARE_LOG_FUNCTION2(Trace, const wxChar *, mask); - - // and this one does nothing if all of level bits are not set in - // wxLog::GetActive()->GetTraceMask() -- it's deprecated in favour of - // string identifiers - DECLARE_LOG_FUNCTION2(Trace, wxTraceMask, mask); -#else //!debug || !wxUSE_LOG - // these functions do nothing in release builds, but don't define them as - // nothing as it could result in different code structure in debug and - // release and this could result in trouble when these macros are used - // inside if/else - // - // note that making wxVLogDebug/Trace() themselves (empty inline) functions - // is a bad idea as some compilers are stupid enough to not inline even - // empty functions if their parameters are complicated enough, but by - // defining them as an empty inline function we ensure that even dumbest - // compilers optimise them away - inline void wxLogNop() { } - - #define wxVLogDebug(fmt, valist) wxLogNop() - #define wxVLogTrace(mask, fmt, valist) wxLogNop() - - #ifdef HAVE_VARIADIC_MACROS - // unlike the inline functions below, this completely removes the - // wxLogXXX calls from the object file: - #define wxLogDebug(fmt, ...) wxLogNop() - #define wxLogTrace(mask, fmt, ...) wxLogNop() - #else // !HAVE_VARIADIC_MACROS - // note that leaving out "fmt" in the vararg functions provokes a warning - // from SGI CC: "the last argument of the varargs function is unnamed" - inline void wxLogDebug(const wxChar *fmt, ...) { wxUnusedVar(fmt); } - inline void wxLogTrace(wxTraceMask, const wxChar *fmt, ...) { wxUnusedVar(fmt); } - inline void wxLogTrace(const wxChar *, const wxChar *fmt, ...) { wxUnusedVar(fmt); } - #endif // HAVE_VARIADIC_MACROS/!HAVE_VARIADIC_MACROS -#endif // debug/!debug - -// wxLogFatalError helper: show the (fatal) error to the user in a safe way, -// i.e. without using wxMessageBox() for example because it could crash -void WXDLLIMPEXP_BASE -wxSafeShowMessage(const wxString& title, const wxString& text); - -// ---------------------------------------------------------------------------- -// debug only logging functions: use them with API name and error code -// ---------------------------------------------------------------------------- - -#ifdef __WXDEBUG__ - // make life easier for people using VC++ IDE: clicking on the message - // will take us immediately to the place of the failed API -#ifdef __VISUALC__ - #define wxLogApiError(api, rc) \ - wxLogDebug(wxT("%s(%d): '%s' failed with error 0x%08lx (%s)."), \ - __TFILE__, __LINE__, api, \ - (long)rc, wxSysErrorMsg(rc)) -#else // !VC++ - #define wxLogApiError(api, rc) \ - wxLogDebug(wxT("In file %s at line %d: '%s' failed with ") \ - wxT("error 0x%08lx (%s)."), \ - __TFILE__, __LINE__, api, \ - (long)rc, wxSysErrorMsg(rc)) -#endif // VC++/!VC++ - - #define wxLogLastError(api) wxLogApiError(api, wxSysErrorCode()) - -#else //!debug - #define wxLogApiError(api, err) wxLogNop() - #define wxLogLastError(api) wxLogNop() -#endif //debug/!debug - -// wxCocoa has additiional trace masks -#if defined(__WXCOCOA__) -#include "wx/cocoa/log.h" -#endif - -#endif // _WX_LOG_H_ - diff --git a/desmume/src/windows/wx/include/wx/longlong.h b/desmume/src/windows/wx/include/wx/longlong.h deleted file mode 100644 index 0bead4700..000000000 --- a/desmume/src/windows/wx/include/wx/longlong.h +++ /dev/null @@ -1,1080 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/longlong.h -// Purpose: declaration of wxLongLong class - best implementation of a 64 -// bit integer for the current platform. -// Author: Jeffrey C. Ollie <jeff@ollie.clive.ia.us>, Vadim Zeitlin -// Modified by: -// Created: 10.02.99 -// RCS-ID: $Id: longlong.h 54663 2008-07-16 15:22:22Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LONGLONG_H -#define _WX_LONGLONG_H - -#include "wx/defs.h" - -#if wxUSE_LONGLONG - -#include "wx/string.h" - -#include <limits.h> // for LONG_MAX - -// define this to compile wxLongLongWx in "test" mode: the results of all -// calculations will be compared with the real results taken from -// wxLongLongNative -- this is extremely useful to find the bugs in -// wxLongLongWx class! - -// #define wxLONGLONG_TEST_MODE - -#ifdef wxLONGLONG_TEST_MODE - #define wxUSE_LONGLONG_WX 1 - #define wxUSE_LONGLONG_NATIVE 1 -#endif // wxLONGLONG_TEST_MODE - -// ---------------------------------------------------------------------------- -// decide upon which class we will use -// ---------------------------------------------------------------------------- - -#ifndef wxLongLong_t - // both warning and pragma warning are not portable, but at least an - // unknown pragma should never be an error -- except that, actually, some - // broken compilers don't like it, so we have to disable it in this case - // <sigh> - #ifdef __GNUC__ - #warning "Your compiler does not appear to support 64 bit "\ - "integers, using emulation class instead.\n" \ - "Please report your compiler version to " \ - "wx-dev@lists.wxwidgets.org!" - #elif !(defined(__WATCOMC__) || defined(__VISAGECPP__)) - #pragma warning "Your compiler does not appear to support 64 bit "\ - "integers, using emulation class instead.\n" \ - "Please report your compiler version to " \ - "wx-dev@lists.wxwidgets.org!" - #endif - - #define wxUSE_LONGLONG_WX 1 -#endif // compiler - -// the user may predefine wxUSE_LONGLONG_NATIVE and/or wxUSE_LONGLONG_NATIVE -// to disable automatic testing (useful for the test program which defines -// both classes) but by default we only use one class -#if (defined(wxUSE_LONGLONG_WX) && wxUSE_LONGLONG_WX) || !defined(wxLongLong_t) - // don't use both classes unless wxUSE_LONGLONG_NATIVE was explicitly set: - // this is useful in test programs and only there - #ifndef wxUSE_LONGLONG_NATIVE - #define wxUSE_LONGLONG_NATIVE 0 - #endif - - class WXDLLIMPEXP_BASE wxLongLongWx; - class WXDLLIMPEXP_BASE wxULongLongWx; -#if defined(__VISUALC__) && !defined(__WIN32__) - #define wxLongLong wxLongLongWx - #define wxULongLong wxULongLongWx -#else - typedef wxLongLongWx wxLongLong; - typedef wxULongLongWx wxULongLong; -#endif - -#else - // if nothing is defined, use native implementation by default, of course - #ifndef wxUSE_LONGLONG_NATIVE - #define wxUSE_LONGLONG_NATIVE 1 - #endif -#endif - -#ifndef wxUSE_LONGLONG_WX - #define wxUSE_LONGLONG_WX 0 - class WXDLLIMPEXP_FWD_BASE wxLongLongNative; - class WXDLLIMPEXP_FWD_BASE wxULongLongNative; - typedef wxLongLongNative wxLongLong; - typedef wxULongLongNative wxULongLong; -#endif - -// NB: if both wxUSE_LONGLONG_WX and NATIVE are defined, the user code should -// typedef wxLongLong as it wants, we don't do it - -// ---------------------------------------------------------------------------- -// choose the appropriate class -// ---------------------------------------------------------------------------- - -// we use iostream for wxLongLong output -#include "wx/iosfwrap.h" - -#if wxUSE_LONGLONG_NATIVE - -class WXDLLIMPEXP_BASE wxLongLongNative -{ -public: - // ctors - // default ctor initializes to 0 - wxLongLongNative() : m_ll(0) { } - // from long long - wxLongLongNative(wxLongLong_t ll) : m_ll(ll) { } - // from 2 longs - wxLongLongNative(wxInt32 hi, wxUint32 lo) - { - // cast to wxLongLong_t first to avoid precision loss! - m_ll = ((wxLongLong_t) hi) << 32; - m_ll |= (wxLongLong_t) lo; - } -#if wxUSE_LONGLONG_WX - wxLongLongNative(wxLongLongWx ll); -#endif - - // default copy ctor is ok - - // no dtor - - // assignment operators - // from native 64 bit integer -#ifndef wxLongLongIsLong - wxLongLongNative& operator=(wxLongLong_t ll) - { m_ll = ll; return *this; } - wxLongLongNative& operator=(wxULongLong_t ll) - { m_ll = ll; return *this; } -#endif // !wxLongLongNative - wxLongLongNative& operator=(const wxULongLongNative &ll); - wxLongLongNative& operator=(int l) - { m_ll = l; return *this; } - wxLongLongNative& operator=(long l) - { m_ll = l; return *this; } - wxLongLongNative& operator=(unsigned int l) - { m_ll = l; return *this; } - wxLongLongNative& operator=(unsigned long l) - { m_ll = l; return *this; } -#if wxUSE_LONGLONG_WX - wxLongLongNative& operator=(wxLongLongWx ll); - wxLongLongNative& operator=(const class wxULongLongWx &ll); -#endif - - - // from double: this one has an explicit name because otherwise we - // would have ambiguity with "ll = int" and also because we don't want - // to have implicit conversions between doubles and wxLongLongs - wxLongLongNative& Assign(double d) - { m_ll = (wxLongLong_t)d; return *this; } - - // assignment operators from wxLongLongNative is ok - - // accessors - // get high part - wxInt32 GetHi() const - { return wx_truncate_cast(wxInt32, m_ll >> 32); } - // get low part - wxUint32 GetLo() const - { return wx_truncate_cast(wxUint32, m_ll); } - - // get absolute value - wxLongLongNative Abs() const { return wxLongLongNative(*this).Abs(); } - wxLongLongNative& Abs() { if ( m_ll < 0 ) m_ll = -m_ll; return *this; } - - // convert to native long long - wxLongLong_t GetValue() const { return m_ll; } - - // convert to long with range checking in debug mode (only!) - long ToLong() const - { - wxASSERT_MSG( (m_ll >= LONG_MIN) && (m_ll <= LONG_MAX), - _T("wxLongLong to long conversion loss of precision") ); - - return wx_truncate_cast(long, m_ll); - } - - // convert to double - double ToDouble() const { return wx_truncate_cast(double, m_ll); } - - // don't provide implicit conversion to wxLongLong_t or we will have an - // ambiguity for all arithmetic operations - //operator wxLongLong_t() const { return m_ll; } - - // operations - // addition - wxLongLongNative operator+(const wxLongLongNative& ll) const - { return wxLongLongNative(m_ll + ll.m_ll); } - wxLongLongNative& operator+=(const wxLongLongNative& ll) - { m_ll += ll.m_ll; return *this; } - - wxLongLongNative operator+(const wxLongLong_t ll) const - { return wxLongLongNative(m_ll + ll); } - wxLongLongNative& operator+=(const wxLongLong_t ll) - { m_ll += ll; return *this; } - - // pre increment - wxLongLongNative& operator++() - { m_ll++; return *this; } - - // post increment - wxLongLongNative operator++(int) - { wxLongLongNative value(*this); m_ll++; return value; } - - // negation operator - wxLongLongNative operator-() const - { return wxLongLongNative(-m_ll); } - wxLongLongNative& Negate() { m_ll = -m_ll; return *this; } - - // subtraction - wxLongLongNative operator-(const wxLongLongNative& ll) const - { return wxLongLongNative(m_ll - ll.m_ll); } - wxLongLongNative& operator-=(const wxLongLongNative& ll) - { m_ll -= ll.m_ll; return *this; } - - wxLongLongNative operator-(const wxLongLong_t ll) const - { return wxLongLongNative(m_ll - ll); } - wxLongLongNative& operator-=(const wxLongLong_t ll) - { m_ll -= ll; return *this; } - - // pre decrement - wxLongLongNative& operator--() - { m_ll--; return *this; } - - // post decrement - wxLongLongNative operator--(int) - { wxLongLongNative value(*this); m_ll--; return value; } - - // shifts - // left shift - wxLongLongNative operator<<(int shift) const - { return wxLongLongNative(m_ll << shift); } - wxLongLongNative& operator<<=(int shift) - { m_ll <<= shift; return *this; } - - // right shift - wxLongLongNative operator>>(int shift) const - { return wxLongLongNative(m_ll >> shift); } - wxLongLongNative& operator>>=(int shift) - { m_ll >>= shift; return *this; } - - // bitwise operators - wxLongLongNative operator&(const wxLongLongNative& ll) const - { return wxLongLongNative(m_ll & ll.m_ll); } - wxLongLongNative& operator&=(const wxLongLongNative& ll) - { m_ll &= ll.m_ll; return *this; } - - wxLongLongNative operator|(const wxLongLongNative& ll) const - { return wxLongLongNative(m_ll | ll.m_ll); } - wxLongLongNative& operator|=(const wxLongLongNative& ll) - { m_ll |= ll.m_ll; return *this; } - - wxLongLongNative operator^(const wxLongLongNative& ll) const - { return wxLongLongNative(m_ll ^ ll.m_ll); } - wxLongLongNative& operator^=(const wxLongLongNative& ll) - { m_ll ^= ll.m_ll; return *this; } - - // multiplication/division - wxLongLongNative operator*(const wxLongLongNative& ll) const - { return wxLongLongNative(m_ll * ll.m_ll); } - wxLongLongNative operator*(long l) const - { return wxLongLongNative(m_ll * l); } - wxLongLongNative& operator*=(const wxLongLongNative& ll) - { m_ll *= ll.m_ll; return *this; } - wxLongLongNative& operator*=(long l) - { m_ll *= l; return *this; } - - wxLongLongNative operator/(const wxLongLongNative& ll) const - { return wxLongLongNative(m_ll / ll.m_ll); } - wxLongLongNative operator/(long l) const - { return wxLongLongNative(m_ll / l); } - wxLongLongNative& operator/=(const wxLongLongNative& ll) - { m_ll /= ll.m_ll; return *this; } - wxLongLongNative& operator/=(long l) - { m_ll /= l; return *this; } - - wxLongLongNative operator%(const wxLongLongNative& ll) const - { return wxLongLongNative(m_ll % ll.m_ll); } - wxLongLongNative operator%(long l) const - { return wxLongLongNative(m_ll % l); } - - // comparison - bool operator==(const wxLongLongNative& ll) const - { return m_ll == ll.m_ll; } - bool operator==(long l) const - { return m_ll == l; } - bool operator!=(const wxLongLongNative& ll) const - { return m_ll != ll.m_ll; } - bool operator!=(long l) const - { return m_ll != l; } - bool operator<(const wxLongLongNative& ll) const - { return m_ll < ll.m_ll; } - bool operator<(long l) const - { return m_ll < l; } - bool operator>(const wxLongLongNative& ll) const - { return m_ll > ll.m_ll; } - bool operator>(long l) const - { return m_ll > l; } - bool operator<=(const wxLongLongNative& ll) const - { return m_ll <= ll.m_ll; } - bool operator<=(long l) const - { return m_ll <= l; } - bool operator>=(const wxLongLongNative& ll) const - { return m_ll >= ll.m_ll; } - bool operator>=(long l) const - { return m_ll >= l; } - - // miscellaneous - - // return the string representation of this number - wxString ToString() const; - - // conversion to byte array: returns a pointer to static buffer! - void *asArray() const; - -#if wxUSE_STD_IOSTREAM - // input/output - friend WXDLLIMPEXP_BASE - wxSTD ostream& operator<<(wxSTD ostream&, const wxLongLongNative&); -#endif - - friend WXDLLIMPEXP_BASE - wxString& operator<<(wxString&, const wxLongLongNative&); - -#if wxUSE_STREAMS - friend WXDLLIMPEXP_BASE - class wxTextOutputStream& operator<<(class wxTextOutputStream&, const wxLongLongNative&); - friend WXDLLIMPEXP_BASE - class wxTextInputStream& operator>>(class wxTextInputStream&, wxLongLongNative&); -#endif - -private: - wxLongLong_t m_ll; -}; - - -class WXDLLIMPEXP_BASE wxULongLongNative -{ -public: - // ctors - // default ctor initializes to 0 - wxULongLongNative() : m_ll(0) { } - // from long long - wxULongLongNative(wxULongLong_t ll) : m_ll(ll) { } - // from 2 longs - wxULongLongNative(wxUint32 hi, wxUint32 lo) : m_ll(0) - { - // cast to wxLongLong_t first to avoid precision loss! - m_ll = ((wxULongLong_t) hi) << 32; - m_ll |= (wxULongLong_t) lo; - } - -#if wxUSE_LONGLONG_WX - wxULongLongNative(const class wxULongLongWx &ll); -#endif - - // default copy ctor is ok - - // no dtor - - // assignment operators - // from native 64 bit integer -#ifndef wxLongLongIsLong - wxULongLongNative& operator=(wxULongLong_t ll) - { m_ll = ll; return *this; } - wxULongLongNative& operator=(wxLongLong_t ll) - { m_ll = ll; return *this; } -#endif // !wxLongLongNative - wxULongLongNative& operator=(int l) - { m_ll = l; return *this; } - wxULongLongNative& operator=(long l) - { m_ll = l; return *this; } - wxULongLongNative& operator=(unsigned int l) - { m_ll = l; return *this; } - wxULongLongNative& operator=(unsigned long l) - { m_ll = l; return *this; } - wxULongLongNative& operator=(const wxLongLongNative &ll) - { m_ll = ll.GetValue(); return *this; } -#if wxUSE_LONGLONG_WX - wxULongLongNative& operator=(wxLongLongWx ll); - wxULongLongNative& operator=(const class wxULongLongWx &ll); -#endif - - // assignment operators from wxULongLongNative is ok - - // accessors - // get high part - wxUint32 GetHi() const - { return wx_truncate_cast(wxUint32, m_ll >> 32); } - // get low part - wxUint32 GetLo() const - { return wx_truncate_cast(wxUint32, m_ll); } - - // convert to native ulong long - wxULongLong_t GetValue() const { return m_ll; } - - // convert to ulong with range checking in debug mode (only!) - unsigned long ToULong() const - { - wxASSERT_MSG( m_ll <= LONG_MAX, - _T("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); } -#else - double ToDouble() const { return wx_truncate_cast(double, m_ll); } -#endif - - // operations - // addition - wxULongLongNative operator+(const wxULongLongNative& ll) const - { return wxULongLongNative(m_ll + ll.m_ll); } - wxULongLongNative& operator+=(const wxULongLongNative& ll) - { m_ll += ll.m_ll; return *this; } - - wxULongLongNative operator+(const wxULongLong_t ll) const - { return wxULongLongNative(m_ll + ll); } - wxULongLongNative& operator+=(const wxULongLong_t ll) - { m_ll += ll; return *this; } - - // pre increment - wxULongLongNative& operator++() - { m_ll++; return *this; } - - // post increment - wxULongLongNative operator++(int) - { wxULongLongNative value(*this); m_ll++; return value; } - - // subtraction - wxULongLongNative operator-(const wxULongLongNative& ll) const - { return wxULongLongNative(m_ll - ll.m_ll); } - wxULongLongNative& operator-=(const wxULongLongNative& ll) - { m_ll -= ll.m_ll; return *this; } - - wxULongLongNative operator-(const wxULongLong_t ll) const - { return wxULongLongNative(m_ll - ll); } - wxULongLongNative& operator-=(const wxULongLong_t ll) - { m_ll -= ll; return *this; } - - // pre decrement - wxULongLongNative& operator--() - { m_ll--; return *this; } - - // post decrement - wxULongLongNative operator--(int) - { wxULongLongNative value(*this); m_ll--; return value; } - - // shifts - // left shift - wxULongLongNative operator<<(int shift) const - { return wxULongLongNative(m_ll << shift); } - wxULongLongNative& operator<<=(int shift) - { m_ll <<= shift; return *this; } - - // right shift - wxULongLongNative operator>>(int shift) const - { return wxULongLongNative(m_ll >> shift); } - wxULongLongNative& operator>>=(int shift) - { m_ll >>= shift; return *this; } - - // bitwise operators - wxULongLongNative operator&(const wxULongLongNative& ll) const - { return wxULongLongNative(m_ll & ll.m_ll); } - wxULongLongNative& operator&=(const wxULongLongNative& ll) - { m_ll &= ll.m_ll; return *this; } - - wxULongLongNative operator|(const wxULongLongNative& ll) const - { return wxULongLongNative(m_ll | ll.m_ll); } - wxULongLongNative& operator|=(const wxULongLongNative& ll) - { m_ll |= ll.m_ll; return *this; } - - wxULongLongNative operator^(const wxULongLongNative& ll) const - { return wxULongLongNative(m_ll ^ ll.m_ll); } - wxULongLongNative& operator^=(const wxULongLongNative& ll) - { m_ll ^= ll.m_ll; return *this; } - - // multiplication/division - wxULongLongNative operator*(const wxULongLongNative& ll) const - { return wxULongLongNative(m_ll * ll.m_ll); } - wxULongLongNative operator*(unsigned long l) const - { return wxULongLongNative(m_ll * l); } - wxULongLongNative& operator*=(const wxULongLongNative& ll) - { m_ll *= ll.m_ll; return *this; } - wxULongLongNative& operator*=(unsigned long l) - { m_ll *= l; return *this; } - - wxULongLongNative operator/(const wxULongLongNative& ll) const - { return wxULongLongNative(m_ll / ll.m_ll); } - wxULongLongNative operator/(unsigned long l) const - { return wxULongLongNative(m_ll / l); } - wxULongLongNative& operator/=(const wxULongLongNative& ll) - { m_ll /= ll.m_ll; return *this; } - wxULongLongNative& operator/=(unsigned long l) - { m_ll /= l; return *this; } - - wxULongLongNative operator%(const wxULongLongNative& ll) const - { return wxULongLongNative(m_ll % ll.m_ll); } - wxULongLongNative operator%(unsigned long l) const - { return wxULongLongNative(m_ll % l); } - - // comparison - bool operator==(const wxULongLongNative& ll) const - { return m_ll == ll.m_ll; } - bool operator==(unsigned long l) const - { return m_ll == l; } - bool operator!=(const wxULongLongNative& ll) const - { return m_ll != ll.m_ll; } - bool operator!=(unsigned long l) const - { return m_ll != l; } - bool operator<(const wxULongLongNative& ll) const - { return m_ll < ll.m_ll; } - bool operator<(unsigned long l) const - { return m_ll < l; } - bool operator>(const wxULongLongNative& ll) const - { return m_ll > ll.m_ll; } - bool operator>(unsigned long l) const - { return m_ll > l; } - bool operator<=(const wxULongLongNative& ll) const - { return m_ll <= ll.m_ll; } - bool operator<=(unsigned long l) const - { return m_ll <= l; } - bool operator>=(const wxULongLongNative& ll) const - { return m_ll >= ll.m_ll; } - bool operator>=(unsigned long l) const - { return m_ll >= l; } - - // miscellaneous - - // return the string representation of this number - wxString ToString() const; - - // conversion to byte array: returns a pointer to static buffer! - void *asArray() const; - -#if wxUSE_STD_IOSTREAM - // input/output - friend WXDLLIMPEXP_BASE - wxSTD ostream& operator<<(wxSTD ostream&, const wxULongLongNative&); -#endif - - friend WXDLLIMPEXP_BASE - wxString& operator<<(wxString&, const wxULongLongNative&); - -#if wxUSE_STREAMS - friend WXDLLIMPEXP_BASE - class wxTextOutputStream& operator<<(class wxTextOutputStream&, const wxULongLongNative&); - friend WXDLLIMPEXP_BASE - class wxTextInputStream& operator>>(class wxTextInputStream&, wxULongLongNative&); -#endif - -private: - wxULongLong_t m_ll; -}; - -inline -wxLongLongNative& wxLongLongNative::operator=(const wxULongLongNative &ll) -{ - m_ll = ll.GetValue(); - return *this; -} - -#endif // wxUSE_LONGLONG_NATIVE - -#if wxUSE_LONGLONG_WX - -class WXDLLIMPEXP_BASE wxLongLongWx -{ -public: - // ctors - // default ctor initializes to 0 - wxLongLongWx() - { - m_lo = m_hi = 0; - -#ifdef wxLONGLONG_TEST_MODE - m_ll = 0; - - Check(); -#endif // wxLONGLONG_TEST_MODE - } - // from long - wxLongLongWx(long l) { *this = l; } - // from 2 longs - wxLongLongWx(long hi, unsigned long lo) - { - m_hi = hi; - m_lo = lo; - -#ifdef wxLONGLONG_TEST_MODE - m_ll = hi; - m_ll <<= 32; - m_ll |= lo; - - Check(); -#endif // wxLONGLONG_TEST_MODE - } - - // default copy ctor is ok in both cases - - // no dtor - - // assignment operators - // from long - wxLongLongWx& operator=(long l) - { - m_lo = l; - m_hi = (l < 0 ? -1l : 0l); - -#ifdef wxLONGLONG_TEST_MODE - m_ll = l; - - Check(); -#endif // wxLONGLONG_TEST_MODE - - return *this; - } - // from int - wxLongLongWx& operator=(int l) - { - return operator=((long)l); - } - - wxLongLongWx& operator=(unsigned long l) - { - m_lo = l; - m_hi = 0; - -#ifdef wxLONGLONG_TEST_MODE - m_ll = l; - - Check(); -#endif // wxLONGLONG_TEST_MODE - - return *this; - } - - wxLongLongWx& operator=(unsigned int l) - { - return operator=((unsigned long)l); - } - - wxLongLongWx& operator=(const class wxULongLongWx &ll); - - // from double - wxLongLongWx& Assign(double d); - // can't have assignment operator from 2 longs - - // accessors - // get high part - long GetHi() const { return m_hi; } - // get low part - unsigned long GetLo() const { return m_lo; } - - // get absolute value - wxLongLongWx Abs() const { return wxLongLongWx(*this).Abs(); } - wxLongLongWx& Abs() - { - if ( m_hi < 0 ) - m_hi = -m_hi; - -#ifdef wxLONGLONG_TEST_MODE - if ( m_ll < 0 ) - m_ll = -m_ll; - - Check(); -#endif // wxLONGLONG_TEST_MODE - - return *this; - } - - // convert to long with range checking in debug mode (only!) - long ToLong() const - { - wxASSERT_MSG( (m_hi == 0l) || (m_hi == -1l), - _T("wxLongLong to long conversion loss of precision") ); - - return (long)m_lo; - } - - // convert to double - double ToDouble() const; - - // operations - // addition - wxLongLongWx operator+(const wxLongLongWx& ll) const; - wxLongLongWx& operator+=(const wxLongLongWx& ll); - wxLongLongWx operator+(long l) const; - wxLongLongWx& operator+=(long l); - - // pre increment operator - wxLongLongWx& operator++(); - - // post increment operator - wxLongLongWx& operator++(int) { return ++(*this); } - - // negation operator - wxLongLongWx operator-() const; - wxLongLongWx& Negate(); - - // subraction - wxLongLongWx operator-(const wxLongLongWx& ll) const; - wxLongLongWx& operator-=(const wxLongLongWx& ll); - - // pre decrement operator - wxLongLongWx& operator--(); - - // post decrement operator - wxLongLongWx& operator--(int) { return --(*this); } - - // shifts - // left shift - wxLongLongWx operator<<(int shift) const; - wxLongLongWx& operator<<=(int shift); - - // right shift - wxLongLongWx operator>>(int shift) const; - wxLongLongWx& operator>>=(int shift); - - // bitwise operators - wxLongLongWx operator&(const wxLongLongWx& ll) const; - wxLongLongWx& operator&=(const wxLongLongWx& ll); - wxLongLongWx operator|(const wxLongLongWx& ll) const; - wxLongLongWx& operator|=(const wxLongLongWx& ll); - wxLongLongWx operator^(const wxLongLongWx& ll) const; - wxLongLongWx& operator^=(const wxLongLongWx& ll); - wxLongLongWx operator~() const; - - // comparison - bool operator==(const wxLongLongWx& ll) const - { return m_lo == ll.m_lo && m_hi == ll.m_hi; } -#if wxUSE_LONGLONG_NATIVE - bool operator==(const wxLongLongNative& ll) const - { return m_lo == ll.GetLo() && m_hi == ll.GetHi(); } -#endif - bool operator!=(const wxLongLongWx& ll) const - { return !(*this == ll); } - bool operator<(const wxLongLongWx& ll) const; - bool operator>(const wxLongLongWx& ll) const; - bool operator<=(const wxLongLongWx& ll) const - { return *this < ll || *this == ll; } - bool operator>=(const wxLongLongWx& ll) const - { return *this > ll || *this == ll; } - - bool operator<(long l) const { return *this < wxLongLongWx(l); } - bool operator>(long l) const { return *this > wxLongLongWx(l); } - bool operator==(long l) const - { - return l >= 0 ? (m_hi == 0 && m_lo == (unsigned long)l) - : (m_hi == -1 && m_lo == (unsigned long)l); - } - - bool operator<=(long l) const { return *this < l || *this == l; } - bool operator>=(long l) const { return *this > l || *this == l; } - - // multiplication - wxLongLongWx operator*(const wxLongLongWx& ll) const; - wxLongLongWx& operator*=(const wxLongLongWx& ll); - - // division - wxLongLongWx operator/(const wxLongLongWx& ll) const; - wxLongLongWx& operator/=(const wxLongLongWx& ll); - - wxLongLongWx operator%(const wxLongLongWx& ll) const; - - void Divide(const wxLongLongWx& divisor, - wxLongLongWx& quotient, - wxLongLongWx& remainder) const; - - // input/output - - // return the string representation of this number - wxString ToString() const; - - void *asArray() const; - -#if wxUSE_STD_IOSTREAM - friend WXDLLIMPEXP_BASE - wxSTD ostream& operator<<(wxSTD ostream&, const wxLongLongWx&); -#endif // wxUSE_STD_IOSTREAM - - friend WXDLLIMPEXP_BASE - wxString& operator<<(wxString&, const wxLongLongWx&); - -#if wxUSE_STREAMS - friend WXDLLIMPEXP_BASE - class wxTextOutputStream& operator<<(class wxTextOutputStream&, const wxLongLongWx&); - friend WXDLLIMPEXP_BASE - class wxTextInputStream& operator>>(class wxTextInputStream&, wxLongLongWx&); -#endif - -private: - // long is at least 32 bits, so represent our 64bit number as 2 longs - - long m_hi; // signed bit is in the high part - unsigned long m_lo; - -#ifdef wxLONGLONG_TEST_MODE - void Check() - { - wxASSERT( (m_ll >> 32) == m_hi && (unsigned long)m_ll == m_lo ); - } - - wxLongLong_t m_ll; -#endif // wxLONGLONG_TEST_MODE -}; - - -class WXDLLIMPEXP_BASE wxULongLongWx -{ -public: - // ctors - // default ctor initializes to 0 - wxULongLongWx() - { - m_lo = m_hi = 0; - -#ifdef wxLONGLONG_TEST_MODE - m_ll = 0; - - Check(); -#endif // wxLONGLONG_TEST_MODE - } - // from ulong - wxULongLongWx(unsigned long l) { *this = l; } - // from 2 ulongs - wxULongLongWx(unsigned long hi, unsigned long lo) - { - m_hi = hi; - m_lo = lo; - -#ifdef wxLONGLONG_TEST_MODE - m_ll = hi; - m_ll <<= 32; - m_ll |= lo; - - Check(); -#endif // wxLONGLONG_TEST_MODE - } - - // from signed to unsigned - wxULongLongWx(wxLongLongWx ll) - { - wxASSERT(ll.GetHi() >= 0); - m_hi = (unsigned long)ll.GetHi(); - m_lo = ll.GetLo(); - } - - // default copy ctor is ok in both cases - - // no dtor - - // assignment operators - // from long - wxULongLongWx& operator=(unsigned long l) - { - m_lo = l; - m_hi = 0; - -#ifdef wxLONGLONG_TEST_MODE - m_ll = l; - - Check(); -#endif // wxLONGLONG_TEST_MODE - - return *this; - } - wxULongLongWx& operator=(long l) - { - m_lo = l; - m_hi = (unsigned long) ((l<0) ? -1l : 0); - -#ifdef wxLONGLONG_TEST_MODE - m_ll = (wxULongLong_t) (wxLongLong_t) l; - - Check(); -#endif // wxLONGLONG_TEST_MODE - - return *this; - } - wxULongLongWx& operator=(const class wxLongLongWx &ll) { - // Should we use an assert like it was before in the constructor? - // wxASSERT(ll.GetHi() >= 0); - m_hi = (unsigned long)ll.GetHi(); - m_lo = ll.GetLo(); - return *this; - } - - // can't have assignment operator from 2 longs - - // accessors - // get high part - unsigned long GetHi() const { return m_hi; } - // get low part - unsigned long GetLo() const { return m_lo; } - - // convert to long with range checking in debug mode (only!) - unsigned long ToULong() const - { - wxASSERT_MSG( m_hi == 0ul, - _T("wxULongLong to long conversion loss of precision") ); - - return (unsigned long)m_lo; - } - - // convert to double - double ToDouble() const; - - // operations - // addition - wxULongLongWx operator+(const wxULongLongWx& ll) const; - wxULongLongWx& operator+=(const wxULongLongWx& ll); - wxULongLongWx operator+(unsigned long l) const; - wxULongLongWx& operator+=(unsigned long l); - - // pre increment operator - wxULongLongWx& operator++(); - - // post increment operator - wxULongLongWx& operator++(int) { return ++(*this); } - - // subtraction - wxLongLongWx operator-(const wxULongLongWx& ll) const; - wxULongLongWx& operator-=(const wxULongLongWx& ll); - - // pre decrement operator - wxULongLongWx& operator--(); - - // post decrement operator - wxULongLongWx& operator--(int) { return --(*this); } - - // shifts - // left shift - wxULongLongWx operator<<(int shift) const; - wxULongLongWx& operator<<=(int shift); - - // right shift - wxULongLongWx operator>>(int shift) const; - wxULongLongWx& operator>>=(int shift); - - // bitwise operators - wxULongLongWx operator&(const wxULongLongWx& ll) const; - wxULongLongWx& operator&=(const wxULongLongWx& ll); - wxULongLongWx operator|(const wxULongLongWx& ll) const; - wxULongLongWx& operator|=(const wxULongLongWx& ll); - wxULongLongWx operator^(const wxULongLongWx& ll) const; - wxULongLongWx& operator^=(const wxULongLongWx& ll); - wxULongLongWx operator~() const; - - // comparison - bool operator==(const wxULongLongWx& ll) const - { return m_lo == ll.m_lo && m_hi == ll.m_hi; } - bool operator!=(const wxULongLongWx& ll) const - { return !(*this == ll); } - bool operator<(const wxULongLongWx& ll) const; - bool operator>(const wxULongLongWx& ll) const; - bool operator<=(const wxULongLongWx& ll) const - { return *this < ll || *this == ll; } - bool operator>=(const wxULongLongWx& ll) const - { return *this > ll || *this == ll; } - - bool operator<(unsigned long l) const { return *this < wxULongLongWx(l); } - bool operator>(unsigned long l) const { return *this > wxULongLongWx(l); } - bool operator==(unsigned long l) const - { - return (m_hi == 0 && m_lo == (unsigned long)l); - } - - bool operator<=(unsigned long l) const { return *this < l || *this == l; } - bool operator>=(unsigned long l) const { return *this > l || *this == l; } - - // multiplication - wxULongLongWx operator*(const wxULongLongWx& ll) const; - wxULongLongWx& operator*=(const wxULongLongWx& ll); - - // division - wxULongLongWx operator/(const wxULongLongWx& ll) const; - wxULongLongWx& operator/=(const wxULongLongWx& ll); - - wxULongLongWx operator%(const wxULongLongWx& ll) const; - - void Divide(const wxULongLongWx& divisor, - wxULongLongWx& quotient, - wxULongLongWx& remainder) const; - - // input/output - - // return the string representation of this number - wxString ToString() const; - - void *asArray() const; - -#if wxUSE_STD_IOSTREAM - friend WXDLLIMPEXP_BASE - wxSTD ostream& operator<<(wxSTD ostream&, const wxULongLongWx&); -#endif // wxUSE_STD_IOSTREAM - - friend WXDLLIMPEXP_BASE - wxString& operator<<(wxString&, const wxULongLongWx&); - -#if wxUSE_STREAMS - friend WXDLLIMPEXP_BASE - class wxTextOutputStream& operator<<(class wxTextOutputStream&, const wxULongLongWx&); - friend WXDLLIMPEXP_BASE - class wxTextInputStream& operator>>(class wxTextInputStream&, wxULongLongWx&); -#endif - -private: - // long is at least 32 bits, so represent our 64bit number as 2 longs - - unsigned long m_hi; - unsigned long m_lo; - -#ifdef wxLONGLONG_TEST_MODE - void Check() - { - wxASSERT( (m_ll >> 32) == m_hi && (unsigned long)m_ll == m_lo ); - } - - wxULongLong_t m_ll; -#endif // wxLONGLONG_TEST_MODE -}; - -#endif // wxUSE_LONGLONG_WX - -// ---------------------------------------------------------------------------- -// binary operators -// ---------------------------------------------------------------------------- - -inline bool operator<(long l, const wxLongLong& ll) { return ll > l; } -inline bool operator>(long l, const wxLongLong& ll) { return ll < l; } -inline bool operator<=(long l, const wxLongLong& ll) { return ll >= l; } -inline bool operator>=(long l, const wxLongLong& ll) { return ll <= l; } -inline bool operator==(long l, const wxLongLong& ll) { return ll == l; } -inline bool operator!=(long l, const wxLongLong& ll) { return ll != l; } - -inline wxLongLong operator+(long l, const wxLongLong& ll) { return ll + l; } -inline wxLongLong operator-(long l, const wxLongLong& ll) -{ - return wxLongLong(l) - ll; -} - -inline bool operator<(unsigned long l, const wxULongLong& ull) { return ull > l; } -inline bool operator>(unsigned long l, const wxULongLong& ull) { return ull < l; } -inline bool operator<=(unsigned long l, const wxULongLong& ull) { return ull >= l; } -inline bool operator>=(unsigned long l, const wxULongLong& ull) { return ull <= l; } -inline bool operator==(unsigned long l, const wxULongLong& ull) { return ull == l; } -inline bool operator!=(unsigned long l, const wxULongLong& ull) { return ull != l; } - -inline wxULongLong operator+(unsigned long l, const wxULongLong& ull) { return ull + l; } - -inline wxLongLong operator-(unsigned long l, const wxULongLong& ull) -{ - wxULongLong ret = wxULongLong(l) - ull; - return wxLongLong((long)ret.GetHi(),ret.GetLo()); -} - -#if wxUSE_LONGLONG_NATIVE && wxUSE_STREAMS - -WXDLLIMPEXP_BASE class wxTextOutputStream &operator<<(class wxTextOutputStream &stream, wxULongLong_t value); -WXDLLIMPEXP_BASE class wxTextOutputStream &operator<<(class wxTextOutputStream &stream, wxLongLong_t value); - -WXDLLIMPEXP_BASE class wxTextInputStream &operator>>(class wxTextInputStream &stream, wxULongLong_t &value); -WXDLLIMPEXP_BASE class wxTextInputStream &operator>>(class wxTextInputStream &stream, wxLongLong_t &value); - -#endif - -#endif // wxUSE_LONGLONG - -#endif // _WX_LONGLONG_H diff --git a/desmume/src/windows/wx/include/wx/math.h b/desmume/src/windows/wx/include/wx/math.h deleted file mode 100644 index 589715c87..000000000 --- a/desmume/src/windows/wx/include/wx/math.h +++ /dev/null @@ -1,140 +0,0 @@ -/** -* Name: wx/math.h -* Purpose: Declarations/definitions of common math functions -* Author: John Labenski and others -* Modified by: -* Created: 02/02/03 -* RCS-ID: $Id: math.h 44690 2007-03-08 04:31:24Z PC $ -* Copyright: (c) John Labenski -* Licence: wxWindows licence -*/ - -/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ - -#ifndef _WX_MATH_H_ -#define _WX_MATH_H_ - -#include "wx/defs.h" - -#include <math.h> - -#ifndef M_PI - #define M_PI 3.1415926535897932384626433832795 -#endif - -/* Scaling factors for various unit conversions */ -#ifndef METRIC_CONVERSION_CONSTANT - #define METRIC_CONVERSION_CONSTANT 0.0393700787 -#endif - -#ifndef mm2inches - #define mm2inches (METRIC_CONVERSION_CONSTANT) -#endif - -#ifndef inches2mm - #define inches2mm (1/(mm2inches)) -#endif - -#ifndef mm2twips - #define mm2twips (METRIC_CONVERSION_CONSTANT*1440) -#endif - -#ifndef twips2mm - #define twips2mm (1/(mm2twips)) -#endif - -#ifndef mm2pt - #define mm2pt (METRIC_CONVERSION_CONSTANT*72) -#endif - -#ifndef pt2mm - #define pt2mm (1/(mm2pt)) -#endif - - -/* unknown __VISAGECC__, __SYMANTECCC__ */ - -#if defined(__VISUALC__) || defined(__BORLANDC__) || defined(__WATCOMC__) - #include <float.h> - #define wxFinite(x) _finite(x) -#elif defined(__GNUG__)||defined(__GNUWIN32__)||defined(__DJGPP__)|| \ - defined(__SGI_CC__)||defined(__SUNCC__)||defined(__XLC__)|| \ - defined(__HPUX__)||defined(__MWERKS__) - #define wxFinite(x) finite(x) -#else - #define wxFinite(x) ((x) == (x)) -#endif - - -#if defined(__VISUALC__)||defined(__BORLAND__) - #define wxIsNaN(x) _isnan(x) -#elif defined(__GNUG__)||defined(__GNUWIN32__)||defined(__DJGPP__)|| \ - defined(__SGI_CC__)||defined(__SUNCC__)||defined(__XLC__)|| \ - defined(__HPUX__)||defined(__MWERKS__) - #define wxIsNaN(x) isnan(x) -#else - #define wxIsNaN(x) ((x) != (x)) -#endif - -#ifdef __cplusplus - - #ifdef __INTELC__ - - inline bool wxIsSameDouble(double x, double y) - { - // VZ: this warning, given for operators==() and !=() is not wrong, as == - // shouldn't be used with doubles, but we get too many of them and - // removing these operators is probably not a good idea - // - // Maybe we should alway compare doubles up to some "epsilon" precision - #pragma warning(push) - - // floating-point equality and inequality comparisons are unreliable - #pragma warning(disable: 1572) - - return x == y; - - #pragma warning(pop) - } - - #else /* !__INTELC__ */ - - inline bool wxIsSameDouble(double x, double y) { return x == y; } - - #endif /* __INTELC__/!__INTELC__ */ - - inline bool wxIsNullDouble(double x) { return wxIsSameDouble(x, 0.); } - - inline int wxRound(double x) - { - #if defined(HAVE_ROUND) - return int(round(x)); - #else - return (int)(x < 0 ? x - 0.5 : x + 0.5); - #endif - } -#endif /* __cplusplus */ - - -#if defined(__WXMSW__) && !defined(__WXWINCE__) - #define wxMulDivInt32( a , b , c ) ::MulDiv( a , b , c ) -#elif defined( __WXMAC__ ) - #define wxMulDivInt32( a , b , c ) ( (wxInt32) ( ( (wxInt64)(a) * (wxInt64)(b) ) / (wxInt64)(c) ) ) -#else - #define wxMulDivInt32( a , b , c ) ((wxInt32)((a)*(((wxDouble)b)/((wxDouble)c)))) -#endif - -#if wxUSE_APPLE_IEEE -#ifdef __cplusplus - extern "C" { -#endif - /* functions from common/extended.c */ - extern wxFloat64 ConvertFromIeeeExtended(const wxInt8 *bytes); - extern void ConvertToIeeeExtended(wxFloat64 num, wxInt8 *bytes); -#ifdef __cplusplus - } -#endif -#endif /* wxUSE_APPLE_IEEE */ - - -#endif /* _WX_MATH_H_ */ diff --git a/desmume/src/windows/wx/include/wx/matrix.h b/desmume/src/windows/wx/include/wx/matrix.h deleted file mode 100644 index 67812cd2e..000000000 --- a/desmume/src/windows/wx/include/wx/matrix.h +++ /dev/null @@ -1,235 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/matrix.h -// Purpose: wxTransformMatrix class. NOT YET USED -// Author: Chris Breeze, Julian Smart -// Modified by: Klaas Holwerda -// Created: 01/02/97 -// RCS-ID: $Id: matrix.h 45498 2007-04-16 13:03:05Z VZ $ -// Copyright: (c) Julian Smart, Chris Breeze -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MATRIXH__ -#define _WX_MATRIXH__ - -//! headerfiles="matrix.h wx/object.h" -#include "wx/object.h" -#include "wx/math.h" - -//! codefiles="matrix.cpp" - -// A simple 3x3 matrix. This may be replaced by a more general matrix -// class some day. -// -// Note: this is intended to be used in wxDC at some point to replace -// the current system of scaling/translation. It is not yet used. - -//:definition -// A 3x3 matrix to do 2D transformations. -// It can be used to map data to window coordinates, -// and also for manipulating your own data. -// For example drawing a picture (composed of several primitives) -// at a certain coordinate and angle within another parent picture. -// At all times m_isIdentity is set if the matrix itself is an Identity matrix. -// It is used where possible to optimize calculations. -class WXDLLEXPORT wxTransformMatrix: public wxObject -{ -public: - wxTransformMatrix(void); - wxTransformMatrix(const wxTransformMatrix& mat); - - //get the value in the matrix at col,row - //rows are horizontal (second index of m_matrix member) - //columns are vertical (first index of m_matrix member) - double GetValue(int col, int row) const; - - //set the value in the matrix at col,row - //rows are horizontal (second index of m_matrix member) - //columns are vertical (first index of m_matrix member) - void SetValue(int col, int row, double value); - - void operator = (const wxTransformMatrix& mat); - bool operator == (const wxTransformMatrix& mat) const; - bool operator != (const wxTransformMatrix& mat) const; - - //multiply every element by t - wxTransformMatrix& operator*=(const double& t); - //divide every element by t - wxTransformMatrix& operator/=(const double& t); - //add matrix m to this t - wxTransformMatrix& operator+=(const wxTransformMatrix& m); - //subtract matrix m from this - wxTransformMatrix& operator-=(const wxTransformMatrix& m); - //multiply matrix m with this - wxTransformMatrix& operator*=(const wxTransformMatrix& m); - - // constant operators - - //multiply every element by t and return result - wxTransformMatrix operator*(const double& t) const; - //divide this matrix by t and return result - wxTransformMatrix operator/(const double& t) const; - //add matrix m to this and return result - wxTransformMatrix operator+(const wxTransformMatrix& m) const; - //subtract matrix m from this and return result - wxTransformMatrix operator-(const wxTransformMatrix& m) const; - //multiply this by matrix m and return result - wxTransformMatrix operator*(const wxTransformMatrix& m) const; - wxTransformMatrix operator-() const; - - //rows are horizontal (second index of m_matrix member) - //columns are vertical (first index of m_matrix member) - double& operator()(int col, int row); - - //rows are horizontal (second index of m_matrix member) - //columns are vertical (first index of m_matrix member) - double operator()(int col, int row) const; - - // Invert matrix - bool Invert(void); - - // Make into identity matrix - bool Identity(void); - - // Is the matrix the identity matrix? - // Only returns a flag, which is set whenever an operation - // is done. - inline bool IsIdentity(void) const { return m_isIdentity; } - - // This does an actual check. - inline bool IsIdentity1(void) const ; - - //Scale by scale (isotropic scaling i.e. the same in x and y): - //!ex: - //!code: | scale 0 0 | - //!code: matrix' = | 0 scale 0 | x matrix - //!code: | 0 0 scale | - bool Scale(double scale); - - //Scale with center point and x/y scale - // - //!ex: - //!code: | xs 0 xc(1-xs) | - //!code: matrix' = | 0 ys yc(1-ys) | x matrix - //!code: | 0 0 1 | - wxTransformMatrix& Scale(const double &xs, const double &ys,const double &xc, const double &yc); - - // mirror a matrix in x, y - //!ex: - //!code: | -1 0 0 | - //!code: matrix' = | 0 -1 0 | x matrix - //!code: | 0 0 1 | - wxTransformMatrix& Mirror(bool x=true, bool y=false); - // Translate by dx, dy: - //!ex: - //!code: | 1 0 dx | - //!code: matrix' = | 0 1 dy | x matrix - //!code: | 0 0 1 | - bool Translate(double x, double y); - - // Rotate clockwise by the given number of degrees: - //!ex: - //!code: | cos sin 0 | - //!code: matrix' = | -sin cos 0 | x matrix - //!code: | 0 0 1 | - bool Rotate(double angle); - - //Rotate counter clockwise with point of rotation - // - //!ex: - //!code: | cos(r) -sin(r) x(1-cos(r))+y(sin(r)| - //!code: matrix' = | sin(r) cos(r) y(1-cos(r))-x(sin(r)| x matrix - //!code: | 0 0 1 | - wxTransformMatrix& Rotate(const double &r, const double &x, const double &y); - - // Transform X value from logical to device - inline double TransformX(double x) const; - - // Transform Y value from logical to device - inline double TransformY(double y) const; - - // Transform a point from logical to device coordinates - bool TransformPoint(double x, double y, double& tx, double& ty) const; - - // Transform a point from device to logical coordinates. - // Example of use: - // wxTransformMatrix mat = dc.GetTransformation(); - // mat.Invert(); - // mat.InverseTransformPoint(x, y, x1, y1); - // OR (shorthand:) - // dc.LogicalToDevice(x, y, x1, y1); - // The latter is slightly less efficient if we're doing several - // conversions, since the matrix is inverted several times. - // N.B. 'this' matrix is the inverse at this point - bool InverseTransformPoint(double x, double y, double& tx, double& ty) const; - - double Get_scaleX(); - double Get_scaleY(); - double GetRotation(); - void SetRotation(double rotation); - - -public: - double m_matrix[3][3]; - bool m_isIdentity; -}; - - -/* -Chris Breeze reported, that -some functions of wxTransformMatrix cannot work because it is not -known if he matrix has been inverted. Be careful when using it. -*/ - -// Transform X value from logical to device -// warning: this function can only be used for this purpose -// because no rotation is involved when mapping logical to device coordinates -// mirror and scaling for x and y will be part of the matrix -// if you have a matrix that is rotated, eg a shape containing a matrix to place -// it in the logical coordinate system, use TransformPoint -inline double wxTransformMatrix::TransformX(double x) const -{ - //normally like this, but since no rotation is involved (only mirror and scale) - //we can do without Y -> m_matrix[1]{0] is -sin(rotation angle) and therefore zero - //(x * m_matrix[0][0] + y * m_matrix[1][0] + m_matrix[2][0])) - return (m_isIdentity ? x : (x * m_matrix[0][0] + m_matrix[2][0])); -} - -// Transform Y value from logical to device -// warning: this function can only be used for this purpose -// because no rotation is involved when mapping logical to device coordinates -// mirror and scaling for x and y will be part of the matrix -// if you have a matrix that is rotated, eg a shape containing a matrix to place -// it in the logical coordinate system, use TransformPoint -inline double wxTransformMatrix::TransformY(double y) const -{ - //normally like this, but since no rotation is involved (only mirror and scale) - //we can do without X -> m_matrix[0]{1] is sin(rotation angle) and therefore zero - //(x * m_matrix[0][1] + y * m_matrix[1][1] + m_matrix[2][1])) - return (m_isIdentity ? y : (y * m_matrix[1][1] + m_matrix[2][1])); -} - - -// Is the matrix the identity matrix? -// Each operation checks whether the result is still the identity matrix and sets a flag. -inline bool wxTransformMatrix::IsIdentity1(void) const -{ - return - ( wxIsSameDouble(m_matrix[0][0], 1.0) && - wxIsSameDouble(m_matrix[1][1], 1.0) && - wxIsSameDouble(m_matrix[2][2], 1.0) && - wxIsSameDouble(m_matrix[1][0], 0.0) && - wxIsSameDouble(m_matrix[2][0], 0.0) && - wxIsSameDouble(m_matrix[0][1], 0.0) && - wxIsSameDouble(m_matrix[2][1], 0.0) && - wxIsSameDouble(m_matrix[0][2], 0.0) && - wxIsSameDouble(m_matrix[1][2], 0.0) ); -} - -// Calculates the determinant of a 2 x 2 matrix -inline double wxCalculateDet(double a11, double a21, double a12, double a22) -{ - return a11 * a22 - a12 * a21; -} - -#endif // _WX_MATRIXH__ diff --git a/desmume/src/windows/wx/include/wx/mdi.h b/desmume/src/windows/wx/include/wx/mdi.h deleted file mode 100644 index f18b54a96..000000000 --- a/desmume/src/windows/wx/include/wx/mdi.h +++ /dev/null @@ -1,40 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/mdi.h -// Purpose: wxMDI base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: mdi.h 37066 2006-01-23 03:27:34Z MR $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MDI_H_BASE_ -#define _WX_MDI_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_MDI - -#if defined(__WXUNIVERSAL__) - #include "wx/generic/mdig.h" -#elif defined(__WXMSW__) - #include "wx/msw/mdi.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/mdi.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/mdi.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/mdi.h" -#elif defined(__WXMAC__) - #include "wx/mac/mdi.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/mdi.h" -#elif defined(__WXPM__) - #include "wx/generic/mdig.h" -#endif - -#endif // wxUSE_MDI - -#endif - // _WX_MDI_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/mediactrl.h b/desmume/src/windows/wx/include/wx/mediactrl.h deleted file mode 100644 index c47557b03..000000000 --- a/desmume/src/windows/wx/include/wx/mediactrl.h +++ /dev/null @@ -1,422 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/mediactrl.h -// Purpose: wxMediaCtrl class -// Author: Ryan Norton <wxprojects@comcast.net> -// Modified by: -// Created: 11/07/04 -// RCS-ID: $Id: mediactrl.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) Ryan Norton -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -// ============================================================================ -// Definitions -// ============================================================================ - -// ---------------------------------------------------------------------------- -// Header guard -// ---------------------------------------------------------------------------- -#ifndef _WX_MEDIACTRL_H_ -#define _WX_MEDIACTRL_H_ - -// ---------------------------------------------------------------------------- -// Pre-compiled header stuff -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -// ---------------------------------------------------------------------------- -// Compilation guard -// ---------------------------------------------------------------------------- - -#if wxUSE_MEDIACTRL - -// ---------------------------------------------------------------------------- -// Includes -// ---------------------------------------------------------------------------- - -#include "wx/control.h" -#include "wx/uri.h" - -// ============================================================================ -// Declarations -// ============================================================================ - -// ---------------------------------------------------------------------------- -// -// Enumerations -// -// ---------------------------------------------------------------------------- - -enum wxMediaState -{ - wxMEDIASTATE_STOPPED, - wxMEDIASTATE_PAUSED, - wxMEDIASTATE_PLAYING -}; - -enum wxMediaCtrlPlayerControls -{ - wxMEDIACTRLPLAYERCONTROLS_NONE = 0, - //Step controls like fastfoward, step one frame etc. - wxMEDIACTRLPLAYERCONTROLS_STEP = 1 << 0, - //Volume controls like the speaker icon, volume slider, etc. - wxMEDIACTRLPLAYERCONTROLS_VOLUME = 1 << 1, - wxMEDIACTRLPLAYERCONTROLS_DEFAULT = - wxMEDIACTRLPLAYERCONTROLS_STEP | - wxMEDIACTRLPLAYERCONTROLS_VOLUME -}; - -#define wxMEDIABACKEND_DIRECTSHOW wxT("wxAMMediaBackend") -#define wxMEDIABACKEND_MCI wxT("wxMCIMediaBackend") -#define wxMEDIABACKEND_QUICKTIME wxT("wxQTMediaBackend") -#define wxMEDIABACKEND_GSTREAMER wxT("wxGStreamerMediaBackend") -#define wxMEDIABACKEND_REALPLAYER wxT("wxRealPlayerMediaBackend") -#define wxMEDIABACKEND_WMP10 wxT("wxWMP10MediaBackend") - -// ---------------------------------------------------------------------------- -// -// wxMediaEvent -// -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_MEDIA wxMediaEvent : public wxNotifyEvent -{ -public: - // ------------------------------------------------------------------------ - // wxMediaEvent Constructor - // - // Normal constructor, much the same as wxNotifyEvent - // ------------------------------------------------------------------------ - wxMediaEvent(wxEventType commandType = wxEVT_NULL, int winid = 0) - : wxNotifyEvent(commandType, winid) - { } - - // ------------------------------------------------------------------------ - // wxMediaEvent Copy Constructor - // - // Normal copy constructor, much the same as wxNotifyEvent - // ------------------------------------------------------------------------ - wxMediaEvent(const wxMediaEvent &clone) - : wxNotifyEvent(clone) - { } - - // ------------------------------------------------------------------------ - // wxMediaEvent::Clone - // - // Allocates a copy of this object. - // Required for wxEvtHandler::AddPendingEvent - // ------------------------------------------------------------------------ - virtual wxEvent *Clone() const - { return new wxMediaEvent(*this); } - - - // Put this class on wxWidget's RTTI table - DECLARE_DYNAMIC_CLASS(wxMediaEvent) -}; - -// ---------------------------------------------------------------------------- -// -// wxMediaCtrl -// -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_MEDIA wxMediaCtrl : public wxControl -{ -public: - wxMediaCtrl() : m_imp(NULL), m_bLoaded(false) - { } - - wxMediaCtrl(wxWindow* parent, wxWindowID winid, - const wxString& fileName = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& szBackend = wxEmptyString, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxT("mediaCtrl")) - : m_imp(NULL), m_bLoaded(false) - { Create(parent, winid, fileName, pos, size, style, - szBackend, validator, name); } - - wxMediaCtrl(wxWindow* parent, wxWindowID winid, - const wxURI& location, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& szBackend = wxEmptyString, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxT("mediaCtrl")) - : m_imp(NULL), m_bLoaded(false) - { Create(parent, winid, location, pos, size, style, - szBackend, validator, name); } - - virtual ~wxMediaCtrl(); - - bool Create(wxWindow* parent, wxWindowID winid, - const wxString& fileName = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& szBackend = wxEmptyString, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxT("mediaCtrl")); - - bool Create(wxWindow* parent, wxWindowID winid, - const wxURI& location, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& szBackend = wxEmptyString, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxT("mediaCtrl")); - - bool DoCreate(wxClassInfo* instance, - wxWindow* parent, wxWindowID winid, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxT("mediaCtrl")); - - bool Play(); - bool Pause(); - bool Stop(); - - bool Load(const wxString& fileName); - - wxMediaState GetState(); - - wxFileOffset Seek(wxFileOffset where, wxSeekMode mode = wxFromStart); - wxFileOffset Tell(); //FIXME: This should be const - wxFileOffset Length(); //FIXME: This should be const - -#if wxABI_VERSION >= 20601 /* 2.6.1+ only */ - double GetPlaybackRate(); //All but MCI & GStreamer - bool SetPlaybackRate(double dRate); //All but MCI & GStreamer -#endif - -#if wxABI_VERSION >= 20602 /* 2.6.2+ only */ - bool Load(const wxURI& location); - bool Load(const wxURI& location, const wxURI& proxy); - - wxFileOffset GetDownloadProgress(); // DirectShow only - wxFileOffset GetDownloadTotal(); // DirectShow only - - double GetVolume(); - bool SetVolume(double dVolume); - - bool ShowPlayerControls( - wxMediaCtrlPlayerControls flags = wxMEDIACTRLPLAYERCONTROLS_DEFAULT); - - //helpers for the wxPython people - bool LoadURI(const wxString& fileName) - { return Load(wxURI(fileName)); } - bool LoadURIWithProxy(const wxString& fileName, const wxString& proxy) - { return Load(wxURI(fileName), wxURI(proxy)); } -#endif - -protected: - static wxClassInfo* NextBackend(); - - void OnMediaFinished(wxMediaEvent& evt); - virtual void DoMoveWindow(int x, int y, int w, int h); - wxSize DoGetBestSize() const; - - //FIXME: This is nasty... find a better way to work around - //inheritance issues -#if defined(__WXMAC__) - virtual void MacVisibilityChanged(); -#endif -#if defined(__WXMAC__) || defined(__WXCOCOA__) - friend class wxQTMediaBackend; -#endif - class wxMediaBackend* m_imp; - bool m_bLoaded; - - DECLARE_DYNAMIC_CLASS(wxMediaCtrl) -}; - -// ---------------------------------------------------------------------------- -// -// wxMediaBackend -// -// Derive from this and use standard wxWidgets RTTI -// (DECLARE_DYNAMIC_CLASS and IMPLEMENT_CLASS) to make a backend -// for wxMediaCtrl. Backends are searched alphabetically - -// the one with the earliest letter is tried first. -// -// Note that this is currently not API or ABI compatable - -// so statically link or make the client compile on-site. -// -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_MEDIA wxMediaBackend : public wxObject -{ -public: - wxMediaBackend() - { } - - virtual ~wxMediaBackend(); - - virtual bool CreateControl(wxControl* WXUNUSED(ctrl), - wxWindow* WXUNUSED(parent), - wxWindowID WXUNUSED(winid), - const wxPoint& WXUNUSED(pos), - const wxSize& WXUNUSED(size), - long WXUNUSED(style), - const wxValidator& WXUNUSED(validator), - const wxString& WXUNUSED(name)) - { return false; } - - virtual bool Play() - { return false; } - virtual bool Pause() - { return false; } - virtual bool Stop() - { return false; } - - virtual bool Load(const wxString& WXUNUSED(fileName)) - { return false; } - virtual bool Load(const wxURI& WXUNUSED(location)) - { return false; } - - virtual bool SetPosition(wxLongLong WXUNUSED(where)) - { return 0; } - virtual wxLongLong GetPosition() - { return 0; } - virtual wxLongLong GetDuration() - { return 0; } - - virtual void Move(int WXUNUSED(x), int WXUNUSED(y), - int WXUNUSED(w), int WXUNUSED(h)) - { } - virtual wxSize GetVideoSize() const - { return wxSize(0,0); } - - virtual double GetPlaybackRate() - { return 0.0; } - virtual bool SetPlaybackRate(double WXUNUSED(dRate)) - { return false; } - - virtual wxMediaState GetState() - { return wxMEDIASTATE_STOPPED; } - - virtual double GetVolume() - { return 0.0; } - virtual bool SetVolume(double WXUNUSED(dVolume)) - { return false; } - - virtual bool Load(const wxURI& WXUNUSED(location), - const wxURI& WXUNUSED(proxy)) - { return false; } - - virtual bool ShowPlayerControls( - wxMediaCtrlPlayerControls WXUNUSED(flags)) - { return false; } - virtual bool IsInterfaceShown() - { return false; } - - virtual wxLongLong GetDownloadProgress() - { return 0; } - virtual wxLongLong GetDownloadTotal() - { return 0; } - - virtual void MacVisibilityChanged() - { } - virtual void RESERVED9() {} - - DECLARE_DYNAMIC_CLASS(wxMediaBackend) -}; - - -//Event ID to give to our events -#define wxMEDIA_FINISHED_ID 13000 -#define wxMEDIA_STOP_ID 13001 - -//Define our event types - we need to call DEFINE_EVENT_TYPE(EVT) later -DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_FINISHED, wxMEDIA_FINISHED_ID) -DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_STOP, wxMEDIA_STOP_ID) - -//Function type(s) our events need -typedef void (wxEvtHandler::*wxMediaEventFunction)(wxMediaEvent&); - -#define wxMediaEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxMediaEventFunction, &func) - -//Macro for usage with message maps -#define EVT_MEDIA_FINISHED(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_FINISHED, winid, wxID_ANY, wxMediaEventHandler(fn), (wxObject *) NULL ), -#define EVT_MEDIA_STOP(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_STOP, winid, wxID_ANY, wxMediaEventHandler(fn), (wxObject *) NULL ), - -#if wxABI_VERSION >= 20602 /* 2.6.2+ only */ -# define wxMEDIA_LOADED_ID 13002 - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_LOADED, wxMEDIA_LOADED_ID) -# define EVT_MEDIA_LOADED(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_LOADED, winid, wxID_ANY, wxMediaEventHandler(fn), (wxObject *) NULL ), -#endif - -#if wxABI_VERSION >= 20603 /* 2.6.3+ only */ -# define wxMEDIA_STATECHANGED_ID 13003 -# define wxMEDIA_PLAY_ID 13004 -# define wxMEDIA_PAUSE_ID 13005 - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_STATECHANGED, wxMEDIA_STATECHANGED_ID) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_PLAY, wxMEDIA_PLAY_ID) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_MEDIA, wxEVT_MEDIA_PAUSE, wxMEDIA_PAUSE_ID) -# define EVT_MEDIA_STATECHANGED(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_STATECHANGED, winid, wxID_ANY, wxMediaEventHandler(fn), (wxObject *) NULL ), -# define EVT_MEDIA_PLAY(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_PLAY, winid, wxID_ANY, wxMediaEventHandler(fn), (wxObject *) NULL ), -# define EVT_MEDIA_PAUSE(winid, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_MEDIA_PAUSE, winid, wxID_ANY, wxMediaEventHandler(fn), (wxObject *) NULL ), -#endif - -// ---------------------------------------------------------------------------- -// common backend base class used by many other backends -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_MEDIA wxMediaBackendCommonBase : public wxMediaBackend -{ -public: - // add a pending wxMediaEvent of the given type - void QueueEvent(wxEventType evtType); - - // notify that the movie playback is finished - void QueueFinishEvent() - { -#if wxABI_VERSION >= 20603 /* 2.6.3+ only */ - QueueEvent(wxEVT_MEDIA_STATECHANGED); -#endif - QueueEvent(wxEVT_MEDIA_FINISHED); - } - - // send the stop event and return true if it hasn't been vetoed - bool SendStopEvent(); - - // Queue pause event - void QueuePlayEvent(); - - // Queue pause event - void QueuePauseEvent(); - - // Queue stop event (no veto) - void QueueStopEvent(); - -protected: - // call this when the movie size has changed but not because it has just - // been loaded (in this case, call NotifyMovieLoaded() below) - void NotifyMovieSizeChanged(); - - // call this when the movie is fully loaded - void NotifyMovieLoaded(); - - - wxMediaCtrl *m_ctrl; // parent control -}; - -// ---------------------------------------------------------------------------- -// End compilation gaurd -// ---------------------------------------------------------------------------- -#endif // wxUSE_MEDIACTRL - -// ---------------------------------------------------------------------------- -// End header guard and header itself -// ---------------------------------------------------------------------------- -#endif // _WX_MEDIACTRL_H_ - - diff --git a/desmume/src/windows/wx/include/wx/memconf.h b/desmume/src/windows/wx/include/wx/memconf.h deleted file mode 100644 index eec82a43a..000000000 --- a/desmume/src/windows/wx/include/wx/memconf.h +++ /dev/null @@ -1,54 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/memconf.h -// Purpose: wxMemoryConfig class: a wxConfigBase implementation which only -// stores the settings in memory (thus they are lost when the -// program terminates) -// Author: Vadim Zeitlin -// Modified by: -// Created: 22.01.00 -// RCS-ID: $Id: memconf.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 2000 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -/* - * NB: I don't see how this class may possibly be useful to the application - * program (as the settings are lost on program termination), but it is - * handy to have it inside wxWidgets. So for now let's say that this class - * is private and should only be used by wxWidgets itself - this might - * change in the future. - */ - -#ifndef _WX_MEMCONF_H_ -#define _WX_MEMCONF_H_ - -#if wxUSE_CONFIG - -#include "wx/fileconf.h" // the base class - -// ---------------------------------------------------------------------------- -// wxMemoryConfig: a config class which stores settings in non-persistent way -// ---------------------------------------------------------------------------- - -// notice that we inherit from wxFileConfig which already stores its data in -// memory and just disable file reading/writing - this is probably not optimal -// and might be changed in future as well (this class will always deriev from -// wxConfigBase though) -class wxMemoryConfig : public wxFileConfig -{ -public: - // default (and only) ctor - wxMemoryConfig() : wxFileConfig(wxEmptyString, // default app name - wxEmptyString, // default vendor name - wxEmptyString, // no local config file - wxEmptyString, // no system config file - 0) // don't use any files - { - } - - DECLARE_NO_COPY_CLASS(wxMemoryConfig) -}; - -#endif // wxUSE_CONFIG - -#endif // _WX_MEMCONF_H_ diff --git a/desmume/src/windows/wx/include/wx/memory.h b/desmume/src/windows/wx/include/wx/memory.h deleted file mode 100644 index adb8ed2ba..000000000 --- a/desmume/src/windows/wx/include/wx/memory.h +++ /dev/null @@ -1,373 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/memory.h -// Purpose: Memory operations -// Author: Arthur Seaton, Julian Smart -// Modified by: -// Created: 29/01/98 -// RCS-ID: $Id: memory.h 39634 2006-06-08 12:51:01Z ABX $ -// Copyright: (c) 1998 Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MEMORYH__ -#define _WX_MEMORYH__ - -#include "wx/defs.h" -#include "wx/string.h" -#include "wx/msgout.h" - -/* - The macro which will be expanded to include the file and line number - info, or to be a straight call to the new operator. -*/ - -#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT - -#include <stddef.h> - -#ifdef __WXDEBUG__ - -WXDLLIMPEXP_BASE void * wxDebugAlloc(size_t size, wxChar * fileName, int lineNum, bool isObject, bool isVect = false); -WXDLLIMPEXP_BASE void wxDebugFree(void * buf, bool isVect = false); - -//********************************************************************************** -/* - The global operator new used for everything apart from getting - dynamic storage within this function itself. -*/ - -// We'll only do malloc and free for the moment: leave the interesting -// stuff for the wxObject versions. - - -#if wxUSE_GLOBAL_MEMORY_OPERATORS - -// Undefine temporarily (new is #defined in object.h) because we want to -// declare some new operators. -#ifdef new - #undef new -#endif - -#if defined(__SUNCC__) - #define wxUSE_ARRAY_MEMORY_OPERATORS 0 -#elif !( defined (__VISUALC__) && (__VISUALC__ <= 1020) ) || defined( __MWERKS__) - #define wxUSE_ARRAY_MEMORY_OPERATORS 1 -#elif defined (__SGI_CC_) - // only supported by -n32 compilers - #ifndef __EDG_ABI_COMPATIBILITY_VERSION - #define wxUSE_ARRAY_MEMORY_OPERATORS 0 - #endif -#elif !( defined (__VISUALC__) && (__VISUALC__ <= 1020) ) || defined( __MWERKS__) - #define wxUSE_ARRAY_MEMORY_OPERATORS 1 -#else - // ::operator new[] is a recent C++ feature, so assume it's not supported - #define wxUSE_ARRAY_MEMORY_OPERATORS 0 -#endif - -// 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)) -inline void * operator new (size_t size, wxChar * fileName, int lineNum) -{ - return wxDebugAlloc(size, fileName, lineNum, false, false); -} - -inline void * operator new (size_t size) -{ - return wxDebugAlloc(size, NULL, 0, false); -} - -inline void operator delete (void * buf) -{ - wxDebugFree(buf, false); -} - -#if wxUSE_ARRAY_MEMORY_OPERATORS -inline void * operator new[] (size_t size) -{ - return wxDebugAlloc(size, NULL, 0, false, true); -} - -inline void * operator new[] (size_t size, wxChar * fileName, int lineNum) -{ - return wxDebugAlloc(size, fileName, lineNum, false, true); -} - -inline void operator delete[] (void * buf) -{ - wxDebugFree(buf, true); -} -#endif // wxUSE_ARRAY_MEMORY_OPERATORS - -#else - -void * operator new (size_t size, wxChar * fileName, int lineNum); - -void * operator new (size_t size); - -void operator delete (void * buf); - -#if wxUSE_ARRAY_MEMORY_OPERATORS -void * operator new[] (size_t size); - -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)) - -// VC++ 6.0 and MWERKS -#if ( defined(__VISUALC__) && (__VISUALC__ >= 1200) ) || defined(__MWERKS__) -inline void operator delete(void* pData, wxChar* /* fileName */, int /* lineNum */) -{ - wxDebugFree(pData, false); -} -inline void operator delete[](void* pData, wxChar* /* fileName */, int /* lineNum */) -{ - wxDebugFree(pData, true); -} -#endif // __VISUALC__>=1200 -#endif // wxUSE_GLOBAL_MEMORY_OPERATORS -#endif // __WXDEBUG__ - -//********************************************************************************** - -typedef unsigned int wxMarkerType; - -/* - Define the struct which will be placed at the start of all dynamically - allocated memory. -*/ - -class WXDLLIMPEXP_BASE wxMemStruct { - -friend class WXDLLIMPEXP_BASE wxDebugContext; // access to the m_next pointer for list traversal. - -public: -public: - int AssertList (); - - size_t RequestSize () { return m_reqSize; } - wxMarkerType Marker () { return m_firstMarker; } - - // When an object is deleted we set the id slot to a specific value. - inline void SetDeleted (); - inline int IsDeleted (); - - int Append (); - int Unlink (); - - // Used to determine if the object is really a wxMemStruct. - // Not a foolproof test by any means, but better than none I hope! - int AssertIt (); - - // Do all validation on a node. - int ValidateNode (); - - // Check the integrity of a node and of the list, node by node. - int CheckBlock (); - int CheckAllPrevious (); - - // Print a single node. - void PrintNode (); - - // Called when the memory linking functions get an error. - void ErrorMsg (const char *); - void ErrorMsg (); - - inline void *GetActualData(void) const { return m_actualData; } - - void Dump(void); - -public: - // Check for underwriting. There are 2 of these checks. This one - // inside the struct and another right after the struct. - wxMarkerType m_firstMarker; - - // File name and line number are from cpp. - wxChar* m_fileName; - int m_lineNum; - - // The amount of memory requested by the caller. - size_t m_reqSize; - - // Used to try to verify that we really are dealing with an object - // of the required class. Can be 1 of 2 values these indicating a valid - // wxMemStruct object, or a deleted wxMemStruct object. - wxMarkerType m_id; - - wxMemStruct * m_prev; - wxMemStruct * m_next; - - void * m_actualData; - bool m_isObject; -}; - - -typedef void (wxMemStruct::*PmSFV) (); - - -/* - Debugging class. This will only have a single instance, but it's - a reasonable way to keep everything together and to make this - available for change if needed by someone else. - A lot of this stuff would be better off within the wxMemStruct class, but - it's stuff which we need to access at times when there is no wxMemStruct - object so we use this class instead. Think of it as a collection of - globals which have to do with the wxMemStruct class. -*/ - -class WXDLLIMPEXP_BASE wxDebugContext { - -protected: - // Used to set alignment for markers. - static size_t CalcAlignment (); - - // Returns the amount of padding needed after something of the given - // size. This is so that when we cast pointers backwards and forwards - // the pointer value will be valid for a wxMarkerType. - static size_t GetPadding (const size_t size) ; - - // Traverse the list. - static void TraverseList (PmSFV, wxMemStruct *from = NULL); - - static int debugLevel; - static bool debugOn; - - static int m_balign; // byte alignment - static int m_balignmask; // mask for performing byte alignment -public: - // Set a checkpoint to dump only the memory from - // a given point - static wxMemStruct *checkPoint; - - wxDebugContext(void); - ~wxDebugContext(void); - - static int GetLevel(void) { return debugLevel; } - static void SetLevel(int level) { debugLevel = level; } - - static bool GetDebugMode(void) { return debugOn; } - static void SetDebugMode(bool flag) { debugOn = flag; } - - static void SetCheckpoint(bool all = false); - static wxMemStruct *GetCheckpoint(void) { return checkPoint; } - - // Calculated from the request size and any padding needed - // before the final marker. - static size_t PaddedSize (const size_t reqSize); - - // Calc the total amount of space we need from the system - // to satisfy a caller request. This includes all padding. - static size_t TotSize (const size_t reqSize); - - // Return valid pointers to offsets within the allocated memory. - static char * StructPos (const char * buf); - static char * MidMarkerPos (const char * buf); - static char * CallerMemPos (const char * buf); - static char * EndMarkerPos (const char * buf, const size_t size); - - // Given a pointer to the start of the caller requested area - // return a pointer to the start of the entire alloc\'d buffer. - static char * StartPos (const char * caller); - - // Access to the list. - static wxMemStruct * GetHead () { return m_head; } - static wxMemStruct * GetTail () { return m_tail; } - - // Set the list sentinals. - static wxMemStruct * SetHead (wxMemStruct * st) { return (m_head = st); } - static wxMemStruct * SetTail (wxMemStruct * st) { return (m_tail = st); } - - // If this is set then every new operation checks the validity - // of the all previous nodes in the list. - static bool GetCheckPrevious () { return m_checkPrevious; } - static void SetCheckPrevious (bool value) { m_checkPrevious = value; } - - // Checks all nodes, or all nodes if checkAll is true - static int Check(bool checkAll = false); - - // Print out the list of wxMemStruct nodes. - static bool PrintList(void); - - // Dump objects - static bool Dump(void); - - // Print statistics - static bool PrintStatistics(bool detailed = true); - - // Print out the classes in the application. - static bool PrintClasses(void); - - // Count the number of non-wxDebugContext-related objects - // that are outstanding - static int CountObjectsLeft(bool sinceCheckpoint = false); - - // This function is used to output the dump - static void OutputDumpLine(const wxChar *szFormat, ...); - -private: - // Store these here to allow access to the list without - // needing to have a wxMemStruct object. - static wxMemStruct* m_head; - static wxMemStruct* m_tail; - - // Set to false if we're not checking all previous nodes when - // we do a new. Set to true when we are. - static bool m_checkPrevious; -}; - -// Final cleanup (e.g. deleting the log object and doing memory leak checking) -// will be delayed until all wxDebugContextDumpDelayCounter objects have been -// destructed. Adding one wxDebugContextDumpDelayCounter per file will delay -// memory leak checking until after destructing all global objects. -class WXDLLIMPEXP_BASE wxDebugContextDumpDelayCounter -{ -public: - wxDebugContextDumpDelayCounter() { - sm_count++; - } - - ~wxDebugContextDumpDelayCounter() { - sm_count--; - if(!sm_count) DoDump(); - } -private: - void DoDump(); - static int sm_count; -}; - -// make leak dump after all globals have been destructed -static wxDebugContextDumpDelayCounter wxDebugContextDumpDelayCounter_File; -#define WXDEBUG_DUMPDELAYCOUNTER \ - static wxDebugContextDumpDelayCounter wxDebugContextDumpDelayCounter_Extra; - -// Output a debug message, in a system dependent fashion. -void WXDLLIMPEXP_BASE wxTrace(const wxChar *fmt ...) ATTRIBUTE_PRINTF_1; -void WXDLLIMPEXP_BASE wxTraceLevel(int level, const wxChar *fmt ...) ATTRIBUTE_PRINTF_2; - -#define WXTRACE wxTrace -#define WXTRACELEVEL wxTraceLevel - -#else // (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT - -#define WXDEBUG_DUMPDELAYCOUNTER - -// Borland C++ Builder 6 seems to have troubles with inline functions (see bug -// 819700) -#if 0 - inline void wxTrace(const wxChar *WXUNUSED(fmt)) {} - inline void wxTraceLevel(int WXUNUSED(level), const wxChar *WXUNUSED(fmt)) {} -#else - #define wxTrace(fmt) - #define wxTraceLevel(l, fmt) -#endif - -#define WXTRACE true ? (void)0 : wxTrace -#define WXTRACELEVEL true ? (void)0 : wxTraceLevel - -#endif // (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT - -#endif - // _WX_MEMORYH__ diff --git a/desmume/src/windows/wx/include/wx/memtext.h b/desmume/src/windows/wx/include/wx/memtext.h deleted file mode 100644 index a093f40b0..000000000 --- a/desmume/src/windows/wx/include/wx/memtext.h +++ /dev/null @@ -1,54 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/memtext.h -// Purpose: wxMemoryText allows to use wxTextBuffer without a file -// Created: 14.11.01 -// Author: Morten Hanssen -// Copyright: (c) 2001 Morten Hanssen -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MEMTEXT_H -#define _WX_MEMTEXT_H - -#include "wx/defs.h" - -// there is no separate setting for wxMemoryText, it's smallish anyhow -#if wxUSE_TEXTBUFFER - -// ---------------------------------------------------------------------------- -// wxMemoryText -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMemoryText : public wxTextBuffer -{ -public: - // Constructors. - wxMemoryText() { } - wxMemoryText(const wxString& name) : wxTextBuffer(name) { } - -protected: - virtual bool OnExists() const - { return false; } - - virtual bool OnOpen(const wxString & WXUNUSED(strBufferName), - wxTextBufferOpenMode WXUNUSED(OpenMode)) - { return true; } - - virtual bool OnClose() - { return true; } - - virtual bool OnRead(const wxMBConv& WXUNUSED(conv)) - { return true; } - - virtual bool OnWrite(wxTextFileType WXUNUSED(typeNew), - const wxMBConv& WXUNUSED(conv) = wxConvUTF8) - { return true; } - -private: - DECLARE_NO_COPY_CLASS(wxMemoryText) -}; - -#endif // wxUSE_TEXTBUFFER - -#endif // _WX_MEMTEXT_H - diff --git a/desmume/src/windows/wx/include/wx/menu.h b/desmume/src/windows/wx/include/wx/menu.h deleted file mode 100644 index 23e47a0b3..000000000 --- a/desmume/src/windows/wx/include/wx/menu.h +++ /dev/null @@ -1,555 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/menu.h -// Purpose: wxMenu and wxMenuBar classes -// Author: Vadim Zeitlin -// Modified by: -// Created: 26.10.99 -// RCS-ID: $Id: menu.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MENU_H_BASE_ -#define _WX_MENU_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_MENUS - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/list.h" // for "template" list classes -#include "wx/window.h" // base class for wxMenuBar - -// also include this one to ensure compatibility with old code which only -// included wx/menu.h -#include "wx/menuitem.h" - -class WXDLLIMPEXP_FWD_CORE wxMenu; -class WXDLLIMPEXP_FWD_CORE wxMenuBarBase; -class WXDLLIMPEXP_FWD_CORE wxMenuBar; -class WXDLLIMPEXP_FWD_CORE wxMenuItem; - -// pseudo template list classes -WX_DECLARE_EXPORTED_LIST(wxMenu, wxMenuList); -WX_DECLARE_EXPORTED_LIST(wxMenuItem, wxMenuItemList); - -// ---------------------------------------------------------------------------- -// wxMenu -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMenuBase : public wxEvtHandler -{ -public: - // create a menu - static wxMenu *New(const wxString& title = wxEmptyString, long style = 0); - - // ctors - wxMenuBase(const wxString& title, long style = 0) : m_title(title) - { Init(style); } - wxMenuBase(long style = 0) - { Init(style); } - - // dtor deletes all the menu items we own - virtual ~wxMenuBase(); - - // menu construction - // ----------------- - - // append any kind of item (normal/check/radio/separator) - wxMenuItem* Append(int itemid, - const wxString& text = wxEmptyString, - const wxString& help = wxEmptyString, - wxItemKind kind = wxITEM_NORMAL) - { - return DoAppend(wxMenuItem::New((wxMenu *)this, itemid, text, help, kind)); - } - - // append a separator to the menu - wxMenuItem* AppendSeparator() { return Append(wxID_SEPARATOR, wxEmptyString); } - - // append a check item - wxMenuItem* AppendCheckItem(int itemid, - const wxString& text, - const wxString& help = wxEmptyString) - { - return Append(itemid, text, help, wxITEM_CHECK); - } - - // append a radio item - wxMenuItem* AppendRadioItem(int itemid, - const wxString& text, - const wxString& help = wxEmptyString) - { - return Append(itemid, text, help, wxITEM_RADIO); - } - - // append a submenu - wxMenuItem* AppendSubMenu(wxMenu *submenu, - const wxString& text, - const wxString& help = wxEmptyString) - { - return DoAppend(wxMenuItem::New((wxMenu *)this, wxID_ANY, text, help, - wxITEM_NORMAL, submenu)); - } - - // the most generic form of Append() - append anything - wxMenuItem* Append(wxMenuItem *item) { return DoAppend(item); } - - // insert a break in the menu (only works when appending the items, not - // inserting them) - virtual void Break() { } - - // insert an item before given position - wxMenuItem* Insert(size_t pos, wxMenuItem *item); - - // insert an item before given position - wxMenuItem* Insert(size_t pos, - int itemid, - const wxString& text = wxEmptyString, - const wxString& help = wxEmptyString, - wxItemKind kind = wxITEM_NORMAL) - { - return Insert(pos, wxMenuItem::New((wxMenu *)this, itemid, text, help, kind)); - } - - // insert a separator - wxMenuItem* InsertSeparator(size_t pos) - { - return Insert(pos, wxMenuItem::New((wxMenu *)this, wxID_SEPARATOR)); - } - - // insert a check item - wxMenuItem* InsertCheckItem(size_t pos, - int itemid, - const wxString& text, - const wxString& help = wxEmptyString) - { - return Insert(pos, itemid, text, help, wxITEM_CHECK); - } - - // insert a radio item - wxMenuItem* InsertRadioItem(size_t pos, - int itemid, - const wxString& text, - const wxString& help = wxEmptyString) - { - return Insert(pos, itemid, text, help, wxITEM_RADIO); - } - - // insert a submenu - wxMenuItem* Insert(size_t pos, - int itemid, - const wxString& text, - wxMenu *submenu, - const wxString& help = wxEmptyString) - { - return Insert(pos, wxMenuItem::New((wxMenu *)this, itemid, text, help, - wxITEM_NORMAL, submenu)); - } - - // prepend an item to the menu - wxMenuItem* Prepend(wxMenuItem *item) - { - return Insert(0u, item); - } - - // prepend any item to the menu - wxMenuItem* Prepend(int itemid, - const wxString& text = wxEmptyString, - const wxString& help = wxEmptyString, - wxItemKind kind = wxITEM_NORMAL) - { - return Insert(0u, itemid, text, help, kind); - } - - // prepend a separator - wxMenuItem* PrependSeparator() - { - return InsertSeparator(0u); - } - - // prepend a check item - wxMenuItem* PrependCheckItem(int itemid, - const wxString& text, - const wxString& help = wxEmptyString) - { - return InsertCheckItem(0u, itemid, text, help); - } - - // prepend a radio item - wxMenuItem* PrependRadioItem(int itemid, - const wxString& text, - const wxString& help = wxEmptyString) - { - return InsertRadioItem(0u, itemid, text, help); - } - - // prepend a submenu - wxMenuItem* Prepend(int itemid, - const wxString& text, - wxMenu *submenu, - const wxString& help = wxEmptyString) - { - return Insert(0u, itemid, text, submenu, help); - } - - // detach an item from the menu, but don't delete it so that it can be - // added back later (but if it's not, the caller is responsible for - // deleting it!) - wxMenuItem *Remove(int itemid) { return Remove(FindChildItem(itemid)); } - wxMenuItem *Remove(wxMenuItem *item); - - // delete an item from the menu (submenus are not destroyed by this - // function, see Destroy) - bool Delete(int itemid) { return Delete(FindChildItem(itemid)); } - bool Delete(wxMenuItem *item); - - // delete the item from menu and destroy it (if it's a submenu) - bool Destroy(int itemid) { return Destroy(FindChildItem(itemid)); } - bool Destroy(wxMenuItem *item); - - // menu items access - // ----------------- - - // get the items - size_t GetMenuItemCount() const { return m_items.GetCount(); } - - const wxMenuItemList& GetMenuItems() const { return m_items; } - wxMenuItemList& GetMenuItems() { return m_items; } - - // search - virtual int FindItem(const wxString& item) const; - wxMenuItem* FindItem(int itemid, wxMenu **menu = NULL) const; - - // find by position - wxMenuItem* FindItemByPosition(size_t position) const; - - // get/set items attributes - void Enable(int itemid, bool enable); - bool IsEnabled(int itemid) const; - - void Check(int itemid, bool check); - bool IsChecked(int itemid) const; - - void SetLabel(int itemid, const wxString& label); - wxString GetLabel(int itemid) const; - - virtual void SetHelpString(int itemid, const wxString& helpString); - virtual wxString GetHelpString(int itemid) const; - - // misc accessors - // -------------- - - // the title - virtual void SetTitle(const wxString& title) { m_title = title; } - const wxString GetTitle() const { return m_title; } - - // event handler - void SetEventHandler(wxEvtHandler *handler) { m_eventHandler = handler; } - wxEvtHandler *GetEventHandler() const { return m_eventHandler; } - - // invoking window - void SetInvokingWindow(wxWindow *win) { m_invokingWindow = win; } - wxWindow *GetInvokingWindow() const { return m_invokingWindow; } - - // style - long GetStyle() const { return m_style; } - - // implementation helpers - // ---------------------- - - // Updates the UI for a menu and all submenus recursively. source is the - // object that has the update event handlers defined for it. If NULL, the - // menu or associated window will be used. - void UpdateUI(wxEvtHandler* source = (wxEvtHandler*)NULL); - - // get the menu bar this menu is attached to (may be NULL, always NULL for - // popup menus). Traverse up the menu hierarchy to find it. - wxMenuBar *GetMenuBar() const; - - // called when the menu is attached/detached to/from a menu bar - virtual void Attach(wxMenuBarBase *menubar); - virtual void Detach(); - - // is the menu attached to a menu bar (or is it a popup one)? - bool IsAttached() const { return GetMenuBar() != NULL; } - - // set/get the parent of this menu - void SetParent(wxMenu *parent) { m_menuParent = parent; } - wxMenu *GetParent() const { return m_menuParent; } - - // implementation only from now on - // ------------------------------- - - // unlike FindItem(), this function doesn't recurse but only looks through - // our direct children and also may return the index of the found child if - // pos != NULL - wxMenuItem *FindChildItem(int itemid, size_t *pos = NULL) const; - - // called to generate a wxCommandEvent, return true if it was processed, - // false otherwise - // - // the checked parameter may have boolean value or -1 for uncheckable items - bool SendEvent(int itemid, int checked = -1); - - // compatibility: these functions are deprecated, use the new ones instead - // ----------------------------------------------------------------------- - - // use the versions taking wxItem_XXX now instead, they're more readable - // and allow adding the radio items as well - void Append(int itemid, - const wxString& text, - const wxString& help, - bool isCheckable) - { - Append(itemid, text, help, isCheckable ? wxITEM_CHECK : wxITEM_NORMAL); - } - - // use more readable and not requiring unused itemid AppendSubMenu() instead - wxMenuItem* Append(int itemid, - const wxString& text, - wxMenu *submenu, - const wxString& help = wxEmptyString) - { - return DoAppend(wxMenuItem::New((wxMenu *)this, itemid, text, help, - wxITEM_NORMAL, submenu)); - } - - void Insert(size_t pos, - int itemid, - const wxString& text, - const wxString& help, - bool isCheckable) - { - Insert(pos, itemid, text, help, isCheckable ? wxITEM_CHECK : wxITEM_NORMAL); - } - - void Prepend(int itemid, - const wxString& text, - const wxString& help, - bool isCheckable) - { - Insert(0u, itemid, text, help, isCheckable); - } - - static void LockAccels(bool locked) - { - ms_locked = locked; - } - -protected: - // virtuals to override in derived classes - // --------------------------------------- - - virtual wxMenuItem* DoAppend(wxMenuItem *item); - virtual wxMenuItem* DoInsert(size_t pos, wxMenuItem *item); - - virtual wxMenuItem *DoRemove(wxMenuItem *item); - virtual bool DoDelete(wxMenuItem *item); - virtual bool DoDestroy(wxMenuItem *item); - - // helpers - // ------- - - // common part of all ctors - void Init(long style); - - // associate the submenu with this menu - void AddSubMenu(wxMenu *submenu); - - wxMenuBar *m_menuBar; // menubar we belong to or NULL - wxMenu *m_menuParent; // parent menu or NULL - - wxString m_title; // the menu title or label - wxMenuItemList m_items; // the list of menu items - - wxWindow *m_invokingWindow; // for popup menus - - long m_style; // combination of wxMENU_XXX flags - - wxEvtHandler *m_eventHandler; // a pluggable in event handler - - static bool ms_locked; - - DECLARE_NO_COPY_CLASS(wxMenuBase) - -public: - -#if wxABI_VERSION >= 20805 - // Returns the stripped label - wxString GetLabelText(int itemid) const { return wxMenuItem::GetLabelFromText(GetLabel(itemid)); } -#endif - -}; - -// ---------------------------------------------------------------------------- -// wxMenuBar -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMenuBarBase : public wxWindow -{ -public: - // default ctor - wxMenuBarBase(); - - // dtor will delete all menus we own - virtual ~wxMenuBarBase(); - - // menu bar construction - // --------------------- - - // append a menu to the end of menubar, return true if ok - virtual bool Append(wxMenu *menu, const wxString& title); - - // insert a menu before the given position into the menubar, return true - // if inserted ok - virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title); - - // menu bar items access - // --------------------- - - // get the number of menus in the menu bar - size_t GetMenuCount() const { return m_menus.GetCount(); } - - // get the menu at given position - wxMenu *GetMenu(size_t pos) const; - - // replace the menu at given position with another one, returns the - // previous menu (which should be deleted by the caller) - virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title); - - // delete the menu at given position from the menu bar, return the pointer - // to the menu (which should be deleted by the caller) - virtual wxMenu *Remove(size_t pos); - - // enable or disable a submenu - virtual void EnableTop(size_t pos, bool enable) = 0; - - // is the menu enabled? - virtual bool IsEnabledTop(size_t WXUNUSED(pos)) const { return true; } - - // get or change the label of the menu at given position - virtual void SetLabelTop(size_t pos, const wxString& label) = 0; - virtual wxString GetLabelTop(size_t pos) const = 0; - - // item search - // ----------- - - // by menu and item names, returns wxNOT_FOUND if not found or id of the - // found item - virtual int FindMenuItem(const wxString& menu, const wxString& item) const; - - // find item by id (in any menu), returns NULL if not found - // - // if menu is !NULL, it will be filled with wxMenu this item belongs to - virtual wxMenuItem* FindItem(int itemid, wxMenu **menu = NULL) const; - - // find menu by its caption, return wxNOT_FOUND on failure - int FindMenu(const wxString& title) const; - - // item access - // ----------- - - // all these functions just use FindItem() and then call an appropriate - // method on it - // - // NB: under MSW, these methods can only be used after the menubar had - // been attached to the frame - - void Enable(int itemid, bool enable); - void Check(int itemid, bool check); - bool IsChecked(int itemid) const; - bool IsEnabled(int itemid) const; - virtual bool IsEnabled() const { return wxWindow::IsEnabled(); } - - void SetLabel(int itemid, const wxString &label); - wxString GetLabel(int itemid) const; - - void SetHelpString(int itemid, const wxString& helpString); - wxString GetHelpString(int itemid) const; - - // implementation helpers - - // get the frame we are attached to (may return NULL) - wxFrame *GetFrame() const { return m_menuBarFrame; } - - // returns true if we're attached to a frame - bool IsAttached() const { return GetFrame() != NULL; } - - // associate the menubar with the frame - virtual void Attach(wxFrame *frame); - - // called before deleting the menubar normally - virtual void Detach(); - - // need to override these ones to avoid virtual function hiding - virtual bool Enable(bool enable = true) { return wxWindow::Enable(enable); } - virtual void SetLabel(const wxString& s) { wxWindow::SetLabel(s); } - virtual wxString GetLabel() const { return wxWindow::GetLabel(); } - - // don't want menu bars to accept the focus by tabbing to them - virtual bool AcceptsFocusFromKeyboard() const { return false; } - - // update all menu item states in all menus - virtual void UpdateMenus(); - -protected: - // the list of all our menus - wxMenuList m_menus; - - // the frame we are attached to (may be NULL) - wxFrame *m_menuBarFrame; - - DECLARE_NO_COPY_CLASS(wxMenuBarBase) - -public: - -#if wxABI_VERSION >= 20805 - // Replacement for SetLabelTop - void SetMenuLabel(size_t pos, const wxString& label) { SetLabelTop(pos, label); } - - // Gets the original label at the top-level of the menubar - // Implemented per port, since we can't have virtual functions in the stable branch. - // wxString GetMenuLabel(size_t pos) const; - - // Get the text only, from the label at the top-level of the menubar - wxString GetMenuLabelText(size_t pos) const; -#endif - -}; - -// ---------------------------------------------------------------------------- -// include the real class declaration -// ---------------------------------------------------------------------------- - -#ifdef wxUSE_BASE_CLASSES_ONLY - #define wxMenuItem wxMenuItemBase -#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__) - #include "wx/motif/menu.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/menu.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/menu.h" -#elif defined(__WXMAC__) - #include "wx/mac/menu.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/menu.h" -#elif defined(__WXPM__) - #include "wx/os2/menu.h" -#endif -#endif // wxUSE_BASE_CLASSES_ONLY/!wxUSE_BASE_CLASSES_ONLY - -#endif // wxUSE_MENUS - -#endif - // _WX_MENU_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/menuitem.h b/desmume/src/windows/wx/include/wx/menuitem.h deleted file mode 100644 index ac26948ba..000000000 --- a/desmume/src/windows/wx/include/wx/menuitem.h +++ /dev/null @@ -1,203 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/menuitem.h -// Purpose: wxMenuItem class -// Author: Vadim Zeitlin -// Modified by: -// Created: 25.10.99 -// RCS-ID: $Id: menuitem.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MENUITEM_H_BASE_ -#define _WX_MENUITEM_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_MENUS - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/object.h" // base class - -// ---------------------------------------------------------------------------- -// forward declarations -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxAcceleratorEntry; -class WXDLLIMPEXP_FWD_CORE wxMenuItem; -class WXDLLIMPEXP_FWD_CORE wxMenu; - -// ---------------------------------------------------------------------------- -// wxMenuItem is an item in the menu which may be either a normal item, a sub -// menu or a separator -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMenuItemBase : public wxObject -{ -public: - // creation - static wxMenuItem *New(wxMenu *parentMenu = (wxMenu *)NULL, - int itemid = wxID_SEPARATOR, - const wxString& text = wxEmptyString, - const wxString& help = wxEmptyString, - wxItemKind kind = wxITEM_NORMAL, - wxMenu *subMenu = (wxMenu *)NULL); - - // destruction: wxMenuItem will delete its submenu - virtual ~wxMenuItemBase(); - - // the menu we're in - wxMenu *GetMenu() const { return m_parentMenu; } - void SetMenu(wxMenu* menu) { m_parentMenu = menu; } - - // get/set id - void SetId(int itemid) { m_id = itemid; } - int GetId() const { return m_id; } - bool IsSeparator() const { return m_id == wxID_SEPARATOR; } - - // the item's text (or name) - // - // NB: the item's text includes the accelerators and mnemonics info (if - // any), i.e. it may contain '&' or '_' or "\t..." and thus is - // different from the item's label which only contains the text shown - // in the menu - virtual void SetText(const wxString& str); - - wxString GetLabel() const { return GetLabelFromText(m_text); } - const wxString& GetText() const { return m_text; } - - // get the label from text (implemented in platform-specific code) - static wxString GetLabelFromText(const wxString& text); - - // what kind of menu item we are - wxItemKind GetKind() const { return m_kind; } - void SetKind(wxItemKind kind) { m_kind = kind; } - - virtual void SetCheckable(bool checkable) { m_kind = checkable ? wxITEM_CHECK : wxITEM_NORMAL; } - bool IsCheckable() const - { return m_kind == wxITEM_CHECK || m_kind == wxITEM_RADIO; } - - bool IsSubMenu() const { return m_subMenu != NULL; } - void SetSubMenu(wxMenu *menu) { m_subMenu = menu; } - wxMenu *GetSubMenu() const { return m_subMenu; } - - // state - virtual void Enable(bool enable = true) { m_isEnabled = enable; } - virtual bool IsEnabled() const { return m_isEnabled; } - - virtual void Check(bool check = true) { m_isChecked = check; } - virtual bool IsChecked() const { return m_isChecked; } - void Toggle() { Check(!m_isChecked); } - - // help string (displayed in the status bar by default) - void SetHelp(const wxString& str); - const wxString& GetHelp() const { return m_help; } - -#if wxUSE_ACCEL - // extract the accelerator from the given menu string, return NULL if none - // found - static wxAcceleratorEntry *GetAccelFromString(const wxString& label); - - // get our accelerator or NULL (caller must delete the pointer) - virtual wxAcceleratorEntry *GetAccel() const; - - // set the accel for this item - this may also be done indirectly with - // SetText() - virtual void SetAccel(wxAcceleratorEntry *accel); -#endif // wxUSE_ACCEL - - // compatibility only, use new functions in the new code - void SetName(const wxString& str) { SetText(str); } - const wxString& GetName() const { return GetText(); } - - static wxMenuItem *New(wxMenu *parentMenu, - int itemid, - const wxString& text, - const wxString& help, - bool isCheckable, - wxMenu *subMenu = (wxMenu *)NULL) - { - return New(parentMenu, itemid, text, help, - isCheckable ? wxITEM_CHECK : wxITEM_NORMAL, subMenu); - } - -protected: - int m_id; // numeric id of the item >= 0 or wxID_ANY or wxID_SEPARATOR - wxMenu *m_parentMenu, // the menu we belong to - *m_subMenu; // our sub menu or NULL - wxString m_text, // label of the item - m_help; // the help string for the item - wxItemKind m_kind; // separator/normal/check/radio item? - bool m_isChecked; // is checked? - bool m_isEnabled; // is enabled? - - // this ctor is for the derived classes only, we're never created directly - wxMenuItemBase(wxMenu *parentMenu = (wxMenu *)NULL, - int itemid = wxID_SEPARATOR, - const wxString& text = wxEmptyString, - const wxString& help = wxEmptyString, - wxItemKind kind = wxITEM_NORMAL, - wxMenu *subMenu = (wxMenu *)NULL); - -private: - // and, if we have one ctor, compiler won't generate a default copy one, so - // declare them ourselves - but don't implement as they shouldn't be used - wxMenuItemBase(const wxMenuItemBase& item); - wxMenuItemBase& operator=(const wxMenuItemBase& item); - -public: - -#if wxABI_VERSION >= 20805 - // Sets the label. This function replaces SetText. - void SetItemLabel(const wxString& str) { SetText(str); } - - // return the item label including any mnemonics and accelerators. - // This used to be called GetText. - // We can't implement this in the base class (no new virtuals in stable branch) - // wxString GetItemLabel() const; - - // return just the text of the item label, without any mnemonics - // This used to be called GetLabel. - wxString GetItemLabelText() const { return GetLabelText(m_text); } - - // return just the text part of the given label. In 2.9 and up, this is implemented in - // platform-specific code, but is now implemented in terms of GetLabelFromText. - static wxString GetLabelText(const wxString& label); -#endif -}; - -// ---------------------------------------------------------------------------- -// include the real class declaration -// ---------------------------------------------------------------------------- - -#ifdef wxUSE_BASE_CLASSES_ONLY - #define wxMenuItem wxMenuItemBase -#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__) - #include "wx/motif/menuitem.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/menuitem.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/menuitem.h" -#elif defined(__WXMAC__) - #include "wx/mac/menuitem.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/menuitem.h" -#elif defined(__WXPM__) - #include "wx/os2/menuitem.h" -#endif -#endif // wxUSE_BASE_CLASSES_ONLY/!wxUSE_BASE_CLASSES_ONLY - -#endif // wxUSE_MENUS - -#endif - // _WX_MENUITEM_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/metafile.h b/desmume/src/windows/wx/include/wx/metafile.h deleted file mode 100644 index 50b836524..000000000 --- a/desmume/src/windows/wx/include/wx/metafile.h +++ /dev/null @@ -1,62 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/metafile.h -// Purpose: wxMetaFile class declaration -// Author: wxWidgets team -// Modified by: -// Created: 13.01.00 -// RCS-ID: $Id: metafile.h 39841 2006-06-26 14:37:34Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_METAFILE_H_BASE_ -#define _WX_METAFILE_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_METAFILE - -// provide synonyms for all metafile classes -#define wxMetaFile wxMetafile -#define wxMetaFileDC wxMetafileDC -#define wxMetaFileDataObject wxMetafileDataObject - -#define wxMakeMetaFilePlaceable wxMakeMetafilePlaceable - -#if defined(__WXMSW__) - #if wxUSE_ENH_METAFILE - #if defined(__WXPALMOS__) - #include "wx/palmos/enhmeta.h" - #else - #include "wx/msw/enhmeta.h" - #endif - - #if wxUSE_WIN_METAFILES_ALWAYS - // use normal metafiles as well - #include "wx/msw/metafile.h" - #else // also map all metafile classes to enh metafile - typedef wxEnhMetaFile wxMetafile; - typedef wxEnhMetaFileDC wxMetafileDC; - #if wxUSE_DRAG_AND_DROP - typedef wxEnhMetaFileDataObject wxMetafileDataObject; - #endif - - // this flag will be set if wxMetafile class is wxEnhMetaFile - #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 - #endif -#elif defined(__WXPM__) - #include "wx/os2/metafile.h" -#elif defined(__WXMAC__) - #include "wx/mac/metafile.h" -#endif - -#endif // wxUSE_METAFILE - -#endif // _WX_METAFILE_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/mimetype.h b/desmume/src/windows/wx/include/wx/mimetype.h deleted file mode 100644 index 2ebf99618..000000000 --- a/desmume/src/windows/wx/include/wx/mimetype.h +++ /dev/null @@ -1,453 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/mimetype.h -// Purpose: classes and functions to manage MIME types -// Author: Vadim Zeitlin -// Modified by: -// Chris Elliott (biol75@york.ac.uk) 5 Dec 00: write support for Win32 -// Created: 23.09.98 -// RCS-ID: $Id: mimetype.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence (part of wxExtra library) -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MIMETYPE_H_ -#define _WX_MIMETYPE_H_ - -// ---------------------------------------------------------------------------- -// headers and such -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_MIMETYPE - -// the things we really need -#include "wx/string.h" -#include "wx/dynarray.h" -#include "wx/arrstr.h" - -// fwd decls -class WXDLLIMPEXP_FWD_BASE wxIconLocation; -class WXDLLIMPEXP_FWD_BASE wxFileTypeImpl; -class WXDLLIMPEXP_FWD_BASE wxMimeTypesManagerImpl; - -// these constants define the MIME informations source under UNIX and are used -// by wxMimeTypesManager::Initialize() -enum wxMailcapStyle -{ - wxMAILCAP_STANDARD = 1, - wxMAILCAP_NETSCAPE = 2, - wxMAILCAP_KDE = 4, - wxMAILCAP_GNOME = 8, - - wxMAILCAP_ALL = 15 -}; - -/* - TODO: would it be more convenient to have this class? - -class WXDLLIMPEXP_BASE wxMimeType : public wxString -{ -public: - // all string ctors here - - wxString GetType() const { return BeforeFirst(_T('/')); } - wxString GetSubType() const { return AfterFirst(_T('/')); } - - void SetSubType(const wxString& subtype) - { - *this = GetType() + _T('/') + subtype; - } - - bool Matches(const wxMimeType& wildcard) - { - // implement using wxMimeTypesManager::IsOfType() - } -}; - -*/ - -// wxMimeTypeCommands stores the verbs defined for the given MIME type with -// their values -class WXDLLIMPEXP_BASE wxMimeTypeCommands -{ -public: - wxMimeTypeCommands() {} - - wxMimeTypeCommands(const wxArrayString& verbs, - const wxArrayString& commands) - : m_verbs(verbs), - m_commands(commands) - { - } - - // add a new verb with the command or replace the old value - void AddOrReplaceVerb(const wxString& verb, const wxString& cmd); - void Add(const wxString& s) - { - m_verbs.Add(s.BeforeFirst(wxT('='))); - m_commands.Add(s.AfterFirst(wxT('='))); - } - - // access the commands - size_t GetCount() const { return m_verbs.GetCount(); } - const wxString& GetVerb(size_t n) const { return m_verbs[n]; } - const wxString& GetCmd(size_t n) const { return m_commands[n]; } - - bool HasVerb(const wxString& verb) const - { return m_verbs.Index(verb) != wxNOT_FOUND; } - - // returns empty string and wxNOT_FOUND in idx if no such verb - wxString GetCommandForVerb(const wxString& verb, size_t *idx = NULL) const; - - // get a "verb=command" string - wxString GetVerbCmd(size_t n) const; - -private: - wxArrayString m_verbs; - wxArrayString m_commands; -}; - -// ---------------------------------------------------------------------------- -// wxFileTypeInfo: static container of information accessed via wxFileType. -// -// This class is used with wxMimeTypesManager::AddFallbacks() and Associate() -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFileTypeInfo -{ -public: - // ctors - // a normal item - wxFileTypeInfo(const wxChar *mimeType, - const wxChar *openCmd, - const wxChar *printCmd, - const wxChar *desc, - // the other parameters form a NULL terminated list of - // extensions - ...); - - // the array elements correspond to the parameters of the ctor above in - // the same order - wxFileTypeInfo(const wxArrayString& sArray); - - // invalid item - use this to terminate the array passed to - // wxMimeTypesManager::AddFallbacks - wxFileTypeInfo() { } - - // test if this object can be used - bool IsValid() const { return !m_mimeType.empty(); } - - // setters - // set the icon info - void SetIcon(const wxString& iconFile, int iconIndex = 0) - { - m_iconFile = iconFile; - m_iconIndex = iconIndex; - } - // set the short desc - void SetShortDesc(const wxString& shortDesc) { m_shortDesc = shortDesc; } - - // accessors - // get the MIME type - const wxString& GetMimeType() const { return m_mimeType; } - // get the open command - const wxString& GetOpenCommand() const { return m_openCmd; } - // get the print command - const wxString& GetPrintCommand() const { return m_printCmd; } - // get the short description (only used under Win32 so far) - const wxString& GetShortDesc() const { return m_shortDesc; } - // get the long, user visible description - const wxString& GetDescription() const { return m_desc; } - // get the array of all extensions - const wxArrayString& GetExtensions() const { return m_exts; } - size_t GetExtensionsCount() const {return m_exts.GetCount(); } - // get the icon info - const wxString& GetIconFile() const { return m_iconFile; } - int GetIconIndex() const { return m_iconIndex; } - -private: - wxString m_mimeType, // the MIME type in "type/subtype" form - m_openCmd, // command to use for opening the file (%s allowed) - m_printCmd, // command to use for printing the file (%s allowed) - m_shortDesc, // a short string used in the registry - m_desc; // a free form description of this file type - - // icon stuff - wxString m_iconFile; // the file containing the icon - int m_iconIndex; // icon index in this file - - wxArrayString m_exts; // the extensions which are mapped on this filetype - - -#if 0 // TODO - // the additional (except "open" and "print") command names and values - wxArrayString m_commandNames, - m_commandValues; -#endif // 0 -}; - -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxFileTypeInfo, wxArrayFileTypeInfo, - WXDLLIMPEXP_BASE); - -// ---------------------------------------------------------------------------- -// wxFileType: gives access to all information about the files of given type. -// -// This class holds information about a given "file type". File type is the -// same as MIME type under Unix, but under Windows it corresponds more to an -// extension than to MIME type (in fact, several extensions may correspond to a -// file type). This object may be created in many different ways and depending -// on how it was created some fields may be unknown so the return value of all -// the accessors *must* be checked! -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFileType -{ -friend class WXDLLIMPEXP_FWD_BASE wxMimeTypesManagerImpl; // it has access to m_impl - -public: - // An object of this class must be passed to Get{Open|Print}Command. The - // default implementation is trivial and doesn't know anything at all about - // parameters, only filename and MIME type are used (so it's probably ok for - // Windows where %{param} is not used anyhow) - class MessageParameters - { - public: - // ctors - MessageParameters() { } - MessageParameters(const wxString& filename, - const wxString& mimetype = wxEmptyString) - : m_filename(filename), m_mimetype(mimetype) { } - - // accessors (called by GetOpenCommand) - // filename - const wxString& GetFileName() const { return m_filename; } - // mime type - const wxString& GetMimeType() const { return m_mimetype; } - - // override this function in derived class - virtual wxString GetParamValue(const wxString& WXUNUSED(name)) const - { return wxEmptyString; } - - // virtual dtor as in any base class - virtual ~MessageParameters() { } - - protected: - wxString m_filename, m_mimetype; - }; - - // ctor from static data - wxFileType(const wxFileTypeInfo& ftInfo); - - // accessors: all of them return true if the corresponding information - // could be retrieved/found, false otherwise (and in this case all [out] - // parameters are unchanged) - // return the MIME type for this file type - bool GetMimeType(wxString *mimeType) const; - bool GetMimeTypes(wxArrayString& mimeTypes) const; - // fill passed in array with all extensions associated with this file - // type - bool GetExtensions(wxArrayString& extensions); - // get the icon corresponding to this file type and of the given size - bool GetIcon(wxIconLocation *iconloc) const; - bool GetIcon(wxIconLocation *iconloc, - const MessageParameters& params) const; - // get a brief file type description ("*.txt" => "text document") - bool GetDescription(wxString *desc) const; - - // get the command to be used to open/print the given file. - // get the command to execute the file of given type - bool GetOpenCommand(wxString *openCmd, - const MessageParameters& params) const; - // a simpler to use version of GetOpenCommand() -- it only takes the - // filename and returns an empty string on failure - wxString GetOpenCommand(const wxString& filename) const; - // get the command to print the file of given type - bool GetPrintCommand(wxString *printCmd, - const MessageParameters& params) const; - - - // return the number of commands defined for this file type, 0 if none - size_t GetAllCommands(wxArrayString *verbs, wxArrayString *commands, - const wxFileType::MessageParameters& params) const; - - // set an arbitrary command, ask confirmation if it already exists and - // overwriteprompt is true - bool SetCommand(const wxString& cmd, const wxString& verb, - bool overwriteprompt = true); - - bool SetDefaultIcon(const wxString& cmd = wxEmptyString, int index = 0); - - - // remove the association for this filetype from the system MIME database: - // notice that it will only work if the association is defined in the user - // file/registry part, we will never modify the system-wide settings - bool Unassociate(); - - // operations - // expand a string in the format of GetOpenCommand (which may contain - // '%s' and '%t' format specificators for the file name and mime type - // and %{param} constructions). - static wxString ExpandCommand(const wxString& command, - const MessageParameters& params); - - // dtor (not virtual, shouldn't be derived from) - ~wxFileType(); - -private: - // default ctor is private because the user code never creates us - wxFileType(); - - // no copy ctor/assignment operator - wxFileType(const wxFileType&); - wxFileType& operator=(const wxFileType&); - - // the static container of wxFileType data: if it's not NULL, it means that - // this object is used as fallback only - const wxFileTypeInfo *m_info; - - // the object which implements the real stuff like reading and writing - // to/from system MIME database - wxFileTypeImpl *m_impl; -}; - -//---------------------------------------------------------------------------- -// wxMimeTypesManagerFactory -//---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMimeTypesManagerFactory -{ -public: - wxMimeTypesManagerFactory() {} - virtual ~wxMimeTypesManagerFactory() {} - - virtual wxMimeTypesManagerImpl *CreateMimeTypesManagerImpl(); - - static void Set( wxMimeTypesManagerFactory *factory ); - static wxMimeTypesManagerFactory *Get(); - -private: - static wxMimeTypesManagerFactory *m_factory; -}; - -// ---------------------------------------------------------------------------- -// wxMimeTypesManager: interface to system MIME database. -// -// This class accesses the information about all known MIME types and allows -// the application to retrieve information (including how to handle data of -// given type) about them. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMimeTypesManager -{ -public: - // static helper functions - // ----------------------- - - // check if the given MIME type is the same as the other one: the - // second argument may contain wildcards ('*'), but not the first. If - // the types are equal or if the mimeType matches wildcard the function - // returns true, otherwise it returns false - static bool IsOfType(const wxString& mimeType, const wxString& wildcard); - - // ctor - wxMimeTypesManager(); - - // NB: the following 2 functions are for Unix only and don't do anything - // elsewhere - - // loads data from standard files according to the mailcap styles - // specified: this is a bitwise OR of wxMailcapStyle values - // - // use the extraDir parameter if you want to look for files in another - // directory - void Initialize(int mailcapStyle = wxMAILCAP_ALL, - const wxString& extraDir = wxEmptyString); - - // and this function clears all the data from the manager - void ClearData(); - - // Database lookup: all functions return a pointer to wxFileType object - // whose methods may be used to query it for the information you're - // interested in. If the return value is !NULL, caller is responsible for - // deleting it. - // get file type from file extension - wxFileType *GetFileTypeFromExtension(const wxString& ext); - // get file type from MIME type (in format <category>/<format>) - wxFileType *GetFileTypeFromMimeType(const wxString& mimeType); - - // other operations: return true if there were no errors or false if there - // were some unrecognized entries (the good entries are always read anyhow) - // - // FIXME: These ought to be private ?? - - // read in additional file (the standard ones are read automatically) - // in mailcap format (see mimetype.cpp for description) - // - // 'fallback' parameter may be set to true to avoid overriding the - // settings from other, previously parsed, files by this one: normally, - // the files read most recently would override the older files, but with - // fallback == true this won't happen - - bool ReadMailcap(const wxString& filename, bool fallback = false); - // read in additional file in mime.types format - bool ReadMimeTypes(const wxString& filename); - - // enumerate all known MIME types - // - // returns the number of retrieved file types - size_t EnumAllFileTypes(wxArrayString& mimetypes); - - // these functions can be used to provide default values for some of the - // MIME types inside the program itself (you may also use - // ReadMailcap(filenameWithDefaultTypes, true /* use as fallback */) to - // achieve the same goal, but this requires having this info in a file). - // - // The filetypes array should be terminated by either NULL entry or an - // invalid wxFileTypeInfo (i.e. the one created with default ctor) - void AddFallbacks(const wxFileTypeInfo *filetypes); - void AddFallback(const wxFileTypeInfo& ft) { m_fallbacks.Add(ft); } - - // create or remove associations - - // create a new association using the fields of wxFileTypeInfo (at least - // the MIME type and the extension should be set) - // if the other fields are empty, the existing values should be left alone - wxFileType *Associate(const wxFileTypeInfo& ftInfo); - - // undo Associate() - bool Unassociate(wxFileType *ft) ; - - // dtor (not virtual, shouldn't be derived from) - ~wxMimeTypesManager(); - -private: - // no copy ctor/assignment operator - wxMimeTypesManager(const wxMimeTypesManager&); - wxMimeTypesManager& operator=(const wxMimeTypesManager&); - - // the fallback info which is used if the information is not found in the - // real system database - wxArrayFileTypeInfo m_fallbacks; - - // the object working with the system MIME database - wxMimeTypesManagerImpl *m_impl; - - // if m_impl is NULL, create one - void EnsureImpl(); - - friend class wxMimeTypeCmnModule; -}; - - -// ---------------------------------------------------------------------------- -// global variables -// ---------------------------------------------------------------------------- - -// the default mime manager for wxWidgets programs -extern WXDLLIMPEXP_DATA_BASE(wxMimeTypesManager *) wxTheMimeTypesManager; - -#endif // wxUSE_MIMETYPE - -#endif - //_WX_MIMETYPE_H_ diff --git a/desmume/src/windows/wx/include/wx/minifram.h b/desmume/src/windows/wx/include/wx/minifram.h deleted file mode 100644 index b05574a65..000000000 --- a/desmume/src/windows/wx/include/wx/minifram.h +++ /dev/null @@ -1,43 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/minifram.h -// Purpose: wxMiniFrame base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: minifram.h 49299 2007-10-21 18:07:29Z PC $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MINIFRAM_H_BASE_ -#define _WX_MINIFRAM_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_MINIFRAME - -#if defined(__WXPALMOS__) -#include "wx/palmos/minifram.h" -#elif defined(__WXMSW__) -#include "wx/msw/minifram.h" -#elif defined(__WXMOTIF__) -#include "wx/motif/minifram.h" -#elif defined(__WXGTK20__) -#include "wx/gtk/minifram.h" -#elif defined(__WXGTK__) -#include "wx/gtk1/minifram.h" -#elif defined(__WXX11__) -#include "wx/x11/minifram.h" -#elif defined(__WXMAC__) -#include "wx/mac/minifram.h" -#elif defined(__WXPM__) -#include "wx/os2/minifram.h" -#else -// TODO: it seems that wxMiniFrame could be just defined here generically -// instead of having all the above port-specific headers -#include "wx/frame.h" -typedef wxFrame wxMiniFrame; -#endif - -#endif // wxUSE_MINIFRAME -#endif // _WX_MINIFRAM_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/module.h b/desmume/src/windows/wx/include/wx/module.h deleted file mode 100644 index 7394f4e61..000000000 --- a/desmume/src/windows/wx/include/wx/module.h +++ /dev/null @@ -1,103 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/module.h -// Purpose: Modules handling -// Author: Wolfram Gloger/adapted by Guilhem Lavaux -// Modified by: -// Created: 04/11/98 -// RCS-ID: $Id: module.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Wolfram Gloger and Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MODULE_H_ -#define _WX_MODULE_H_ - -#include "wx/object.h" -#include "wx/list.h" -#include "wx/dynarray.h" - -// declare a linked list of modules -class WXDLLIMPEXP_FWD_BASE wxModule; -WX_DECLARE_USER_EXPORTED_LIST(wxModule, wxModuleList, WXDLLIMPEXP_BASE); - -// and an array of class info objects -WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxClassInfo *, wxArrayClassInfo, - class WXDLLIMPEXP_BASE); - - -// declaring a class derived from wxModule will automatically create an -// instance of this class on program startup, call its OnInit() method and call -// OnExit() on program termination (but only if OnInit() succeeded) -class WXDLLIMPEXP_BASE wxModule : public wxObject -{ -public: - wxModule() {} - virtual ~wxModule() {} - - // if module init routine returns false the application - // will fail to startup - - bool Init() { return OnInit(); } - void Exit() { OnExit(); } - - // Override both of these - - // called on program startup - - virtual bool OnInit() = 0; - - // called just before program termination, but only if OnInit() - // succeeded - - virtual void OnExit() = 0; - - static void RegisterModule(wxModule *module); - static void RegisterModules(); - static bool InitializeModules(); - static void CleanUpModules() { DoCleanUpModules(m_modules); } - - // used by wxObjectLoader when unloading shared libs's - - static void UnregisterModule(wxModule *module); - -protected: - static wxModuleList m_modules; - - // the function to call from constructor of a deriving class add module - // dependency which will be initialized before the module and unloaded - // after that - void AddDependency(wxClassInfo *dep) - { - wxCHECK_RET( dep, _T("NULL module dependency") ); - - m_dependencies.Add(dep); - } - -private: - // initialize module and Append it to initializedModules list recursively - // calling itself to satisfy module dependencies if needed - static bool - DoInitializeModule(wxModule *module, wxModuleList &initializedModules); - - // cleanup the modules in the specified list (which may not contain all - // modules if we're called during initialization because not all modules - // could be initialized) and also empty m_modules itself - static void DoCleanUpModules(const wxModuleList& modules); - - - // module dependencies: contains - wxArrayClassInfo m_dependencies; - - // used internally while initiliazing/cleaning up modules - enum - { - State_Registered, // module registered but not initialized yet - State_Initializing, // we're initializing this module but not done yet - State_Initialized // module initialized successfully - } m_state; - - - DECLARE_CLASS(wxModule) -}; - -#endif // _WX_MODULE_H_ diff --git a/desmume/src/windows/wx/include/wx/msdos/apptrait.h b/desmume/src/windows/wx/include/wx/msdos/apptrait.h deleted file mode 100644 index f6693ae6e..000000000 --- a/desmume/src/windows/wx/include/wx/msdos/apptrait.h +++ /dev/null @@ -1,27 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msdos/apptrait.h -// Author: Michael Wetherell -// RCS-ID: $Id: apptrait.h 40807 2006-08-24 21:18:18Z MW $ -// Copyright: (c) 2006 Michael Wetherell -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSDOS_APPTRAIT_H_ -#define _WX_MSDOS_APPTRAIT_H_ - -class wxConsoleAppTraits : public wxConsoleAppTraitsBase -{ -public: -}; - -#if wxUSE_GUI - -class wxGUIAppTraits : public wxGUIAppTraitsBase -{ -public: - virtual wxPortId GetToolkitVersion(int *majVer, int *minVer) const; -}; - -#endif // wxUSE_GUI - -#endif // _WX_MSDOS_APPTRAIT_H_ diff --git a/desmume/src/windows/wx/include/wx/msdos/mimetype.h b/desmume/src/windows/wx/include/wx/msdos/mimetype.h deleted file mode 100644 index 587736e98..000000000 --- a/desmume/src/windows/wx/include/wx/msdos/mimetype.h +++ /dev/null @@ -1,115 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msdos/mimetype.h -// Purpose: classes and functions to manage MIME types -// Author: Vadim Zeitlin -// Modified by: -// Created: 23.09.98 -// RCS-ID: $Id: mimetype.h 39763 2006-06-16 09:31:12Z ABX $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence (part of wxExtra library) -///////////////////////////////////////////////////////////////////////////// - -#ifndef _MIMETYPE_IMPL_H -#define _MIMETYPE_IMPL_H - -#include "wx/defs.h" -#include "wx/mimetype.h" - - -class wxMimeTypesManagerImpl -{ -public : - wxMimeTypesManagerImpl() { } - - // load all data into memory - done when it is needed for the first time - void Initialize(int mailcapStyles = wxMAILCAP_STANDARD, - const wxString& extraDir = wxEmptyString); - - // and delete the data here - void ClearData(); - - // implement containing class functions - wxFileType *GetFileTypeFromExtension(const wxString& ext); - wxFileType *GetOrAllocateFileTypeFromExtension(const wxString& ext) ; - wxFileType *GetFileTypeFromMimeType(const wxString& mimeType); - - size_t EnumAllFileTypes(wxArrayString& mimetypes); - - // this are NOPs under MacOS - bool ReadMailcap(const wxString& WXUNUSED(filename), bool WXUNUSED(fallback) = TRUE) { return TRUE; } - bool ReadMimeTypes(const wxString& WXUNUSED(filename)) { return TRUE; } - - void AddFallback(const wxFileTypeInfo& ft) { m_fallbacks.Add(ft); } - - // create a new filetype association - wxFileType *Associate(const wxFileTypeInfo& ftInfo); - // remove association - bool Unassociate(wxFileType *ft); - - // create a new filetype with the given name and extension - wxFileType *CreateFileType(const wxString& filetype, const wxString& ext); - -private: - wxArrayFileTypeInfo m_fallbacks; -}; - -class wxFileTypeImpl -{ -public: - // initialization functions - // this is used to construct a list of mimetypes which match; - // if built with GetFileTypeFromMimetype index 0 has the exact match and - // index 1 the type / * match - // if built with GetFileTypeFromExtension, index 0 has the mimetype for - // the first extension found, index 1 for the second and so on - - void Init(wxMimeTypesManagerImpl *manager, size_t index) - { m_manager = manager; m_index.Add(index); } - - // initialize us with our file type name - void SetFileType(const wxString& strFileType) - { m_strFileType = strFileType; } - void SetExt(const wxString& ext) - { m_ext = ext; } - - // implement accessor functions - bool GetExtensions(wxArrayString& extensions); - bool GetMimeType(wxString *mimeType) const; - bool GetMimeTypes(wxArrayString& mimeTypes) const; - bool GetIcon(wxIconLocation *iconLoc) const; - bool GetDescription(wxString *desc) const; - bool GetOpenCommand(wxString *openCmd, - const wxFileType::MessageParameters&) const - { return GetCommand(openCmd, "open"); } - bool GetPrintCommand(wxString *printCmd, - const wxFileType::MessageParameters&) const - { return GetCommand(printCmd, "print"); } - - size_t GetAllCommands(wxArrayString * verbs, wxArrayString * commands, - const wxFileType::MessageParameters& params) const; - - // remove the record for this file type - // probably a mistake to come here, use wxMimeTypesManager.Unassociate (ft) instead - bool Unassociate(wxFileType *ft) - { - return m_manager->Unassociate(ft); - } - - // set an arbitrary command, ask confirmation if it already exists and - // overwriteprompt is TRUE - bool SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt = TRUE); - bool SetDefaultIcon(const wxString& strIcon = wxEmptyString, int index = 0); - - private: - // helper function - bool GetCommand(wxString *command, const char *verb) const; - - wxMimeTypesManagerImpl *m_manager; - wxArrayInt m_index; // in the wxMimeTypesManagerImpl arrays - wxString m_strFileType, m_ext; -}; - -#endif - //_MIMETYPE_H - -/* vi: set cin tw=80 ts=4 sw=4: */ diff --git a/desmume/src/windows/wx/include/wx/msgdlg.h b/desmume/src/windows/wx/include/wx/msgdlg.h deleted file mode 100644 index d22572600..000000000 --- a/desmume/src/windows/wx/include/wx/msgdlg.h +++ /dev/null @@ -1,79 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msgdlgg.h -// Purpose: common header and base class for wxMessageDialog -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: msgdlg.h 49765 2007-11-09 18:32:38Z DE $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSGDLG_H_BASE_ -#define _WX_MSGDLG_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_MSGDLG - -class WXDLLEXPORT wxMessageDialogBase -{ -protected: - // common validation of wxMessageDialog style - void SetMessageDialogStyle(long style) - { - wxASSERT_MSG( ((style & wxYES_NO) == wxYES_NO) || ((style & wxYES_NO) == 0), - _T("wxYES and wxNO may only be used together in wxMessageDialog") ); - - wxASSERT_MSG( (style & wxID_OK) != wxID_OK, - _T("wxMessageBox: Did you mean wxOK (and not wxID_OK)?") ); - - m_dialogStyle = style; - } - inline long GetMessageDialogStyle() const - { - return m_dialogStyle; - } - -private: - long m_dialogStyle; -}; - -#if defined(__WX_COMPILING_MSGDLGG_CPP__) -#include "wx/generic/msgdlgg.h" -#elif defined(__WXUNIVERSAL__) || defined(__WXGPE__) -#include "wx/generic/msgdlgg.h" -#elif defined(__WXPALMOS__) -#include "wx/palmos/msgdlg.h" -#elif defined(__WXMSW__) -#include "wx/msw/msgdlg.h" -#elif defined(__WXMOTIF__) -#include "wx/motif/msgdlg.h" -#elif defined(__WXGTK20__) -#include "wx/gtk/msgdlg.h" -#elif defined(__WXGTK__) -#include "wx/generic/msgdlgg.h" -#elif defined(__WXGTK__) -#include "wx/generic/msgdlgg.h" -#elif defined(__WXMAC__) -#include "wx/mac/msgdlg.h" -#elif defined(__WXCOCOA__) -#include "wx/cocoa/msgdlg.h" -#elif defined(__WXPM__) -#include "wx/os2/msgdlg.h" -#endif - -// ---------------------------------------------------------------------------- -// wxMessageBox: the simplest way to use wxMessageDialog -// ---------------------------------------------------------------------------- - -int WXDLLEXPORT wxMessageBox(const wxString& message, - const wxString& caption = wxMessageBoxCaptionStr, - long style = wxOK | wxCENTRE, - wxWindow *parent = NULL, - int x = wxDefaultCoord, int y = wxDefaultCoord); - -#endif // wxUSE_MSGDLG - -#endif - // _WX_MSGDLG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/msgout.h b/desmume/src/windows/wx/include/wx/msgout.h deleted file mode 100644 index 6130849c1..000000000 --- a/desmume/src/windows/wx/include/wx/msgout.h +++ /dev/null @@ -1,113 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msgout.h -// Purpose: wxMessageOutput class. Shows a message to the user -// Author: Mattia Barbon -// Modified by: -// Created: 17.07.02 -// RCS-ID: $Id: msgout.h 35690 2005-09-25 20:23:30Z VZ $ -// Copyright: (c) Mattia Barbon -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSGOUT_H_ -#define _WX_MSGOUT_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" -#include "wx/wxchar.h" - -// ---------------------------------------------------------------------------- -// wxMessageOutput is a class abstracting formatted output target, i.e. -// something you can printf() to -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMessageOutput -{ -public: - virtual ~wxMessageOutput() { } - - // show a message to the user - virtual void Printf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2 = 0; - - // gets the current wxMessageOutput object (may be NULL during - // initialization or shutdown) - static wxMessageOutput* Get(); - - // sets the global wxMessageOutput instance; returns the previous one - static wxMessageOutput* Set(wxMessageOutput* msgout); - -private: - static wxMessageOutput* ms_msgOut; -}; - -// ---------------------------------------------------------------------------- -// implementation showing the message to the user in "best" possible way: uses -// native message box if available (currently only under Windows) and stderr -// otherwise; unlike wxMessageOutputMessageBox this class is always safe to use -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMessageOutputBest : public wxMessageOutput -{ -public: - wxMessageOutputBest() { } - - virtual void Printf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; -}; - -// ---------------------------------------------------------------------------- -// implementation which sends output to stderr -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMessageOutputStderr : public wxMessageOutput -{ -public: - wxMessageOutputStderr() { } - - virtual void Printf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; -}; - -// ---------------------------------------------------------------------------- -// implementation which shows output in a message box -// ---------------------------------------------------------------------------- - -#if wxUSE_GUI - -class WXDLLIMPEXP_CORE wxMessageOutputMessageBox : public wxMessageOutput -{ -public: - wxMessageOutputMessageBox() { } - - virtual void Printf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; -}; - -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// implementation using the native way of outputting debug messages -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMessageOutputDebug : public wxMessageOutput -{ -public: - wxMessageOutputDebug() { } - - virtual void Printf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; -}; - -// ---------------------------------------------------------------------------- -// implementation using wxLog (mainly for backwards compatibility) -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMessageOutputLog : public wxMessageOutput -{ -public: - wxMessageOutputLog() { } - - virtual void Printf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; -}; - -#endif - // _WX_MSGOUT_H_ diff --git a/desmume/src/windows/wx/include/wx/mstream.h b/desmume/src/windows/wx/include/wx/mstream.h deleted file mode 100644 index 19329a963..000000000 --- a/desmume/src/windows/wx/include/wx/mstream.h +++ /dev/null @@ -1,92 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/mstream.h -// Purpose: Memory stream classes -// Author: Guilhem Lavaux -// Modified by: -// Created: 11/07/98 -// RCS-ID: $Id: mstream.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WXMMSTREAM_H__ -#define _WX_WXMMSTREAM_H__ - -#include "wx/defs.h" - -#if wxUSE_STREAMS - -#include "wx/stream.h" - -class WXDLLIMPEXP_FWD_BASE wxMemoryOutputStream; - -class WXDLLIMPEXP_BASE wxMemoryInputStream : public wxInputStream -{ -public: - wxMemoryInputStream(const void *data, size_t length); - wxMemoryInputStream(const wxMemoryOutputStream& stream); - virtual ~wxMemoryInputStream(); - virtual wxFileOffset GetLength() const { return m_length; } - virtual bool IsSeekable() const { return true; } - - char Peek(); - - wxStreamBuffer *GetInputStreamBuffer() const { return m_i_streambuf; } - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, compatibility only - wxDEPRECATED( wxStreamBuffer *InputStreamBuffer() const ); -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - wxStreamBuffer *m_i_streambuf; - - size_t OnSysRead(void *buffer, size_t nbytes); - wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); - wxFileOffset OnSysTell() const; - -private: - size_t m_length; - - DECLARE_NO_COPY_CLASS(wxMemoryInputStream) -}; - -class WXDLLIMPEXP_BASE wxMemoryOutputStream : public wxOutputStream -{ -public: - // if data is !NULL it must be allocated with malloc() - wxMemoryOutputStream(void *data = NULL, size_t length = 0); - virtual ~wxMemoryOutputStream(); - virtual wxFileOffset GetLength() const { return m_o_streambuf->GetLastAccess(); } - virtual bool IsSeekable() const { return true; } - - size_t CopyTo(void *buffer, size_t len) const; - - wxStreamBuffer *GetOutputStreamBuffer() const { return m_o_streambuf; } - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, compatibility only - wxDEPRECATED( wxStreamBuffer *OutputStreamBuffer() const ); -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - wxStreamBuffer *m_o_streambuf; - -protected: - size_t OnSysWrite(const void *buffer, size_t nbytes); - wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); - wxFileOffset OnSysTell() const; - - DECLARE_NO_COPY_CLASS(wxMemoryOutputStream) -}; - -#if WXWIN_COMPATIBILITY_2_6 - inline wxStreamBuffer *wxMemoryInputStream::InputStreamBuffer() const { return m_i_streambuf; } - inline wxStreamBuffer *wxMemoryOutputStream::OutputStreamBuffer() const { return m_o_streambuf; } -#endif // WXWIN_COMPATIBILITY_2_6 - -#endif - // wxUSE_STREAMS - -#endif - // _WX_WXMMSTREAM_H__ diff --git a/desmume/src/windows/wx/include/wx/msw/accel.h b/desmume/src/windows/wx/include/wx/msw/accel.h deleted file mode 100644 index 284a6f136..000000000 --- a/desmume/src/windows/wx/include/wx/msw/accel.h +++ /dev/null @@ -1,46 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/accel.h -// Purpose: wxAcceleratorTable class -// Author: Julian Smart -// Modified by: -// Created: 31/7/98 -// RCS-ID: $Id: accel.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ACCEL_H_ -#define _WX_ACCEL_H_ - -class WXDLLIMPEXP_FWD_CORE wxWindow; - -// ---------------------------------------------------------------------------- -// the accel table has all accelerators for a given window or menu -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxAcceleratorTable : public wxObject -{ -public: - // default ctor - wxAcceleratorTable() { } - - // load from .rc resource (Windows specific) - wxAcceleratorTable(const wxString& resource); - - // initialize from array - wxAcceleratorTable(int n, const wxAcceleratorEntry entries[]); - - bool Ok() const { return IsOk(); } - bool IsOk() const; - void SetHACCEL(WXHACCEL hAccel); - WXHACCEL GetHACCEL() const; - - // translate the accelerator, return true if done - bool Translate(wxWindow *window, WXMSG *msg) const; - -private: - DECLARE_DYNAMIC_CLASS(wxAcceleratorTable) -}; - -#endif - // _WX_ACCEL_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/amd64.manifest b/desmume/src/windows/wx/include/wx/msw/amd64.manifest deleted file mode 100644 index 60db9e315..000000000 --- a/desmume/src/windows/wx/include/wx/msw/amd64.manifest +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="0.64.1.0" - processorArchitecture="amd64" - name="Controls" - type="win32" -/> -<description>wxWindows application</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="amd64" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/desmume/src/windows/wx/include/wx/msw/app.h b/desmume/src/windows/wx/include/wx/msw/app.h deleted file mode 100644 index 196600e58..000000000 --- a/desmume/src/windows/wx/include/wx/msw/app.h +++ /dev/null @@ -1,147 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: app.h -// Purpose: wxApp class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: app.h 53157 2008-04-13 12:17:37Z VS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_APP_H_ -#define _WX_APP_H_ - -#include "wx/event.h" -#include "wx/icon.h" - -class WXDLLIMPEXP_FWD_CORE wxFrame; -class WXDLLIMPEXP_FWD_CORE wxWindow; -class WXDLLIMPEXP_FWD_CORE wxApp; -class WXDLLIMPEXP_FWD_CORE wxKeyEvent; -class WXDLLIMPEXP_FWD_BASE wxLog; - -// Represents the application. Derive OnInit and declare -// a new App object to start application -class WXDLLEXPORT wxApp : public wxAppBase -{ - DECLARE_DYNAMIC_CLASS(wxApp) - -public: - wxApp(); - virtual ~wxApp(); - - // override base class (pure) virtuals - virtual bool Initialize(int& argc, wxChar **argv); - virtual void CleanUp(); - - virtual bool Yield(bool onlyIfNeeded = false); - virtual void WakeUpIdle(); - - virtual void SetPrintMode(int mode) { m_printMode = mode; } - virtual int GetPrintMode() const { return m_printMode; } - - // implementation only - void OnIdle(wxIdleEvent& event); - void OnEndSession(wxCloseEvent& event); - void OnQueryEndSession(wxCloseEvent& event); - -#if wxUSE_EXCEPTIONS - virtual bool OnExceptionInMainLoop(); -#endif // wxUSE_EXCEPTIONS - - // deprecated functions, use wxEventLoop directly instead -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( void DoMessage(WXMSG *pMsg) ); - wxDEPRECATED( bool DoMessage() ); - wxDEPRECATED( bool ProcessMessage(WXMSG* pMsg) ); -#endif // WXWIN_COMPATIBILITY_2_4 - -protected: - int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT - -public: - // Implementation - static bool RegisterWindowClasses(); - static bool UnregisterWindowClasses(); - -#if wxUSE_RICHEDIT - // initialize the richedit DLL of (at least) given version, return true if - // ok (Win95 has version 1, Win98/NT4 has 1 and 2, W2K has 3) - static bool InitRichEdit(int version = 2); -#endif // wxUSE_RICHEDIT - - // returns 400, 470, 471 for comctl32.dll 4.00, 4.70, 4.71 or 0 if it - // wasn't found at all - static int GetComCtl32Version(); - - // the SW_XXX value to be used for the frames opened by the application - // (currently seems unused which is a bug -- TODO) - static int m_nCmdShow; - -protected: - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxApp) -}; - -// ---------------------------------------------------------------------------- -// MSW-specific wxEntry() overload and IMPLEMENT_WXWIN_MAIN definition -// ---------------------------------------------------------------------------- - -// we need HINSTANCE declaration to define WinMain() -#include "wx/msw/wrapwin.h" - -#ifndef SW_SHOWNORMAL - #define SW_SHOWNORMAL 1 -#endif - -// WinMain() is always ANSI, even in Unicode build, under normal Windows -// but is always Unicode under CE -#ifdef __WXWINCE__ - typedef wchar_t *wxCmdLineArgType; -#else - typedef char *wxCmdLineArgType; -#endif - -extern int WXDLLEXPORT -wxEntry(HINSTANCE hInstance, - HINSTANCE hPrevInstance = NULL, - wxCmdLineArgType pCmdLine = NULL, - int nCmdShow = SW_SHOWNORMAL); - -#if defined(__BORLANDC__) && wxUSE_UNICODE - // Borland C++ has the following nonstandard behaviour: when the -WU - // command line flag is used, the linker expects to find wWinMain instead - // of WinMain. This flag causes the compiler to define _UNICODE and - // UNICODE symbols and there's no way to detect its use, so we have to - // define both WinMain and wWinMain so that IMPLEMENT_WXWIN_MAIN works - // for both code compiled with and without -WU. - // See http://sourceforge.net/tracker/?func=detail&atid=309863&aid=1935997&group_id=9863 - // for more details. - #define IMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD \ - extern "C" int WINAPI wWinMain(HINSTANCE hInstance, \ - HINSTANCE hPrevInstance, \ - wchar_t * WXUNUSED(lpCmdLine), \ - int nCmdShow) \ - { \ - /* NB: wxEntry expects lpCmdLine argument to be char*, not */ \ - /* wchar_t*, but fortunately it's not used anywhere */ \ - /* and we can simply pass NULL in: */ \ - return wxEntry(hInstance, hPrevInstance, NULL, nCmdShow); \ - } -#else - #define IMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD -#endif // defined(__BORLANDC__) && wxUSE_UNICODE - -#define IMPLEMENT_WXWIN_MAIN \ - extern "C" int WINAPI WinMain(HINSTANCE hInstance, \ - HINSTANCE hPrevInstance, \ - wxCmdLineArgType lpCmdLine, \ - int nCmdShow) \ - { \ - return wxEntry(hInstance, hPrevInstance, lpCmdLine, nCmdShow); \ - } \ - IMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD - -#endif // _WX_APP_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/apptbase.h b/desmume/src/windows/wx/include/wx/msw/apptbase.h deleted file mode 100644 index 855f759e1..000000000 --- a/desmume/src/windows/wx/include/wx/msw/apptbase.h +++ /dev/null @@ -1,46 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/apptbase.h -// Purpose: declaration of wxAppTraits for MSW -// Author: Vadim Zeitlin -// Modified by: -// Created: 22.06.2003 -// RCS-ID: $Id: apptbase.h 40599 2006-08-13 21:00:32Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_APPTBASE_H_ -#define _WX_MSW_APPTBASE_H_ - -// ---------------------------------------------------------------------------- -// wxAppTraits: the MSW version adds extra hooks needed by MSW-only code -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxAppTraits : public wxAppTraitsBase -{ -public: - // wxExecute() support methods - // --------------------------- - - // called before starting to wait for the child termination, may return - // some opaque data which will be passed later to AfterChildWaitLoop() - virtual void *BeforeChildWaitLoop() = 0; - - // process pending Windows messages, even in console app - virtual void AlwaysYield() = 0; - - // called after starting to wait for the child termination, the parameter - // is the return value of BeforeChildWaitLoop() - virtual void AfterChildWaitLoop(void *data) = 0; - - - // wxThread helpers - // ---------------- - - // process a message while waiting for a(nother) thread, should return - // false if and only if we have to exit the application - virtual bool DoMessageFromThreadWait() = 0; -}; - -#endif // _WX_MSW_APPTBASE_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/apptrait.h b/desmume/src/windows/wx/include/wx/msw/apptrait.h deleted file mode 100644 index 1e5971144..000000000 --- a/desmume/src/windows/wx/include/wx/msw/apptrait.h +++ /dev/null @@ -1,45 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/apptrait.h -// Purpose: class implementing wxAppTraits for MSW -// Author: Vadim Zeitlin -// Modified by: -// Created: 21.06.2003 -// RCS-ID: $Id: apptrait.h 40599 2006-08-13 21:00:32Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_APPTRAIT_H_ -#define _WX_MSW_APPTRAIT_H_ - -// ---------------------------------------------------------------------------- -// wxGUI/ConsoleAppTraits: must derive from wxAppTraits, not wxAppTraitsBase -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxConsoleAppTraits : public wxConsoleAppTraitsBase -{ -public: - virtual void *BeforeChildWaitLoop(); - virtual void AlwaysYield(); - virtual void AfterChildWaitLoop(void *data); - - virtual bool DoMessageFromThreadWait(); -}; - -#if wxUSE_GUI - -class WXDLLIMPEXP_CORE wxGUIAppTraits : public wxGUIAppTraitsBase -{ -public: - virtual void *BeforeChildWaitLoop(); - virtual void AlwaysYield(); - virtual void AfterChildWaitLoop(void *data); - - virtual bool DoMessageFromThreadWait(); - virtual wxPortId GetToolkitVersion(int *majVer, int *minVer) const; -}; - -#endif // wxUSE_GUI - -#endif // _WX_MSW_APPTRAIT_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/bitmap.h b/desmume/src/windows/wx/include/wx/msw/bitmap.h deleted file mode 100644 index 819878129..000000000 --- a/desmume/src/windows/wx/include/wx/msw/bitmap.h +++ /dev/null @@ -1,282 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/bitmap.h -// Purpose: wxBitmap class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: bitmap.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BITMAP_H_ -#define _WX_BITMAP_H_ - -#include "wx/msw/gdiimage.h" -#include "wx/palette.h" - -class WXDLLIMPEXP_FWD_CORE wxBitmap; -class WXDLLIMPEXP_FWD_CORE wxBitmapHandler; -class WXDLLIMPEXP_FWD_CORE wxBitmapRefData; -class WXDLLIMPEXP_FWD_CORE wxControl; -class WXDLLIMPEXP_FWD_CORE wxCursor; -class WXDLLIMPEXP_FWD_CORE wxDC; -#if wxUSE_WXDIB -class WXDLLIMPEXP_FWD_CORE wxDIB; -#endif -class WXDLLIMPEXP_FWD_CORE wxIcon; -class WXDLLIMPEXP_FWD_CORE wxImage; -class WXDLLIMPEXP_FWD_CORE wxMask; -class WXDLLIMPEXP_FWD_CORE wxPalette; -class WXDLLIMPEXP_FWD_CORE wxPixelDataBase; - -// ---------------------------------------------------------------------------- -// wxBitmap: a mono or colour bitmap -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxBitmap : public wxGDIImage -{ -public: - // default ctor creates an invalid bitmap, you must Create() it later - wxBitmap() { } - - // Initialize with raw data - wxBitmap(const char bits[], int width, int height, int depth = 1); - - // Initialize with XPM data - wxBitmap(const char* const* data); -#ifdef wxNEEDS_CHARPP - wxBitmap(char** data) - { - *this = wxBitmap(wx_const_cast(const char* const*, data)); - } -#endif - - // Load a file or resource - wxBitmap(const wxString& name, wxBitmapType type = wxBITMAP_TYPE_BMP_RESOURCE); - - // New constructor for generalised creation from data - wxBitmap(const void* data, long type, int width, int height, int depth = 1); - - // Create a new, uninitialized bitmap of the given size and depth (if it - // is omitted, will create a bitmap compatible with the display) - // - // NB: this ctor will create a DIB for 24 and 32bpp bitmaps, use ctor - // taking a DC argument if you want to force using DDB in this case - wxBitmap(int width, int height, int depth = -1); - - // Create a bitmap compatible with the given DC - wxBitmap(int width, int height, const wxDC& dc); - -#if wxUSE_IMAGE - // Convert from wxImage - wxBitmap(const wxImage& image, int depth = -1) - { (void)CreateFromImage(image, depth); } - - // Create a DDB compatible with the given DC from wxImage - wxBitmap(const wxImage& image, const wxDC& dc) - { (void)CreateFromImage(image, dc); } -#endif // wxUSE_IMAGE - - // we must have this, otherwise icons are silently copied into bitmaps using - // the copy ctor but the resulting bitmap is invalid! - wxBitmap(const wxIcon& icon) { CopyFromIcon(icon); } - - wxBitmap& operator=(const wxIcon& icon) - { - (void)CopyFromIcon(icon); - - return *this; - } - - wxBitmap& operator=(const wxCursor& cursor) - { - (void)CopyFromCursor(cursor); - - return *this; - } - - virtual ~wxBitmap(); - -#if wxUSE_IMAGE - wxImage ConvertToImage() const; -#endif // wxUSE_IMAGE - - // get the given part of bitmap - wxBitmap GetSubBitmap( const wxRect& rect ) const; - - // NB: This should not be called from user code. It is for wx internal - // use only. - wxBitmap GetSubBitmapOfHDC( const wxRect& rect, WXHDC hdc ) const; - - // copies the contents and mask of the given (colour) icon to the bitmap - bool CopyFromIcon(const wxIcon& icon); - - // copies the contents and mask of the given cursor to the bitmap - bool CopyFromCursor(const wxCursor& cursor); - -#if wxUSE_WXDIB - // copies from a device independent bitmap - bool CopyFromDIB(const wxDIB& dib); -#endif - - virtual bool Create(int width, int height, int depth = -1); - virtual bool Create(int width, int height, const wxDC& dc); - virtual bool Create(const void* data, long type, int width, int height, int depth = 1); - virtual bool LoadFile(const wxString& name, long type = wxBITMAP_TYPE_BMP_RESOURCE); - virtual bool SaveFile(const wxString& name, int type, const wxPalette *cmap = NULL); - - wxBitmapRefData *GetBitmapData() const - { return (wxBitmapRefData *)m_refData; } - - // raw bitmap access support functions - void *GetRawData(wxPixelDataBase& data, int bpp); - void UngetRawData(wxPixelDataBase& data); - -#if wxUSE_PALETTE - wxPalette* GetPalette() const; - void SetPalette(const wxPalette& palette); -#endif // wxUSE_PALETTE - - wxMask *GetMask() const; - wxBitmap GetMaskBitmap() const; - void SetMask(wxMask *mask); - - // these functions are internal and shouldn't be used, they risk to - // disappear in the future - bool HasAlpha() const; - void UseAlpha(); - -#if WXWIN_COMPATIBILITY_2_4 - // these functions do nothing and are only there for backwards - // compatibility - wxDEPRECATED( int GetQuality() const ); - wxDEPRECATED( void SetQuality(int quality) ); -#endif // WXWIN_COMPATIBILITY_2_4 - - // implementation only from now on - // ------------------------------- - -public: - void SetHBITMAP(WXHBITMAP bmp) { SetHandle((WXHANDLE)bmp); } - WXHBITMAP GetHBITMAP() const { return (WXHBITMAP)GetHandle(); } - -#ifdef __WXDEBUG__ - void SetSelectedInto(wxDC *dc); - wxDC *GetSelectedInto() const; -#endif // __WXDEBUG__ - -protected: - virtual wxGDIImageRefData *CreateData() const; - virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const; - - // creates an uninitialized bitmap, called from Create()s above - bool DoCreate(int w, int h, int depth, WXHDC hdc); - -#if wxUSE_IMAGE - // creates the bitmap from wxImage, supposed to be called from ctor - bool CreateFromImage(const wxImage& image, int depth); - - // creates a DDB from wxImage, supposed to be called from ctor - bool CreateFromImage(const wxImage& image, const wxDC& dc); - - // common part of the 2 methods above (hdc may be 0) - bool CreateFromImage(const wxImage& image, int depth, WXHDC hdc); -#endif // wxUSE_IMAGE - -private: - // common part of CopyFromIcon/CopyFromCursor for Win32 - bool CopyFromIconOrCursor(const wxGDIImage& icon); - - - DECLARE_DYNAMIC_CLASS(wxBitmap) -}; - -// ---------------------------------------------------------------------------- -// wxMask: a mono bitmap used for drawing bitmaps transparently. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMask : public wxObject -{ -public: - wxMask(); - - // Copy constructor - wxMask(const wxMask &mask); - - // Construct a mask from a bitmap and a colour indicating the transparent - // area - wxMask(const wxBitmap& bitmap, const wxColour& colour); - - // Construct a mask from a bitmap and a palette index indicating the - // transparent area - wxMask(const wxBitmap& bitmap, int paletteIndex); - - // Construct a mask from a mono bitmap (copies the bitmap). - wxMask(const wxBitmap& bitmap); - - // construct a mask from the givne bitmap handle - wxMask(WXHBITMAP hbmp) { m_maskBitmap = hbmp; } - - virtual ~wxMask(); - - bool Create(const wxBitmap& bitmap, const wxColour& colour); - bool Create(const wxBitmap& bitmap, int paletteIndex); - bool Create(const wxBitmap& bitmap); - - // Implementation - WXHBITMAP GetMaskBitmap() const { return m_maskBitmap; } - void SetMaskBitmap(WXHBITMAP bmp) { m_maskBitmap = bmp; } - -protected: - WXHBITMAP m_maskBitmap; - - DECLARE_DYNAMIC_CLASS(wxMask) -}; - -// ---------------------------------------------------------------------------- -// wxBitmapHandler is a class which knows how to load/save bitmaps to/from file -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxBitmapHandler : public wxGDIImageHandler -{ -public: - wxBitmapHandler() { } - wxBitmapHandler(const wxString& name, const wxString& ext, long type) - : wxGDIImageHandler(name, ext, type) - { - } - - // keep wxBitmapHandler derived from wxGDIImageHandler compatible with the - // old class which worked only with bitmaps - virtual bool Create(wxBitmap *bitmap, - const void* data, - long flags, - int width, int height, int depth = 1); - virtual bool LoadFile(wxBitmap *bitmap, - const wxString& name, - long flags, - int desiredWidth, int desiredHeight); - virtual bool SaveFile(wxBitmap *bitmap, - const wxString& name, - int type, - const wxPalette *palette = NULL); - - virtual bool Create(wxGDIImage *image, - const void* data, - long flags, - int width, int height, int depth = 1); - virtual bool Load(wxGDIImage *image, - const wxString& name, - long flags, - int desiredWidth, int desiredHeight); - virtual bool Save(wxGDIImage *image, - const wxString& name, - int type); - -private: - DECLARE_DYNAMIC_CLASS(wxBitmapHandler) -}; - -#endif - // _WX_BITMAP_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/blank.cur b/desmume/src/windows/wx/include/wx/msw/blank.cur deleted file mode 100644 index 048f06b4aefde54e0ff825ccb5a5db4d7001d513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZQzU}9ioP*7k10|Q0|1~DK@1BexX*a3(cfe;L!6oi8y|NsAw;0zE8=!O9W0CiJ? AlK=n! diff --git a/desmume/src/windows/wx/include/wx/msw/bmpbuttn.h b/desmume/src/windows/wx/include/wx/msw/bmpbuttn.h deleted file mode 100644 index e45e1c0c8..000000000 --- a/desmume/src/windows/wx/include/wx/msw/bmpbuttn.h +++ /dev/null @@ -1,73 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/bmpbuttn.h -// Purpose: wxBitmapButton class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: bmpbuttn.h 36078 2005-11-03 19:38:20Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BMPBUTTN_H_ -#define _WX_BMPBUTTN_H_ - -#include "wx/button.h" -#include "wx/bitmap.h" -#include "wx/brush.h" - -class WXDLLEXPORT wxBitmapButton : public wxBitmapButtonBase -{ -public: - wxBitmapButton() { } - - wxBitmapButton(wxWindow *parent, - wxWindowID id, - const wxBitmap& bitmap, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxBU_AUTODRAW, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr) - { - Create(parent, id, bitmap, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxBitmap& bitmap, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxBU_AUTODRAW, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr); - - // Implementation - virtual bool SetBackgroundColour(const wxColour& colour); - virtual void SetDefault(); - virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item); - virtual void DrawFace( WXHDC dc, int left, int top, int right, int bottom, bool sel ); - virtual void DrawButtonFocus( WXHDC dc, int left, int top, int right, int bottom, bool sel ); - virtual void DrawButtonDisable( WXHDC dc, int left, int top, int right, int bottom, bool with_marg ); - -protected: - // reimplement some base class virtuals - virtual wxSize DoGetBestSize() const; - virtual void OnSetBitmap(); - - // invalidate m_brushDisabled when system colours change - void OnSysColourChanged(wxSysColourChangedEvent& event); - - // change the currently bitmap if we have a hover one - void OnMouseEnterOrLeave(wxMouseEvent& event); - - - // the brush we use to draw disabled buttons - wxBrush m_brushDisabled; - - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxBitmapButton) -}; - -#endif // _WX_BMPBUTTN_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/brush.h b/desmume/src/windows/wx/include/wx/msw/brush.h deleted file mode 100644 index b2224f7c5..000000000 --- a/desmume/src/windows/wx/include/wx/msw/brush.h +++ /dev/null @@ -1,60 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/brush.h -// Purpose: wxBrush class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: brush.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BRUSH_H_ -#define _WX_BRUSH_H_ - -#include "wx/gdicmn.h" -#include "wx/gdiobj.h" -#include "wx/bitmap.h" - -class WXDLLIMPEXP_FWD_CORE wxBrush; - -// ---------------------------------------------------------------------------- -// wxBrush -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxBrush : public wxBrushBase -{ -public: - wxBrush(); - wxBrush(const wxColour& col, int style = wxSOLID); - wxBrush(const wxBitmap& stipple); - virtual ~wxBrush(); - - virtual void SetColour(const wxColour& col); - virtual void SetColour(unsigned char r, unsigned char g, unsigned char b); - virtual void SetStyle(int style); - virtual void SetStipple(const wxBitmap& stipple); - - bool operator==(const wxBrush& brush) const; - bool operator!=(const wxBrush& brush) const { return !(*this == brush); } - - wxColour GetColour() const; - virtual int GetStyle() const; - wxBitmap *GetStipple() const; - - bool Ok() const { return IsOk(); } - bool IsOk() const { return m_refData != NULL; } - - // return the HBRUSH for this brush - virtual WXHANDLE GetResourceHandle() const; - -protected: - virtual wxObjectRefData *CreateRefData() const; - virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const; - -private: - DECLARE_DYNAMIC_CLASS(wxBrush) -}; - -#endif - // _WX_BRUSH_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/bullseye.cur b/desmume/src/windows/wx/include/wx/msw/bullseye.cur deleted file mode 100644 index 42a1b9cd76e891045bd82f16adba7688e0e249ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZQzU}9ioP*7lC;0HnjMg|5k1_lNVAO;FCH~=vt5P|`ef^ZPz|Ns9HoB?71-GB*x z*#G~3fc^jf_QU`G$$$9&ufpd4pXcZ5f876O|8xIuF#cTkcmC&^+WDU=Y#}s|50e9_ T1E~k;1L+5u12zw2E*by;%s^|x diff --git a/desmume/src/windows/wx/include/wx/msw/button.h b/desmume/src/windows/wx/include/wx/msw/button.h deleted file mode 100644 index 3f7c7d2c4..000000000 --- a/desmume/src/windows/wx/include/wx/msw/button.h +++ /dev/null @@ -1,82 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/button.h -// Purpose: wxButton class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: button.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BUTTON_H_ -#define _WX_BUTTON_H_ - -// ---------------------------------------------------------------------------- -// Pushbutton -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxButton : public wxButtonBase -{ -public: - wxButton() { } - wxButton(wxWindow *parent, - wxWindowID id, - const wxString& label = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr) - { - Create(parent, id, label, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& label = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr); - - virtual ~wxButton(); - - virtual void SetDefault(); - - // 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); - - // coloured buttons support - virtual bool SetBackgroundColour(const wxColour &colour); - virtual bool SetForegroundColour(const wxColour &colour); - - virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item); - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - -private: - void MakeOwnerDrawn(); - -protected: - // send a notification event, return true if processed - bool SendClickEvent(); - - // default button handling - void SetTmpDefault(); - void UnsetTmpDefault(); - - // set or unset BS_DEFPUSHBUTTON style - static void SetDefaultStyle(wxButton *btn, bool on); - - // usually overridden base class virtuals - virtual wxSize DoGetBestSize() const; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxButton) -}; - -#endif - // _WX_BUTTON_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/caret.h b/desmume/src/windows/wx/include/wx/msw/caret.h deleted file mode 100644 index b1af3f887..000000000 --- a/desmume/src/windows/wx/include/wx/msw/caret.h +++ /dev/null @@ -1,64 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: msw/caret.h -// Purpose: wxCaret class - the MSW implementation of wxCaret -// Author: Vadim Zeitlin -// Modified by: -// Created: 23.05.99 -// RCS-ID: $Id: caret.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CARET_H_ -#define _WX_CARET_H_ - -class WXDLLEXPORT wxCaret : public wxCaretBase -{ -public: - wxCaret() { Init(); } - // create the caret of given (in pixels) width and height and associate - // with the given window - wxCaret(wxWindow *window, int width, int height) - { - Init(); - - (void)Create(window, width, height); - } - // same as above - wxCaret(wxWindowBase *window, const wxSize& size) - { - Init(); - - (void)Create(window, size); - } - - // process wxWindow notifications - virtual void OnSetFocus(); - virtual void OnKillFocus(); - -protected: - void Init() - { - wxCaretBase::Init(); - - m_hasCaret = false; - } - - // override base class virtuals - virtual void DoMove(); - virtual void DoShow(); - virtual void DoHide(); - virtual void DoSize(); - - // helper function which creates the system caret - bool MSWCreateCaret(); - -private: - bool m_hasCaret; - - DECLARE_NO_COPY_CLASS(wxCaret) -}; - -#endif // _WX_CARET_H_ - - diff --git a/desmume/src/windows/wx/include/wx/msw/cdrom.ico b/desmume/src/windows/wx/include/wx/msw/cdrom.ico deleted file mode 100644 index f3fa3a9576113e57e439f732b4638e2433ee920b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718 zcmb8vKWN)P7>D6s`UiPRvnETsD0GeYgpQ6UFNt?g1w#mUaPU%1i6<L8WDFfj2YK=m zoXupgp+hE3Aw#iiB?t*b77JQ>eI+HOlo;BR?@qdV{OSCiENMm0w6><KyniWea<=v` z@ODM&F!nYbqrRc8s6Z>dWA5qVNPOftc}L5sMx&8NHzUPgKFf=Z22-PsXH*{>m4-&P zYoxUHZlu<QR6CW*4XId>H^WcxeS8<+z*n(*)Lr~GehY8o*YU(14DcO%9bdxRSpB5p zg%@6URW!p-@O^w2-@sS#dotR^Z{xS{Hhvu+<EMBJKgJL7F5boW@GX1|U&a^l25;~N zZ}0|h@IN_jI4(F&IT{?5%*XgC-ouaaLwp+DMfcDxbPZib7l}W^Pw;(w7vI2F@q74P z{5F0IZ{yeT#2pOq9ef>M!rM!-Bbga~g74$I_y)de%j}WOU9!1NHn+&8O*Yr@F@B2o z@MHWC@8Vs258uMq@MU}vZ}0|h@CI-2hV`&rH*D7h+jYuzHQ267MT+rLyoVp-hj<si z<nhrAKf(9$U3>#y#V>h$i0f&9@8IkB65hryOOR(~_zAv`@8Zd{sq({~PLO9}{1oru z$M_+h<Sa>$XLz2e9crCgqT1AD3A(?(m+$+!zP{Gg)s-$UFLi!?F4uK+c6O#-uczbV zW3^f>9UL5}R;y`$e_!QtSvxyBDi({{+}za0#)ei`R~3IZ`t<Q5|6_;$3-?X`O58u| zXw#*bwE4RvNfKry%8EiC_E`K-`DB>SMxl~9#ZQ}g5G0Y5%w~%qijpX}3&J#dkbL9& z)-7?fn<djU+}yX4>@vK~q7&pc8wl?#%LGv{pXVUF^(`wh(eLX!e{L~v=2jjruzV{E zVS+sVot3XSpJqjibbk7H31TVv+Oj-2jQm+gyeGdtr&_!N>Hn;c<MAu$$Lqh}voDB* z&)TON=ix@YUztu@hm-U@```QYA^XXPgvm=YEu6kOYPZ|z@QGO*Ia0xxMU(y{?T_f2 wNukO7N%Jty`=i2w>q3)=Y(UoYb+te6$WsdKwv#<N4{J`>o!5WOQ$n780jea4V*mgE diff --git a/desmume/src/windows/wx/include/wx/msw/checkbox.h b/desmume/src/windows/wx/include/wx/msw/checkbox.h deleted file mode 100644 index 21d9963c6..000000000 --- a/desmume/src/windows/wx/include/wx/msw/checkbox.h +++ /dev/null @@ -1,86 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/checkbox.h -// Purpose: wxCheckBox class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: checkbox.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CHECKBOX_H_ -#define _WX_CHECKBOX_H_ - -// Checkbox item (single checkbox) -class WXDLLEXPORT wxCheckBox : public wxCheckBoxBase -{ -public: - wxCheckBox() { } - wxCheckBox(wxWindow *parent, - wxWindowID id, - const wxString& 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 wxString& 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; - - // override some base class virtuals - virtual bool MSWCommand(WXUINT param, WXWORD id); - virtual void Command(wxCommandEvent& event); - virtual bool SetForegroundColour(const wxColour& colour); - virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item); - -protected: - virtual wxSize DoGetBestSize() const; - - virtual void DoSet3StateValue(wxCheckBoxState value); - virtual wxCheckBoxState DoGet3StateValue() const; - - // make the checkbox owner drawn or reset it to normal style - void MakeOwnerDrawn(bool ownerDrawn); - - // return true if this checkbox is owner drawn - bool IsOwnerDrawn() const; - -private: - // common part of all ctors - void Init(); - - // event handlers used by owner-drawn checkbox - void OnMouseEnterOrLeave(wxMouseEvent& event); - void OnMouseLeft(wxMouseEvent& event); - void OnFocus(wxFocusEvent& event); - - - // current state of the checkbox - wxCheckBoxState m_state; - - // true if the checkbox is currently pressed - bool m_isPressed; - - // true if mouse is currently over the control - bool m_isHot; - - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxCheckBox) -}; - -#endif - // _WX_CHECKBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/checklst.h b/desmume/src/windows/wx/include/wx/msw/checklst.h deleted file mode 100644 index 609936c16..000000000 --- a/desmume/src/windows/wx/include/wx/msw/checklst.h +++ /dev/null @@ -1,96 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/checklst.h -// Purpose: wxCheckListBox class - a listbox with checkable items -// Author: Vadim Zeitlin -// Modified by: -// Created: 16.11.97 -// RCS-ID: $Id: checklst.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef __CHECKLST__H_ -#define __CHECKLST__H_ - -#if !wxUSE_OWNER_DRAWN - #error "wxCheckListBox class requires owner-drawn functionality." -#endif - -class WXDLLIMPEXP_FWD_CORE wxOwnerDrawn; -class WXDLLIMPEXP_FWD_CORE wxCheckListBoxItem; // fwd decl, defined in checklst.cpp - -class WXDLLEXPORT wxCheckListBox : public wxCheckListBoxBase -{ -public: - // ctors - wxCheckListBox(); - wxCheckListBox(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int nStrings = 0, - const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - wxCheckListBox(wxWindow *parent, wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - - // override base class virtuals - virtual void Delete(unsigned int n); - - virtual bool SetFont( const wxFont &font ); - - // items may be checked - virtual bool IsChecked(unsigned int uiIndex) const; - virtual void Check(unsigned int uiIndex, bool bCheck = true); - - // return the index of the item at this position or wxNOT_FOUND - int HitTest(const wxPoint& pt) const { return DoHitTestItem(pt.x, pt.y); } - int HitTest(wxCoord x, wxCoord y) const { return DoHitTestItem(x, y); } - - // accessors - size_t GetItemHeight() const { return m_nItemHeight; } - - // we create our items ourselves and they have non-standard size, - // so we need to override these functions - virtual wxOwnerDrawn *CreateLboxItem(size_t n); - virtual bool MSWOnMeasure(WXMEASUREITEMSTRUCT *item); - -protected: - // this can't be called DoHitTest() because wxWindow already has this method - int DoHitTestItem(wxCoord x, wxCoord y) const; - - // pressing space or clicking the check box toggles the item - void OnKeyDown(wxKeyEvent& event); - void OnLeftClick(wxMouseEvent& event); - - wxSize DoGetBestSize() const; - -private: - size_t m_nItemHeight; // height of checklistbox items (the same for all) - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxCheckListBox) -}; - -#endif //_CHECKLST_H diff --git a/desmume/src/windows/wx/include/wx/msw/child.ico b/desmume/src/windows/wx/include/wx/msw/child.ico deleted file mode 100644 index 435cca2471cd31bb825ff1e6eb180c1939a9eb4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1078 zcmc&zF%p6>5L_S)<BakHsT`j{k%#dFTYh10!*eX@E#mG)fdQix<B`41-d%Dj4j@C0 zx~|9$_Z&C@sH&*X8L%&aGh;Q;5UTrbEx?7gjYQ8a`o1SC5o{p@?FfDf$!%<9C%cSY zRyw@$yPND<CUsck)7qNtro8jClxBMuX8DEIT`?cum(<oYI;;2182PF7zIpvZj~8vQ z;S8({1qZ{>1H}g<-VtX@^EF=Zz9{mlQwW;#il~Wy%sJ<goq>ax^Jn}JGe|Bw=NmFB ge8aqPJmI~ud$Eb6)2}9ELOWr8V4xU|6W(XUPqgg+2mk;8 diff --git a/desmume/src/windows/wx/include/wx/msw/chkconf.h b/desmume/src/windows/wx/include/wx/msw/chkconf.h deleted file mode 100644 index ab3db0040..000000000 --- a/desmume/src/windows/wx/include/wx/msw/chkconf.h +++ /dev/null @@ -1,387 +0,0 @@ -/* - * Name: wx/msw/chkconf.h - * Purpose: Compiler-specific configuration checking - * Author: Julian Smart - * Modified by: - * Created: 01/02/97 - * RCS-ID: $Id: chkconf.h 44436 2007-02-10 02:06:54Z RD $ - * Copyright: (c) Julian Smart - * Licence: wxWindows licence - */ - -/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ - -#ifndef _WX_MSW_CHKCONF_H_ -#define _WX_MSW_CHKCONF_H_ - -/* ensure that MSW-specific settings are defined */ -#ifndef wxUSE_DC_CACHEING -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DC_CACHEING must be defined" -# else -# define wxUSE_DC_CACHEING 1 -# endif -#endif /* wxUSE_DC_CACHEING */ - - -/* - * disable the settings which don't work for some compilers - */ - -/* - * If using PostScript-in-MSW in Univ, must enable PostScript - */ -#if defined(__WXUNIVERSAL__) && wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW && !wxUSE_POSTSCRIPT -# undef wxUSE_POSTSCRIPT -# define wxUSE_POSTSCRIPT 1 -#endif - -#ifndef wxUSE_NORLANDER_HEADERS -# if ( wxCHECK_WATCOM_VERSION(1,0) || defined(__WINE__) ) || \ - ((defined(__MINGW32__) || defined(__CYGWIN__)) && ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95)))) -# define wxUSE_NORLANDER_HEADERS 1 -# else -# define wxUSE_NORLANDER_HEADERS 0 -# endif -#endif - -/* - * We don't want to give an error if wxUSE_UNICODE_MSLU is enabled but - * wxUSE_UNICODE is not as this would make it impossible to simply set the - * former in wx/setup.h as then the library wouldn't compile in non-Unicode - * configurations, so instead simply unset it silently when it doesn't make - * sense. - */ -#if wxUSE_UNICODE_MSLU && !wxUSE_UNICODE -# undef wxUSE_UNICODE_MSLU -# define wxUSE_UNICODE_MSLU 0 -#endif - -/* - * Don't use MSLU if compiling with Wine - */ - -#if wxUSE_UNICODE_MSLU && defined(__WINE__) -# undef wxUSE_UNICODE_MSLU -# define wxUSE_UNICODE_MSLU 0 -#endif - -/* - * All of the settings below require SEH support (__try/__catch) and can't work - * without it. - */ -#if !defined(_MSC_VER) && \ - (!defined(__BORLANDC__) || __BORLANDC__ < 0x0550) -# undef wxUSE_ON_FATAL_EXCEPTION -# define wxUSE_ON_FATAL_EXCEPTION 0 - -# undef wxUSE_CRASHREPORT -# define wxUSE_CRASHREPORT 0 - -# undef wxUSE_STACKWALKER -# define wxUSE_STACKWALKER 0 -#endif /* compiler doesn't support SEH */ - -/* wxUSE_DEBUG_NEW_ALWAYS doesn't work with CodeWarrior */ -#if defined(__MWERKS__) -# undef wxUSE_DEBUG_NEW_ALWAYS -# define wxUSE_DEBUG_NEW_ALWAYS 0 -#endif - -#if defined(__GNUWIN32__) - /* These don't work as expected for mingw32 and cygwin32 */ -# undef wxUSE_MEMORY_TRACING -# define wxUSE_MEMORY_TRACING 0 - -# undef wxUSE_GLOBAL_MEMORY_OPERATORS -# define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -# undef wxUSE_DEBUG_NEW_ALWAYS -# define wxUSE_DEBUG_NEW_ALWAYS 0 - -/* some Cygwin versions don't have wcslen */ -# if defined(__CYGWIN__) || defined(__CYGWIN32__) -# if ! ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95))) -# undef wxUSE_WCHAR_T -# define wxUSE_WCHAR_T 0 -# endif -#endif - -#endif /* __GNUWIN32__ */ - -/* wxUSE_MFC is not defined when using configure as it doesn't make sense for - gcc or mingw32 anyhow */ -#ifndef wxUSE_MFC - #define wxUSE_MFC 0 -#endif /* !defined(wxUSE_MFC) */ - -/* MFC duplicates these operators */ -#if wxUSE_MFC -# undef wxUSE_GLOBAL_MEMORY_OPERATORS -# define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -# undef wxUSE_DEBUG_NEW_ALWAYS -# define wxUSE_DEBUG_NEW_ALWAYS 0 -#endif /* wxUSE_MFC */ - -#if (defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS) - /* GnuWin32 doesn't have appropriate headers for e.g. IUnknown. */ -# undef wxUSE_DRAG_AND_DROP -# define wxUSE_DRAG_AND_DROP 0 -#endif - -#if !wxUSE_OWNER_DRAWN && !defined(__WXUNIVERSAL__) -# undef wxUSE_CHECKLISTBOX -# define wxUSE_CHECKLISTBOX 0 -#endif - -#if wxUSE_SPINCTRL -# if !wxUSE_SPINBTN -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxSpinCtrl requires wxSpinButton on MSW" -# else -# undef wxUSE_SPINBTN -# define wxUSE_SPINBTN 1 -# endif -# endif -#endif - -/* - Win64-specific checks. - */ -#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 -#endif /* __WIN64__ */ - - -/* - Compiler-specific checks. - */ -#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500) - /* BC++ 4.0 can't compile JPEG library */ -# undef wxUSE_LIBJPEG -# define wxUSE_LIBJPEG 0 -#endif - -/* wxUSE_DEBUG_NEW_ALWAYS = 1 not compatible with BC++ in DLL mode */ -#if defined(__BORLANDC__) && (defined(WXMAKINGDLL) || defined(WXUSINGDLL)) -# undef wxUSE_DEBUG_NEW_ALWAYS -# define wxUSE_DEBUG_NEW_ALWAYS 0 -#endif - -/* DMC++ doesn't have definitions for date picker control, so use generic control - */ -#ifdef __DMC__ -# if wxUSE_DATEPICKCTRL -# undef wxUSE_DATEPICKCTRL_GENERIC -# undef wxUSE_DATEPICKCTRL -# endif -# define wxUSE_DATEPICKCTRL 0 -# define wxUSE_DATEPICKCTRL_GENERIC 1 -#endif - - -/* check that MSW-specific options are defined too */ -#ifndef wxUSE_ACTIVEX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_ACTIVEX must be defined." -# else -# define wxUSE_ACTIVEX 0 -# endif -#endif /* !defined(wxUSE_ACTIVEX) */ - -#ifndef wxUSE_DIALUP_MANAGER -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DIALUP_MANAGER must be defined." -# else -# define wxUSE_DIALUP_MANAGER 0 -# endif -#endif /* !defined(wxUSE_DIALUP_MANAGER) */ - -#ifndef wxUSE_MS_HTML_HELP -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_MS_HTML_HELP must be defined." -# else -# define wxUSE_MS_HTML_HELP 0 -# endif -#endif /* !defined(wxUSE_MS_HTML_HELP) */ - -#ifndef wxUSE_OLE -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_OLE must be defined." -# else -# define wxUSE_OLE 0 -# endif -#endif /* !defined(wxUSE_OLE) */ - -#ifndef wxUSE_OLE_AUTOMATION -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_OLE_AUTOMATION must be defined." -# else -# define wxUSE_OLE_AUTOMATION 0 -# endif -#endif /* !defined(wxUSE_OLE_AUTOMATION) */ - -#ifndef wxUSE_UNICODE_MSLU -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_UNICODE_MSLU must be defined." -# else -# define wxUSE_UNICODE_MSLU 0 -# endif -#endif /* wxUSE_UNICODE_MSLU */ - -#ifndef wxUSE_UXTHEME -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_UXTHEME must be defined." -# else -# define wxUSE_UXTHEME 0 -# endif -#endif /* wxUSE_UXTHEME */ - -#ifndef wxUSE_UXTHEME_AUTO -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_UXTHEME_AUTO must be defined." -# else -# define wxUSE_UXTHEME_AUTO 0 -# endif -#endif /* wxUSE_UXTHEME_AUTO */ - - -/* - un/redefine the options which we can't compile (after checking that they're - defined - */ -#ifdef __WINE__ - /* apparently it doesn't compile under Wine, remove it/when it does */ - #if wxUSE_ACTIVEX - #undef wxUSE_ACTIVEX - #define wxUSE_ACTIVEX 0 - #endif // wxUSE_ACTIVEX -#endif // __WINE__ - - -/* check settings consistency for MSW-specific ones */ -#if !wxUSE_VARIANT -# if wxUSE_ACTIVEX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxActiveXContainer requires wxVariant" -# else -# undef wxUSE_ACTIVEX -# define wxUSE_ACTIVEX 0 -# endif -# endif - -# if wxUSE_OLE_AUTOMATION -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxAutomationObject requires wxVariant" -# else -# undef wxUSE_OLE_AUTOMATION -# define wxUSE_OLE_AUTOMATION 0 -# endif -# endif -#endif /* !wxUSE_VARIANT */ - -#if !wxUSE_DYNAMIC_LOADER -# if wxUSE_MS_HTML_HELP -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_MS_HTML_HELP requires wxUSE_DYNAMIC_LOADER." -# else -# undef wxUSE_MS_HTML_HELP -# define wxUSE_MS_HTML_HELP 0 -# endif -# endif -# if wxUSE_DIALUP_MANAGER -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DIALUP_MANAGER requires wxUSE_DYNAMIC_LOADER." -# else -# undef wxUSE_DIALUP_MANAGER -# define wxUSE_DIALUP_MANAGER 0 -# endif -# endif -#endif /* !wxUSE_DYNAMIC_LOADER */ - -#if !wxUSE_DYNLIB_CLASS -# if wxUSE_UXTHEME -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_UXTHEME requires wxUSE_DYNLIB_CLASS" -# else -# undef wxUSE_UXTHEME -# define wxUSE_UXTHEME 0 -# endif -# endif -# if wxUSE_MEDIACTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_MEDIACTRL requires wxUSE_DYNLIB_CLASS" -# else -# undef wxUSE_MEDIACTRL -# define wxUSE_MEDIACTRL 0 -# endif -# endif -# if wxUSE_INKEDIT -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_INKEDIT requires wxUSE_DYNLIB_CLASS" -# else -# undef wxUSE_INKEDIT -# define wxUSE_INKEDIT 0 -# endif -# endif -#endif /* !wxUSE_DYNLIB_CLASS */ - -#if !wxUSE_OLE -# if wxUSE_ACTIVEX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxActiveXContainer requires wxUSE_OLE" -# else -# undef wxUSE_ACTIVEX -# define wxUSE_ACTIVEX 0 -# endif -# endif - -# if wxUSE_DATAOBJ -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_DATAOBJ requires wxUSE_OLE" -# else -# undef wxUSE_DATAOBJ -# define wxUSE_DATAOBJ 0 -# endif -# endif - -# if wxUSE_OLE_AUTOMATION -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxAutomationObject requires wxUSE_OLE" -# else -# undef wxUSE_OLE_AUTOMATION -# define wxUSE_OLE_AUTOMATION 0 -# endif -# endif -#endif /* !wxUSE_OLE */ - -#if !wxUSE_ACTIVEX -# if wxUSE_MEDIACTRL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxMediaCtl requires wxActiveXContainer" -# else -# undef wxUSE_MEDIACTRL -# define wxUSE_MEDIACTRL 0 -# endif -# endif -#endif /* !wxUSE_ACTIVEX */ - -#if defined(_MSC_VER) && _MSC_VER <= 1200 && wxUSE_GRAPHICS_CONTEXT -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxGraphicsContext needs MSVC 7 or newer" -# else -# undef wxUSE_GRAPHICS_CONTEXT -# define wxUSE_GRAPHICS_CONTEXT 0 -# endif -#endif - -#endif /* _WX_MSW_CHKCONF_H_ */ diff --git a/desmume/src/windows/wx/include/wx/msw/choice.h b/desmume/src/windows/wx/include/wx/msw/choice.h deleted file mode 100644 index c62037f87..000000000 --- a/desmume/src/windows/wx/include/wx/msw/choice.h +++ /dev/null @@ -1,135 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/choice.h -// Purpose: wxChoice class -// Author: Julian Smart -// Modified by: Vadim Zeitlin to derive from wxChoiceBase -// Created: 01/02/97 -// RCS-ID: $Id: choice.h 51616 2008-02-09 15:22:15Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CHOICE_H_ -#define _WX_CHOICE_H_ - -// ---------------------------------------------------------------------------- -// Choice item -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxChoice : public wxChoiceBase -{ -public: - // ctors - wxChoice() { Init(); } - virtual ~wxChoice(); - - wxChoice(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr) - { - Init(); - Create(parent, id, pos, size, n, choices, style, validator, name); - } - - wxChoice(wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr) - { - Init(); - Create(parent, id, pos, size, choices, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr); - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr); - - virtual void SetLabel(const wxString& label); - - virtual void Delete(unsigned int n); - virtual void Clear(); - - virtual unsigned int GetCount() const; - virtual int GetSelection() const; - virtual int GetCurrentSelection() const; - virtual void SetSelection(int n); - - virtual int FindString(const wxString& s, bool bCase = false) const; - virtual wxString GetString(unsigned int n) const; - virtual void SetString(unsigned int n, const wxString& s); - - // MSW only - virtual bool MSWCommand(WXUINT param, WXWORD id); - WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - virtual WXHBRUSH MSWControlColor(WXHDC hDC, WXHWND hWnd); - virtual bool MSWShouldPreProcessMessage(WXMSG *pMsg); - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - -protected: - // common part of all ctors - void Init() { m_lastAcceptedSelection = wxID_NONE; } - - virtual int DoAppend(const wxString& item); - virtual int DoInsert(const wxString& item, unsigned int pos); - virtual void DoMoveWindow(int x, int y, int width, int height); - virtual void DoSetItemClientData(unsigned int n, void* clientData); - virtual void* DoGetItemClientData(unsigned int n) const; - virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData); - virtual wxClientData* DoGetItemClientObject(unsigned int n) const; - - // MSW implementation - virtual wxSize DoGetBestSize() const; - virtual void DoGetSize(int *w, int *h) const; - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - - // update the height of the drop down list to fit the number of items we - // have (without changing the visible height) - void UpdateVisibleHeight(); - - // create and initialize the control - bool CreateAndInit(wxWindow *parent, wxWindowID id, - const wxPoint& pos, - const wxSize& size, - int n, const wxString choices[], - long style, - const wxValidator& validator, - const wxString& name); - - // free all memory we have (used by Clear() and dtor) - void Free(); - - - // last "completed" selection, i.e. not the transient one while the user is - // browsing the popup list: this is only used when != wxID_NONE which is - // the case while the drop down is opened - int m_lastAcceptedSelection; - - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxChoice) -}; - -#endif // _WX_CHOICE_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/clipbrd.h b/desmume/src/windows/wx/include/wx/msw/clipbrd.h deleted file mode 100644 index 85f890217..000000000 --- a/desmume/src/windows/wx/include/wx/msw/clipbrd.h +++ /dev/null @@ -1,98 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/clipbrd.h -// Purpose: wxClipboad class and clipboard functions for MSW -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: clipbrd.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CLIPBRD_H_ -#define _WX_CLIPBRD_H_ - -#if wxUSE_CLIPBOARD - -#include "wx/list.h" -#include "wx/module.h" -#include "wx/dataobj.h" // for wxDataFormat - -// These functions superceded by wxClipboard, but retained in order to -// implement wxClipboard, and for compatibility. - -// open/close the clipboard -WXDLLEXPORT bool wxOpenClipboard(); -WXDLLEXPORT bool wxIsClipboardOpened(); -#define wxClipboardOpen wxIsClipboardOpened -WXDLLEXPORT bool wxCloseClipboard(); - -// get/set data -WXDLLEXPORT bool wxEmptyClipboard(); -WXDLLEXPORT bool wxSetClipboardData(wxDataFormat dataFormat, - const void *data, - int width = 0, int height = 0); -WXDLLEXPORT void* wxGetClipboardData(wxDataFormat dataFormat, - long *len = NULL); - -// clipboard formats -WXDLLEXPORT bool wxIsClipboardFormatAvailable(wxDataFormat dataFormat); -WXDLLEXPORT wxDataFormat wxEnumClipboardFormats(wxDataFormat dataFormat); -WXDLLEXPORT int wxRegisterClipboardFormat(wxChar *formatName); -WXDLLEXPORT bool wxGetClipboardFormatName(wxDataFormat dataFormat, - wxChar *formatName, - int maxCount); - -//----------------------------------------------------------------------------- -// wxClipboard -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxDataObject; -class WXDLLEXPORT wxClipboard : public wxClipboardBase -{ - DECLARE_DYNAMIC_CLASS(wxClipboard) - -public: - wxClipboard(); - virtual ~wxClipboard(); - - // open the clipboard before SetData() and GetData() - virtual bool Open(); - - // close the clipboard after SetData() and GetData() - virtual void Close(); - - // query whether the clipboard is opened - virtual bool IsOpened() const; - - // set the clipboard data. all other formats will be deleted. - virtual bool SetData( wxDataObject *data ); - - // add to the clipboard data. - virtual bool AddData( wxDataObject *data ); - - // ask if data in correct format is available - virtual bool IsSupported( const wxDataFormat& format ); - - // fill data with data on the clipboard (if available) - virtual bool GetData( wxDataObject& data ); - - // clears wxTheClipboard and the system's clipboard if possible - virtual void Clear(); - - // flushes the clipboard: this means that the data which is currently on - // clipboard will stay available even after the application exits (possibly - // eating memory), otherwise the clipboard will be emptied on exit - virtual bool Flush(); - - // X11 has two clipboards which get selected by this call. Empty on MSW. - void UsePrimarySelection( bool WXUNUSED(primary) = false ) { } - -private: - IDataObject *m_lastDataObject; - bool m_isOpened; -}; - -#endif // wxUSE_CLIPBOARD -#endif - // _WX_CLIPBRD_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/colordlg.h b/desmume/src/windows/wx/include/wx/msw/colordlg.h deleted file mode 100644 index 7d9764393..000000000 --- a/desmume/src/windows/wx/include/wx/msw/colordlg.h +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/colordlg.h -// Purpose: wxColourDialog class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: colordlg.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_COLORDLG_H_ -#define _WX_COLORDLG_H_ - -#include "wx/defs.h" -#include "wx/dialog.h" -#include "wx/cmndata.h" - -// ---------------------------------------------------------------------------- -// wxColourDialog: dialog for choosing a colours -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxColourDialog : public wxDialog -{ -public: - wxColourDialog(); - wxColourDialog(wxWindow *parent, wxColourData *data = NULL); - - bool Create(wxWindow *parent, wxColourData *data = NULL); - - wxColourData& GetColourData() { return m_colourData; } - - // override some base class virtuals - virtual void SetTitle(const wxString& title); - virtual wxString GetTitle() const; - - virtual int ShowModal(); - -protected: - virtual void DoGetPosition( int *x, int *y ) const; - virtual void DoGetSize(int *width, int *height) const; - virtual void DoGetClientSize(int *width, int *height) const; - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - - wxColourData m_colourData; - wxString m_title; - - wxPoint m_pos; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxColourDialog) -}; - -#endif - // _WX_COLORDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/colour.h b/desmume/src/windows/wx/include/wx/msw/colour.h deleted file mode 100644 index 9d7c31d47..000000000 --- a/desmume/src/windows/wx/include/wx/msw/colour.h +++ /dev/null @@ -1,88 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/colour.h -// Purpose: wxColour class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: colour.h 51769 2008-02-13 22:36:43Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_COLOUR_H_ -#define _WX_COLOUR_H_ - -#include "wx/object.h" - -// ---------------------------------------------------------------------------- -// Colour -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxColour : public wxColourBase -{ -public: - // constructors - // ------------ - - wxColour() { Init(); } - wxColour( ChannelType red, ChannelType green, ChannelType blue, - ChannelType alpha = wxALPHA_OPAQUE ) - { Set(red, green, blue, alpha); } - wxColour( unsigned long colRGB ) { Set(colRGB); } - wxColour(const wxString& colourName) { Init(); Set(colourName); } - wxColour(const wxChar *colourName) { Init(); Set(colourName); } - - - // dtor - virtual ~wxColour(); - - - // accessors - // --------- - - bool Ok() const { return IsOk(); } - bool IsOk() const { return m_isInit; } - - unsigned char Red() const { return m_red; } - unsigned char Green() const { return m_green; } - unsigned char Blue() const { return m_blue; } - unsigned char Alpha() const { return m_alpha ; } - - // comparison - bool operator==(const wxColour& colour) const - { - return m_isInit == colour.m_isInit - && m_red == colour.m_red - && m_green == colour.m_green - && m_blue == colour.m_blue - && m_alpha == colour.m_alpha; - } - - bool operator != (const wxColour& colour) const { return !(*this == colour); } - - WXCOLORREF GetPixel() const { return m_pixel; } - - -public: - WXCOLORREF m_pixel; - -protected: - // Helper function - void Init(); - - virtual void - InitRGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a); - -private: - bool m_isInit; - unsigned char m_red; - unsigned char m_blue; - unsigned char m_green; - unsigned char m_alpha; - -private: - DECLARE_DYNAMIC_CLASS(wxColour) -}; - -#endif - // _WX_COLOUR_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/colours.bmp b/desmume/src/windows/wx/include/wx/msw/colours.bmp deleted file mode 100644 index 7d391ad144a486bc3b54dc00e0f19624cf4fc6b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmZ?rtzv+HG9aY^#4JF}2*w~5gb!w55Dg3rK*Z3{0HJ^+kjZf1zyTl)lK2ls4FCUw QSU?PfAR!>ZQP02t000FRaR2}S diff --git a/desmume/src/windows/wx/include/wx/msw/combo.h b/desmume/src/windows/wx/include/wx/msw/combo.h deleted file mode 100644 index ffb72c85d..000000000 --- a/desmume/src/windows/wx/include/wx/msw/combo.h +++ /dev/null @@ -1,111 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/combo.h -// Purpose: wxComboCtrl class -// Author: Jaakko Salli -// Modified by: -// Created: Apr-30-2006 -// RCS-ID: $Id: combo.h 43881 2006-12-09 19:48:21Z PC $ -// Copyright: (c) Jaakko Salli -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_COMBOCONTROL_H_ -#define _WX_COMBOCONTROL_H_ - -// NB: Definition of _WX_COMBOCONTROL_H_ is used in wx/generic/combo.h to -// determine whether there is native wxComboCtrl, so make sure you -// use it in all native wxComboCtrls. - -#if wxUSE_COMBOCTRL - -#if !defined(__WXWINCE__) && wxUSE_TIMER - #include "wx/timer.h" - #define wxUSE_COMBOCTRL_POPUP_ANIMATION 1 -#else - #define wxUSE_COMBOCTRL_POPUP_ANIMATION 0 -#endif - - -// ---------------------------------------------------------------------------- -// Native wxComboCtrl -// ---------------------------------------------------------------------------- - -// Define this only if native implementation includes all features -#define wxCOMBOCONTROL_FULLY_FEATURED - -extern WXDLLIMPEXP_DATA_CORE(const wxChar) wxComboBoxNameStr[]; - -class WXDLLEXPORT wxComboCtrl : public wxComboCtrlBase -{ -public: - // ctors and such - wxComboCtrl() : wxComboCtrlBase() { Init(); } - - wxComboCtrl(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr) - : wxComboCtrlBase() - { - Init(); - - (void)Create(parent, id, value, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr); - - virtual ~wxComboCtrl(); - - virtual void PrepareBackground( wxDC& dc, const wxRect& rect, int flags ) const; - virtual bool IsKeyPopupToggle(const wxKeyEvent& event) const; - - static int GetFeatures() { return wxComboCtrlFeatures::All; } - -#if wxUSE_COMBOCTRL_POPUP_ANIMATION - void OnTimerEvent( wxTimerEvent& event ); -protected: - virtual bool AnimateShow( const wxRect& rect, int flags ); -#endif - -protected: - - // customization - virtual void OnResize(); - virtual wxCoord GetNativeTextIndent() const; - virtual void OnThemeChange(); - - // event handlers - void OnPaintEvent( wxPaintEvent& event ); - void OnMouseEvent( wxMouseEvent& event ); - -private: - void Init(); - -#if wxUSE_COMBOCTRL_POPUP_ANIMATION - // Popup animation related - wxLongLong m_animStart; - wxTimer m_animTimer; - wxRect m_animRect; - int m_animFlags; -#endif - - DECLARE_EVENT_TABLE() - - DECLARE_DYNAMIC_CLASS(wxComboCtrl) -}; - - -#endif // wxUSE_COMBOCTRL -#endif - // _WX_COMBOCONTROL_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/combobox.h b/desmume/src/windows/wx/include/wx/msw/combobox.h deleted file mode 100644 index 4ac642da4..000000000 --- a/desmume/src/windows/wx/include/wx/msw/combobox.h +++ /dev/null @@ -1,138 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/combobox.h -// Purpose: wxComboBox class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: combobox.h 45818 2007-05-05 13:15:47Z RR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_COMBOBOX_H_ -#define _WX_COMBOBOX_H_ - -#include "wx/choice.h" - -#if wxUSE_COMBOBOX - -// ---------------------------------------------------------------------------- -// Combobox control -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxComboBox: public wxChoice -{ -public: - wxComboBox() { } - - wxComboBox(wxWindow *parent, wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr) - { - Create(parent, id, value, pos, size, n, choices, style, validator, name); - } - wxComboBox(wxWindow *parent, wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr) - { - Create(parent, id, value, pos, size, choices, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, - const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr); - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr); - - // List functions: see wxChoice - - // Text field functions - virtual wxString GetValue() const; - virtual void SetValue(const wxString& value); - - // Clipboard operations - virtual void Copy(); - virtual void Cut(); - virtual void Paste(); - virtual bool CanCopy() const; - virtual bool CanCut() const; - virtual bool CanPaste() const; - virtual void SetInsertionPoint(long pos); - virtual void SetInsertionPointEnd(); - virtual long GetInsertionPoint() const; - virtual wxTextPos GetLastPosition() const; - virtual void Replace(long from, long to, const wxString& value); - virtual void Remove(long from, long to); - virtual void SetSelection(int n) { wxChoice::SetSelection(n); } - virtual void SetSelection(long from, long to); - virtual int GetSelection() const { return wxChoice::GetSelection(); } - virtual void GetSelection(long* from, long* to) const; - virtual void SetEditable(bool editable); - - virtual void Undo(); - virtual void Redo(); - virtual bool CanUndo() const; - virtual bool CanRedo() const; - virtual void SelectAll(); - virtual bool IsEditable() const; - virtual bool HasSelection() const; - - // implementation only from now on - virtual bool MSWCommand(WXUINT param, WXWORD id); - bool MSWProcessEditMsg(WXUINT msg, WXWPARAM wParam, WXLPARAM lParam); - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - bool MSWShouldPreProcessMessage(WXMSG *pMsg); - - WXHWND GetEditHWND() const; - - // Standard event handling - void OnCut(wxCommandEvent& event); - void OnCopy(wxCommandEvent& event); - void OnPaste(wxCommandEvent& event); - void OnUndo(wxCommandEvent& event); - void OnRedo(wxCommandEvent& event); - void OnDelete(wxCommandEvent& event); - void OnSelectAll(wxCommandEvent& event); - - void OnUpdateCut(wxUpdateUIEvent& event); - void OnUpdateCopy(wxUpdateUIEvent& event); - void OnUpdatePaste(wxUpdateUIEvent& event); - void OnUpdateUndo(wxUpdateUIEvent& event); - void OnUpdateRedo(wxUpdateUIEvent& event); - void OnUpdateDelete(wxUpdateUIEvent& event); - void OnUpdateSelectAll(wxUpdateUIEvent& event); - - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxComboBox) - DECLARE_EVENT_TABLE() -}; - -#endif // wxUSE_COMBOBOX -#endif - // _WX_COMBOBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/computer.ico b/desmume/src/windows/wx/include/wx/msw/computer.ico deleted file mode 100644 index f36237bdb92781b9004fc709694d47d3e10bf6cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718 zcma*nJ!m397{>7@_d!e((wgd;m9*L$t~6FQ#@^~c2nRw8R^maDO2Hy!NO4@TRyM(O zl0xB%R9gkB^`b#8u%y}IAanm&O-w?Byz9*RuD_XC-~EtQ^g$aNisIX6DZ#gm`GKt! zsll-=dyMvlwxSrl^p)S<j+(?rwc2b)&sX(&J@tk?1;2mE3yeCxQNuGT^^G!JBgZw8 zZLOhHy^xA0QnoCma`Hy_0ltlI;>-8~Hc#8Zr}0U=gOB5xx6{El@Fjc(?_l*n!wWCG z@XBd~AK=^gCcca>;PW!t!Kd*_yn~P91H6y-@O^w2@8Vs23tz<-@mYKdZ}0|h@CI-2 z2LHe|WV>KHVJoxcA|K#=yoc}OyLdahi*BK-=ps6cPBH%oKft%~O?(+&z~}Kh_%uF= zckppM^L9G;2EK&P;GHGak<17`z_;;Dd>LPGWb#yVhiay&W|C?;R5Okb@IKzd_wil4 zi+AxYd=+2BXYnb#!5h568@$0A&WFo2<Z@kbxlXuTWiD4PCk1#P@8SFSF5bm2xqURk z5Abb#6JN#`@JntV=JnLUH}EBV2JhgP705Fq`~cs^H}O>36!>Fr7sxXK-p70RKE8{m zI7<rT8SZCVgI1ztXbx>zf$s0`H6D+3eSNK~t1DezUh4e(T(0Zt^z>A%R!fJ6hpJYq z+S}Vxu~^jZ?yj=gthTqel}e?QNF=nmxvBN_bp`*7ex9B29M^bWSl2#EtRL;@?Wq{s zy^g!T&*M(h=`^%)JDE&Y!>Pv8`XWL`Ps69&rV1B+YV*}-c+^GtIQ(Pd=H@1h{5a%1 z2;ZMP%YDCIU*tBc??2@>-QWN5IDVF`tv%+P>Et$A(5^pTtRKy9k1fKMphg-s-jBVH z?{9YO%lGW3XyRVfztz>|3)SXpvgeR}&%XCM#g1nYt3+`SJBs31M^RoAKUXRT-|e1| o$jI5-8o%0yvpk&r9#$$de-MqEkDvdI7j@!T&(`Xl^|E9C18@tCRsaA1 diff --git a/desmume/src/windows/wx/include/wx/msw/control.h b/desmume/src/windows/wx/include/wx/msw/control.h deleted file mode 100644 index 881844866..000000000 --- a/desmume/src/windows/wx/include/wx/msw/control.h +++ /dev/null @@ -1,141 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/control.h -// Purpose: wxControl class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: control.h 45498 2007-04-16 13:03:05Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CONTROL_H_ -#define _WX_CONTROL_H_ - -#include "wx/dynarray.h" - -// General item class -class WXDLLEXPORT wxControl : public wxControlBase -{ -public: - wxControl() { } - - wxControl(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxControlNameStr) - { - Create(parent, id, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxControlNameStr); - - virtual ~wxControl(); - - // Simulates an event - virtual void Command(wxCommandEvent& event) { ProcessCommand(event); } - - - // implementation from now on - // -------------------------- - - virtual wxVisualAttributes GetDefaultAttributes() const - { - return GetClassDefaultAttributes(GetWindowVariant()); - } - - static wxVisualAttributes - GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); - - // Calls the callback and appropriate event handlers - bool ProcessCommand(wxCommandEvent& event); - - // MSW-specific - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - - // For ownerdraw items - virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *WXUNUSED(item)) { return false; } - virtual bool MSWOnMeasure(WXMEASUREITEMSTRUCT *WXUNUSED(item)) { return false; } - - const wxArrayLong& GetSubcontrols() const { return m_subControls; } - - // default handling of WM_CTLCOLORxxx: this is public so that wxWindow - // could call it - virtual WXHBRUSH MSWControlColor(WXHDC pDC, WXHWND hWnd); - - // default style for the control include WS_TABSTOP if it AcceptsFocus() - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - -protected: - // choose the default border for this window - virtual wxBorder GetDefaultBorder() const; - - // return default best size (doesn't really make any sense, override this) - virtual wxSize DoGetBestSize() const; - - // This is a helper for all wxControls made with UPDOWN native control. - // In wxMSW it was only wxSpinCtrl derived from wxSpinButton but in - // WinCE of Smartphones this happens also for native wxTextCtrl, - // wxChoice and others. - virtual wxSize GetBestSpinnerSize(const bool is_vertical) const; - - // create the control of the given Windows class: this is typically called - // from Create() method of the derived class passing its label, pos and - // size parameter (style parameter is not needed because m_windowStyle is - // supposed to had been already set and so is used instead when this - // function is called) - bool MSWCreateControl(const wxChar *classname, - const wxString& label, - const wxPoint& pos, - const wxSize& size); - - // NB: the method below is deprecated now, with MSWGetStyle() the method - // above should be used instead! Once all the controls are updated to - // implement MSWGetStyle() this version will disappear. - // - // create the control of the given class with the given style (combination - // of WS_XXX flags, i.e. Windows style, not wxWidgets one), returns - // false if creation failed - // - // All parameters except classname and style are optional, if the - // size/position are not given, they should be set later with SetSize() - // and, label (the title of the window), of course, is left empty. The - // extended style is determined from the style and the app 3D settings - // automatically if it's not specified explicitly. - bool MSWCreateControl(const wxChar *classname, - WXDWORD style, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - const wxString& label = wxEmptyString, - WXDWORD exstyle = (WXDWORD)-1); - - // call this from the derived class MSWControlColor() if you want to show - // the control greyed out (and opaque) - WXHBRUSH MSWControlColorDisabled(WXHDC pDC); - - // common part of the 3 functions above: pass wxNullColour to use the - // appropriate background colour (meaning ours or our parents) or a fixed - // one - virtual WXHBRUSH DoMSWControlColor(WXHDC pDC, wxColour colBg, WXHWND hWnd); - - // this is a helper for the derived class GetClassDefaultAttributes() - // implementation: it returns the right colours for the classes which - // contain something else (e.g. wxListBox, wxTextCtrl, ...) instead of - // being simple controls (such as wxButton, wxCheckBox, ...) - static wxVisualAttributes - GetCompositeControlsDefaultAttributes(wxWindowVariant variant); - - // for controls like radiobuttons which are really composite this array - // holds the ids (not HWNDs!) of the sub controls - wxArrayLong m_subControls; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxControl) -}; - -#endif // _WX_CONTROL_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/crashrpt.h b/desmume/src/windows/wx/include/wx/msw/crashrpt.h deleted file mode 100644 index 81091b301..000000000 --- a/desmume/src/windows/wx/include/wx/msw/crashrpt.h +++ /dev/null @@ -1,120 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/crashrpt.h -// Purpose: helpers for the structured exception handling (SEH) under Win32 -// Author: Vadim Zeitlin -// Modified by: -// Created: 13.07.2003 -// RCS-ID: $Id: crashrpt.h 34436 2005-05-31 09:20:43Z JS $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_CRASHRPT_H_ -#define _WX_MSW_CRASHRPT_H_ - -#include "wx/defs.h" - -#if wxUSE_CRASHREPORT - -struct _EXCEPTION_POINTERS; - -// ---------------------------------------------------------------------------- -// crash report generation flags -// ---------------------------------------------------------------------------- - -enum -{ - // we always report where the crash occurred - wxCRASH_REPORT_LOCATION = 0, - - // if this flag is given, the call stack is dumped - // - // this results in dump/crash report as small as possible, this is the - // default flag - wxCRASH_REPORT_STACK = 1, - - // if this flag is given, the values of the local variables are dumped - // - // note that with the current implementation it requires dumping the full - // process address space and so this will result in huge dump file and will - // take some time to generate - // - // it's probably not a good idea to use this by default, start with default - // mini dump and ask your users to set WX_CRASH_FLAGS environment variable - // to 2 or 4 if you need more information in the dump - wxCRASH_REPORT_LOCALS = 2, - - // if this flag is given, the values of all global variables are dumped - // - // this creates a much larger mini dump than just wxCRASH_REPORT_STACK but - // still much smaller than wxCRASH_REPORT_LOCALS one - wxCRASH_REPORT_GLOBALS = 4, - - // default is to create the smallest possible crash report - wxCRASH_REPORT_DEFAULT = wxCRASH_REPORT_LOCATION | wxCRASH_REPORT_STACK -}; - -// ---------------------------------------------------------------------------- -// wxCrashContext: information about the crash context -// ---------------------------------------------------------------------------- - -struct WXDLLIMPEXP_BASE wxCrashContext -{ - // initialize this object with the given information or from the current - // global exception info which is only valid inside wxApp::OnFatalException - wxCrashContext(_EXCEPTION_POINTERS *ep = NULL); - - // get the name for this exception code - wxString GetExceptionString() const; - - - // exception code - size_t code; - - // exception address - void *addr; - - // machine-specific registers vaues - struct - { -#ifdef __INTEL__ - wxInt32 eax, ebx, ecx, edx, esi, edi, - ebp, esp, eip, - cs, ds, es, fs, gs, ss, - flags; -#endif // __INTEL__ - } regs; -}; - -// ---------------------------------------------------------------------------- -// wxCrashReport: this class is used to create crash reports -// ---------------------------------------------------------------------------- - -struct WXDLLIMPEXP_BASE wxCrashReport -{ - // set the name of the file to which the report is written, it is - // constructed from the .exe name by default - static void SetFileName(const wxChar *filename); - - // return the current file name - static const wxChar *GetFileName(); - - // write the exception report to the file, return true if it could be done - // or false otherwise - // - // if ep pointer is NULL, the global exception info which is valid only - // inside wxApp::OnFatalException() is used - static bool Generate(int flags = wxCRASH_REPORT_DEFAULT, - _EXCEPTION_POINTERS *ep = NULL); - - - // generate a crash report from outside of wxApp::OnFatalException(), this - // can be used to take "snapshots" of the program in wxApp::OnAssert() for - // example - static bool GenerateNow(int flags = wxCRASH_REPORT_DEFAULT); -}; - -#endif // wxUSE_CRASHREPORT - -#endif // _WX_MSW_CRASHRPT_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/cross.cur b/desmume/src/windows/wx/include/wx/msw/cross.cur deleted file mode 100644 index 5b8f4632f9574aa0a22ca0e6838c414918cd4822..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZQzU}9ioP*7lC;AaqEFkob05My9q&;Vkf5Q75{GXfzPKq&|ZLH_^$AHf+Q7SIi- W;2)4nB>up_AWy7XusT$mz&rrdPk^rg diff --git a/desmume/src/windows/wx/include/wx/msw/csquery.bmp b/desmume/src/windows/wx/include/wx/msw/csquery.bmp deleted file mode 100644 index 4e7bcdc30b27a8a0e6bb783100bc1487d21d5f0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmZ?rJ;wk6Wk5;;h<SjR8;BVhSb!u0Lj({j>p`#pkPX5hASfuvAR!^aprD|@U|?Xt z5EvN9kdTnTkeQjuP*G9A(9qDpFmd8Uh6M{2Fsxj;l3~M!4Gaek902Qm_wLlXckdV& w-n~oUL#1Kj1-uaPgUt89>Rubjfan&U3v3{I1Cs#<h<+)+5C@jOwHBlv0Fit`c>n+a diff --git a/desmume/src/windows/wx/include/wx/msw/cursor.h b/desmume/src/windows/wx/include/wx/msw/cursor.h deleted file mode 100644 index 81758202c..000000000 --- a/desmume/src/windows/wx/include/wx/msw/cursor.h +++ /dev/null @@ -1,47 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/cursor.h -// Purpose: wxCursor class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: cursor.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CURSOR_H_ -#define _WX_CURSOR_H_ - -#include "wx/msw/gdiimage.h" - -class WXDLLIMPEXP_FWD_CORE wxImage; - -// Cursor -class WXDLLEXPORT wxCursor : public wxGDIImage -{ -public: - // constructors - wxCursor(); - wxCursor(const wxImage& image); - wxCursor(const char bits[], int width, int height, - int hotSpotX = -1, int hotSpotY = -1, - const char maskBits[] = NULL); - wxCursor(const wxString& name, - long flags = wxBITMAP_TYPE_CUR_RESOURCE, - int hotSpotX = 0, int hotSpotY = 0); - wxCursor(int idCursor); - virtual ~wxCursor(); - - // implementation only - void SetHCURSOR(WXHCURSOR cursor) { SetHandle((WXHANDLE)cursor); } - WXHCURSOR GetHCURSOR() const { return (WXHCURSOR)GetHandle(); } - -protected: - virtual wxGDIImageRefData *CreateData() const; - -private: - DECLARE_DYNAMIC_CLASS(wxCursor) -}; - -#endif - // _WX_CURSOR_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/datectrl.h b/desmume/src/windows/wx/include/wx/msw/datectrl.h deleted file mode 100644 index 18e17365d..000000000 --- a/desmume/src/windows/wx/include/wx/msw/datectrl.h +++ /dev/null @@ -1,70 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/datectrl.h -// Purpose: wxDatePickerCtrl for Windows -// Author: Vadim Zeitlin -// Modified by: -// Created: 2005-01-09 -// RCS-ID: $Id: datectrl.h 42207 2006-10-21 16:29:33Z VZ $ -// Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_DATECTRL_H_ -#define _WX_MSW_DATECTRL_H_ - -// ---------------------------------------------------------------------------- -// wxDatePickerCtrl -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxDatePickerCtrl : public wxDatePickerCtrlBase -{ -public: - // ctors - 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); - - // set/get the date - 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 - virtual void SetRange(const wxDateTime& dt1, const wxDateTime& dt2); - virtual bool GetRange(wxDateTime *dt1, wxDateTime *dt2) const; - - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - -protected: - virtual wxSize DoGetBestSize() const; - - // the date currently shown by the control, may be invalid - wxDateTime m_date; - - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDatePickerCtrl) -}; - -#endif // _WX_MSW_DATECTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/dc.h b/desmume/src/windows/wx/include/wx/msw/dc.h deleted file mode 100644 index 85736af1a..000000000 --- a/desmume/src/windows/wx/include/wx/msw/dc.h +++ /dev/null @@ -1,345 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/dc.h -// Purpose: wxDC class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: dc.h 42612 2006-10-29 10:46:49Z SC $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_DC_H_ -#define _WX_MSW_DC_H_ - -#include "wx/defs.h" - -// --------------------------------------------------------------------------- -// macros -// --------------------------------------------------------------------------- - -#if wxUSE_DC_CACHEING -/* - * Cached blitting, maintaining a cache - * of bitmaps required for transparent blitting - * instead of constant creation/deletion - */ - -class wxDCCacheEntry: public wxObject -{ -public: - wxDCCacheEntry(WXHBITMAP hBitmap, int w, int h, int depth); - wxDCCacheEntry(WXHDC hDC, int depth); - virtual ~wxDCCacheEntry(); - - WXHBITMAP m_bitmap; - WXHDC m_dc; - int m_width; - int m_height; - int m_depth; -}; -#endif - -// this is an ABC: use one of the derived classes to create a DC associated -// with a window, screen, printer and so on -class WXDLLEXPORT wxDC : public wxDCBase -{ -public: - wxDC(WXHDC hDC) { Init(); m_hDC = hDC; } - virtual ~wxDC(); - - // implement base class pure virtuals - // ---------------------------------- - - virtual void Clear(); - - virtual bool StartDoc(const wxString& message); - virtual void EndDoc(); - - virtual void StartPage(); - virtual void EndPage(); - - virtual void SetFont(const wxFont& font); - virtual void SetPen(const wxPen& pen); - virtual void SetBrush(const wxBrush& brush); - virtual void SetBackground(const wxBrush& brush); - virtual void SetBackgroundMode(int mode); -#if wxUSE_PALETTE - virtual void SetPalette(const wxPalette& palette); -#endif // wxUSE_PALETTE - - virtual void DestroyClippingRegion(); - - virtual wxCoord GetCharHeight() const; - virtual wxCoord GetCharWidth() const; - - virtual bool CanDrawBitmap() const; - virtual bool CanGetTextExtent() const; - virtual int GetDepth() const; - virtual wxSize GetPPI() const; - - virtual void SetMapMode(int mode); - virtual void SetUserScale(double x, double y); - virtual void SetSystemScale(double x, double y); - virtual void SetLogicalScale(double x, double y); - virtual void SetLogicalOrigin(wxCoord x, wxCoord y); - virtual void SetDeviceOrigin(wxCoord x, wxCoord y); - virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp); - virtual void SetLogicalFunction(int function); - - // implementation from now on - // -------------------------- - - virtual void SetRop(WXHDC cdc); - virtual void SelectOldObjects(WXHDC dc); - - wxWindow *GetWindow() const { return m_canvas; } - void SetWindow(wxWindow *win) - { - m_canvas = win; - -#if wxUSE_PALETTE - // if we have palettes use the correct one for this window - InitializePalette(); -#endif // wxUSE_PALETTE - } - - WXHDC GetHDC() const { return m_hDC; } - void SetHDC(WXHDC dc, bool bOwnsDC = false) - { - m_hDC = dc; - m_bOwnsDC = bOwnsDC; - - // we might have a pre existing clipping region, make sure that we - // return it if asked -- but avoid calling ::GetClipBox() right now as - // it could be unnecessary wasteful - m_clipping = true; - m_clipX1 = - m_clipX2 = 0; - } - - const wxBitmap& GetSelectedBitmap() const { return m_selectedBitmap; } - wxBitmap& GetSelectedBitmap() { return m_selectedBitmap; } - - // update the internal clip box variables - void UpdateClipBox(); - -#if wxUSE_DC_CACHEING - static wxDCCacheEntry* FindBitmapInCache(WXHDC hDC, int w, int h); - static wxDCCacheEntry* FindDCInCache(wxDCCacheEntry* notThis, WXHDC hDC); - - static void AddToBitmapCache(wxDCCacheEntry* entry); - static void AddToDCCache(wxDCCacheEntry* entry); - static void ClearCache(); -#endif - - // RTL related functions - // --------------------- - - // get or change the layout direction (LTR or RTL) for this dc, - // wxLayout_Default is returned if layout direction is not supported - virtual wxLayoutDirection GetLayoutDirection() const; - virtual void SetLayoutDirection(wxLayoutDirection dir); - -protected: - void Init() - { - m_canvas = NULL; - m_bOwnsDC = false; - m_hDC = NULL; - - m_oldBitmap = NULL; - m_oldPen = NULL; - m_oldBrush = NULL; - m_oldFont = NULL; - -#if wxUSE_PALETTE - m_oldPalette = NULL; -#endif // wxUSE_PALETTE - } - - // create an uninitialized DC: this should be only used by the derived - // classes - wxDC() { Init(); } - - virtual void DoGetTextExtent(const wxString& string, - wxCoord *x, wxCoord *y, - wxCoord *descent = NULL, - wxCoord *externalLeading = NULL, - wxFont *theFont = NULL) const; - virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const; - - virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, - int style = wxFLOOD_SURFACE); - - virtual void DoGradientFillLinear(const wxRect& rect, - const wxColour& initialColour, - const wxColour& destColour, - wxDirection nDirection = wxEAST); - - virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const; - - virtual void DoDrawPoint(wxCoord x, wxCoord y); - virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); - - virtual void DoDrawArc(wxCoord x1, wxCoord y1, - wxCoord x2, wxCoord y2, - wxCoord xc, wxCoord yc); - virtual void DoDrawCheckMark(wxCoord x, wxCoord y, - wxCoord width, wxCoord height); - virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, - double sa, double ea); - - virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y, - wxCoord width, wxCoord height, - double radius); - virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - -#if wxUSE_SPLINES - virtual void DoDrawSpline(wxList *points); -#endif - - virtual void DoCrossHair(wxCoord x, wxCoord y); - - virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y); - virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, - bool useMask = false); - - virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y); - virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y, - double angle); - - virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, - wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord); - - // this is gnarly - we can't even call this function DoSetClippingRegion() - // because of virtual function hiding - virtual void DoSetClippingRegionAsRegion(const wxRegion& region); - virtual void DoSetClippingRegion(wxCoord x, wxCoord y, - wxCoord width, wxCoord height); - virtual void DoGetClippingBox(wxCoord *x, wxCoord *y, - wxCoord *w, wxCoord *h) const; - - virtual void DoGetSizeMM(int* width, int* height) const; - - virtual void DoDrawLines(int n, wxPoint points[], - wxCoord xoffset, wxCoord yoffset); - virtual void DoDrawPolygon(int n, wxPoint points[], - wxCoord xoffset, wxCoord yoffset, - int fillStyle = wxODDEVEN_RULE); - virtual void DoDrawPolyPolygon(int n, int count[], wxPoint points[], - wxCoord xoffset, wxCoord yoffset, - int fillStyle = wxODDEVEN_RULE); - virtual wxBitmap DoGetAsBitmap(const wxRect *subrect) const - { return subrect == NULL ? GetSelectedBitmap() : GetSelectedBitmap().GetSubBitmap(*subrect); } - - -#if wxUSE_PALETTE - // MSW specific, select a logical palette into the HDC - // (tell windows to translate pixel from other palettes to our custom one - // and vice versa) - // Realize tells it to also reset the system palette to this one. - void DoSelectPalette(bool realize = false); - - // Find out what palette our parent window has, then select it into the dc - void InitializePalette(); -#endif // wxUSE_PALETTE - - // common part of DoDrawText() and DoDrawRotatedText() - void DrawAnyText(const wxString& text, wxCoord x, wxCoord y); - - // common part of DoSetClippingRegion() and DoSetClippingRegionAsRegion() - void SetClippingHrgn(WXHRGN hrgn); - - // implementation of DoGetSize() for wxScreen/PrinterDC: this simply - // returns the size of the entire device this DC is associated with - // - // notice that we intentionally put it in a separate function instead of - // DoGetSize() itself because we want it to remain pure virtual both - // because each derived class should take care to define it as needed (this - // implementation is not at all always appropriate) and because we want - // wxDC to be an ABC to prevent it from being created directly - void GetDeviceSize(int *width, int *height) const; - - - // MSW-specific member variables - // ----------------------------- - - // the window associated with this DC (may be NULL) - wxWindow *m_canvas; - - wxBitmap m_selectedBitmap; - - // TRUE => DeleteDC() in dtor, FALSE => only ReleaseDC() it - bool m_bOwnsDC:1; - - // our HDC - WXHDC m_hDC; - - // Store all old GDI objects when do a SelectObject, so we can select them - // back in (this unselecting user's objects) so we can safely delete the - // DC. - WXHBITMAP m_oldBitmap; - WXHPEN m_oldPen; - WXHBRUSH m_oldBrush; - WXHFONT m_oldFont; - -#if wxUSE_PALETTE - WXHPALETTE m_oldPalette; -#endif // wxUSE_PALETTE - -#if wxUSE_DC_CACHEING - static wxList sm_bitmapCache; - static wxList sm_dcCache; -#endif - - DECLARE_DYNAMIC_CLASS(wxDC) - DECLARE_NO_COPY_CLASS(wxDC) -}; - -// ---------------------------------------------------------------------------- -// wxDCTemp: a wxDC which doesn't free the given HDC (used by wxWidgets -// only/mainly) -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDCTemp : public wxDC -{ -public: - // construct a temporary DC with the specified HDC and size (it should be - // specified whenever we know it for this HDC) - wxDCTemp(WXHDC hdc, const wxSize& size = wxDefaultSize) - : wxDC(hdc), - m_size(size) - { - } - - virtual ~wxDCTemp() - { - // prevent base class dtor from freeing it - SetHDC((WXHDC)NULL); - } - -protected: - virtual void DoGetSize(int *w, int *h) const - { - wxASSERT_MSG( m_size.IsFullySpecified(), - _T("size of this DC hadn't been set and is unknown") ); - - if ( w ) - *w = m_size.x; - if ( h ) - *h = m_size.y; - } - -private: - // size of this DC must be explicitly set by SetSize() as we have no way to - // find it ourselves - const wxSize m_size; - - DECLARE_NO_COPY_CLASS(wxDCTemp) -}; - -#endif // _WX_MSW_DC_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/dcclient.h b/desmume/src/windows/wx/include/wx/msw/dcclient.h deleted file mode 100644 index 19d740280..000000000 --- a/desmume/src/windows/wx/include/wx/msw/dcclient.h +++ /dev/null @@ -1,118 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: dcclient.h -// Purpose: wxClientDC class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: dcclient.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DCCLIENT_H_ -#define _WX_DCCLIENT_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/dc.h" -#include "wx/dynarray.h" - -// ---------------------------------------------------------------------------- -// array types -// ---------------------------------------------------------------------------- - -// this one if used by wxPaintDC only -struct WXDLLIMPEXP_FWD_CORE wxPaintDCInfo; - -WX_DECLARE_EXPORTED_OBJARRAY(wxPaintDCInfo, wxArrayDCInfo); - -// ---------------------------------------------------------------------------- -// DC classes -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxWindowDC : public wxDC -{ -public: - // default ctor - wxWindowDC(); - - // Create a DC corresponding to the whole window - wxWindowDC(wxWindow *win); - -protected: - // initialize the newly created DC - void InitDC(); - - // override some base class virtuals - virtual void DoGetSize(int *width, int *height) const; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxWindowDC) -}; - -class WXDLLEXPORT wxClientDC : public wxWindowDC -{ -public: - // default ctor - wxClientDC(); - - // Create a DC corresponding to the client area of the window - wxClientDC(wxWindow *win); - - virtual ~wxClientDC(); - -protected: - void InitDC(); - - // override some base class virtuals - virtual void DoGetSize(int *width, int *height) const; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxClientDC) -}; - -class WXDLLEXPORT wxPaintDC : public wxClientDC -{ -public: - wxPaintDC(); - - // Create a DC corresponding for painting the window in OnPaint() - wxPaintDC(wxWindow *win); - - virtual ~wxPaintDC(); - - // find the entry for this DC in the cache (keyed by the window) - static WXHDC FindDCInCache(wxWindow* win); - -protected: - static wxArrayDCInfo ms_cache; - - // find the entry for this DC in the cache (keyed by the window) - wxPaintDCInfo *FindInCache(size_t *index = NULL) const; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxPaintDC) -}; - -/* - * wxPaintDCEx - * This class is used when an application sends an HDC with the WM_PAINT - * message. It is used in HandlePaint and need not be used by an application. - */ - -class WXDLLEXPORT wxPaintDCEx : public wxPaintDC -{ -public: - wxPaintDCEx(wxWindow *canvas, WXHDC dc); - virtual ~wxPaintDCEx(); -private: - int saveState; - - DECLARE_CLASS(wxPaintDCEx) - DECLARE_NO_COPY_CLASS(wxPaintDCEx) -}; - -#endif - // _WX_DCCLIENT_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/dcmemory.h b/desmume/src/windows/wx/include/wx/msw/dcmemory.h deleted file mode 100644 index 7cb91de0f..000000000 --- a/desmume/src/windows/wx/include/wx/msw/dcmemory.h +++ /dev/null @@ -1,45 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/dcmemory.h -// Purpose: wxMemoryDC class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: dcmemory.h 48236 2007-08-20 23:43:32Z KO $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DCMEMORY_H_ -#define _WX_DCMEMORY_H_ - -#include "wx/dcclient.h" - -class WXDLLEXPORT wxMemoryDC : public wxDC, public wxMemoryDCBase -{ -public: - wxMemoryDC() { CreateCompatible(NULL); Init(); } - wxMemoryDC(wxBitmap& bitmap) { CreateCompatible(NULL); Init(); SelectObject(bitmap); } - wxMemoryDC(wxDC *dc); // Create compatible DC - - -protected: - // override some base class virtuals - virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - virtual void DoGetSize(int* width, int* height) const; - virtual void DoSelect(const wxBitmap& bitmap); - - virtual wxBitmap DoGetAsBitmap(const wxRect* subrect) const - { return subrect == NULL ? GetSelectedBitmap() : GetSelectedBitmap().GetSubBitmapOfHDC(*subrect, GetHDC() );} - - // create DC compatible with the given one or screen if dc == NULL - bool CreateCompatible(wxDC *dc); - - // initialize the newly created DC - void Init(); - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxMemoryDC) -}; - -#endif - // _WX_DCMEMORY_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/dcprint.h b/desmume/src/windows/wx/include/wx/msw/dcprint.h deleted file mode 100644 index 040a26383..000000000 --- a/desmume/src/windows/wx/include/wx/msw/dcprint.h +++ /dev/null @@ -1,70 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/dcprint.h -// Purpose: wxPrinterDC class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: dcprint.h 42522 2006-10-27 13:07:40Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_DCPRINT_H_ -#define _WX_MSW_DCPRINT_H_ - -#if wxUSE_PRINTING_ARCHITECTURE - -#include "wx/dc.h" -#include "wx/cmndata.h" - -class WXDLLEXPORT wxPrinterDC : public wxDC -{ -public: - // Create a printer DC (obsolete function: use wxPrintData version now) - wxPrinterDC(const wxString& driver, const wxString& device, const wxString& output, bool interactive = true, int orientation = wxPORTRAIT); - - // Create from print data - wxPrinterDC(const wxPrintData& data); - - wxPrinterDC(WXHDC theDC); - - // override some base class virtuals - virtual bool StartDoc(const wxString& message); - virtual void EndDoc(); - virtual void StartPage(); - virtual void EndPage(); - - wxRect GetPaperRect(); - -protected: - virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, - bool useMask = false); - virtual bool DoBlit(wxCoord xdest, wxCoord ydest, - wxCoord width, wxCoord height, - wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord); - virtual void DoGetSize(int *w, int *h) const - { - GetDeviceSize(w, h); - } - - - // init the dc - void Init(); - - wxPrintData m_printData; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxPrinterDC) -}; - -// Gets an HDC for the default printer configuration -// WXHDC WXDLLEXPORT wxGetPrinterDC(int orientation); - -// Gets an HDC for the specified printer configuration -WXHDC WXDLLEXPORT wxGetPrinterDC(const wxPrintData& data); - -#endif // wxUSE_PRINTING_ARCHITECTURE - -#endif // _WX_MSW_DCPRINT_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/dcscreen.h b/desmume/src/windows/wx/include/wx/msw/dcscreen.h deleted file mode 100644 index 4a72f92c0..000000000 --- a/desmume/src/windows/wx/include/wx/msw/dcscreen.h +++ /dev/null @@ -1,40 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/dcscreen.h -// Purpose: wxScreenDC class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: dcscreen.h 36565 2005-12-25 12:52:53Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_DCSCREEN_H_ -#define _WX_MSW_DCSCREEN_H_ - -#include "wx/dc.h" - -class WXDLLEXPORT wxScreenDC : public wxDC -{ -public: - // Create a DC representing the whole screen - wxScreenDC(); - - // Compatibility with X's requirements for drawing on top of all windows: - // they don't do anything under MSW - static bool StartDrawingOnTop(wxWindow* WXUNUSED(window)) { return true; } - static bool StartDrawingOnTop(wxRect* WXUNUSED(rect) = NULL) { return true; } - static bool EndDrawingOnTop() { return true; } - -protected: - virtual void DoGetSize(int *w, int *h) const - { - GetDeviceSize(w, h); - } - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxScreenDC) -}; - -#endif // _WX_MSW_DCSCREEN_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/dde.h b/desmume/src/windows/wx/include/wx/msw/dde.h deleted file mode 100644 index 3be1625c7..000000000 --- a/desmume/src/windows/wx/include/wx/msw/dde.h +++ /dev/null @@ -1,144 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: dde.h -// Purpose: DDE class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: dde.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DDE_H_ -#define _WX_DDE_H_ - -#include "wx/ipcbase.h" - -/* - * Mini-DDE implementation - - Most transactions involve a topic name and an item name (choose these - as befits your application). - - A client can: - - - ask the server to execute commands (data) associated with a topic - - request data from server by topic and item - - poke data into the server - - ask the server to start an advice loop on topic/item - - ask the server to stop an advice loop - - A server can: - - - respond to execute, request, poke and advice start/stop - - send advise data to client - - Note that this limits the server in the ways it can send data to the - client, i.e. it can't send unsolicited information. - * - */ - -class WXDLLIMPEXP_FWD_BASE wxDDEServer; -class WXDLLIMPEXP_FWD_BASE wxDDEClient; - -class WXDLLIMPEXP_BASE wxDDEConnection: public wxConnectionBase -{ - DECLARE_DYNAMIC_CLASS(wxDDEConnection) -public: - wxDDEConnection(wxChar *buffer, int size); // use external buffer - wxDDEConnection(); // use internal buffer - virtual ~wxDDEConnection(void); - - // Calls that CLIENT can make - virtual bool Execute(const wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT); - virtual bool Execute(const wxString& str) { return Execute(str, -1, wxIPC_TEXT); } - virtual wxChar *Request(const wxString& item, int *size = NULL, wxIPCFormat format = wxIPC_TEXT); - virtual bool Poke(const wxString& item, wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT); - virtual bool StartAdvise(const wxString& item); - virtual bool StopAdvise(const wxString& item); - - // Calls that SERVER can make - virtual bool Advise(const wxString& item, wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT); - - // Calls that both can make - virtual bool Disconnect(void); - - // Default behaviour is to delete connection and return true - virtual bool OnDisconnect(void); - - public: - wxString m_topicName; - wxDDEServer* m_server; - wxDDEClient* m_client; - - WXHCONV m_hConv; - wxChar* m_sendingData; - int m_dataSize; - wxIPCFormat m_dataType; - - DECLARE_NO_COPY_CLASS(wxDDEConnection) -}; - -class WXDLLIMPEXP_BASE wxDDEServer: public wxServerBase -{ - DECLARE_DYNAMIC_CLASS(wxDDEServer) - public: - - wxDDEServer(void); - virtual ~wxDDEServer(void); - bool Create(const wxString& server_name); // Returns false if can't create server (e.g. port - // number is already in use) - virtual wxConnectionBase *OnAcceptConnection(const wxString& topic); - - //////////////////////////////////////////////////////////// - // Implementation - - // Find/delete wxDDEConnection corresponding to the HCONV - wxDDEConnection *FindConnection(WXHCONV conv); - bool DeleteConnection(WXHCONV conv); - inline wxString& GetServiceName(void) const { return (wxString&) m_serviceName; } - inline wxDDEConnectionList& GetConnections(void) const - { - return (wxDDEConnectionList&) m_connections; - } - -protected: - int m_lastError; - wxString m_serviceName; - wxDDEConnectionList m_connections; -}; - -class WXDLLIMPEXP_BASE wxDDEClient: public wxClientBase -{ - DECLARE_DYNAMIC_CLASS(wxDDEClient) - public: - wxDDEClient(void); - virtual ~wxDDEClient(void); - bool ValidHost(const wxString& host); - virtual wxConnectionBase *MakeConnection(const wxString& host, const wxString& server, const wxString& topic); - // Call this to make a connection. - // Returns NULL if cannot. - virtual wxConnectionBase *OnMakeConnection(void); // Tailor this to return own connection. - - //////////////////////////////////////////////////////////// - // Implementation - - // Find/delete wxDDEConnection corresponding to the HCONV - wxDDEConnection *FindConnection(WXHCONV conv); - bool DeleteConnection(WXHCONV conv); - - inline wxDDEConnectionList& GetConnections(void) const - { - return (wxDDEConnectionList&) m_connections; - } - -protected: - int m_lastError; - wxDDEConnectionList m_connections; -}; - -void WXDLLIMPEXP_BASE wxDDEInitialize(); -void WXDLLIMPEXP_BASE wxDDECleanUp(); - -#endif - // _WX_DDE_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/debughlp.h b/desmume/src/windows/wx/include/wx/msw/debughlp.h deleted file mode 100644 index 0728c44f2..000000000 --- a/desmume/src/windows/wx/include/wx/msw/debughlp.h +++ /dev/null @@ -1,228 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wrapdbgh.h -// Purpose: wraps dbghelp.h standard file -// Author: Vadim Zeitlin -// Modified by: -// Created: 2005-01-08 (extracted from msw/crashrpt.cpp) -// RCS-ID: $Id: debughlp.h 31443 2005-01-18 10:10:23Z ABX $ -// Copyright: (c) 2003-2005 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_DEBUGHLPH_H_ -#define _WX_MSW_DEBUGHLPH_H_ - -#include "wx/dynlib.h" - -#include "wx/msw/wrapwin.h" -#ifndef __WXWINCE__ -#include <imagehlp.h> -#endif // __WXWINCE__ -#include "wx/msw/private.h" - -// we need to determine whether we have the declarations for the function in -// debughlp.dll version 5.81 (at least) and we check for DBHLPAPI to test this -// -// reasons: -// - VC6 version of imagehlp.h doesn't define it -// - VC7 one does -// - testing for compiler version doesn't work as you can install and use -// the new SDK headers with VC6 -// -// in any case, the user may override by defining wxUSE_DBGHELP himself -#ifndef wxUSE_DBGHELP - #ifdef DBHLPAPI - #define wxUSE_DBGHELP 1 - #else - #define wxUSE_DBGHELP 0 - #endif -#endif - -#if wxUSE_DBGHELP - -// ---------------------------------------------------------------------------- -// wxDbgHelpDLL: dynamically load dbghelp.dll functions -// ---------------------------------------------------------------------------- - -// wrapper for some functions from dbghelp.dll -// -// MT note: this class is not MT safe and should be only used from a single -// thread at a time (this is so because dbghelp.dll is not MT-safe -// itself anyhow) -class wxDbgHelpDLL -{ -public: - // some useful constants not present in debughlp.h (stolen from DIA SDK) - enum BasicType - { - BASICTYPE_NOTYPE = 0, - BASICTYPE_VOID = 1, - BASICTYPE_CHAR = 2, - BASICTYPE_WCHAR = 3, - BASICTYPE_INT = 6, - BASICTYPE_UINT = 7, - BASICTYPE_FLOAT = 8, - BASICTYPE_BCD = 9, - BASICTYPE_BOOL = 10, - BASICTYPE_LONG = 13, - BASICTYPE_ULONG = 14, - BASICTYPE_CURRENCY = 25, - BASICTYPE_DATE = 26, - BASICTYPE_VARIANT = 27, - BASICTYPE_COMPLEX = 28, - BASICTYPE_BIT = 29, - BASICTYPE_BSTR = 30, - BASICTYPE_HRESULT = 31, - BASICTYPE_MAX - }; - - enum SymbolTag - { - SYMBOL_TAG_NULL, - SYMBOL_TAG_EXE, - SYMBOL_TAG_COMPILAND, - SYMBOL_TAG_COMPILAND_DETAILS, - SYMBOL_TAG_COMPILAND_ENV, - SYMBOL_TAG_FUNCTION, - SYMBOL_TAG_BLOCK, - SYMBOL_TAG_DATA, - SYMBOL_TAG_ANNOTATION, - SYMBOL_TAG_LABEL, - SYMBOL_TAG_PUBLIC_SYMBOL, - SYMBOL_TAG_UDT, - SYMBOL_TAG_ENUM, - SYMBOL_TAG_FUNCTION_TYPE, - SYMBOL_TAG_POINTER_TYPE, - SYMBOL_TAG_ARRAY_TYPE, - SYMBOL_TAG_BASE_TYPE, - SYMBOL_TAG_TYPEDEF, - SYMBOL_TAG_BASE_CLASS, - SYMBOL_TAG_FRIEND, - SYMBOL_TAG_FUNCTION_ARG_TYPE, - SYMBOL_TAG_FUNC_DEBUG_START, - SYMBOL_TAG_FUNC_DEBUG_END, - SYMBOL_TAG_USING_NAMESPACE, - SYMBOL_TAG_VTABLE_SHAPE, - SYMBOL_TAG_VTABLE, - SYMBOL_TAG_CUSTOM, - SYMBOL_TAG_THUNK, - SYMBOL_TAG_CUSTOM_TYPE, - SYMBOL_TAG_MANAGED_TYPE, - SYMBOL_TAG_DIMENSION, - SYMBOL_TAG_MAX - }; - - enum DataKind - { - DATA_UNKNOWN, - DATA_LOCAL, - DATA_STATIC_LOCAL, - DATA_PARAM, - DATA_OBJECT_PTR, // "this" pointer - DATA_FILE_STATIC, - DATA_GLOBAL, - DATA_MEMBER, - DATA_STATIC_MEMBER, - DATA_CONSTANT, - DATA_MAX - }; - - enum UdtKind - { - UDT_STRUCT, - UDT_CLASS, - UDT_UNION, - UDT_MAX - }; - - - // function types - typedef DWORD (WINAPI *SymGetOptions_t)(); - typedef DWORD (WINAPI *SymSetOptions_t)(DWORD); - typedef BOOL (WINAPI *SymInitialize_t)(HANDLE, LPSTR, BOOL); - typedef BOOL (WINAPI *StackWalk_t)(DWORD, HANDLE, HANDLE, LPSTACKFRAME, - LPVOID, PREAD_PROCESS_MEMORY_ROUTINE, - PFUNCTION_TABLE_ACCESS_ROUTINE, - 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, - PDWORD, PIMAGEHLP_LINE); - typedef BOOL (WINAPI *SymSetContext_t)(HANDLE, PIMAGEHLP_STACK_FRAME, - PIMAGEHLP_CONTEXT); - typedef BOOL (WINAPI *SymEnumSymbols_t)(HANDLE, ULONG64, PCSTR, - PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID); - typedef BOOL (WINAPI *SymGetTypeInfo_t)(HANDLE, DWORD64, ULONG, - IMAGEHLP_SYMBOL_TYPE_INFO, PVOID); - typedef BOOL (WINAPI *SymCleanup_t)(HANDLE); - typedef BOOL (WINAPI *EnumerateLoadedModules_t)(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID); - typedef BOOL (WINAPI *MiniDumpWriteDump_t)(HANDLE, DWORD, HANDLE, - MINIDUMP_TYPE, - CONST PMINIDUMP_EXCEPTION_INFORMATION, - 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) - - #define wxDECLARE_SYM_FUNCTION(func) static func ## _t func - - wxDO_FOR_ALL_SYM_FUNCS(wxDECLARE_SYM_FUNCTION); - - #undef wxDECLARE_SYM_FUNCTION - - // load all functions from DLL, return true if ok - static bool Init(); - - // return the string with the error message explaining why Init() failed - static const wxString& GetErrorMessage(); - - // log error returned by the given function to debug output - static void LogError(const wxChar *func); - - // return textual representation of the value of given symbol - static wxString DumpSymbol(PSYMBOL_INFO pSymInfo, void *pVariable); - - // return the name of the symbol with given type index - static wxString GetSymbolName(PSYMBOL_INFO pSymInfo); - -private: - // dereference the given symbol, i.e. return symbol which is not a - // pointer/reference any more - // - // if ppData != NULL, dereference the pointer as many times as we - // dereferenced the symbol - // - // return the tag of the dereferenced symbol - static SymbolTag DereferenceSymbol(PSYMBOL_INFO pSymInfo, void **ppData); - - static wxString DumpField(PSYMBOL_INFO pSymInfo, - void *pVariable, - unsigned level); - - static wxString DumpBaseType(BasicType bt, DWORD64 length, void *pVariable); - - static wxString DumpUDT(PSYMBOL_INFO pSymInfo, - void *pVariable, - unsigned level = 0); -}; - -#endif // wxUSE_DBGHELP - -#endif // _WX_MSW_DEBUGHLPH_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/dialog.h b/desmume/src/windows/wx/include/wx/msw/dialog.h deleted file mode 100644 index 79a124066..000000000 --- a/desmume/src/windows/wx/include/wx/msw/dialog.h +++ /dev/null @@ -1,140 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/dialog.h -// Purpose: wxDialog class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: dialog.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DIALOG_H_ -#define _WX_DIALOG_H_ - -#include "wx/panel.h" - -extern WXDLLEXPORT_DATA(const wxChar) wxDialogNameStr[]; - -class WXDLLIMPEXP_FWD_CORE wxDialogModalData; - -#if wxUSE_TOOLBAR && (defined(__SMARTPHONE__) || defined(__POCKETPC__)) -class WXDLLIMPEXP_FWD_CORE wxToolBar; -extern WXDLLEXPORT_DATA(const wxChar) wxToolBarNameStr[]; -#endif - -// Dialog boxes -class WXDLLEXPORT wxDialog : public wxDialogBase -{ -public: - wxDialog() { Init(); } - - // full ctor - wxDialog(wxWindow *parent, wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE, - const wxString& name = wxDialogNameStr) - { - Init(); - - (void)Create(parent, id, title, pos, size, style, name); - } - - bool Create(wxWindow *parent, wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE, - const wxString& name = wxDialogNameStr); - - virtual ~wxDialog(); - - // return true if we're showing the dialog modally - virtual bool IsModal() const { return m_modalData != NULL; } - - // show the dialog modally and return the value passed to EndModal() - virtual int ShowModal(); - - // may be called to terminate the dialog with the given return code - virtual void EndModal(int retCode); - - - // we treat dialog toolbars specially under Windows CE -#if wxUSE_TOOLBAR && defined(__POCKETPC__) - // create main toolbar by calling OnCreateToolBar() - virtual wxToolBar* CreateToolBar(long style = -1, - wxWindowID winid = wxID_ANY, - const wxString& name = wxToolBarNameStr); - // return a new toolbar - virtual wxToolBar *OnCreateToolBar(long style, - wxWindowID winid, - const wxString& name ); - - // get the main toolbar - wxToolBar *GetToolBar() const { return m_dialogToolBar; } -#endif // wxUSE_TOOLBAR && __POCKETPC__ - - - // implementation only from now on - // ------------------------------- - - // override some base class virtuals - virtual bool Show(bool show = true); - - virtual void Raise(); - -#ifdef __POCKETPC__ - // Responds to the OK button in a PocketPC titlebar. This - // can be overridden, or you can change the id used for - // sending the event with SetAffirmativeId. Returns false - // if the event was not processed. - virtual bool DoOK(); -#endif - - // Windows callbacks - WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); - -#if WXWIN_COMPATIBILITY_2_6 - // use the other ctor - wxDEPRECATED( wxDialog(wxWindow *parent, - const wxString& title, bool modal, - int x = wxDefaultCoord, int y = wxDefaultCoord, int width = 500, int height = 500, - long style = wxDEFAULT_DIALOG_STYLE, - const wxString& name = wxDialogNameStr) ); - - // just call Show() or ShowModal() - wxDEPRECATED( void SetModal(bool flag) ); - - // use IsModal() - wxDEPRECATED( bool IsModalShowing() const ); -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - // find the window to use as parent for this dialog if none has been - // specified explicitly by the user - // - // may return NULL - wxWindow *FindSuitableParent() const; - - // common part of all ctors - void Init(); - -private: - wxWindow* m_oldFocus; - bool m_endModalCalled; // allow for closing within InitDialog - -#if wxUSE_TOOLBAR && defined(__POCKETPC__) - wxToolBar* m_dialogToolBar; -#endif - - // this pointer is non-NULL only while the modal event loop is running - wxDialogModalData *m_modalData; - - DECLARE_DYNAMIC_CLASS(wxDialog) - DECLARE_NO_COPY_CLASS(wxDialog) -}; - -#endif - // _WX_DIALOG_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/dib.h b/desmume/src/windows/wx/include/wx/msw/dib.h deleted file mode 100644 index c1eb28c0d..000000000 --- a/desmume/src/windows/wx/include/wx/msw/dib.h +++ /dev/null @@ -1,255 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/dib.h -// Purpose: wxDIB class representing Win32 device independent bitmaps -// Author: Vadim Zeitlin -// Modified by: -// Created: 03.03.03 (replaces the old file with the same name) -// RCS-ID: $Id: dib.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 1997-2003 wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_DIB_H_ -#define _WX_MSW_DIB_H_ - -class WXDLLIMPEXP_FWD_CORE wxBitmap; -class WXDLLIMPEXP_FWD_CORE wxPalette; - -#include "wx/msw/private.h" - -#if wxUSE_WXDIB - -// ---------------------------------------------------------------------------- -// wxDIB: represents a DIB section -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDIB -{ -public: - // ctors and such - // -------------- - - // create an uninitialized DIB with the given width, height and depth (only - // 24 and 32 bpp DIBs are currently supported) - // - // after using this ctor, GetData() and GetHandle() may be used if IsOk() - // returns true - wxDIB(int width, int height, int depth) - { Init(); (void)Create(width, height, depth); } - - // create a DIB from the DDB - wxDIB(const wxBitmap& bmp) - { Init(); (void)Create(bmp); } - - // create a DIB from the Windows DDB - wxDIB(HBITMAP hbmp) - { Init(); (void)Create(hbmp); } - - // load a DIB from file (any depth is supoprted here unlike above) - // - // as above, use IsOk() to see if the bitmap was loaded successfully - wxDIB(const wxString& filename) - { Init(); (void)Load(filename); } - - // same as the corresponding ctors but with return value - bool Create(int width, int height, int depth); - bool Create(const wxBitmap& bmp); - bool Create(HBITMAP hbmp); - bool Load(const wxString& filename); - - // dtor is not virtual, this class is not meant to be used polymorphically - ~wxDIB(); - - - // operations - // ---------- - -#ifndef __WXWINCE__ - // create a bitmap compatible with the given HDC (or screen by default) and - // return its handle, the caller is responsible for freeing it (using - // DeleteObject()) - HBITMAP CreateDDB(HDC hdc = 0) const; -#endif // !__WXWINCE__ - - // get the handle from the DIB and reset it, i.e. this object won't destroy - // the DIB after this (but the caller should do it) - HBITMAP Detach() { HBITMAP hbmp = m_handle; m_handle = 0; return hbmp; } - -#if wxUSE_PALETTE - // create a palette for this DIB (always a trivial/default one for 24bpp) - wxPalette *CreatePalette() const; -#endif // wxUSE_PALETTE - - // save the DIB as a .BMP file to the file with the given name - bool Save(const wxString& filename); - - - // accessors - // --------- - - // return true if DIB was successfully created, false otherwise - bool IsOk() const { return m_handle != 0; } - - // get the bitmap size - wxSize GetSize() const { DoGetObject(); return wxSize(m_width, m_height); } - int GetWidth() const { DoGetObject(); return m_width; } - int GetHeight() const { DoGetObject(); return m_height; } - - // get the number of bits per pixel, or depth - int GetDepth() const { DoGetObject(); return m_depth; } - - // get the DIB handle - HBITMAP GetHandle() const { return m_handle; } - - // get raw pointer to bitmap bits, you should know what you do if you - // decide to use it - unsigned char *GetData() const - { DoGetObject(); return (unsigned char *)m_data; } - - - // HBITMAP conversion - // ------------------ - - // these functions are only used by wxWidgets internally right now, please - // don't use them directly if possible as they're subject to change - -#ifndef __WXWINCE__ - // creates a DDB compatible with the given (or screen) DC from either - // a plain DIB or a DIB section (in which case the last parameter must be - // non NULL) - static HBITMAP ConvertToBitmap(const BITMAPINFO *pbi, - HDC hdc = 0, - void *bits = NULL); - - // create a plain DIB (not a DIB section) from a DDB, the caller is - // responsable for freeing it using ::GlobalFree() - static HGLOBAL ConvertFromBitmap(HBITMAP hbmp); - - // creates a DIB from the given DDB or calculates the space needed by it: - // if pbi is NULL, only the space is calculated, otherwise pbi is supposed - // to point at BITMAPINFO of the correct size which is filled by this - // function (this overload is needed for wxBitmapDataObject code in - // src/msw/ole/dataobj.cpp) - static size_t ConvertFromBitmap(BITMAPINFO *pbi, HBITMAP hbmp); -#endif // __WXWINCE__ - - - // wxImage conversion - // ------------------ - -#if wxUSE_IMAGE - // create a DIB from the given image, the DIB will be either 24 or 32 (if - // the image has alpha channel) bpp - wxDIB(const wxImage& image) { Init(); (void)Create(image); } - - // same as the above ctor but with the return code - bool Create(const wxImage& image); - - // create wxImage having the same data as this DIB - wxImage ConvertToImage() const; -#endif // wxUSE_IMAGE - - - // helper functions - // ---------------- - - // return the size of one line in a DIB with given width and depth: the - // point here is that as the scan lines need to be DWORD aligned so we may - // need to add some padding - static unsigned long GetLineSize(int width, int depth) - { - return ((width*depth + 31) & ~31) >> 3; - } - -private: - // common part of all ctors - void Init(); - - // free resources - void Free(); - - // initialize the contents from the provided DDB (Create() must have been - // already called) - bool CopyFromDDB(HBITMAP hbmp); - - - // the DIB section handle, 0 if invalid - HBITMAP m_handle; - - // NB: we could store only m_handle and not any of the other fields as - // we may always retrieve them from it using ::GetObject(), but we - // decide to still store them for efficiency concerns -- however if we - // don't have them from the very beginning (e.g. DIB constructed from a - // bitmap), we only retrieve them when necessary and so these fields - // should *never* be accessed directly, even from inside wxDIB code - - // function which must be called before accessing any members and which - // gets their values from m_handle, if not done yet - void DoGetObject() const; - - // pointer to DIB bits, may be NULL - void *m_data; - - // size and depth of the image - int m_width, - m_height, - m_depth; - - // in some cases we could be using a handle which we didn't create and in - // this case we shouldn't free it neither -- this flag tell us if this is - // the case - bool m_ownsHandle; - - // if true, we have alpha, if false we don't (note that we can still have - // m_depth == 32 but the last component is then simply padding and not - // alpha) - bool m_hasAlpha; - - - // DIBs can't be copied - wxDIB(const wxDIB&); - wxDIB& operator=(const wxDIB&); -}; - -// ---------------------------------------------------------------------------- -// inline functions implementation -// ---------------------------------------------------------------------------- - -inline -void wxDIB::Init() -{ - m_handle = 0; - m_ownsHandle = true; - m_hasAlpha = false; - - m_data = NULL; - - m_width = - m_height = - m_depth = 0; -} - -inline -void wxDIB::Free() -{ - if ( m_handle && m_ownsHandle ) - { - if ( !::DeleteObject(m_handle) ) - { - wxLogLastError(wxT("DeleteObject(hDIB)")); - } - - Init(); - } -} - -inline wxDIB::~wxDIB() -{ - Free(); -} - -#endif - // wxUSE_WXDIB - -#endif // _WX_MSW_DIB_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/dirdlg.h b/desmume/src/windows/wx/include/wx/msw/dirdlg.h deleted file mode 100644 index 9a9708e1e..000000000 --- a/desmume/src/windows/wx/include/wx/msw/dirdlg.h +++ /dev/null @@ -1,35 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/dirdlg.h -// Purpose: wxDirDialog class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: dirdlg.h 38956 2006-04-30 09:44:29Z RR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DIRDLG_H_ -#define _WX_DIRDLG_H_ - -class WXDLLEXPORT wxDirDialog : public wxDirDialogBase -{ -public: - wxDirDialog(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); - - void SetPath(const wxString& path); - - virtual int ShowModal(); - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxDirDialog) -}; - -#endif - // _WX_DIRDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/dragimag.h b/desmume/src/windows/wx/include/wx/msw/dragimag.h deleted file mode 100644 index d7763d6c1..000000000 --- a/desmume/src/windows/wx/include/wx/msw/dragimag.h +++ /dev/null @@ -1,274 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/dragimag.h -// Purpose: wxDragImage class: a kind of a cursor, that can cope -// with more sophisticated images -// Author: Julian Smart -// Modified by: -// Created: 08/04/99 -// RCS-ID: $Id: dragimag.h 45845 2007-05-05 19:00:35Z PC $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_DRAGIMAG_H_ -#define _WX_DRAGIMAG_H_ - -#if wxUSE_DRAGIMAGE - -#include "wx/bitmap.h" -#include "wx/icon.h" -#include "wx/cursor.h" -#include "wx/treectrl.h" -#include "wx/listctrl.h" - -// If 1, use a simple wxCursor instead of ImageList_SetDragCursorImage -#define wxUSE_SIMPLER_DRAGIMAGE 0 - -/* - To use this class, create a wxDragImage when you start dragging, for example: - - void MyTreeCtrl::OnBeginDrag(wxTreeEvent& event) - { -#ifdef __WXMSW__ - ::UpdateWindow((HWND) GetHWND()); // We need to implement this in wxWidgets -#endif - - CaptureMouse(); - - m_dragImage = new wxDragImage(* this, itemId); - m_dragImage->BeginDrag(wxPoint(0, 0), this); - m_dragImage->Move(pt, this); - m_dragImage->Show(this); - ... - } - - In your OnMouseMove function, hide the image, do any display updating required, - then move and show the image again: - - void MyTreeCtrl::OnMouseMove(wxMouseEvent& event) - { - if (m_dragMode == MY_TREE_DRAG_NONE) - { - event.Skip(); - return; - } - - // Prevent screen corruption by hiding the image - if (m_dragImage) - m_dragImage->Hide(this); - - // Do some updating of the window, such as highlighting the drop target - ... - -#ifdef __WXMSW__ - if (updateWindow) - ::UpdateWindow((HWND) GetHWND()); -#endif - - // Move and show the image again - m_dragImage->Move(event.GetPosition(), this); - m_dragImage->Show(this); - } - - Eventually we end the drag and delete the drag image. - - void MyTreeCtrl::OnLeftUp(wxMouseEvent& event) - { - ... - - // End the drag and delete the drag image - if (m_dragImage) - { - m_dragImage->EndDrag(this); - delete m_dragImage; - m_dragImage = NULL; - } - ReleaseMouse(); - } -*/ - -/* - Notes for Unix version: - Can we simply use cursors instead, creating a cursor dynamically, setting it into the window - in BeginDrag, and restoring the old cursor in EndDrag? - For a really bog-standard implementation, we could simply use a normal dragging cursor - and ignore the image. -*/ - -/* - * wxDragImage - */ - -class WXDLLEXPORT wxDragImage: public wxObject -{ -public: - - // Ctors & dtor - //////////////////////////////////////////////////////////////////////////// - - wxDragImage(); - wxDragImage(const wxBitmap& image, const wxCursor& cursor = wxNullCursor) - { - Init(); - - 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(); - - 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(); - - 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) - { - Init(); - - Create(treeCtrl, id); - } -#endif - -#if wxUSE_LISTCTRL - wxDragImage(const wxListCtrl& listCtrl, long id) - { - Init(); - - Create(listCtrl, id); - } -#endif - - virtual ~wxDragImage(); - - // Attributes - //////////////////////////////////////////////////////////////////////////// - - // Operations - //////////////////////////////////////////////////////////////////////////// - - // 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 - bool Create(const wxTreeCtrl& treeCtrl, wxTreeItemId& id); -#endif - -#if wxUSE_LISTCTRL - // Create a drag image for the given list control item - bool Create(const wxListCtrl& listCtrl, long id); -#endif - - // Begin drag. hotspot is the location of the drag position relative to the upper-left - // corner of the image. - bool BeginDrag(const wxPoint& hotspot, wxWindow* window, bool fullScreen = false, wxRect* rect = (wxRect*) NULL); - - // Begin drag. hotspot is the location of the drag position relative to the upper-left - // corner of the image. This is full screen only. fullScreenRect gives the - // position of the window on the screen, to restrict the drag to. - bool BeginDrag(const wxPoint& hotspot, wxWindow* window, wxWindow* fullScreenRect); - - // End drag - bool EndDrag(); - - // Move the image: call from OnMouseMove. Pt is in window client coordinates if window - // is non-NULL, or in screen coordinates if NULL. - bool Move(const wxPoint& pt); - - // Show the image - bool Show(); - - // Hide the image - bool Hide(); - - // Implementation - //////////////////////////////////////////////////////////////////////////// - - // Initialize variables - void Init(); - - // Returns the native image list handle - WXHIMAGELIST GetHIMAGELIST() const { return m_hImageList; } - -#if !wxUSE_SIMPLER_DRAGIMAGE - // Returns the native image list handle for the cursor - WXHIMAGELIST GetCursorHIMAGELIST() const { return m_hCursorImageList; } -#endif - -protected: - WXHIMAGELIST m_hImageList; - -#if wxUSE_SIMPLER_DRAGIMAGE - wxCursor m_oldCursor; -#else - WXHIMAGELIST m_hCursorImageList; -#endif - - wxCursor m_cursor; -// wxPoint m_cursorHotspot; // Obsolete - wxPoint m_position; - wxWindow* m_window; - wxRect m_boundingRect; - bool m_fullScreen; - -private: - DECLARE_DYNAMIC_CLASS(wxDragImage) - DECLARE_NO_COPY_CLASS(wxDragImage) -}; - -#endif // wxUSE_DRAGIMAGE -#endif - // _WX_DRAGIMAG_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/drive.ico b/desmume/src/windows/wx/include/wx/msw/drive.ico deleted file mode 100644 index cac90115fef141fb49d4c7dc4a4e6d31d4796e5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718 zcma*nF=*RZ9LMordM(M6W=*DB6tc#9!i|n6FNt?g1w$4OHeRABF*I1<A!F!pbdV=6 z!P!g(8*T_4G=&UBvOOp^n7|Q1q5pnmyVpyIp-=w5r@#F1ll*^@q!qo<#)f9?!#io4 zy^Y0zofWCUv7Pi7@h7pOHG1hUzI(m75+Awle4uAn-ELRi`>v+{d{!_uwL?=QFqL|y zY{%sICZ*B5mulBi@j}X#rA%Hygzw{9cn@F37qExK0e%m^i+Avwc;;=l@eO<lpT#>^ zeJAk33opF#itv4W3-95}_yYb=rUU#Qei!fHH}O+^h!5~Rd<XC2eS8yN!x!;6d<JiL z!yDf4hBy3owtKc~whOj0TYl!J_z)l9d-x7Mo!v(_(KU1tokM4sKf?F%Exd;>;|ush z`~iLszl(S9n|S7JxA6^p37^F~OR6JTgzw{9cn@F37aZ9k)jXh@dsK6mYC2SN6F<d= z_yFI-ckn*m$2ajcd=a0+XYhtMyx|RRc;k9lu6vg2n&rA+xyme8J}*u2AwIzO@EyF5 zUvm2>!uRnlyoWF23-~3s5Az0U;~V%AK8tto%L)`&gzw{9cn?pdt-v39y+DCY@gY9I z_wXG&#aU9Iz__1@22moighMPV(BtEyMx&AL?(TGZd#jt98(m#p$@hI-US6u%Z0hv% zRJB@7$H&Ji7K=JMI#Mo|)BgUxGMS9Fx3{&mwWam-bxpsS{{Hld=h)?W;k@ai#QA3f zeR?UDb}!oGWg85};jcEC3<i^*Y46|gS<dm7zn+XaNi^i2jfU)5Jht;u97V%nG)#u) zHrCi4ER5nfq9Y}b$wx!-Nt$bQ^<m*HNiTLB4j$t1B#AA4n&pZHgTXM0qEx3XI;WAx z^K=}?isSg<<2-%dzfyu{z~!BpM)!|-d|BmQCc^i#a=v)azMcKH`)r2)CoYqbvnI2F zp557d_IKB*zG!FFw49dAM|Uw=^7DJoo+_0SOT06$a#F1(YYF@2xr|ShbgY~`om45P kSFP8*I%CSY7%!=N>A058r2pFQ*2!JesY{L0_`0am4;UG$8vp<R diff --git a/desmume/src/windows/wx/include/wx/msw/enhmeta.h b/desmume/src/windows/wx/include/wx/msw/enhmeta.h deleted file mode 100644 index 6d4cb58c6..000000000 --- a/desmume/src/windows/wx/include/wx/msw/enhmeta.h +++ /dev/null @@ -1,184 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/enhmeta.h -// Purpose: wxEnhMetaFile class for Win32 -// Author: Vadim Zeitlin -// Modified by: -// Created: 13.01.00 -// RCS-ID: $Id: enhmeta.h 41751 2006-10-08 21:56:55Z VZ $ -// Copyright: (c) 2000 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_ENHMETA_H_ -#define _WX_MSW_ENHMETA_H_ - -#include "wx/dc.h" - -#if wxUSE_DRAG_AND_DROP - #include "wx/dataobj.h" -#endif - -// ---------------------------------------------------------------------------- -// wxEnhMetaFile: encapsulation of Win32 HENHMETAFILE -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxEnhMetaFile : public wxObject -{ -public: - wxEnhMetaFile(const wxString& file = wxEmptyString) : m_filename(file) - { Init(); } - wxEnhMetaFile(const wxEnhMetaFile& metafile) : wxObject() - { Init(); Assign(metafile); } - wxEnhMetaFile& operator=(const wxEnhMetaFile& metafile) - { Free(); Assign(metafile); return *this; } - - virtual ~wxEnhMetaFile() - { Free(); } - - // display the picture stored in the metafile on the given DC - bool Play(wxDC *dc, wxRect *rectBound = (wxRect *)NULL); - - // accessors - bool Ok() const { return IsOk(); } - bool IsOk() const { return m_hMF != 0; } - - wxSize GetSize() const; - int GetWidth() const { return GetSize().x; } - int GetHeight() const { return GetSize().y; } - - const wxString& GetFileName() const { return m_filename; } - - // copy the metafile to the clipboard: the width and height parameters are - // for backwards compatibility (with wxMetaFile) only, they are ignored by - // this method - bool SetClipboard(int width = 0, int height = 0); - - // implementation - WXHANDLE GetHENHMETAFILE() const { return m_hMF; } - void SetHENHMETAFILE(WXHANDLE hMF) { Free(); m_hMF = hMF; } - -protected: - void Init(); - void Free(); - void Assign(const wxEnhMetaFile& mf); - -private: - wxString m_filename; - WXHANDLE m_hMF; - - DECLARE_DYNAMIC_CLASS(wxEnhMetaFile) -}; - -// ---------------------------------------------------------------------------- -// wxEnhMetaFileDC: allows to create a wxEnhMetaFile -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxEnhMetaFileDC : public wxDC -{ -public: - // the ctor parameters specify the filename (empty for memory metafiles), - // the metafile picture size and the optional description/comment - wxEnhMetaFileDC(const wxString& filename = wxEmptyString, - int width = 0, int height = 0, - const wxString& description = wxEmptyString); - - virtual ~wxEnhMetaFileDC(); - - // obtain a pointer to the new metafile (caller should delete it) - wxEnhMetaFile *Close(); - -protected: - virtual void DoGetSize(int *width, int *height) const; - -private: - // size passed to ctor and returned by DoGetSize() - int m_width, - m_height; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxEnhMetaFileDC) -}; - -#if wxUSE_DRAG_AND_DROP - -// ---------------------------------------------------------------------------- -// wxEnhMetaFileDataObject is a specialization of wxDataObject for enh metafile -// ---------------------------------------------------------------------------- - -// notice that we want to support both CF_METAFILEPICT and CF_ENHMETAFILE and -// so we derive from wxDataObject and not from wxDataObjectSimple -class WXDLLEXPORT wxEnhMetaFileDataObject : public wxDataObject -{ -public: - // ctors - wxEnhMetaFileDataObject() { } - wxEnhMetaFileDataObject(const wxEnhMetaFile& metafile) - : m_metafile(metafile) { } - - // virtual functions which you may override if you want to provide data on - // demand only - otherwise, the trivial default versions will be used - virtual void SetMetafile(const wxEnhMetaFile& metafile) - { m_metafile = metafile; } - virtual wxEnhMetaFile GetMetafile() const - { return m_metafile; } - - // implement base class pure virtuals - virtual wxDataFormat GetPreferredFormat(Direction dir) const; - virtual size_t GetFormatCount(Direction dir) const; - virtual void GetAllFormats(wxDataFormat *formats, Direction dir) const; - virtual size_t GetDataSize(const wxDataFormat& format) const; - virtual bool GetDataHere(const wxDataFormat& format, void *buf) const; - virtual bool SetData(const wxDataFormat& format, size_t len, - const void *buf); - -protected: - wxEnhMetaFile m_metafile; - - DECLARE_NO_COPY_CLASS(wxEnhMetaFileDataObject) -}; - - -// ---------------------------------------------------------------------------- -// wxEnhMetaFileSimpleDataObject does derive from wxDataObjectSimple which -// makes it more convenient to use (it can be used with wxDataObjectComposite) -// at the price of not supoprting any more CF_METAFILEPICT but only -// CF_ENHMETAFILE -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxEnhMetaFileSimpleDataObject : public wxDataObjectSimple -{ -public: - // ctors - wxEnhMetaFileSimpleDataObject() : wxDataObjectSimple(wxDF_ENHMETAFILE) { } - wxEnhMetaFileSimpleDataObject(const wxEnhMetaFile& metafile) - : wxDataObjectSimple(wxDF_ENHMETAFILE), m_metafile(metafile) { } - - // virtual functions which you may override if you want to provide data on - // demand only - otherwise, the trivial default versions will be used - virtual void SetEnhMetafile(const wxEnhMetaFile& metafile) - { m_metafile = metafile; } - virtual wxEnhMetaFile GetEnhMetafile() const - { return m_metafile; } - - // implement base class pure virtuals - virtual size_t GetDataSize() const; - virtual bool GetDataHere(void *buf) const; - virtual bool SetData(size_t len, const void *buf); - - virtual size_t GetDataSize(const wxDataFormat& WXUNUSED(format)) const - { return GetDataSize(); } - virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format), - void *buf) const - { return GetDataHere(buf); } - virtual bool SetData(const wxDataFormat& WXUNUSED(format), - size_t len, const void *buf) - { return SetData(len, buf); } - -protected: - wxEnhMetaFile m_metafile; - - DECLARE_NO_COPY_CLASS(wxEnhMetaFileSimpleDataObject) -}; - -#endif // wxUSE_DRAG_AND_DROP - -#endif // _WX_MSW_ENHMETA_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/evtloop.h b/desmume/src/windows/wx/include/wx/msw/evtloop.h deleted file mode 100644 index ee4e7be6c..000000000 --- a/desmume/src/windows/wx/include/wx/msw/evtloop.h +++ /dev/null @@ -1,69 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/evtloop.h -// Purpose: wxEventLoop class for MSW -// Author: Vadim Zeitlin -// Modified by: -// Created: 2004-07-31 -// RCS-ID: $Id: evtloop.h 36881 2006-01-15 10:13:40Z ABX $ -// Copyright: (c) 2003-2004 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_EVTLOOP_H_ -#define _WX_MSW_EVTLOOP_H_ - -#include "wx/window.h" - -// ---------------------------------------------------------------------------- -// wxEventLoop -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxEventLoop : public wxEventLoopManual -{ -public: - wxEventLoop(); - - // implement base class pure virtuals - virtual bool Pending() const; - virtual bool Dispatch(); - - // MSW-specific methods - // -------------------- - - // preprocess a message, return true if processed (i.e. no further - // dispatching required) - virtual bool PreProcessMessage(WXMSG *msg); - - // process a single message - virtual void ProcessMessage(WXMSG *msg); - - // set the critical window: this is the window such that all the events - // except those to this window (and its children) stop to be processed - // (typical examples: assert or crash report dialog) - // - // calling this function with NULL argument restores the normal event - // handling - static void SetCriticalWindow(wxWindowMSW *win) { ms_winCritical = win; } - - // return true if there is no critical window or if this window is [a child - // of] the critical one - static bool AllowProcessing(wxWindowMSW *win) - { - return !ms_winCritical || IsChildOfCriticalWindow(win); - } - -protected: - // override/implement base class virtuals - virtual void WakeUp(); - virtual void OnNextIteration(); - - // check if the given window is a child of ms_winCritical (which must be - // non NULL) - static bool IsChildOfCriticalWindow(wxWindowMSW *win); - - - // critical window or NULL - static wxWindowMSW *ms_winCritical; -}; - -#endif // _WX_MSW_EVTLOOP_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/fdrepdlg.h b/desmume/src/windows/wx/include/wx/msw/fdrepdlg.h deleted file mode 100644 index f7874715e..000000000 --- a/desmume/src/windows/wx/include/wx/msw/fdrepdlg.h +++ /dev/null @@ -1,62 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/fdrepdlg.h -// Purpose: wxFindReplaceDialog class -// Author: Markus Greither -// Modified by: 31.07.01: VZ: integrated into wxWidgets -// Created: 23/03/2001 -// RCS-ID: -// Copyright: (c) Markus Greither -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_FDREPDLG_H_ -#define _WX_MSW_FDREPDLG_H_ - -// ---------------------------------------------------------------------------- -// wxFindReplaceDialog: dialog for searching / replacing text -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFindReplaceDialog : public wxFindReplaceDialogBase -{ -public: - // ctors and such - wxFindReplaceDialog() { Init(); } - wxFindReplaceDialog(wxWindow *parent, - wxFindReplaceData *data, - const wxString &title, - int style = 0); - - bool Create(wxWindow *parent, - wxFindReplaceData *data, - const wxString &title, - int style = 0); - - virtual ~wxFindReplaceDialog(); - - // implementation only from now on - - wxFindReplaceDialogImpl *GetImpl() const { return m_impl; } - - // override some base class virtuals - virtual bool Show(bool show = true); - virtual void SetTitle( const wxString& title); - virtual wxString GetTitle() const; - -protected: - virtual void DoGetSize(int *width, int *height) const; - virtual void DoGetClientSize(int *width, int *height) const; - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - - void Init(); - - wxString m_title; - - wxFindReplaceDialogImpl *m_impl; - - DECLARE_DYNAMIC_CLASS(wxFindReplaceDialog) - DECLARE_NO_COPY_CLASS(wxFindReplaceDialog) -}; - -#endif // _WX_MSW_FDREPDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/file1.ico b/desmume/src/windows/wx/include/wx/msw/file1.ico deleted file mode 100644 index f0a80d32b447e303cff3b0c302f4a8e176bf5e4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718 zcmbW%KTO*|6vy!&{iD_kWreAWBUZ9QJBCbIAbX}tkytE&$<inTMXi)b85j{m)xnvv zps-mCiPV9~6UyXN49Q}#xKbsq-!rBvlt>k4?k>;o<4bsFTUyXFEiEZ)A6`lYJ}u=Z zRu`l;=T_}G`dj*fUNcJX$vxhh5`StoZzo1RDhxw~<50=>Z;BG5er(i^jOs(9(!j_K zjAVOvEH%!g+L2WDq+&(U1V6&}@EyE|uVT08oA`D78s5b(<5{=g$G7oyd<pMjbwkGs zFTC)oXo4T%d-x9C!&mWJGTOwi<Ja&mei@(OV|;`k;s^KuAK<(A2EK+b<BNEMH+X|L zc!M|i8;&u@8OITa$5F|Af{*bLeuy97?dk!#i*BH6=rX#<`V;&J-@|wC9=?j-!f)c& z@oRV&zl>+yejne)*YPF1JEuC5nczqG9=?P3@Ksl4i)wCC&2_4|Mm1fkxr|TnF+Rc% z@dJE-5Aa=l17E|J@kPAB8@$0AyullO58E|nyUy6IBeu(9yDAka!N>RrKg1940e;Ty zqX~Y5@8LUm4`0R4xqVnSQXk*O*YPF1i=S7Z$V~7fd=KBjQ)yG>AA7t&kxB3|KEe<2 z13bl<Q=rIjKhxXvI=w`9>GKM7eSNK~t1DezUh3lFLg(k_Iz2sA5Cl3tK32Ee)xp7m z8jXf_c6L;&)wI36t#Y}njg1Wzi$xU*1+A>CXmN2-$uFa?Cnr3|O`aFN*FH*oe>O4N zpJMFrPfP!5Hkr0?w#9LJ8~b@{<#C>EwWjy;yLp^l+iLCZKDgfblaFoIxr^`CcV>6r zpJg3CkF)&#G@ahYyEMm1jd8N|XIbd%6UO#>V#jg(eSbd-HJhc=>Fo2D^oPyb5`@p6 z&|h)Qn}_e&7j{X7+4$Jd<Q>a-_9UAa`Ix<D|9hYIZ2KgAv{nDfY-2k=7W;YL&gA#* j$9s9~A0B4TH#VQ{`6)k&ReetDkjC_+I^{JA-$}m#KFMzm diff --git a/desmume/src/windows/wx/include/wx/msw/filedlg.h b/desmume/src/windows/wx/include/wx/msw/filedlg.h deleted file mode 100644 index 8ca031b7e..000000000 --- a/desmume/src/windows/wx/include/wx/msw/filedlg.h +++ /dev/null @@ -1,55 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/filedlg.h -// Purpose: wxFileDialog class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: filedlg.h 39402 2006-05-28 23:32:12Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FILEDLG_H_ -#define _WX_FILEDLG_H_ - -//------------------------------------------------------------------------- -// wxFileDialog -//------------------------------------------------------------------------- - -class WXDLLEXPORT wxFileDialog: public wxFileDialogBase -{ -public: - wxFileDialog(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 void SetPath(const wxString& path); - virtual void GetPaths(wxArrayString& paths) const; - virtual void GetFilenames(wxArrayString& files) const; - - virtual int ShowModal(); - -protected: - -#if !(defined(__SMARTPHONE__) && defined(__WXWINCE__)) - virtual void DoMoveWindow(int x, int y, int width, int height); - virtual void DoGetSize( int *width, int *height ) const; - virtual void DoGetPosition( int *x, int *y ) const; -#endif // !(__SMARTPHONE__ && __WXWINCE__) - -private: - wxArrayString m_fileNames; - bool m_bMovedWindow; - - DECLARE_DYNAMIC_CLASS(wxFileDialog) - DECLARE_NO_COPY_CLASS(wxFileDialog) -}; - -#endif // _WX_FILEDLG_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/floppy.ico b/desmume/src/windows/wx/include/wx/msw/floppy.ico deleted file mode 100644 index 4453a7512cbcbfb063a86b41ffce5257471aa523..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718 zcma*oKTH~77{~FStxcVbD^6XGxWbNcZ~zurke#V1iOV(Gvh;?=8u@bxgQMxtbT}p! zgBx*xq=VB<hM|GPnHYyAO?>-(53Y)p*ynie<+=OZd)#wyNK1O5wKXxW=<O>hDN(Oc zFKc5-YO-y^ZX@52*4fx%-_zkqyySV)fi-W{>-E$d_B8qNUE##2Gcsz1MwPx%wrk`B zMzYx&O4W0zd?MvtDP2%F#t-mqypMPBC2Wz*;WPLY-oYpE%-iYUoA?Soi+8ZPBk{ru zFT4sG;|KUQ-p9N6622&-96p0j;T?PeKf#aiA-<3A;sbnuZ{e%>GCq$_;|<>64c_1l z-r(<8hAihSCoC>YA@URa2p{76_%7bg9-v$3D!Po$qtnbk#t-mqypMPBC43Q|!)Nd* zyn|2RnYYuyH}MsG7Vj+Rj%3F80ltm*@h-mP$Q0>jj&5e?W{Pe)bTfgU;79ln-^X|H z0Y1RD@Kt;npU0>125;~NZ}0|h_&nUMA-C(C+jYY2a=BfFf;7R8@FBjB@8Sdeg0GLp z_yN9+_wg>igkSLWVct+3d=p>6XYmexQG-G=#t-mqypN~Tro@Fk-JsA+@FRSP@8i38 znzNumq2c>XHpvQ^B^`26gKlnabbWoTtE($rUS8_r;zDO<X9|Kqr>CcCwOTqnJXEz> z)!yEo%H^_lcXyS~=e4=HsdPH6WHPDs^>wYTu4?kz=-bz?{Ej_-FPzu@lsJDhu(lt? z*wy2x%|%_c{l<PHj{O?-!=RoI)!s2}9C!}+D{RSznyJ?j2eo>1@_*}t==l5n@dPt} z{Baub@yD~%-Pd&+=DwbSxNaOzqrrT(1s)&carSst{(Sj-&Oc|DqYLUq>!()U>_pz| ze2i?e&)NUIPe;@6{2lwo_x$OldGYoyvwG!roA@AY-|m?ATMx!hW?I|*c6&T>;H|BH c9UVnuTr>0Mt*B4@k=Q?zx%B8!@AdQf2hA97{Qv*} diff --git a/desmume/src/windows/wx/include/wx/msw/folder1.ico b/desmume/src/windows/wx/include/wx/msw/folder1.ico deleted file mode 100644 index 2994019d4cd76b48037c61fd65f87f4b9e587e58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718 zcmb8wF-+S)6vpw7HdQ+z)-ZK(#G33u89F3cnk8h<R4EdRw@j%jF(#4+M#NBcaHcFM zY!O2ubzt&@GQ~8l5QBw~7%K7l_k~hKu}aT8JJ0_4&VFYbX-zM*u_4z!ypjt1+PK@X zwI=o1x0UWA-V$qi!&<6v?CI8%_*1X9+OX!QCX<OK^NEtLUlb*#(ZbY^Or5EzIyQNs zNofRgse3H7_occol^Tj-{0u+D5AZ&|g>4cwd>LQFd-yz_en%sGAK$@O@g7#U1YUUI zg;zr{euf|72Y4Uf!Z&5A;mi0U-oxkd34Vc(@KgL4AL2uNfbZhl_&UCXH@x8uZ+OES z{+4CVa?G;N;<GfIPw)$TgrDNa__X&B9iY4DHoA^3(SMAe;fMGE-p9A_O?(Ys#uxD( zK98s0(Fotickorbmr)(bV*Ct0#1HU3zU9f9RI^4k%T%*SH9e}C$0zs&KEhA&V|<7Y z@d3VzZ{zFu65jBJH@x8uZ(I-4HD|hxnXY}N%V)Y84JpAd@DYBBALB!O#^a+HKf@34 z1H6xK;WHi|`i(Tg_wgNk74PA*3KUt4pW%o20iH@*iyM2oK#?W*1wO)0@nby2$tX}{ zJkLa*=nz%HBeDu~b#<lXa;dYkGo7BE>g41^M@L5r!%znY2MU5fdwYB8cDvf$-Br8Y z*3Qn3>h-#|x3^U)l~gDcw7I#d_4RcnKTV$x4|$J!yf2KKzDkVmHmuW2v2^vXcKNV@ zFE1``Zhm}!z5I55e(Cc2bd~=}V|V;FK93hJzdM(7m9M%=(^c+zcBwg^4zx<2&L3YN z+Fi)qjk&|wH@T_<pT3vRkB^k?ldIq3?`+NuG|3#U#~>VJPTYnyKizlsx$~5J=UOGl s<k8r^Pg^B-owonT@6WeudQAJPaAl(Zbn{nB>(t}_$8+OhjnZ>}0a(R=M*si- diff --git a/desmume/src/windows/wx/include/wx/msw/folder2.ico b/desmume/src/windows/wx/include/wx/msw/folder2.ico deleted file mode 100644 index 9a595b9feaa798bf30f5320782522fafee14ab86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718 zcmbW%KS/{~FSHN{Tis#BK}SF=YP9Fi=}60>J21YELZ3KZ;cC4mf%;!rwVrYsV- z;E+HEr<=s-&c@;&I3$ol!KdH5B>pLeLZ9=w_uhLy_g;M7yOS35Mk^~y;^SLsouifM ziH!xR!MTn29QmGH&^z|hHe;_xUE)vm`lMmcp?bZZdKW!K-@nO^Or5~g@J*GzDcdzU zo=I`GE~MItR6daMRViJNAL0l2Hol3k;!D^fnZsxBn|KGmif7(V2j9R~@L9Zr)dPta zUU=bEP>3Jk+xRBFiZ9`dGUf0Y{3hPPui_(ofcNozd>8NGJ$wsa!<X@Sd>U_f!yDf4 zhBy2J+XdSR+W}jZt&sQ#AK-m_AK%5tvwP?kx`r;J^XN45hxh@$jc?+s_!7Q|&*3xp zO}v9&#WQcGgKyv~_$=O;Qys}d`~cs^H}O?`$&nSQW{zrRsOBcsbg1SkKEelhAK%A! z@gCm8x9~N58K1|e@rF0N;SFzi<M*&!7cAEa%XPqVRave=L5lDJ-pBXxUA%{%^Y|#l z5Abb#6JN!b@N*s?=JnOVH}DmF7VqHa709;`Kft%~O+1yh693ri1@bMz2Y4Uf$9M4* zXHJ29<9Q|<WQEL<4mqzt_xJZ24u?8FKiApWnNCknb$om*&+~M6c&JvZrTzVV)oL~E z?d_>tE^BvpSNVKiTU%R7r_)+rU)S2&nwFQB75z4SJv!n&uJgWd-}qJH{z=0={wWsk z{t@oov$&PM{JOp#kAGebhd(YaZzT8jsT*>_bstB=Fi84W6HGVmU%OA;;PS>D-z8JU zqk-8S{TIP>PvLUEr`~ux>tDOmn2vLP7RkV@^GZ9Z0|SfGjK7hyeC}uCw2PE&DXHJz z-`P}hMeq4_FOKVcV>!W^Bn^8Glke>Ru2X6!j%}q_Of%Y15=woDV}~~G+jeR+0jbgC pf=6#Qy?(?GlTys}TFmMcxAmoIQj2<=)ax;)W1n!Jr!|VN`2*!3fW80# diff --git a/desmume/src/windows/wx/include/wx/msw/font.h b/desmume/src/windows/wx/include/wx/msw/font.h deleted file mode 100644 index fb4fab0fe..000000000 --- a/desmume/src/windows/wx/include/wx/msw/font.h +++ /dev/null @@ -1,148 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/font.h -// Purpose: wxFont class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: font.h 39411 2006-05-29 00:03:36Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FONT_H_ -#define _WX_FONT_H_ - -#include "wx/gdicmn.h" - -// ---------------------------------------------------------------------------- -// wxFont -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFont : public wxFontBase -{ -public: - // ctors and such - wxFont() { } - - wxFont(int size, - int family, - int style, - int weight, - bool underlined = false, - const wxString& face = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT) - { - (void)Create(size, family, style, weight, underlined, face, encoding); - } - - wxFont(const wxSize& pixelSize, - int family, - int style, - int weight, - bool underlined = false, - const wxString& face = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT) - { - (void)Create(pixelSize, family, style, weight, - underlined, face, encoding); - } - - wxFont(const wxNativeFontInfo& info, WXHFONT hFont = 0) - { - Create(info, hFont); - } - - wxFont(const wxString& fontDesc); - - bool Create(int size, - int family, - int style, - int weight, - bool underlined = false, - const wxString& face = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT) - { - return DoCreate(size, wxDefaultSize, false, family, style, - weight, underlined, face, encoding); - } - - bool Create(const wxSize& pixelSize, - int family, - int style, - int weight, - bool underlined = false, - const wxString& face = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT) - { - return DoCreate(-1, pixelSize, true, family, style, - weight, underlined, face, encoding); - } - - bool Create(const wxNativeFontInfo& info, WXHFONT hFont = 0); - - virtual ~wxFont(); - - // wxFontBase overridden functions - virtual wxString GetNativeFontInfoDesc() const; - virtual wxString GetNativeFontInfoUserDesc() const; - - // implement base class pure virtuals - virtual int GetPointSize() const; - virtual wxSize GetPixelSize() const; - virtual bool IsUsingSizeInPixels() const; - virtual int GetFamily() const; - virtual int GetStyle() const; - virtual int GetWeight() const; - virtual bool GetUnderlined() const; - virtual wxString GetFaceName() const; - virtual wxFontEncoding GetEncoding() const; - virtual const wxNativeFontInfo *GetNativeFontInfo() const; - - virtual void SetPointSize(int pointSize); - virtual void SetPixelSize(const wxSize& pixelSize); - virtual void SetFamily(int family); - virtual void SetStyle(int style); - virtual void SetWeight(int weight); - virtual bool SetFaceName(const wxString& faceName); - virtual void SetUnderlined(bool underlined); - virtual void SetEncoding(wxFontEncoding encoding); - - virtual bool IsFixedWidth() const; - - // implementation only from now on - // ------------------------------- - - virtual bool IsFree() const; - virtual bool RealizeResource(); - virtual WXHANDLE GetResourceHandle() const; - virtual bool FreeResource(bool force = false); - - // for consistency with other wxMSW classes - WXHFONT GetHFONT() const; - - /* - virtual bool UseResource(); - virtual bool ReleaseResource(); - */ - -protected: - // real font creation function, used in all cases - bool DoCreate(int size, - const wxSize& pixelSize, - bool sizeUsingPixels, - int family, - int style, - int weight, - bool underlined = false, - const wxString& face = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); - - virtual void DoSetNativeFontInfo(const wxNativeFontInfo& info); - - void Unshare(); - -private: - DECLARE_DYNAMIC_CLASS(wxFont) -}; - -#endif // _WX_FONT_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/fontdlg.h b/desmume/src/windows/wx/include/wx/msw/fontdlg.h deleted file mode 100644 index 5892d2e60..000000000 --- a/desmume/src/windows/wx/include/wx/msw/fontdlg.h +++ /dev/null @@ -1,46 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/fontdlg.h -// Purpose: wxFontDialog class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: fontdlg.h 38448 2006-03-30 14:04:17Z ABX $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_FONTDLG_H_ -#define _WX_MSW_FONTDLG_H_ - -// ---------------------------------------------------------------------------- -// wxFontDialog -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFontDialog : public wxFontDialogBase -{ -public: - wxFontDialog() : wxFontDialogBase() { /* must be Create()d later */ } - wxFontDialog(wxWindow *parent) - : wxFontDialogBase(parent) { Create(parent); } - wxFontDialog(wxWindow *parent, const wxFontData& data) - : wxFontDialogBase(parent, data) { Create(parent, data); } - - virtual int ShowModal(); - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated interface, don't use - wxDEPRECATED( wxFontDialog(wxWindow *parent, const wxFontData *data) ); -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxFontDialog) -}; - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated interface, don't use -inline wxFontDialog::wxFontDialog(wxWindow *parent, const wxFontData *data) - : wxFontDialogBase(parent) { InitFontData(data); Create(parent); } -#endif // WXWIN_COMPATIBILITY_2_6 - -#endif - // _WX_MSW_FONTDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/fontenum.h b/desmume/src/windows/wx/include/wx/msw/fontenum.h deleted file mode 100644 index c43ae2cac..000000000 --- a/desmume/src/windows/wx/include/wx/msw/fontenum.h +++ /dev/null @@ -1,40 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/fontenum.h -// Purpose: wxFontEnumerator class for Windows -// Author: Julian Smart -// Modified by: -// Created: 04/01/98 -// RCS-ID: $Id: fontenum.h 39461 2006-05-29 21:12:51Z ABX $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FONTENUM_MSW_H_ -#define _WX_FONTENUM_MSW_H_ - -/* - * wxFontEnumerator: for gathering font information - */ - -class wxFontEnumerator: public wxObject -{ -DECLARE_CLASS(wxFontEnumerator) -public: - wxFontEnumerator() {} - - // Enumerate the fonts. - bool Enumerate(); - - // Stop enumeration if false is returned. - // By default, the enumerator stores the facenames in a list for - // retrieval via GetFacenames(). - virtual bool OnFont(const wxFont& font); - - // Return the list of facenames. - wxStringList& GetFacenames() { return (wxStringList&) m_faceNames; } -protected: - wxStringList m_faceNames; -}; - -#endif - // _WX_FONTENUM_MSW_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/frame.h b/desmume/src/windows/wx/include/wx/msw/frame.h deleted file mode 100644 index 6139e5a29..000000000 --- a/desmume/src/windows/wx/include/wx/msw/frame.h +++ /dev/null @@ -1,172 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/frame.h -// Purpose: wxFrame class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: frame.h 45498 2007-04-16 13:03:05Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FRAME_H_ -#define _WX_FRAME_H_ - -class WXDLLEXPORT wxFrame : public wxFrameBase -{ -public: - // construction - wxFrame() { Init(); } - wxFrame(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr) - { - Init(); - - Create(parent, id, title, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr); - - virtual ~wxFrame(); - - // implement base class pure virtuals - virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL); - virtual void Raise(); - - // implementation only from now on - // ------------------------------- - - // event handlers - void OnSysColourChanged(wxSysColourChangedEvent& event); - - // Toolbar -#if wxUSE_TOOLBAR - virtual wxToolBar* CreateToolBar(long style = -1, - wxWindowID id = wxID_ANY, - const wxString& name = wxToolBarNameStr); -#endif // wxUSE_TOOLBAR - - // Status bar -#if wxUSE_STATUSBAR - virtual wxStatusBar* OnCreateStatusBar(int number = 1, - long style = wxST_SIZEGRIP, - wxWindowID id = 0, - const wxString& name = wxStatusLineNameStr); - - // Hint to tell framework which status bar to use: the default is to use - // native one for the platforms which support it (Win32), the generic one - // otherwise - - // TODO: should this go into a wxFrameworkSettings class perhaps? - static void UseNativeStatusBar(bool useNative) - { m_useNativeStatusBar = useNative; } - static bool UsesNativeStatusBar() - { return m_useNativeStatusBar; } -#endif // wxUSE_STATUSBAR - -#if wxUSE_MENUS - WXHMENU GetWinMenu() const { return m_hMenu; } -#endif // wxUSE_MENUS - - // event handlers - bool HandlePaint(); - 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 - WXHWND GetToolTipCtrl() const { return m_hwndToolTip; } - void SetToolTipCtrl(WXHWND hwndTT) { m_hwndToolTip = hwndTT; } -#endif // tooltips - - // a MSW only function which sends a size event to the window using its - // current size - this has an effect of refreshing the window layout - virtual void SendSizeEvent(); - - virtual wxPoint GetClientAreaOrigin() const; - - // override base class version to add menu bar accel processing - virtual bool MSWTranslateMessage(WXMSG *msg) - { - return MSWDoTranslateMessage(this, msg); - } - - // window proc for the frames - virtual WXLRESULT MSWWindowProc(WXUINT message, - WXWPARAM wParam, - WXLPARAM lParam); - -protected: - // common part of all ctors - void Init(); - - // override base class virtuals - virtual void DoGetClientSize(int *width, int *height) const; - virtual void DoSetClientSize(int width, int height); - -#if wxUSE_MENUS_NATIVE - // perform MSW-specific action when menubar is changed - virtual void AttachMenuBar(wxMenuBar *menubar); - - // a plug in for MDI frame classes which need to do something special when - // the menubar is set - virtual void InternalSetMenuBar(); -#endif // wxUSE_MENUS_NATIVE - - // propagate our state change to all child frames - void IconizeChildFrames(bool bIconize); - - // the real implementation of MSWTranslateMessage(), also used by - // wxMDIChildFrame - bool MSWDoTranslateMessage(wxFrame *frame, WXMSG *msg); - - // handle WM_INITMENUPOPUP message to generate wxEVT_MENU_OPEN - bool HandleInitMenuPopup(WXHMENU hMenu); - - virtual bool IsMDIChild() const { return false; } - - // get default (wxWidgets) icon for the frame - virtual WXHICON GetDefaultIcon() const; - -#if wxUSE_TOOLBAR - virtual void PositionToolBar(); -#endif // wxUSE_TOOLBAR - -#if wxUSE_STATUSBAR - virtual void PositionStatusBar(); - - static bool m_useNativeStatusBar; -#endif // wxUSE_STATUSBAR - -#if wxUSE_MENUS - // frame menu, NULL if none - WXHMENU m_hMenu; -#endif // wxUSE_MENUS - -private: -#if wxUSE_TOOLTIPS - WXHWND m_hwndToolTip; -#endif // tooltips - - // used by IconizeChildFrames(), see comments there - bool m_wasMinimized; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxFrame) -}; - -#endif - // _WX_FRAME_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/gauge95.h b/desmume/src/windows/wx/include/wx/msw/gauge95.h deleted file mode 100644 index c6c74df20..000000000 --- a/desmume/src/windows/wx/include/wx/msw/gauge95.h +++ /dev/null @@ -1,70 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: gauge95.h -// Purpose: wxGauge95 class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: gauge95.h 43881 2006-12-09 19:48:21Z PC $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _GAUGE95_H_ -#define _GAUGE95_H_ - -#if wxUSE_GAUGE - -extern WXDLLEXPORT_DATA(const wxChar) wxGaugeNameStr[]; - -// Group box -class WXDLLEXPORT wxGauge95 : public wxGaugeBase -{ -public: - wxGauge95() { } - - wxGauge95(wxWindow *parent, - wxWindowID id, - int range, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxGA_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxGaugeNameStr) - { - (void)Create(parent, id, range, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - int range, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxGA_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxGaugeNameStr); - - // set gauge range/value - virtual void SetRange(int range); - virtual void SetValue(int pos); - - // overriden base class virtuals - virtual bool SetForegroundColour(const wxColour& col); - virtual bool SetBackgroundColour(const wxColour& col); - - - void SetIndeterminateMode(); - void SetDeterminateMode(); - void Pulse(); - - WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - -protected: - virtual wxSize DoGetBestSize() const; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxGauge95) -}; - -#endif // wxUSE_GAUGE - -#endif - // _GAUGEMSW_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/gccpriv.h b/desmume/src/windows/wx/include/wx/msw/gccpriv.h deleted file mode 100644 index db4c72a84..000000000 --- a/desmume/src/windows/wx/include/wx/msw/gccpriv.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - Name: wx/msw/gccpriv.h - Purpose: MinGW/Cygwin definitions - Author: Vadim Zeitlin - Modified by: - Created: - RCS-ID: $Id: gccpriv.h 36155 2005-11-10 16:16:05Z ABX $ - Copyright: (c) Vadim Zeitlin - Licence: wxWindows Licence -*/ - -/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ - -#ifndef _WX_MSW_GCCPRIV_H_ -#define _WX_MSW_GCCPRIV_H_ - -#if defined(__MINGW32__) && !defined(__GNUWIN32__) - #define __GNUWIN32__ -#endif - -#if defined(__MINGW32__) && ( ( __GNUC__ > 2 ) || ( ( __GNUC__ == 2 ) && ( __GNUC_MINOR__ >= 95 ) ) ) - #include <_mingw.h> -#endif - -#if defined( __MINGW32__ ) && !defined(__WINE__) && !defined( HAVE_W32API_H ) - #if __MINGW32_MAJOR_VERSION >= 1 - #define HAVE_W32API_H - #endif -#elif defined( __CYGWIN__ ) && !defined( HAVE_W32API_H ) - #if ( __GNUC__ > 2 ) - #define HAVE_W32API_H - #endif -#endif - -#if wxCHECK_WATCOM_VERSION(1,0) - #define HAVE_W32API_H -#endif - -/* check for MinGW/Cygwin w32api version ( releases >= 0.5, only ) */ -#if defined( HAVE_W32API_H ) -#include <w32api.h> -#endif - -/* Watcom can't handle defined(xxx) here: */ -#if defined(__W32API_MAJOR_VERSION) && defined(__W32API_MINOR_VERSION) - #define wxCHECK_W32API_VERSION( major, minor ) \ - ( ( ( __W32API_MAJOR_VERSION > (major) ) \ - || ( __W32API_MAJOR_VERSION == (major) && __W32API_MINOR_VERSION >= (minor) ) ) ) -#else - #define wxCHECK_W32API_VERSION( major, minor ) (0) -#endif - -/* Cygwin / Mingw32 with gcc >= 2.95 use new windows headers which - are more ms-like (header author is Anders Norlander, hence the name) */ -#if (defined(__MINGW32__) || defined(__CYGWIN__) || defined(__WINE__)) && ((__GNUC__>2) || ((__GNUC__==2) && (__GNUC_MINOR__>=95))) - #ifndef wxUSE_NORLANDER_HEADERS - #define wxUSE_NORLANDER_HEADERS 1 - #endif -#else - #ifndef wxUSE_NORLANDER_HEADERS - #define wxUSE_NORLANDER_HEADERS 0 - #endif -#endif - -/* "old" GNUWIN32 is the one without Norlander's headers: it lacks the - standard Win32 headers and we define the used stuff ourselves for it - in wx/msw/gnuwin32/extra.h */ -#if defined(__GNUC__) && !wxUSE_NORLANDER_HEADERS - #define __GNUWIN32_OLD__ -#endif - -/* Cygwin 1.0 */ -#if defined(__CYGWIN__) && ((__GNUC__==2) && (__GNUC_MINOR__==9)) - #define __CYGWIN10__ -#endif - -/* Check for Mingw runtime version: */ -#if defined(__MINGW32_MAJOR_VERSION) && defined(__MINGW32_MINOR_VERSION) - #define wxCHECK_MINGW32_VERSION( major, minor ) \ - ( ( ( __MINGW32_MAJOR_VERSION > (major) ) \ - || ( __MINGW32_MAJOR_VERSION == (major) && __MINGW32_MINOR_VERSION >= (minor) ) ) ) -#else - #define wxCHECK_MINGW32_VERSION( major, minor ) (0) -#endif - -/* Mingw runtime 1.0-20010604 has some missing _tXXXX functions, - so let's define them ourselves: */ -#if defined(__GNUWIN32__) && wxCHECK_W32API_VERSION( 1, 0 ) \ - && !wxCHECK_W32API_VERSION( 1, 1 ) - #ifndef _tsetlocale - #if wxUSE_UNICODE - #define _tsetlocale _wsetlocale - #else - #define _tsetlocale setlocale - #endif - #endif - #ifndef _tgetenv - #if wxUSE_UNICODE - #define _tgetenv _wgetenv - #else - #define _tgetenv getenv - #endif - #endif - #ifndef _tfopen - #if wxUSE_UNICODE - #define _tfopen _wfopen - #else - #define _tfopen fopen - #endif - #endif -#endif - -/* current (= before mingw-runtime 3.3) mingw32 headers forget to - define _puttchar, this will probably be fixed in the next versions but - for now do it ourselves - */ -#if defined( __MINGW32__ ) && \ - !wxCHECK_MINGW32_VERSION(3,3) && !defined( _puttchar ) - #ifdef wxUSE_UNICODE - #define _puttchar putwchar - #else - #define _puttchar puttchar - #endif -#endif - -#endif - /* _WX_MSW_GCCPRIV_H_ */ diff --git a/desmume/src/windows/wx/include/wx/msw/gdiimage.h b/desmume/src/windows/wx/include/wx/msw/gdiimage.h deleted file mode 100644 index 87582e104..000000000 --- a/desmume/src/windows/wx/include/wx/msw/gdiimage.h +++ /dev/null @@ -1,189 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: include/wx/msw/gdiimage.h -// Purpose: wxGDIImage class: base class for wxBitmap, wxIcon, wxCursor -// under MSW -// Author: Vadim Zeitlin -// Modified by: -// Created: 20.11.99 -// RCS-ID: $Id: gdiimage.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -// NB: this is a private header, it is not intended to be directly included by -// user code (but may be included from other, public, wxWin headers - -#ifndef _WX_MSW_GDIIMAGE_H_ -#define _WX_MSW_GDIIMAGE_H_ - -#include "wx/gdiobj.h" // base class -#include "wx/gdicmn.h" // wxBITMAP_TYPE_INVALID -#include "wx/list.h" - -class WXDLLIMPEXP_FWD_CORE wxGDIImageRefData; -class WXDLLIMPEXP_FWD_CORE wxGDIImageHandler; -class WXDLLIMPEXP_FWD_CORE wxGDIImage; - -WX_DECLARE_EXPORTED_LIST(wxGDIImageHandler, wxGDIImageHandlerList); - -// ---------------------------------------------------------------------------- -// wxGDIImageRefData: common data fields for all derived classes -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxGDIImageRefData : public wxGDIRefData -{ -public: - wxGDIImageRefData() - { - m_width = m_height = m_depth = 0; - - m_handle = 0; - } - - wxGDIImageRefData(const wxGDIImageRefData& data) : wxGDIRefData(data) - { - m_width = data.m_width; - m_height = data.m_height; - m_depth = data.m_depth; - - // can't copy handles like this, derived class copy ctor must do it! - m_handle = NULL; - } - - // accessors - bool IsOk() const { return m_handle != 0; } - - void SetSize(int w, int h) { m_width = w; m_height = h; } - - // free the ressources we allocated - virtual void Free() = 0; - - // for compatibility, the member fields are public - - // the size of the image - int m_width, m_height; - - // the depth of the image - int m_depth; - - // the handle to it - union - { - WXHANDLE m_handle; // for untyped access - WXHBITMAP m_hBitmap; - WXHICON m_hIcon; - WXHCURSOR m_hCursor; - }; -}; - -// ---------------------------------------------------------------------------- -// wxGDIImageHandler: a class which knows how to load/save wxGDIImages. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxGDIImageHandler : public wxObject -{ -public: - // ctor - wxGDIImageHandler() { m_type = wxBITMAP_TYPE_INVALID; } - wxGDIImageHandler(const wxString& name, - const wxString& ext, - long type) - : m_name(name), m_extension(ext) - { - m_type = type; - } - - // accessors - void SetName(const wxString& name) { m_name = name; } - void SetExtension(const wxString& ext) { m_extension = ext; } - void SetType(long type) { m_type = type; } - - const wxString& GetName() const { return m_name; } - const wxString& GetExtension() const { return m_extension; } - long GetType() const { return m_type; } - - // real handler operations: to implement in derived classes - virtual bool Create(wxGDIImage *image, - const void* data, - long flags, - int width, int height, int depth = 1) = 0; - virtual bool Load(wxGDIImage *image, - const wxString& name, - long flags, - int desiredWidth, int desiredHeight) = 0; - virtual bool Save(wxGDIImage *image, - const wxString& name, - int type) = 0; - -protected: - wxString m_name; - wxString m_extension; - long m_type; -}; - -// ---------------------------------------------------------------------------- -// wxGDIImage: this class supports GDI image handlers which may be registered -// dynamically and will be used for loading/saving the images in the specified -// format. It also falls back to wxImage if no appropriate image is found. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxGDIImage : public wxGDIObject -{ -public: - // handlers list interface - static wxGDIImageHandlerList& GetHandlers() { return ms_handlers; } - - static void AddHandler(wxGDIImageHandler *handler); - static void InsertHandler(wxGDIImageHandler *handler); - static bool RemoveHandler(const wxString& name); - - static wxGDIImageHandler *FindHandler(const wxString& name); - static wxGDIImageHandler *FindHandler(const wxString& extension, long type); - static wxGDIImageHandler *FindHandler(long type); - - static void InitStandardHandlers(); - static void CleanUpHandlers(); - - // access to the ref data casted to the right type - wxGDIImageRefData *GetGDIImageData() const - { return (wxGDIImageRefData *)m_refData; } - - // accessors - WXHANDLE GetHandle() const - { return IsNull() ? 0 : GetGDIImageData()->m_handle; } - void SetHandle(WXHANDLE handle) - { AllocExclusive(); GetGDIImageData()->m_handle = handle; } - - bool Ok() const { return IsOk(); } - bool IsOk() const { return GetHandle() != 0; } - - int GetWidth() const { return IsNull() ? 0 : GetGDIImageData()->m_width; } - int GetHeight() const { return IsNull() ? 0 : GetGDIImageData()->m_height; } - int GetDepth() const { return IsNull() ? 0 : GetGDIImageData()->m_depth; } - - void SetWidth(int w) { AllocExclusive(); GetGDIImageData()->m_width = w; } - void SetHeight(int h) { AllocExclusive(); GetGDIImageData()->m_height = h; } - void SetDepth(int d) { AllocExclusive(); GetGDIImageData()->m_depth = d; } - - void SetSize(int w, int h) - { - AllocExclusive(); - GetGDIImageData()->SetSize(w, h); - } - void SetSize(const wxSize& size) { SetSize(size.x, size.y); } - - // forward some of base class virtuals to wxGDIImageRefData - bool FreeResource(bool force = false); - virtual WXHANDLE GetResourceHandle() const; - -protected: - // create the data for the derived class here - virtual wxGDIImageRefData *CreateData() const = 0; - - // implement the wxObject method in terms of our, more specific, one - virtual wxObjectRefData *CreateRefData() const { return CreateData(); } - - static wxGDIImageHandlerList ms_handlers; -}; - -#endif // _WX_MSW_GDIIMAGE_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/genrcdefs.h b/desmume/src/windows/wx/include/wx/msw/genrcdefs.h deleted file mode 100644 index 3608ccb7c..000000000 --- a/desmume/src/windows/wx/include/wx/msw/genrcdefs.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Name: wx/msw/genrcdefs.h - * Purpose: Emit preprocessor symbols into rcdefs.h for resource compiler - * Author: Mike Wetherell - * RCS-ID: $Id: genrcdefs.h 36133 2005-11-08 22:49:46Z MW $ - * Copyright: (c) 2005 Mike Wetherell - * Licence: wxWindows licence - */ - -#define EMIT(line) line - -EMIT(#ifndef _WX_RCDEFS_H) -EMIT(#define _WX_RCDEFS_H) - -#ifdef _MSC_FULL_VER -EMIT(#define WX_MSC_FULL_VER _MSC_FULL_VER) -#endif - -#ifdef _M_AMD64 -EMIT(#define WX_CPU_AMD64) -#endif - -#ifdef _M_ARM -EMIT(#define WX_CPU_ARM) -#endif - -#ifdef _M_IA64 -EMIT(#define WX_CPU_IA64) -#endif - -#if defined _M_IX86 || defined _X86_ -EMIT(#define WX_CPU_X86) -#endif - -#ifdef _M_PPC -EMIT(#define WX_CPU_PPC) -#endif - -#ifdef _M_SH -EMIT(#define WX_CPU_SH) -#endif - -EMIT(#endif) diff --git a/desmume/src/windows/wx/include/wx/msw/glcanvas.h b/desmume/src/windows/wx/include/wx/msw/glcanvas.h deleted file mode 100644 index 1204fd405..000000000 --- a/desmume/src/windows/wx/include/wx/msw/glcanvas.h +++ /dev/null @@ -1,128 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/glcanvas.h -// Purpose: wxGLCanvas, for using OpenGL with wxWidgets under Windows -// Author: Julian Smart -// Modified by: -// Created: 04/01/98 -// RCS-ID: $Id: glcanvas.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_GLCANVAS_H_ -#define _WX_GLCANVAS_H_ - -#include "wx/palette.h" -#include "wx/scrolwin.h" - -#include "wx/msw/wrapwin.h" - -#include <GL/gl.h> - -class WXDLLIMPEXP_FWD_GL wxGLCanvas; /* forward reference */ - -class WXDLLIMPEXP_GL wxGLContext: public wxObject -{ -public: - wxGLContext(wxGLCanvas *win, const wxGLContext* other=NULL /* for sharing display lists */ ); - virtual ~wxGLContext(); - - void SetCurrent(const wxGLCanvas& win) const; - inline HGLRC GetGLRC() const { return m_glContext; } - -protected: - HGLRC m_glContext; - -private: - DECLARE_CLASS(wxGLContext) -}; - -class WXDLLIMPEXP_GL wxGLCanvas: public wxWindow -{ -public: - // This ctor is identical to the next, except for the fact that it - // doesn't create an implicit wxGLContext. - // The attribList parameter has been moved to avoid overload clashes. - wxGLCanvas(wxWindow *parent, wxWindowID id = wxID_ANY, - int* attribList = 0, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = wxGLCanvasName, - const wxPalette& palette = wxNullPalette); - - wxGLCanvas(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxString& name = wxGLCanvasName, int *attribList = 0, - const wxPalette& palette = wxNullPalette); - - wxGLCanvas(wxWindow *parent, - const wxGLContext *shared, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxGLCanvasName, - int *attribList = (int *) NULL, - const wxPalette& palette = wxNullPalette); - - wxGLCanvas(wxWindow *parent, - const wxGLCanvas *shared, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxGLCanvasName, - int *attribList = 0, - const wxPalette& palette = wxNullPalette); - - virtual ~wxGLCanvas(); - - // Replaces wxWindow::Create functionality, since - // we need to use a different window class - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos, const wxSize& size, - long style, const wxString& name); - - void SetCurrent(const wxGLContext& RC) const; - void SetCurrent(); - -#ifdef __WXUNIVERSAL__ - virtual bool SetCurrent(bool doit) { return wxWindow::SetCurrent(doit); }; -#endif - - void SetColour(const wxChar *colour); - - void SwapBuffers(); - - void OnSize(wxSizeEvent& event); - - void OnQueryNewPalette(wxQueryNewPaletteEvent& event); - - void OnPaletteChanged(wxPaletteChangedEvent& event); - - inline wxGLContext* GetContext() const { return m_glContext; } - - inline WXHDC GetHDC() const { return m_hDC; } - - void SetupPixelFormat(int *attribList = (int *) NULL); - - void SetupPalette(const wxPalette& palette); - - wxPalette CreateDefaultPalette(); - - inline wxPalette* GetPalette() const { return (wxPalette *) &m_palette; } - -protected: - wxGLContext* m_glContext; // this is typedef-ed ptr, in fact - wxPalette m_palette; - WXHDC m_hDC; - -private: - DECLARE_EVENT_TABLE() - DECLARE_CLASS(wxGLCanvas) -}; - -#endif - // _WX_GLCANVAS_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/gsockmsw.h b/desmume/src/windows/wx/include/wx/msw/gsockmsw.h deleted file mode 100644 index 6b5149ebb..000000000 --- a/desmume/src/windows/wx/include/wx/msw/gsockmsw.h +++ /dev/null @@ -1,145 +0,0 @@ -/* ------------------------------------------------------------------------- - * Project: GSocket (Generic Socket) for WX - * Name: gsockmsw.h - * Copyright: (c) Guilhem Lavaux - * Licence: wxWindows Licence - * Purpose: GSocket MSW header - * CVSID: $Id: gsockmsw.h 33948 2005-05-04 18:57:50Z JS $ - * ------------------------------------------------------------------------- - */ - -#ifndef __GSOCK_MSW_H -#define __GSOCK_MSW_H - -#ifndef __GSOCKET_STANDALONE__ -#include "wx/setup.h" -#endif - -#if wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) - -#ifndef __GSOCKET_STANDALONE__ -#include "wx/gsocket.h" -#else -#include "gsocket.h" -#endif - -#include "wx/msw/wrapwin.h" - -#if defined(__CYGWIN__) - //CYGWIN gives annoying warning about runtime stuff if we don't do this -# define USE_SYS_TYPES_FD_SET -# include <sys/types.h> -#endif - -#if defined(__WXWINCE__) || defined(__CYGWIN__) -#include <winsock.h> -#endif - -class GSocketGUIFunctionsTableConcrete: public GSocketGUIFunctionsTable -{ -public: - virtual bool OnInit(); - virtual void OnExit(); - virtual bool CanUseEventLoop(); - virtual bool Init_Socket(GSocket *socket); - virtual void Destroy_Socket(GSocket *socket); - virtual void Enable_Events(GSocket *socket); - virtual void Disable_Events(GSocket *socket); -}; - -/* Definition of GSocket */ -class GSocket -{ -public: - GSocket(); - ~GSocket(); - bool IsOk() { return m_ok; } - void Close(); - void Shutdown(); - GSocketError SetLocal(GAddress *address); - GSocketError SetPeer(GAddress *address); - GAddress *GetLocal(); - GAddress *GetPeer(); - GSocketError SetServer(); - GSocket *WaitConnection(); - bool SetReusable(); - GSocketError Connect(GSocketStream stream); - GSocketError SetNonOriented(); - int Read(char *buffer, int size); - int Write(const char *buffer, int size); - GSocketEventFlags Select(GSocketEventFlags flags); - void SetNonBlocking(bool non_block); - void SetTimeout(unsigned long millis); - GSocketError WXDLLIMPEXP_NET GetError(); - void SetCallback(GSocketEventFlags flags, - GSocketCallback callback, char *cdata); - void UnsetCallback(GSocketEventFlags flags); - GSocketError GetSockOpt(int level, int optname, - void *optval, int *optlen); - GSocketError SetSockOpt(int level, int optname, - const void *optval, int optlen); -protected: - GSocketError Input_Timeout(); - GSocketError Output_Timeout(); - GSocketError Connect_Timeout(); - int Recv_Stream(char *buffer, int size); - int Recv_Dgram(char *buffer, int size); - int Send_Stream(const char *buffer, int size); - int Send_Dgram(const char *buffer, int size); - bool m_ok; - -/* TODO: Make these protected */ -public: - SOCKET m_fd; - GAddress *m_local; - GAddress *m_peer; - GSocketError m_error; - - /* Attributes */ - bool m_non_blocking; - bool m_server; - bool m_stream; - bool m_establishing; - bool m_reusable; - struct timeval m_timeout; - - /* Callbacks */ - GSocketEventFlags m_detected; - GSocketCallback m_cbacks[GSOCK_MAX_EVENT]; - char *m_data[GSOCK_MAX_EVENT]; - int m_msgnumber; -}; - -#ifdef __cplusplus -extern "C" { -#endif - -/* Definition of GAddress */ -struct _GAddress -{ - struct sockaddr *m_addr; - size_t m_len; - - GAddressType m_family; - int m_realfamily; - - GSocketError m_error; -}; - - -/* GAddress */ - -GSocketError _GAddress_translate_from(GAddress *address, - struct sockaddr *addr, int len); -GSocketError _GAddress_translate_to (GAddress *address, - struct sockaddr **addr, int *len); -GSocketError _GAddress_Init_INET(GAddress *address); -GSocketError _GAddress_Init_UNIX(GAddress *address); - -#ifdef __cplusplus -} -#endif - -#endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */ - -#endif /* __GSOCK_MSW_H */ diff --git a/desmume/src/windows/wx/include/wx/msw/hand.cur b/desmume/src/windows/wx/include/wx/msw/hand.cur deleted file mode 100644 index e5a1fe7c2f5dd90249a5d60c1efe667188abd494..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmaLRp$@_@5XSMZASMtvLNdW55|1d4f<*8R-J><x!^}(|5rpI4ZlpDE&98UYrk6@9 zIdz@1k#us>j(h}1y1=n=ENO1aZf2$VR{kOR=PZ!3mt>Vdo%m$JT{@$^;ksa8i~S#5 j@rM$zG3%2xKdU)=t1#-UC)Xl<<Xzn2fB?o1Ka6G{)sc5s diff --git a/desmume/src/windows/wx/include/wx/msw/helpbest.h b/desmume/src/windows/wx/include/wx/msw/helpbest.h deleted file mode 100644 index 551fe8bbe..000000000 --- a/desmume/src/windows/wx/include/wx/msw/helpbest.h +++ /dev/null @@ -1,129 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/helpbest.h -// Purpose: Tries to load MS HTML Help, falls back to wxHTML upon failure -// Author: Mattia Barbon -// Modified by: -// Created: 02/04/2001 -// RCS-ID: $Id: helpbest.h 39440 2006-05-29 14:51:42Z VZ $ -// Copyright: (c) Mattia Barbon -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELPBEST_H_ -#define _WX_HELPBEST_H_ - -#if wxUSE_HELP && wxUSE_MS_HTML_HELP \ - && wxUSE_WXHTML_HELP && !defined(__WXUNIVERSAL__) - -#include "wx/helpbase.h" -#include "wx/html/helpfrm.h" // for wxHF_DEFAULT_STYLE - -class WXDLLIMPEXP_HTML wxBestHelpController: public wxHelpControllerBase -{ -public: - wxBestHelpController(wxWindow* parentWindow = NULL, - int style = wxHF_DEFAULT_STYLE) - : wxHelpControllerBase(parentWindow), - m_helpControllerType(wxUseNone), - m_helpController(NULL), - m_style(style) - { - } - - virtual ~wxBestHelpController() { delete m_helpController; } - - // Must call this to set the filename - virtual bool Initialize(const wxString& file); - virtual bool Initialize(const wxString& file, int WXUNUSED(server) ) { return Initialize( file ); } - - // If file is "", reloads file given in Initialize - virtual bool LoadFile(const wxString& file = wxEmptyString) - { - return m_helpController->LoadFile( GetValidFilename( file ) ); - } - - virtual bool DisplayContents() - { - return m_helpController->DisplayContents(); - } - - virtual bool DisplaySection(int sectionNo) - { - return m_helpController->DisplaySection( sectionNo ); - } - - virtual bool DisplaySection(const wxString& section) - { - return m_helpController->DisplaySection( section ); - } - - virtual bool DisplayBlock(long blockNo) - { - return m_helpController->DisplayBlock( blockNo ); - } - - virtual bool DisplayContextPopup(int contextId) - { - return m_helpController->DisplayContextPopup( contextId ); - } - - virtual bool DisplayTextPopup(const wxString& text, const wxPoint& pos) - { - return m_helpController->DisplayTextPopup( text, pos ); - } - - virtual bool KeywordSearch(const wxString& k, - wxHelpSearchMode mode = wxHELP_SEARCH_ALL) - { - return m_helpController->KeywordSearch( k, mode ); - } - - virtual bool Quit() - { - return m_helpController->Quit(); - } - - // Allows one to override the default settings for the help frame. - virtual void SetFrameParameters(const wxString& title, - const wxSize& size, - const wxPoint& pos = wxDefaultPosition, - bool newFrameEachTime = false) - { - m_helpController->SetFrameParameters( title, size, pos, - newFrameEachTime ); - } - - // Obtains the latest settings used by the help frame and the help frame. - virtual wxFrame *GetFrameParameters(wxSize *size = NULL, - wxPoint *pos = NULL, - bool *newFrameEachTime = NULL) - { - return m_helpController->GetFrameParameters( size, pos, - newFrameEachTime ); - } - - /// Set the window that can optionally be used for the help window's parent. - virtual void SetParentWindow(wxWindow* win) { m_helpController->SetParentWindow(win); } - - /// Get the window that can optionally be used for the help window's parent. - virtual wxWindow* GetParentWindow() const { return m_helpController->GetParentWindow(); } - -protected: - // Append/change extension if necessary. - wxString GetValidFilename(const wxString& file) const; - -protected: - enum HelpControllerType { wxUseNone, wxUseHtmlHelp, wxUseChmHelp }; - - HelpControllerType m_helpControllerType; - wxHelpControllerBase* m_helpController; - int m_style; - - DECLARE_DYNAMIC_CLASS(wxBestHelpController) - DECLARE_NO_COPY_CLASS(wxBestHelpController) -}; - -#endif // wxUSE_HELP && wxUSE_MS_HTML_HELP && wxUSE_WXHTML_HELP - -#endif - // _WX_HELPBEST_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/helpchm.h b/desmume/src/windows/wx/include/wx/msw/helpchm.h deleted file mode 100644 index c057232c5..000000000 --- a/desmume/src/windows/wx/include/wx/msw/helpchm.h +++ /dev/null @@ -1,60 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: helpchm.h -// Purpose: Help system: MS HTML Help implementation -// Author: Julian Smart -// Modified by: -// Created: 16/04/2000 -// RCS-ID: $Id: helpchm.h 39725 2006-06-14 17:46:51Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELPCHM_H_ -#define _WX_HELPCHM_H_ - -#if wxUSE_MS_HTML_HELP - -#include "wx/helpbase.h" - -class WXDLLEXPORT wxCHMHelpController : public wxHelpControllerBase -{ -public: - wxCHMHelpController(wxWindow* parentWindow = NULL): wxHelpControllerBase(parentWindow) { } - - // Must call this to set the filename - virtual bool Initialize(const wxString& file); - virtual bool Initialize(const wxString& file, int WXUNUSED(server) ) { return Initialize( file ); } - - // If file is "", reloads file given in Initialize - virtual bool LoadFile(const wxString& file = wxEmptyString); - virtual bool DisplayContents(); - virtual bool DisplaySection(int sectionNo); - virtual bool DisplaySection(const wxString& section); - virtual bool DisplayBlock(long blockNo); - virtual bool DisplayContextPopup(int contextId); - virtual bool DisplayTextPopup(const wxString& text, const wxPoint& pos); - virtual bool KeywordSearch(const wxString& k, - wxHelpSearchMode mode = wxHELP_SEARCH_ALL); - virtual bool Quit(); - - wxString GetHelpFile() const { return m_helpFile; } - - // helper of DisplayTextPopup(), also used in wxSimpleHelpProvider::ShowHelp - static bool ShowContextHelpPopup(const wxString& text, - const wxPoint& pos, - wxWindow *window); - -protected: - // Append extension if necessary. - wxString GetValidFilename(const wxString& file) const; - -protected: - wxString m_helpFile; - - DECLARE_CLASS(wxCHMHelpController) -}; - -#endif // wxUSE_MS_HTML_HELP - -#endif -// _WX_HELPCHM_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/helpwin.h b/desmume/src/windows/wx/include/wx/msw/helpwin.h deleted file mode 100644 index 7c363fbd9..000000000 --- a/desmume/src/windows/wx/include/wx/msw/helpwin.h +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: helpwin.h -// Purpose: Help system: WinHelp implementation -// Author: Julian Smart -// Modified by: -// Created: 04/01/98 -// RCS-ID: $Id: helpwin.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELPWIN_H_ -#define _WX_HELPWIN_H_ - -#include "wx/wx.h" - -#if wxUSE_HELP - -#include "wx/helpbase.h" - -class WXDLLEXPORT wxWinHelpController: public wxHelpControllerBase -{ - DECLARE_CLASS(wxWinHelpController) - -public: - wxWinHelpController(wxWindow* parentWindow = NULL): wxHelpControllerBase(parentWindow) {} - virtual ~wxWinHelpController() {} - - // Must call this to set the filename - virtual bool Initialize(const wxString& file); - virtual bool Initialize(const wxString& file, int WXUNUSED(server) ) { return Initialize( file ); } - - // If file is "", reloads file given in Initialize - virtual bool LoadFile(const wxString& file = wxEmptyString); - virtual bool DisplayContents(); - virtual bool DisplaySection(int sectionNo); - virtual bool DisplaySection(const wxString& section) { return KeywordSearch(section); } - virtual bool DisplayBlock(long blockNo); - virtual bool DisplayContextPopup(int contextId); - virtual bool KeywordSearch(const wxString& k, - wxHelpSearchMode mode = wxHELP_SEARCH_ALL); - virtual bool Quit(); - - inline wxString GetHelpFile() const { return m_helpFile; } - -protected: - // Append extension if necessary. - wxString GetValidFilename(const wxString& file) const; - -private: - wxString m_helpFile; -}; - -#endif // wxUSE_HELP -#endif -// _WX_HELPWIN_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/htmlhelp.h b/desmume/src/windows/wx/include/wx/msw/htmlhelp.h deleted file mode 100644 index 1bd4065ba..000000000 --- a/desmume/src/windows/wx/include/wx/msw/htmlhelp.h +++ /dev/null @@ -1,465 +0,0 @@ -/* - * wx/msw/htmlhelp.h - * Copyright 2004 Jacek Caban - * - * Originally written for the Wine project, and issued under - * the wxWindows License by kind permission of the author. - * - * License: wxWindows License - */ - -#ifndef __HTMLHELP_H__ -#define __HTMLHELP_H__ - -#define HH_DISPLAY_TOPIC 0x00 -#define HH_HELP_FINDER 0x00 -#define HH_DISPLAY_TOC 0x01 -#define HH_DISPLAY_INDEX 0x02 -#define HH_DISPLAY_SEARCH 0x03 -#define HH_SET_WIN_TYPE 0x04 -#define HH_GET_WIN_TYPE 0x05 -#define HH_GET_WIN_HANDLE 0x06 -#define HH_ENUM_INFO_TYPE 0x07 -#define HH_SET_INFO_TYPE 0x08 -#define HH_SYNC 0x09 -#define HH_RESERVED1 0x0A -#define HH_RESERVED2 0x0B -#define HH_RESERVED3 0x0C -#define HH_KEYWORD_LOOKUP 0x0D -#define HH_DISPLAY_TEXT_POPUP 0x0E -#define HH_HELP_CONTEXT 0x0F -#define HH_TP_HELP_CONTEXTMENU 0x10 -#define HH_TP_HELP_WM_HELP 0x11 -#define HH_CLOSE_ALL 0x12 -#define HH_ALINK_LOOKUP 0x13 -#define HH_GET_LAST_ERROR 0x14 -#define HH_ENUM_CATEGORY 0x15 -#define HH_ENUM_CATEGORY_IT 0x16 -#define HH_RESET_IT_FILTER 0x17 -#define HH_SET_INCLUSIVE_FILTER 0x18 -#define HH_SET_EXCLUSIVE_FILTER 0x19 -#define HH_INITIALIZE 0x1C -#define HH_UNINITIALIZE 0x1D -#define HH_PRETRANSLATEMESSAGE 0xFD -#define HH_SET_GLOBAL_PROPERTY 0xFC - -#define HHWIN_PROP_TAB_AUTOHIDESHOW 0x00000001 -#define HHWIN_PROP_ONTOP 0x00000002 -#define HHWIN_PROP_NOTITLEBAR 0x00000004 -#define HHWIN_PROP_NODEF_STYLES 0x00000008 -#define HHWIN_PROP_NODEF_EXSTYLES 0x00000010 -#define HHWIN_PROP_TRI_PANE 0x00000020 -#define HHWIN_PROP_NOTB_TEXT 0x00000040 -#define HHWIN_PROP_POST_QUIT 0x00000080 -#define HHWIN_PROP_AUTO_SYNC 0x00000100 -#define HHWIN_PROP_TRACKING 0x00000200 -#define HHWIN_PROP_TAB_SEARCH 0x00000400 -#define HHWIN_PROP_TAB_HISTORY 0x00000800 -#define HHWIN_PROP_TAB_FAVORITES 0x00001000 -#define HHWIN_PROP_CHANGE_TITLE 0x00002000 -#define HHWIN_PROP_NAV_ONLY_WIN 0x00004000 -#define HHWIN_PROP_NO_TOOLBAR 0x00008000 -#define HHWIN_PROP_MENU 0x00010000 -#define HHWIN_PROP_TAB_ADVSEARCH 0x00020000 -#define HHWIN_PROP_USER_POS 0x00040000 -#define HHWIN_PROP_TAB_CUSTOM1 0x00080000 -#define HHWIN_PROP_TAB_CUSTOM2 0x00100000 -#define HHWIN_PROP_TAB_CUSTOM3 0x00200000 -#define HHWIN_PROP_TAB_CUSTOM4 0x00400000 -#define HHWIN_PROP_TAB_CUSTOM5 0x00800000 -#define HHWIN_PROP_TAB_CUSTOM6 0x01000000 -#define HHWIN_PROP_TAB_CUSTOM7 0x02000000 -#define HHWIN_PROP_TAB_CUSTOM8 0x04000000 -#define HHWIN_PROP_TAB_CUSTOM9 0x08000000 -#define HHWIN_TB_MARGIN 0x10000000 - -#define HHWIN_PARAM_PROPERTIES 0x00000002 -#define HHWIN_PARAM_STYLES 0x00000004 -#define HHWIN_PARAM_EXSTYLES 0x00000008 -#define HHWIN_PARAM_RECT 0x00000010 -#define HHWIN_PARAM_NAV_WIDTH 0x00000020 -#define HHWIN_PARAM_SHOWSTATE 0x00000040 -#define HHWIN_PARAM_INFOTYPES 0x00000080 -#define HHWIN_PARAM_TB_FLAGS 0x00000100 -#define HHWIN_PARAM_EXPANSION 0x00000200 -#define HHWIN_PARAM_TABPOS 0x00000400 -#define HHWIN_PARAM_TABORDER 0x00000800 -#define HHWIN_PARAM_HISTORY_COUNT 0x00001000 -#define HHWIN_PARAM_CUR_TAB 0x00002000 - -#define HHWIN_BUTTON_EXPAND 0x00000002 -#define HHWIN_BUTTON_BACK 0x00000004 -#define HHWIN_BUTTON_FORWARD 0x00000008 -#define HHWIN_BUTTON_STOP 0x00000010 -#define HHWIN_BUTTON_REFRESH 0x00000020 -#define HHWIN_BUTTON_HOME 0x00000040 -#define HHWIN_BUTTON_BROWSE_FWD 0x00000080 -#define HHWIN_BUTTON_BROWSE_BCK 0x00000100 -#define HHWIN_BUTTON_NOTES 0x00000200 -#define HHWIN_BUTTON_CONTENTS 0x00000400 -#define HHWIN_BUTTON_SYNC 0x00000800 -#define HHWIN_BUTTON_OPTIONS 0x00001000 -#define HHWIN_BUTTON_PRINT 0x00002000 -#define HHWIN_BUTTON_INDEX 0x00004000 -#define HHWIN_BUTTON_SEARCH 0x00008000 -#define HHWIN_BUTTON_HISTORY 0x00010000 -#define HHWIN_BUTTON_FAVORITES 0x00020000 -#define HHWIN_BUTTON_JUMP1 0x00040000 -#define HHWIN_BUTTON_JUMP2 0x00080000 -#define HHWIN_BUTTON_ZOOM 0x00100000 -#define HHWIN_BUTTON_TOC_NEXT 0x00200000 -#define HHWIN_BUTTON_TOC_PREV 0x00400000 - -#define HHWIN_DEF_BUTTONS \ - (HHWIN_BUTTON_EXPAND | HHWIN_BUTTON_BACK | HHWIN_BUTTON_OPTIONS | HHWIN_BUTTON_PRINT) - -#define IDTB_EXPAND 200 -#define IDTB_CONTRACT 201 -#define IDTB_STOP 202 -#define IDTB_REFRESH 203 -#define IDTB_BACK 204 -#define IDTB_HOME 205 -#define IDTB_SYNC 206 -#define IDTB_PRINT 207 -#define IDTB_OPTIONS 208 -#define IDTB_FORWARD 209 -#define IDTB_NOTES 210 -#define IDTB_BROWSE_FWD 211 -#define IDTB_BROWSE_BACK 212 -#define IDTB_CONTENTS 213 -#define IDTB_INDEX 214 -#define IDTB_SEARCH 215 -#define IDTB_HISTORY 216 -#define IDTB_FAVORITES 217 -#define IDTB_JUMP1 218 -#define IDTB_JUMP2 219 -#define IDTB_CUSTOMIZE 221 -#define IDTB_ZOOM 222 -#define IDTB_TOC_NEXT 223 -#define IDTB_TOC_PREV 224 - -#define HHN_FIRST (0U-860U) -#define HHN_LAST (0U-879U) -#define HHN_NAVCOMPLETE HHN_FIRST -#define HHN_TRACK (HHN_FIRST-1) -#define HHN_WINDOW_CREATE (HHN_FIRST-2) - - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct tagHH_NOTIFY { - NMHDR hdr; - PCSTR pszurl; -} HH_NOTIFY; - -typedef struct tagHH_POPUPA { - int cbStruct; - HINSTANCE hinst; - UINT idString; - LPCSTR pszText; - POINT pt; - COLORREF clrForeground; - COLORREF clrBackground; - RECT rcMargins; - LPCSTR pszFont; -} HH_POPUPA; - -typedef struct tagHH_POPUPW { - int cbStruct; - HINSTANCE hinst; - UINT idString; - LPCWSTR pszText; - POINT pt; - COLORREF clrForeground; - COLORREF clrBackground; - RECT rcMargins; - LPCWSTR pszFont; -} HH_POPUPW; - -#ifdef _UNICODE -typedef HH_POPUPW HH_POPUP; -#else -typedef HH_POPUPA HH_POPUP; -#endif - -typedef struct tagHH_ALINKA { - int cbStruct; - BOOL fReserved; - LPCSTR pszKeywords; - LPCSTR pszUrl; - LPCSTR pszMsgText; - LPCSTR pszMsgTitle; - LPCSTR pszWindow; - BOOL fIndexOnFail; -} HH_ALINKA; - -typedef struct tagHH_ALINKW { - int cbStruct; - BOOL fReserved; - LPCWSTR pszKeywords; - LPCWSTR pszUrl; - LPCWSTR pszMsgText; - LPCWSTR pszMsgTitle; - LPCWSTR pszWindow; - BOOL fIndexOnFail; -} HH_ALINKW; - -#ifdef _UNICODE -typedef HH_ALINKW HH_ALINK; -typedef HH_ALINKW HH_AKLINK; -#else -typedef HH_ALINKA HH_ALINK; -typedef HH_ALINKA HH_AKLINK; -#endif - -enum { - HHWIN_NAVTYPE_TOC, - HHWIN_NAVTYPE_INDEX, - HHWIN_NAVTYPE_SEARCH, - HHWIN_NAVTYPE_FAVORITES, - HHWIN_NAVTYPE_HISTORY, - HHWIN_NAVTYPE_AUTHOR, - HHWIN_NAVTYPE_CUSTOM_FIRST = 11 -}; - -enum { - IT_INCLUSIVE, - IT_EXCLUSIVE, - IT_HIDDEN -}; - -typedef struct tagHH_ENUM_IT { - int cbStruct; - int iType; - LPCSTR pszCatName; - LPCSTR pszITName; - LPCSTR pszITDescription; -} HH_ENUM_IT, *PHH_ENUM_IT; - -typedef struct tagHH_ENUM_CAT { - int cbStruct; - LPCSTR pszCatName; - LPCSTR pszCatDescription; -} HH_ENUM_CAT, *PHH_ENUM_CAT; - -typedef struct tagHH_SET_INFOTYPE { - int cbStruct; - LPCSTR pszCatName; - LPCSTR pszInfoTypeName; -} HH_SET_INFOTYPE; - -typedef DWORD HH_INFOTYPE, *PHH_INFOTYPE; - -enum { - HHWIN_NAVTAB_TOP, - HHWIN_NAVTAB_LEFT, - HHWIN_NAVTAB_BOTTOM -}; - -#define HH_MAX_TABS 19 - -enum { - HH_TAB_CONTENTS, - HH_TAB_INDEX, - HH_TAB_SEARCH, - HH_TAB_FAVORITES, - HH_TAB_HISTORY, - HH_TAB_AUTHOR, - HH_TAB_CUSTOM_FIRST = 11, - HH_TAB_CUSTOM_LAST = HH_MAX_TABS -}; - -#define HH_MAX_TABS_CUSTOM (HH_TAB_CUSTOM_LAST-HH_TAB_CUSTOM_FIRST+1) -#define HH_FTS_DEFAULT_PROXIMITY -1 - -typedef struct tagHH_FTS_QUERYA { - int cbStruct; - BOOL fUniCodeStrings; - LPCSTR pszSearchQuery; - LONG iProximity; - BOOL fStemmedSearch; - BOOL fTitleOnly; - BOOL fExecute; - LPCSTR pszWindow; -} HH_FTS_QUERYA; - -typedef struct tagHH_FTS_QUERYW { - int cbStruct; - BOOL fUniCodeStrings; - LPCWSTR pszSearchQuery; - LONG iProximity; - BOOL fStemmedSearch; - BOOL fTitleOnly; - BOOL fExecute; - LPCWSTR pszWindow; -} HH_FTS_QUERYW; - -#ifdef _UNICODE -typedef HH_FTS_QUERYW HH_FTS_QUERY; -#else -typedef HH_FTS_QUERYA HH_FTS_QUERY; -#endif - -typedef struct tagHH_WINTYPEA { - int cbStruct; - BOOL fUniCodeStrings; - LPCSTR pszType; - DWORD fsValidMembers; - DWORD fsWinProperties; - LPCSTR pszCaption; - DWORD dwStyles; - DWORD dwExStyles; - RECT rcWindowPos; - int nShowState; - HWND hwndHelp; - HWND hwndCaller; - PHH_INFOTYPE paInfoTypes; - HWND hwndToolBar; - HWND hwndNavigation; - HWND hwndHTML; - int iNavWidth; - RECT rcHTML; - LPCSTR pszToc; - LPCSTR pszIndex; - LPCSTR pszFile; - LPCSTR pszHome; - DWORD fsToolBarFlags; - BOOL fNotExpanded; - int curNavType; - int tabpos; - int idNotify; - BYTE tabOrder[HH_MAX_TABS+1]; - int cHistory; - LPCSTR pszJump1; - LPCSTR pszJump2; - LPCSTR pszUrlJump1; - LPCSTR pszUrlJump2; - RECT rcMinSize; - int cbInfoTypes; - LPCSTR pszCustomTabs; -} HH_WINTYPEA, *PHH_WINTYPEA; - -typedef struct tagHH_WINTYPEW { - int cbStruct; - BOOL fUniCodeStrings; - LPCWSTR pszType; - DWORD fsValidMembers; - DWORD fsWinProperties; - LPCWSTR pszCaption; - DWORD dwStyles; - DWORD dwExStyles; - RECT rcWindowPos; - int nShowState; - HWND hwndHelp; - HWND hwndCaller; - PHH_INFOTYPE paInfoTypes; - HWND hwndToolBar; - HWND hwndNavigation; - HWND hwndHTML; - int iNavWidth; - RECT rcHTML; - LPCWSTR pszToc; - LPCWSTR pszIndex; - LPCWSTR pszFile; - LPCWSTR pszHome; - DWORD fsToolBarFlags; - BOOL fNotExpanded; - int curNavType; - int tabpos; - int idNotify; - BYTE tabOrder[HH_MAX_TABS+1]; - int cHistory; - LPCWSTR pszJump1; - LPCWSTR pszJump2; - LPCWSTR pszUrlJump1; - LPCWSTR pszUrlJump2; - RECT rcMinSize; - int cbInfoTypes; - LPCWSTR pszCustomTabs; -} HH_WINTYPEW, *PHH_WINTYPEW; - -#ifdef _UNICODE -typedef HH_WINTYPEW HH_WINTYPE; -#else -typedef HH_WINTYPEA HH_WINTYPE; -#endif - -enum { - HHACT_TAB_CONTENTS, - HHACT_TAB_INDEX, - HHACT_TAB_SEARCH, - HHACT_TAB_HISTORY, - HHACT_TAB_FAVORITES, - HHACT_EXPAND, - HHACT_CONTRACT, - HHACT_BACK, - HHACT_FORWARD, - HHACT_STOP, - HHACT_REFRESH, - HHACT_HOME, - HHACT_SYNC, - HHACT_OPTIONS, - HHACT_PRINT, - HHACT_HIGHLIGHT, - HHACT_CUSTOMIZE, - HHACT_JUMP1, - HHACT_JUMP2, - HHACT_ZOOM, - HHACT_TOC_NEXT, - HHACT_TOC_PREV, - HHACT_NOTES, - HHACT_LAST_ENUM -}; - -typedef struct tagHH_NTRACKA { - NMHDR hdr; - PCSTR pszCurUrl; - int idAction; - PHH_WINTYPEA phhWinType; -} HH_NTRACKA; - -typedef struct tagHH_NTRACKW { - NMHDR hdr; - PCSTR pszCurUrl; - int idAction; - PHH_WINTYPEW phhWinType; -} HH_NTRACKW; - -#ifdef _UNICODE -typedef HH_NTRACKW HH_NTRACK; -#else -typedef HH_NTRACKA HH_NTRACK; -#endif - -HWND WINAPI HtmlHelpA(HWND,LPCSTR,UINT,DWORD); -HWND WINAPI HtmlHelpA(HWND,LPCSTR,UINT,DWORD); -#define HtmlHelp WINELIB_NAME_AW(HtmlHelp) - -#define ATOM_HTMLHELP_API_ANSI (LPTSTR)14 -#define ATOM_HTMLHELP_API_UNICODE (LPTSTR)15 - -typedef enum tagHH_GPROPID { - HH_GPROPID_SINGLETHREAD = 1, - HH_GPROPID_TOOLBAR_MARGIN = 2, - HH_GPROPID_UI_LANGUAGE = 3, - HH_GPROPID_CURRENT_SUBSET = 4, - HH_GPROPID_CONTENT_LANGUAGE = 5 -} HH_GPROPID; - -#ifdef __WIDL_OAIDL_H - -typedef struct tagHH_GLOBAL_PROPERTY -{ - HH_GPROPID id; - VARIANT var; -} HH_GLOBAL_PROPERTY ; - -#endif /* __WIDL_OAIDL_H */ - -#ifdef __cplusplus -} -#endif - -#endif /* __HTMLHELP_H__ */ diff --git a/desmume/src/windows/wx/include/wx/msw/ia64.manifest b/desmume/src/windows/wx/include/wx/msw/ia64.manifest deleted file mode 100644 index 242ea4b62..000000000 --- a/desmume/src/windows/wx/include/wx/msw/ia64.manifest +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="0.64.1.0" - processorArchitecture="IA64" - name="Controls" - type="win32" -/> -<description>wxWindows application</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="IA64" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/desmume/src/windows/wx/include/wx/msw/icon.h b/desmume/src/windows/wx/include/wx/msw/icon.h deleted file mode 100644 index c9b822cd1..000000000 --- a/desmume/src/windows/wx/include/wx/msw/icon.h +++ /dev/null @@ -1,95 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/icon.h -// Purpose: wxIcon class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: icon.h 42752 2006-10-30 19:26:48Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ICON_H_ -#define _WX_ICON_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/msw/gdiimage.h" - -// --------------------------------------------------------------------------- -// icon data -// --------------------------------------------------------------------------- - -// notice that although wxIconRefData inherits from wxBitmapRefData, it is not -// a valid wxBitmapRefData -class WXDLLEXPORT wxIconRefData : public wxGDIImageRefData -{ -public: - wxIconRefData() { } - virtual ~wxIconRefData() { Free(); } - - virtual void Free(); -}; - -// --------------------------------------------------------------------------- -// Icon -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxIcon : public wxGDIImage -{ -public: - // ctors - // default - wxIcon() { } - - // from raw data - wxIcon(const char bits[], int width, int height); - - // from XPM data - wxIcon(const char **data) { CreateIconFromXpm(data); } - - wxIcon(char **data) { CreateIconFromXpm((const char **)data); } - - // from resource/file - wxIcon(const wxString& name, - long type = wxBITMAP_TYPE_ICO_RESOURCE, - int desiredWidth = -1, int desiredHeight = -1); - - wxIcon(const wxIconLocation& loc); - - virtual ~wxIcon(); - - virtual bool LoadFile(const wxString& name, - long type = wxBITMAP_TYPE_ICO_RESOURCE, - int desiredWidth = -1, int desiredHeight = -1); - - // implementation only from now on - wxIconRefData *GetIconData() const { return (wxIconRefData *)m_refData; } - - void SetHICON(WXHICON icon) { SetHandle((WXHANDLE)icon); } - WXHICON GetHICON() const { return (WXHICON)GetHandle(); } - - // create from bitmap (which should have a mask unless it's monochrome): - // there shouldn't be any implicit bitmap -> icon conversion (i.e. no - // ctors, assignment operators...), but it's ok to have such function - void CopyFromBitmap(const wxBitmap& bmp); - -protected: - virtual wxGDIImageRefData *CreateData() const - { - return new wxIconRefData; - } - - virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const; - - // create from XPM data - void CreateIconFromXpm(const char **data); - -private: - DECLARE_DYNAMIC_CLASS(wxIcon) -}; - -#endif - // _WX_ICON_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/imaglist.h b/desmume/src/windows/wx/include/wx/msw/imaglist.h deleted file mode 100644 index 9b72aaaa8..000000000 --- a/desmume/src/windows/wx/include/wx/msw/imaglist.h +++ /dev/null @@ -1,206 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/imaglist.h -// Purpose: wxImageList class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: imaglist.h 41271 2006-09-18 04:41:09Z KO $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_IMAGLIST_H_ -#define _WX_IMAGLIST_H_ - -#include "wx/bitmap.h" - -// Eventually we'll make this a reference-counted wxGDIObject. For -// now, the app must take care of ownership issues. That is, the -// image lists must be explicitly deleted after the control(s) that uses them -// is (are) deleted, or when the app exits. -class WXDLLEXPORT wxImageList : public wxObject -{ -public: - /* - * Public interface - */ - - wxImageList(); - - // Creates an image list. - // Specify the width and height of the images in the list, - // whether there are masks associated with them (e.g. if creating images - // from icons), and the initial size of the list. - wxImageList(int width, int height, bool mask = true, int initialCount = 1) - { - Create(width, height, mask, initialCount); - } - virtual ~wxImageList(); - - - // Attributes - //////////////////////////////////////////////////////////////////////////// - - // Returns the number of images in the image list. - int GetImageCount() const; - - // Returns the size (same for all images) of the images in the list - bool GetSize(int index, int &width, int &height) const; - - // Operations - //////////////////////////////////////////////////////////////////////////// - - // Creates an image list - // width, height specify the size of the images in the list (all the same). - // mask specifies whether the images have masks or not. - // initialNumber is the initial number of images to reserve. - bool Create(int width, int height, bool mask = true, int initialNumber = 1); - - // Adds a bitmap, and optionally a mask bitmap. - // Note that wxImageList creates *new* bitmaps, so you may delete - // 'bitmap' and 'mask' after calling Add. - int Add(const wxBitmap& bitmap, const wxBitmap& mask = wxNullBitmap); - - // Adds a bitmap, using the specified colour to create the mask bitmap - // Note that wxImageList creates *new* bitmaps, so you may delete - // 'bitmap' after calling Add. - int Add(const wxBitmap& bitmap, const wxColour& maskColour); - - // Adds a bitmap and mask from an icon. - int Add(const wxIcon& icon); - - // Replaces a bitmap, optionally passing a mask bitmap. - // Note that wxImageList creates new bitmaps, so you may delete - // 'bitmap' and 'mask' after calling Replace. - bool Replace(int index, const wxBitmap& bitmap, const wxBitmap& mask = wxNullBitmap); - -/* Not supported by Win95 - // Replacing a bitmap, using the specified colour to create the mask bitmap - // Note that wxImageList creates new bitmaps, so you may delete - // 'bitmap'. - bool Replace(int index, const wxBitmap& bitmap, const wxColour& maskColour); -*/ - - // Replaces a bitmap and mask from an icon. - // You can delete 'icon' after calling Replace. - bool Replace(int index, const wxIcon& icon); - - // Removes the image at the given index. - bool Remove(int index); - - // Remove all images - bool RemoveAll(); - - // Draws the given image on a dc at the specified position. - // If 'solidBackground' is true, Draw sets the image list background - // colour to the background colour of the wxDC, to speed up - // drawing by eliminating masked drawing where possible. - bool Draw(int index, wxDC& dc, int x, int y, - int flags = wxIMAGELIST_DRAW_NORMAL, - bool solidBackground = false); - - // Get a bitmap - wxBitmap GetBitmap(int index) const; - - // Get an icon - wxIcon GetIcon(int index) const; - - // TODO: miscellaneous functionality -/* - wxIcon *MakeIcon(int index); - bool SetOverlayImage(int index, int overlayMask); - -*/ - - // TODO: Drag-and-drop related functionality. - -#if 0 - // Creates a new drag image by combining the given image (typically a mouse cursor image) - // with the current drag image. - bool SetDragCursorImage(int index, const wxPoint& hotSpot); - - // If successful, returns a pointer to the temporary image list that is used for dragging; - // otherwise, NULL. - // dragPos: receives the current drag position. - // hotSpot: receives the offset of the drag image relative to the drag position. - static wxImageList *GetDragImageList(wxPoint& dragPos, wxPoint& hotSpot); - - // Call this function to begin dragging an image. This function creates a temporary image list - // that is used for dragging. The image combines the specified image and its mask with the - // current cursor. In response to subsequent mouse move messages, you can move the drag image - // by using the DragMove member function. To end the drag operation, you can use the EndDrag - // member function. - bool BeginDrag(int index, const wxPoint& hotSpot); - - // Ends a drag operation. - bool EndDrag(); - - // Call this function to move the image that is being dragged during a drag-and-drop operation. - // This function is typically called in response to a mouse move message. To begin a drag - // operation, use the BeginDrag member function. - static bool DragMove(const wxPoint& point); - - // During a drag operation, locks updates to the window specified by lockWindow and displays - // the drag image at the position specified by point. - // The coordinates are relative to the window's upper left corner, so you must compensate - // for the widths of window elements, such as the border, title bar, and menu bar, when - // specifying the coordinates. - // If lockWindow is NULL, this function draws the image in the display context associated - // with the desktop window, and coordinates are relative to the upper left corner of the screen. - // This function locks all other updates to the given window during the drag operation. - // If you need to do any drawing during a drag operation, such as highlighting the target - // of a drag-and-drop operation, you can temporarily hide the dragged image by using the - // wxImageList::DragLeave function. - - // lockWindow: pointer to the window that owns the drag image. - // point: position at which to display the drag image. Coordinates are relative to the - // upper left corner of the window (not the client area). - - static bool DragEnter( wxWindow *lockWindow, const wxPoint& point ); - - // Unlocks the window specified by pWndLock and hides the drag image, allowing the - // window to be updated. - static bool DragLeave( wxWindow *lockWindow ); - - /* Here's roughly how you'd use these functions if implemented in this Win95-like way: - - 1) Starting to drag: - - wxImageList *dragImageList = new wxImageList(16, 16, true); - dragImageList->Add(myDragImage); // Provide an image to combine with the current cursor - dragImageList->BeginDrag(0, wxPoint(0, 0)); - wxShowCursor(false); // wxShowCursor not yet implemented in wxWin - myWindow->CaptureMouse(); - - 2) Dragging: - - // Called within mouse move event. Could also use dragImageList instead of assuming - // these are static functions. - // These two functions could possibly be combined into one, since DragEnter is - // a bit obscure. - wxImageList::DragMove(wxPoint(x, y)); // x, y are current cursor position - wxImageList::DragEnter(NULL, wxPoint(x, y)); // NULL assumes dragging across whole screen - - 3) Finishing dragging: - - dragImageList->EndDrag(); - myWindow->ReleaseMouse(); - wxShowCursor(true); -*/ - -#endif - - // Implementation - //////////////////////////////////////////////////////////////////////////// - - // Returns the native image list handle - WXHIMAGELIST GetHIMAGELIST() const { return m_hImageList; } - -protected: - WXHIMAGELIST m_hImageList; - - DECLARE_DYNAMIC_CLASS(wxImageList) -}; - -#endif - // _WX_IMAGLIST_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/iniconf.h b/desmume/src/windows/wx/include/wx/msw/iniconf.h deleted file mode 100644 index 40d687588..000000000 --- a/desmume/src/windows/wx/include/wx/msw/iniconf.h +++ /dev/null @@ -1,95 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: include/wx/msw/iniconf.h -// Purpose: INI-file based wxConfigBase implementation -// Author: Vadim Zeitlin -// Modified by: -// Created: 27.07.98 -// RCS-ID: $Id: iniconf.h 28931 2004-08-27 18:59:37Z ABX $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _INICONF_H -#define _INICONF_H - -// ---------------------------------------------------------------------------- -// wxIniConfig is a wxConfig implementation which uses MS Windows INI files to -// store the data. Because INI files don't really support arbitrary nesting of -// groups, we do the following: -// (1) in win.ini file we store all entries in the [vendor] section and -// the value group1/group2/key is mapped to the value group1_group2_key -// in this section, i.e. all path separators are replaced with underscore -// (2) in appname.ini file we map group1/group2/group3/key to the entry -// group2_group3_key in [group1] -// -// Of course, it might lead to indesirable results if '_' is also used in key -// names (i.e. group/key is the same as group_key) and also GetPath() result -// may be not what you would expect it to be. -// -// Another limitation: the keys and section names are never case-sensitive -// which might differ from wxFileConfig it it was compiled with -// wxCONFIG_CASE_SENSITIVE option. -// ---------------------------------------------------------------------------- - -// for this class, "local" file is the file appname.ini and the global file -// is the [vendor] subsection of win.ini (default for "vendor" is to be the -// same as appname). The file name (strAppName parameter) may, in fact, -// contain the full path to the file. If it doesn't, the file is searched for -// in the Windows directory. -class WXDLLEXPORT wxIniConfig : public wxConfigBase -{ -public: - // ctor & dtor - // if strAppName doesn't contain the extension and is not an absolute path, - // ".ini" is appended to it. if strVendor is empty, it's taken to be the - // same as strAppName. - wxIniConfig(const wxString& strAppName = wxEmptyString, const wxString& strVendor = wxEmptyString, - const wxString& localFilename = wxEmptyString, const wxString& globalFilename = wxEmptyString, long style = wxCONFIG_USE_LOCAL_FILE); - virtual ~wxIniConfig(); - - // implement inherited pure virtual functions - virtual void SetPath(const wxString& strPath); - virtual const wxString& GetPath() const; - - virtual bool GetFirstGroup(wxString& str, long& lIndex) const; - virtual bool GetNextGroup (wxString& str, long& lIndex) const; - virtual bool GetFirstEntry(wxString& str, long& lIndex) const; - virtual bool GetNextEntry (wxString& str, long& lIndex) const; - - virtual size_t GetNumberOfEntries(bool bRecursive = false) const; - virtual size_t GetNumberOfGroups(bool bRecursive = false) const; - - virtual bool HasGroup(const wxString& strName) const; - virtual bool HasEntry(const wxString& strName) const; - - // return true if the current group is empty - bool IsEmpty() const; - - virtual bool Flush(bool bCurrentOnly = false); - - virtual bool RenameEntry(const wxString& oldName, const wxString& newName); - virtual bool RenameGroup(const wxString& oldName, const wxString& newName); - - virtual bool DeleteEntry(const wxString& Key, bool bGroupIfEmptyAlso = true); - virtual bool DeleteGroup(const wxString& szKey); - virtual bool DeleteAll(); - -protected: - // read/write - bool DoReadString(const wxString& key, wxString *pStr) const; - bool DoReadLong(const wxString& key, long *plResult) const; - - bool DoWriteString(const wxString& key, const wxString& szValue); - bool DoWriteLong(const wxString& key, long lValue); - -private: - // helpers - wxString GetPrivateKeyName(const wxString& szKey) const; - wxString GetKeyName(const wxString& szKey) const; - - wxString m_strLocalFilename; // name of the private INI file - wxString m_strGroup, // current group in appname.ini file - m_strPath; // the rest of the path (no trailing '_'!) -}; - -#endif //_INICONF_H diff --git a/desmume/src/windows/wx/include/wx/msw/joystick.h b/desmume/src/windows/wx/include/wx/msw/joystick.h deleted file mode 100644 index 1b24d22df..000000000 --- a/desmume/src/windows/wx/include/wx/msw/joystick.h +++ /dev/null @@ -1,90 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: joystick.h -// Purpose: wxJoystick class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: joystick.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_JOYSTICK_H_ -#define _WX_JOYSTICK_H_ - -#include "wx/event.h" - -class WXDLLIMPEXP_ADV wxJoystick: public wxObject -{ - DECLARE_DYNAMIC_CLASS(wxJoystick) - public: - /* - * Public interface - */ - - wxJoystick(int joystick = wxJOYSTICK1); - - // Attributes - //////////////////////////////////////////////////////////////////////////// - - wxPoint GetPosition(void) const; - int GetZPosition(void) const; - int GetButtonState(void) const; - int GetPOVPosition(void) const; - int GetPOVCTSPosition(void) const; - int GetRudderPosition(void) const; - int GetUPosition(void) const; - int GetVPosition(void) const; - int GetMovementThreshold(void) const; - void SetMovementThreshold(int threshold) ; - - // Capabilities - //////////////////////////////////////////////////////////////////////////// - - static int GetNumberJoysticks(void); - - bool IsOk(void) const; // Checks that the joystick is functioning - int GetManufacturerId(void) const ; - int GetProductId(void) const ; - wxString GetProductName(void) const ; - int GetXMin(void) const; - int GetYMin(void) const; - int GetZMin(void) const; - int GetXMax(void) const; - int GetYMax(void) const; - int GetZMax(void) const; - int GetNumberButtons(void) const; - int GetNumberAxes(void) const; - int GetMaxButtons(void) const; - int GetMaxAxes(void) const; - int GetPollingMin(void) const; - int GetPollingMax(void) const; - int GetRudderMin(void) const; - int GetRudderMax(void) const; - int GetUMin(void) const; - int GetUMax(void) const; - int GetVMin(void) const; - int GetVMax(void) const; - - bool HasRudder(void) const; - bool HasZ(void) const; - bool HasU(void) const; - bool HasV(void) const; - bool HasPOV(void) const; - bool HasPOV4Dir(void) const; - bool HasPOVCTS(void) const; - - // Operations - //////////////////////////////////////////////////////////////////////////// - - // pollingFreq = 0 means that movement events are sent when above the threshold. - // If pollingFreq > 0, events are received every this many milliseconds. - bool SetCapture(wxWindow* win, int pollingFreq = 0); - bool ReleaseCapture(void); - -protected: - int m_joystick; -}; - -#endif - // _WX_JOYSTICK_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/libraries.h b/desmume/src/windows/wx/include/wx/msw/libraries.h deleted file mode 100644 index 09ff8996d..000000000 --- a/desmume/src/windows/wx/include/wx/msw/libraries.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Name: wx/msw/libraries.h - * Purpose: Pragmas for linking libs conditionally - * Author: Michael Wetherell - * Modified by: - * RCS-ID: $Id: libraries.h 37045 2006-01-21 22:50:46Z MW $ - * Copyright: (c) 2005 Michael Wetherell - * Licence: wxWindows licence - */ - -#ifndef _WX_MSW_LIBRARIES_H_ -#define _WX_MSW_LIBRARIES_H_ - -/* - * Notes: - * - * In general the preferred place to add libs is in the bakefiles. This file - * can be used where libs must be added conditionally, for those compilers that - * support a way to do that. - */ - -/* VC++ 5 didn't include oleacc.lib, though it came with the PSDK */ -#if defined __VISUALC__ && (wxUSE_ACCESSIBILITY || __VISUALC__ >= 1200) -#pragma comment(lib, "oleacc") -#endif - -#endif /* _WX_MSW_LIBRARIES_H_ */ diff --git a/desmume/src/windows/wx/include/wx/msw/listbox.h b/desmume/src/windows/wx/include/wx/msw/listbox.h deleted file mode 100644 index 94b99c5ef..000000000 --- a/desmume/src/windows/wx/include/wx/msw/listbox.h +++ /dev/null @@ -1,168 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/listbox.h -// Purpose: wxListBox class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: listbox.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LISTBOX_H_ -#define _WX_LISTBOX_H_ - -#if wxUSE_LISTBOX - -// ---------------------------------------------------------------------------- -// simple types -// ---------------------------------------------------------------------------- - -#if wxUSE_OWNER_DRAWN - class WXDLLIMPEXP_FWD_CORE wxOwnerDrawn; - - // define the array of list box items - #include "wx/dynarray.h" - - WX_DEFINE_EXPORTED_ARRAY_PTR(wxOwnerDrawn *, wxListBoxItemsArray); -#endif // wxUSE_OWNER_DRAWN - -// forward decl for GetSelections() -class WXDLLIMPEXP_FWD_BASE wxArrayInt; - -// ---------------------------------------------------------------------------- -// List box control -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxListBox : public wxListBoxBase -{ -public: - // ctors and such - wxListBox(); - wxListBox(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr) - { - Create(parent, id, pos, size, n, choices, style, validator, name); - } - wxListBox(wxWindow *parent, wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr) - { - Create(parent, id, pos, size, choices, style, validator, name); - } - - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - - virtual ~wxListBox(); - - // implement base class pure virtuals - virtual void Clear(); - virtual void Delete(unsigned int n); - - virtual unsigned int GetCount() const; - virtual wxString GetString(unsigned int n) const; - virtual void SetString(unsigned int n, const wxString& s); - virtual int FindString(const wxString& s, bool bCase = false) const; - - virtual bool IsSelected(int n) const; - virtual int GetSelection() const; - virtual int GetSelections(wxArrayInt& aSelections) const; - - // wxCheckListBox support -#if wxUSE_OWNER_DRAWN - bool MSWOnMeasure(WXMEASUREITEMSTRUCT *item); - bool MSWOnDraw(WXDRAWITEMSTRUCT *item); - - // plug-in for derived classes - virtual wxOwnerDrawn *CreateLboxItem(size_t n); - - // allows to get the item and use SetXXX functions to set it's appearance - wxOwnerDrawn *GetItem(size_t n) const { return m_aItems[n]; } - - // get the index of the given item - int GetItemIndex(wxOwnerDrawn *item) const { return m_aItems.Index(item); } -#endif // wxUSE_OWNER_DRAWN - - // Windows-specific code to update the horizontal extent of the listbox, if - // necessary. If s is non-empty, the horizontal extent is increased to the - // length of this string if it's currently too short, otherwise the maximum - // extent of all strings is used. In any case calls InvalidateBestSize() - virtual void SetHorizontalExtent(const wxString& s = wxEmptyString); - - // Windows callbacks - bool MSWCommand(WXUINT param, WXWORD id); - WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - - // under XP when using "transition effect for menus and tooltips" if we - // return true for WM_PRINTCLIENT here then it causes noticable slowdown - virtual bool MSWShouldPropagatePrintChild() - { - return false; - } - - virtual wxVisualAttributes GetDefaultAttributes() const - { - return GetClassDefaultAttributes(GetWindowVariant()); - } - - static wxVisualAttributes - GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL) - { - return GetCompositeControlsDefaultAttributes(variant); - } - -protected: - virtual void DoSetSelection(int n, bool select); - virtual int DoAppend(const wxString& item); - virtual void DoInsertItems(const wxArrayString& items, unsigned int pos); - virtual void DoSetItems(const wxArrayString& items, void **clientData); - virtual void DoSetFirstItem(int n); - virtual void DoSetItemClientData(unsigned int n, void* clientData); - virtual void* DoGetItemClientData(unsigned int n) const; - virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData); - virtual wxClientData* DoGetItemClientObject(unsigned int n) const; - virtual int DoListHitTest(const wxPoint& point) const; - - // free memory (common part of Clear() and dtor) - void Free(); - - unsigned int m_noItems; - int m_selected; - - virtual wxSize DoGetBestSize() const; - -#if wxUSE_OWNER_DRAWN - // control items - wxListBoxItemsArray m_aItems; -#endif - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxListBox) -}; - -#endif // wxUSE_LISTBOX - -#endif - // _WX_LISTBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/listctrl.h b/desmume/src/windows/wx/include/wx/msw/listctrl.h deleted file mode 100644 index e6fd884a8..000000000 --- a/desmume/src/windows/wx/include/wx/msw/listctrl.h +++ /dev/null @@ -1,449 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/listctrl.h -// Purpose: wxListCtrl class -// Author: Julian Smart -// Modified by: Agron Selimaj -// Created: 01/02/97 -// RCS-ID: $Id: listctrl.h 54419 2008-06-29 01:35:24Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LISTCTRL_H_ -#define _WX_LISTCTRL_H_ - -#include "wx/textctrl.h" - -class WXDLLIMPEXP_FWD_CORE wxImageList; - -/* - The wxListCtrl can show lists of items in four different modes: - wxLC_LIST: multicolumn list view, with optional small icons (icons could be - optional for some platforms). Columns are computed automatically, - i.e. you don't set columns as in wxLC_REPORT. In other words, - the list wraps, unlike a wxListBox. - wxLC_REPORT: single or multicolumn report view (with optional header) - wxLC_ICON: large icon view, with optional labels - wxLC_SMALL_ICON: small icon view, with optional labels - - You can change the style dynamically, either with SetSingleStyle or - SetWindowStyleFlag. - - Further window styles: - - wxLC_ALIGN_TOP icons align to the top (default) - wxLC_ALIGN_LEFT icons align to the left - wxLC_AUTOARRANGE icons arrange themselves - wxLC_USER_TEXT the app provides label text on demand, except for column headers - wxLC_EDIT_LABELS labels are editable: app will be notified. - wxLC_NO_HEADER no header in report mode - wxLC_NO_SORT_HEADER can't click on header - wxLC_SINGLE_SEL single selection - wxLC_SORT_ASCENDING sort ascending (must still supply a comparison callback in SortItems) - wxLC_SORT_DESCENDING sort descending (ditto) - - Items are referred to by their index (position in the list starting from zero). - - Label text is supplied via insertion/setting functions and is stored by the - control, unless the wxLC_USER_TEXT style has been specified, in which case - the app will be notified when text is required (see sample). - - Images are dealt with by (optionally) associating 3 image lists with the control. - Zero-based indexes into these image lists indicate which image is to be used for - which item. Each image in an image list can contain a mask, and can be made out - of either a bitmap, two bitmaps or an icon. See ImagList.h for more details. - - Notifications are passed via the wxWidgets 2.0 event system, or using virtual - functions in wxWidgets 1.66. - - See the sample wxListCtrl app for API usage. - - TODO: - - addition of further convenience functions - to avoid use of wxListItem in some functions - - state/overlay images: probably not needed. - - in Win95, you can be called back to supply other information - besides text, such as state information. This saves no memory - and is probably superfluous to requirements. - - testing of whole API, extending current sample. - - - */ - -class WXDLLEXPORT wxListCtrl: public wxControl -{ -public: - /* - * Public interface - */ - - wxListCtrl() { Init(); } - - wxListCtrl(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxLC_ICON, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListCtrlNameStr) - { - Init(); - - Create(parent, id, pos, size, style, validator, name); - } - - virtual ~wxListCtrl(); - - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxLC_ICON, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListCtrlNameStr); - - - // Attributes - //////////////////////////////////////////////////////////////////////////// - - // Set the control colours - bool SetForegroundColour(const wxColour& col); - bool SetBackgroundColour(const wxColour& col); - - // Gets information about this column - bool GetColumn(int col, wxListItem& item) const; - - // Sets information about this column - bool SetColumn(int col, const wxListItem& item) ; - - // Gets the column width - int GetColumnWidth(int col) const; - - // Sets the column width - bool SetColumnWidth(int col, int width) ; - - // Gets the number of items that can fit vertically in the - // visible area of the list control (list or report view) - // or the total number of items in the list control (icon - // or small icon view) - int GetCountPerPage() const; - - // return the total area occupied by all the items (icon/small icon only) - wxRect GetViewRect() const; - - // Gets the edit control for editing labels. - wxTextCtrl* GetEditControl() const; - - // Gets information about the item - bool GetItem(wxListItem& info) const ; - - // Sets information about the item - bool SetItem(wxListItem& info) ; - - // Sets a string field at a particular column - long SetItem(long index, int col, const wxString& label, int imageId = -1); - - // Gets the item state - int GetItemState(long item, long stateMask) const ; - - // Sets the item state - bool SetItemState(long item, long state, long stateMask) ; - - // Sets the item image - bool SetItemImage(long item, int image, int selImage = -1) ; - bool SetItemColumnImage(long item, long column, int image); - - // Gets the item text - wxString GetItemText(long item) const ; - - // Sets the item text - void SetItemText(long item, const wxString& str) ; - - // Gets the item data - wxUIntPtr GetItemData(long item) const ; - - // Sets the item data -#if wxABI_VERSION >= 20804 - bool SetItemPtrData(long item, wxUIntPtr data); -#endif // wxABI 2.8.4+ - bool SetItemData(long item, long data); - - // Gets the item rectangle - bool GetItemRect(long item, wxRect& rect, int code = wxLIST_RECT_BOUNDS) const ; - - // Gets the subitem rectangle in report mode - bool GetSubItemRect(long item, long subItem, wxRect& rect, int code = wxLIST_RECT_BOUNDS) const ; - - // Gets the item position - bool GetItemPosition(long item, wxPoint& pos) const ; - - // Sets the item position - bool SetItemPosition(long item, const wxPoint& pos) ; - - // Gets the number of items in the list control - int GetItemCount() const; - - // Gets the number of columns in the list control - int GetColumnCount() const { return m_colCount; } - - // get the horizontal and vertical components of the item spacing - wxSize GetItemSpacing() const; - - // Foreground colour of an item. - void SetItemTextColour( long item, const wxColour& col); - wxColour GetItemTextColour( long item ) const; - - // Background colour of an item. - void SetItemBackgroundColour( long item, const wxColour &col); - wxColour GetItemBackgroundColour( long item ) const; - - // Font of an item. - void SetItemFont( long item, const wxFont &f); - wxFont GetItemFont( long item ) const; - - // Gets the number of selected items in the list control - int GetSelectedItemCount() const; - - // Gets the text colour of the listview - wxColour GetTextColour() const; - - // Sets the text colour of the listview - void SetTextColour(const wxColour& col); - - // Gets the index of the topmost visible item when in - // list or report view - long GetTopItem() const ; - - // Add or remove a single window style - void SetSingleStyle(long style, bool add = true) ; - - // Set the whole window style - void SetWindowStyleFlag(long style) ; - - // Searches for an item, starting from 'item'. - // item can be -1 to find the first item that matches the - // specified flags. - // Returns the item or -1 if unsuccessful. - long GetNextItem(long item, int geometry = wxLIST_NEXT_ALL, int state = wxLIST_STATE_DONTCARE) const ; - - // Gets one of the three image lists - wxImageList *GetImageList(int which) const ; - - // Sets the image list - // N.B. There's a quirk in the Win95 list view implementation. - // If in wxLC_LIST mode, it'll *still* display images by the labels if - // there's a small-icon image list set for the control - even though you - // haven't specified wxLIST_MASK_IMAGE when inserting. - // So you have to set a NULL small-icon image list to be sure that - // the wxLC_LIST mode works without icons. Of course, you may want icons... - 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); - - // Operations - //////////////////////////////////////////////////////////////////////////// - - // Arranges the items - bool Arrange(int flag = wxLIST_ALIGN_DEFAULT); - - // Deletes an item - bool DeleteItem(long item); - - // Deletes all items - bool DeleteAllItems() ; - - // Deletes a column - bool DeleteColumn(int col); - - // Deletes all columns - bool DeleteAllColumns(); - - // Clears items, and columns if there are any. - void ClearAll(); - - // Edit the label - wxTextCtrl* EditLabel(long item, wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)); - - // End label editing, optionally cancelling the edit - bool EndEditLabel(bool cancel); - - // Ensures this item is visible - bool EnsureVisible(long item) ; - - // Find an item whose label matches this string, starting from the item after 'start' - // or the beginning if 'start' is -1. - long FindItem(long start, const wxString& str, bool partial = false); - - // Find an item whose data matches this data, starting from the item after 'start' - // or the beginning if 'start' is -1. - long FindItem(long start, wxUIntPtr data); - - // Find an item nearest this position in the specified direction, starting from - // the item after 'start' or the beginning if 'start' is -1. - long FindItem(long start, const wxPoint& pt, int direction); - - // Determines which item (if any) is at the specified point, - // giving details in 'flags' (see wxLIST_HITTEST_... flags above) - // Request the subitem number as well at the given coordinate. - long HitTest(const wxPoint& point, int& flags, long* ptrSubItem = NULL) const; - - // Inserts an item, returning the index of the new item if successful, - // -1 otherwise. - long InsertItem(const wxListItem& info); - - // Insert a string item - long InsertItem(long index, const wxString& label); - - // Insert an image item - long InsertItem(long index, int imageIndex); - - // 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); - - // 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. - // If in icon, small icon or list view mode, y specifies the number of pixels - // to scroll. If in report view mode, y specifies the number of lines to scroll. - bool ScrollList(int dx, int dy); - - // Sort items. - - // fn is a function which takes 3 long arguments: item1, item2, data. - // item1 is the long data associated with a first item (NOT the index). - // item2 is the long data associated with a second item (NOT the index). - // data is the same value as passed to SortItems. - // The return value is a negative number if the first item should precede the second - // item, a positive number of the second item should precede the first, - // or zero if the two items are equivalent. - - // data is arbitrary data to be passed to the sort function. - bool SortItems(wxListCtrlCompare fn, long data); - - // IMPLEMENTATION - virtual bool MSWCommand(WXUINT param, WXWORD id); - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - virtual bool MSWShouldPreProcessMessage(WXMSG* msg); - - // bring the control in sync with current m_windowStyle value - void UpdateStyle(); - - // Event handlers - //////////////////////////////////////////////////////////////////////////// - // Necessary for drawing hrules and vrules, if specified - void OnPaint(wxPaintEvent& event); - - - virtual bool ShouldInheritColours() const { return false; } - - virtual wxVisualAttributes GetDefaultAttributes() const - { - return GetClassDefaultAttributes(GetWindowVariant()); - } - - static wxVisualAttributes - GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); - - -#if WXWIN_COMPATIBILITY_2_6 - // obsolete stuff, for compatibility only -- don't use - wxDEPRECATED( int GetItemSpacing(bool isSmall) const); -#endif // WXWIN_COMPATIBILITY_2_6 - - // convert our styles to Windows - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - - // special Windows message handling - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, - WXWPARAM wParam, - WXLPARAM lParam); - -protected: - // common part of all ctors - void Init(); - - // free memory taken by all internal data - void FreeAllInternalData(); - - // get the item attribute, either by quering it for virtual control, or by - // returning the one previously set using setter methods for a normal one - wxListItemAttr *DoGetItemAttr(long item) const; - - - wxTextCtrl* m_textCtrl; // The control used for editing a label - wxImageList * m_imageListNormal; // The image list for normal icons - wxImageList * m_imageListSmall; // The image list for small icons - wxImageList * m_imageListState; // The image list state icons (not implemented yet) - bool m_ownsImageListNormal, - m_ownsImageListSmall, - m_ownsImageListState; - - int m_colCount; // Windows doesn't have GetColumnCount so must - // keep track of inserted/deleted columns - long m_count; // Keep track of item count to save calls to - // ListView_GetItemCount - bool m_ignoreChangeMessages; - - // true if we have any internal data (user data & attributes) - bool m_AnyInternalData; - - // true if we have any items with custom attributes - bool m_hasAnyAttr; - - // these functions are only used for virtual list view controls, i.e. the - // ones with wxLC_VIRTUAL style - - // return the text for the given column of the given item - virtual wxString OnGetItemText(long item, long column) const; - - // return the icon for the given item. In report view, OnGetItemImage will - // only be called for the first column. See OnGetItemColumnImage for - // details. - virtual int OnGetItemImage(long item) const; - - // return the icon for the given item and column. - virtual int OnGetItemColumnImage(long item, long column) const; - - // return the attribute for the item (may return NULL if none) - virtual wxListItemAttr *OnGetItemAttr(long item) const; - -private: - // process NM_CUSTOMDRAW notification message - WXLPARAM OnCustomDraw(WXLPARAM lParam); - - // set the extended styles for the control (used by Create() and - // UpdateStyle()), only should be called if InReportView() - void MSWSetExListStyles(); - - // initialize the (already created) m_textCtrl with the associated HWND - void InitEditControl(WXHWND hWnd); - - // destroy m_textCtrl if it's currently valid and reset it to NULL - void DeleteEditControl(); - - DECLARE_DYNAMIC_CLASS(wxListCtrl) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxListCtrl) -}; - -#endif // _WX_LISTCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/magnif1.cur b/desmume/src/windows/wx/include/wx/msw/magnif1.cur deleted file mode 100644 index 15d1a77a49a5053ba171d0c7fdf9937f131814e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmaKmJr06E5QX1@ku@O^8(TM4mfipg?*)mChcNLb8c)C#=xo7?g7AC`8XDqEzMY+) zeX~FS1LuGhERF`)0yqejkO?Cn>>I{pI!R8+>@6&Sg|K1+U@uPMBJl*~?XZk9Z7+~$ zhg0-qGyd!OIU7LlBvAwU!yoH%vK6(cH1`x|5t03xeY|6fl#SZ2jx76}<vr)^kq%s= RG5Xxsec#VDja0)yf*$}<c&GpX diff --git a/desmume/src/windows/wx/include/wx/msw/mdi.h b/desmume/src/windows/wx/include/wx/msw/mdi.h deleted file mode 100644 index 69ee0fd58..000000000 --- a/desmume/src/windows/wx/include/wx/msw/mdi.h +++ /dev/null @@ -1,238 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/mdi.h -// Purpose: MDI (Multiple Document Interface) classes -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: mdi.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MDI_H_ -#define _WX_MDI_H_ - -#include "wx/frame.h" - -extern WXDLLEXPORT_DATA(const wxChar) wxStatusLineNameStr[]; - -class WXDLLIMPEXP_FWD_CORE wxMDIClientWindow; -class WXDLLIMPEXP_FWD_CORE wxMDIChildFrame; - -// --------------------------------------------------------------------------- -// wxMDIParentFrame -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxMDIParentFrame : public wxFrame -{ -public: - wxMDIParentFrame(); - wxMDIParentFrame(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, - const wxString& name = wxFrameNameStr) - { - Create(parent, id, title, pos, size, style, name); - } - - virtual ~wxMDIParentFrame(); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, - const wxString& name = wxFrameNameStr); - - // accessors - // --------- - - // Get the active MDI child window (Windows only) - wxMDIChildFrame *GetActiveChild() const; - - // Get the client window - wxMDIClientWindow *GetClientWindow() const { return m_clientWindow; } - - // Create the client window class (don't Create the window, - // just return a new class) - virtual wxMDIClientWindow *OnCreateClient(void); - - // MDI windows menu - wxMenu* GetWindowMenu() const { return m_windowMenu; } - void SetWindowMenu(wxMenu* menu) ; - virtual void DoMenuUpdates(wxMenu* menu = NULL); - - // MDI operations - // -------------- - virtual void Cascade(); - virtual void Tile(wxOrientation orient = wxHORIZONTAL); - virtual void ArrangeIcons(); - virtual void ActivateNext(); - virtual void ActivatePrevious(); - - // handlers - // -------- - - // Responds to colour changes - void OnSysColourChanged(wxSysColourChangedEvent& event); - - void OnSize(wxSizeEvent& event); - void OnIconized(wxIconizeEvent& event); - - bool HandleActivate(int state, bool minimized, WXHWND activate); - bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control); - - // override window proc for MDI-specific message processing - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - - virtual WXLRESULT MSWDefWindowProc(WXUINT, WXWPARAM, WXLPARAM); - virtual bool MSWTranslateMessage(WXMSG* msg); - -protected: -#if wxUSE_MENUS_NATIVE - virtual void InternalSetMenuBar(); -#endif // wxUSE_MENUS_NATIVE - - virtual WXHICON GetDefaultIcon() const; - - // set the size of the MDI client window to match the frame size - void UpdateClientSize(); - - - wxMDIClientWindow * m_clientWindow; - wxMDIChildFrame * m_currentChild; - wxMenu* m_windowMenu; - - // true if MDI Frame is intercepting commands, not child - bool m_parentFrameActive; - -private: - friend class WXDLLIMPEXP_FWD_CORE wxMDIChildFrame; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxMDIParentFrame) - DECLARE_NO_COPY_CLASS(wxMDIParentFrame) -}; - -// --------------------------------------------------------------------------- -// wxMDIChildFrame -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxMDIChildFrame : public wxFrame -{ -public: - wxMDIChildFrame() { Init(); } - wxMDIChildFrame(wxMDIParentFrame *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr) - { - Init(); - - Create(parent, id, title, pos, size, style, name); - } - - virtual ~wxMDIChildFrame(); - - bool Create(wxMDIParentFrame *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr); - - virtual bool IsTopLevel() const { return false; } - - // MDI operations - virtual void Maximize(bool maximize = true); - virtual void Restore(); - virtual void Activate(); - - // Implementation only from now on - // ------------------------------- - - // Handlers - bool HandleMDIActivate(long bActivate, WXHWND, WXHWND); - bool HandleWindowPosChanging(void *lpPos); - bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control); - bool HandleGetMinMaxInfo(void *mmInfo); - - virtual WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); - virtual WXLRESULT MSWDefWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); - virtual bool MSWTranslateMessage(WXMSG *msg); - - virtual void MSWDestroyWindow(); - - bool ResetWindowStyle(void *vrect); - - void OnIdle(wxIdleEvent& event); - - virtual bool Show(bool show = true); - -protected: - virtual void DoGetScreenPosition(int *x, int *y) const; - virtual void DoGetPosition(int *x, int *y) const; - virtual void DoSetClientSize(int width, int height); - virtual void InternalSetMenuBar(); - virtual bool IsMDIChild() const { return true; } - virtual void DetachMenuBar(); - - virtual WXHICON GetDefaultIcon() const; - - // common part of all ctors - void Init(); - -private: - bool m_needsInitialShow; // Show must be called in idle time after Creation - bool m_needsResize; // flag which tells us to artificially resize the frame - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxMDIChildFrame) -}; - -// --------------------------------------------------------------------------- -// wxMDIClientWindow -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxMDIClientWindow : public wxWindow -{ -public: - wxMDIClientWindow() { Init(); } - wxMDIClientWindow(wxMDIParentFrame *parent, long style = 0) - { - Init(); - - CreateClient(parent, style); - } - - // Note: this is virtual, to allow overridden behaviour. - virtual bool CreateClient(wxMDIParentFrame *parent, - long style = wxVSCROLL | wxHSCROLL); - - // Explicitly call default scroll behaviour - void OnScroll(wxScrollEvent& event); - -protected: - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - - void Init() { m_scrollX = m_scrollY = 0; } - - int m_scrollX, m_scrollY; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxMDIClientWindow) -}; - -#endif - // _WX_MDI_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/mdi.ico b/desmume/src/windows/wx/include/wx/msw/mdi.ico deleted file mode 100644 index 435cca2471cd31bb825ff1e6eb180c1939a9eb4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1078 zcmc&zF%p6>5L_S)<BakHsT`j{k%#dFTYh10!*eX@E#mG)fdQix<B`41-d%Dj4j@C0 zx~|9$_Z&C@sH&*X8L%&aGh;Q;5UTrbEx?7gjYQ8a`o1SC5o{p@?FfDf$!%<9C%cSY zRyw@$yPND<CUsck)7qNtro8jClxBMuX8DEIT`?cum(<oYI;;2182PF7zIpvZj~8vQ z;S8({1qZ{>1H}g<-VtX@^EF=Zz9{mlQwW;#il~Wy%sJ<goq>ax^Jn}JGe|Bw=NmFB ge8aqPJmI~ud$Eb6)2}9ELOWr8V4xU|6W(XUPqgg+2mk;8 diff --git a/desmume/src/windows/wx/include/wx/msw/menu.h b/desmume/src/windows/wx/include/wx/msw/menu.h deleted file mode 100644 index 87c25ef72..000000000 --- a/desmume/src/windows/wx/include/wx/msw/menu.h +++ /dev/null @@ -1,241 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/menu.h -// Purpose: wxMenu, wxMenuBar classes -// Author: Julian Smart -// Modified by: Vadim Zeitlin (wxMenuItem is now in separate file) -// Created: 01/02/97 -// RCS-ID: $Id: menu.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MENU_H_ -#define _WX_MENU_H_ - -#if wxUSE_ACCEL - #include "wx/accel.h" - #include "wx/dynarray.h" - - WX_DEFINE_EXPORTED_ARRAY_PTR(wxAcceleratorEntry *, wxAcceleratorArray); -#endif // wxUSE_ACCEL - -class WXDLLIMPEXP_FWD_CORE wxFrame; - -#if defined(__WXWINCE__) && wxUSE_TOOLBAR -class WXDLLIMPEXP_FWD_CORE wxToolBar; -#endif - - -// Not using a combined wxToolBar/wxMenuBar? then use -// a commandbar in WinCE .NET to implement the -// menubar, since there is no ::SetMenu function. -#if defined(__WXWINCE__) -# if ((_WIN32_WCE >= 400) && !defined(__POCKETPC__) && !defined(__SMARTPHONE__)) || \ - defined(__HANDHELDPC__) -# define WINCE_WITH_COMMANDBAR -# else -# define WINCE_WITHOUT_COMMANDBAR -# endif -#endif - - -#include "wx/arrstr.h" - -// ---------------------------------------------------------------------------- -// Menu -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMenu : public wxMenuBase -{ -public: - // ctors & dtor - wxMenu(const wxString& title, long style = 0) - : wxMenuBase(title, style) { Init(); } - - wxMenu(long style = 0) : wxMenuBase(style) { Init(); } - - virtual ~wxMenu(); - - virtual void Break(); - - virtual void SetTitle(const wxString& title); - - // implementation only from now on - // ------------------------------- - - virtual void Attach(wxMenuBarBase *menubar); - - bool MSWCommand(WXUINT param, WXWORD id); - - // semi-private accessors - // get the window which contains this menu - wxWindow *GetWindow() const; - // get the menu handle - WXHMENU GetHMenu() const { return m_hMenu; } - -#if wxUSE_ACCEL - // called by wxMenuBar to build its accel table from the accels of all menus - bool HasAccels() const { return !m_accels.IsEmpty(); } - size_t GetAccelCount() const { return m_accels.GetCount(); } - size_t CopyAccels(wxAcceleratorEntry *accels) const; - - // called by wxMenuItem when its accels changes - void UpdateAccel(wxMenuItem *item); - - // helper used by wxMenu itself (returns the index in m_accels) - int FindAccel(int id) const; -#endif // wxUSE_ACCEL - -protected: - virtual wxMenuItem* DoAppend(wxMenuItem *item); - virtual wxMenuItem* DoInsert(size_t pos, wxMenuItem *item); - virtual wxMenuItem* DoRemove(wxMenuItem *item); - -private: - // common part of all ctors - 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(); - - // 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; - -#if wxUSE_ACCEL - // the accelerators for our menu items - wxAcceleratorArray m_accels; -#endif // wxUSE_ACCEL - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxMenu) -}; - -// ---------------------------------------------------------------------------- -// Menu Bar (a la Windows) -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMenuInfo : public wxObject -{ -public : - wxMenuInfo() { m_menu = NULL; } - virtual ~wxMenuInfo() { } - - void Create( wxMenu *menu , const wxString &title ) - { m_menu = menu; m_title = title; } - wxMenu* GetMenu() const { return m_menu; } - wxString GetTitle() const { return m_title; } -private : - wxMenu *m_menu; - wxString m_title; - - DECLARE_DYNAMIC_CLASS(wxMenuInfo) -}; - -WX_DECLARE_EXPORTED_LIST(wxMenuInfo, wxMenuInfoList ); - -class WXDLLEXPORT wxMenuBar : public wxMenuBarBase -{ -public: - // ctors & dtor - // default constructor - wxMenuBar(); - // unused under MSW - wxMenuBar(long style); - // menubar takes ownership of the menus arrays but copies the titles - wxMenuBar(size_t n, wxMenu *menus[], const wxString titles[], long style = 0); - virtual ~wxMenuBar(); - - // menubar construction - bool Append( wxMenuInfo *info ) { return Append( info->GetMenu() , info->GetTitle() ); } - const wxMenuInfoList& GetMenuInfos() const; - - virtual bool Append( wxMenu *menu, const wxString &title ); - virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title); - virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title); - virtual wxMenu *Remove(size_t pos); - - virtual void EnableTop( size_t pos, bool flag ); - virtual void SetLabelTop( size_t pos, const wxString& label ); - virtual wxString GetLabelTop( size_t pos ) const; - - // implementation from now on - WXHMENU Create(); - virtual void Detach(); - virtual void Attach(wxFrame *frame); - -#if defined(__WXWINCE__) && wxUSE_TOOLBAR - // Under WinCE, a menubar is owned by the frame's toolbar - void SetToolBar(wxToolBar* toolBar) { m_toolBar = toolBar; } - wxToolBar* GetToolBar() const { return m_toolBar; } -#endif - -#ifdef WINCE_WITH_COMMANDBAR - WXHWND GetCommandBar() const { return m_commandBar; } - bool AddAdornments(long style); -#endif - -#if wxUSE_ACCEL - // get the accel table for all the menus - const wxAcceleratorTable& GetAccelTable() const { return m_accelTable; } - - // update the accel table (must be called after adding/deleting a menu) - void RebuildAccelTable(); -#endif // wxUSE_ACCEL - - // get the menu handle - WXHMENU GetHMenu() const { return m_hMenu; } - - // if the menubar is modified, the display is not updated automatically, - // call this function to update it (m_menuBarFrame should be !NULL) - void Refresh(); - - // To avoid compile warning - void Refresh( bool eraseBackground, - const wxRect *rect = (const wxRect *) NULL ) { wxWindow::Refresh(eraseBackground, rect); } - -protected: - // common part of all ctors - void Init(); - - wxArrayString m_titles; - wxMenuInfoList m_menuInfos; - - WXHMENU m_hMenu; - - // Return the MSW position for a wxMenu which is sometimes different from - // the wxWidgets position. - int MSWPositionForWxMenu(wxMenu *menu, int wxpos); -#if wxUSE_ACCEL - // the accelerator table for all accelerators in all our menus - wxAcceleratorTable m_accelTable; -#endif // wxUSE_ACCEL - -#if defined(__WXWINCE__) && wxUSE_TOOLBAR - wxToolBar* m_toolBar; -#endif - -#ifdef WINCE_WITH_COMMANDBAR - WXHWND m_commandBar; - bool m_adornmentsAdded; -#endif - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxMenuBar) - -public: - -#if wxABI_VERSION >= 20805 - // Gets the original label at the top-level of the menubar - wxString GetMenuLabel(size_t pos) const; -#endif -}; - -#endif // _WX_MENU_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/menuitem.h b/desmume/src/windows/wx/include/wx/msw/menuitem.h deleted file mode 100644 index 1e49604cb..000000000 --- a/desmume/src/windows/wx/include/wx/msw/menuitem.h +++ /dev/null @@ -1,100 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: menuitem.h -// Purpose: wxMenuItem class -// Author: Vadim Zeitlin -// Modified by: -// Created: 11.11.97 -// RCS-ID: $Id: menuitem.h 48053 2007-08-13 17:07:01Z JS $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _MENUITEM_H -#define _MENUITEM_H - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#if wxUSE_OWNER_DRAWN - #include "wx/ownerdrw.h" // base class -#endif - -// ---------------------------------------------------------------------------- -// wxMenuItem: an item in the menu, optionally implements owner-drawn behaviour -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMenuItem : public wxMenuItemBase -#if wxUSE_OWNER_DRAWN - , public wxOwnerDrawn -#endif -{ -public: - // ctor & dtor - wxMenuItem(wxMenu *parentMenu = (wxMenu *)NULL, - int id = wxID_SEPARATOR, - const wxString& name = wxEmptyString, - const wxString& help = wxEmptyString, - wxItemKind kind = wxITEM_NORMAL, - wxMenu *subMenu = (wxMenu *)NULL); - virtual ~wxMenuItem(); - - // override base class virtuals - virtual void SetText(const wxString& strName); - virtual void SetCheckable(bool checkable); - - virtual void Enable(bool bDoEnable = true); - virtual void Check(bool bDoCheck = true); - virtual bool IsChecked() const; - - // unfortunately needed to resolve ambiguity between - // wxMenuItemBase::IsCheckable() and wxOwnerDrawn::IsCheckable() - bool IsCheckable() const { return wxMenuItemBase::IsCheckable(); } - - // the id for a popup menu is really its menu handle (as required by - // ::AppendMenu() API), so this function will return either the id or the - // menu handle depending on what we're - int GetRealId() const; - - // mark item as belonging to the given radio group - void SetAsRadioGroupStart(); - void SetRadioGroupStart(int start); - void SetRadioGroupEnd(int end); - - // compatibility only, don't use in new code - wxMenuItem(wxMenu *parentMenu, - int id, - const wxString& text, - const wxString& help, - bool isCheckable, - wxMenu *subMenu = (wxMenu *)NULL); - -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; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxMenuItem) - -public: - -#if wxABI_VERSION >= 20805 - // return the item label including any mnemonics and accelerators. - // This used to be called GetText. - wxString GetItemLabel() const { return GetText(); } -#endif -}; - -#endif //_MENUITEM_H diff --git a/desmume/src/windows/wx/include/wx/msw/metafile.h b/desmume/src/windows/wx/include/wx/msw/metafile.h deleted file mode 100644 index 04effbb6d..000000000 --- a/desmume/src/windows/wx/include/wx/msw/metafile.h +++ /dev/null @@ -1,171 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/metafile.h -// Purpose: wxMetaFile, wxMetaFileDC and wxMetaFileDataObject classes -// Author: Julian Smart -// Modified by: VZ 07.01.00: implemented wxMetaFileDataObject -// Created: 01/02/97 -// RCS-ID: $Id: metafile.h 46103 2007-05-18 15:14:44Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_METAFIILE_H_ -#define _WX_METAFIILE_H_ - -#include "wx/dc.h" -#include "wx/gdiobj.h" - -#if wxUSE_DRAG_AND_DROP - #include "wx/dataobj.h" -#endif - -// ---------------------------------------------------------------------------- -// Metafile and metafile device context classes -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMetafile; - -class WXDLLEXPORT wxMetafileRefData: public wxGDIRefData -{ - friend class WXDLLEXPORT wxMetafile; -public: - wxMetafileRefData(); - virtual ~wxMetafileRefData(); - -public: - WXHANDLE m_metafile; - int m_windowsMappingMode; - int m_width, m_height; -}; - -#define M_METAFILEDATA ((wxMetafileRefData *)m_refData) - -class WXDLLEXPORT wxMetafile: public wxGDIObject -{ -public: - wxMetafile(const wxString& file = wxEmptyString); - virtual ~wxMetafile(); - - // After this is called, the metafile cannot be used for anything - // since it is now owned by the clipboard. - virtual bool SetClipboard(int width = 0, int height = 0); - - virtual bool Play(wxDC *dc); - bool Ok() const { return IsOk(); } - bool IsOk() const { return (M_METAFILEDATA && (M_METAFILEDATA->m_metafile != 0)); }; - - // set/get the size of metafile for clipboard operations - wxSize GetSize() const { return wxSize(GetWidth(), GetHeight()); } - int GetWidth() const { return M_METAFILEDATA->m_width; } - int GetHeight() const { return M_METAFILEDATA->m_height; } - - void SetWidth(int width) { M_METAFILEDATA->m_width = width; } - void SetHeight(int height) { M_METAFILEDATA->m_height = height; } - - // Implementation - WXHANDLE GetHMETAFILE() const { return M_METAFILEDATA->m_metafile; } - void SetHMETAFILE(WXHANDLE mf) ; - int GetWindowsMappingMode() const { return M_METAFILEDATA->m_windowsMappingMode; } - void SetWindowsMappingMode(int mm); - -private: - DECLARE_DYNAMIC_CLASS(wxMetafile) -}; - -class WXDLLEXPORT wxMetafileDC: public wxDC -{ -public: - // Don't supply origin and extent - // Supply them to wxMakeMetaFilePlaceable instead. - wxMetafileDC(const wxString& file = wxEmptyString); - - // Supply origin and extent (recommended). - // Then don't need to supply them to wxMakeMetaFilePlaceable. - wxMetafileDC(const wxString& file, int xext, int yext, int xorg, int yorg); - - virtual ~wxMetafileDC(); - - // Should be called at end of drawing - virtual wxMetafile *Close(); - virtual void SetMapMode(int mode); - -#if wxABI_VERSION >= 20805 - virtual void DoGetTextExtent(const wxString& string, - wxCoord *x, wxCoord *y, - wxCoord *descent = NULL, - wxCoord *externalLeading = NULL, - const wxFont *theFont = NULL) const; -#endif // wx ABI 2.8.5+ - - // this method shouldn't have been defined here (DoGetTextExtent() is the - // correct one) but keep it to avoid breaking binary backwards - // compatibility - virtual void GetTextExtent(const wxString& string, long *x, long *y, - long *descent = NULL, long *externalLeading = NULL, - wxFont *theFont = NULL, bool use16bit = false) const; - - // Implementation - wxMetafile *GetMetaFile() const { return m_metaFile; } - void SetMetaFile(wxMetafile *mf) { m_metaFile = mf; } - int GetWindowsMappingMode() const { return m_windowsMappingMode; } - void SetWindowsMappingMode(int mm) { m_windowsMappingMode = mm; } - -protected: - virtual void DoGetSize(int *width, int *height) const; - - int m_windowsMappingMode; - wxMetafile* m_metaFile; - -private: - DECLARE_DYNAMIC_CLASS(wxMetafileDC) -}; - -/* - * Pass filename of existing non-placeable metafile, and bounding box. - * Adds a placeable metafile header, sets the mapping mode to anisotropic, - * and sets the window origin and extent to mimic the wxMM_TEXT mapping mode. - * - */ - -// No origin or extent -bool WXDLLEXPORT wxMakeMetafilePlaceable(const wxString& filename, float scale = 1.0); - -// Optional origin and extent -bool WXDLLEXPORT wxMakeMetaFilePlaceable(const wxString& filename, int x1, int y1, int x2, int y2, float scale = 1.0, bool useOriginAndExtent = true); - -// ---------------------------------------------------------------------------- -// wxMetafileDataObject is a specialization of wxDataObject for metafile data -// ---------------------------------------------------------------------------- - -#if wxUSE_DRAG_AND_DROP - -class WXDLLEXPORT wxMetafileDataObject : public wxDataObjectSimple -{ -public: - // ctors - wxMetafileDataObject() : wxDataObjectSimple(wxDF_METAFILE) - { } - wxMetafileDataObject(const wxMetafile& metafile) - : wxDataObjectSimple(wxDF_METAFILE), m_metafile(metafile) { } - - // virtual functions which you may override if you want to provide data on - // demand only - otherwise, the trivial default versions will be used - virtual void SetMetafile(const wxMetafile& metafile) - { m_metafile = metafile; } - virtual wxMetafile GetMetafile() const - { return m_metafile; } - - // implement base class pure virtuals - virtual size_t GetDataSize() const; - virtual bool GetDataHere(void *buf) const; - virtual bool SetData(size_t len, const void *buf); - -protected: - wxMetafile m_metafile; -}; - -#endif // wxUSE_DRAG_AND_DROP - -#endif - // _WX_METAFIILE_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/microwin.h b/desmume/src/windows/wx/include/wx/msw/microwin.h deleted file mode 100644 index 934302d0c..000000000 --- a/desmume/src/windows/wx/include/wx/msw/microwin.h +++ /dev/null @@ -1,235 +0,0 @@ -/* -///////////////////////////////////////////////////////////////////////////// -// Name: microwin.h -// Purpose: Extra implementation for MicroWindows -// Author: Julian Smart -// Created: 2001-05-31 -// RCS-ID: $Id: microwin.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// -*/ - -#ifndef _WX_MICROWIN_H_ -#define _WX_MICROWIN_H_ - -/* Implemented by microwin.cpp */ - -#ifdef __cplusplus -extern "C" { -#endif - -BOOL SetCursorPos(int x, int y); - -HCURSOR SetCursor(HCURSOR hCursor); - -/* Implemented with wrong number of args by MicroWindows */ -/* so we need to use a different name */ -int GetScrollPosWX (HWND hWnd, int iSBar); - -BOOL ScrollWindow(HWND, int xAmount, int yAmount, - CONST RECT* lpRect, CONST RECT* lpClipRect); - -HWND WindowFromPoint(POINT pt); -SHORT GetKeyState(int nVirtKey); -HWND SetParent(HWND hWndChild, HWND hWndNewParent); -VOID DragAcceptFiles(HWND, BOOL); -BOOL IsDialogMessage(HWND hWnd, MSG* msg); -DWORD GetMessagePos(VOID); -BOOL IsIconic(HWND hWnd); -int SetMapMode(HDC hDC, int mode); -int GetMapMode(HDC hDC); -HCURSOR LoadCursor(HINSTANCE hInst, int cursor); -DWORD GetModuleFileName(HINSTANCE hInst, LPSTR name, DWORD sz); -VOID DestroyIcon(HICON hIcon); -COLORREF GetTextColor(HDC hdc); -COLORREF GetBkColor(HDC hdc); -HPALETTE SelectPalette(HDC hdc, HPALETTE hPalette, BOOL b); -BOOL IntersectClipRect(HDC hdc, int x, int y, - int w, int h); -BOOL GetClipBox(HDC hdc, RECT* rect); -BOOL DrawIconEx(HDC hdc, int x, int y, HICON hIcon, int w, int h, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags); -BOOL SetViewportExtEx(HDC hdc, int x, int y, LPSIZE lpSize); -BOOL SetViewportOrgEx(HDC hdc, int x, int y, LPPOINT lpPoint); -BOOL SetWindowExtEx(HDC hdc, int x, int y, LPSIZE lpSize); -BOOL SetWindowOrgEx(HDC hdc, int x, int y, LPPOINT lpSize); -BOOL ExtFloodFill(HDC hdc, int x, int y, COLORREF col, UINT flags); -int SetPolyFillMode(HDC hdc, int mode); -BOOL RoundRect(HDC hdc, int left, int top, int right, int bottom, int r1, int r2); -BOOL MaskBlt(HDC hdc, int x, int y, int w, int h, - HDC hDCSource, int xSrc, int ySrc, HBITMAP hBitmapMask, int xMask, int yMask, DWORD rop); -UINT RealizePalette(HDC hDC); -BOOL SetBrushOrgEx(HDC hdc, int xOrigin, int yOrigin, LPPOINT lpPoint); -int GetObject(HGDIOBJ hObj, int sz, LPVOID logObj); - -/* For some reason these aren't defined in the headers */ -BOOL EnableScrollBar (HWND hWnd, int iSBar, BOOL bEnable) ; -BOOL GetScrollPos (HWND hWnd, int iSBar, int* pPos); -BOOL GetScrollRange (HWND hWnd, int iSBar, int* pMinPos, int* pMaxPos); -BOOL SetScrollPos (HWND hWnd, int iSBar, int iNewPos); -BOOL SetScrollRange (HWND hWnd, int iSBar, int iMinPos, int iMaxPos); -BOOL SetScrollInfo (HWND hWnd, int iSBar, - LPCSCROLLINFO lpsi, BOOL fRedraw); -BOOL GetScrollInfo(HWND hWnd, int iSBar, LPSCROLLINFO lpsi); -BOOL ShowScrollBar (HWND hWnd, int iSBar, BOOL bShow); -HBITMAP WINAPI -CreateBitmap( int width, int height, int nPlanes, int bPP, LPCVOID lpData); - -#ifdef __cplusplus -} -#endif - -/* - * Key State Masks for Mouse Messages - */ -#ifndef MK_LBUTTON -#define MK_LBUTTON 0x0001 -#define MK_RBUTTON 0x0002 -#define MK_SHIFT 0x0004 -#define MK_CONTROL 0x0008 -#define MK_MBUTTON 0x0010 -#endif - -/* - * DrawIcon flags - */ - -#ifndef DI_MASK -#define DI_MASK 0x0001 -#define DI_IMAGE 0x0002 -#define DI_NORMAL 0x0003 -#define DI_COMPAT 0x0004 -#define DI_DEFAULTSIZE 0x0008 -#endif - -/* TODO: May have to fake these message */ -#ifndef WM_INITDIALOG -#define WM_INITDIALOG 0x0110 -#endif -#ifndef WM_QUERYENDSESSION -#define WM_QUERYENDSESSION 0x0011 -#endif -#ifndef WM_ENDSESSION -#define WM_ENDSESSION 0x0016 -#endif -#ifndef WM_SETCURSOR -#define WM_SETCURSOR 0x0020 -#endif -#ifndef WM_GETMINMAXINFO -#define WM_GETMINMAXINFO 0x0024 -typedef struct tagMINMAXINFO { - POINT ptReserved; - POINT ptMaxSize; - POINT ptMaxPosition; - POINT ptMinTrackSize; - POINT ptMaxTrackSize; -} MINMAXINFO, *PMINMAXINFO, *LPMINMAXINFO; - -#endif -#ifndef WM_SYSCOMMAND -#define WM_SYSCOMMAND 0x0112 -#endif -#ifndef WM_SYSCOLORCHANGE -#define WM_SYSCOLORCHANGE 0x0015 -#endif -#ifndef WM_QUERYNEWPALETTE -#define WM_QUERYNEWPALETTE 0x030F -#endif -#ifndef WM_PALETTEISCHANGING -#define WM_PALETTEISCHANGING 0x0310 -#endif -#ifndef WM_PALETTECHANGED -#define WM_PALETTECHANGED 0x0311 -#endif -#ifndef WM_NOTIFY -#define WM_NOTIFY 0x004E -#endif -#ifndef WM_DROPFILES -#define WM_DROPFILES 0x0233 -#endif - -#ifndef PALETTERGB -#define PALETTERGB RGB -#endif - -#ifndef MM_TEXT -#define MM_TEXT 1 -#define MM_LOMETRIC 2 -#define MM_HIMETRIC 3 -#define MM_LOENGLISH 4 -#define MM_HIENGLISH 5 -#define MM_TWIPS 6 -#define MM_ISOTROPIC 7 -#define MM_ANISOTROPIC 8 -#endif - -#ifndef SC_MAXIMIZE -#define SC_MINIMIZE 0xF020 -#define SC_MAXIMIZE 0xF030 -#endif - -// TODO: all of them -#ifndef IDC_ARROW -#define IDC_ARROW 1 -#endif - -/* - * Standard Cursor IDs - */ -#ifndef MAKEINTRESOURCE -#define MAKEINTRESOURCE(r) r -#endif - -#ifndef IDC_ARROW -#define IDC_ARROW MAKEINTRESOURCE(32512) -#define IDC_IBEAM MAKEINTRESOURCE(32513) -#define IDC_WAIT MAKEINTRESOURCE(32514) -#define IDC_CROSS MAKEINTRESOURCE(32515) -#define IDC_UPARROW MAKEINTRESOURCE(32516) -#define IDC_SIZE MAKEINTRESOURCE(32640) /* OBSOLETE: use IDC_SIZEALL */ -#define IDC_ICON MAKEINTRESOURCE(32641) /* OBSOLETE: use IDC_ARROW */ -#define IDC_SIZENWSE MAKEINTRESOURCE(32642) -#define IDC_SIZENESW MAKEINTRESOURCE(32643) -#define IDC_SIZEWE MAKEINTRESOURCE(32644) -#define IDC_SIZENS MAKEINTRESOURCE(32645) -#define IDC_SIZEALL MAKEINTRESOURCE(32646) -#define IDC_NO MAKEINTRESOURCE(32648) /* not in win3.1 */ -#if(WINVER >= 0x0500) -#define IDC_HAND MAKEINTRESOURCE(32649) -#endif /* WINVER >= 0x0500 */ -#define IDC_APPSTARTING MAKEINTRESOURCE(32650) /* not in win3.1 */ -#if(WINVER >= 0x0400) -#define IDC_HELP MAKEINTRESOURCE(32651) -#endif /* WINVER >= 0x0400 */ -#endif - -/* ExtFloodFill style flags */ -#define FLOODFILLBORDER 0 -#define FLOODFILLSURFACE 1 - -/* PolyFill() Modes */ -#define ALTERNATE 1 -#define WINDING 2 -#define POLYFILL_LAST 2 - -/* Quaternary raster codes */ -#define MAKEROP4(fore,back) (DWORD)((((back) << 8) & 0xFF000000) | (fore)) - -/* Device Parameters for GetDeviceCaps() */ -#define DRIVERVERSION 0 /* Device driver version */ -#define TECHNOLOGY 2 /* Device classification */ -#define HORZSIZE 4 /* Horizontal size in millimeters */ -#define VERTSIZE 6 /* Vertical size in millimeters */ - -/* Ternary raster operations */ -/* Now defined by MicroWindows */ -#if 0 -#define DSTINVERT (DWORD)0x00550009 /* dest = (NOT dest) */ -#define WHITENESS (DWORD)0x00FF0062 /* dest = WHITE */ -#define SRCERASE (DWORD)0x00440328 /* dest = source AND (NOT dest ) */ -#define MERGEPAINT (DWORD)0x00BB0226 /* dest = (NOT source) OR dest */ -#define SRCPAINT (DWORD)0x00EE0086 /* dest = source OR dest */ -#define NOTSRCCOPY (DWORD)0x00330008 /* dest = (NOT source) */ -#endif - -#endif /* _WX_MICROWIN_H_ */ diff --git a/desmume/src/windows/wx/include/wx/msw/mimetype.h b/desmume/src/windows/wx/include/wx/msw/mimetype.h deleted file mode 100644 index 0b5107ac6..000000000 --- a/desmume/src/windows/wx/include/wx/msw/mimetype.h +++ /dev/null @@ -1,122 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/mimetype.h -// Purpose: classes and functions to manage MIME types -// Author: Vadim Zeitlin -// Modified by: -// Created: 23.09.98 -// RCS-ID: $Id: mimetype.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence (part of wxExtra library) -///////////////////////////////////////////////////////////////////////////// - -#ifndef _MIMETYPE_IMPL_H -#define _MIMETYPE_IMPL_H - -#include "wx/defs.h" - -#if wxUSE_MIMETYPE - -#include "wx/mimetype.h" - -// ---------------------------------------------------------------------------- -// wxFileTypeImpl is the MSW version of wxFileType, this is a private class -// and is never used directly by the application -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFileTypeImpl -{ -public: - // ctor - wxFileTypeImpl() { } - - // one of these Init() function must be called (ctor can't take any - // arguments because it's common) - - // initialize us with our file type name and extension - in this case - // we will read all other data from the registry - void Init(const wxString& strFileType, const wxString& ext); - - // implement accessor functions - bool GetExtensions(wxArrayString& extensions); - bool GetMimeType(wxString *mimeType) const; - bool GetMimeTypes(wxArrayString& mimeTypes) const; - bool GetIcon(wxIconLocation *iconLoc) const; - bool GetDescription(wxString *desc) const; - 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 Unassociate(); - - // set an arbitrary command, ask confirmation if it already exists and - // overwriteprompt is true - bool SetCommand(const wxString& cmd, - const wxString& verb, - bool overwriteprompt = true); - - bool SetDefaultIcon(const wxString& cmd = wxEmptyString, int index = 0); - - // this is called by Associate - bool SetDescription (const wxString& desc); - -private: - // helper function: reads the command corresponding to the specified verb - // from the registry (returns an empty string if not found) - wxString GetCommand(const wxChar *verb) const; - - // get the registry path for the given verb - wxString GetVerbPath(const wxString& verb) const; - - // check that the registry key for our extension exists, create it if it - // doesn't, return false if this failed - bool EnsureExtKeyExists(); - - wxString m_strFileType, // may be empty - m_ext; - - // these methods are not publicly accessible (as wxMimeTypesManager - // doesn't know about them), and should only be called by Unassociate - - bool RemoveOpenCommand(); - bool RemoveCommand(const wxString& verb); - bool RemoveMimeType(); - bool RemoveDefaultIcon(); - bool RemoveDescription(); -}; - -class WXDLLIMPEXP_BASE wxMimeTypesManagerImpl -{ -public: - // nothing to do here, we don't load any data but just go and fetch it from - // the registry when asked for - wxMimeTypesManagerImpl() { } - - // implement containing class functions - wxFileType *GetFileTypeFromExtension(const wxString& ext); - wxFileType *GetOrAllocateFileTypeFromExtension(const wxString& ext); - wxFileType *GetFileTypeFromMimeType(const wxString& mimeType); - - size_t EnumAllFileTypes(wxArrayString& mimetypes); - - // this are NOPs under Windows - bool ReadMailcap(const wxString& WXUNUSED(filename), bool WXUNUSED(fallback) = true) - { return true; } - bool ReadMimeTypes(const wxString& WXUNUSED(filename)) - { return true; } - - // create a new filetype association - wxFileType *Associate(const wxFileTypeInfo& ftInfo); - - // create a new filetype with the given name and extension - wxFileType *CreateFileType(const wxString& filetype, const wxString& ext); -}; - -#endif // wxUSE_MIMETYPE - -#endif - //_MIMETYPE_IMPL_H - diff --git a/desmume/src/windows/wx/include/wx/msw/minifram.h b/desmume/src/windows/wx/include/wx/msw/minifram.h deleted file mode 100644 index 63dc24f1b..000000000 --- a/desmume/src/windows/wx/include/wx/msw/minifram.h +++ /dev/null @@ -1,52 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/minifram.h -// Purpose: wxMiniFrame class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: minifram.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MINIFRAM_H_ -#define _WX_MINIFRAM_H_ - -#include "wx/frame.h" - -class WXDLLEXPORT wxMiniFrame : public wxFrame -{ -public: - wxMiniFrame() { } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCAPTION | wxCLIP_CHILDREN | wxRESIZE_BORDER, - const wxString& name = wxFrameNameStr) - { - return wxFrame::Create(parent, id, title, pos, size, - style | - wxFRAME_TOOL_WINDOW | - (parent ? wxFRAME_FLOAT_ON_PARENT : 0), name); - } - - wxMiniFrame(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxCAPTION | wxCLIP_CHILDREN | wxRESIZE_BORDER, - const wxString& name = wxFrameNameStr) - { - Create(parent, id, title, pos, size, style, name); - } - -protected: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxMiniFrame) -}; - -#endif - // _WX_MINIFRAM_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/missing.h b/desmume/src/windows/wx/include/wx/msw/missing.h deleted file mode 100644 index 871cbfafd..000000000 --- a/desmume/src/windows/wx/include/wx/msw/missing.h +++ /dev/null @@ -1,495 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/missing.h -// 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 48436 2007-08-28 19:26:16Z JS $ -// Copyright: (c) 2002 Mattia Barbon -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MISSING_H_ -#define _WX_MISSING_H_ - -/* - * The following are required for VC++ 6. - */ - -// Needed by cursor.cpp -#ifndef IDC_HAND - #define IDC_HAND MAKEINTRESOURCE(32649) -#endif - -// Needed by strconv.cpp -#ifndef WC_NO_BEST_FIT_CHARS - #define WC_NO_BEST_FIT_CHARS 0x400 -#endif - -#ifndef WM_CONTEXTMENU - #define WM_CONTEXTMENU 0x007B -#endif - -// Needed by toplevel.cpp -#ifndef WM_UPDATEUISTATE - #define WM_UPDATEUISTATE 0x0128 -#endif - -#ifndef WM_CHANGEUISTATE - #define WM_CHANGEUISTATE 0x0127 -#endif - -#ifndef WM_PRINTCLIENT - #define WM_PRINTCLIENT 0x318 -#endif - -// Needed by toplevel.cpp -#ifndef UIS_SET - #define UIS_SET 1 - #define UIS_CLEAR 2 - #define UIS_INITIALIZE 3 -#endif - -#ifndef UISF_HIDEFOCUS - #define UISF_HIDEFOCUS 1 -#endif - -#ifndef UISF_HIDEACCEL - #define UISF_HIDEACCEL 2 -#endif - -#ifndef OFN_EXPLORER - #define OFN_EXPLORER 0x00080000 -#endif - -#ifndef OFN_ENABLESIZING - #define OFN_ENABLESIZING 0x00800000 -#endif - -// Needed by window.cpp -#if wxUSE_MOUSEWHEEL - #ifndef WM_MOUSEWHEEL - #define WM_MOUSEWHEEL 0x020A - #endif - #ifndef WHEEL_DELTA - #define WHEEL_DELTA 120 - #endif - #ifndef SPI_GETWHEELSCROLLLINES - #define SPI_GETWHEELSCROLLLINES 104 - #endif -#endif // wxUSE_MOUSEWHEEL - -// Needed by window.cpp -#ifndef VK_OEM_1 - #define VK_OEM_1 0xBA - #define VK_OEM_2 0xBF - #define VK_OEM_3 0xC0 - #define VK_OEM_4 0xDB - #define VK_OEM_5 0xDC - #define VK_OEM_6 0xDD - #define VK_OEM_7 0xDE -#endif - -#ifndef VK_OEM_COMMA - #define VK_OEM_PLUS 0xBB - #define VK_OEM_COMMA 0xBC - #define VK_OEM_MINUS 0xBD - #define VK_OEM_PERIOD 0xBE -#endif - -#ifndef SM_TABLETPC - #define SM_TABLETPC 86 -#endif - -#ifndef INKEDIT_CLASS -# define INKEDIT_CLASSW L"INKEDIT" -# ifdef UNICODE -# define INKEDIT_CLASS INKEDIT_CLASSW -# else -# define INKEDIT_CLASS "INKEDIT" -# endif -#endif - -#ifndef EM_SETINKINSERTMODE -# define EM_SETINKINSERTMODE (WM_USER + 0x0204) -#endif - -#ifndef EM_SETUSEMOUSEFORINPUT -#define EM_SETUSEMOUSEFORINPUT (WM_USER + 0x224) -#endif - -#ifndef TPM_RECURSE -#define TPM_RECURSE 1 -#endif - - -#ifndef WS_EX_LAYOUTRTL -#define WS_EX_LAYOUTRTL 0x00400000 -#endif - -#ifndef WS_EX_COMPOSITED -#define WS_EX_COMPOSITED 0x02000000L -#endif - -#ifndef WS_EX_LAYERED -#define WS_EX_LAYERED 0x00080000 -#endif - -#ifndef LWA_ALPHA -#define LWA_ALPHA 2 -#endif - -#if defined __VISUALC__ && __VISUALC__ <= 1200 && !defined MIIM_BITMAP -#define MIIM_STRING 0x00000040 -#define MIIM_BITMAP 0x00000080 -#define MIIM_FTYPE 0x00000100 -#define HBMMENU_CALLBACK ((HBITMAP) -1) -typedef struct tagMENUINFO -{ - DWORD cbSize; - DWORD fMask; - DWORD dwStyle; - UINT cyMax; - HBRUSH hbrBack; - DWORD dwContextHelpID; - DWORD dwMenuData; -} MENUINFO, FAR *LPMENUINFO; -struct wxMENUITEMINFO_ -{ - UINT cbSize; - UINT fMask; - UINT fType; - UINT fState; - UINT wID; - HMENU hSubMenu; - HBITMAP hbmpChecked; - HBITMAP hbmpUnchecked; - DWORD dwItemData; - LPTSTR dwTypeData; - UINT cch; - HBITMAP hbmpItem; -}; -#else -#define wxMENUITEMINFO_ MENUITEMINFO -#endif - -/* - * The following are required for VC++ 5 when the PSDK is not available. - */ - -#if defined __VISUALC__ && __VISUALC__ <= 1100 - -#ifndef VER_NT_WORKSTATION - -typedef struct _OSVERSIONINFOEXA { - DWORD dwOSVersionInfoSize; - DWORD dwMajorVersion; - DWORD dwMinorVersion; - DWORD dwBuildNumber; - DWORD dwPlatformId; - CHAR szCSDVersion[128]; - WORD wServicePackMajor; - WORD wServicePackMinor; - WORD wSuiteMask; - BYTE wProductType; - BYTE wReserved; -} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA; -typedef struct _OSVERSIONINFOEXW { - DWORD dwOSVersionInfoSize; - DWORD dwMajorVersion; - DWORD dwMinorVersion; - DWORD dwBuildNumber; - DWORD dwPlatformId; - WCHAR szCSDVersion[128]; - WORD wServicePackMajor; - WORD wServicePackMinor; - WORD wSuiteMask; - BYTE wProductType; - BYTE wReserved; -} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW; - -#ifdef UNICODE -typedef OSVERSIONINFOW OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO; -typedef OSVERSIONINFOEXW OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX; -#else -typedef OSVERSIONINFOA OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO; -typedef OSVERSIONINFOEXA OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX; -#endif - -#endif // defined VER_NT_WORKSTATION - -#ifndef CP_SYMBOL - #define CP_SYMBOL 42 -#endif - -// NMLVCUSTOMDRAW originally didn't have the iSubItem member. It was added -// with IE4, as was IPN_FIRST which is used as a test :-(. -// -#ifndef IPN_FIRST - -typedef struct wxtagNMLVCUSTOMDRAW_ { - NMCUSTOMDRAW nmcd; - COLORREF clrText; - COLORREF clrTextBk; - int iSubItem; -} wxNMLVCUSTOMDRAW_, *wxLPNMLVCUSTOMDRAW_; - -#define NMLVCUSTOMDRAW wxNMLVCUSTOMDRAW_ -#define LPNMLVCUSTOMDRAW wxLPNMLVCUSTOMDRAW_ - -#endif // defined IPN_FIRST - -#endif // defined __VISUALC__ && __VISUALC__ <= 1100 - -// ---------------------------------------------------------------------------- -// ListView common control -// Needed by listctrl.cpp -// ---------------------------------------------------------------------------- - -#ifndef LVS_EX_FULLROWSELECT - #define LVS_EX_FULLROWSELECT 0x00000020 -#endif - -#ifndef LVS_EX_LABELTIP - #define LVS_EX_LABELTIP 0x00004000 -#endif - -#ifndef LVS_EX_SUBITEMIMAGES - #define LVS_EX_SUBITEMIMAGES 0x00000002 -#endif - -#ifndef HDN_GETDISPINFOW - #define HDN_GETDISPINFOW (HDN_FIRST-29) -#endif - - /* - * In addition to the above, the following are required for several compilers. - */ - -#if !defined(CCS_VERT) -#define CCS_VERT 0x00000080L -#endif - -#if !defined(CCS_RIGHT) -#define CCS_RIGHT (CCS_VERT|CCS_BOTTOM) -#endif - -#if !defined(TB_SETDISABLEDIMAGELIST) - #define TB_SETDISABLEDIMAGELIST (WM_USER + 54) -#endif // !defined(TB_SETDISABLEDIMAGELIST) - -#ifndef CFM_BACKCOLOR - #define CFM_BACKCOLOR 0x04000000 -#endif - -#ifndef HANGUL_CHARSET - #define HANGUL_CHARSET 129 -#endif - -#ifndef CCM_SETUNICODEFORMAT - #define CCM_SETUNICODEFORMAT 8197 -#endif - -// ---------------------------------------------------------------------------- -// Tree control -// ---------------------------------------------------------------------------- - -#ifndef TV_FIRST - #define TV_FIRST 0x1100 -#endif - -#ifndef TVS_FULLROWSELECT - #define TVS_FULLROWSELECT 0x1000 -#endif - -#ifndef TVM_SETBKCOLOR - #define TVM_SETBKCOLOR (TV_FIRST + 29) - #define TVM_SETTEXTCOLOR (TV_FIRST + 30) -#endif - - /* - * The following are required for BC++ 5.5 (none at present.) - */ - - /* - * The following are specifically required for Digital Mars C++ - */ - -#ifdef __DMC__ - -typedef struct _OSVERSIONINFOEX { - DWORD dwOSVersionInfoSize; - DWORD dwMajorVersion; - DWORD dwMinorVersion; - DWORD dwBuildNumber; - DWORD dwPlatformId; - TCHAR szCSDVersion[ 128 ]; - WORD wServicePackMajor; - WORD wServicePackMinor; - WORD wSuiteMask; - BYTE wProductType; - BYTE wReserved; -} OSVERSIONINFOEX; - -#ifndef _TrackMouseEvent - #define _TrackMouseEvent TrackMouseEvent -#endif - -#ifndef LVM_SETEXTENDEDLISTVIEWSTYLE - #define LVM_SETEXTENDEDLISTVIEWSTYLE (0x1000 + 54) -#endif - -#ifndef LVM_GETSUBITEMRECT - #define LVM_GETSUBITEMRECT (0x1000 + 56) -#endif - -#ifndef LVCF_IMAGE - #define LVCF_IMAGE 0x0010 -#endif - -#ifndef Header_GetItemRect - #define Header_GetItemRect(w,i,r) \ - (BOOL)SendMessage((w),HDM_GETITEMRECT,(WPARAM)(i),(LPARAM)(r)) -#endif - -#ifndef HDM_GETITEMRECT - #define HDM_GETITEMRECT (HDM_FIRST+7) -#endif - -#ifndef ListView_GetHeader - #define ListView_GetHeader(w) (HWND)SendMessage((w),LVM_GETHEADER,0,0) -#endif - -#ifndef ListView_GetSubItemRect - #define ListView_GetSubItemRect(w, i, s, c, p) (HWND)SendMessage(w,LVM_GETSUBITEMRECT,i, ((p) ? ((((LPRECT)(p))->top = s), (((LPRECT)(p))->left = c), (LPARAM)(p)) : (LPARAM)(LPRECT)NULL)) -#endif - -#ifndef LVM_GETHEADER - #define LVM_GETHEADER (LVM_FIRST+31) -#endif - -#ifndef LVSICF_NOSCROLL - #define LVSICF_NOINVALIDATEALL 0x0001 - #define LVSICF_NOSCROLL 0x0002 -#endif - -#ifndef CP_SYMBOL - #define CP_SYMBOL 42 -#endif - -// ---------------------------------------------------------------------------- -// wxDisplay -// ---------------------------------------------------------------------------- - -// The windows headers with Digital Mars lack some typedefs. -// typedef them as my_XXX and then #define to rename to XXX in case -// a newer version of Digital Mars fixes the headers -// (or up to date PSDK is in use with older version) -// also we use any required definition (MONITOR_DEFAULTTONULL) to recognize -// whether whole missing block needs to be included - -#ifndef MONITOR_DEFAULTTONULL - - #define HMONITOR_DECLARED - DECLARE_HANDLE(HMONITOR); - typedef BOOL(CALLBACK* my_MONITORENUMPROC)(HMONITOR,HDC,LPRECT,LPARAM); - #define MONITORENUMPROC my_MONITORENUMPROC - typedef struct my_tagMONITORINFO { - DWORD cbSize; - RECT rcMonitor; - RECT rcWork; - DWORD dwFlags; - } my_MONITORINFO,*my_LPMONITORINFO; - #define MONITORINFO my_MONITORINFO - #define LPMONITORINFO my_LPMONITORINFO - - typedef struct my_MONITORINFOEX : public my_tagMONITORINFO - { - TCHAR szDevice[CCHDEVICENAME]; - } my_MONITORINFOEX, *my_LPMONITORINFOEX; - #define MONITORINFOEX my_MONITORINFOEX - #define LPMONITORINFOEX my_LPMONITORINFOEX - - #ifndef MONITOR_DEFAULTTONULL - #define MONITOR_DEFAULTTONULL 0 - #endif // MONITOR_DEFAULTTONULL - - #ifndef MONITORINFOF_PRIMARY - #define MONITORINFOF_PRIMARY 1 - #endif // MONITORINFOF_PRIMARY - - #ifndef DDENUM_ATTACHEDSECONDARYDEVICES - #define DDENUM_ATTACHEDSECONDARYDEVICES 1 - #endif - -#endif // MONITOR_DEFAULTTONULL - -// ---------------------------------------------------------------------------- -// Tree control -// ---------------------------------------------------------------------------- - -#ifndef TVIS_FOCUSED - #define TVIS_FOCUSED 0x0001 -#endif - -#ifndef TVS_CHECKBOXES - #define TVS_CHECKBOXES 0x0100 -#endif - -#ifndef TVITEM - #define TVITEM TV_ITEM -#endif - -#endif - // DMC++ - - /* - * The following are specifically required for OpenWatcom C++ (none at present) - */ - -#if defined(__WATCOMC__) -#endif - - /* - * The following are specifically required for MinGW (none at present) - */ - -#if defined (__MINGW32__) - -#if !wxCHECK_W32API_VERSION(3,1) - -#include <windows.h> -#include "wx/msw/winundef.h" - -typedef struct -{ - RECT rgrc[3]; - WINDOWPOS *lppos; -} NCCALCSIZE_PARAMS, *LPNCCALCSIZE_PARAMS; - -#endif - -#endif - - /* - * In addition to the declarations for VC++, the following are required for WinCE - */ - -#ifdef __WXWINCE__ - #include "wx/msw/wince/missing.h" -#endif - - /* - * The following are specifically required for Wine - */ - -#ifdef __WINE__ - #ifndef ENUM_CURRENT_SETTINGS - #define ENUM_CURRENT_SETTINGS ((DWORD)-1) - #endif - #ifndef BROADCAST_QUERY_DENY - #define BROADCAST_QUERY_DENY 1112363332 - #endif -#endif // defined __WINE__ - -#endif - // _WX_MISSING_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/msgdlg.h b/desmume/src/windows/wx/include/wx/msw/msgdlg.h deleted file mode 100644 index 8d43b3807..000000000 --- a/desmume/src/windows/wx/include/wx/msw/msgdlg.h +++ /dev/null @@ -1,42 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/msgdlg.h -// Purpose: wxMessageDialog class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: msgdlg.h 37164 2006-01-26 17:20:50Z ABX $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSGBOXDLG_H_ -#define _WX_MSGBOXDLG_H_ - -#include "wx/defs.h" -#include "wx/dialog.h" - -/* - * Message box dialog - */ - -extern WXDLLEXPORT_DATA(const wxChar) wxMessageBoxCaptionStr[]; - -class WXDLLEXPORT wxMessageDialog: public wxDialog, public wxMessageDialogBase -{ -DECLARE_DYNAMIC_CLASS(wxMessageDialog) -protected: - wxString m_caption; - wxString m_message; - wxWindow * m_parent; -public: - wxMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption = wxMessageBoxCaptionStr, - long style = wxOK|wxCENTRE, const wxPoint& pos = wxDefaultPosition); - - int ShowModal(void); - - DECLARE_NO_COPY_CLASS(wxMessageDialog) -}; - - -#endif - // _WX_MSGBOXDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/mslu.h b/desmume/src/windows/wx/include/wx/msw/mslu.h deleted file mode 100644 index eccf13a26..000000000 --- a/desmume/src/windows/wx/include/wx/msw/mslu.h +++ /dev/null @@ -1,23 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/mslu.h -// Purpose: MSLU-related declarations -// Author: Vaclav Slavik -// Modified by: Vadim Zeitlin to move out various functions to other files -// to fix header inter-dependencies -// Created: 2002/02/17 -// RCS-ID: $Id: mslu.h 42462 2006-10-26 19:06:51Z VZ $ -// Copyright: (c) 2002 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSLU_H_ -#define _WX_MSLU_H_ - -#include "wx/defs.h" - -// Returns true if we are running under Unicode emulation in Win9x environment. -// Workaround hacks take effect only if this condition is met -// (NB: this function is needed even if !wxUSE_UNICODE_MSLU) -WXDLLIMPEXP_BASE bool wxUsingUnicowsDll(); - -#endif // _WX_MSLU_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/msvcrt.h b/desmume/src/windows/wx/include/wx/msw/msvcrt.h deleted file mode 100644 index 913965de7..000000000 --- a/desmume/src/windows/wx/include/wx/msw/msvcrt.h +++ /dev/null @@ -1,69 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/msvcrt.h -// Purpose: macros to use some non-standard features of MS Visual C++ -// C run-time library -// Author: Vadim Zeitlin -// Modified by: -// Created: 31.01.1999 -// RCS-ID: $Id: msvcrt.h 42363 2006-10-24 23:19:12Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -// the goal of this file is to define wxCrtSetDbgFlag() macro which may be -// used like this: -// wxCrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF); -// to turn on memory leak checks for programs compiled with Microsoft Visual -// C++ (5.0+). The macro will expand to nothing under other compilers. - -#ifndef _MSW_MSVCRT_H_ -#define _MSW_MSVCRT_H_ - -// use debug CRT functions for memory leak detections in VC++ 5.0+ in debug -// builds -#undef wxUSE_VC_CRTDBG -#if defined(__WXDEBUG__) && defined(__VISUALC__) && (__VISUALC__ >= 1000) \ - && !defined(UNDER_CE) - // it doesn't combine well with wxWin own memory debugging methods - #if !wxUSE_GLOBAL_MEMORY_OPERATORS && !wxUSE_MEMORY_TRACING && !defined(__NO_VC_CRTDBG__) - #define wxUSE_VC_CRTDBG - #endif -#endif - -#ifdef wxUSE_VC_CRTDBG - // VC++ uses this macro as debug/release mode indicator - #ifndef _DEBUG - #define _DEBUG - #endif - - // Need to undef new if including crtdbg.h which may redefine new itself - #ifdef new - #undef new - #endif - - #include <stdlib.h> - #ifndef _CRTBLD - // Need when builded with pure MS SDK - #define _CRTBLD - #endif - - #include <crtdbg.h> - - #undef WXDEBUG_NEW - #define WXDEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) - - // this define works around a bug with inline declarations of new, see - // - // http://support.microsoft.com/support/kb/articles/Q140/8/58.asp - // - // for the details - #define new WXDEBUG_NEW - - #define wxCrtSetDbgFlag(flag) \ - _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | (flag)) -#else // !using VC CRT - #define wxCrtSetDbgFlag(flag) -#endif // wxUSE_VC_CRTDBG - -#endif // _MSW_MSVCRT_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/notebook.h b/desmume/src/windows/wx/include/wx/msw/notebook.h deleted file mode 100644 index 810bd8ae2..000000000 --- a/desmume/src/windows/wx/include/wx/msw/notebook.h +++ /dev/null @@ -1,254 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/notebook.h -// 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 41797 2006-10-09 12:10:01Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _NOTEBOOK_H -#define _NOTEBOOK_H - -#if wxUSE_NOTEBOOK - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/control.h" - -// ---------------------------------------------------------------------------- -// wxNotebook -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxNotebookPageInfo : public wxObject -{ -public : - wxNotebookPageInfo() { m_page = NULL; m_imageId = -1; m_selected = false; } - virtual ~wxNotebookPageInfo() { } - - void Create(wxNotebookPage *page, - const wxString& text, - bool selected, - int imageId) - { - m_page = page; - m_text = text; - m_selected = selected; - m_imageId = imageId; - } - - wxNotebookPage* GetPage() const { return m_page; } - wxString GetText() const { return m_text; } - bool GetSelected() const { return m_selected; } - int GetImageId() const { return m_imageId; } - -private: - wxNotebookPage *m_page; - wxString m_text; - bool m_selected; - int m_imageId; - - DECLARE_DYNAMIC_CLASS(wxNotebookPageInfo) -}; - - -WX_DECLARE_EXPORTED_LIST(wxNotebookPageInfo, wxNotebookPageInfoList ); - -class WXDLLEXPORT wxNotebook : public wxNotebookBase -{ -public: - // ctors - // ----- - // default for dynamic class - wxNotebook(); - // the same arguments as for wxControl (@@@ any special styles?) - wxNotebook(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxNotebookNameStr); - // Create() function - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxNotebookNameStr); - virtual ~wxNotebook(); - - // accessors - // --------- - // get number of pages in the dialog - virtual size_t GetPageCount() const; - - // set the currently selected page, return the index of the previously - // selected one (or -1 on error) - // NB: this function will _not_ generate wxEVT_NOTEBOOK_PAGE_xxx events - int SetSelection(size_t nPage); - // get the currently selected page - int GetSelection() const { return m_nSelection; } - - // changes selected page without sending events - int ChangeSelection(size_t nPage); - - // set/get the title of a page - bool SetPageText(size_t nPage, const wxString& strText); - wxString GetPageText(size_t nPage) const; - - // image list stuff: each page may have an image associated with it. All - // the images belong to an image list, so you have to - // 1) create an image list - // 2) associate it with the notebook - // 3) set for each page it's image - // associate image list with a control - void SetImageList(wxImageList* imageList); - - // sets/returns item's image index in the current image list - int GetPageImage(size_t nPage) const; - bool SetPageImage(size_t nPage, int nImage); - - // currently it's always 1 because wxGTK doesn't support multi-row - // tab controls - int GetRowCount() const; - - // 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); - - // operations - // ---------- - // remove all pages - bool DeleteAllPages(); - - // inserts a new page to the notebook (it will be deleted ny the notebook, - // don't delete it yourself). If bSelect, this page becomes active. - bool InsertPage(size_t nPage, - wxNotebookPage *pPage, - const wxString& strText, - bool bSelect = false, - int imageId = -1); - - void AddPageInfo( wxNotebookPageInfo* info ) { AddPage( info->GetPage() , info->GetText() , info->GetSelected() , info->GetImageId() ); } - const wxNotebookPageInfoList& GetPageInfos() const; - - // Windows-only at present. Also, you must use the wxNB_FIXEDWIDTH - // style. - void SetTabSize(const wxSize& sz); - - // hit test - virtual int HitTest(const wxPoint& pt, long *flags = NULL) const; - - // calculate the size of the notebook from the size of its page - virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; - - // callbacks - // --------- - void OnSize(wxSizeEvent& event); - void OnSelChange(wxNotebookEvent& event); - void OnNavigationKey(wxNavigationKeyEvent& event); - - // base class virtuals - // ------------------- - - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - virtual bool MSWOnScroll(int orientation, WXWORD nSBCode, - WXWORD pos, WXHWND control); - -#if wxUSE_CONSTRAINTS - virtual void SetConstraintSizes(bool recurse = true); - virtual bool DoPhase(int nPhase); -#endif // wxUSE_CONSTRAINTS - - // Attempts to get colour for UX theme page background - wxColour GetThemeBackgroundColour() const; - - // implementation only - // ------------------- - -#if wxUSE_UXTHEME - virtual bool SetBackgroundColour(const wxColour& colour) - { - if ( !wxNotebookBase::SetBackgroundColour(colour) ) - return false; - - UpdateBgBrush(); - - return true; - } - - // return the themed brush for painting our children - virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, WXHWND hWnd); - - // draw child background - virtual bool MSWPrintChild(WXHDC hDC, wxWindow *win); -#endif // wxUSE_UXTHEME - - // translate wxWin styles to the Windows ones - virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle = NULL) const; - -protected: - // common part of all ctors - void Init(); - - // hides the currently shown page and shows the given one (if not -1) and - // updates m_nSelection accordingly - void UpdateSelection(int selNew); - - // remove one page from the notebook, without deleting - virtual wxNotebookPage *DoRemovePage(size_t nPage); - - // get the page rectangle for the current notebook size - // - // returns empty rectangle if an error occurs, do test for it - wxRect GetPageSize() const; - - // set the size of the given page to fit in the notebook - void AdjustPageSize(wxNotebookPage *page); - -#if wxUSE_UXTHEME - // gets the bitmap of notebook background and returns a brush from it - WXHBRUSH QueryBgBitmap(); - - // creates the brush to be used for drawing the tab control background - void UpdateBgBrush(); - - // common part of QueryBgBitmap() and MSWPrintChild() - // - // if child == NULL, draw background for the entire notebook itself - bool DoDrawBackground(WXHDC hDC, wxWindow *child = NULL); -#endif // wxUSE_UXTHEME - - // these function are only used for reducing flicker on notebook resize and - // we don't need to do this for WinCE -#ifndef __WXWINCE__ - void OnEraseBackground(wxEraseEvent& event); - void OnPaint(wxPaintEvent& event); - - // true if we have already subclassed our updown control - bool m_hasSubclassedUpdown; -#endif // __WXWINCE__ - - // the current selection (-1 if none) - int m_nSelection; - - wxNotebookPageInfoList m_pageInfos; - -#if wxUSE_UXTHEME - // background brush used to paint the tab control - WXHBRUSH m_hbrBackground; -#endif // wxUSE_UXTHEME - - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxNotebook) - DECLARE_EVENT_TABLE() -}; - -#endif // wxUSE_NOTEBOOK - -#endif // _NOTEBOOK_H diff --git a/desmume/src/windows/wx/include/wx/msw/ole/access.h b/desmume/src/windows/wx/include/wx/msw/ole/access.h deleted file mode 100644 index 45e684a1a..000000000 --- a/desmume/src/windows/wx/include/wx/msw/ole/access.h +++ /dev/null @@ -1,68 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: ole/access.h -// Purpose: declaration of the wxAccessible class -// Author: Julian Smart -// Modified by: -// Created: 2003-02-12 -// RCS-ID: $Id: access.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 2003 Julian Smart -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ACCESS_H_ -#define _WX_ACCESS_H_ - -#if wxUSE_ACCESSIBILITY - -// ---------------------------------------------------------------------------- -// forward declarations -// ---------------------------------------------------------------------------- - -class wxIAccessible; -class WXDLLEXPORT wxWindow; - -// ---------------------------------------------------------------------------- -// macros -// ---------------------------------------------------------------------------- - -// ---------------------------------------------------------------------------- -// wxAccessible implements accessibility behaviour. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxAccessible : public wxAccessibleBase -{ -public: - wxAccessible(wxWindow *win = NULL); - virtual ~wxAccessible(); - -// Overridables - -// Accessors - - // Returns the wxIAccessible pointer - wxIAccessible* GetIAccessible() { return m_pIAccessible; } - - // Returns the IAccessible standard interface pointer - void* GetIAccessibleStd() ; - -// Operations - - // Sends an event when something changes in an accessible object. - static void NotifyEvent(int eventType, wxWindow* window, wxAccObject objectType, - int objectId); - -protected: - void Init(); - -private: - wxIAccessible * m_pIAccessible; // the pointer to COM interface - void* m_pIAccessibleStd; // the pointer to the standard COM interface, - // for default processing - - DECLARE_NO_COPY_CLASS(wxAccessible) -}; - -#endif //wxUSE_ACCESSIBILITY - -#endif //_WX_ACCESS_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/ole/activex.h b/desmume/src/windows/wx/include/wx/msw/ole/activex.h deleted file mode 100644 index 96fddfe0f..000000000 --- a/desmume/src/windows/wx/include/wx/msw/ole/activex.h +++ /dev/null @@ -1,221 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/ole/activex.h -// Purpose: wxActiveXContainer class -// Author: Ryan Norton <wxprojects@comcast.net> -// Modified by: -// Created: 8/18/05 -// RCS-ID: $Id: activex.h 41793 2006-10-09 09:32:08Z ABX $ -// Copyright: (c) Ryan Norton -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -// ============================================================================ -// Definitions -// ============================================================================ - -#ifndef _WX_MSW_OLE_ACTIVEXCONTAINER_H_ -#define _WX_MSW_OLE_ACTIVEXCONTAINER_H_ - -#if wxUSE_ACTIVEX - -//--------------------------------------------------------------------------- -// wx includes -//--------------------------------------------------------------------------- - -#include "wx/msw/ole/oleutils.h" // wxBasicString &c -#include "wx/msw/ole/uuid.h" -#include "wx/window.h" -#include "wx/variant.h" - -//--------------------------------------------------------------------------- -// MSW COM includes -//--------------------------------------------------------------------------- -#include <oleidl.h> -#include <olectl.h> - -#if !defined(__WXWINCE__) || defined(__WINCE_STANDARDSDK__) -#include <exdisp.h> -#endif - -#include <docobj.h> - -#ifndef STDMETHOD - #define STDMETHOD(funcname) virtual HRESULT wxSTDCALL funcname -#endif - -// -// These defines are from another ole header - but its not in the -// latest sdk. Also the ifndef DISPID_READYSTATE is here because at -// least on my machine with the latest sdk olectl.h defines these 3 -// -#ifndef DISPID_READYSTATE - #define DISPID_READYSTATE (-525) - #define DISPID_READYSTATECHANGE (-609) - #define DISPID_AMBIENT_TRANSFERPRIORITY (-728) -#endif - -#define DISPID_AMBIENT_OFFLINEIFNOTCONNECTED (-5501) -#define DISPID_AMBIENT_SILENT (-5502) - -#ifndef DISPID_AMBIENT_CODEPAGE - #define DISPID_AMBIENT_CODEPAGE (-725) - #define DISPID_AMBIENT_CHARSET (-727) -#endif - - -//--------------------------------------------------------------------------- -// -// wxActiveXContainer -// -//--------------------------------------------------------------------------- - -#define WX_DECLARE_AUTOOLE(wxAutoOleInterface, I) \ -class wxAutoOleInterface \ -{ \ - protected: \ - I *m_interface; \ -\ - public: \ - explicit wxAutoOleInterface(I *pInterface = NULL) : m_interface(pInterface) {} \ - wxAutoOleInterface(REFIID riid, IUnknown *pUnk) : m_interface(NULL) \ - { QueryInterface(riid, pUnk); } \ - wxAutoOleInterface(REFIID riid, IDispatch *pDispatch) : m_interface(NULL) \ - { QueryInterface(riid, pDispatch); } \ - wxAutoOleInterface(REFCLSID clsid, REFIID riid) : m_interface(NULL)\ - { CreateInstance(clsid, riid); }\ - wxAutoOleInterface(const wxAutoOleInterface& ti) : m_interface(NULL)\ - { operator = (ti); }\ -\ - wxAutoOleInterface& operator = (const wxAutoOleInterface& ti)\ - {\ - if (ti.m_interface)\ - ti.m_interface->AddRef();\ - Free();\ - m_interface = ti.m_interface;\ - return *this;\ - }\ -\ - wxAutoOleInterface& operator = (I *&ti)\ - {\ - Free();\ - m_interface = ti;\ - return *this;\ - }\ -\ - ~wxAutoOleInterface() { Free(); }\ -\ - inline void Free()\ - {\ - if (m_interface)\ - m_interface->Release();\ - m_interface = NULL;\ - }\ -\ - HRESULT QueryInterface(REFIID riid, IUnknown *pUnk)\ - {\ - Free();\ - wxASSERT(pUnk != NULL);\ - return pUnk->QueryInterface(riid, (void **) &m_interface);\ - }\ -\ - HRESULT CreateInstance(REFCLSID clsid, REFIID riid)\ - {\ - Free();\ - return CoCreateInstance(clsid, NULL, CLSCTX_ALL, riid, (void **) &m_interface);\ - }\ -\ - inline operator I *() const {return m_interface;}\ - inline I* operator ->() {return m_interface;}\ - inline I** GetRef() {return &m_interface;}\ - inline bool Ok() const { return IsOk(); }\ - inline bool IsOk() const {return m_interface != NULL;}\ -}; - -WX_DECLARE_AUTOOLE(wxAutoIDispatch, IDispatch) -WX_DECLARE_AUTOOLE(wxAutoIOleClientSite, IOleClientSite) -WX_DECLARE_AUTOOLE(wxAutoIUnknown, IUnknown) -WX_DECLARE_AUTOOLE(wxAutoIOleObject, IOleObject) -WX_DECLARE_AUTOOLE(wxAutoIOleInPlaceObject, IOleInPlaceObject) -WX_DECLARE_AUTOOLE(wxAutoIOleInPlaceActiveObject, IOleInPlaceActiveObject) -WX_DECLARE_AUTOOLE(wxAutoIOleDocumentView, IOleDocumentView) -WX_DECLARE_AUTOOLE(wxAutoIViewObject, IViewObject) - -class wxActiveXContainer : public wxWindow -{ -public: - wxActiveXContainer(wxWindow * parent, REFIID iid, IUnknown* pUnk); - virtual ~wxActiveXContainer(); - - void OnSize(wxSizeEvent&); - void OnPaint(wxPaintEvent&); - void OnSetFocus(wxFocusEvent&); - void OnKillFocus(wxFocusEvent&); - -protected: - friend class FrameSite; - friend class wxActiveXEvents; - - wxAutoIDispatch m_Dispatch; - wxAutoIOleClientSite m_clientSite; - wxAutoIUnknown m_ActiveX; - wxAutoIOleObject m_oleObject; - wxAutoIOleInPlaceObject m_oleInPlaceObject; - wxAutoIOleInPlaceActiveObject m_oleInPlaceActiveObject; - wxAutoIOleDocumentView m_docView; - wxAutoIViewObject m_viewObject; - HWND m_oleObjectHWND; - bool m_bAmbientUserMode; - DWORD m_docAdviseCookie; - wxWindow* m_realparent; - - void CreateActiveX(REFIID, IUnknown*); -}; - - -// Events -class wxActiveXEvent : public wxCommandEvent -{ -private: - friend class wxActiveXEvents; - wxVariant m_params; - DISPID m_dispid; - -public: - virtual wxEvent *Clone() const - { return new wxActiveXEvent(*this); } - - size_t ParamCount() const - { return m_params.GetCount(); } - - wxString ParamType(size_t idx) const - { - wxASSERT(idx < m_params.GetCount()); - return m_params[idx].GetType(); - } - - wxString ParamName(size_t idx) const - { - wxASSERT(idx < m_params.GetCount()); - return m_params[idx].GetName(); - } - - wxVariant& operator[] (size_t idx) - { - wxASSERT(idx < ParamCount()); - return m_params[idx]; - } - - DISPID GetDispatchId() const - { return m_dispid; } -}; - -#define wxACTIVEX_ID 14001 -DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_MEDIA, wxEVT_ACTIVEX, wxACTIVEX_ID) -typedef void (wxEvtHandler::*wxActiveXEventFunction)(wxActiveXEvent&); -#define EVT_ACTIVEX(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_ACTIVEX, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxActiveXEventFunction) & fn, (wxObject *) NULL ), -#define wxActiveXEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxActiveXEventFunction, &func) - -#endif // wxUSE_ACTIVEX - -#endif // _WX_MSW_OLE_ACTIVEXCONTAINER_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/ole/automtn.h b/desmume/src/windows/wx/include/wx/msw/ole/automtn.h deleted file mode 100644 index 51a7fd811..000000000 --- a/desmume/src/windows/wx/include/wx/msw/ole/automtn.h +++ /dev/null @@ -1,101 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: automtn.h -// Purpose: OLE automation utilities -// Author: Julian Smart -// Modified by: -// Created: 11/6/98 -// RCS-ID: $Id: automtn.h 45498 2007-04-16 13:03:05Z VZ $ -// Copyright: (c) 1998, Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_AUTOMTN_H_ -#define _WX_AUTOMTN_H_ - -#include "wx/defs.h" - -#if wxUSE_OLE_AUTOMATION - -#include "wx/object.h" -#include "wx/variant.h" - -typedef void WXIDISPATCH; -typedef unsigned short* WXBSTR; - -#ifdef GetObject -#undef GetObject -#endif - -/* - * wxAutomationObject - * Wraps up an IDispatch pointer and invocation; does variant conversion. - */ - -class WXDLLEXPORT wxAutomationObject: public wxObject -{ -public: - wxAutomationObject(WXIDISPATCH* dispatchPtr = NULL); - virtual ~wxAutomationObject(); - - // Set/get dispatch pointer - inline void SetDispatchPtr(WXIDISPATCH* dispatchPtr) { m_dispatchPtr = dispatchPtr; } - inline WXIDISPATCH* GetDispatchPtr() const { return m_dispatchPtr; } - - // Get a dispatch pointer from the current object associated - // with a class id, such as "Excel.Application" - bool GetInstance(const wxString& classId) const; - - // Get a dispatch pointer from a new instance of the the class - bool CreateInstance(const wxString& classId) const; - - // Low-level invocation function. Pass either an array of variants, - // or an array of pointers to variants. - bool Invoke(const wxString& member, int action, - wxVariant& retValue, int noArgs, wxVariant args[], const wxVariant* ptrArgs[] = 0) const; - - // Invoke a member function - wxVariant CallMethod(const wxString& method, int noArgs, wxVariant args[]); - wxVariant CallMethodArray(const wxString& method, int noArgs, const wxVariant **args); - - // Convenience function - wxVariant CallMethod(const wxString& method, - const wxVariant& arg1 = wxNullVariant, const wxVariant& arg2 = wxNullVariant, - const wxVariant& arg3 = wxNullVariant, const wxVariant& arg4 = wxNullVariant, - const wxVariant& arg5 = wxNullVariant, const wxVariant& arg6 = wxNullVariant); - - // Get/Put property - wxVariant GetProperty(const wxString& property, int noArgs = 0, wxVariant args[] = (wxVariant*) NULL) const; - wxVariant GetPropertyArray(const wxString& property, int noArgs, const wxVariant **args) const; - wxVariant GetProperty(const wxString& property, - const wxVariant& arg1, const wxVariant& arg2 = wxNullVariant, - const wxVariant& arg3 = wxNullVariant, const wxVariant& arg4 = wxNullVariant, - const wxVariant& arg5 = wxNullVariant, const wxVariant& arg6 = wxNullVariant); - - bool PutPropertyArray(const wxString& property, int noArgs, const wxVariant **args); - bool PutProperty(const wxString& property, int noArgs, wxVariant args[]) ; - bool PutProperty(const wxString& property, - const wxVariant& arg1, const wxVariant& arg2 = wxNullVariant, - const wxVariant& arg3 = wxNullVariant, const wxVariant& arg4 = wxNullVariant, - const wxVariant& arg5 = wxNullVariant, const wxVariant& arg6 = wxNullVariant); - - // Uses DISPATCH_PROPERTYGET - // and returns a dispatch pointer. The calling code should call Release - // on the pointer, though this could be implicit by constructing an wxAutomationObject - // with it and letting the destructor call Release. - WXIDISPATCH* GetDispatchProperty(const wxString& property, int noArgs, wxVariant args[]) const; - WXIDISPATCH* GetDispatchProperty(const wxString& property, int noArgs, const wxVariant **args) const; - - // A way of initialising another wxAutomationObject with a dispatch object, - // without having to deal with nasty IDispatch pointers. - bool GetObject(wxAutomationObject& obj, const wxString& property, int noArgs = 0, wxVariant args[] = (wxVariant*) NULL) const; - bool GetObject(wxAutomationObject& obj, const wxString& property, int noArgs, const wxVariant **args) const; - -public: - WXIDISPATCH* m_dispatchPtr; - - DECLARE_NO_COPY_CLASS(wxAutomationObject) -}; - -#endif // wxUSE_OLE_AUTOMATION - -#endif // _WX_AUTOMTN_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/ole/dataform.h b/desmume/src/windows/wx/include/wx/msw/ole/dataform.h deleted file mode 100644 index 733b1b967..000000000 --- a/desmume/src/windows/wx/include/wx/msw/ole/dataform.h +++ /dev/null @@ -1,68 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: msw/ole/dataform.h -// Purpose: declaration of the wxDataFormat class -// Author: Vadim Zeitlin -// Modified by: -// Created: 19.10.99 (extracted from msw/ole/dataobj.h) -// RCS-ID: $Id: dataform.h 28812 2004-08-16 12:45:46Z ABX $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_OLE_DATAFORM_H -#define _WX_MSW_OLE_DATAFORM_H - -// ---------------------------------------------------------------------------- -// wxDataFormat identifies the single format of data -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDataFormat -{ -public: - // the clipboard formats under Win32 are WORD's - typedef unsigned short NativeFormat; - - wxDataFormat(NativeFormat format = wxDF_INVALID) { m_format = format; } - wxDataFormat(const wxChar *format) { SetId(format); } - - wxDataFormat& operator=(NativeFormat format) - { m_format = format; return *this; } - wxDataFormat& operator=(const wxDataFormat& format) - { m_format = format.m_format; return *this; } - - // default copy ctor/assignment operators ok - - // comparison (must have both versions) - bool operator==(wxDataFormatId format) const - { return m_format == (NativeFormat)format; } - bool operator!=(wxDataFormatId format) const - { return m_format != (NativeFormat)format; } - bool operator==(const wxDataFormat& format) const - { return m_format == format.m_format; } - bool operator!=(const wxDataFormat& format) const - { return m_format != format.m_format; } - - // explicit and implicit conversions to NativeFormat which is one of - // standard data types (implicit conversion is useful for preserving the - // compatibility with old code) - NativeFormat GetFormatId() const { return m_format; } - operator NativeFormat() const { return m_format; } - - // this works with standard as well as custom ids - void SetType(NativeFormat format) { m_format = format; } - NativeFormat GetType() const { return m_format; } - - // string ids are used for custom types - this SetId() must be used for - // application-specific formats - wxString GetId() const; - void SetId(const wxChar *format); - - // returns true if the format is one of those defined in wxDataFormatId - bool IsStandard() const { return m_format > 0 && m_format < wxDF_PRIVATE; } - -private: - NativeFormat m_format; -}; - -#endif // _WX_MSW_OLE_DATAFORM_H - diff --git a/desmume/src/windows/wx/include/wx/msw/ole/dataobj.h b/desmume/src/windows/wx/include/wx/msw/ole/dataobj.h deleted file mode 100644 index ec2acdabb..000000000 --- a/desmume/src/windows/wx/include/wx/msw/ole/dataobj.h +++ /dev/null @@ -1,79 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: msw/ole/dataobj.h -// Purpose: declaration of the wxDataObject class -// Author: Vadim Zeitlin -// Modified by: -// Created: 10.05.98 -// RCS-ID: $Id: dataobj.h 37406 2006-02-09 03:45:14Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_OLE_DATAOBJ_H -#define _WX_MSW_OLE_DATAOBJ_H - -// ---------------------------------------------------------------------------- -// forward declarations -// ---------------------------------------------------------------------------- - -struct IDataObject; - -// ---------------------------------------------------------------------------- -// wxDataObject is a "smart" and polymorphic piece of data. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDataObject : public wxDataObjectBase -{ -public: - // ctor & dtor - wxDataObject(); - virtual ~wxDataObject(); - - // retrieve IDataObject interface (for other OLE related classes) - IDataObject *GetInterface() const { return m_pIDataObject; } - - // tell the object that it should be now owned by IDataObject - i.e. when - // it is deleted, it should delete us as well - void SetAutoDelete(); - - // return true if we support this format in "Get" direction - bool IsSupportedFormat(const wxDataFormat& format) const - { return wxDataObjectBase::IsSupported(format, Get); } - - // if this method returns false, this wxDataObject will be copied to - // the clipboard with its size prepended to it, which is compatible with - // older wx versions - // - // if returns true, then this wxDataObject will be copied to the clipboard - // without any additional information and ::HeapSize() function will be used - // to get the size of that data - virtual bool NeedsVerbatimData(const wxDataFormat& WXUNUSED(format)) const - { - // return false from here only for compatibility with earlier wx versions - return true; - } - - // function to return symbolic name of clipboard format (for debug messages) -#ifdef __WXDEBUG__ - static const wxChar *GetFormatName(wxDataFormat format); - - #define wxGetFormatName(format) wxDataObject::GetFormatName(format) -#else // !Debug - #define wxGetFormatName(format) _T("") -#endif // Debug/!Debug - // they need to be accessed from wxIDataObject, so made them public, - // or wxIDataObject friend -public: - virtual const void* GetSizeFromBuffer( const void* buffer, size_t* size, - const wxDataFormat& format ); - virtual void* SetSizeInBuffer( void* buffer, size_t size, - const wxDataFormat& format ); - virtual size_t GetBufferOffset( const wxDataFormat& format ); - -private: - IDataObject *m_pIDataObject; // pointer to the COM interface - - DECLARE_NO_COPY_CLASS(wxDataObject) -}; - -#endif //_WX_MSW_OLE_DATAOBJ_H diff --git a/desmume/src/windows/wx/include/wx/msw/ole/dataobj2.h b/desmume/src/windows/wx/include/wx/msw/ole/dataobj2.h deleted file mode 100644 index 89c2b2141..000000000 --- a/desmume/src/windows/wx/include/wx/msw/ole/dataobj2.h +++ /dev/null @@ -1,146 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/ole/dataobj2.h -// Purpose: second part of platform specific wxDataObject header - -// declarations of predefined wxDataObjectSimple-derived classes -// Author: Vadim Zeitlin -// Modified by: -// Created: 21.10.99 -// RCS-ID: $Id: dataobj2.h 40772 2006-08-23 13:38:45Z VZ $ -// Copyright: (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_OLE_DATAOBJ2_H -#define _WX_MSW_OLE_DATAOBJ2_H - -// ---------------------------------------------------------------------------- -// wxBitmapDataObject is a specialization of wxDataObject for bitmap data -// -// NB: in fact, under MSW we support CF_DIB (and not CF_BITMAP) clipboard -// format and we also provide wxBitmapDataObject2 for CF_BITMAP (which is -// rarely used). This is ugly, but I haven't found a solution for it yet. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxBitmapDataObject : public wxBitmapDataObjectBase -{ -public: - // ctors - wxBitmapDataObject(const wxBitmap& bitmap = wxNullBitmap) - : wxBitmapDataObjectBase(bitmap) - { - SetFormat(wxDF_DIB); - - m_data = NULL; - } - - // implement base class pure virtuals - virtual size_t GetDataSize() const; - virtual bool GetDataHere(void *buf) const; - virtual bool SetData(size_t len, const void *buf); - - virtual size_t GetDataSize(const wxDataFormat& WXUNUSED(format)) const - { return GetDataSize(); } - virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format), - void *buf) const - { return GetDataHere(buf); } - virtual bool SetData(const wxDataFormat& WXUNUSED(format), - size_t len, const void *buf) - { return SetData(len, buf); } - -private: - // the DIB data - void /* BITMAPINFO */ *m_data; - - DECLARE_NO_COPY_CLASS(wxBitmapDataObject) -}; - -// ---------------------------------------------------------------------------- -// wxBitmapDataObject2 - a data object for CF_BITMAP -// -// FIXME did I already mention it was ugly? -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxBitmapDataObject2 : public wxBitmapDataObjectBase -{ -public: - // ctors - wxBitmapDataObject2(const wxBitmap& bitmap = wxNullBitmap) - : wxBitmapDataObjectBase(bitmap) - { - } - - // implement base class pure virtuals - virtual size_t GetDataSize() const; - virtual bool GetDataHere(void *buf) const; - virtual bool SetData(size_t len, const void *buf); - - virtual size_t GetDataSize(const wxDataFormat& WXUNUSED(format)) const - { return GetDataSize(); } - virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format), - void *buf) const - { return GetDataHere(buf); } - virtual bool SetData(const wxDataFormat& WXUNUSED(format), - size_t len, const void *buf) - { return SetData(len, buf); } - -private: - DECLARE_NO_COPY_CLASS(wxBitmapDataObject2) -}; - -// ---------------------------------------------------------------------------- -// wxFileDataObject - data object for CF_HDROP -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFileDataObject : public wxFileDataObjectBase -{ -public: - wxFileDataObject() { } - - // implement base class pure virtuals - virtual bool SetData(size_t len, const void *buf); - virtual size_t GetDataSize() const; - virtual bool GetDataHere(void *pData) const; - virtual void AddFile(const wxString& file); - - virtual size_t GetDataSize(const wxDataFormat& WXUNUSED(format)) const - { return GetDataSize(); } - virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format), - void *buf) const - { return GetDataHere(buf); } - virtual bool SetData(const wxDataFormat& WXUNUSED(format), - size_t len, const void *buf) - { return SetData(len, buf); } - -private: - DECLARE_NO_COPY_CLASS(wxFileDataObject) -}; - -// ---------------------------------------------------------------------------- -// wxURLDataObject: data object for URLs -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxURLDataObject : public wxDataObjectComposite -{ -public: - // initialize with URL in ctor or use SetURL later - wxURLDataObject(const wxString& url = wxEmptyString); - - // return the URL as string - wxString GetURL() const; - - // Set a string as the URL in the data object - void SetURL(const wxString& url); - - // override to set m_textFormat - virtual bool SetData(const wxDataFormat& format, - size_t len, - const void *buf); - -private: - // last data object we got data in - wxDataObjectSimple *m_dataObjectLast; - - DECLARE_NO_COPY_CLASS(wxURLDataObject) -}; - -#endif // _WX_MSW_OLE_DATAOBJ2_H diff --git a/desmume/src/windows/wx/include/wx/msw/ole/dropsrc.h b/desmume/src/windows/wx/include/wx/msw/ole/dropsrc.h deleted file mode 100644 index f04eaba41..000000000 --- a/desmume/src/windows/wx/include/wx/msw/ole/dropsrc.h +++ /dev/null @@ -1,79 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: ole/dropsrc.h -// Purpose: declaration of the wxDropSource class -// Author: Vadim Zeitlin -// Modified by: -// Created: 06.03.98 -// RCS-ID: $Id: dropsrc.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_OLEDROPSRC_H -#define _WX_OLEDROPSRC_H - -#if wxUSE_DRAG_AND_DROP - -// ---------------------------------------------------------------------------- -// forward declarations -// ---------------------------------------------------------------------------- - -class wxIDropSource; -class WXDLLIMPEXP_FWD_CORE wxDataObject; -class WXDLLIMPEXP_FWD_CORE wxWindow; - -// ---------------------------------------------------------------------------- -// macros -// ---------------------------------------------------------------------------- - -// this macro may be used instead for wxDropSource ctor arguments: it will use -// the cursor 'name' from the resources under MSW, but will expand to -// something else under GTK. If you don't use it, you will have to use #ifdef -// in the application code. -#define wxDROP_ICON(name) wxCursor(_T(#name)) - -// ---------------------------------------------------------------------------- -// wxDropSource is used to start the drag-&-drop operation on associated -// wxDataObject object. It's responsible for giving UI feedback while dragging. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDropSource : public wxDropSourceBase -{ -public: - // ctors: if you use default ctor you must call SetData() later! - // - // NB: the "wxWindow *win" parameter is unused and is here only for wxGTK - // compatibility, as well as both icon parameters - wxDropSource(wxWindow *win = NULL, - const wxCursor &cursorCopy = wxNullCursor, - const wxCursor &cursorMove = wxNullCursor, - const wxCursor &cursorStop = wxNullCursor); - wxDropSource(wxDataObject& data, - wxWindow *win = NULL, - const wxCursor &cursorCopy = wxNullCursor, - const wxCursor &cursorMove = wxNullCursor, - const wxCursor &cursorStop = wxNullCursor); - - virtual ~wxDropSource(); - - // do it (call this in response to a mouse button press, for example) - // params: if bAllowMove is false, data can be only copied - virtual wxDragResult DoDragDrop(int flags = wxDrag_CopyOnly); - - // overridable: you may give some custom UI feedback during d&d operation - // in this function (it's called on each mouse move, so it shouldn't be - // too slow). Just return false if you want default feedback. - virtual bool GiveFeedback(wxDragResult effect); - -protected: - void Init(); - -private: - wxIDropSource *m_pIDropSource; // the pointer to COM interface - - DECLARE_NO_COPY_CLASS(wxDropSource) -}; - -#endif //wxUSE_DRAG_AND_DROP - -#endif //_WX_OLEDROPSRC_H diff --git a/desmume/src/windows/wx/include/wx/msw/ole/droptgt.h b/desmume/src/windows/wx/include/wx/msw/ole/droptgt.h deleted file mode 100644 index f96729d69..000000000 --- a/desmume/src/windows/wx/include/wx/msw/ole/droptgt.h +++ /dev/null @@ -1,72 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: ole/droptgt.h -// Purpose: declaration of the wxDropTarget class -// Author: Vadim Zeitlin -// Modified by: -// Created: 06.03.98 -// RCS-ID: $Id: droptgt.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_OLEDROPTGT_H -#define _WX_OLEDROPTGT_H - -#if wxUSE_DRAG_AND_DROP - -// ---------------------------------------------------------------------------- -// forward declarations -// ---------------------------------------------------------------------------- - -class wxIDropTarget; -struct IDataObject; - -// ---------------------------------------------------------------------------- -// An instance of the class wxDropTarget may be associated with any wxWindow -// derived object via SetDropTarget() function. If this is done, the virtual -// methods of wxDropTarget are called when something is dropped on the window. -// -// Note that wxDropTarget is an abstract base class (ABC) and you should derive -// your own class from it implementing pure virtual function in order to use it -// (all of them, including protected ones which are called by the class itself) -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDropTarget : public wxDropTargetBase -{ -public: - // ctor & dtor - wxDropTarget(wxDataObject *dataObject = NULL); - virtual ~wxDropTarget(); - - // normally called by wxWindow on window creation/destruction, but might be - // called `manually' as well. Register() returns true on success. - bool Register(WXHWND hwnd); - void Revoke(WXHWND hwnd); - - // provide default implementation for base class pure virtuals - virtual bool OnDrop(wxCoord x, wxCoord y); - virtual bool GetData(); - - // implementation only from now on - // ------------------------------- - - // do we accept this kind of data? - bool IsAcceptedData(IDataObject *pIDataSource) const; - - // give us the data source from IDropTarget::Drop() - this is later used by - // GetData() when it's called from inside OnData() - void SetDataSource(IDataObject *pIDataSource); - -private: - // helper used by IsAcceptedData() and GetData() - wxDataFormat GetSupportedFormat(IDataObject *pIDataSource) const; - - wxIDropTarget *m_pIDropTarget; // the pointer to our COM interface - IDataObject *m_pIDataSource; // the pointer to the source data object - - DECLARE_NO_COPY_CLASS(wxDropTarget) -}; - -#endif //wxUSE_DRAG_AND_DROP - -#endif //_WX_OLEDROPTGT_H diff --git a/desmume/src/windows/wx/include/wx/msw/ole/oleutils.h b/desmume/src/windows/wx/include/wx/msw/ole/oleutils.h deleted file mode 100644 index 94de2657b..000000000 --- a/desmume/src/windows/wx/include/wx/msw/ole/oleutils.h +++ /dev/null @@ -1,256 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: oleutils.h -// Purpose: OLE helper routines, OLE debugging support &c -// Author: Vadim Zeitlin -// Modified by: -// Created: 19.02.1998 -// RCS-ID: $Id: oleutils.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_OLEUTILS_H -#define _WX_OLEUTILS_H - -#include "wx/defs.h" - -#if wxUSE_OLE - -// ole2.h includes windows.h, so include wrapwin.h first -#include "wx/msw/wrapwin.h" -// get IUnknown, REFIID &c -#include <ole2.h> -#include "wx/intl.h" -#include "wx/log.h" - -// ============================================================================ -// General purpose functions and macros -// ============================================================================ - -// ---------------------------------------------------------------------------- -// initialize/cleanup OLE -// ---------------------------------------------------------------------------- - -// call OleInitialize() or CoInitialize[Ex]() depending on the platform -// -// return true if ok, false otherwise -inline bool wxOleInitialize() -{ - // we need to initialize OLE library -#ifdef __WXWINCE__ - if ( FAILED(::CoInitializeEx(NULL, COINIT_MULTITHREADED)) ) -#else - if ( FAILED(::OleInitialize(NULL)) ) -#endif - { - wxLogError(_("Cannot initialize OLE")); - - return false; - } - - return true; -} - -inline void wxOleUninitialize() -{ -#ifdef __WXWINCE__ - ::CoUninitialize(); -#else - ::OleUninitialize(); -#endif -} - -// ---------------------------------------------------------------------------- -// misc helper functions/macros -// ---------------------------------------------------------------------------- - -// release the interface pointer (if !NULL) -inline void ReleaseInterface(IUnknown *pIUnk) -{ - if ( pIUnk != NULL ) - pIUnk->Release(); -} - -// release the interface pointer (if !NULL) and make it NULL -#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); - -// ============================================================================ -// IUnknown implementation helpers -// ============================================================================ - -/* - The most dumb implementation of IUnknown methods. We don't support - aggregation nor containment, but for 99% of cases this simple - implementation is quite enough. - - Usage is trivial: here is all you should have - 1) DECLARE_IUNKNOWN_METHODS in your (IUnknown derived!) class declaration - 2) BEGIN/END_IID_TABLE with ADD_IID in between for all interfaces you - support (at least all for which you intent to return 'this' from QI, - i.e. you should derive from IFoo if you have ADD_IID(Foo)) somewhere else - 3) IMPLEMENT_IUNKNOWN_METHODS somewhere also - - These macros are quite simple: AddRef and Release are trivial and QI does - lookup in a static member array of IIDs and returns 'this' if it founds - the requested interface in it or E_NOINTERFACE if not. - */ - -/* - wxAutoULong: this class is used for automatically initalising m_cRef to 0 -*/ -class wxAutoULong -{ -public: - wxAutoULong(ULONG value = 0) : m_Value(value) { } - - operator ULONG&() { return m_Value; } - ULONG& operator=(ULONG value) { m_Value = value; return m_Value; } - - wxAutoULong& operator++() { ++m_Value; return *this; } - const wxAutoULong operator++( int ) { wxAutoULong temp = *this; ++m_Value; return temp; } - - wxAutoULong& operator--() { --m_Value; return *this; } - const wxAutoULong operator--( int ) { wxAutoULong temp = *this; --m_Value; return temp; } - -private: - ULONG m_Value; -}; - -// declare the methods and the member variable containing reference count -// you must also define the ms_aIids array somewhere with BEGIN_IID_TABLE -// and friends (see below) - -#define DECLARE_IUNKNOWN_METHODS \ - public: \ - STDMETHODIMP QueryInterface(REFIID, void **); \ - STDMETHODIMP_(ULONG) AddRef(); \ - STDMETHODIMP_(ULONG) Release(); \ - private: \ - static const IID *ms_aIids[]; \ - wxAutoULong m_cRef - -// macros for declaring supported interfaces -// NB: you should write ADD_INTERFACE(Foo) and not ADD_INTERFACE(IID_IFoo)! -#define BEGIN_IID_TABLE(cname) const IID *cname::ms_aIids[] = { -#define ADD_IID(iid) &IID_I##iid, -#define END_IID_TABLE } - -// implementation is as straightforward as possible -// Parameter: classname - the name of the class -#define IMPLEMENT_IUNKNOWN_METHODS(classname) \ - STDMETHODIMP classname::QueryInterface(REFIID riid, void **ppv) \ - { \ - wxLogQueryInterface(_T(#classname), riid); \ - \ - if ( IsIidFromList(riid, ms_aIids, WXSIZEOF(ms_aIids)) ) { \ - *ppv = this; \ - AddRef(); \ - \ - return S_OK; \ - } \ - else { \ - *ppv = NULL; \ - \ - return (HRESULT) E_NOINTERFACE; \ - } \ - } \ - \ - STDMETHODIMP_(ULONG) classname::AddRef() \ - { \ - wxLogAddRef(_T(#classname), m_cRef); \ - \ - return ++m_cRef; \ - } \ - \ - STDMETHODIMP_(ULONG) classname::Release() \ - { \ - wxLogRelease(_T(#classname), m_cRef); \ - \ - if ( --m_cRef == wxAutoULong(0) ) { \ - delete this; \ - return 0; \ - } \ - else \ - return m_cRef; \ - } - -// ============================================================================ -// Debugging support -// ============================================================================ - -// VZ: I don't know it's not done for compilers other than VC++ but I leave it -// as is. Please note, though, that tracing OLE interface calls may be -// incredibly useful when debugging OLE programs. -#if defined(__WXDEBUG__) && ( ( defined(__VISUALC__) && (__VISUALC__ >= 1000) ) || defined(__MWERKS__) ) -// ---------------------------------------------------------------------------- -// All OLE specific log functions have DebugTrace level (as LogTrace) -// ---------------------------------------------------------------------------- - -// tries to translate riid into a symbolic name, if possible -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); - -#else //!__WXDEBUG__ - #define wxLogQueryInterface(szInterface, riid) - #define wxLogAddRef(szInterface, cRef) - #define wxLogRelease(szInterface, cRef) -#endif //__WXDEBUG__ - -// wrapper around BSTR type (by Vadim Zeitlin) - -class WXDLLEXPORT wxBasicString -{ -public: - // ctors & dtor - wxBasicString(const char *sz); - wxBasicString(const wxString& str); - ~wxBasicString(); - - void Init(const char* sz); - - // accessors - // just get the string - operator BSTR() const { return m_wzBuf; } - // retrieve a copy of our string - caller must SysFreeString() it later! - BSTR Get() const { return SysAllocString(m_wzBuf); } - -private: - // @@@ not implemented (but should be) - wxBasicString(const wxBasicString&); - wxBasicString& operator=(const wxBasicString&); - - OLECHAR *m_wzBuf; // actual string -}; - -#if wxUSE_VARIANT -// Convert variants -class WXDLLIMPEXP_FWD_BASE wxVariant; - -WXDLLEXPORT bool wxConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant); -WXDLLEXPORT bool wxConvertOleToVariant(const VARIANTARG& oleVariant, wxVariant& variant); -#endif // wxUSE_VARIANT - -// Convert string to Unicode -WXDLLEXPORT BSTR wxConvertStringToOle(const wxString& str); - -// Convert string from BSTR to wxString -WXDLLEXPORT wxString wxConvertStringFromOle(BSTR bStr); - -#else // !wxUSE_OLE - -// ---------------------------------------------------------------------------- -// stub functions to avoid #if wxUSE_OLE in the main code -// ---------------------------------------------------------------------------- - -inline bool wxOleInitialize() { return false; } -inline void wxOleUninitialize() { } - -#endif // wxUSE_OLE/!wxUSE_OLE - -#endif //_WX_OLEUTILS_H diff --git a/desmume/src/windows/wx/include/wx/msw/ole/uuid.h b/desmume/src/windows/wx/include/wx/msw/ole/uuid.h deleted file mode 100644 index 6a266d71b..000000000 --- a/desmume/src/windows/wx/include/wx/msw/ole/uuid.h +++ /dev/null @@ -1,92 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: ole/uuid.h -// Purpose: encapsulates an UUID with some added helper functions -// Author: Vadim Zeitlin -// Modified by: -// Created: 11.07.97 -// RCS-ID: $Id: uuid.h 55113 2008-08-18 11:30:10Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -// -// Notes: you should link your project with RPCRT4.LIB! -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_OLEUUID_H -#define _WX_OLEUUID_H - -#include "wx/wxchar.h" -// ------------------------------------------------------------------ -// UUID (Universally Unique IDentifier) definition -// ------------------------------------------------------------------ - -// ----- taken from RPC.H -#ifndef UUID_DEFINED // in some cases RPC.H will be already - #ifdef __WIN32__ // included, so avoid redefinition - typedef struct - { - unsigned long Data1; - unsigned short Data2; - unsigned short Data3; - unsigned char Data4[8]; - } UUID; // UUID = GUID = CLSID = LIBID = IID - #endif // WIN32 -#endif // UUID_DEFINED - -#ifndef GUID_DEFINED - typedef UUID GUID; - #define UUID_DEFINED // prevent redefinition -#endif // GUID_DEFINED - -typedef unsigned char uchar; - -// ------------------------------------------------------------------ -// a class to store UUID and it's string representation -// ------------------------------------------------------------------ - -// uses RPC functions to create/convert Universally Unique Identifiers -class WXDLLEXPORT Uuid -{ -private: - UUID m_uuid; - wxUChar *m_pszUuid; // this string is alloc'd and freed by RPC - wxChar *m_pszCForm; // this string is allocated in Set/Create - - void UuidToCForm(); - - // function used to set initial state by all ctors - void Init() { m_pszUuid = NULL; m_pszCForm = NULL; } - -public: - // ctors & dtor - Uuid() { Init(); } - Uuid(const wxChar *pc) { Init(); Set(pc); } - Uuid(const UUID &uuid) { Init(); Set(uuid); } - ~Uuid(); - - // copy ctor and assignment operator needed for this class - Uuid(const Uuid& uuid); - Uuid& operator=(const Uuid& uuid); - - // create a brand new UUID - void Create(); - - // set value of UUID - bool Set(const wxChar *pc); // from a string, returns true if ok - void Set(const UUID& uuid); // from another UUID (never fails) - -#if wxABI_VERSION >= 20809 - // comparison operators - bool operator==(const Uuid& uuid) const; - bool operator!=(const Uuid& uuid) const; -#endif // wxABI_VERSION >= 2.8.9 - - // accessors - operator const UUID*() const { return &m_uuid; } - operator const wxChar*() const { return (wxChar *)(m_pszUuid); } - - // return string representation of the UUID in the C form - // (as in DEFINE_GUID macro) - const wxChar *CForm() const { return m_pszCForm; } -}; - -#endif //_WX_OLEUUID_H diff --git a/desmume/src/windows/wx/include/wx/msw/palette.h b/desmume/src/windows/wx/include/wx/msw/palette.h deleted file mode 100644 index 25aad71a5..000000000 --- a/desmume/src/windows/wx/include/wx/msw/palette.h +++ /dev/null @@ -1,58 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/palette.h -// Purpose: wxPalette class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: palette.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PALETTE_H_ -#define _WX_PALETTE_H_ - -#include "wx/gdiobj.h" - -class WXDLLIMPEXP_FWD_CORE wxPalette; - -class WXDLLEXPORT wxPaletteRefData: public wxGDIRefData -{ - friend class WXDLLIMPEXP_FWD_CORE wxPalette; -public: - wxPaletteRefData(void); - virtual ~wxPaletteRefData(void); -protected: - WXHPALETTE m_hPalette; -}; - -#define M_PALETTEDATA ((wxPaletteRefData *)m_refData) - -class WXDLLEXPORT wxPalette: public wxPaletteBase -{ -public: - wxPalette(); - wxPalette(int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue); - virtual ~wxPalette(void); - bool Create(int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue); - - int GetPixel(unsigned char red, unsigned char green, unsigned char blue) const; - bool GetRGB(int pixel, unsigned char *red, unsigned char *green, unsigned char *blue) const; - - virtual int GetColoursCount() const; - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk(void) const { return (m_refData != NULL) ; } - - virtual bool FreeResource(bool force = false); - - // implemetation - inline WXHPALETTE GetHPALETTE(void) const { return (M_PALETTEDATA ? M_PALETTEDATA->m_hPalette : 0); } - void SetHPALETTE(WXHPALETTE pal); - -private: - DECLARE_DYNAMIC_CLASS(wxPalette) -}; - -#endif - // _WX_PALETTE_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/pbrush.cur b/desmume/src/windows/wx/include/wx/msw/pbrush.cur deleted file mode 100644 index 299016a315125c9f080c2dadf022e67a66a9d61d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmaKmu?>JQ3<S?G038JtB_$h#Az&Ud8iOH>4MaqWl#kANzpTX2AdDk)49o&OFc}uH z7-HwqcfHMDRrPOjx2=$~pOEl5_rZ|ppOpAa%H3CFJCp+7tWFfwqg6daoog@O&ypMb Cq;k*z diff --git a/desmume/src/windows/wx/include/wx/msw/pen.h b/desmume/src/windows/wx/include/wx/msw/pen.h deleted file mode 100644 index e5da34b8c..000000000 --- a/desmume/src/windows/wx/include/wx/msw/pen.h +++ /dev/null @@ -1,132 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/pen.h -// Purpose: wxPen class -// Author: Julian Smart -// Modified by: Vadim Zeitlin: fixed operator=(), ==(), !=() -// Created: 01/02/97 -// RCS-ID: $Id: pen.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PEN_H_ -#define _WX_PEN_H_ - -#include "wx/gdiobj.h" -#include "wx/bitmap.h" -#include "wx/colour.h" - -typedef WXDWORD wxMSWDash; - -class WXDLLIMPEXP_FWD_CORE wxPen; - -// VZ: this class should be made private -class WXDLLEXPORT wxPenRefData : public wxGDIRefData -{ -public: - wxPenRefData(); - wxPenRefData(const wxPenRefData& data); - virtual ~wxPenRefData(); - - bool operator==(const wxPenRefData& data) const - { - // we intentionally don't compare m_hPen fields here - return m_style == data.m_style && - m_width == data.m_width && - m_join == data.m_join && - m_cap == data.m_cap && - m_colour == data.m_colour && - (m_style != wxSTIPPLE || m_stipple.IsSameAs(data.m_stipple)) && - (m_style != wxUSER_DASH || - (m_nbDash == data.m_nbDash && - memcmp(m_dash, data.m_dash, m_nbDash*sizeof(wxDash)) == 0)); - } - -protected: - int m_width; - int m_style; - int m_join; - int m_cap; - wxBitmap m_stipple; - int m_nbDash; - wxDash * m_dash; - wxColour m_colour; - WXHPEN m_hPen; - -private: - friend class WXDLLIMPEXP_FWD_CORE wxPen; - - // Cannot use - // DECLARE_NO_COPY_CLASS(wxPenRefData) - // because copy constructor is explicitly declared above; - // but no copy assignment operator is defined, so declare - // it private to prevent the compiler from defining it: - wxPenRefData& operator=(const wxPenRefData&); -}; - -#define M_PENDATA ((wxPenRefData *)m_refData) -#define wxPENDATA(x) ((wxPenRefData *)(x).m_refData) - -// ---------------------------------------------------------------------------- -// Pen -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPen : public wxGDIObject -{ -public: - wxPen(); - wxPen(const wxColour& col, int width = 1, int style = wxSOLID); - wxPen(const wxBitmap& stipple, int width); - virtual ~wxPen(); - - bool operator==(const wxPen& pen) const - { - const wxPenRefData *penData = (wxPenRefData *)pen.m_refData; - - // an invalid pen is only equal to another invalid pen - return m_refData ? penData && *M_PENDATA == *penData : !penData; - } - - bool operator!=(const wxPen& pen) const { return !(*this == pen); } - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const { return (m_refData != NULL); } - - // Override in order to recreate the pen - void SetColour(const wxColour& col); - void SetColour(unsigned char r, unsigned char g, unsigned char b); - - void SetWidth(int width); - void SetStyle(int style); - void SetStipple(const wxBitmap& stipple); - void SetDashes(int nb_dashes, const wxDash *dash); - void SetJoin(int join); - void SetCap(int cap); - - wxColour& GetColour() const { return (M_PENDATA ? M_PENDATA->m_colour : wxNullColour); } - int GetWidth() const { return (M_PENDATA ? M_PENDATA->m_width : 0); } - int GetStyle() const { return (M_PENDATA ? M_PENDATA->m_style : 0); } - int GetJoin() const { return (M_PENDATA ? M_PENDATA->m_join : 0); } - int GetCap() const { return (M_PENDATA ? M_PENDATA->m_cap : 0); } - int GetDashes(wxDash **ptr) const - { - *ptr = (M_PENDATA ? (wxDash*)M_PENDATA->m_dash : (wxDash*) NULL); - return (M_PENDATA ? M_PENDATA->m_nbDash : 0); - } - wxDash* GetDash() const { return (M_PENDATA ? (wxDash*)M_PENDATA->m_dash : (wxDash*)NULL); } - inline int GetDashCount() const { return (M_PENDATA ? M_PENDATA->m_nbDash : 0); } - - inline wxBitmap *GetStipple() const { return (M_PENDATA ? (& M_PENDATA->m_stipple) : (wxBitmap*) NULL); } - - // Internal - bool RealizeResource(); - bool FreeResource(bool force = false); - WXHANDLE GetResourceHandle() const; - bool IsFree() const; - void Unshare(); - -private: - DECLARE_DYNAMIC_CLASS(wxPen) -}; - -#endif // _WX_PEN_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/pencil.cur b/desmume/src/windows/wx/include/wx/msw/pencil.cur deleted file mode 100644 index afa760257c49635e1e1485d8935f6d897d069098..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmb8pF%E(-6vpwdkN^uYA;y6PMn?yBIF7ea;@~wr3P<1w9>LMU@cECJu;{>Rey@G) zYg#E%P+f~$=n$lxq&?VDhrsy6cbbbO+g^&5tBn3FO5{k+Qrz+8jbg+R4SqHZ9L&KV fR>zea7xWl#KiQAgepdEtV^68=7=IgRbPM|pAJ%+) diff --git a/desmume/src/windows/wx/include/wx/msw/pntleft.cur b/desmume/src/windows/wx/include/wx/msw/pntleft.cur deleted file mode 100644 index e7192aab6da74893eab5c7df99cee017f6e6764e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcma)$yA8rX5JcZWZ~;PgM9Ps7x&u>+Q$i}h5)HWoBnqGgIv{k!c;GCV%-+?T{b;os zSP@7G>y|3O4mcXGIGN!5#aQw%sibL`?@AgfuJ6QN9S3tZ7qd}UOHELpi1UyBFYIAS cyj18Rikls;)sB37b2n|S@k4y7U-B~F3}KpfZvX%Q diff --git a/desmume/src/windows/wx/include/wx/msw/pntright.cur b/desmume/src/windows/wx/include/wx/msw/pntright.cur deleted file mode 100644 index 565447b03ce6794a2b117749ed87d17ce104b4f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmaiuF$%(9428egQltoOj<%ztNAPAk2yTv^NAUt4;Xgvb#X)>NwWT=y315<zgb<hz zv@I;DSqChDm2r!W3H#Uj^b=#0G>S|$^?XJ}Ie$^>VfN-^j^;)sJ<CQrNSRCjWB-t~ dgEy|~bm`EU579Gd3il&HaZhZeCVO*Ocmu`Yd9VNg diff --git a/desmume/src/windows/wx/include/wx/msw/popupwin.h b/desmume/src/windows/wx/include/wx/msw/popupwin.h deleted file mode 100644 index 646cb5ca3..000000000 --- a/desmume/src/windows/wx/include/wx/msw/popupwin.h +++ /dev/null @@ -1,45 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/popupwin.h -// Purpose: wxPopupWindow class for wxMSW -// Author: Vadim Zeitlin -// Modified by: -// Created: 06.01.01 -// RCS-ID: $Id: popupwin.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_POPUPWIN_H_ -#define _WX_MSW_POPUPWIN_H_ - -// ---------------------------------------------------------------------------- -// wxPopupWindow -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPopupWindow : public wxPopupWindowBase -{ -public: - wxPopupWindow() { } - - wxPopupWindow(wxWindow *parent, int flags = wxBORDER_NONE) - { (void)Create(parent, flags); } - - bool Create(wxWindow *parent, int flags = wxBORDER_NONE); - - virtual bool Show(bool show = true); - - // return the style to be used for the popup windows - virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle) const; - - // get the HWND to be used as parent of this window with CreateWindow() - virtual WXHWND MSWGetParent() const; - -protected: - // popups handle the position like wxTopLevelWindow, not wxWindow - virtual void DoGetPosition(int *x, int *y) const; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxPopupWindow) -}; - -#endif // _WX_MSW_POPUPWIN_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/printdlg.h b/desmume/src/windows/wx/include/wx/msw/printdlg.h deleted file mode 100644 index 581a9d7c1..000000000 --- a/desmume/src/windows/wx/include/wx/msw/printdlg.h +++ /dev/null @@ -1,124 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: printdlg.h -// Purpose: wxPrintDialog, wxPageSetupDialog classes -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: printdlg.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PRINTDLG_H_ -#define _WX_PRINTDLG_H_ - -#if wxUSE_PRINTING_ARCHITECTURE - -#include "wx/dialog.h" -#include "wx/cmndata.h" -#include "wx/prntbase.h" -#include "wx/printdlg.h" - -class WXDLLIMPEXP_FWD_CORE wxDC; - -//---------------------------------------------------------------------------- -// wxWindowsPrintNativeData -//---------------------------------------------------------------------------- - -class WXDLLEXPORT wxWindowsPrintNativeData: public wxPrintNativeDataBase -{ -public: - wxWindowsPrintNativeData(); - virtual ~wxWindowsPrintNativeData(); - - virtual bool TransferTo( wxPrintData &data ); - virtual bool TransferFrom( const wxPrintData &data ); - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const; - - void* GetDevMode() const { return m_devMode; } - void SetDevMode(void* data) { m_devMode = data; } - void* GetDevNames() const { return m_devNames; } - void SetDevNames(void* data) { m_devNames = data; } - -private: - void* m_devMode; - void* m_devNames; - - short m_customWindowsPaperId; - -private: - DECLARE_DYNAMIC_CLASS(wxWindowsPrintNativeData) -}; - -// --------------------------------------------------------------------------- -// wxWindowsPrintDialog: the MSW dialog for printing -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxWindowsPrintDialog : public wxPrintDialogBase -{ -public: - wxWindowsPrintDialog(wxWindow *parent, wxPrintDialogData* data = NULL); - wxWindowsPrintDialog(wxWindow *parent, wxPrintData* data); - virtual ~wxWindowsPrintDialog(); - - bool Create(wxWindow *parent, wxPrintDialogData* data = NULL); - virtual int ShowModal(); - - wxPrintDialogData& GetPrintDialogData() { return m_printDialogData; } - wxPrintData& GetPrintData() { return m_printDialogData.GetPrintData(); } - - virtual wxDC *GetPrintDC(); - -private: - wxPrintDialogData m_printDialogData; - wxPrinterDC* m_printerDC; - bool m_destroyDC; - wxWindow* m_dialogParent; - -private: - bool ConvertToNative( wxPrintDialogData &data ); - bool ConvertFromNative( wxPrintDialogData &data ); - - // holds MSW handle - void* m_printDlg; - -private: - DECLARE_NO_COPY_CLASS(wxWindowsPrintDialog) - DECLARE_CLASS(wxWindowsPrintDialog) -}; - -// --------------------------------------------------------------------------- -// wxWindowsPageSetupDialog: the MSW page setup dialog -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxWindowsPageSetupDialog: public wxPageSetupDialogBase -{ -public: - wxWindowsPageSetupDialog(); - wxWindowsPageSetupDialog(wxWindow *parent, wxPageSetupDialogData *data = NULL); - virtual ~wxWindowsPageSetupDialog(); - - bool Create(wxWindow *parent, wxPageSetupDialogData *data = NULL); - virtual int ShowModal(); - bool ConvertToNative( wxPageSetupDialogData &data ); - bool ConvertFromNative( wxPageSetupDialogData &data ); - - virtual wxPageSetupData& GetPageSetupDialogData() { return m_pageSetupData; } - -private: - wxPageSetupDialogData m_pageSetupData; - wxWindow* m_dialogParent; - - // holds MSW handle - void* m_pageDlg; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxWindowsPageSetupDialog) -}; - -#endif // wxUSE_PRINTING_ARCHITECTURE - -#endif - // _WX_PRINTDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/printwin.h b/desmume/src/windows/wx/include/wx/msw/printwin.h deleted file mode 100644 index 8179f1b01..000000000 --- a/desmume/src/windows/wx/include/wx/msw/printwin.h +++ /dev/null @@ -1,66 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: printwin.h -// Purpose: wxWindowsPrinter, wxWindowsPrintPreview classes -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: printwin.h 42522 2006-10-27 13:07:40Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PRINTWIN_H_ -#define _WX_PRINTWIN_H_ - -#include "wx/prntbase.h" - -// --------------------------------------------------------------------------- -// Represents the printer: manages printing a wxPrintout object -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxWindowsPrinter : public wxPrinterBase -{ - DECLARE_DYNAMIC_CLASS(wxWindowsPrinter) - -public: - wxWindowsPrinter(wxPrintDialogData *data = NULL); - virtual ~wxWindowsPrinter(); - - virtual bool Print(wxWindow *parent, - wxPrintout *printout, - bool prompt = true); - - virtual wxDC *PrintDialog(wxWindow *parent); - virtual bool Setup(wxWindow *parent); - -private: - WXFARPROC m_lpAbortProc; - - DECLARE_NO_COPY_CLASS(wxWindowsPrinter) -}; - -// --------------------------------------------------------------------------- -// wxPrintPreview: programmer creates an object of this class to preview a -// wxPrintout. -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxWindowsPrintPreview : public wxPrintPreviewBase -{ -public: - wxWindowsPrintPreview(wxPrintout *printout, - wxPrintout *printoutForPrinting = NULL, - wxPrintDialogData *data = NULL); - wxWindowsPrintPreview(wxPrintout *printout, - wxPrintout *printoutForPrinting, - wxPrintData *data); - virtual ~wxWindowsPrintPreview(); - - virtual bool Print(bool interactive); - virtual void DetermineScaling(); - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxWindowsPrintPreview) -}; - -#endif -// _WX_PRINTWIN_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/private.h b/desmume/src/windows/wx/include/wx/msw/private.h deleted file mode 100644 index cf3c0b9a0..000000000 --- a/desmume/src/windows/wx/include/wx/msw/private.h +++ /dev/null @@ -1,953 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/private.h -// Purpose: Private declarations: as this header is only included by -// wxWidgets itself, it may contain identifiers which don't start -// with "wx". -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: private.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PRIVATE_H_ -#define _WX_PRIVATE_H_ - -#include "wx/msw/wrapwin.h" - -#ifdef __WXMICROWIN__ - // Extra prototypes and symbols not defined by MicroWindows - #include "wx/msw/microwin.h" -#endif - -#include "wx/log.h" - -class WXDLLIMPEXP_FWD_CORE wxFont; -class WXDLLIMPEXP_FWD_CORE wxWindow; -class WXDLLIMPEXP_FWD_CORE wxWindowBase; - -// --------------------------------------------------------------------------- -// private constants -// --------------------------------------------------------------------------- - -// 260 was taken from windef.h -#ifndef MAX_PATH - #define MAX_PATH 260 -#endif - -// --------------------------------------------------------------------------- -// standard icons from the resources -// --------------------------------------------------------------------------- - -#if wxUSE_GUI - -extern WXDLLEXPORT_DATA(HICON) wxSTD_FRAME_ICON; -extern WXDLLEXPORT_DATA(HICON) wxSTD_MDIPARENTFRAME_ICON; -extern WXDLLEXPORT_DATA(HICON) wxSTD_MDICHILDFRAME_ICON; -extern WXDLLEXPORT_DATA(HICON) wxDEFAULT_FRAME_ICON; -extern WXDLLEXPORT_DATA(HICON) wxDEFAULT_MDIPARENTFRAME_ICON; -extern WXDLLEXPORT_DATA(HICON) wxDEFAULT_MDICHILDFRAME_ICON; -extern WXDLLEXPORT_DATA(HFONT) wxSTATUS_LINE_FONT; - -#endif // wxUSE_GUI - -// --------------------------------------------------------------------------- -// global data -// --------------------------------------------------------------------------- - -extern WXDLLIMPEXP_DATA_BASE(HINSTANCE) wxhInstance; - -// --------------------------------------------------------------------------- -// define things missing from some compilers' headers -// --------------------------------------------------------------------------- - -#if defined(__WXWINCE__) || (defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS) -#ifndef ZeroMemory - inline void ZeroMemory(void *buf, size_t len) { memset(buf, 0, len); } -#endif -#endif // old mingw32 - -// this defines a CASTWNDPROC macro which casts a pointer to the type of a -// window proc -#if defined(STRICT) || defined(__GNUC__) - typedef WNDPROC WndProcCast; -#else - typedef FARPROC WndProcCast; -#endif - - -#define CASTWNDPROC (WndProcCast) - - - -// --------------------------------------------------------------------------- -// some stuff for old Windows versions (FIXME: what does it do here??) -// --------------------------------------------------------------------------- - -#if !defined(APIENTRY) // NT defines APIENTRY, 3.x not - #define APIENTRY FAR PASCAL -#endif - -#ifdef __WIN32__ - #define _EXPORT -#else - #define _EXPORT _export -#endif - -#ifndef __WIN32__ - typedef signed short int SHORT; -#endif - -#if !defined(__WIN32__) // 3.x uses FARPROC for dialogs -#ifndef STRICT - #define DLGPROC FARPROC -#endif -#endif - -/* - * Decide what window classes we're going to use - * for this combination of CTl3D/FAFA settings - */ - -#define STATIC_CLASS wxT("STATIC") -#define STATIC_FLAGS (SS_LEFT|WS_CHILD|WS_VISIBLE) -#define CHECK_CLASS wxT("BUTTON") -#define CHECK_FLAGS (BS_AUTOCHECKBOX|WS_TABSTOP|WS_CHILD) -#define CHECK_IS_FAFA FALSE -#define RADIO_CLASS wxT("BUTTON") -#define RADIO_FLAGS (BS_AUTORADIOBUTTON|WS_CHILD|WS_VISIBLE) -#define RADIO_SIZE 20 -#define RADIO_IS_FAFA FALSE -#define PURE_WINDOWS -#define GROUP_CLASS wxT("BUTTON") -#define GROUP_FLAGS (BS_GROUPBOX|WS_CHILD|WS_VISIBLE) - -/* -#define BITCHECK_FLAGS (FB_BITMAP|FC_BUTTONDRAW|FC_DEFAULT|WS_VISIBLE) -#define BITRADIO_FLAGS (FC_BUTTONDRAW|FB_BITMAP|FC_RADIO|WS_CHILD|WS_VISIBLE) -*/ - -// --------------------------------------------------------------------------- -// misc macros -// --------------------------------------------------------------------------- - -#define MEANING_CHARACTER '0' -#define DEFAULT_ITEM_WIDTH 100 -#define DEFAULT_ITEM_HEIGHT 80 - -// Scale font to get edit control height -//#define EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy) (3*(cy)/2) -#define EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy) (cy+8) - -// Generic subclass proc, for panel item moving/sizing and intercept -// EDIT control VK_RETURN messages -extern LONG APIENTRY _EXPORT - wxSubclassedGenericControlProc(WXHWND hWnd, WXUINT message, WXWPARAM wParam, WXLPARAM lParam); - -// --------------------------------------------------------------------------- -// useful macros and functions -// --------------------------------------------------------------------------- - -// a wrapper macro for ZeroMemory() -#if defined(__WIN32__) && !defined(__WXMICROWIN__) -#define wxZeroMemory(obj) ::ZeroMemory(&obj, sizeof(obj)) -#else -#define wxZeroMemory(obj) memset((void*) & obj, 0, sizeof(obj)) -#endif - -// This one is a macro so that it can be tested with #ifdef, it will be -// undefined if it cannot be implemented for a given compiler. -// Vc++, bcc, dmc, ow, mingw, codewarrior (and rsxnt) have _get_osfhandle. -// Cygwin has get_osfhandle. Others are currently unknown, e.g. Salford, -// Intel, Visual Age. -#if defined(__WXWINCE__) - #define wxGetOSFHandle(fd) ((HANDLE)fd) - #define wxOpenOSFHandle(h, flags) ((int)wxPtrToUInt(h)) -#elif defined(__CYGWIN__) - #define wxGetOSFHandle(fd) ((HANDLE)get_osfhandle(fd)) -#elif defined(__VISUALC__) \ - || defined(__BORLANDC__) \ - || defined(__DMC__) \ - || defined(__WATCOMC__) \ - || defined(__MINGW32__) \ - || (defined(__MWERKS__) && defined(__MSL__)) - #define wxGetOSFHandle(fd) ((HANDLE)_get_osfhandle(fd)) - #define wxOpenOSFHandle(h, flags) (_open_osfhandle(wxPtrToUInt(h), flags)) - #define wx_fdopen _fdopen -#endif - -// close the handle in the class dtor -class AutoHANDLE -{ -public: - wxEXPLICIT AutoHANDLE(HANDLE handle) : m_handle(handle) { } - - bool IsOk() const { return m_handle != INVALID_HANDLE_VALUE; } - operator HANDLE() const { return m_handle; } - - ~AutoHANDLE() { if ( IsOk() ) ::CloseHandle(m_handle); } - -protected: - HANDLE m_handle; -}; - -// a template to make initializing Windows styructs less painful: it zeroes all -// the struct fields and also sets cbSize member to the correct value (and so -// can be only used with structures which have this member...) -template <class T> -struct WinStruct : public T -{ - WinStruct() - { - ::ZeroMemory(this, sizeof(T)); - - // explicit qualification is required here for this to be valid C++ - this->cbSize = sizeof(T); - } -}; - - -#if wxUSE_GUI - -#include "wx/gdicmn.h" -#include "wx/colour.h" - -// make conversion from wxColour and COLORREF a bit less painful -inline COLORREF wxColourToRGB(const wxColour& c) -{ - return RGB(c.Red(), c.Green(), c.Blue()); -} - -inline COLORREF wxColourToPalRGB(const wxColour& c) -{ - return PALETTERGB(c.Red(), c.Green(), c.Blue()); -} - -inline wxColour wxRGBToColour(COLORREF rgb) -{ - return wxColour(GetRValue(rgb), GetGValue(rgb), GetBValue(rgb)); -} - -inline void wxRGBToColour(wxColour& c, COLORREF rgb) -{ - c.Set(GetRValue(rgb), GetGValue(rgb), GetBValue(rgb)); -} - -// get the standard colour map for some standard colours - see comment in this -// function to understand why is it needed and when should it be used -// -// it returns a wxCOLORMAP (can't use COLORMAP itself here as comctl32.dll -// might be not included/available) array of size wxSTD_COLOUR_MAX -// -// NB: if you change these colours, update wxBITMAP_STD_COLOURS in the -// resources as well: it must have the same number of pixels! -enum wxSTD_COLOUR -{ - wxSTD_COL_BTNTEXT, - wxSTD_COL_BTNSHADOW, - wxSTD_COL_BTNFACE, - wxSTD_COL_BTNHIGHLIGHT, - wxSTD_COL_MAX -}; - -struct WXDLLEXPORT wxCOLORMAP -{ - COLORREF from, to; -}; - -// this function is implemented in src/msw/window.cpp -extern wxCOLORMAP *wxGetStdColourMap(); - -// create a wxRect from Windows RECT -inline wxRect wxRectFromRECT(const RECT& rc) -{ - return wxRect(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); -} - -// copy Windows RECT to our wxRect -inline void wxCopyRECTToRect(const RECT& rc, wxRect& rect) -{ - rect = wxRectFromRECT(rc); -} - -// and vice versa -inline void wxCopyRectToRECT(const wxRect& rect, RECT& rc) -{ - // note that we don't use wxRect::GetRight() as it is one of compared to - // wxRectFromRECT() above - rc.top = rect.y; - rc.left = rect.x; - rc.right = rect.x + rect.width; - rc.bottom = rect.y + rect.height; -} - -// translations between HIMETRIC units (which OLE likes) and pixels (which are -// liked by all the others) - implemented in msw/utilsexc.cpp -extern void HIMETRICToPixel(LONG *x, LONG *y); -extern void PixelToHIMETRIC(LONG *x, LONG *y); - -// Windows convention of the mask is opposed to the wxWidgets one, so we need -// to invert the mask each time we pass one/get one to/from Windows -extern HBITMAP wxInvertMask(HBITMAP hbmpMask, int w = 0, int h = 0); - -// Creates an icon or cursor depending from a bitmap -// -// The bitmap must be valid and it should have a mask. If it doesn't, a default -// mask is created using light grey as the transparent colour. -extern HICON wxBitmapToHICON(const wxBitmap& bmp); - -// Same requirments as above apply and the bitmap must also have the correct -// size. -extern -HCURSOR wxBitmapToHCURSOR(const wxBitmap& bmp, int hotSpotX, int hotSpotY); - -// get (x, y) from DWORD - notice that HI/LOWORD can *not* be used because they -// will fail on system with multiple monitors where the coords may be negative -// -// these macros are standard now (Win98) but some older headers don't have them -#ifndef GET_X_LPARAM - #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) - #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) -#endif // GET_X_LPARAM - -// get the current state of SHIFT/CTRL keys -inline bool wxIsShiftDown() -{ -// return (::GetKeyState(VK_SHIFT) & 0x100) != 0; - // Returns different negative values on WinME and WinNT, - // so simply test for negative value. - return ::GetKeyState(VK_SHIFT) < 0; -} - -inline bool wxIsCtrlDown() -{ -// return (::GetKeyState(VK_CONTROL) & 0x100) != 0; - // Returns different negative values on WinME and WinNT, - // so simply test for negative value. - return ::GetKeyState(VK_CONTROL) < 0; -} - -// wrapper around GetWindowRect() and GetClientRect() APIs doing error checking -// for Win32 -inline RECT wxGetWindowRect(HWND hwnd) -{ - RECT rect; - - if ( !::GetWindowRect(hwnd, &rect) ) - wxLogLastError(_T("GetWindowRect")); - - return rect; -} - -inline RECT wxGetClientRect(HWND hwnd) -{ - RECT rect; - - if ( !::GetClientRect(hwnd, &rect) ) - wxLogLastError(_T("GetClientRect")); - - return rect; -} - -// --------------------------------------------------------------------------- -// small helper classes -// --------------------------------------------------------------------------- - -// create an instance of this class and use it as the HDC for screen, will -// automatically release the DC going out of scope -class ScreenHDC -{ -public: - ScreenHDC() { m_hdc = ::GetDC(NULL); } - ~ScreenHDC() { ::ReleaseDC(NULL, m_hdc); } - - operator HDC() const { return m_hdc; } - -private: - HDC m_hdc; - - DECLARE_NO_COPY_CLASS(ScreenHDC) -}; - -// the same as ScreenHDC but for window DCs -class WindowHDC -{ -public: - WindowHDC(HWND hwnd) { m_hdc = ::GetDC(m_hwnd = hwnd); } - ~WindowHDC() { ::ReleaseDC(m_hwnd, m_hdc); } - - operator HDC() const { return m_hdc; } - -private: - HWND m_hwnd; - HDC m_hdc; - - DECLARE_NO_COPY_CLASS(WindowHDC) -}; - -// the same as ScreenHDC but for memory DCs: creates the HDC compatible with -// the given one (screen by default) in ctor and destroys it in dtor -class MemoryHDC -{ -public: - MemoryHDC(HDC hdc = 0) { m_hdc = ::CreateCompatibleDC(hdc); } - ~MemoryHDC() { ::DeleteDC(m_hdc); } - - operator HDC() const { return m_hdc; } - -private: - HDC m_hdc; - - DECLARE_NO_COPY_CLASS(MemoryHDC) -}; - -// a class which selects a GDI object into a DC in its ctor and deselects in -// dtor -class SelectInHDC -{ -private: - void DoInit(HGDIOBJ hgdiobj) { m_hgdiobj = ::SelectObject(m_hdc, hgdiobj); } - -public: - SelectInHDC() : m_hdc(NULL) { } - SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc) { DoInit(hgdiobj); } - - void Init(HDC hdc, HGDIOBJ hgdiobj) - { - wxASSERT_MSG( !m_hdc, _T("initializing twice?") ); - - m_hdc = hdc; - - DoInit(hgdiobj); - } - - ~SelectInHDC() { if ( m_hdc ) ::SelectObject(m_hdc, m_hgdiobj); } - - // return true if the object was successfully selected - operator bool() const { return m_hgdiobj != 0; } - -private: - HDC m_hdc; - HGDIOBJ m_hgdiobj; - - DECLARE_NO_COPY_CLASS(SelectInHDC) -}; - -// a class which cleans up any GDI object -class AutoGDIObject -{ -protected: - AutoGDIObject() { m_gdiobj = NULL; } - AutoGDIObject(HGDIOBJ gdiobj) : m_gdiobj(gdiobj) { } - ~AutoGDIObject() { if ( m_gdiobj ) ::DeleteObject(m_gdiobj); } - - void InitGdiobj(HGDIOBJ gdiobj) - { - wxASSERT_MSG( !m_gdiobj, _T("initializing twice?") ); - - m_gdiobj = gdiobj; - } - - HGDIOBJ GetObject() const { return m_gdiobj; } - -private: - HGDIOBJ m_gdiobj; -}; - -// TODO: all this asks for using a AutoHandler<T, CreateFunc> template... - -// a class for temporary brushes -class AutoHBRUSH : private AutoGDIObject -{ -public: - AutoHBRUSH(COLORREF col) - : AutoGDIObject(::CreateSolidBrush(col)) { } - - operator HBRUSH() const { return (HBRUSH)GetObject(); } -}; - -// a class for temporary fonts -class AutoHFONT : private AutoGDIObject -{ -private: -public: - AutoHFONT() - : AutoGDIObject() { } - - AutoHFONT(const LOGFONT& lf) - : AutoGDIObject(::CreateFontIndirect(&lf)) { } - - void Init(const LOGFONT& lf) { InitGdiobj(::CreateFontIndirect(&lf)); } - - operator HFONT() const { return (HFONT)GetObject(); } -}; - -// a class for temporary pens -class AutoHPEN : private AutoGDIObject -{ -public: - AutoHPEN(COLORREF col) - : AutoGDIObject(::CreatePen(PS_SOLID, 0, col)) { } - - operator HPEN() const { return (HPEN)GetObject(); } -}; - -// classes for temporary bitmaps -class AutoHBITMAP : private AutoGDIObject -{ -public: - AutoHBITMAP(HBITMAP hbmp) : AutoGDIObject(hbmp) { } - - operator HBITMAP() const { return (HBITMAP)GetObject(); } -}; - -class CompatibleBitmap : public AutoHBITMAP -{ -public: - CompatibleBitmap(HDC hdc, int w, int h) - : AutoHBITMAP(::CreateCompatibleBitmap(hdc, w, h)) - { - } -}; - -class MonoBitmap : public AutoHBITMAP -{ -public: - MonoBitmap(int w, int h) - : AutoHBITMAP(::CreateBitmap(w, h, 1, 1, 0)) - { - } -}; - -// class automatically destroys the region object -class AutoHRGN : private AutoGDIObject -{ -public: - AutoHRGN(HRGN hrgn) : AutoGDIObject(hrgn) { } - - operator HRGN() const { return (HRGN)GetObject(); } -}; - -// class sets the specified clipping region during its life time -class HDCClipper -{ -public: - HDCClipper(HDC hdc, HRGN hrgn) - : m_hdc(hdc) - { - if ( !::SelectClipRgn(hdc, hrgn) ) - wxLogLastError(_T("SelectClipRgn")); - } - - ~HDCClipper() - { - ::SelectClipRgn(m_hdc, NULL); - } - -private: - HDC m_hdc; - - DECLARE_NO_COPY_CLASS(HDCClipper) -}; - -// set the given map mode for the life time of this object -// -// NB: SetMapMode() is not supported by CE so we also define a helper macro -// to avoid using it there -#ifdef __WXWINCE__ - #define wxCHANGE_HDC_MAP_MODE(hdc, mm) -#else // !__WXWINCE__ - class HDCMapModeChanger - { - public: - HDCMapModeChanger(HDC hdc, int mm) - : m_hdc(hdc) - { - m_modeOld = ::SetMapMode(hdc, mm); - if ( !m_modeOld ) - wxLogLastError(_T("SelectClipRgn")); - } - - ~HDCMapModeChanger() - { - if ( m_modeOld ) - ::SetMapMode(m_hdc, m_modeOld); - } - - private: - HDC m_hdc; - int m_modeOld; - - DECLARE_NO_COPY_CLASS(HDCMapModeChanger) - }; - - #define wxCHANGE_HDC_MAP_MODE(hdc, mm) \ - HDCMapModeChanger wxMAKE_UNIQUE_NAME(wxHDCMapModeChanger)(hdc, mm) -#endif // __WXWINCE__/!__WXWINCE__ - -// smart buffeer using GlobalAlloc/GlobalFree() -class GlobalPtr -{ -public: - // allocates a block of given size - GlobalPtr(size_t size, unsigned flags = GMEM_MOVEABLE) - { - m_hGlobal = ::GlobalAlloc(flags, size); - if ( !m_hGlobal ) - wxLogLastError(_T("GlobalAlloc")); - } - - ~GlobalPtr() - { - if ( m_hGlobal && ::GlobalFree(m_hGlobal) ) - wxLogLastError(_T("GlobalFree")); - } - - // implicit conversion - operator HGLOBAL() const { return m_hGlobal; } - -private: - HGLOBAL m_hGlobal; - - DECLARE_NO_COPY_CLASS(GlobalPtr) -}; - -// when working with global pointers (which is unfortunately still necessary -// sometimes, e.g. for clipboard) it is important to unlock them exactly as -// many times as we lock them which just asks for using a "smart lock" class -class GlobalPtrLock -{ -public: - GlobalPtrLock(HGLOBAL hGlobal) : m_hGlobal(hGlobal) - { - m_ptr = GlobalLock(hGlobal); - if ( !m_ptr ) - wxLogLastError(_T("GlobalLock")); - } - - ~GlobalPtrLock() - { - if ( !GlobalUnlock(m_hGlobal) ) - { -#ifdef __WXDEBUG__ - // this might happen simply because the block became unlocked - DWORD dwLastError = ::GetLastError(); - if ( dwLastError != NO_ERROR ) - { - wxLogApiError(_T("GlobalUnlock"), dwLastError); - } -#endif // __WXDEBUG__ - } - } - - operator void *() const { return m_ptr; } - -private: - HGLOBAL m_hGlobal; - void *m_ptr; - - DECLARE_NO_COPY_CLASS(GlobalPtrLock) -}; - -// register the class when it is first needed and unregister it in dtor -class ClassRegistrar -{ -public: - // ctor doesn't register the class, call Initialize() for this - ClassRegistrar() { m_registered = -1; } - - // return true if the class is already registered - bool IsInitialized() const { return m_registered != -1; } - - // return true if the class had been already registered - bool IsRegistered() const { return m_registered == 1; } - - // try to register the class if not done yet, return true on success - bool Register(const WNDCLASS& wc) - { - // we should only be called if we hadn't been initialized yet - wxASSERT_MSG( m_registered == -1, - _T("calling ClassRegistrar::Register() twice?") ); - - m_registered = ::RegisterClass(&wc) ? 1 : 0; - if ( !IsRegistered() ) - { - wxLogLastError(_T("RegisterClassEx()")); - } - else - { - m_clsname = wc.lpszClassName; - } - - return m_registered == 1; - } - - // get the name of the registered class (returns empty string if not - // registered) - const wxString& GetName() const { return m_clsname; } - - // unregister the class if it had been registered - ~ClassRegistrar() - { - if ( IsRegistered() ) - { - if ( !::UnregisterClass(m_clsname, wxhInstance) ) - { - wxLogLastError(_T("UnregisterClass")); - } - } - } - -private: - // initial value is -1 which means that we hadn't tried registering the - // class yet, it becomes true or false (1 or 0) when Initialize() is called - int m_registered; - - // the name of the class, only non empty if it had been registered - wxString m_clsname; -}; - -// --------------------------------------------------------------------------- -// macros to make casting between WXFOO and FOO a bit easier: the GetFoo() -// returns Foo cast to the Windows type for oruselves, while GetFooOf() takes -// an argument which should be a pointer or reference to the object of the -// corresponding class (this depends on the macro) -// --------------------------------------------------------------------------- - -#define GetHwnd() ((HWND)GetHWND()) -#define GetHwndOf(win) ((HWND)((win)->GetHWND())) -// old name -#define GetWinHwnd GetHwndOf - -#define GetHdc() ((HDC)GetHDC()) -#define GetHdcOf(dc) ((HDC)(dc).GetHDC()) - -#define GetHbitmap() ((HBITMAP)GetHBITMAP()) -#define GetHbitmapOf(bmp) ((HBITMAP)(bmp).GetHBITMAP()) - -#define GetHicon() ((HICON)GetHICON()) -#define GetHiconOf(icon) ((HICON)(icon).GetHICON()) - -#define GetHaccel() ((HACCEL)GetHACCEL()) -#define GetHaccelOf(table) ((HACCEL)((table).GetHACCEL())) - -#define GetHbrush() ((HBRUSH)GetResourceHandle()) -#define GetHbrushOf(brush) ((HBRUSH)(brush).GetResourceHandle()) - -#define GetHmenu() ((HMENU)GetHMenu()) -#define GetHmenuOf(menu) ((HMENU)menu->GetHMenu()) - -#define GetHcursor() ((HCURSOR)GetHCURSOR()) -#define GetHcursorOf(cursor) ((HCURSOR)(cursor).GetHCURSOR()) - -#define GetHfont() ((HFONT)GetHFONT()) -#define GetHfontOf(font) ((HFONT)(font).GetHFONT()) - -#define GetHimagelist() ((HIMAGELIST)GetHIMAGELIST()) -#define GetHimagelistOf(imgl) ((HIMAGELIST)imgl->GetHIMAGELIST()) - -#define GetHpalette() ((HPALETTE)GetHPALETTE()) -#define GetHpaletteOf(pal) ((HPALETTE)(pal).GetHPALETTE()) - -#define GetHpen() ((HPEN)GetResourceHandle()) -#define GetHpenOf(pen) ((HPEN)(pen).GetResourceHandle()) - -#define GetHrgn() ((HRGN)GetHRGN()) -#define GetHrgnOf(rgn) ((HRGN)(rgn).GetHRGN()) - -#endif // wxUSE_GUI - -// --------------------------------------------------------------------------- -// global functions -// --------------------------------------------------------------------------- - -extern "C" -{ - WXDLLIMPEXP_BASE HINSTANCE wxGetInstance(); -} - -WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst); - -// return the full path of the given module -inline wxString wxGetFullModuleName(HMODULE hmod) -{ - wxString fullname; - if ( !::GetModuleFileName - ( - hmod, - wxStringBuffer(fullname, MAX_PATH), - MAX_PATH - ) ) - { - wxLogLastError(_T("GetModuleFileName")); - } - - return fullname; -} - -// return the full path of the program file -inline wxString wxGetFullModuleName() -{ - return wxGetFullModuleName((HMODULE)wxGetInstance()); -} - -// return the run-time version of the OS in a format similar to -// WINVER/_WIN32_WINNT compile-time macros: -// -// 0x0300 Windows NT 3.51 -// 0x0400 Windows 95, NT4 -// 0x0410 Windows 98 -// 0x0500 Windows ME, 2000 -// 0x0501 Windows XP -// 0x0502 Windows 2003 -// 0x0600 Longhorn -// -// for the other Windows versions 0 is currently returned -enum wxWinVersion -{ - wxWinVersion_Unknown = 0, - - wxWinVersion_3 = 0x0300, - wxWinVersion_NT3 = wxWinVersion_3, - - wxWinVersion_4 = 0x0400, - wxWinVersion_95 = wxWinVersion_4, - wxWinVersion_NT4 = wxWinVersion_4, - wxWinVersion_98 = 0x0410, - - wxWinVersion_5 = 0x0500, - wxWinVersion_ME = wxWinVersion_5, - wxWinVersion_NT5 = wxWinVersion_5, - wxWinVersion_2000 = wxWinVersion_5, - wxWinVersion_XP = 0x0501, - wxWinVersion_2003 = 0x0502, - - wxWinVersion_6 = 0x0600, - wxWinVersion_NT6 = 0x0600 -}; - -WXDLLIMPEXP_BASE wxWinVersion wxGetWinVersion(); - -#if wxUSE_GUI - -// cursor stuff -extern HCURSOR wxGetCurrentBusyCursor(); // from msw/utils.cpp -extern const wxCursor *wxGetGlobalCursor(); // from msw/cursor.cpp - -WXDLLEXPORT void wxGetCharSize(WXHWND wnd, int *x, int *y, const wxFont& the_font); -WXDLLEXPORT void wxFillLogFont(LOGFONT *logFont, const wxFont *font); -WXDLLEXPORT wxFont wxCreateFontFromLogFont(const LOGFONT *logFont); -WXDLLEXPORT wxFontEncoding wxGetFontEncFromCharSet(int charset); - -WXDLLEXPORT void wxSliderEvent(WXHWND control, WXWORD wParam, WXWORD pos); -WXDLLEXPORT void wxScrollBarEvent(WXHWND hbar, WXWORD wParam, WXWORD pos); - -// Find maximum size of window/rectangle -extern WXDLLEXPORT void wxFindMaxSize(WXHWND hwnd, RECT *rect); - -// Safely get the window text (i.e. without using fixed size buffer) -extern WXDLLEXPORT wxString wxGetWindowText(WXHWND hWnd); - -// get the window class name -extern WXDLLEXPORT wxString wxGetWindowClass(WXHWND hWnd); - -// get the window id (should be unsigned, hence this is not wxWindowID which -// is, for mainly historical reasons, signed) -extern WXDLLEXPORT WXWORD wxGetWindowId(WXHWND hWnd); - -// check if hWnd's WNDPROC is wndProc. Return true if yes, false if they are -// different -extern WXDLLEXPORT bool wxCheckWindowWndProc(WXHWND hWnd, WXFARPROC wndProc); - -// Does this window style specify any border? -inline bool wxStyleHasBorder(long style) -{ - return (style & (wxSIMPLE_BORDER | wxRAISED_BORDER | - wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0; -} - -// ---------------------------------------------------------------------------- -// functions mapping HWND to wxWindow -// ---------------------------------------------------------------------------- - -// this function simply checks whether the given hWnd corresponds to a wxWindow -// and returns either that window if it does or NULL otherwise -extern WXDLLEXPORT wxWindow* wxFindWinFromHandle(WXHWND hWnd); - -// find the window for HWND which is part of some wxWindow, i.e. unlike -// wxFindWinFromHandle() above it will also work for "sub controls" of a -// wxWindow. -// -// returns the wxWindow corresponding to the given HWND or NULL. -extern WXDLLEXPORT wxWindow *wxGetWindowFromHWND(WXHWND hwnd); - -// Get the size of an icon -extern WXDLLEXPORT wxSize wxGetHiconSize(HICON hicon); - -// Lines are drawn differently for WinCE and regular WIN32 -WXDLLEXPORT void wxDrawLine(HDC hdc, int x1, int y1, int x2, int y2); - -// fill the client rect of the given window on the provided dc using this brush -inline void wxFillRect(HWND hwnd, HDC hdc, HBRUSH hbr) -{ - RECT rc; - ::GetClientRect(hwnd, &rc); - ::FillRect(hdc, &rc, hbr); -} - -// ---------------------------------------------------------------------------- -// 32/64 bit helpers -// ---------------------------------------------------------------------------- - -#ifdef __WIN64__ - -inline void *wxGetWindowProc(HWND hwnd) -{ - return (void *)::GetWindowLongPtr(hwnd, GWLP_WNDPROC); -} - -inline void *wxGetWindowUserData(HWND hwnd) -{ - return (void *)::GetWindowLongPtr(hwnd, GWLP_USERDATA); -} - -inline WNDPROC wxSetWindowProc(HWND hwnd, WNDPROC func) -{ - return (WNDPROC)::SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)func); -} - -inline void *wxSetWindowUserData(HWND hwnd, void *data) -{ - return (void *)::SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)data); -} - -#else // __WIN32__ - -// note that the casts to LONG_PTR here are required even on 32-bit machines -// for the 64-bit warning mode of later versions of MSVC (C4311/4312) -inline WNDPROC wxGetWindowProc(HWND hwnd) -{ - return (WNDPROC)(LONG_PTR)::GetWindowLong(hwnd, GWL_WNDPROC); -} - -inline void *wxGetWindowUserData(HWND hwnd) -{ - return (void *)(LONG_PTR)::GetWindowLong(hwnd, GWL_USERDATA); -} - -inline WNDPROC wxSetWindowProc(HWND hwnd, WNDPROC func) -{ - return (WNDPROC)(LONG_PTR)::SetWindowLong(hwnd, GWL_WNDPROC, (LONG_PTR)func); -} - -inline void *wxSetWindowUserData(HWND hwnd, void *data) -{ - return (void *)(LONG_PTR)::SetWindowLong(hwnd, GWL_USERDATA, (LONG_PTR)data); -} - -#endif // __WIN64__/__WIN32__ - -#endif // wxUSE_GUI - -#endif // _WX_PRIVATE_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/question.ico b/desmume/src/windows/wx/include/wx/msw/question.ico deleted file mode 100644 index b34c3b81d1c02316cef9e735736f51954132495d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2238 zcmcK4KTH~77{~FSX%jl>)<hRw&UBSs?TAb)%I3f*iUS*qOm>5W!O=K0O>;~v1~=jW zNe8E!jDvy1t``|<QsUF^dmMlK16#Q~cX+?g`@VP29ZCyqYinZvNk2bHpCx^vIHj+Y zJMTW_kI~_sU73*6<?`^rp08@PT58?36#n|5AT%|)rb=MSw@s<0$@5KeRlAc)S5odw zN*ASMMnMnX!PoIsd=a0;?ovDWP5cJl!!P5Rx6!~?@OgX+?_u>!;e{7ocxBYXckp$5 z6<@?>@w+nZ;5YFbcn`mf5Aj`mfN$fQcpvZMYxojAhfm{^c*7gs@P;?M;h)*=*sj>l z*othK$cOkYKESu}O}v}kN7v9LbPk<HCz-#8@8IkBD!z!%;&<^o_)Yu<-or2BnYYov zSMYg!3h&M6j$}Q22Vcim@kM;rlkL*Y9lE(mH#g{}M>m)8A-;<b@NIk(@8f-Z4PV0N z@M(M!Z+OES-tdMuu7}5U$K$%<ah>tFiaf4NMhfv=e1LD`n|L2T<MmMw-@(`MReTYj z#m{(sm^V-ZU%}_`DZGcD)u6z7_zu2~uj1*nWx28U8x&ZG@8Sb|8{fp!oEZ%YjQ5$U zP<bjvdDN^1Jw86_;o(8Ix3{{vxzY9YwJt9&<@>(Q&(Bq>)pUA#s#2+>LZP5sE~mY{ zJ*CrWZEbBSnM`VZeO)UnD_UG!RQT8Q{o;b(ahcx>>$;y3>qiIn?o!O{{==s~f6o5= zJTX5{%+C`xH&58yoOn*&ck!&e-yg;<e|v*2jYdb~-w47uC3h3NoMIBX3y8&}$)ln9 z!^0?#*BF6OY=yxf&ZCQruW}qu=aajb#G|pp<EYKkd7&^dqc%+CtiL}7aXuB>;b3t5 z0&oY@`Tp@VNJQ5^o!dSujAt0;FD5Xz#L@fLe>lAO!63eec=&icYaf^$Ovb-zZ=R)( zj*ds`Cr0u37V^x1VG=%5@fhs${P<V#CI-B?OP>E^^7z~2{o&i2G&(`xKCi;zdT#%R z`b~AHZxm}jQv)ib${&n>?KY53o}}$iTD_N+T2y&h365@hS4*z=+tn(y-D2E5<3laj MliXZOW~~$Z2iSjmhyVZp diff --git a/desmume/src/windows/wx/include/wx/msw/radiobox.h b/desmume/src/windows/wx/include/wx/msw/radiobox.h deleted file mode 100644 index 303876a46..000000000 --- a/desmume/src/windows/wx/include/wx/msw/radiobox.h +++ /dev/null @@ -1,175 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/radiobox.h -// Purpose: wxRadioBox class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: radiobox.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RADIOBOX_H_ -#define _WX_RADIOBOX_H_ - -#include "wx/statbox.h" - -class WXDLLIMPEXP_FWD_CORE wxSubwindows; - -// ---------------------------------------------------------------------------- -// wxRadioBox -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxRadioBox : public wxStaticBox, public wxRadioBoxBase -{ -public: - wxRadioBox() { Init(); } - - wxRadioBox(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - int majorDim = 0, - long style = wxRA_HORIZONTAL, - const wxValidator& val = wxDefaultValidator, - const wxString& name = wxRadioBoxNameStr) - { - Init(); - - (void)Create(parent, id, title, pos, size, n, choices, majorDim, - style, val, name); - } - - wxRadioBox(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - int majorDim = 0, - long style = wxRA_HORIZONTAL, - const wxValidator& val = wxDefaultValidator, - const wxString& name = wxRadioBoxNameStr) - { - Init(); - - (void)Create(parent, id, title, pos, size, choices, majorDim, - style, val, name); - } - - virtual ~wxRadioBox(); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - int majorDim = 0, - long style = wxRA_HORIZONTAL, - const wxValidator& val = wxDefaultValidator, - const wxString& name = wxRadioBoxNameStr); - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - int majorDim = 0, - long style = wxRA_HORIZONTAL, - const wxValidator& val = wxDefaultValidator, - const wxString& name = wxRadioBoxNameStr); - - // implement the radiobox interface - virtual void SetSelection(int n); - virtual int GetSelection() const { return m_selectedButton; } - virtual unsigned int GetCount() const; - virtual wxString GetString(unsigned int n) const; - virtual void SetString(unsigned int n, const wxString& label); - virtual bool Enable(unsigned int n, bool enable = true); - virtual bool Show(unsigned int n, bool show = true); - virtual bool IsItemEnabled(unsigned int n) const; - virtual bool IsItemShown(unsigned int n) const; - virtual int GetItemFromPoint(const wxPoint& pt) const; - - // override some base class methods - virtual bool Show(bool show = true); - virtual bool Enable(bool enable = true); - virtual void SetFocus(); - virtual bool SetFont(const wxFont& font); - virtual bool ContainsHWND(WXHWND hWnd) const; -#if wxUSE_TOOLTIPS - virtual bool HasToolTips() const; -#endif // wxUSE_TOOLTIPS -#if wxUSE_HELP - // override virtual function with a platform-independent implementation - virtual wxString GetHelpTextAtPoint(const wxPoint & pt, wxHelpEvent::Origin origin) const - { - return wxRadioBoxBase::DoGetHelpTextAtPoint( this, pt, origin ); - } -#endif // wxUSE_HELP - - virtual bool Reparent(wxWindowBase *newParent); - - // we inherit a version always returning false from wxStaticBox, override - // it to behave normally - virtual bool AcceptsFocus() const { return wxControl::AcceptsFocus(); } - - void SetLabelFont(const wxFont& WXUNUSED(font)) {} - void SetButtonFont(const wxFont& font) { SetFont(font); } - - // implementation only from now on - // ------------------------------- - - virtual bool MSWCommand(WXUINT param, WXWORD id); - void Command(wxCommandEvent& event); - - void SendNotificationEvent(); - -protected: - // common part of all ctors - void Init(); - - // subclass one radio button - void SubclassRadioButton(WXHWND hWndBtn); - - // get the max size of radio buttons - wxSize GetMaxButtonSize() const; - - // get the total size occupied by the radio box buttons - wxSize GetTotalButtonSize(const wxSize& sizeBtn) const; - - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - virtual wxSize DoGetBestSize() const; - -#if wxUSE_TOOLTIPS - virtual void DoSetItemToolTip(unsigned int n, wxToolTip * tooltip); -#endif - -#ifndef __WXWINCE__ - virtual WXHRGN MSWGetRegionWithoutChildren(); -#endif // __WXWINCE__ - - - // the buttons we contain - wxSubwindows *m_radioButtons; - - // array of widths and heights of the buttons, may be wxDefaultCoord if the - // corresponding quantity should be computed - int *m_radioWidth; - int *m_radioHeight; - - // currently selected button or wxNOT_FOUND if none - int m_selectedButton; - -private: - DECLARE_DYNAMIC_CLASS(wxRadioBox) - DECLARE_NO_COPY_CLASS(wxRadioBox) -}; - -#endif - // _WX_RADIOBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/radiobut.h b/desmume/src/windows/wx/include/wx/msw/radiobut.h deleted file mode 100644 index 4a6e86e45..000000000 --- a/desmume/src/windows/wx/include/wx/msw/radiobut.h +++ /dev/null @@ -1,70 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: radiobut.h -// Purpose: wxRadioButton class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: radiobut.h 41144 2006-09-10 23:08:13Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RADIOBUT_H_ -#define _WX_RADIOBUT_H_ - -class WXDLLEXPORT wxRadioButton: public wxControl -{ -public: - // ctors and creation functions - wxRadioButton() { Init(); } - - wxRadioButton(wxWindow *parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxRadioButtonNameStr) - { - Init(); - - Create(parent, id, label, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxRadioButtonNameStr); - - // implement the radio button interface - virtual void SetValue(bool value); - virtual bool GetValue() const; - - // implementation only from now on - virtual bool MSWCommand(WXUINT param, WXWORD id); - virtual void Command(wxCommandEvent& event); - virtual bool HasTransparentBackground() { return true; } - - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - -protected: - virtual wxSize DoGetBestSize() const; - -private: - // common part of all ctors - void Init(); - - // we need to store the state internally as the result of GetValue() - // sometimes gets out of sync in WM_COMMAND handler - bool m_isChecked; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxRadioButton) -}; - -#endif - // _WX_RADIOBUT_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/rcdefs.h b/desmume/src/windows/wx/include/wx/msw/rcdefs.h deleted file mode 100644 index 66c9f7fcc..000000000 --- a/desmume/src/windows/wx/include/wx/msw/rcdefs.h +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - -#ifndef _WX_RCDEFS_H -#define _WX_RCDEFS_H - - -#define WX_MSC_FULL_VER 150030729 - - - - - - - - - - - - - - - -#define WX_CPU_X86 - - - - - - - - - - -#endif diff --git a/desmume/src/windows/wx/include/wx/msw/regconf.h b/desmume/src/windows/wx/include/wx/msw/regconf.h deleted file mode 100644 index 3fc7aec0f..000000000 --- a/desmume/src/windows/wx/include/wx/msw/regconf.h +++ /dev/null @@ -1,110 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: msw/regconf.h -// Purpose: Registry based implementation of wxConfigBase -// Author: Vadim Zeitlin -// Modified by: -// Created: 27.04.98 -// RCS-ID: $Id: regconf.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _REGCONF_H -#define _REGCONF_H - -#ifndef _REGISTRY_H - #include "wx/msw/registry.h" -#endif - -#include "wx/object.h" -#include "wx/confbase.h" - -// ---------------------------------------------------------------------------- -// wxRegConfig -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxRegConfig : public wxConfigBase -{ -public: - // ctor & dtor - // will store data in HKLM\appName and HKCU\appName - wxRegConfig(const wxString& appName = wxEmptyString, - const wxString& vendorName = wxEmptyString, - const wxString& localFilename = wxEmptyString, - const wxString& globalFilename = wxEmptyString, - long style = wxCONFIG_USE_GLOBAL_FILE); - - // dtor will save unsaved data - virtual ~wxRegConfig(){} - - // implement inherited pure virtual functions - // ------------------------------------------ - - // path management - virtual void SetPath(const wxString& strPath); - virtual const wxString& GetPath() const { return m_strPath; } - - // entry/subgroup info - // enumerate all of them - virtual bool GetFirstGroup(wxString& str, long& lIndex) const; - virtual bool GetNextGroup (wxString& str, long& lIndex) const; - virtual bool GetFirstEntry(wxString& str, long& lIndex) const; - virtual bool GetNextEntry (wxString& str, long& lIndex) const; - - // tests for existence - virtual bool HasGroup(const wxString& strName) const; - virtual bool HasEntry(const wxString& strName) const; - virtual EntryType GetEntryType(const wxString& name) const; - - // get number of entries/subgroups in the current group, with or without - // it's subgroups - virtual size_t GetNumberOfEntries(bool bRecursive = false) const; - virtual size_t GetNumberOfGroups(bool bRecursive = false) const; - - virtual bool Flush(bool WXUNUSED(bCurrentOnly) = false) { return true; } - - // rename - virtual bool RenameEntry(const wxString& oldName, const wxString& newName); - virtual bool RenameGroup(const wxString& oldName, const wxString& newName); - - // delete - virtual bool DeleteEntry(const wxString& key, bool bGroupIfEmptyAlso = true); - virtual bool DeleteGroup(const wxString& key); - virtual bool DeleteAll(); - -protected: - // opens the local key creating it if necessary and returns it - wxRegKey& LocalKey() const // must be const to be callable from const funcs - { - wxRegConfig* self = wxConstCast(this, wxRegConfig); - - if ( !m_keyLocal.IsOpened() ) - { - // create on demand - self->m_keyLocal.Create(); - } - - return self->m_keyLocal; - } - - // implement read/write methods - virtual bool DoReadString(const wxString& key, wxString *pStr) const; - virtual bool DoReadLong(const wxString& key, long *plResult) const; - - virtual bool DoWriteString(const wxString& key, const wxString& szValue); - virtual bool DoWriteLong(const wxString& key, long lValue); - -private: - // no copy ctor/assignment operator - wxRegConfig(const wxRegConfig&); - wxRegConfig& operator=(const wxRegConfig&); - - // these keys are opened during all lifetime of wxRegConfig object - wxRegKey m_keyLocalRoot, m_keyLocal, - m_keyGlobalRoot, m_keyGlobal; - - // current path (not '/' terminated) - wxString m_strPath; -}; - -#endif //_REGCONF_H diff --git a/desmume/src/windows/wx/include/wx/msw/region.h b/desmume/src/windows/wx/include/wx/msw/region.h deleted file mode 100644 index 8afd863fd..000000000 --- a/desmume/src/windows/wx/include/wx/msw/region.h +++ /dev/null @@ -1,102 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/region.h -// Purpose: wxRegion class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: region.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1997-2002 wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_REGION_H_ -#define _WX_MSW_REGION_H_ - -class WXDLLEXPORT wxRegion : public wxRegionWithCombine -{ -public: - wxRegion(); - wxRegion(wxCoord x, wxCoord y, wxCoord w, wxCoord h); - wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight); - wxRegion(const wxRect& rect); - wxRegion(WXHRGN hRegion); // Hangs on to this region - wxRegion(size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE ); - wxRegion( const wxBitmap& bmp) - { - Union(bmp); - } - wxRegion( const wxBitmap& bmp, - const wxColour& transColour, int tolerance = 0) - { - Union(bmp, transColour, tolerance); - } - - virtual ~wxRegion(); - - // wxRegionBase methods - virtual void Clear(); - virtual bool IsEmpty() const; - - // Get internal region handle - WXHRGN GetHRGN() const; - -protected: - virtual wxObjectRefData *CreateRefData() const; - virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const; - - virtual bool DoIsEqual(const wxRegion& region) const; - virtual bool DoGetBox(wxCoord& x, wxCoord& y, wxCoord& w, wxCoord& h) const; - virtual wxRegionContain DoContainsPoint(wxCoord x, wxCoord y) const; - virtual wxRegionContain DoContainsRect(const wxRect& rect) const; - - virtual bool DoOffset(wxCoord x, wxCoord y); - virtual bool DoCombine(const wxRegion& region, wxRegionOp op); - - friend class WXDLLIMPEXP_FWD_CORE wxRegionIterator; - - DECLARE_DYNAMIC_CLASS(wxRegion) -}; - -class WXDLLEXPORT wxRegionIterator : public wxObject -{ -public: - wxRegionIterator() { Init(); } - wxRegionIterator(const wxRegion& region); - wxRegionIterator(const wxRegionIterator& ri) : wxObject(ri) { Init(); *this = ri; } - - wxRegionIterator& operator=(const wxRegionIterator& ri); - - virtual ~wxRegionIterator(); - - void Reset() { m_current = 0; } - void Reset(const wxRegion& region); - - bool HaveRects() const { return (m_current < m_numRects); } - - operator bool () const { return HaveRects(); } - - wxRegionIterator& operator++(); - wxRegionIterator operator++(int); - - wxCoord GetX() const; - wxCoord GetY() const; - wxCoord GetW() const; - wxCoord GetWidth() const { return GetW(); } - wxCoord GetH() const; - wxCoord GetHeight() const { return GetH(); } - - wxRect GetRect() const { return wxRect(GetX(), GetY(), GetW(), GetH()); } - -private: - // common part of all ctors - void Init(); - - long m_current; - long m_numRects; - wxRegion m_region; - wxRect* m_rects; - - DECLARE_DYNAMIC_CLASS(wxRegionIterator) -}; - -#endif // _WX_MSW_REGION_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/registry.h b/desmume/src/windows/wx/include/wx/msw/registry.h deleted file mode 100644 index 27783e9ce..000000000 --- a/desmume/src/windows/wx/include/wx/msw/registry.h +++ /dev/null @@ -1,247 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/registry.h -// Purpose: Registry classes and functions -// Author: Vadim Zeitlin -// Modified by: -// Created: 03.04.1998 -// RCS-ID: $Id: registry.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_REGISTRY_H_ -#define _WX_MSW_REGISTRY_H_ - -class WXDLLIMPEXP_FWD_BASE wxOutputStream; - -// ---------------------------------------------------------------------------- -// class wxRegKey encapsulates window HKEY handle -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxRegKey -{ -public: - // NB: do _not_ change the values of elements in these enumerations! - - // registry value types (with comments from winnt.h) - enum ValueType - { - Type_None, // No value type - Type_String, // Unicode nul terminated string - Type_Expand_String, // Unicode nul terminated string - // (with environment variable references) - Type_Binary, // Free form binary - Type_Dword, // 32-bit number - Type_Dword_little_endian // 32-bit number - = Type_Dword, // (same as Type_DWORD) - Type_Dword_big_endian, // 32-bit number - Type_Link, // Symbolic Link (unicode) - Type_Multi_String, // Multiple Unicode strings - Type_Resource_list, // Resource list in the resource map - Type_Full_resource_descriptor, // Resource list in the hardware description - Type_Resource_requirements_list // ??? - }; - - // predefined registry keys - enum StdKey - { - HKCR, // classes root - HKCU, // current user - HKLM, // local machine - HKUSR, // users - HKPD, // performance data (WinNT/2K only) - HKCC, // current config - HKDD, // dynamic data (Win95/98 only) - HKMAX - }; - - // access mode for the key - enum AccessMode - { - Read, // read-only - Write // read and write - }; - - // information about standard (predefined) registry keys - // number of standard keys - static const size_t nStdKeys; - // get the name of a standard key - static const wxChar *GetStdKeyName(size_t key); - // get the short name of a standard key - static const wxChar *GetStdKeyShortName(size_t key); - // get StdKey from root HKEY - static StdKey GetStdKeyFromHkey(WXHKEY hkey); - - // extacts the std key prefix from the string (return value) and - // leaves only the part after it (i.e. modifies the string passed!) - static StdKey ExtractKeyName(wxString& str); - - // ctors - // root key is set to HKCR (the only root key under Win16) - wxRegKey(); - // strKey is the full name of the key (i.e. starting with HKEY_xxx...) - wxRegKey(const wxString& strKey); - // strKey is the name of key under (standard key) keyParent - wxRegKey(StdKey keyParent, const wxString& strKey); - // strKey is the name of key under (previously created) keyParent - wxRegKey(const wxRegKey& keyParent, const wxString& strKey); - // dtor closes the key - ~wxRegKey(); - - // change key (closes the previously opened key if any) - // the name is absolute, i.e. should start with HKEY_xxx - void SetName(const wxString& strKey); - // the name is relative to the parent key - void SetName(StdKey keyParent, const wxString& strKey); - // the name is relative to the parent key - void SetName(const wxRegKey& keyParent, const wxString& strKey); - // hKey should be opened and will be closed in wxRegKey dtor - void SetHkey(WXHKEY hKey); - - // get infomation about the key - // get the (full) key name. Abbreviate std root keys if bShortPrefix. - wxString GetName(bool bShortPrefix = true) const; - // return true if the key exists - bool Exists() const; - // get the info about key (any number of these pointers may be NULL) - bool GetKeyInfo(size_t *pnSubKeys, // number of subkeys - size_t *pnMaxKeyLen, // max len of subkey name - size_t *pnValues, // number of values - size_t *pnMaxValueLen) const; - // return true if the key is opened - bool IsOpened() const { return m_hKey != 0; } - // for "if ( !key ) wxLogError(...)" kind of expressions - operator bool() const { return m_dwLastError == 0; } - - // operations on the key itself - // explicitly open the key (will be automatically done by all functions - // which need the key to be opened if the key is not opened yet) - bool Open(AccessMode mode = Write); - // create the key: will fail if the key already exists and !bOkIfExists - bool Create(bool bOkIfExists = true); - // rename a value from old name to new one - bool RenameValue(const wxChar *szValueOld, const wxChar *szValueNew); - // rename the key - bool Rename(const wxChar *szNewName); - // copy value to another key possibly changing its name (by default it will - // remain the same) - bool CopyValue(const wxChar *szValue, wxRegKey& keyDst, - const wxChar *szNewName = NULL); - // copy the entire contents of the key recursively to another location - bool Copy(const wxChar *szNewName); - // same as Copy() but using a key and not the name - bool Copy(wxRegKey& keyDst); - // close the key (will be automatically done in dtor) - bool Close(); - - // deleting keys/values - // deletes this key and all of it's subkeys/values - bool DeleteSelf(); - // deletes the subkey with all of it's subkeys/values recursively - bool DeleteKey(const wxChar *szKey); - // deletes the named value (may be NULL to remove the default value) - bool DeleteValue(const wxChar *szValue); - - // access to values and subkeys - // get value type - ValueType GetValueType(const wxChar *szValue) const; - // returns true if the value contains a number (else it's some string) - bool IsNumericValue(const wxChar *szValue) const; - - // assignment operators set the default value of the key - wxRegKey& operator=(const wxString& strValue) - { SetValue(NULL, strValue); return *this; } - wxRegKey& operator=(long lValue) - { SetValue(NULL, lValue); return *this; } - - // query the default value of the key: implicitly or explicitly - wxString QueryDefaultValue() const; - operator wxString() const { return QueryDefaultValue(); } - - // named values - - // set the string value - bool SetValue(const wxChar *szValue, const wxString& strValue); - // retrieve the string value - bool QueryValue(const wxChar *szValue, wxString& strValue) const - { return QueryValue(szValue, strValue, false); } - // retrieve raw string value - bool QueryRawValue(const wxChar *szValue, wxString& strValue) const - { return QueryValue(szValue, strValue, true); } - // retrieve either raw or expanded string value - bool QueryValue(const wxChar *szValue, wxString& strValue, bool raw) const; - - // set the numeric value - bool SetValue(const wxChar *szValue, long lValue); - // return the numeric value - bool QueryValue(const wxChar *szValue, long *plValue) const; - // set the binary value - bool SetValue(const wxChar *szValue, const wxMemoryBuffer& buf); - // return the binary value - bool QueryValue(const wxChar *szValue, wxMemoryBuffer& buf) const; - - // query existence of a key/value - // return true if value exists - bool HasValue(const wxChar *szKey) const; - // return true if given subkey exists - bool HasSubKey(const wxChar *szKey) const; - // return true if any subkeys exist - bool HasSubkeys() const; - // return true if any values exist - bool HasValues() const; - // return true if the key is empty (nothing under this key) - bool IsEmpty() const { return !HasSubkeys() && !HasValues(); } - - // enumerate values and subkeys - bool GetFirstValue(wxString& strValueName, long& lIndex); - bool GetNextValue (wxString& strValueName, long& lIndex) const; - - bool GetFirstKey (wxString& strKeyName , long& lIndex); - bool GetNextKey (wxString& strKeyName , long& lIndex) const; - - // export the contents of this key and all its subkeys to the given file - // (which won't be overwritten, it's an error if it already exists) - // - // note that we export the key in REGEDIT4 format, not RegSaveKey() binary - // format nor newer REGEDIT5 one - bool Export(const wxString& filename) const; - - // same as above but write to the given (opened) stream - bool Export(wxOutputStream& ostr) const; - - - // for wxRegConfig usage only: preallocate some memory for the name - void ReserveMemoryForName(size_t bytes) { m_strKey.reserve(bytes); } - -private: - // common part of all ctors - void Init() - { - m_hKey = (WXHKEY) NULL; - m_dwLastError = 0; - } - - // recursive helper for Export() - bool DoExport(wxOutputStream& ostr) const; - - // export a single value - bool DoExportValue(wxOutputStream& ostr, const wxString& name) const; - - // return the text representation (in REGEDIT4 format) of the value with the - // given name - wxString FormatValue(const wxString& name) const; - - - WXHKEY m_hKey, // our handle - m_hRootKey; // handle of the top key (i.e. StdKey) - wxString m_strKey; // key name (relative to m_hRootKey) - - AccessMode m_mode; // valid only if key is opened - long m_dwLastError; // last error (0 if none) - - - DECLARE_NO_COPY_CLASS(wxRegKey) -}; - -#endif // _WX_MSW_REGISTRY_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/removble.ico b/desmume/src/windows/wx/include/wx/msw/removble.ico deleted file mode 100644 index f218a894c2f9603c5c5ea7d685e946df83d3f947..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1718 zcmbu<J!l$X9LMor`a&|LS<TetB&+U*j_Tx+xI2`B5DEv4xWp-S^1vZu=ukSGlS?q0 zWKigk>89XNylTzSfMm%~$kXq0=FK!xN}tRBdG2|hkI!BH&)rE&dZx8C#pT^gDaqN| z&A`Tz)L?AGjuEekC9P0PZ<u?!)Fl2?tIZl}PSx#p)g5#-{rW}0)Tli)Y6M2*o>8`A z<oHIi(HuzCW2tl?<y|RVP!Qt#_!i#7yZ9n@i^$<K_!Qp3C-AJ>ZsQyHGCqrUu(~Gj z!V53F3JURkd<*a4U3?M0C8HcZgHPcdd;&kk5AgxMhwtEhypM0<tN0Q=k5A(b-rx=1 z;0@m3uQ>)B#~cS7E=M8uQ~VGg;CuKE-mdPWo9HUKgwCVWtRLe0_!i#7yZ9o03!lSh z@F~25PvBX%-NrZYWqcOzEXa;zLVO?J!h3iZUvy-)$YzdgX2@oWY&v8!fuG`s_yFI- zckn*m$2aj+d<mb&r||}F@CI-225-0@wrjw49kX2rY?sS+6$;W6Kg0+49=?P3@e3Xw zh4?<ch4=6-zKCD&_^@uEHok!`<Fj}NzbHY03Gsb=3-95{v?=nBJ)NMyOz}f}fbZcu zc#^XqL4o0UCK^PU$Px~*C_$H(ml}`9Iy*bl>FKFXPEK@mbR^&Rb$EEFX0xgN{e4xd zRqgETs8lLxdwW~?d|sQIn@XqCN+y$9Utibi>Z+!{j6Q$*#Cu%hec`(HRpR<_Lv3%x z*y?X(GFLPi-4|w}$>`@zxwx2opg$aj;rG#Ky!^xdFq%YjWfDD{zdDbi@PWUIB1Ln3 z&GpYC?l!t#-**4#GjMbLc-n$T{o6aTzn<lRPv63C<802(cc0JV+p-kLtH<Bj7j{W? z<NB$p#$t@KCvii~Y5bl2*L_;vjm!I4vs>A%Q{L`X_RN(Xs#I*hUjOLL`t{p(W!A6F X+Dc8H^%dQ<E4I%~-L-a^|IgEJ{MMJc diff --git a/desmume/src/windows/wx/include/wx/msw/rightarr.cur b/desmume/src/windows/wx/include/wx/msw/rightarr.cur deleted file mode 100644 index c54c3ac4b09fa88728c865d94ae7665a35103f42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcma*hu?@mN429u$0nw&IbV*4`OO=em2yBpymQgYS14Q@uO%6p!6!Gah+ozLdsZvtg zN*5h<OVU}=6+Ed&;(Vf{wb^dlTeGVg89MPZ%y{65J32Ha$J}pUQy=hu33k{SoxOy{ Z&Y`v)PJ=xb6Ip{ZB0KsSFD%ITjW>!mc-a5| diff --git a/desmume/src/windows/wx/include/wx/msw/roller.cur b/desmume/src/windows/wx/include/wx/msw/roller.cur deleted file mode 100644 index 118c37fa439da2836f547914c866d3ad0c003d64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcma)$I}*Y$3`C#F4C%<w&?Y4%Hy}47H^WEa2q{x!ysRB(paXeU(#rZQ90&{poawm* zxByqfB}OCo6{}$*A1|qr(edSh8JY#!6}kky|L>Z3C?dI`TF$@uUN14)|3YajPI_8K rFQraeTWM*eIcyiAFHcrrC03IaWo0{Xest~R1*yP9Dew9N9?13vQju`7 diff --git a/desmume/src/windows/wx/include/wx/msw/scrolbar.h b/desmume/src/windows/wx/include/wx/msw/scrolbar.h deleted file mode 100644 index 051e1049d..000000000 --- a/desmume/src/windows/wx/include/wx/msw/scrolbar.h +++ /dev/null @@ -1,72 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: scrollbar.h -// Purpose: wxScrollBar class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: scrolbar.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SCROLBAR_H_ -#define _WX_SCROLBAR_H_ - -// Scrollbar item -class WXDLLEXPORT wxScrollBar: public wxScrollBarBase -{ -public: - wxScrollBar() { m_pageSize = 0; m_viewSize = 0; m_objectSize = 0; } - virtual ~wxScrollBar(); - - wxScrollBar(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSB_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxScrollBarNameStr) - { - Create(parent, id, pos, size, style, validator, name); - } - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSB_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxScrollBarNameStr); - - int GetThumbPosition() const ; - int GetThumbSize() const { return m_pageSize; } - int GetPageSize() const { return m_viewSize; } - int GetRange() const { return m_objectSize; } - - virtual void SetThumbPosition(int viewStart); - virtual void SetScrollbar(int position, int thumbSize, int range, int pageSize, - bool refresh = true); - - // needed for RTTI - void SetThumbSize( int s ) { SetScrollbar( GetThumbPosition() , s , GetRange() , GetPageSize() , true ) ; } - void SetPageSize( int s ) { SetScrollbar( GetThumbPosition() , GetThumbSize() , GetRange() , s , true ) ; } - void SetRange( int s ) { SetScrollbar( GetThumbPosition() , GetThumbSize() , s , GetPageSize() , true ) ; } - - void Command(wxCommandEvent& event); - virtual bool MSWOnScroll(int orientation, WXWORD wParam, - WXWORD pos, WXHWND control); - - // override wxControl version to not use solid background here - virtual WXHBRUSH MSWControlColor(WXHDC pDC, WXHWND hWnd); - - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - -protected: - virtual wxSize DoGetBestSize() const; - - int m_pageSize; - int m_viewSize; - int m_objectSize; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxScrollBar) -}; - -#endif - // _WX_SCROLBAR_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/seh.h b/desmume/src/windows/wx/include/wx/msw/seh.h deleted file mode 100644 index 418df910e..000000000 --- a/desmume/src/windows/wx/include/wx/msw/seh.h +++ /dev/null @@ -1,74 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/seh.h -// Purpose: declarations for SEH (structured exceptions handling) support -// Author: Vadim Zeitlin -// Created: 2006-04-26 -// RCS-ID: $Id: seh.h 44451 2007-02-11 02:17:28Z VZ $ -// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_SEH_H_ -#define _WX_MSW_SEH_H_ - -#if wxUSE_ON_FATAL_EXCEPTION - - // the exception handler which should be called from the exception filter - // - // it calsl wxApp::OnFatalException() if possible - extern unsigned long wxGlobalSEHandler(EXCEPTION_POINTERS *pExcPtrs); - - // helper macro for wxSEH_HANDLE -#if defined(__BORLANDC__) || (defined(__VISUALC__) && (__VISUALC__ <= 1200)) - // some compilers don't understand that this code is unreachable and warn - // about no value being returned from the function without it, so calm them - // down - #define wxSEH_DUMMY_RETURN(rc) return rc; -#else - #define wxSEH_DUMMY_RETURN(rc) -#endif - - // macros which allow to avoid many #if wxUSE_ON_FATAL_EXCEPTION in the code - // which uses them - #define wxSEH_TRY __try - #define wxSEH_IGNORE __except ( EXCEPTION_EXECUTE_HANDLER ) { } - #define wxSEH_HANDLE(rc) \ - __except ( wxGlobalSEHandler(GetExceptionInformation()) ) \ - { \ - /* use the same exit code as abort() */ \ - ::ExitProcess(3); \ - \ - wxSEH_DUMMY_RETURN(rc) \ - } - -#else // wxUSE_ON_FATAL_EXCEPTION - #define wxSEH_TRY - #define wxSEH_IGNORE - #define wxSEH_HANDLE(rc) -#endif // wxUSE_ON_FATAL_EXCEPTION - -#if wxUSE_ON_FATAL_EXCEPTION && defined(__VISUALC__) && !defined(__WXWINCE__) - #include <eh.h> - - // C++ exception to structured exceptions translator: we need it in order - // to prevent VC++ from "helpfully" translating structured exceptions (such - // as division by 0 or access violation) to C++ pseudo-exceptions - extern void wxSETranslator(unsigned int code, EXCEPTION_POINTERS *ep); - - // up to VC 7.1 this warning ("calling _set_se_translator() requires /EHa") - // is harmless and it's easier to suppress it than use different makefiles - // for VC5 and 6 (which don't support /EHa at all) and VC7 (which does - // accept it but it seems to change nothing for it anyhow) - #if __VISUALC__ <= 1310 - #pragma warning(disable: 4535) - #endif - - // note that the SE translator must be called wxSETranslator! - #define DisableAutomaticSETranslator() _set_se_translator(wxSETranslator) -#else // !__VISUALC__ - // the other compilers do nothing as stupid by default so nothing to do for - // them - #define DisableAutomaticSETranslator() -#endif // __VISUALC__/!__VISUALC__ - -#endif // _WX_MSW_SEH_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/setup.h b/desmume/src/windows/wx/include/wx/msw/setup.h deleted file mode 100644 index dc996d9f8..000000000 --- a/desmume/src/windows/wx/include/wx/msw/setup.h +++ /dev/null @@ -1,1349 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/setup.h -// Purpose: Configuration for the library -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: setup0.h 51451 2008-01-29 23:11:55Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SETUP_H_ -#define _WX_SETUP_H_ - -/* --- start common options --- */ -// ---------------------------------------------------------------------------- -// global settings -// ---------------------------------------------------------------------------- - -// define this to 0 when building wxBase library - this can also be done from -// makefile/project file overriding the value here -#ifndef wxUSE_GUI - #define wxUSE_GUI 1 -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// compatibility settings -// ---------------------------------------------------------------------------- - -// This setting determines the compatibility with 2.4 API: set it to 1 to -// enable it but please consider updating your code instead. -// -// Default is 0 -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_4 0 - -// This setting determines the compatibility with 2.6 API: set it to 0 to -// flag all cases of using deprecated functions. -// -// Default is 1 but please try building your code with 0 as the default will -// change to 0 in the next version and the deprecated functions will disappear -// in the version after it completely. -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_6 1 - -// MSW-only: Set to 0 for accurate dialog units, else 1 for old behaviour when -// default system font is used for wxWindow::GetCharWidth/Height() instead of -// the current font. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxDIALOG_UNIT_COMPATIBILITY 0 - -// ---------------------------------------------------------------------------- -// debugging settings -// ---------------------------------------------------------------------------- - -// Generic comment about debugging settings: they are very useful if you don't -// use any other memory leak detection tools such as Purify/BoundsChecker, but -// are probably redundant otherwise. Also, Visual C++ CRT has the same features -// as wxWidgets memory debugging subsystem built in since version 5.0 and you -// may prefer to use it instead of built in memory debugging code because it is -// faster and more fool proof. -// -// Using VC++ CRT memory debugging is enabled by default in debug mode -// (__WXDEBUG__) if wxUSE_GLOBAL_MEMORY_OPERATORS is *not* enabled (i.e. is 0) -// and if __NO_VC_CRTDBG__ is not defined. - -// If 1, enables wxDebugContext, for writing error messages to file, etc. If -// __WXDEBUG__ is not defined, will still use the normal memory operators. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_CONTEXT 0 - -// If 1, enables debugging versions of wxObject::new and wxObject::delete *IF* -// __WXDEBUG__ is also defined. -// -// WARNING: this code may not work with all architectures, especially if -// alignment is an issue. This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 1 if you are not using a memory debugging tool, else 0 -#define wxUSE_MEMORY_TRACING 0 - -// In debug mode, cause new and delete to be redefined globally. -// If this causes problems (e.g. link errors which is a common problem -// especially if you use another library which also redefines the global new -// and delete), set this to 0. -// This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -// In debug mode, causes new to be defined to be WXDEBUG_NEW (see object.h). If -// this causes problems (e.g. link errors), set this to 0. You may need to set -// this to 0 if using templates (at least for VC++). This switch is currently -// ignored for mingw / cygwin / CodeWarrior -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_NEW_ALWAYS 0 - -// wxHandleFatalExceptions() may be used to catch the program faults at run -// time and, instead of terminating the program with a usual GPF message box, -// call the user-defined wxApp::OnFatalException() function. If you set -// wxUSE_ON_FATAL_EXCEPTION to 0, wxHandleFatalExceptions() will not work. -// -// This setting is for Win32 only and can only be enabled if your compiler -// supports Win32 structured exception handling (currently only VC++ does) -// -// Default is 1 -// -// Recommended setting: 1 if your compiler supports it. -#define wxUSE_ON_FATAL_EXCEPTION 0 //zero 10-dec-2009 - -// Set this to 1 to be able to generate a human-readable (unlike -// machine-readable minidump created by wxCrashReport::Generate()) stack back -// trace when your program crashes using wxStackWalker -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_STACKWALKER 0 //zero 10-dec-2009 - -// Set this to 1 to compile in wxDebugReport class which allows you to create -// and optionally upload to your web site a debug report consisting of back -// trace of the crash (if wxUSE_STACKWALKER == 1) and other information. -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, it is compiled into a separate library so there -// is no overhead if you don't use it -#define wxUSE_DEBUGREPORT 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// Unicode support -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE to 1 to compile wxWidgets in Unicode mode: wxChar will be -// defined as wchar_t, wxString will use Unicode internally. If you set this -// to 1, you must use wxT() macro for all literal strings in the program. -// -// Unicode is currently only fully supported under Windows NT/2000/XP -// (Windows 9x doesn't support it and the programs compiled in Unicode mode -// will not run under 9x -- but see wxUSE_UNICODE_MSLU below). -// -// Default is 0 -// -// Recommended setting: 0 (unless you only plan to use Windows NT/2000/XP) -#ifndef wxUSE_UNICODE - #define wxUSE_UNICODE 0 -#endif - -// Setting wxUSE_WCHAR_T to 1 gives you some degree of Unicode support without -// compiling the program in Unicode mode. More precisely, it will be possible -// to construct wxString from a wide (Unicode) string and convert any wxString -// to Unicode. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_WCHAR_T 1 - -// ---------------------------------------------------------------------------- -// global features -// ---------------------------------------------------------------------------- - -// Compile library in exception-safe mode? If set to 1, the library will try to -// behave correctly in presence of exceptions (even though it still will not -// use the exceptions itself) and notify the user code about any unhandled -// exceptions. If set to 0, propagation of the exceptions through the library -// code will lead to undefined behaviour -- but the code itself will be -// slightly smaller and faster. -// -// Note that like wxUSE_THREADS this option is automatically set to 0 if -// wxNO_EXCEPTIONS is defined. -// -// Default is 1 -// -// Recommended setting: depends on whether you intend to use C++ exceptions -// in your own code (1 if you do, 0 if you don't) -#define wxUSE_EXCEPTIONS 1 - -// Set wxUSE_EXTENDED_RTTI to 1 to use extended RTTI -// -// Default is 0 -// -// 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<Foo*> and std::vector<Foo*>, 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. -// -// Default is 1 -// -// Recommended setting: 1 (always) -#define wxUSE_LOG 1 - -// Recommended setting: 1 -#define wxUSE_LOGWINDOW 0 //zero 10-dec-2009 - -// Recommended setting: 1 -#define wxUSE_LOGGUI 0 //zero 10-dec-2009 - -// Recommended setting: 1 -#define wxUSE_LOG_DIALOG 0 //zero 10-dec-2009 - -// Support for command line parsing using wxCmdLineParser class. -// -// Default is 1 -// -// Recommended setting: 1 (can be set to 0 if you don't use the cmd line) -#define wxUSE_CMDLINE_PARSER 0 //zero 10-dec-2009 - -// Support for multithreaded applications: if 1, compile in thread classes -// (thread.h) and make the library a bit more thread safe. Although thread -// support is quite stable by now, you may still consider recompiling the -// library without it if you have no use for it - this will result in a -// somewhat smaller and faster operation. -// -// Notice that if wxNO_THREADS is defined, wxUSE_THREADS is automatically reset -// to 0 in wx/chkconf.h, so, for example, if you set USE_THREADS to 0 in -// build/msw/config.* file this value will have no effect. -// -// Default is 1 -// -// Recommended setting: 0 unless you do plan to develop MT applications -#define wxUSE_THREADS 0 //zero 10-dec-2009 - -// If enabled, compiles wxWidgets streams classes -// -// wx stream classes are used for image IO, process IO redirection, network -// protocols implementation and much more and so disabling this results in a -// lot of other functionality being lost. -// -// Default is 1 -// -// Recommended setting: 1 as setting it to 0 disables many other things -#define wxUSE_STREAMS 0 //zero 10-dec-2009 - -// 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 1 //zero 10-dec-2009 - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// 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 header, 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_STRING 0 -#else - #define wxUSE_STD_STRING 1 -#endif - -// 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 -// of wxVsnprintf. The standard vsnprintf() supports positional parameters on -// many Unix systems but usually doesn't under Windows. -// -// Positional parameters are very useful when translating a program since using -// them in formatting strings allow translators to correctly reorder the -// translated sentences. -// -// Default is 1 -// -// Recommended setting: 1 if you want to support multiple languages -#define wxUSE_PRINTF_POS_PARAMS 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// non GUI features selection -// ---------------------------------------------------------------------------- - -// Set wxUSE_LONGLONG to 1 to compile the wxLongLong class. This is a 64 bit -// integer which is implemented in terms of native 64 bit integers if any or -// uses emulation otherwise. -// -// This class is required by wxDateTime and so you should enable it if you want -// to use wxDateTime. For most modern platforms, it will use the native 64 bit -// integers in which case (almost) all of its functions are inline and it -// almost does not take any space, so there should be no reason to switch it -// off. -// -// Recommended setting: 1 -#define wxUSE_LONGLONG 1 - -// Set wxUSE_(F)FILE to 1 to compile wx(F)File classes. wxFile uses low level -// POSIX functions for file access, wxFFile uses ANSI C stdio.h functions. -// -// Default is 1 -// -// Recommended setting: 1 (wxFile is highly recommended as it is required by -// i18n code, wxFileConfig and others) -#define wxUSE_FILE 1 -#define wxUSE_FFILE 1 - -// Use wxFSVolume class providing access to the configured/active mount points -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely disabled if you don't use it) -#define wxUSE_FSVOLUME 1 - -// Use wxStandardPaths class which allows to retrieve some standard locations -// in the file system -// -// Default is 1 -// -// Recommended setting: 1 (may be disabled to save space, but not much) -#define wxUSE_STDPATHS 1 - -// use wxTextBuffer class: required by wxTextFile -#define wxUSE_TEXTBUFFER 1 - -// use wxTextFile class: requires wxFile and wxTextBuffer, required by -// wxFileConfig -#define wxUSE_TEXTFILE 1 - -// i18n support: _() macro, wxLocale class. Requires wxTextFile. -#define wxUSE_INTL 0 //zero 10-dec-2009 - -// Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which -// allow to manipulate dates, times and time intervals. wxDateTime replaces the -// old wxTime and wxDate classes which are still provided for backwards -// compatibility (and implemented in terms of wxDateTime). -// -// Note that this class is relatively new and is still officially in alpha -// stage because some features are not yet (fully) implemented. It is already -// quite useful though and should only be disabled if you are aiming at -// absolutely minimal version of the library. -// -// Requires: wxUSE_LONGLONG -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_DATETIME 1 - -// Set wxUSE_TIMER to 1 to compile wxTimer class -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_TIMER 1 - -// Use wxStopWatch clas. -// -// Default is 1 -// -// Recommended setting: 1 (needed by wxSocket) -#define wxUSE_STOPWATCH 1 - -// Setting wxUSE_CONFIG to 1 enables the use of wxConfig and related classes -// which allow the application to store its settings in the persistent -// storage. Setting this to 1 will also enable on-demand creation of the -// global config object in wxApp. -// -// See also wxUSE_CONFIG_NATIVE below. -// -// Recommended setting: 1 -#define wxUSE_CONFIG 0 //zero 10-dec-2009 (might want this though) - -// If wxUSE_CONFIG is 1, you may choose to use either the native config -// classes under Windows (using .INI files under Win16 and the registry under -// Win32) or the portable text file format used by the config classes under -// Unix. -// -// Default is 1 to use native classes. Note that you may still use -// wxFileConfig even if you set this to 1 - just the config object created by -// default for the applications needs will be a wxRegConfig or wxIniConfig and -// not wxFileConfig. -// -// Recommended setting: 1 -#define wxUSE_CONFIG_NATIVE 0 //zero 10-dec-2009 - -// If wxUSE_DIALUP_MANAGER is 1, compile in wxDialUpManager class which allows -// to connect/disconnect from the network and be notified whenever the dial-up -// network connection is established/terminated. Requires wxUSE_DYNAMIC_LOADER. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DIALUP_MANAGER 0 //zero 10-dec-2009 - -// Compile in classes for run-time DLL loading and function calling. -// Required by wxUSE_DIALUP_MANAGER. -// -// This setting is for Win32 only -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DYNLIB_CLASS 1 //zero 10-dec-2009 - I would like to disable it, but 64bit windows detection needs it - -// experimental, don't use for now -#define wxUSE_DYNAMIC_LOADER 1 //zero 10-dec-2009 - -// Set to 1 to use socket classes -#define wxUSE_SOCKETS 0 //zero 10-dec-2009 - -// Set to 1 to enable virtual file systems (required by wxHTML) -#define wxUSE_FILESYSTEM 0 //zero 10-dec-2009 - -// Set to 1 to enable virtual ZIP filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ZIP 0 //zero 10-dec-2009 - -// Set to 1 to enable virtual archive filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ARCHIVE 0 //zero 10-dec-2009 - -// Set to 1 to enable virtual Internet filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_INET 0 //zero 10-dec-2009 - -// wxArchive classes for accessing archives such as zip and tar -#define wxUSE_ARCHIVE_STREAMS 0 //zero 10-dec-2009 - -// Set to 1 to compile wxZipInput/OutputStream classes. -#define wxUSE_ZIPSTREAM 0 //zero 10-dec-2009 - -// Set to 1 to compile wxTarInput/OutputStream classes. -#define wxUSE_TARSTREAM 0 //zero 10-dec-2009 - -// Set to 1 to compile wxZlibInput/OutputStream classes. Also required by -// wxUSE_LIBPNG -#define wxUSE_ZLIB 0 //zero 10-dec-2009 - -// If enabled, the code written by Apple will be used to write, in a portable -// way, float on the disk. See extended.c for the license which is different -// from wxWidgets one. -// -// Default is 1. -// -// Recommended setting: 1 unless you don't like the license terms (unlikely) -#define wxUSE_APPLE_IEEE 0 //zero 10-dec-2009 - -// Joystick support class -#define wxUSE_JOYSTICK 0 //zero 10-dec-2009 - -// wxFontMapper class -#define wxUSE_FONTMAP 1 //zero 10-dec-2009 - -// wxMimeTypesManager class -#define wxUSE_MIMETYPE 0 //zero 10-dec-2009 - -// wxProtocol and related classes: if you want to use either of wxFTP, wxHTTP -// or wxURL you need to set this to 1. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_PROTOCOL 0 //zero 10-dec-2009 - -// The settings for the individual URL schemes -#define wxUSE_PROTOCOL_FILE 0 //zero 10-dec-2009 -#define wxUSE_PROTOCOL_FTP 0 //zero 10-dec-2009 -#define wxUSE_PROTOCOL_HTTP 0 //zero 10-dec-2009 - -// Define this to use wxURL class. -#define wxUSE_URL 0 //zero 10-dec-2009 - -// Define this to use native platform url and protocol support. -// Currently valid only for MS-Windows. -// Note: if you set this to 1, you can open ftp/http/gopher sites -// and obtain a valid input stream for these sites -// even when you set wxUSE_PROTOCOL_FTP/HTTP to 0. -// Doing so reduces the code size. -// -// This code is experimental and subject to change. -#define wxUSE_URL_NATIVE 0 - -// Support for wxVariant class used in several places throughout the library, -// notably in wxDataViewCtrl API. -// -// Default is 1. -// -// Recommended setting: 1 unless you want to reduce the library size as much as -// possible in which case setting this to 0 can gain up to 100KB. -#define wxUSE_VARIANT 0 //zero 10-dec-2009 - -// Support for regular expression matching via wxRegEx class: enable this to -// use POSIX regular expressions in your code. You need to compile regex -// library from src/regex to use it under Windows. -// -// Default is 0 -// -// Recommended setting: 1 if your compiler supports it, if it doesn't please -// contribute us a makefile for src/regex for it -#define wxUSE_REGEX 0 //zero 10-dec-2009 - -// wxSystemOptions class -#define wxUSE_SYSTEM_OPTIONS 1 - -// wxSound class -#define wxUSE_SOUND 0 //zero 10-dec-2009 - -// Use wxMediaCtrl -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_MEDIACTRL 0 //zero 10-dec-2009 - -// Use GStreamer for Unix (req a lot of dependancies) -// -// Default is 0 -// -// Recommended setting: 1 (wxMediaCtrl won't work by default without it) -#define wxUSE_GSTREAMER 0 - -// Use wxWidget's XRC XML-based resource system. Recommended. -// -// Default is 1 -// -// Recommended setting: 1 (requires wxUSE_XML) -#define wxUSE_XRC 1 - -// XML parsing classes. Note that their API will change in the future, so -// using wxXmlDocument and wxXmlNode in your app is not recommended. -// -// Default is the same as wxUSE_XRC, i.e. 1 by default. -// -// Recommended setting: 1 (required by XRC) -#define wxUSE_XML wxUSE_XRC - -// Use wxWidget's AUI docking system -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_AUI 1 - - -// Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced -// 2D drawing API. (Still somewhat experimental) -// -// Please note that on Windows you will need to link with gdiplus.lib (use -// USE_GDIPLUS=1 for makefile builds) and distribute gdiplus.dll with your -// application if you want it to be runnable on pre-XP systems. -// -// Default is 0 -// -// Recommended setting: 1 -#ifndef wxUSE_GRAPHICS_CONTEXT -#define wxUSE_GRAPHICS_CONTEXT 0 -#endif - -// ---------------------------------------------------------------------------- -// Individual GUI controls -// ---------------------------------------------------------------------------- - -// You must set wxUSE_CONTROLS to 1 if you are using any controls at all -// (without it, wxControl class is not compiled) -// -// Default is 1 -// -// Recommended setting: 1 (don't change except for very special programs) -#define wxUSE_CONTROLS 1 - -// wxPopupWindow class is a top level transient window. It is currently used -// to implement wxTipWindow -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0 if you don't wxUSE_TIPWINDOW) -#define wxUSE_POPUPWIN 1 - -// wxTipWindow allows to implement the custom tooltips, it is used by the -// context help classes. Requires wxUSE_POPUPWIN. -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0) -#define wxUSE_TIPWINDOW 1 - -// Each of the settings below corresponds to one wxWidgets control. They are -// all switched on by default but may be disabled if you are sure that your -// program (including any standard dialogs it can show!) doesn't need them and -// if you desperately want to save some space. If you use any of these you must -// set wxUSE_CONTROLS as well. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl -#define wxUSE_BUTTON 1 // wxButton -#define wxUSE_BMPBUTTON 1 // wxBitmapButton -#define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl -#define wxUSE_CHECKBOX 1 // wxCheckBox -#define wxUSE_CHECKLISTBOX 1 // wxCheckListBox (requires wxUSE_OWNER_DRAWN) -#define wxUSE_CHOICE 1 // wxChoice -#define wxUSE_COLLPANE 1 // wxCollapsiblePane -#define wxUSE_COLOURPICKERCTRL 1 // wxColourPickerCtrl -#define wxUSE_COMBOBOX 1 // wxComboBox -#define wxUSE_DATAVIEWCTRL 0 // wxDataViewCtrl //zero 10-dec-2009 -#define wxUSE_DATEPICKCTRL 1 // wxDatePickerCtrl -#define wxUSE_DIRPICKERCTRL 1 // wxDirPickerCtrl -#define wxUSE_FILEPICKERCTRL 1 // wxFilePickerCtrl -#define wxUSE_FONTPICKERCTRL 1 // wxFontPickerCtrl -#define wxUSE_GAUGE 1 // wxGauge -#define wxUSE_HYPERLINKCTRL 1 // wxHyperlinkCtrl -#define wxUSE_LISTBOX 1 // wxListBox -#define wxUSE_LISTCTRL 1 // wxListCtrl -#define wxUSE_RADIOBOX 1 // wxRadioBox -#define wxUSE_RADIOBTN 1 // wxRadioButton -#define wxUSE_SCROLLBAR 1 // wxScrollBar -#define wxUSE_SEARCHCTRL 1 // wxSearchCtrl -#define wxUSE_SLIDER 1 // wxSlider -#define wxUSE_SPINBTN 1 // wxSpinButton -#define wxUSE_SPINCTRL 1 // wxSpinCtrl -#define wxUSE_STATBOX 1 // wxStaticBox -#define wxUSE_STATLINE 1 // wxStaticLine -#define wxUSE_STATTEXT 1 // wxStaticText -#define wxUSE_STATBMP 1 // wxStaticBitmap -#define wxUSE_TEXTCTRL 1 // wxTextCtrl -#define wxUSE_TOGGLEBTN 1 // requires wxButton -#define wxUSE_TREECTRL 1 // wxTreeCtrl - -// Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR -// below either wxStatusBar95 or a generic wxStatusBar will be used. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_STATUSBAR 1 - -// Two status bar implementations are available under Win32: the generic one -// or the wrapper around native control. For native look and feel the native -// version should be used. -// -// Default is 1 for the platforms where native status bar is supported. -// -// Recommended setting: 1 (there is no advantage in using the generic one) -#define wxUSE_NATIVE_STATUSBAR 1 - -// wxToolBar related settings: if wxUSE_TOOLBAR is 0, don't compile any toolbar -// classes at all. Otherwise, use the native toolbar class unless -// wxUSE_TOOLBAR_NATIVE is 0. -// -// Default is 1 for all settings. -// -// Recommended setting: 1 for wxUSE_TOOLBAR and wxUSE_TOOLBAR_NATIVE. -#define wxUSE_TOOLBAR 1 -#define wxUSE_TOOLBAR_NATIVE 1 - -// wxNotebook is a control with several "tabs" located on one of its sides. It -// may be used to logically organise the data presented to the user instead of -// putting everything in one huge dialog. It replaces wxTabControl and related -// classes of wxWin 1.6x. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_NOTEBOOK 1 - -// wxListbook control is similar to wxNotebook but uses wxListCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_LISTBOOK 1 - -// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CHOICEBOOK 1 - -// wxTreebook control is similar to wxNotebook but uses wxTreeCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TREEBOOK 1 - -// wxToolbook control is similar to wxNotebook but uses wxToolBar instead of -// tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLBOOK 1 - -// wxTabDialog is a generic version of wxNotebook but it is incompatible with -// the new class. It shouldn't be used in new code. -// -// Default is 0. -// -// Recommended setting: 0 (use wxNotebook) -#define wxUSE_TAB_DIALOG 0 - -// wxGrid class -// -// Default is 1, set to 0 to cut down compilation time and binaries size if you -// don't use it. -// -// Recommended setting: 1 -// -#define wxUSE_GRID 1 - -// wxMiniFrame class: a frame with narrow title bar -// -// Default is 1. -// -// Recommended setting: 1 (it doesn't cost almost anything) -#define wxUSE_MINIFRAME 1 - -// wxComboCtrl and related classes: combobox with custom popup window and -// not necessarily a listbox. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 except for wxUniv where it -// it used by wxComboBox -#define wxUSE_COMBOCTRL 1 - -// wxOwnerDrawnComboBox is a custom combobox allowing to paint the combobox -// items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0, except where it is -// needed as a base class for generic wxBitmapComboBox. -#define wxUSE_ODCOMBOBOX 1 - -// wxBitmapComboBox is a combobox that can have images in front of text items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 -#define wxUSE_BITMAPCOMBOBOX 1 - -// ---------------------------------------------------------------------------- -// Miscellaneous GUI stuff -// ---------------------------------------------------------------------------- - -// wxAcceleratorTable/Entry classes and support for them in wxMenu(Bar) -#define wxUSE_ACCEL 1 - -// Hotkey support (currently Windows only) -#define wxUSE_HOTKEY 0 //zero 10-dec-2009 - -// Use wxCaret: a class implementing a "cursor" in a text control (called caret -// under Windows). -// -// Default is 1. -// -// Recommended setting: 1 (can be safely set to 0, not used by the library) -#define wxUSE_CARET 1 - -// Use wxDisplay class: it allows enumerating all displays on a system and -// their geometries as well as finding the display on which the given point or -// window lies. -// -// Default is 1. -// -// Recommended setting: 1 if you need it, can be safely set to 0 otherwise -#define wxUSE_DISPLAY 0 //zero 10-dec-2009 - -// Miscellaneous geometry code: needed for Canvas library -#define wxUSE_GEOMETRY 1 - -// Use wxImageList. This class is needed by wxNotebook, wxTreeCtrl and -// wxListCtrl. -// -// Default is 1. -// -// Recommended setting: 1 (set it to 0 if you don't use any of the controls -// enumerated above, then this class is mostly useless too) -#define wxUSE_IMAGLIST 1 - -// Use wxMenu, wxMenuBar, wxMenuItem. -// -// Default is 1. -// -// Recommended setting: 1 (can't be disabled under MSW) -#define wxUSE_MENUS 1 - -// Use wxSashWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SASH 1 - -// Use wxSplitterWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SPLITTER 1 - -// Use wxToolTip and wxWindow::Set/GetToolTip() methods. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLTIPS 1 - -// wxValidator class and related methods -#define wxUSE_VALIDATORS 1 - -// ---------------------------------------------------------------------------- -// common dialogs -// ---------------------------------------------------------------------------- - -// On rare occasions (e.g. using DJGPP) may want to omit common dialogs (e.g. -// file selector, printer dialog). Switching this off also switches off the -// printing architecture and interactive wxPrinterDC. -// -// Default is 1 -// -// Recommended setting: 1 (unless it really doesn't work) -#define wxUSE_COMMON_DIALOGS 1 - -// wxBusyInfo displays window with message when app is busy. Works in same way -// as wxBusyCursor -#define wxUSE_BUSYINFO 1 - -// Use single/multiple choice dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_CHOICEDLG 1 - -// Use colour picker dialog -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_COLOURDLG 1 - -// wxDirDlg class for getting a directory name from user -#define wxUSE_DIRDLG 1 - -// TODO: setting to choose the generic or native one - -// Use file open/save dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in many places in the library itself) -#define wxUSE_FILEDLG 1 - -// Use find/replace dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely set to 0) -#define wxUSE_FINDREPLDLG 1 - -// Use font picker dialog -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_FONTDLG 1 - -// Use wxMessageDialog and wxMessageBox. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_MSGDLG 1 - -// progress dialog class for lengthy operations -#define wxUSE_PROGRESSDLG 1 - -// support for startup tips (wxShowTip &c) -#define wxUSE_STARTUP_TIPS 1 - -// text entry dialog and wxGetTextFromUser function -#define wxUSE_TEXTDLG 1 - -// number entry dialog -#define wxUSE_NUMBERDLG 1 - -// splash screen class -#define wxUSE_SPLASH 0 //zero 10-dec-2009 - -// wizards -#define wxUSE_WIZARDDLG 1 - -// Compile in wxAboutBox() function showing the standard "About" dialog. -// -// Default is 1 -// -// Recommended setting: 1 but can be set to 0 to save some space if you don't -// use this function -#define wxUSE_ABOUTDLG 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// Metafiles support -// ---------------------------------------------------------------------------- - -// Windows supports the graphics format known as metafile which is, though not -// portable, is widely used under Windows and so is supported by wxWin (under -// Windows only, of course). Win16 (Win3.1) used the so-called "Window -// MetaFiles" or WMFs which were replaced with "Enhanced MetaFiles" or EMFs in -// Win32 (Win9x, NT, 2000). Both of these are supported in wxWin and, by -// default, WMFs will be used under Win16 and EMFs under Win32. This may be -// changed by setting wxUSE_WIN_METAFILES_ALWAYS to 1 and/or setting -// wxUSE_ENH_METAFILE to 0. You may also set wxUSE_METAFILE to 0 to not compile -// in any metafile related classes at all. -// -// Default is 1 for wxUSE_ENH_METAFILE and 0 for wxUSE_WIN_METAFILES_ALWAYS. -// -// Recommended setting: default or 0 for everything for portable programs. -#define wxUSE_METAFILE 0 //zero 10-dec-2009 -#define wxUSE_ENH_METAFILE 0 //zero 10-dec-2009 -#define wxUSE_WIN_METAFILES_ALWAYS 0 - -// ---------------------------------------------------------------------------- -// Big GUI components -// ---------------------------------------------------------------------------- - -// Set to 0 to disable MDI support. -// -// Requires wxUSE_NOTEBOOK under platforms other than MSW. -// -// Default is 1. -// -// Recommended setting: 1, can be safely set to 0. -#define wxUSE_MDI 1 - -// Set to 0 to disable document/view architecture -#define wxUSE_DOC_VIEW_ARCHITECTURE 1 - -// Set to 0 to disable MDI document/view architecture -// -// Requires wxUSE_MDI && wxUSE_DOC_VIEW_ARCHITECTURE -#define wxUSE_MDI_ARCHITECTURE 1 - -// Set to 0 to disable print/preview architecture code -#define wxUSE_PRINTING_ARCHITECTURE 0 //zero 10-dec-2009 - -// wxHTML sublibrary allows to display HTML in wxWindow programs and much, -// much more. -// -// Default is 1. -// -// Recommended setting: 1 (wxHTML is great!), set to 0 if you want compile a -// smaller library. -#define wxUSE_HTML 0 //zero 10-dec-2009 - -// Setting wxUSE_GLCANVAS to 1 enables OpenGL support. You need to have OpenGL -// headers and libraries to be able to compile the library with wxUSE_GLCANVAS -// set to 1. Note that for some compilers (notably Microsoft Visual C++) you -// will need to manually add opengl32.lib and glu32.lib to the list of -// libraries linked with your program if you use OpenGL. -// -// Default is 0. -// -// Recommended setting: 1 if you intend to use OpenGL, 0 otherwise -#define wxUSE_GLCANVAS 0 - -// wxRichTextCtrl allows editing of styled text. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 if you want compile a -// smaller library. -#define wxUSE_RICHTEXT 1 - -// ---------------------------------------------------------------------------- -// Data transfer -// ---------------------------------------------------------------------------- - -// Use wxClipboard class for clipboard copy/paste. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CLIPBOARD 1 - -// Use wxDataObject and related classes. Needed for clipboard and OLE drag and -// drop -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DATAOBJ 1 - -// Use wxDropTarget and wxDropSource classes for drag and drop (this is -// different from "built in" drag and drop in wxTreeCtrl which is always -// available). Requires wxUSE_DATAOBJ. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DRAG_AND_DROP 1 - -// Use wxAccessible for enhanced and customisable accessibility. -// Depends on wxUSE_OLE. -// -// Default is 0. -// -// Recommended setting (at present): 0 -#define wxUSE_ACCESSIBILITY 0 - -// ---------------------------------------------------------------------------- -// miscellaneous settings -// ---------------------------------------------------------------------------- - -// wxSingleInstanceChecker class allows to verify at startup if another program -// instance is running. -// -// Default is 1 -// -// Recommended setting: 1 (the class is tiny, disabling it won't save much -// space) -#define wxUSE_SNGLINST_CHECKER 1 - -#define wxUSE_DRAGIMAGE 1 - -#define wxUSE_IPC 0 //zero 10-dec-2009 - // 0 for no interprocess comms -#define wxUSE_HELP 0 //zero 10-dec-2009 - // 0 for no help facility - -// Should we use MS HTML help for wxHelpController? If disabled, neither -// wxCHMHelpController nor wxBestHelpController are available. -// -// Default is 1 under MSW, 0 is always used for the other platforms. -// -// Recommended setting: 1, only set to 0 if you have trouble compiling -// wxCHMHelpController (could be a problem with really ancient compilers) -#define wxUSE_MS_HTML_HELP 0 //zero 10-dec-2009 - - -// Use wxHTML-based help controller? -#define wxUSE_WXHTML_HELP 0 //zero 10-dec-2009 - -#define wxUSE_RESOURCES 0 - // 0 for no wxGetResource/wxWriteResource -#define wxUSE_CONSTRAINTS 1 - // 0 for no window layout constraint system - -#define wxUSE_SPLINES 1 - // 0 for no splines - -#define wxUSE_MOUSEWHEEL 1 - // Include mouse wheel support - -// ---------------------------------------------------------------------------- -// postscript support settings -// ---------------------------------------------------------------------------- - -// Set to 1 for PostScript device context. -#define wxUSE_POSTSCRIPT 0 - -// Set to 1 to use font metric files in GetTextExtent -#define wxUSE_AFM_FOR_POSTSCRIPT 1 - -// ---------------------------------------------------------------------------- -// database classes -// ---------------------------------------------------------------------------- - -// Define 1 to use ODBC classes -#define wxUSE_ODBC 0 - -// For backward compatibility reasons, this parameter now only controls the -// default scrolling method used by cursors. This default behavior can be -// overriden by setting the second param of wxDB::wxDbGetConnection() or -// wxDb() constructor to indicate whether the connection (and any wxDbTable()s -// that use the connection) should support forward only scrolling of cursors, -// or both forward and backward support for backward scrolling cursors is -// dependent on the data source as well as the ODBC driver being used. -#define wxODBC_FWD_ONLY_CURSORS 1 - -// Default is 0. Set to 1 to use the deprecated classes, enum types, function, -// member variables. With a setting of 1, full backward compatibility with the -// 2.0.x release is possible. It is STRONGLY recommended that this be set to 0, -// as future development will be done only on the non-deprecated -// functions/classes/member variables/etc. -#define wxODBC_BACKWARD_COMPATABILITY 0 - -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. -// -// Default is 1. -// -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows <iostream> and <iostream.h> but you can't mix -// them. Set to 1 for <iostream.h>, 0 for <iostream>. Note that VC++ 7.1 -// and later doesn't support wxUSE_IOSTREAMH == 1 and so <iostream> will be -// used anyhow. -// -// Default is 1. -// -// Recommended setting: whatever your compiler likes more -#define wxUSE_IOSTREAMH 1 - -// ---------------------------------------------------------------------------- -// image format support -// ---------------------------------------------------------------------------- - -// wxImage supports many different image formats which can be configured at -// compile-time. BMP is always supported, others are optional and can be safely -// disabled if you don't plan to use images in such format sometimes saving -// substantial amount of code in the final library. -// -// Some formats require an extra library which is included in wxWin sources -// which is mentioned if it is the case. - -// Set to 1 for wxImage support (recommended). -#define wxUSE_IMAGE 1 //zero 10-dec-2009 - -// Set to 1 for PNG format support (requires libpng). Also requires wxUSE_ZLIB. -#define wxUSE_LIBPNG 0 //zero 10-dec-2009 - -// Set to 1 for JPEG format support (requires libjpeg) -#define wxUSE_LIBJPEG 0 //zero 10-dec-2009 - -// Set to 1 for TIFF format support (requires libtiff) -#define wxUSE_LIBTIFF 0 //zero 10-dec-2009 - -// Set to 1 for TGA format support (loading only) -#define wxUSE_TGA 0 //zero 10-dec-2009 - -// Set to 1 for GIF format support -#define wxUSE_GIF 0 //zero 10-dec-2009 - -// Set to 1 for PNM format support -#define wxUSE_PNM 0 //zero 10-dec-2009 - -// Set to 1 for PCX format support -#define wxUSE_PCX 0 //zero 10-dec-2009 - -// Set to 1 for IFF format support (Amiga format) -#define wxUSE_IFF 0 - -// Set to 1 for XPM format support -#define wxUSE_XPM 0 //zero 10-dec-2009 - -// Set to 1 for MS Icons and Cursors format support -#define wxUSE_ICO_CUR 1 - -// Set to 1 to compile in wxPalette class -#define wxUSE_PALETTE 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// wxUniversal-only options -// ---------------------------------------------------------------------------- - -// Set to 1 to enable compilation of all themes, this is the default -#define wxUSE_ALL_THEMES 1 - -// Set to 1 to enable the compilation of individual theme if wxUSE_ALL_THEMES -// is unset, if it is set these options are not used; notice that metal theme -// uses Win32 one -#define wxUSE_THEME_GTK 0 -#define wxUSE_THEME_METAL 0 -#define wxUSE_THEME_MONO 0 -#define wxUSE_THEME_WIN32 0 - - -/* --- end common options --- */ - -// ---------------------------------------------------------------------------- -// Windows-only settings -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE_MSLU to 1 if you're compiling wxWidgets in Unicode mode -// and want to run your programs under Windows 9x and not only NT/2000/XP. -// This setting enables use of unicows.dll from MSLU (MS Layer for Unicode, see -// http://www.microsoft.com/globaldev/handson/dev/mslu_announce.mspx). Note -// that you will have to modify the makefiles to include unicows.lib import -// library as the first library (see installation instructions in install.txt -// to learn how to do it when building the library or samples). -// -// If your compiler doesn't have unicows.lib, you can get a version of it at -// http://libunicows.sourceforge.net -// -// Default is 0 -// -// Recommended setting: 0 (1 if you want to deploy Unicode apps on 9x systems) -#ifndef wxUSE_UNICODE_MSLU - #define wxUSE_UNICODE_MSLU 0 -#endif - -// Set this to 1 if you want to use wxWidgets and MFC in the same program. This -// will override some other settings (see below) -// -// Default is 0. -// -// Recommended setting: 0 unless you really have to use MFC -#define wxUSE_MFC 0 - -// Set this to 1 for generic OLE support: this is required for drag-and-drop, -// clipboard, OLE Automation. Only set it to 0 if your compiler is very old and -// can't compile/doesn't have the OLE headers. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_OLE 1 - -// Set this to 1 to enable wxAutomationObject class. -// -// Default is 1. -// -// Recommended setting: 1 if you need to control other applications via OLE -// Automation, can be safely set to 0 otherwise -#define wxUSE_OLE_AUTOMATION 1 - -// Set this to 1 to enable wxActiveXContainer class allowing to embed OLE -// controls in wx. -// -// Default is 1. -// -// Recommended setting: 1, required by wxMediaCtrl -#define wxUSE_ACTIVEX 1 - -// wxDC cacheing implementation -#define wxUSE_DC_CACHEING 1 - -// Set this to 1 to enable the use of DIB's for wxBitmap to support -// bitmaps > 16MB on Win95/98/Me. Set to 0 to use DDB's only. -#define wxUSE_DIB_FOR_BITMAP 0 - -// Set this to 1 to enable wxDIB class used internally for manipulating -// wxBitmao data. -// -// Default is 1, set it to 0 only if you don't use wxImage neither -// -// Recommended setting: 1 (without it conversion to/from wxImage won't work) -#define wxUSE_WXDIB 1 - -// Set to 0 to disable PostScript print/preview architecture code under Windows -// (just use Windows printing). -#define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 1 - -// Set this to 1 to use RICHEDIT controls for wxTextCtrl with style wxTE_RICH -// which allows to put more than ~32Kb of text in it even under Win9x (NT -// doesn't have such limitation). -// -// Default is 1 for compilers which support it -// -// Recommended setting: 1, only set it to 0 if your compiler doesn't have -// or can't compile <richedit.h> -#define wxUSE_RICHEDIT 1 - -// Set this to 1 to use extra features of richedit v2 and later controls -// -// Default is 1 for compilers which support it -// -// Recommended setting: 1 -#define wxUSE_RICHEDIT2 1 - -// Set this to 1 to enable support for the owner-drawn menu and listboxes. This -// is required by wxUSE_CHECKLISTBOX. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 for a small library size reduction -#define wxUSE_OWNER_DRAWN 1 - -// Set to 1 to compile MS Windows XP theme engine support -#define wxUSE_UXTHEME 0 //zero 10-dec-2009 - -// Set to 1 to auto-adapt to MS Windows XP themes where possible -// (notably, wxNotebook pages) -#define wxUSE_UXTHEME_AUTO 0 //zero 10-dec-2009 - -// Set to 1 to use InkEdit control (Tablet PC), if available -#define wxUSE_INKEDIT 0 - -// ---------------------------------------------------------------------------- -// Generic versions of native controls -// ---------------------------------------------------------------------------- - -// Set this to 1 to be able to use wxDatePickerCtrlGeneric in addition to the -// native wxDatePickerCtrl -// -// Default is 0. -// -// Recommended setting: 0, this is mainly used for testing -#define wxUSE_DATEPICKCTRL_GENERIC 0 - -// ---------------------------------------------------------------------------- -// Crash debugging helpers -// ---------------------------------------------------------------------------- - -// Set this to 1 to be able to use wxCrashReport::Generate() to create mini -// dumps of your program when it crashes (or at any other moment) -// -// Default is 1 if supported by the compiler (VC++ and recent BC++ only). -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_CRASHREPORT 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// obsolete settings -// ---------------------------------------------------------------------------- - -// NB: all settings in this section are obsolete and should not be used/changed -// at all, they will disappear - -// Define 1 to use bitmap messages. -#define wxUSE_BITMAP_MESSAGE 1 - -#endif // _WX_SETUP_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/setup0.h b/desmume/src/windows/wx/include/wx/msw/setup0.h deleted file mode 100644 index 5df4a4ec1..000000000 --- a/desmume/src/windows/wx/include/wx/msw/setup0.h +++ /dev/null @@ -1,1349 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/setup.h -// Purpose: Configuration for the library -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: setup0.h 51451 2008-01-29 23:11:55Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SETUP_H_ -#define _WX_SETUP_H_ - -/* --- start common options --- */ -// ---------------------------------------------------------------------------- -// global settings -// ---------------------------------------------------------------------------- - -// define this to 0 when building wxBase library - this can also be done from -// makefile/project file overriding the value here -#ifndef wxUSE_GUI - #define wxUSE_GUI 1 -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// compatibility settings -// ---------------------------------------------------------------------------- - -// This setting determines the compatibility with 2.4 API: set it to 1 to -// enable it but please consider updating your code instead. -// -// Default is 0 -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_4 0 - -// This setting determines the compatibility with 2.6 API: set it to 0 to -// flag all cases of using deprecated functions. -// -// Default is 1 but please try building your code with 0 as the default will -// change to 0 in the next version and the deprecated functions will disappear -// in the version after it completely. -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_6 1 - -// MSW-only: Set to 0 for accurate dialog units, else 1 for old behaviour when -// default system font is used for wxWindow::GetCharWidth/Height() instead of -// the current font. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxDIALOG_UNIT_COMPATIBILITY 0 - -// ---------------------------------------------------------------------------- -// debugging settings -// ---------------------------------------------------------------------------- - -// Generic comment about debugging settings: they are very useful if you don't -// use any other memory leak detection tools such as Purify/BoundsChecker, but -// are probably redundant otherwise. Also, Visual C++ CRT has the same features -// as wxWidgets memory debugging subsystem built in since version 5.0 and you -// may prefer to use it instead of built in memory debugging code because it is -// faster and more fool proof. -// -// Using VC++ CRT memory debugging is enabled by default in debug mode -// (__WXDEBUG__) if wxUSE_GLOBAL_MEMORY_OPERATORS is *not* enabled (i.e. is 0) -// and if __NO_VC_CRTDBG__ is not defined. - -// If 1, enables wxDebugContext, for writing error messages to file, etc. If -// __WXDEBUG__ is not defined, will still use the normal memory operators. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_CONTEXT 0 - -// If 1, enables debugging versions of wxObject::new and wxObject::delete *IF* -// __WXDEBUG__ is also defined. -// -// WARNING: this code may not work with all architectures, especially if -// alignment is an issue. This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 1 if you are not using a memory debugging tool, else 0 -#define wxUSE_MEMORY_TRACING 0 - -// In debug mode, cause new and delete to be redefined globally. -// If this causes problems (e.g. link errors which is a common problem -// especially if you use another library which also redefines the global new -// and delete), set this to 0. -// This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -// In debug mode, causes new to be defined to be WXDEBUG_NEW (see object.h). If -// this causes problems (e.g. link errors), set this to 0. You may need to set -// this to 0 if using templates (at least for VC++). This switch is currently -// ignored for mingw / cygwin / CodeWarrior -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_NEW_ALWAYS 0 - -// wxHandleFatalExceptions() may be used to catch the program faults at run -// time and, instead of terminating the program with a usual GPF message box, -// call the user-defined wxApp::OnFatalException() function. If you set -// wxUSE_ON_FATAL_EXCEPTION to 0, wxHandleFatalExceptions() will not work. -// -// This setting is for Win32 only and can only be enabled if your compiler -// supports Win32 structured exception handling (currently only VC++ does) -// -// Default is 1 -// -// Recommended setting: 1 if your compiler supports it. -#define wxUSE_ON_FATAL_EXCEPTION 1 - -// Set this to 1 to be able to generate a human-readable (unlike -// machine-readable minidump created by wxCrashReport::Generate()) stack back -// trace when your program crashes using wxStackWalker -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_STACKWALKER 1 - -// Set this to 1 to compile in wxDebugReport class which allows you to create -// and optionally upload to your web site a debug report consisting of back -// trace of the crash (if wxUSE_STACKWALKER == 1) and other information. -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, it is compiled into a separate library so there -// is no overhead if you don't use it -#define wxUSE_DEBUGREPORT 1 - -// ---------------------------------------------------------------------------- -// Unicode support -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE to 1 to compile wxWidgets in Unicode mode: wxChar will be -// defined as wchar_t, wxString will use Unicode internally. If you set this -// to 1, you must use wxT() macro for all literal strings in the program. -// -// Unicode is currently only fully supported under Windows NT/2000/XP -// (Windows 9x doesn't support it and the programs compiled in Unicode mode -// will not run under 9x -- but see wxUSE_UNICODE_MSLU below). -// -// Default is 0 -// -// Recommended setting: 0 (unless you only plan to use Windows NT/2000/XP) -#ifndef wxUSE_UNICODE - #define wxUSE_UNICODE 0 -#endif - -// Setting wxUSE_WCHAR_T to 1 gives you some degree of Unicode support without -// compiling the program in Unicode mode. More precisely, it will be possible -// to construct wxString from a wide (Unicode) string and convert any wxString -// to Unicode. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_WCHAR_T 1 - -// ---------------------------------------------------------------------------- -// global features -// ---------------------------------------------------------------------------- - -// Compile library in exception-safe mode? If set to 1, the library will try to -// behave correctly in presence of exceptions (even though it still will not -// use the exceptions itself) and notify the user code about any unhandled -// exceptions. If set to 0, propagation of the exceptions through the library -// code will lead to undefined behaviour -- but the code itself will be -// slightly smaller and faster. -// -// Note that like wxUSE_THREADS this option is automatically set to 0 if -// wxNO_EXCEPTIONS is defined. -// -// Default is 1 -// -// Recommended setting: depends on whether you intend to use C++ exceptions -// in your own code (1 if you do, 0 if you don't) -#define wxUSE_EXCEPTIONS 1 - -// Set wxUSE_EXTENDED_RTTI to 1 to use extended RTTI -// -// Default is 0 -// -// 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<Foo*> and std::vector<Foo*>, 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. -// -// Default is 1 -// -// Recommended setting: 1 (always) -#define wxUSE_LOG 1 - -// Recommended setting: 1 -#define wxUSE_LOGWINDOW 1 - -// Recommended setting: 1 -#define wxUSE_LOGGUI 1 - -// Recommended setting: 1 -#define wxUSE_LOG_DIALOG 1 - -// Support for command line parsing using wxCmdLineParser class. -// -// Default is 1 -// -// Recommended setting: 1 (can be set to 0 if you don't use the cmd line) -#define wxUSE_CMDLINE_PARSER 1 - -// Support for multithreaded applications: if 1, compile in thread classes -// (thread.h) and make the library a bit more thread safe. Although thread -// support is quite stable by now, you may still consider recompiling the -// library without it if you have no use for it - this will result in a -// somewhat smaller and faster operation. -// -// Notice that if wxNO_THREADS is defined, wxUSE_THREADS is automatically reset -// to 0 in wx/chkconf.h, so, for example, if you set USE_THREADS to 0 in -// build/msw/config.* file this value will have no effect. -// -// Default is 1 -// -// Recommended setting: 0 unless you do plan to develop MT applications -#define wxUSE_THREADS 1 - -// If enabled, compiles wxWidgets streams classes -// -// wx stream classes are used for image IO, process IO redirection, network -// protocols implementation and much more and so disabling this results in a -// lot of other functionality being lost. -// -// Default is 1 -// -// Recommended setting: 1 as setting it to 0 disables many other things -#define wxUSE_STREAMS 1 - -// 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 0 - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// 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 header, 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_STRING 0 -#else - #define wxUSE_STD_STRING 1 -#endif - -// 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 -// of wxVsnprintf. The standard vsnprintf() supports positional parameters on -// many Unix systems but usually doesn't under Windows. -// -// Positional parameters are very useful when translating a program since using -// them in formatting strings allow translators to correctly reorder the -// translated sentences. -// -// Default is 1 -// -// Recommended setting: 1 if you want to support multiple languages -#define wxUSE_PRINTF_POS_PARAMS 1 - -// ---------------------------------------------------------------------------- -// non GUI features selection -// ---------------------------------------------------------------------------- - -// Set wxUSE_LONGLONG to 1 to compile the wxLongLong class. This is a 64 bit -// integer which is implemented in terms of native 64 bit integers if any or -// uses emulation otherwise. -// -// This class is required by wxDateTime and so you should enable it if you want -// to use wxDateTime. For most modern platforms, it will use the native 64 bit -// integers in which case (almost) all of its functions are inline and it -// almost does not take any space, so there should be no reason to switch it -// off. -// -// Recommended setting: 1 -#define wxUSE_LONGLONG 1 - -// Set wxUSE_(F)FILE to 1 to compile wx(F)File classes. wxFile uses low level -// POSIX functions for file access, wxFFile uses ANSI C stdio.h functions. -// -// Default is 1 -// -// Recommended setting: 1 (wxFile is highly recommended as it is required by -// i18n code, wxFileConfig and others) -#define wxUSE_FILE 1 -#define wxUSE_FFILE 1 - -// Use wxFSVolume class providing access to the configured/active mount points -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely disabled if you don't use it) -#define wxUSE_FSVOLUME 1 - -// Use wxStandardPaths class which allows to retrieve some standard locations -// in the file system -// -// Default is 1 -// -// Recommended setting: 1 (may be disabled to save space, but not much) -#define wxUSE_STDPATHS 1 - -// use wxTextBuffer class: required by wxTextFile -#define wxUSE_TEXTBUFFER 1 - -// use wxTextFile class: requires wxFile and wxTextBuffer, required by -// wxFileConfig -#define wxUSE_TEXTFILE 1 - -// i18n support: _() macro, wxLocale class. Requires wxTextFile. -#define wxUSE_INTL 1 - -// Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which -// allow to manipulate dates, times and time intervals. wxDateTime replaces the -// old wxTime and wxDate classes which are still provided for backwards -// compatibility (and implemented in terms of wxDateTime). -// -// Note that this class is relatively new and is still officially in alpha -// stage because some features are not yet (fully) implemented. It is already -// quite useful though and should only be disabled if you are aiming at -// absolutely minimal version of the library. -// -// Requires: wxUSE_LONGLONG -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_DATETIME 1 - -// Set wxUSE_TIMER to 1 to compile wxTimer class -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_TIMER 1 - -// Use wxStopWatch clas. -// -// Default is 1 -// -// Recommended setting: 1 (needed by wxSocket) -#define wxUSE_STOPWATCH 1 - -// Setting wxUSE_CONFIG to 1 enables the use of wxConfig and related classes -// which allow the application to store its settings in the persistent -// storage. Setting this to 1 will also enable on-demand creation of the -// global config object in wxApp. -// -// See also wxUSE_CONFIG_NATIVE below. -// -// Recommended setting: 1 -#define wxUSE_CONFIG 1 - -// If wxUSE_CONFIG is 1, you may choose to use either the native config -// classes under Windows (using .INI files under Win16 and the registry under -// Win32) or the portable text file format used by the config classes under -// Unix. -// -// Default is 1 to use native classes. Note that you may still use -// wxFileConfig even if you set this to 1 - just the config object created by -// default for the applications needs will be a wxRegConfig or wxIniConfig and -// not wxFileConfig. -// -// Recommended setting: 1 -#define wxUSE_CONFIG_NATIVE 1 - -// If wxUSE_DIALUP_MANAGER is 1, compile in wxDialUpManager class which allows -// to connect/disconnect from the network and be notified whenever the dial-up -// network connection is established/terminated. Requires wxUSE_DYNAMIC_LOADER. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DIALUP_MANAGER 1 - -// Compile in classes for run-time DLL loading and function calling. -// Required by wxUSE_DIALUP_MANAGER. -// -// This setting is for Win32 only -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DYNLIB_CLASS 1 - -// experimental, don't use for now -#define wxUSE_DYNAMIC_LOADER 1 - -// Set to 1 to use socket classes -#define wxUSE_SOCKETS 1 - -// Set to 1 to enable virtual file systems (required by wxHTML) -#define wxUSE_FILESYSTEM 1 - -// Set to 1 to enable virtual ZIP filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ZIP 1 - -// Set to 1 to enable virtual archive filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ARCHIVE 1 - -// Set to 1 to enable virtual Internet filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_INET 1 - -// wxArchive classes for accessing archives such as zip and tar -#define wxUSE_ARCHIVE_STREAMS 1 - -// Set to 1 to compile wxZipInput/OutputStream classes. -#define wxUSE_ZIPSTREAM 1 - -// Set to 1 to compile wxTarInput/OutputStream classes. -#define wxUSE_TARSTREAM 1 - -// Set to 1 to compile wxZlibInput/OutputStream classes. Also required by -// wxUSE_LIBPNG -#define wxUSE_ZLIB 1 - -// If enabled, the code written by Apple will be used to write, in a portable -// way, float on the disk. See extended.c for the license which is different -// from wxWidgets one. -// -// Default is 1. -// -// Recommended setting: 1 unless you don't like the license terms (unlikely) -#define wxUSE_APPLE_IEEE 1 - -// Joystick support class -#define wxUSE_JOYSTICK 1 - -// wxFontMapper class -#define wxUSE_FONTMAP 1 - -// wxMimeTypesManager class -#define wxUSE_MIMETYPE 1 - -// wxProtocol and related classes: if you want to use either of wxFTP, wxHTTP -// or wxURL you need to set this to 1. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_PROTOCOL 1 - -// The settings for the individual URL schemes -#define wxUSE_PROTOCOL_FILE 1 -#define wxUSE_PROTOCOL_FTP 1 -#define wxUSE_PROTOCOL_HTTP 1 - -// Define this to use wxURL class. -#define wxUSE_URL 1 - -// Define this to use native platform url and protocol support. -// Currently valid only for MS-Windows. -// Note: if you set this to 1, you can open ftp/http/gopher sites -// and obtain a valid input stream for these sites -// even when you set wxUSE_PROTOCOL_FTP/HTTP to 0. -// Doing so reduces the code size. -// -// This code is experimental and subject to change. -#define wxUSE_URL_NATIVE 0 - -// Support for wxVariant class used in several places throughout the library, -// notably in wxDataViewCtrl API. -// -// Default is 1. -// -// Recommended setting: 1 unless you want to reduce the library size as much as -// possible in which case setting this to 0 can gain up to 100KB. -#define wxUSE_VARIANT 1 - -// Support for regular expression matching via wxRegEx class: enable this to -// use POSIX regular expressions in your code. You need to compile regex -// library from src/regex to use it under Windows. -// -// Default is 0 -// -// Recommended setting: 1 if your compiler supports it, if it doesn't please -// contribute us a makefile for src/regex for it -#define wxUSE_REGEX 1 - -// wxSystemOptions class -#define wxUSE_SYSTEM_OPTIONS 1 - -// wxSound class -#define wxUSE_SOUND 1 - -// Use wxMediaCtrl -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_MEDIACTRL 1 - -// Use GStreamer for Unix (req a lot of dependancies) -// -// Default is 0 -// -// Recommended setting: 1 (wxMediaCtrl won't work by default without it) -#define wxUSE_GSTREAMER 0 - -// Use wxWidget's XRC XML-based resource system. Recommended. -// -// Default is 1 -// -// Recommended setting: 1 (requires wxUSE_XML) -#define wxUSE_XRC 1 - -// XML parsing classes. Note that their API will change in the future, so -// using wxXmlDocument and wxXmlNode in your app is not recommended. -// -// Default is the same as wxUSE_XRC, i.e. 1 by default. -// -// Recommended setting: 1 (required by XRC) -#define wxUSE_XML wxUSE_XRC - -// Use wxWidget's AUI docking system -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_AUI 1 - - -// Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced -// 2D drawing API. (Still somewhat experimental) -// -// Please note that on Windows you will need to link with gdiplus.lib (use -// USE_GDIPLUS=1 for makefile builds) and distribute gdiplus.dll with your -// application if you want it to be runnable on pre-XP systems. -// -// Default is 0 -// -// Recommended setting: 1 -#ifndef wxUSE_GRAPHICS_CONTEXT -#define wxUSE_GRAPHICS_CONTEXT 0 -#endif - -// ---------------------------------------------------------------------------- -// Individual GUI controls -// ---------------------------------------------------------------------------- - -// You must set wxUSE_CONTROLS to 1 if you are using any controls at all -// (without it, wxControl class is not compiled) -// -// Default is 1 -// -// Recommended setting: 1 (don't change except for very special programs) -#define wxUSE_CONTROLS 1 - -// wxPopupWindow class is a top level transient window. It is currently used -// to implement wxTipWindow -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0 if you don't wxUSE_TIPWINDOW) -#define wxUSE_POPUPWIN 1 - -// wxTipWindow allows to implement the custom tooltips, it is used by the -// context help classes. Requires wxUSE_POPUPWIN. -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0) -#define wxUSE_TIPWINDOW 1 - -// Each of the settings below corresponds to one wxWidgets control. They are -// all switched on by default but may be disabled if you are sure that your -// program (including any standard dialogs it can show!) doesn't need them and -// if you desperately want to save some space. If you use any of these you must -// set wxUSE_CONTROLS as well. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl -#define wxUSE_BUTTON 1 // wxButton -#define wxUSE_BMPBUTTON 1 // wxBitmapButton -#define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl -#define wxUSE_CHECKBOX 1 // wxCheckBox -#define wxUSE_CHECKLISTBOX 1 // wxCheckListBox (requires wxUSE_OWNER_DRAWN) -#define wxUSE_CHOICE 1 // wxChoice -#define wxUSE_COLLPANE 1 // wxCollapsiblePane -#define wxUSE_COLOURPICKERCTRL 1 // wxColourPickerCtrl -#define wxUSE_COMBOBOX 1 // wxComboBox -#define wxUSE_DATAVIEWCTRL 1 // wxDataViewCtrl -#define wxUSE_DATEPICKCTRL 1 // wxDatePickerCtrl -#define wxUSE_DIRPICKERCTRL 1 // wxDirPickerCtrl -#define wxUSE_FILEPICKERCTRL 1 // wxFilePickerCtrl -#define wxUSE_FONTPICKERCTRL 1 // wxFontPickerCtrl -#define wxUSE_GAUGE 1 // wxGauge -#define wxUSE_HYPERLINKCTRL 1 // wxHyperlinkCtrl -#define wxUSE_LISTBOX 1 // wxListBox -#define wxUSE_LISTCTRL 1 // wxListCtrl -#define wxUSE_RADIOBOX 1 // wxRadioBox -#define wxUSE_RADIOBTN 1 // wxRadioButton -#define wxUSE_SCROLLBAR 1 // wxScrollBar -#define wxUSE_SEARCHCTRL 1 // wxSearchCtrl -#define wxUSE_SLIDER 1 // wxSlider -#define wxUSE_SPINBTN 1 // wxSpinButton -#define wxUSE_SPINCTRL 1 // wxSpinCtrl -#define wxUSE_STATBOX 1 // wxStaticBox -#define wxUSE_STATLINE 1 // wxStaticLine -#define wxUSE_STATTEXT 1 // wxStaticText -#define wxUSE_STATBMP 1 // wxStaticBitmap -#define wxUSE_TEXTCTRL 1 // wxTextCtrl -#define wxUSE_TOGGLEBTN 1 // requires wxButton -#define wxUSE_TREECTRL 1 // wxTreeCtrl - -// Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR -// below either wxStatusBar95 or a generic wxStatusBar will be used. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_STATUSBAR 1 - -// Two status bar implementations are available under Win32: the generic one -// or the wrapper around native control. For native look and feel the native -// version should be used. -// -// Default is 1 for the platforms where native status bar is supported. -// -// Recommended setting: 1 (there is no advantage in using the generic one) -#define wxUSE_NATIVE_STATUSBAR 1 - -// wxToolBar related settings: if wxUSE_TOOLBAR is 0, don't compile any toolbar -// classes at all. Otherwise, use the native toolbar class unless -// wxUSE_TOOLBAR_NATIVE is 0. -// -// Default is 1 for all settings. -// -// Recommended setting: 1 for wxUSE_TOOLBAR and wxUSE_TOOLBAR_NATIVE. -#define wxUSE_TOOLBAR 1 -#define wxUSE_TOOLBAR_NATIVE 1 - -// wxNotebook is a control with several "tabs" located on one of its sides. It -// may be used to logically organise the data presented to the user instead of -// putting everything in one huge dialog. It replaces wxTabControl and related -// classes of wxWin 1.6x. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_NOTEBOOK 1 - -// wxListbook control is similar to wxNotebook but uses wxListCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_LISTBOOK 1 - -// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CHOICEBOOK 1 - -// wxTreebook control is similar to wxNotebook but uses wxTreeCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TREEBOOK 1 - -// wxToolbook control is similar to wxNotebook but uses wxToolBar instead of -// tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLBOOK 1 - -// wxTabDialog is a generic version of wxNotebook but it is incompatible with -// the new class. It shouldn't be used in new code. -// -// Default is 0. -// -// Recommended setting: 0 (use wxNotebook) -#define wxUSE_TAB_DIALOG 0 - -// wxGrid class -// -// Default is 1, set to 0 to cut down compilation time and binaries size if you -// don't use it. -// -// Recommended setting: 1 -// -#define wxUSE_GRID 1 - -// wxMiniFrame class: a frame with narrow title bar -// -// Default is 1. -// -// Recommended setting: 1 (it doesn't cost almost anything) -#define wxUSE_MINIFRAME 1 - -// wxComboCtrl and related classes: combobox with custom popup window and -// not necessarily a listbox. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 except for wxUniv where it -// it used by wxComboBox -#define wxUSE_COMBOCTRL 1 - -// wxOwnerDrawnComboBox is a custom combobox allowing to paint the combobox -// items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0, except where it is -// needed as a base class for generic wxBitmapComboBox. -#define wxUSE_ODCOMBOBOX 1 - -// wxBitmapComboBox is a combobox that can have images in front of text items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 -#define wxUSE_BITMAPCOMBOBOX 1 - -// ---------------------------------------------------------------------------- -// Miscellaneous GUI stuff -// ---------------------------------------------------------------------------- - -// wxAcceleratorTable/Entry classes and support for them in wxMenu(Bar) -#define wxUSE_ACCEL 1 - -// Hotkey support (currently Windows only) -#define wxUSE_HOTKEY 1 - -// Use wxCaret: a class implementing a "cursor" in a text control (called caret -// under Windows). -// -// Default is 1. -// -// Recommended setting: 1 (can be safely set to 0, not used by the library) -#define wxUSE_CARET 1 - -// Use wxDisplay class: it allows enumerating all displays on a system and -// their geometries as well as finding the display on which the given point or -// window lies. -// -// Default is 1. -// -// Recommended setting: 1 if you need it, can be safely set to 0 otherwise -#define wxUSE_DISPLAY 1 - -// Miscellaneous geometry code: needed for Canvas library -#define wxUSE_GEOMETRY 1 - -// Use wxImageList. This class is needed by wxNotebook, wxTreeCtrl and -// wxListCtrl. -// -// Default is 1. -// -// Recommended setting: 1 (set it to 0 if you don't use any of the controls -// enumerated above, then this class is mostly useless too) -#define wxUSE_IMAGLIST 1 - -// Use wxMenu, wxMenuBar, wxMenuItem. -// -// Default is 1. -// -// Recommended setting: 1 (can't be disabled under MSW) -#define wxUSE_MENUS 1 - -// Use wxSashWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SASH 1 - -// Use wxSplitterWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SPLITTER 1 - -// Use wxToolTip and wxWindow::Set/GetToolTip() methods. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLTIPS 1 - -// wxValidator class and related methods -#define wxUSE_VALIDATORS 1 - -// ---------------------------------------------------------------------------- -// common dialogs -// ---------------------------------------------------------------------------- - -// On rare occasions (e.g. using DJGPP) may want to omit common dialogs (e.g. -// file selector, printer dialog). Switching this off also switches off the -// printing architecture and interactive wxPrinterDC. -// -// Default is 1 -// -// Recommended setting: 1 (unless it really doesn't work) -#define wxUSE_COMMON_DIALOGS 1 - -// wxBusyInfo displays window with message when app is busy. Works in same way -// as wxBusyCursor -#define wxUSE_BUSYINFO 1 - -// Use single/multiple choice dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_CHOICEDLG 1 - -// Use colour picker dialog -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_COLOURDLG 1 - -// wxDirDlg class for getting a directory name from user -#define wxUSE_DIRDLG 1 - -// TODO: setting to choose the generic or native one - -// Use file open/save dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in many places in the library itself) -#define wxUSE_FILEDLG 1 - -// Use find/replace dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely set to 0) -#define wxUSE_FINDREPLDLG 1 - -// Use font picker dialog -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_FONTDLG 1 - -// Use wxMessageDialog and wxMessageBox. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_MSGDLG 1 - -// progress dialog class for lengthy operations -#define wxUSE_PROGRESSDLG 1 - -// support for startup tips (wxShowTip &c) -#define wxUSE_STARTUP_TIPS 1 - -// text entry dialog and wxGetTextFromUser function -#define wxUSE_TEXTDLG 1 - -// number entry dialog -#define wxUSE_NUMBERDLG 1 - -// splash screen class -#define wxUSE_SPLASH 1 - -// wizards -#define wxUSE_WIZARDDLG 1 - -// Compile in wxAboutBox() function showing the standard "About" dialog. -// -// Default is 1 -// -// Recommended setting: 1 but can be set to 0 to save some space if you don't -// use this function -#define wxUSE_ABOUTDLG 1 - -// ---------------------------------------------------------------------------- -// Metafiles support -// ---------------------------------------------------------------------------- - -// Windows supports the graphics format known as metafile which is, though not -// portable, is widely used under Windows and so is supported by wxWin (under -// Windows only, of course). Win16 (Win3.1) used the so-called "Window -// MetaFiles" or WMFs which were replaced with "Enhanced MetaFiles" or EMFs in -// Win32 (Win9x, NT, 2000). Both of these are supported in wxWin and, by -// default, WMFs will be used under Win16 and EMFs under Win32. This may be -// changed by setting wxUSE_WIN_METAFILES_ALWAYS to 1 and/or setting -// wxUSE_ENH_METAFILE to 0. You may also set wxUSE_METAFILE to 0 to not compile -// in any metafile related classes at all. -// -// Default is 1 for wxUSE_ENH_METAFILE and 0 for wxUSE_WIN_METAFILES_ALWAYS. -// -// Recommended setting: default or 0 for everything for portable programs. -#define wxUSE_METAFILE 1 -#define wxUSE_ENH_METAFILE 1 -#define wxUSE_WIN_METAFILES_ALWAYS 0 - -// ---------------------------------------------------------------------------- -// Big GUI components -// ---------------------------------------------------------------------------- - -// Set to 0 to disable MDI support. -// -// Requires wxUSE_NOTEBOOK under platforms other than MSW. -// -// Default is 1. -// -// Recommended setting: 1, can be safely set to 0. -#define wxUSE_MDI 1 - -// Set to 0 to disable document/view architecture -#define wxUSE_DOC_VIEW_ARCHITECTURE 1 - -// Set to 0 to disable MDI document/view architecture -// -// Requires wxUSE_MDI && wxUSE_DOC_VIEW_ARCHITECTURE -#define wxUSE_MDI_ARCHITECTURE 1 - -// Set to 0 to disable print/preview architecture code -#define wxUSE_PRINTING_ARCHITECTURE 1 - -// wxHTML sublibrary allows to display HTML in wxWindow programs and much, -// much more. -// -// Default is 1. -// -// Recommended setting: 1 (wxHTML is great!), set to 0 if you want compile a -// smaller library. -#define wxUSE_HTML 1 - -// Setting wxUSE_GLCANVAS to 1 enables OpenGL support. You need to have OpenGL -// headers and libraries to be able to compile the library with wxUSE_GLCANVAS -// set to 1. Note that for some compilers (notably Microsoft Visual C++) you -// will need to manually add opengl32.lib and glu32.lib to the list of -// libraries linked with your program if you use OpenGL. -// -// Default is 0. -// -// Recommended setting: 1 if you intend to use OpenGL, 0 otherwise -#define wxUSE_GLCANVAS 0 - -// wxRichTextCtrl allows editing of styled text. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 if you want compile a -// smaller library. -#define wxUSE_RICHTEXT 1 - -// ---------------------------------------------------------------------------- -// Data transfer -// ---------------------------------------------------------------------------- - -// Use wxClipboard class for clipboard copy/paste. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CLIPBOARD 1 - -// Use wxDataObject and related classes. Needed for clipboard and OLE drag and -// drop -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DATAOBJ 1 - -// Use wxDropTarget and wxDropSource classes for drag and drop (this is -// different from "built in" drag and drop in wxTreeCtrl which is always -// available). Requires wxUSE_DATAOBJ. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DRAG_AND_DROP 1 - -// Use wxAccessible for enhanced and customisable accessibility. -// Depends on wxUSE_OLE. -// -// Default is 0. -// -// Recommended setting (at present): 0 -#define wxUSE_ACCESSIBILITY 0 - -// ---------------------------------------------------------------------------- -// miscellaneous settings -// ---------------------------------------------------------------------------- - -// wxSingleInstanceChecker class allows to verify at startup if another program -// instance is running. -// -// Default is 1 -// -// Recommended setting: 1 (the class is tiny, disabling it won't save much -// space) -#define wxUSE_SNGLINST_CHECKER 1 - -#define wxUSE_DRAGIMAGE 1 - -#define wxUSE_IPC 1 - // 0 for no interprocess comms -#define wxUSE_HELP 1 - // 0 for no help facility - -// Should we use MS HTML help for wxHelpController? If disabled, neither -// wxCHMHelpController nor wxBestHelpController are available. -// -// Default is 1 under MSW, 0 is always used for the other platforms. -// -// Recommended setting: 1, only set to 0 if you have trouble compiling -// wxCHMHelpController (could be a problem with really ancient compilers) -#define wxUSE_MS_HTML_HELP 1 - - -// Use wxHTML-based help controller? -#define wxUSE_WXHTML_HELP 1 - -#define wxUSE_RESOURCES 0 - // 0 for no wxGetResource/wxWriteResource -#define wxUSE_CONSTRAINTS 1 - // 0 for no window layout constraint system - -#define wxUSE_SPLINES 1 - // 0 for no splines - -#define wxUSE_MOUSEWHEEL 1 - // Include mouse wheel support - -// ---------------------------------------------------------------------------- -// postscript support settings -// ---------------------------------------------------------------------------- - -// Set to 1 for PostScript device context. -#define wxUSE_POSTSCRIPT 0 - -// Set to 1 to use font metric files in GetTextExtent -#define wxUSE_AFM_FOR_POSTSCRIPT 1 - -// ---------------------------------------------------------------------------- -// database classes -// ---------------------------------------------------------------------------- - -// Define 1 to use ODBC classes -#define wxUSE_ODBC 0 - -// For backward compatibility reasons, this parameter now only controls the -// default scrolling method used by cursors. This default behavior can be -// overriden by setting the second param of wxDB::wxDbGetConnection() or -// wxDb() constructor to indicate whether the connection (and any wxDbTable()s -// that use the connection) should support forward only scrolling of cursors, -// or both forward and backward support for backward scrolling cursors is -// dependent on the data source as well as the ODBC driver being used. -#define wxODBC_FWD_ONLY_CURSORS 1 - -// Default is 0. Set to 1 to use the deprecated classes, enum types, function, -// member variables. With a setting of 1, full backward compatibility with the -// 2.0.x release is possible. It is STRONGLY recommended that this be set to 0, -// as future development will be done only on the non-deprecated -// functions/classes/member variables/etc. -#define wxODBC_BACKWARD_COMPATABILITY 0 - -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. -// -// Default is 1. -// -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows <iostream> and <iostream.h> but you can't mix -// them. Set to 1 for <iostream.h>, 0 for <iostream>. Note that VC++ 7.1 -// and later doesn't support wxUSE_IOSTREAMH == 1 and so <iostream> will be -// used anyhow. -// -// Default is 1. -// -// Recommended setting: whatever your compiler likes more -#define wxUSE_IOSTREAMH 1 - -// ---------------------------------------------------------------------------- -// image format support -// ---------------------------------------------------------------------------- - -// wxImage supports many different image formats which can be configured at -// compile-time. BMP is always supported, others are optional and can be safely -// disabled if you don't plan to use images in such format sometimes saving -// substantial amount of code in the final library. -// -// Some formats require an extra library which is included in wxWin sources -// which is mentioned if it is the case. - -// Set to 1 for wxImage support (recommended). -#define wxUSE_IMAGE 1 - -// Set to 1 for PNG format support (requires libpng). Also requires wxUSE_ZLIB. -#define wxUSE_LIBPNG 1 - -// Set to 1 for JPEG format support (requires libjpeg) -#define wxUSE_LIBJPEG 1 - -// Set to 1 for TIFF format support (requires libtiff) -#define wxUSE_LIBTIFF 1 - -// Set to 1 for TGA format support (loading only) -#define wxUSE_TGA 1 - -// Set to 1 for GIF format support -#define wxUSE_GIF 1 - -// Set to 1 for PNM format support -#define wxUSE_PNM 1 - -// Set to 1 for PCX format support -#define wxUSE_PCX 1 - -// Set to 1 for IFF format support (Amiga format) -#define wxUSE_IFF 0 - -// Set to 1 for XPM format support -#define wxUSE_XPM 1 - -// Set to 1 for MS Icons and Cursors format support -#define wxUSE_ICO_CUR 1 - -// Set to 1 to compile in wxPalette class -#define wxUSE_PALETTE 1 - -// ---------------------------------------------------------------------------- -// wxUniversal-only options -// ---------------------------------------------------------------------------- - -// Set to 1 to enable compilation of all themes, this is the default -#define wxUSE_ALL_THEMES 1 - -// Set to 1 to enable the compilation of individual theme if wxUSE_ALL_THEMES -// is unset, if it is set these options are not used; notice that metal theme -// uses Win32 one -#define wxUSE_THEME_GTK 0 -#define wxUSE_THEME_METAL 0 -#define wxUSE_THEME_MONO 0 -#define wxUSE_THEME_WIN32 0 - - -/* --- end common options --- */ - -// ---------------------------------------------------------------------------- -// Windows-only settings -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE_MSLU to 1 if you're compiling wxWidgets in Unicode mode -// and want to run your programs under Windows 9x and not only NT/2000/XP. -// This setting enables use of unicows.dll from MSLU (MS Layer for Unicode, see -// http://www.microsoft.com/globaldev/handson/dev/mslu_announce.mspx). Note -// that you will have to modify the makefiles to include unicows.lib import -// library as the first library (see installation instructions in install.txt -// to learn how to do it when building the library or samples). -// -// If your compiler doesn't have unicows.lib, you can get a version of it at -// http://libunicows.sourceforge.net -// -// Default is 0 -// -// Recommended setting: 0 (1 if you want to deploy Unicode apps on 9x systems) -#ifndef wxUSE_UNICODE_MSLU - #define wxUSE_UNICODE_MSLU 0 -#endif - -// Set this to 1 if you want to use wxWidgets and MFC in the same program. This -// will override some other settings (see below) -// -// Default is 0. -// -// Recommended setting: 0 unless you really have to use MFC -#define wxUSE_MFC 0 - -// Set this to 1 for generic OLE support: this is required for drag-and-drop, -// clipboard, OLE Automation. Only set it to 0 if your compiler is very old and -// can't compile/doesn't have the OLE headers. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_OLE 1 - -// Set this to 1 to enable wxAutomationObject class. -// -// Default is 1. -// -// Recommended setting: 1 if you need to control other applications via OLE -// Automation, can be safely set to 0 otherwise -#define wxUSE_OLE_AUTOMATION 1 - -// Set this to 1 to enable wxActiveXContainer class allowing to embed OLE -// controls in wx. -// -// Default is 1. -// -// Recommended setting: 1, required by wxMediaCtrl -#define wxUSE_ACTIVEX 1 - -// wxDC cacheing implementation -#define wxUSE_DC_CACHEING 1 - -// Set this to 1 to enable the use of DIB's for wxBitmap to support -// bitmaps > 16MB on Win95/98/Me. Set to 0 to use DDB's only. -#define wxUSE_DIB_FOR_BITMAP 0 - -// Set this to 1 to enable wxDIB class used internally for manipulating -// wxBitmao data. -// -// Default is 1, set it to 0 only if you don't use wxImage neither -// -// Recommended setting: 1 (without it conversion to/from wxImage won't work) -#define wxUSE_WXDIB 1 - -// Set to 0 to disable PostScript print/preview architecture code under Windows -// (just use Windows printing). -#define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 1 - -// Set this to 1 to use RICHEDIT controls for wxTextCtrl with style wxTE_RICH -// which allows to put more than ~32Kb of text in it even under Win9x (NT -// doesn't have such limitation). -// -// Default is 1 for compilers which support it -// -// Recommended setting: 1, only set it to 0 if your compiler doesn't have -// or can't compile <richedit.h> -#define wxUSE_RICHEDIT 1 - -// Set this to 1 to use extra features of richedit v2 and later controls -// -// Default is 1 for compilers which support it -// -// Recommended setting: 1 -#define wxUSE_RICHEDIT2 1 - -// Set this to 1 to enable support for the owner-drawn menu and listboxes. This -// is required by wxUSE_CHECKLISTBOX. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 for a small library size reduction -#define wxUSE_OWNER_DRAWN 1 - -// Set to 1 to compile MS Windows XP theme engine support -#define wxUSE_UXTHEME 1 - -// Set to 1 to auto-adapt to MS Windows XP themes where possible -// (notably, wxNotebook pages) -#define wxUSE_UXTHEME_AUTO 1 - -// Set to 1 to use InkEdit control (Tablet PC), if available -#define wxUSE_INKEDIT 0 - -// ---------------------------------------------------------------------------- -// Generic versions of native controls -// ---------------------------------------------------------------------------- - -// Set this to 1 to be able to use wxDatePickerCtrlGeneric in addition to the -// native wxDatePickerCtrl -// -// Default is 0. -// -// Recommended setting: 0, this is mainly used for testing -#define wxUSE_DATEPICKCTRL_GENERIC 0 - -// ---------------------------------------------------------------------------- -// Crash debugging helpers -// ---------------------------------------------------------------------------- - -// Set this to 1 to be able to use wxCrashReport::Generate() to create mini -// dumps of your program when it crashes (or at any other moment) -// -// Default is 1 if supported by the compiler (VC++ and recent BC++ only). -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_CRASHREPORT 1 - -// ---------------------------------------------------------------------------- -// obsolete settings -// ---------------------------------------------------------------------------- - -// NB: all settings in this section are obsolete and should not be used/changed -// at all, they will disappear - -// Define 1 to use bitmap messages. -#define wxUSE_BITMAP_MESSAGE 1 - -#endif // _WX_SETUP_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/setup_microwin.h b/desmume/src/windows/wx/include/wx/msw/setup_microwin.h deleted file mode 100644 index eff9b63cf..000000000 --- a/desmume/src/windows/wx/include/wx/msw/setup_microwin.h +++ /dev/null @@ -1,1179 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/setup.h -// Purpose: Configuration for the library -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: setup_microwin.h 40766 2006-08-23 09:54:29Z VS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SETUP_H_ -#define _WX_SETUP_H_ - -// ---------------------------------------------------------------------------- -// global settings -// ---------------------------------------------------------------------------- - -//#define WXWIN_OS_DESCRIPTION wxT("MicroWindows") - -// define this to 0 when building wxBase library - this can also be done from -// makefile/project file overriding the value here -#ifndef wxUSE_GUI - #define wxUSE_GUI 1 -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// compatibility settings -// ---------------------------------------------------------------------------- - -// This setting determines the compatibility with 2.4 API: set it to 1 to -// enable it but please consider updating your code instead. -// -// Default is 0 -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_4 0 - -// This setting determines the compatibility with 2.6 API: set it to 0 to -// flag all cases of using deprecated functions. -// -// Default is 1 but please try building your code with 0 as the default will -// change to 0 in the next version and the deprecated functions will disappear -// in the version after it completely. -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_6 1 - -// Set to 0 for accurate dialog units, else 1 to be as per 2.1.16 and before. -// If migrating between versions, your dialogs may seem to shrink. -// -// Default is 1 -// -// Recommended setting: 0 (the new calculations are more correct!) -#define wxDIALOG_UNIT_COMPATIBILITY 1 - -// ---------------------------------------------------------------------------- -// debugging settings -// ---------------------------------------------------------------------------- - -// Generic comment about debugging settings: they are very useful if you don't -// use any other memory leak detection tools such as Purify/BoundsChecker, but -// are probably redundant otherwise. Also, Visual C++ CRT has the same features -// as wxWidgets memory debugging subsystem built in since version 5.0 and you -// may prefer to use it instead of built in memory debugging code because it is -// faster and more fool proof. -// -// Using VC++ CRT memory debugging is enabled by default in debug mode -// (__WXDEBUG__) if wxUSE_GLOBAL_MEMORY_OPERATORS is *not* enabled (i.e. is 0) -// and if __NO_VC_CRTDBG__ is not defined. - -// If 1, enables wxDebugContext, for writing error messages to file, etc. If -// __WXDEBUG__ is not defined, will still use normal memory operators. It's -// recommended to set this to 1, since you may well need to output an error log -// in a production version (or non-debugging beta). -// -// Default is 1. -// -// Recommended setting: 1 but see comment above -#define wxUSE_DEBUG_CONTEXT 1 - -// If 1, enables debugging versions of wxObject::new and wxObject::delete *IF* -// __WXDEBUG__ is also defined. -// -// WARNING: this code may not work with all architectures, especially if -// alignment is an issue. This switch is currently ignored for mingw / cygwin -// -// Default is 1 -// -// Recommended setting: 1 but see comment in the beginning of this section -#define wxUSE_MEMORY_TRACING 0 - -// In debug mode, cause new and delete to be redefined globally. -// If this causes problems (e.g. link errors), set this to 0. -// This switch is currently ignored for mingw / cygwin -// -// Default is 1 -// -// Recommended setting: 1 but see comment in the beginning of this section -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -// In debug mode, causes new to be defined to be WXDEBUG_NEW (see object.h). If -// this causes problems (e.g. link errors), set this to 0. You may need to set -// this to 0 if using templates (at least for VC++). This switch is currently -// ignored for mingw / cygwin -// -// Default is 1 -// -// Recommended setting: 1 but see comment in the beginning of this section -#define wxUSE_DEBUG_NEW_ALWAYS 0 - -// wxHandleFatalExceptions() may be used to catch the program faults at run -// time and, instead of terminating the program with a usual GPF message box, -// call the user-defined wxApp::OnFatalException() function. If you set -// wxUSE_ON_FATAL_EXCEPTION to 0, wxHandleFatalExceptions() will not work. -// -// This setting is for Win32 only and can only be enabled if your compiler -// supports Win32 structured exception handling (currently only VC++ does) -// -// Default is 1 -// -// Recommended setting: 1 if your compiler supports it. -#ifdef _MSC_VER - #define wxUSE_ON_FATAL_EXCEPTION 1 -#else - #define wxUSE_ON_FATAL_EXCEPTION 0 -#endif - -// ---------------------------------------------------------------------------- -// Unicode support -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE to 1 to compile wxWidgets in Unicode mode: wxChar will be -// defined as wchar_t, wxString will use Unicode internally. If you set this -// to 1, you must use wxT() macro for all literal strings in the program. -// -// Unicode is currently only fully supported under Windows NT/2000 (Windows 9x -// doesn't support it and the programs compiled in Unicode mode will not run -// under 9x). -// -// Default is 0 -// -// Recommended setting: 0 (unless you only plan to use Windows NT/2000) -#define wxUSE_UNICODE 0 - -// Set wxUSE_UNICODE_MSLU to 1 if you want to compile wxWidgets in Unicode mode -// and be able to run compiled apps under Windows 9x as well as NT/2000/XP. This -// setting enables use of unicows.dll from MSLU (MS Layer for Unicode, see -// http://www.microsoft.com/globaldev/Articles/mslu_announce.asp). Note that you -// will have to modify the makefiles to include unicows.lib import library as the first -// library. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_UNICODE_MSLU 0 - -// Setting wxUSE_WCHAR_T to 1 gives you some degree of Unicode support without -// compiling the program in Unicode mode. More precisely, it will be possible -// to construct wxString from a wide (Unicode) string and convert any wxString -// to Unicode. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_WCHAR_T 0 - -// ---------------------------------------------------------------------------- -// global features -// ---------------------------------------------------------------------------- - -// 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. -// -// Default is 1 -// -// Recommended setting: 1 (always) -#define wxUSE_LOG 1 - -// Support for command line parsing using wxCmdLineParser class. -// -// Default is 1 -// -// Recommended setting: 1 (can be set to 0 if you don't use the cmd line) -#define wxUSE_CMDLINE_PARSER 1 - -// Recommended setting: 1 -#define wxUSE_LOGWINDOW 1 - -// Recommended setting: 1 -#define wxUSE_LOGGUI 1 - -// Recommended setting: 1 -#define wxUSE_LOG_DIALOG 0 - -// Support for multithreaded applications: if 1, compile in thread classes -// (thread.h) and make the library a bit more thread safe. Although thread -// support is quite stable by now, you may still consider recompiling the -// library without it if you have no use for it - this will result in a -// somewhat smaller and faster operation. -// -// This is ignored under Win16, threads are only supported under Win32. -// -// Default is 1 -// -// Recommended setting: 0 unless you do plan to develop MT applications -#define wxUSE_THREADS 0 - -// If enabled (1), compiles wxWidgets streams classes -#define wxUSE_STREAMS 1 - -// Use standard C++ streams if 1. If 0, use wxWin streams implementation. -#define wxUSE_STD_IOSTREAM 0 - -// Use serialization (requires utils/serialize) -#define wxUSE_SERIAL 0 - -// ---------------------------------------------------------------------------- -// non GUI features selection -// ---------------------------------------------------------------------------- - -// Set wxUSE_LONGLONG to 1 to compile the wxLongLong class. This is a 64 bit -// integer which is implemented in terms of native 64 bit integers if any or -// uses emulation otherwise. -// -// This class is required by wxDateTime and so you should enable it if you want -// to use wxDateTime. For most modern platforms, it will use the native 64 bit -// integers in which case (almost) all of its functions are inline and it -// almost does not take any space, so there should be no reason to switch it -// off. -// -// Recommended setting: 1 -#define wxUSE_LONGLONG 1 - -// Set wxUSE_(F)FILE to 1 to compile wx(F)File classes. wxFile uses low level -// POSIX functions for file access, wxFFile uses ANSI C stdio.h functions. -// -// Default is 1 -// -// Recommended setting: 1 (wxFile is highly recommended as it is required by -// i18n code, wxFileConfig and others) -#define wxUSE_FILE 1 -#define wxUSE_FFILE 1 - -// use wxTextBuffer class: required by wxTextFile -#define wxUSE_TEXTBUFFER 1 - -// use wxTextFile class: requires wxFile and wxTextBuffer, required by -// wxFileConfig -#define wxUSE_TEXTFILE 1 - -// i18n support: _() macro, wxLocale class. Requires wxTextFile. -#define wxUSE_INTL 1 - -// Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which -// allow to manipulate dates, times and time intervals. wxDateTime replaces the -// old wxTime and wxDate classes which are still provided for backwards -// compatibility (and implemented in terms of wxDateTime). -// -// Note that this class is relatively new and is still officially in alpha -// stage because some features are not yet (fully) implemented. It is already -// quite useful though and should only be disabled if you are aiming at -// absolutely minimal version of the library. -// -// Requires: wxUSE_LONGLONG -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_DATETIME 1 - -// Set wxUSE_TIMER to 1 to compile wxTimer class -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_TIMER 1 - -// Use wxStopWatch clas. -// -// Default is 1 -// -// Recommended setting: 1 (needed by wxSocket) -#define wxUSE_STOPWATCH 1 - -// Setting wxUSE_CONFIG to 1 enables the use of wxConfig and related classes -// which allow the application to store its settings in the persistent -// storage. Setting this to 1 will also enable on-demand creation of the -// global config object in wxApp. -// -// See also wxUSE_CONFIG_NATIVE below. -// -// Recommended setting: 1 -#define wxUSE_CONFIG 1 - -// If wxUSE_CONFIG is 1, you may choose to use either the native config -// classes under Windows (using .INI files under Win16 and the registry under -// Win32) or the portable text file format used by the config classes under -// Unix. -// -// Default is 1 to use native classes. Note that you may still use -// wxFileConfig even if you set this to 1 - just the config object created by -// default for the applications needs will be a wxRegConfig or wxIniConfig and -// not wxFileConfig. -// -// Recommended setting: 1 -#define wxUSE_CONFIG_NATIVE 0 - -// If wxUSE_DIALUP_MANAGER is 1, compile in wxDialUpManager class which allows -// to connect/disconnect from the network and be notified whenever the dial-up -// network connection is established/terminated. Requires wxUSE_DYNLIB_CLASS. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DIALUP_MANAGER 0 - -// Compile in wxLibrary class for run-time DLL loading and function calling. -// Required by wxUSE_DIALUP_MANAGER. -// -// This setting is for Win32 only -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DYNAMIC_LOADER 0 - -#define wxUSE_DYNLIB_CLASS 0 - -// Set to 1 to use socket classes -#define wxUSE_SOCKETS 0 - -// Set to 1 to enable virtual file systems (required by wxHTML) -#define wxUSE_FILESYSTEM 0 - -// Set to 1 to enable virtual ZIP filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ZIP 0 - -// Set to 1 to enable virtual Internet filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_INET 0 - -// Set to 1 to compile wxZipInput/OutputStream classes. -#define wxUSE_ZIPSTREAM 0 - -// Set to 1 to compile wxZlibInput/OutputStream classes. Also required by -// wxUSE_LIBPNG. -#define wxUSE_ZLIB 0 - -// If enabled, the code written by Apple will be used to write, in a portable -// way, float on the disk. See extended.c for the license which is different -// from wxWidgets one. -// -// Default is 1. -// -// Recommended setting: 1 unless you don't like the license terms (unlikely) -#define wxUSE_APPLE_IEEE 1 - -// Joystick support class -#define wxUSE_JOYSTICK 1 - -// wxFontMapper class -#define wxUSE_FONTMAP 1 - -// wxMimeTypesManager class -#define wxUSE_MIMETYPE 0 - -// wxSystemOptions class -#define wxUSE_SYSTEM_OPTIONS 1 - -// Support for regular expression matching via wxRegEx class: enable this to -// use POSIX regular expressions in your code. You need to compile regex -// library from src/regex to use it under Windows. -// -// Default is 0 -// -// Recommended setting: 1 if your compiler supports it, if it doesn't please -// contribute us a makefile for src/regex for it -#define wxUSE_REGEX 0 - -// wxSound class -#define wxUSE_SOUND 0 - -// Use wxMediaCtrl -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_MEDIACTRL 1 - -// Use QuickTime -// -// Default is 0 -// -// Recommended setting: 1 if you have the QT SDK installed and you need it, else 0 -#define wxUSE_QUICKTIME 0 - -// Use DirectShow -// -// Default is 0 -// -// Recommended setting: 1 if the DirectX 7 SDK is installed (highly recommended), else 0 -#define wxUSE_DIRECTSHOW 1 - -// Use wxWidget's XRC XML-based resource system. Recommended. -// -// Default is 1 -// -// Recommended setting: 1 (requires wxUSE_XML) -#define wxUSE_XRC 1 - -// XML parsing classes. Note that their API will change in the future, so -// using wxXmlDocument and wxXmlNode in your app is not recommended. -// -// Default is 1 -// -// Recommended setting: 1 (required by XRC) -#if wxUSE_XRC -# define wxUSE_XML 1 -#else -# define wxUSE_XML 0 -#endif - -// ---------------------------------------------------------------------------- -// Individual GUI controls -// ---------------------------------------------------------------------------- - -// You must set wxUSE_CONTROLS to 1 if you are using any controls at all -// (without it, wxControl class is not compiled) -// -// Default is 1 -// -// Recommended setting: 1 (don't change except for very special programs) -#define wxUSE_CONTROLS 1 - -// wxPopupWindow class is not used currently by wxMSW -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_POPUPWIN 1 - -// wxTipWindow allows to implement the custom tooltips, it is used by the -// context help classes. Requires wxUSE_POPUPWIN. -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0) -#define wxUSE_TIPWINDOW 1 - -// Each of the settings below corresponds to one wxWidgets control. They are -// all switched on by default but may be disabled if you are sure that your -// program (including any standard dialogs it can show!) doesn't need them and -// if you desperately want to save some space. If you use any of these you must -// set wxUSE_CONTROLS as well. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_BUTTON 1 // wxButton -#define wxUSE_BMPBUTTON 1 // wxBitmapButton -#define wxUSE_CALENDARCTRL 0 // wxCalendarCtrl -#define wxUSE_CHECKBOX 1 // wxCheckBox -#define wxUSE_CHECKLISTBOX 1 // wxCheckListBox (requires wxUSE_OWNER_DRAWN) -#define wxUSE_CHOICE 1 // wxChoice -#define wxUSE_COMBOBOX 1 // wxComboBox -#define wxUSE_GAUGE 1 // wxGauge -#define wxUSE_LISTBOX 1 // wxListBox -#define wxUSE_LISTCTRL 0 // wxListCtrl -#define wxUSE_RADIOBOX 1 // wxRadioBox -#define wxUSE_RADIOBTN 1 // wxRadioButton -#define wxUSE_SCROLLBAR 1 // wxScrollBar -#define wxUSE_SLIDER 1 // wxSlider -#define wxUSE_SPINBTN 1 // wxSpinButton -#define wxUSE_SPINCTRL 1 // wxSpinCtrl -#define wxUSE_STATBOX 1 // wxStaticBox -#define wxUSE_STATLINE 1 // wxStaticLine -#define wxUSE_STATTEXT 1 // wxStaticText -#define wxUSE_STATBMP 1 // wxStaticBitmap -#define wxUSE_TEXTCTRL 1 // wxTextCtrl -#define wxUSE_TOGGLEBTN 0 // requires wxButton -#define wxUSE_TREECTRL 0 // wxTreeCtrl - -// Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR -// below either wxStatusBar95 or a generic wxStatusBar will be used. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_STATUSBAR 1 - -// Two status bar implementations are available under Win32: the generic one -// or the wrapper around native control. For native look and feel the native -// version should be used. -// -// Default is 1. -// -// Recommended setting: 1 (there is no advantage in using the generic one) -#define wxUSE_NATIVE_STATUSBAR 0 - -// wxToolBar related settings: if wxUSE_TOOLBAR is 0, don't compile any toolbar -// classes at all. Otherwise, use the native toolbar class unless -// wxUSE_TOOLBAR_NATIVE is 0. -// -// Default is 1 for all settings. -// -// Recommended setting: 1 for wxUSE_TOOLBAR and wxUSE_TOOLBAR_NATIVE. -#define wxUSE_TOOLBAR 0 -#define wxUSE_TOOLBAR_NATIVE 0 - -// wxNotebook is a control with several "tabs" located on one of its sides. It -// may be used ot logically organise the data presented to the user instead of -// putting everything in one huge dialog. It replaces wxTabControl and related -// classes of wxWin 1.6x. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_NOTEBOOK 1 - -// wxTabDialog is a generic version of wxNotebook but it is incompatible with -// the new class. It shouldn't be used in new code. -// -// Default is 0. -// -// Recommended setting: 0 (use wxNotebook) -#define wxUSE_TAB_DIALOG 0 - -// wxGrid class -// Default is 1 -// -#define wxUSE_GRID 0 - -// wxProperty[Value/Form/List] classes, used by Dialog Editor -#define wxUSE_PROPSHEET 0 - -// ---------------------------------------------------------------------------- -// Miscellaneous GUI stuff -// ---------------------------------------------------------------------------- - -// wxAcceleratorTable/Entry classes and support for them in wxMenu(Bar) -#define wxUSE_ACCEL 0 - -// Use wxCaret: a class implementing a "cursor" in a text control (called caret -// under Windows). -// -// Default is 1. -// -// Recommended setting: 1 (can be safely set to 0, not used by the library) -#define wxUSE_CARET 1 - -// Miscellaneous geometry code: needed for Canvas library -#define wxUSE_GEOMETRY 1 - -// Use wxImageList. This class is needed by wxNotebook, wxTreeCtrl and -// wxListCtrl. -// -// Default is 1. -// -// Recommended setting: 1 (set it to 0 if you don't use any of the controls -// enumerated above, then this class is mostly useless too) -#define wxUSE_IMAGLIST 1 - -// Use wxMenu, wxMenuBar, wxMenuItem. -// -// Default is 1. -// -// Recommended setting: 1 (can't be disabled under MSW) -#define wxUSE_MENUS 1 - -// Use wxSashWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SASH 1 - -// Use wxSplitterWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SPLITTER 1 - -// Use wxToolTip and wxWindow::Set/GetToolTip() methods. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLTIPS 0 - -// wxValidator class and related methods -#define wxUSE_VALIDATORS 0 - -// wxDC cacheing implementation -#define wxUSE_DC_CACHEING 0 - -// ---------------------------------------------------------------------------- -// common dialogs -// ---------------------------------------------------------------------------- - -// On rare occasions (e.g. using DJGPP) may want to omit common dialogs (e.g. -// file selector, printer dialog). Switching this off also switches off the -// printing architecture and interactive wxPrinterDC. -// -// Default is 1 -// -// Recommended setting: 1 (unless it really doesn't work) -#define wxUSE_COMMON_DIALOGS 1 - -// wxBusyInfo displays window with message when app is busy. Works in same way -// as wxBusyCursor -#define wxUSE_BUSYINFO 0 - -// Use single/multiple choice dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_CHOICEDLG 1 - -// Use colour picker dialog -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_COLOURDLG 0 - -// wxDirDlg class for getting a directory name from user -#define wxUSE_DIRDLG 0 - -// TODO: setting to choose the generic or native one - -// Use file open/save dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in many places in the library itself) -#define wxUSE_FILEDLG 0 - -// Use find/replace dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely set to 0) -#define wxUSE_FINDREPLDLG 0 - -// Use font picker dialog -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_FONTDLG 0 - -// Use wxMessageDialog and wxMessageBox. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_MSGDLG 1 - -// progress dialog class for lengthy operations -#define wxUSE_PROGRESSDLG 0 - -// support for startup tips (wxShowTip &c) -#define wxUSE_STARTUP_TIPS 0 - -// text entry dialog and wxGetTextFromUser function -#define wxUSE_TEXTDLG 0 - -// number entry dialog -#define wxUSE_NUMBERDLG 0 - -// splash screen class -#define wxUSE_SPLASH 0 - -// wizards -#define wxUSE_WIZARDDLG 0 - -// ---------------------------------------------------------------------------- -// Metafiles support -// ---------------------------------------------------------------------------- - -// Windows supports the graphics format known as metafile which is, though not -// portable, is widely used under Windows and so is supported by wxWin (under -// Windows only, of course). Win16 (Win3.1) used the so-called "Window -// MetaFiles" or WMFs which were replaced with "Enhanced MetaFiles" or EMFs in -// Win32 (Win9x, NT, 2000). Both of these are supported in wxWin and, by -// default, WMFs will be used under Win16 and EMFs under Win32. This may be -// changed by setting wxUSE_WIN_METAFILES_ALWAYS to 1 and/or setting -// wxUSE_ENH_METAFILE to 0. You may also set wxUSE_METAFILE to 0 to not compile -// in any metafile related classes at all. -// -// Default is 1 for wxUSE_ENH_METAFILE and 0 for wxUSE_WIN_METAFILES_ALWAYS. -// -// Recommended setting: default or 0 for everything for portable programs. -#define wxUSE_METAFILE 0 -#define wxUSE_ENH_METAFILE 0 -#define wxUSE_WIN_METAFILES_ALWAYS 0 - -// ---------------------------------------------------------------------------- -// Big GUI components -// ---------------------------------------------------------------------------- - -// Set to 0 to disable document/view architecture -#define wxUSE_DOC_VIEW_ARCHITECTURE 0 - -// Set to 0 to disable MDI document/view architecture -#define wxUSE_MDI_ARCHITECTURE 0 - -// Set to 0 to disable print/preview architecture code -#define wxUSE_PRINTING_ARCHITECTURE 0 - -// wxHTML sublibrary allows to display HTML in wxWindow programs and much, -// much more. -// -// Default is 1. -// -// Recommended setting: 1 (wxHTML is great!), set to 0 if you want compile a -// smaller library. -#define wxUSE_HTML 0 - -// OpenGL canvas -#define wxUSE_GLCANVAS 0 - -// wxTreeLayout class -#define wxUSE_TREELAYOUT 0 - -// ---------------------------------------------------------------------------- -// Data transfer -// ---------------------------------------------------------------------------- - -// Use wxClipboard class for clipboard copy/paste. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CLIPBOARD 0 - -// Use wxDataObject and related classes. Needed for clipboard and OLE drag and -// drop -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DATAOBJ 0 - -// Use wxDropTarget and wxDropSource classes for drag and drop (this is -// different from "built in" drag and drop in wxTreeCtrl which is always -// available). Requires wxUSE_DATAOBJ. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DRAG_AND_DROP 0 - -// ---------------------------------------------------------------------------- -// miscellaneous settings -// ---------------------------------------------------------------------------- - -// wxSingleInstanceChecker class allows to verify at startup if another program -// instance is running (it is only available under Win32) -// -// Default is 1 -// -// Recommended setting: 1 (the class is tiny, disabling it won't save much -// space) -#define wxUSE_SNGLINST_CHECKER 0 - -#define wxUSE_DRAGIMAGE 0 - -#define wxUSE_IPC 0 - // 0 for no interprocess comms -#define wxUSE_HELP 0 - // 0 for no help facility -#define wxUSE_MS_HTML_HELP 0 - // 0 for no MS HTML Help - -// Use wxHTML-based help controller? -#define wxUSE_WXHTML_HELP 0 - -#define wxUSE_RESOURCES 0 - // 0 for no wxGetResource/wxWriteResource -#define wxUSE_CONSTRAINTS 1 - // 0 for no window layout constraint system - -#define wxUSE_SPLINES 1 - // 0 for no splines - -#define wxUSE_XPM_IN_MSW 1 - // 0 for no XPM support in wxBitmap. - // Default is 1, as XPM is now fully - // supported this makes easier the issue - // of portable icons and bitmaps. - -#define wxUSE_IMAGE_LOADING_IN_MSW 0 - // Use dynamic DIB loading/saving code in utils/dib under MSW. -#define wxUSE_RESOURCE_LOADING_IN_MSW 0 - // Use dynamic icon/cursor loading/saving code - // under MSW. -#define wxUSE_WX_RESOURCES 0 - // Use .wxr resource mechanism (requires PrologIO library) - -#define wxUSE_MOUSEWHEEL 0 - // Include mouse wheel support - -// ---------------------------------------------------------------------------- -// postscript support settings -// ---------------------------------------------------------------------------- - -// Set to 1 for PostScript device context. -#define wxUSE_POSTSCRIPT 0 - -// Set to 1 to use font metric files in GetTextExtent -#define wxUSE_AFM_FOR_POSTSCRIPT 0 - -// ---------------------------------------------------------------------------- -// database classes -// ---------------------------------------------------------------------------- - -// Define 1 to use ODBC classes -#define wxUSE_ODBC 0 - -// For backward compatibility reasons, this parameter now only controls the -// default scrolling method used by cursors. This default behavior can be -// overriden by setting the second param of wxDB::wxDbGetConnection() or -// wxDb() constructor to indicate whether the connection (and any wxDbTable()s -// that use the connection) should support forward only scrolling of cursors, -// or both forward and backward support for backward scrolling cursors is -// dependent on the data source as well as the ODBC driver being used. -#define wxODBC_FWD_ONLY_CURSORS 1 - -// Default is 0. Set to 1 to use the deprecated classes, enum types, function, -// member variables. With a setting of 1, full backward compatibility with the -// 2.0.x release is possible. It is STRONGLY recommended that this be set to 0, -// as future development will be done only on the non-deprecated -// functions/classes/member variables/etc. -#define wxODBC_BACKWARD_COMPATABILITY 0 - -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. -// -// Default is 1. -// -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows <iostream> and <iostream.h> but you can't mix -// them. Set to 1 for <iostream.h>, 0 for <iostream> -// -// Default is 1. -// -// Recommended setting: whatever your compiler likes more -#define wxUSE_IOSTREAMH 1 - -// ---------------------------------------------------------------------------- -// image format support -// ---------------------------------------------------------------------------- - -// wxImage supports many different image formats which can be configured at -// compile-time. BMP is always supported, others are optional and can be safely -// disabled if you don't plan to use images in such format sometimes saving -// substantial amount of code in the final library. -// -// Some formats require an extra library which is included in wxWin sources -// which is mentioned if it is the case. - -// Set to 1 for wxImage support (recommended). -#define wxUSE_IMAGE 1 - -// Set to 1 for PNG format support (requires libpng). Also requires wxUSE_ZLIB. -#define wxUSE_LIBPNG 0 - -// Set to 1 for JPEG format support (requires libjpeg) -#define wxUSE_LIBJPEG 0 - -// Set to 1 for TIFF format support (requires libtiff) -#define wxUSE_LIBTIFF 0 - -// Set to 1 for GIF format support -#define wxUSE_GIF 0 - -// Set to 1 for PNM format support -#define wxUSE_PNM 0 - -// Set to 1 for PCX format support -#define wxUSE_PCX 0 - -// Set to 1 for IFF format support -#define wxUSE_IFF 0 - -// Set to 1 for XPM format support -#define wxUSE_XPM 1 - -// Set to 1 for MS Icons and Cursors format support -#define wxUSE_ICO_CUR 1 - -// Set to 1 to compile in wxPalette class -#define wxUSE_PALETTE 1 - -// ---------------------------------------------------------------------------- -// Windows-only settings -// ---------------------------------------------------------------------------- - -// Set this to 1 if you want to use wxWidgets and MFC in the same program. This -// will override some other settings (see below) -// -// Default is 0. -// -// Recommended setting: 0 unless you really have to use MFC -#define wxUSE_MFC 0 - -// Set this to 1 for generic OLE support: this is required for drag-and-drop, -// clipboard, OLE Automation. Only set it to 0 if your compiler is very old and -// can't compile/doesn't have the OLE headers. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_OLE 0 - -// Set this to 1 to use Microsoft CTL3D library for "3D-look" under Win16 or NT -// 3.x. This setting is ignored under Win9x and NT 4.0+. -// -// Default is 0 for (most) Win32 (systems), 1 for Win16 -// -// Recommended setting: same as default -#if defined(__WIN95__) -#define wxUSE_CTL3D 0 -#else -#define wxUSE_CTL3D 1 -#endif - -// Set to 0 to disable PostScript print/preview architecture code under Windows -// (just use Windows printing). -#define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 0 - -// Set this to 1 to use RICHEDIT controls for wxTextCtrl with style wxTE_RICH -// which allows to put more than ~32Kb of text in it even under Win9x (NT -// doesn't have such limitation). -// -// Default is 1 for compilers which support it -// -// Recommended setting: 1, only set it to 0 if your compiler doesn't have -// or can't compile <richedit.h> -#if defined(__WIN95__) && !defined(__WINE__) && !defined(__GNUWIN32_OLD__) -#define wxUSE_RICHEDIT 1 - -// TODO: This should be ifdef'ed for any compilers that don't support -// RichEdit 2.0 but do have RichEdit 1.0... -#define wxUSE_RICHEDIT2 1 - -#else -#define wxUSE_RICHEDIT 0 -#define wxUSE_RICHEDIT2 0 -#endif - -// Set this to 1 to enable support for the owner-drawn menu and listboxes. This -// is required by wxUSE_CHECKLISTBOX. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 for a small library size reduction -#define wxUSE_OWNER_DRAWN 0 - -// ---------------------------------------------------------------------------- -// obsolete settings -// ---------------------------------------------------------------------------- - -// NB: all settings in this section are obsolete and should not be used/changed -// at all, they will disappear - -// Define 1 to use bitmap messages. -#define wxUSE_BITMAP_MESSAGE 1 - -// If 1, enables provision of run-time type information. -// NOW MANDATORY: don't change. -#define wxUSE_DYNAMIC_CLASSES 1 - -// ---------------------------------------------------------------------------- -// disable the settings which don't work for some compilers -// ---------------------------------------------------------------------------- - -#ifndef wxUSE_NORLANDER_HEADERS -#if (defined(__MINGW32__) || defined(__CYGWIN__)) && ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95))) -# define wxUSE_NORLANDER_HEADERS 1 -#else -# define wxUSE_NORLANDER_HEADERS 0 -#endif -#endif - -#if defined(__GNUWIN32__) -// These don't work as expected for mingw32 and cygwin32 -#undef wxUSE_MEMORY_TRACING -#define wxUSE_MEMORY_TRACING 0 - -#undef wxUSE_GLOBAL_MEMORY_OPERATORS -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -#undef wxUSE_DEBUG_NEW_ALWAYS -#define wxUSE_DEBUG_NEW_ALWAYS 0 - -// Cygwin betas don't have wcslen -#if defined(__CYGWIN__) || defined(__CYGWIN32__) -# if ! ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95))) -# undef wxUSE_WCHAR_T -# define wxUSE_WCHAR_T 0 -# endif -#endif - -#endif // __GNUWIN32__ - -// MFC duplicates these operators -#if wxUSE_MFC -#undef wxUSE_GLOBAL_MEMORY_OPERATORS -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -#undef wxUSE_DEBUG_NEW_ALWAYS -#define wxUSE_DEBUG_NEW_ALWAYS 0 -#endif // wxUSE_MFC - -#if (!defined(WIN32) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS) -// Can't use OLE drag and drop in Windows 3.1 because we don't know how -// to implement UUIDs -// GnuWin32 doesn't have appropriate headers for e.g. IUnknown. -#undef wxUSE_DRAG_AND_DROP -#define wxUSE_DRAG_AND_DROP 0 -#endif - -// Only WIN32 supports wxStatusBar95 -#if !defined(__WIN32__) && wxUSE_NATIVE_STATUSBAR -#undef wxUSE_NATIVE_STATUSBAR -#define wxUSE_NATIVE_STATUSBAR 0 -#endif - -#if !wxUSE_OWNER_DRAWN -#undef wxUSE_CHECKLISTBOX -#define wxUSE_CHECKLISTBOX 0 -#endif - -// Salford C++ doesn't like some of the memory operator definitions -#ifdef __SALFORDC__ -#undef wxUSE_MEMORY_TRACING -#define wxUSE_MEMORY_TRACING 0 - -#undef wxUSE_GLOBAL_MEMORY_OPERATORS -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -#undef wxUSE_DEBUG_NEW_ALWAYS -#define wxUSE_DEBUG_NEW_ALWAYS 0 - -#undef wxUSE_THREADS -#define wxUSE_THREADS 0 - -#undef wxUSE_OWNER_DRAWN -#define wxUSE_OWNER_DRAWN 0 -#endif // __SALFORDC__ - -// BC++/Win16 can't cope with the amount of data in resource.cpp -#if defined(__WIN16__) && defined(__BORLANDC__) -#undef wxUSE_WX_RESOURCES -#define wxUSE_WX_RESOURCES 0 - -#undef wxUSE_ODBC -#define wxUSE_ODBC 0 - -#undef wxUSE_NEW_GRID -#define wxUSE_NEW_GRID 0 -#endif - -#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500) -// BC++ 4.0 can't compile JPEG library -#undef wxUSE_LIBJPEG -#define wxUSE_LIBJPEG 0 -#endif - -// wxUSE_DEBUG_NEW_ALWAYS = 1 not compatible with BC++ in DLL mode -#if defined(__BORLANDC__) && (defined(WXMAKINGDLL) || defined(WXUSINGDLL)) -#undef wxUSE_DEBUG_NEW_ALWAYS -#define wxUSE_DEBUG_NEW_ALWAYS 0 -#endif - -#if defined(__WXMSW__) && defined(__WATCOMC__) -/* -#undef wxUSE_GLCANVAS -#define wxUSE_GLCANVAS 0 -*/ - -#undef wxUSE_WCHAR_T -#define wxUSE_WCHAR_T 0 -#endif - -#if defined(__WXMSW__) && !defined(__WIN32__) - -#undef wxUSE_SOCKETS -#define wxUSE_SOCKETS 0 - -#undef wxUSE_THREADS -#define wxUSE_THREADS 0 - -#undef wxUSE_TOOLTIPS -#define wxUSE_TOOLTIPS 0 - -#undef wxUSE_SPINCTRL -#define wxUSE_SPINCTRL 0 - -#undef wxUSE_SPINBTN -#define wxUSE_SPINBTN 0 - -#undef wxUSE_LIBPNG -#define wxUSE_LIBPNG 0 - -#undef wxUSE_LIBJPEG -#define wxUSE_LIBJPEG 0 - -#undef wxUSE_LIBTIFF -#define wxUSE_LIBTIFF 0 - -#undef wxUSE_GIF -#define wxUSE_GIF 0 - -#undef wxUSE_PNM -#define wxUSE_PNM 0 - -#undef wxUSE_PCX -#define wxUSE_PCX 0 - -#undef wxUSE_GLCANVAS -#define wxUSE_GLCANVAS 0 - -#undef wxUSE_MS_HTML_HELP -#define wxUSE_MS_HTML_HELP 0 - -#undef wxUSE_WCHAR_T -#define wxUSE_WCHAR_T 0 - -#endif // Win16 - -// ---------------------------------------------------------------------------- -// undef the things which don't make sense for wxBase build -// ---------------------------------------------------------------------------- - -#if !wxUSE_GUI - -#undef wxUSE_HTML -#define wxUSE_HTML 0 - -#endif // !wxUSE_GUI - -// ---------------------------------------------------------------------------- -// check the settings consistency: do it here to abort compilation immediately -// and not almost in the very end when the relevant file fails to compile and -// you need to modify setup.h and rebuild everything -// ---------------------------------------------------------------------------- - -#if wxUSE_DATETIME && !wxUSE_LONGLONG - #error wxDateTime requires wxLongLong -#endif - -#if wxUSE_TEXTFILE && !wxUSE_FILE - #error You cannot compile wxTextFile without wxFile -#endif - -#if wxUSE_FILESYSTEM && !wxUSE_STREAMS - #error You cannot compile virtual file systems without wxUSE_STREAMS -#endif - -#if wxUSE_HTML && !wxUSE_FILESYSTEM - #error You cannot compile wxHTML without virtual file systems -#endif - -// add more tests here... - -#endif - // _WX_SETUP_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/slider95.h b/desmume/src/windows/wx/include/wx/msw/slider95.h deleted file mode 100644 index 55415c789..000000000 --- a/desmume/src/windows/wx/include/wx/msw/slider95.h +++ /dev/null @@ -1,137 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/slider95.h -// Purpose: wxSlider class, using the Win95 (and later) trackbar control -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: slider95.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SLIDER95_H_ -#define _WX_SLIDER95_H_ - -class WXDLLIMPEXP_FWD_CORE wxSubwindows; - -// Slider -class WXDLLEXPORT wxSlider : public wxSliderBase -{ -public: - wxSlider() { Init(); } - - wxSlider(wxWindow *parent, - wxWindowID id, - int value, - int minValue, - int maxValue, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSL_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSliderNameStr) - { - Init(); - - (void)Create(parent, id, value, minValue, maxValue, - pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - int value, - int minValue, int maxValue, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSL_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSliderNameStr); - - virtual ~wxSlider(); - - // slider methods - virtual int GetValue() const; - virtual void SetValue(int); - - void SetRange(int minValue, int maxValue); - - int GetMin() const { return m_rangeMin; } - int GetMax() const { return m_rangeMax; } - - // Win32-specific slider methods - void SetTickFreq(int n, int pos); - int GetTickFreq() const { return m_tickFreq; } - void SetPageSize(int pageSize); - int GetPageSize() const; - void ClearSel(); - void ClearTicks(); - void SetLineSize(int lineSize); - int GetLineSize() const; - int GetSelEnd() const; - int GetSelStart() const; - void SetSelection(int minPos, int maxPos); - void SetThumbLength(int len); - int GetThumbLength() const; - void SetTick(int tickPos); - - // implementation only from now on - WXHWND GetStaticMin() const; - WXHWND GetStaticMax() const; - WXHWND GetEditValue() const; - virtual bool ContainsHWND(WXHWND hWnd) const; - - // we should let background show through the slider (and its labels) - virtual bool HasTransparentBackground() { return true; } - - - void Command(wxCommandEvent& event); - virtual bool MSWOnScroll(int orientation, WXWORD wParam, - WXWORD pos, WXHWND control); - - virtual bool Show(bool show = true); - virtual bool Enable(bool show = true); - virtual bool SetFont(const wxFont& font); - - virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle = NULL) const; - -protected: - // common part of all ctors - void Init(); - - // format an integer value as string - static wxString Format(int n) { return wxString::Format(_T("%d"), n); } - - // get the boundig box for the slider and possible labels - wxRect GetBoundingBox() const; - - // get the height and, if the pointer is not NULL, width of our labels - int GetLabelsSize(int *width = NULL) const; - - - // overridden base class virtuals - virtual void DoGetPosition(int *x, int *y) const; - virtual void DoGetSize(int *width, int *height) const; - virtual void DoMoveWindow(int x, int y, int width, int height); - virtual wxSize DoGetBestSize() const; - - virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } - - - // the labels windows, if any - wxSubwindows *m_labels; - - int m_rangeMin; - int m_rangeMax; - int m_pageSize; - int m_lineSize; - int m_tickFreq; - - // flag needed to detect whether we're getting THUMBRELEASE event because - // of dragging the thumb or scrolling the mouse wheel - bool m_isDragging; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxSlider) -}; - -#endif // _WX_SLIDER95_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/sound.h b/desmume/src/windows/wx/include/wx/msw/sound.h deleted file mode 100644 index f1f52c9a2..000000000 --- a/desmume/src/windows/wx/include/wx/msw/sound.h +++ /dev/null @@ -1,52 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/sound.h -// Purpose: wxSound class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: sound.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SOUND_H_ -#define _WX_SOUND_H_ - -#if wxUSE_SOUND - -class WXDLLIMPEXP_ADV wxSound : public wxSoundBase -{ -public: - wxSound(); - wxSound(const wxString& fileName, bool isResource = false); - wxSound(int size, const wxByte* 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 IsOk() const { return m_data != NULL; } - - static void Stop(); - -protected: - void Init() { m_data = NULL; } - bool CheckCreatedOk(); - void Free(); - - virtual bool DoPlay(unsigned flags) const; - -private: - // data of this object - class wxSoundData *m_data; - - DECLARE_NO_COPY_CLASS(wxSound) -}; - -#endif // wxUSE_SOUND - -#endif // _WX_SOUND_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/spinbutt.h b/desmume/src/windows/wx/include/wx/msw/spinbutt.h deleted file mode 100644 index cf0bf62cc..000000000 --- a/desmume/src/windows/wx/include/wx/msw/spinbutt.h +++ /dev/null @@ -1,72 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/spinbutt.h -// Purpose: wxSpinButton class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: spinbutt.h 41316 2006-09-20 14:15:14Z RR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SPINBUTT_H_ -#define _WX_SPINBUTT_H_ - -#include "wx/control.h" -#include "wx/event.h" - -#if wxUSE_SPINBTN - -class WXDLLEXPORT wxSpinButton : public wxSpinButtonBase -{ -public: - // construction - wxSpinButton() { } - - wxSpinButton(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_VERTICAL | wxSP_ARROW_KEYS, - const wxString& name = wxSPIN_BUTTON_NAME) - { - Create(parent, id, pos, size, style, name); - } - - virtual ~wxSpinButton(); - - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_VERTICAL | wxSP_ARROW_KEYS, - const wxString& name = wxSPIN_BUTTON_NAME); - - - // accessors - virtual int GetValue() const; - virtual void SetValue(int val); - virtual void SetRange(int minVal, int maxVal); - - // implementation - virtual bool MSWCommand(WXUINT param, WXWORD id); - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - virtual bool MSWOnScroll(int orientation, WXWORD wParam, - WXWORD pos, WXHWND control); - - // a wxSpinButton can't do anything useful with focus, only wxSpinCtrl can - virtual bool AcceptsFocus() const { return false; } - -protected: - virtual wxSize DoGetBestSize() const; - - // ensure that the control displays a value in the current range - virtual void NormalizeValue(); - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxSpinButton) -}; - -#endif // wxUSE_SPINBTN - -#endif // _WX_SPINBUTT_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/spinctrl.h b/desmume/src/windows/wx/include/wx/msw/spinctrl.h deleted file mode 100644 index 04e0cb462..000000000 --- a/desmume/src/windows/wx/include/wx/msw/spinctrl.h +++ /dev/null @@ -1,142 +0,0 @@ -//////////////////////////////////////////////////////////////////////////// -// Name: msw/spinctrl.h -// Purpose: wxSpinCtrl class declaration for Win32 -// Author: Vadim Zeitlin -// Modified by: -// Created: 22.07.99 -// RCS-ID: $Id: spinctrl.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_SPINCTRL_H_ -#define _WX_MSW_SPINCTRL_H_ - -#include "wx/spinbutt.h" // the base class - -#if wxUSE_SPINCTRL - -#include "wx/dynarray.h" - -class WXDLLIMPEXP_FWD_CORE wxSpinCtrl; -WX_DEFINE_EXPORTED_ARRAY_PTR(wxSpinCtrl *, wxArraySpins); - -// ---------------------------------------------------------------------------- -// Under Win32, wxSpinCtrl is a wxSpinButton with a buddy (as MSDN docs call -// it) text window whose contents is automatically updated when the spin -// control is clicked. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSpinCtrl : public wxSpinButton -{ -public: - wxSpinCtrl() { } - - wxSpinCtrl(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_ARROW_KEYS, - int min = 0, int max = 100, int initial = 0, - const wxString& name = _T("wxSpinCtrl")) - { - Create(parent, id, value, pos, size, style, min, max, initial, name); - } - - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_ARROW_KEYS, - int min = 0, int max = 100, int initial = 0, - const wxString& name = _T("wxSpinCtrl")); - - // a wxTextCtrl-like method (but we can't have GetValue returning wxString - // because the base class already has one returning int!) - void SetValue(const wxString& text); - - // another wxTextCtrl-like method - void SetSelection(long from, long to); - - // implementation only from now on - // ------------------------------- - - virtual ~wxSpinCtrl(); - - virtual void SetValue(int val); - virtual int GetValue() const; - virtual bool SetFont(const wxFont &font); - virtual void SetFocus(); - - virtual bool Enable(bool enable = true); - virtual bool Show(bool show = true); - - virtual bool Reparent(wxWindowBase *newParent); - - // wxSpinButton doesn't accept focus, but we do - virtual bool AcceptsFocus() const { return wxWindow::AcceptsFocus(); } - - // for internal use only - - // get the subclassed window proc of the buddy text - WXFARPROC GetBuddyWndProc() const { return m_wndProcBuddy; } - - // return the spinctrl object whose buddy is the given window or NULL - static wxSpinCtrl *GetSpinForTextCtrl(WXHWND hwndBuddy); - - // process a WM_COMMAND generated by the buddy text control - bool ProcessTextCommand(WXWORD cmd, WXWORD id); - -protected: - virtual void DoGetPosition(int *x, int *y) const; - virtual void DoMoveWindow(int x, int y, int width, int height); - virtual wxSize DoGetBestSize() const; - virtual void DoGetSize(int *width, int *height) const; -#if wxABI_VERSION >= 20808 - virtual void DoGetClientSize(int *x, int *y) const; -#endif - -#if wxUSE_TOOLTIPS - virtual void DoSetToolTip( wxToolTip *tip ); -#endif // wxUSE_TOOLTIPS - - // the handler for wxSpinButton events - void OnSpinChange(wxSpinEvent& event); - - // handle processing of special keys - void OnChar(wxKeyEvent& event); - void OnSetFocus(wxFocusEvent& event); - void OnKillFocus(wxFocusEvent& event); - - // generate spin control update event with the given value - void SendSpinUpdate(int value); - - // called to ensure that the value is in the correct range - virtual void NormalizeValue(); - - - // the value of the control before the latest change (which might not have - // changed anything in fact -- this is why we need this field) - int m_oldValue; - - // the data for the "buddy" text ctrl - WXHWND m_hwndBuddy; - WXFARPROC m_wndProcBuddy; - - // all existing wxSpinCtrls - this allows to find the one corresponding to - // the given buddy window in GetSpinForTextCtrl() - static wxArraySpins ms_allSpins; - -private: - DECLARE_DYNAMIC_CLASS(wxSpinCtrl) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxSpinCtrl) -}; - -#endif // wxUSE_SPINCTRL - -#endif // _WX_MSW_SPINCTRL_H_ - - diff --git a/desmume/src/windows/wx/include/wx/msw/stackwalk.h b/desmume/src/windows/wx/include/wx/msw/stackwalk.h deleted file mode 100644 index 1109a53df..000000000 --- a/desmume/src/windows/wx/include/wx/msw/stackwalk.h +++ /dev/null @@ -1,103 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/stackwalk.h -// Purpose: wxStackWalker for MSW -// Author: Vadim Zeitlin -// Modified by: -// Created: 2005-01-08 -// RCS-ID: $Id: stackwalk.h 43346 2006-11-12 14:33:03Z RR $ -// Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_STACKWALK_H_ -#define _WX_MSW_STACKWALK_H_ - -#include "wx/arrstr.h" - -// these structs are declared in windows headers -struct _CONTEXT; -struct _EXCEPTION_POINTERS; - -// and these in dbghelp.h -struct _SYMBOL_INFO; - -// ---------------------------------------------------------------------------- -// wxStackFrame -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStackFrame : public wxStackFrameBase -{ -private: - wxStackFrame *ConstCast() const - { return wx_const_cast(wxStackFrame *, this); } - - size_t DoGetParamCount() const { return m_paramTypes.GetCount(); } - -public: - wxStackFrame(size_t level, void *address, size_t addrFrame) - : wxStackFrameBase(level, address) - { - m_hasName = - m_hasLocation = false; - - m_addrFrame = addrFrame; - } - - virtual size_t GetParamCount() const - { - ConstCast()->OnGetParam(); - return DoGetParamCount(); - } - - virtual bool - GetParam(size_t n, wxString *type, wxString *name, wxString *value) const; - - // callback used by OnGetParam(), don't call directly - void OnParam(_SYMBOL_INFO *pSymInfo); - -protected: - virtual void OnGetName(); - virtual void OnGetLocation(); - - void OnGetParam(); - - - // helper for debug API: it wants to have addresses as DWORDs - size_t GetSymAddr() const - { - return wx_reinterpret_cast(size_t, m_address); - } - -private: - bool m_hasName, - m_hasLocation; - - size_t m_addrFrame; - - wxArrayString m_paramTypes, - m_paramNames, - m_paramValues; -}; - -// ---------------------------------------------------------------------------- -// wxStackWalker -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStackWalker : public wxStackWalkerBase -{ -public: - // we don't use ctor argument, it is for compatibility with Unix version - // only - wxStackWalker(const char * WXUNUSED(argv0) = NULL) { } - - virtual void Walk(size_t skip = 1, size_t maxDepth = 200); - virtual void WalkFromException(); - - - // enumerate stack frames from the given context - void WalkFrom(const _CONTEXT *ctx, size_t skip = 1); - void WalkFrom(const _EXCEPTION_POINTERS *ep, size_t skip = 1); -}; - -#endif // _WX_MSW_STACKWALK_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/statbmp.h b/desmume/src/windows/wx/include/wx/msw/statbmp.h deleted file mode 100644 index 914721053..000000000 --- a/desmume/src/windows/wx/include/wx/msw/statbmp.h +++ /dev/null @@ -1,90 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/statbmp.h -// Purpose: wxStaticBitmap class for wxMSW -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: statbmp.h 51824 2008-02-16 01:59:21Z SN $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STATBMP_H_ -#define _WX_STATBMP_H_ - -#include "wx/control.h" -#include "wx/icon.h" -#include "wx/bitmap.h" - -extern WXDLLEXPORT_DATA(const wxChar) wxStaticBitmapNameStr[]; - -// a control showing an icon or a bitmap -class WXDLLEXPORT wxStaticBitmap : public wxStaticBitmapBase -{ -public: - wxStaticBitmap() { Init(); } - - wxStaticBitmap(wxWindow *parent, - wxWindowID id, - const wxGDIImage& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxStaticBitmapNameStr) - { - Init(); - - Create(parent, id, label, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxGDIImage& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxStaticBitmapNameStr); - - virtual ~wxStaticBitmap() { Free(); } - - virtual void SetIcon(const wxIcon& icon) { SetImage(&icon); } - virtual void SetBitmap(const wxBitmap& bitmap) { SetImage(&bitmap); } - virtual wxBitmap GetBitmap() const; - virtual wxIcon GetIcon() const; - - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - -protected: - virtual wxBorder GetDefaultBorder() const; - virtual wxSize DoGetBestSize() const; - - // ctor/dtor helpers - void Init() { m_isIcon = true; m_image = NULL; m_currentHandle = 0; } - void Free(); - - // true if icon/bitmap is valid - bool ImageIsOk() const; - - void SetImage(const wxGDIImage* image); - void SetImageNoCopy( wxGDIImage* image ); - -#if wxABI_VERSION >= 20808 - // draw the bitmap ourselves here if the OS can't do it correctly (if it - // can we leave it to it) - void DoPaintManually(wxPaintEvent& event); -#endif - - // we can have either an icon or a bitmap - bool m_isIcon; - wxGDIImage *m_image; - - // handle used in last call to STM_SETIMAGE - WXHANDLE m_currentHandle; - -private: - DECLARE_DYNAMIC_CLASS(wxStaticBitmap) - DECLARE_NO_COPY_CLASS(wxStaticBitmap) -}; - -#endif - // _WX_STATBMP_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/statbox.h b/desmume/src/windows/wx/include/wx/msw/statbox.h deleted file mode 100644 index 35c7d3300..000000000 --- a/desmume/src/windows/wx/include/wx/msw/statbox.h +++ /dev/null @@ -1,73 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/statbox.h -// Purpose: wxStaticBox class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: statbox.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_STATBOX_H_ -#define _WX_MSW_STATBOX_H_ - -// Group box -class WXDLLEXPORT wxStaticBox : public wxStaticBoxBase -{ -public: - wxStaticBox() { } - - wxStaticBox(wxWindow *parent, wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxStaticBoxNameStr) - { - Create(parent, id, label, pos, size, style, name); - } - - bool Create(wxWindow *parent, wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxStaticBoxNameStr); - - /// Implementation only - virtual void GetBordersForSizer(int *borderTop, int *borderOther) const; - - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - -protected: - virtual wxSize DoGetBestSize() const; - - // choose the default border for this window - virtual wxBorder GetDefaultBorder() const; - -#ifndef __WXWINCE__ -public: - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - -protected: - // return the region with all the windows inside this static box excluded - virtual WXHRGN MSWGetRegionWithoutChildren(); - - // remove the parts which are painted by static box itself from the given - // region which is embedded in a rectangle (0, 0)-(w, h) - virtual void MSWGetRegionWithoutSelf(WXHRGN hrgn, int w, int h); - - // paint the given rectangle with our background brush/colour - virtual void PaintBackground(wxDC& dc, const struct tagRECT& rc); - // paint the foreground of the static box - virtual void PaintForeground(wxDC& dc, const struct tagRECT& rc); - - void OnPaint(wxPaintEvent& event); -#endif // !__WXWINCE__ - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxStaticBox) -}; - -#endif // _WX_MSW_STATBOX_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/statbr95.h b/desmume/src/windows/wx/include/wx/msw/statbr95.h deleted file mode 100644 index 1e3155ad0..000000000 --- a/desmume/src/windows/wx/include/wx/msw/statbr95.h +++ /dev/null @@ -1,76 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: msw/statbr95.h -// Purpose: native implementation of wxStatusBar -// Author: Vadim Zeitlin -// Modified by: -// Created: 04.04.98 -// RCS-ID: $Id: statbr95.h 41035 2006-09-06 17:36:22Z PC $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _STATBR95_H -#define _STATBR95_H - -#if wxUSE_NATIVE_STATUSBAR - -class WXDLLEXPORT wxStatusBar95 : public wxStatusBarBase -{ -public: - // ctors and such - wxStatusBar95(); - wxStatusBar95(wxWindow *parent, - wxWindowID id = wxID_ANY, - long style = wxST_SIZEGRIP, - const wxString& name = wxStatusBarNameStr) - { - (void)Create(parent, id, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - long style = wxST_SIZEGRIP, - const wxString& name = wxStatusBarNameStr); - - virtual ~wxStatusBar95(); - - // a status line can have several (<256) fields numbered from 0 - virtual void SetFieldsCount(int number = 1, const int *widths = NULL); - - // each field of status line has it's own text - virtual void SetStatusText(const wxString& text, int number = 0); - virtual wxString GetStatusText(int number = 0) const; - - // set status line fields' widths - virtual void SetStatusWidths(int n, const int widths_field[]); - - // set status line fields' styles - virtual void SetStatusStyles(int n, const int styles[]); - - // sets the minimal vertical size of the status bar - virtual void SetMinHeight(int height); - - // get the position and size of the field's internal bounding rectangle - virtual bool GetFieldRect(int i, wxRect& rect) const; - - // get the border size - virtual int GetBorderX() const; - virtual int GetBorderY() const; - - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, - WXWPARAM wParam, - WXLPARAM lParam); -protected: - void CopyFieldsWidth(const int widths[]); - void SetFieldsWidth(); - - // override base class virtual - void DoMoveWindow(int x, int y, int width, int height); - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxStatusBar95) -}; - -#endif // wxUSE_NATIVE_STATUSBAR - -#endif diff --git a/desmume/src/windows/wx/include/wx/msw/statline.h b/desmume/src/windows/wx/include/wx/msw/statline.h deleted file mode 100644 index cdbd933a5..000000000 --- a/desmume/src/windows/wx/include/wx/msw/statline.h +++ /dev/null @@ -1,52 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: msw/statline.h -// Purpose: MSW version of wxStaticLine class -// Author: Vadim Zeitlin -// Created: 28.06.99 -// Version: $Id: statline.h 43874 2006-12-09 14:52:59Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_STATLINE_H_ -#define _WX_MSW_STATLINE_H_ - -// ---------------------------------------------------------------------------- -// wxStaticLine -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStaticLine : public wxStaticLineBase -{ -public: - // constructors and pseudo-constructors - wxStaticLine() { } - - wxStaticLine( wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxLI_HORIZONTAL, - const wxString &name = wxStaticLineNameStr ) - { - Create(parent, id, pos, size, style, name); - } - - bool Create( wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxLI_HORIZONTAL, - const wxString &name = wxStaticLineNameStr ); - - // overriden base class virtuals - virtual bool AcceptsFocus() const { return false; } - - // usually overridden base class virtuals - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxStaticLine) -}; - -#endif // _WX_MSW_STATLINE_H_ - - diff --git a/desmume/src/windows/wx/include/wx/msw/stattext.h b/desmume/src/windows/wx/include/wx/msw/stattext.h deleted file mode 100644 index e3e16595a..000000000 --- a/desmume/src/windows/wx/include/wx/msw/stattext.h +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/stattext.h -// Purpose: wxStaticText class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: stattext.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STATTEXT_H_ -#define _WX_STATTEXT_H_ - -class WXDLLEXPORT wxStaticText : public wxStaticTextBase -{ -public: - wxStaticText() { } - - wxStaticText(wxWindow *parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxStaticTextNameStr) - { - Create(parent, id, label, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxStaticTextNameStr); - - // override some methods to resize the window properly - virtual void SetLabel(const wxString& label); - virtual bool SetFont( const wxFont &font ); - - virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle = NULL) const; - -protected: - // implement/override some base class virtuals - virtual wxBorder GetDefaultBorder() const; - virtual void DoSetSize(int x, int y, int w, int h, - int sizeFlags = wxSIZE_AUTO); - virtual wxSize DoGetBestSize() const; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxStaticText) -}; - -#endif - // _WX_STATTEXT_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/std.ico b/desmume/src/windows/wx/include/wx/msw/std.ico deleted file mode 100644 index 435cca2471cd31bb825ff1e6eb180c1939a9eb4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1078 zcmc&zF%p6>5L_S)<BakHsT`j{k%#dFTYh10!*eX@E#mG)fdQix<B`41-d%Dj4j@C0 zx~|9$_Z&C@sH&*X8L%&aGh;Q;5UTrbEx?7gjYQ8a`o1SC5o{p@?FfDf$!%<9C%cSY zRyw@$yPND<CUsck)7qNtro8jClxBMuX8DEIT`?cum(<oYI;;2182PF7zIpvZj~8vQ z;S8({1qZ{>1H}g<-VtX@^EF=Zz9{mlQwW;#il~Wy%sJ<goq>ax^Jn}JGe|Bw=NmFB ge8aqPJmI~ud$Eb6)2}9ELOWr8V4xU|6W(XUPqgg+2mk;8 diff --git a/desmume/src/windows/wx/include/wx/msw/stdpaths.h b/desmume/src/windows/wx/include/wx/msw/stdpaths.h deleted file mode 100644 index 34cc778bb..000000000 --- a/desmume/src/windows/wx/include/wx/msw/stdpaths.h +++ /dev/null @@ -1,53 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/stdpaths.h -// Purpose: wxStandardPaths for Win32 -// Author: Vadim Zeitlin -// Modified by: -// Created: 2004-10-19 -// RCS-ID: $Id: stdpaths.h 43340 2006-11-12 12:58:10Z RR $ -// Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_STDPATHS_H_ -#define _WX_MSW_STDPATHS_H_ - -// ---------------------------------------------------------------------------- -// wxStandardPaths -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStandardPaths : public wxStandardPathsBase -{ -public: - // implement base class pure virtuals - virtual wxString GetExecutablePath() const; - virtual wxString GetConfigDir() const; - virtual wxString GetUserConfigDir() const; - virtual wxString GetDataDir() const; - virtual wxString GetUserDataDir() const; - virtual wxString GetUserLocalDataDir() const; - virtual wxString GetPluginsDir() const; - virtual wxString GetDocumentsDir() const; - -protected: - // get the path corresponding to the given standard CSIDL_XXX constant - static wxString DoGetDirectory(int csidl); - - // return the directory of the application itself - static wxString GetAppDir(); -}; - -// ---------------------------------------------------------------------------- -// wxStandardPathsWin16: this class is for internal use only -// ---------------------------------------------------------------------------- - -// override config file locations to be compatible with the values used by -// wxFileConfig (dating from Win16 days which explains the class name) -class WXDLLIMPEXP_BASE wxStandardPathsWin16 : public wxStandardPaths -{ -public: - virtual wxString GetConfigDir() const; - virtual wxString GetUserConfigDir() const; -}; - -#endif // _WX_MSW_STDPATHS_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/subwin.h b/desmume/src/windows/wx/include/wx/msw/subwin.h deleted file mode 100644 index 709004ac9..000000000 --- a/desmume/src/windows/wx/include/wx/msw/subwin.h +++ /dev/null @@ -1,195 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/subwin.h -// Purpose: helper for implementing the controls with subwindows -// Author: Vadim Zeitlin -// Modified by: -// Created: 2004-12-11 -// RCS-ID: $Id: subwin.h 30981 2004-12-13 01:02:32Z VZ $ -// Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_SUBWIN_H_ -#define _WX_MSW_SUBWIN_H_ - -#include "wx/msw/private.h" - -// ---------------------------------------------------------------------------- -// wxSubwindows contains all HWNDs making part of a single wx control -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSubwindows -{ -public: - // the number of subwindows can be specified either as parameter to ctor or - // later in Create() - wxSubwindows(size_t n = 0) { Init(); if ( n ) Create(n); } - - // allocate enough space for the given number of windows - void Create(size_t n) - { - wxASSERT_MSG( !m_hwnds, _T("Create() called twice?") ); - - m_count = n; - m_hwnds = (HWND *)calloc(n, sizeof(HWND)); - } - - // non-virtual dtor, this class is not supposed to be used polymorphically - ~wxSubwindows() - { - for ( size_t n = 0; n < m_count; n++ ) - { - ::DestroyWindow(m_hwnds[n]); - } - - free(m_hwnds); - } - - // get the number of subwindows - size_t GetCount() const { return m_count; } - - // access a given window - HWND& Get(size_t n) - { - wxASSERT_MSG( n < m_count, _T("subwindow index out of range") ); - - return m_hwnds[n]; - } - - HWND& operator[](size_t n) { return Get(n); } - HWND operator[](size_t n) const - { - return wx_const_cast(wxSubwindows *, this)->Get(n); - } - - // check if we have this window - bool HasWindow(HWND hwnd) - { - for ( size_t n = 0; n < m_count; n++ ) - { - if ( m_hwnds[n] == hwnd ) - return true; - } - - return false; - } - - - // methods which are forwarded to all subwindows - // --------------------------------------------- - - // show/hide everything - void Show(bool show) - { - int sw = show ? SW_SHOW : SW_HIDE; - for ( size_t n = 0; n < m_count; n++ ) - { - ::ShowWindow(m_hwnds[n], sw); - } - } - - // enable/disable everything - void Enable(bool enable) - { - for ( size_t n = 0; n < m_count; n++ ) - { - ::EnableWindow(m_hwnds[n], enable); - } - } - - // set font for all windows - void SetFont(const wxFont& font) - { - HFONT hfont = GetHfontOf(font); - wxCHECK_RET( hfont, _T("invalid font") ); - - for ( size_t n = 0; n < m_count; n++ ) - { - ::SendMessage(m_hwnds[n], WM_SETFONT, (WPARAM)hfont, 0); - - // otherwise the window might not be redrawn correctly - ::InvalidateRect(m_hwnds[n], NULL, FALSE /* don't erase bg */); - } - } - - // find the bounding box for all windows - wxRect GetBoundingBox() const - { - wxRect r; - for ( size_t n = 0; n < m_count; n++ ) - { - RECT rc; - ::GetWindowRect(m_hwnds[n], &rc); - - r.Union(wxRectFromRECT(rc)); - } - - return r; - } - -private: - void Init() - { - m_count = 0; - m_hwnds = NULL; - } - - // number of elements in m_hwnds array - size_t m_count; - - // the HWNDs we contain - HWND *m_hwnds; - - - DECLARE_NO_COPY_CLASS(wxSubwindows) -}; - -// convenient macro to forward a few methods which are usually propagated to -// subwindows to a wxSubwindows object -// -// parameters should be: -// - cname the name of the class implementing these methods -// - base the name of its base class -// - subwins the name of the member variable of type wxSubwindows * -#define WX_FORWARD_STD_METHODS_TO_SUBWINDOWS(cname, base, subwins) \ - bool cname::ContainsHWND(WXHWND hWnd) const \ - { \ - return subwins && subwins->HasWindow((HWND)hWnd); \ - } \ - \ - bool cname::Show(bool show) \ - { \ - if ( !base::Show(show) ) \ - return false; \ - \ - if ( subwins ) \ - subwins->Show(show); \ - \ - return true; \ - } \ - \ - bool cname::Enable(bool enable) \ - { \ - if ( !base::Enable(enable) ) \ - return false; \ - \ - if ( subwins ) \ - subwins->Enable(enable); \ - \ - return true; \ - } \ - \ - bool cname::SetFont(const wxFont& font) \ - { \ - if ( !base::SetFont(font) ) \ - return false; \ - \ - if ( subwins ) \ - subwins->SetFont(font); \ - \ - return true; \ - } - - -#endif // _WX_MSW_SUBWIN_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/tabctrl.h b/desmume/src/windows/wx/include/wx/msw/tabctrl.h deleted file mode 100644 index 20f4f4695..000000000 --- a/desmume/src/windows/wx/include/wx/msw/tabctrl.h +++ /dev/null @@ -1,160 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: tabctrl.h -// Purpose: wxTabCtrl class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: tabctrl.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TABCTRL_H_ -#define _WX_TABCTRL_H_ - -class WXDLLIMPEXP_CORE wxImageList; - -// extern WXDLLEXPORT_DATA(const wxChar) wxToolBarNameStr[]; - -/* - * Flags returned by HitTest - */ - -#define wxTAB_HITTEST_NOWHERE 1 -#define wxTAB_HITTEST_ONICON 2 -#define wxTAB_HITTEST_ONLABEL 4 -#define wxTAB_HITTEST_ONITEM 6 - -class WXDLLEXPORT wxTabCtrl: public wxControl -{ - DECLARE_DYNAMIC_CLASS(wxTabCtrl) - public: - /* - * Public interface - */ - - wxTabCtrl(); - - inline wxTabCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = 0, const wxString& name = wxT("tabCtrl")) - { - Create(parent, id, pos, size, style, name); - } - virtual ~wxTabCtrl(); - -// Accessors - - // Get the selection - int GetSelection() const; - - // Get the tab with the current keyboard focus - int GetCurFocus() const; - - // Get the associated image list - wxImageList* GetImageList() const; - - // Get the number of items - int GetItemCount() const; - - // Get the rect corresponding to the tab - bool GetItemRect(int item, wxRect& rect) const; - - // Get the number of rows - int GetRowCount() const; - - // Get the item text - wxString GetItemText(int item) const ; - - // Get the item image - int GetItemImage(int item) const; - - // Get the item data - void* GetItemData(int item) const; - - // Set the selection - int SetSelection(int item); - - // Set the image list - void SetImageList(wxImageList* imageList); - - // Set the text for an item - bool SetItemText(int item, const wxString& text); - - // Set the image for an item - bool SetItemImage(int item, int image); - - // Set the data for an item - bool SetItemData(int item, void* data); - - // Set the size for a fixed-width tab control - void SetItemSize(const wxSize& size); - - // Set the padding between tabs - void SetPadding(const wxSize& padding); - -// Operations - - bool Create(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = 0, const wxString& name = wxT("tabCtrl")); - - // Delete all items - bool DeleteAllItems(); - - // Delete an item - bool DeleteItem(int item); - - // Hit test - int HitTest(const wxPoint& pt, long& flags); - - // Insert an item - bool InsertItem(int item, const wxString& text, int imageId = -1, void* data = NULL); - - // Implementation - - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - - // Responds to colour changes - void OnSysColourChanged(wxSysColourChangedEvent& event); - -protected: - wxImageList* m_imageList; - -DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxTabCtrl) -}; - -class WXDLLEXPORT wxTabEvent : public wxNotifyEvent -{ -public: - wxTabEvent(wxEventType commandType = wxEVT_NULL, int id = 0, - int nSel = -1, int nOldSel = -1) - : wxNotifyEvent(commandType, id) - { - m_nSel = nSel; - m_nOldSel = nOldSel; - } - - // accessors - // the currently selected page (-1 if none) - int GetSelection() const { return m_nSel; } - void SetSelection(int nSel) { m_nSel = nSel; } - // the page that was selected before the change (-1 if none) - int GetOldSelection() const { return m_nOldSel; } - void SetOldSelection(int nOldSel) { m_nOldSel = nOldSel; } - -private: - int m_nSel, // currently selected page - m_nOldSel; // previously selected page - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxTabEvent) -}; - -typedef void (wxEvtHandler::*wxTabEventFunction)(wxTabEvent&); - -#define EVT_TAB_SEL_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_COMMAND_TAB_SEL_CHANGED, \ - id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxTabEventFunction, & fn ), NULL), -#define EVT_TAB_SEL_CHANGING(id, fn) DECLARE_EVENT_TABLE_ENTRY(wxEVT_COMMAND_TAB_SEL_CHANGING, \ - id, wxID_ANY, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxTabEventFunction, & fn ), NULL), - -#endif - // _WX_TABCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/taskbar.h b/desmume/src/windows/wx/include/wx/msw/taskbar.h deleted file mode 100644 index c29c5c915..000000000 --- a/desmume/src/windows/wx/include/wx/msw/taskbar.h +++ /dev/null @@ -1,82 +0,0 @@ -///////////////////////////////////////////////////////////////////////// -// File: wx/msw/taskbar.h -// Purpose: Defines wxTaskBarIcon class for manipulating icons on the -// Windows task bar. -// Author: Julian Smart -// Modified by: Vaclav Slavik -// Created: 24/3/98 -// RCS-ID: $Id: taskbar.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////// - -#ifndef _TASKBAR_H_ -#define _TASKBAR_H_ - -#include "wx/icon.h" - -// private helper class: -class WXDLLIMPEXP_FWD_ADV wxTaskBarIconWindow; - -class WXDLLIMPEXP_ADV wxTaskBarIcon: public wxTaskBarIconBase -{ - DECLARE_DYNAMIC_CLASS_NO_COPY(wxTaskBarIcon) -public: - wxTaskBarIcon(); - virtual ~wxTaskBarIcon(); - -// Accessors - inline bool IsOk() const { return true; } - inline bool IsIconInstalled() const { return m_iconAdded; } - -// Operations - bool SetIcon(const wxIcon& icon, const wxString& tooltip = wxEmptyString); - bool RemoveIcon(void); - bool PopupMenu(wxMenu *menu); //, int x, int y); - -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( bool IsOK() const ); - -// Overridables - virtual void OnMouseMove(wxEvent&); - virtual void OnLButtonDown(wxEvent&); - virtual void OnLButtonUp(wxEvent&); - virtual void OnRButtonDown(wxEvent&); - virtual void OnRButtonUp(wxEvent&); - virtual void OnLButtonDClick(wxEvent&); - virtual void OnRButtonDClick(wxEvent&); -#endif - -// Implementation -protected: - friend class wxTaskBarIconWindow; - long WindowProc(unsigned int msg, unsigned int wParam, long lParam); - void RegisterWindowMessages(); - -// Data members -protected: - wxTaskBarIconWindow *m_win; - bool m_iconAdded; - wxIcon m_icon; - wxString m_strTooltip; - -#if WXWIN_COMPATIBILITY_2_4 - // non-virtual default event handlers to forward events to the virtuals - void _OnMouseMove(wxTaskBarIconEvent&); - void _OnLButtonDown(wxTaskBarIconEvent&); - void _OnLButtonUp(wxTaskBarIconEvent&); - void _OnRButtonDown(wxTaskBarIconEvent&); - void _OnRButtonUp(wxTaskBarIconEvent&); - void _OnLButtonDClick(wxTaskBarIconEvent&); - void _OnRButtonDClick(wxTaskBarIconEvent&); - - DECLARE_EVENT_TABLE() -#endif -}; - -#if WXWIN_COMPATIBILITY_2_4 -inline bool wxTaskBarIcon::IsOK() const { return IsOk(); } -#endif - -#endif - // _TASKBAR_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/tbar95.h b/desmume/src/windows/wx/include/wx/msw/tbar95.h deleted file mode 100644 index 4b1d4b66d..000000000 --- a/desmume/src/windows/wx/include/wx/msw/tbar95.h +++ /dev/null @@ -1,156 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/tbar95.h -// Purpose: wxToolBar (Windows 95 toolbar) class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: tbar95.h 58446 2009-01-26 23:32:16Z VS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_TBAR95_H_ -#define _WX_MSW_TBAR95_H_ - -#if wxUSE_TOOLBAR - -#include "wx/dynarray.h" -#include "wx/imaglist.h" - -class WXDLLEXPORT wxToolBar : public wxToolBarBase -{ -public: - // ctors and dtor - wxToolBar() { Init(); } - - wxToolBar(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxNO_BORDER | wxTB_HORIZONTAL, - const wxString& name = wxToolBarNameStr) - { - Init(); - - Create(parent, id, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxNO_BORDER | wxTB_HORIZONTAL, - const wxString& name = wxToolBarNameStr); - - virtual ~wxToolBar(); - - // override/implement base class virtuals - virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const; - - virtual bool Realize(); - - virtual void SetToolBitmapSize(const wxSize& size); - virtual wxSize GetToolSize() const; - - virtual void SetRows(int nRows); - -#if wxABI_VERSION >= 20802 - // TODO: In 2.9 these should probably be virtual, and declared in the base class... - void SetToolNormalBitmap(int id, const wxBitmap& bitmap); - void SetToolDisabledBitmap(int id, const wxBitmap& bitmap); -#endif - - // implementation only from now on - // ------------------------------- - - virtual void SetWindowStyleFlag(long style); - - virtual bool MSWCommand(WXUINT param, WXWORD id); - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - - void OnMouseEvent(wxMouseEvent& event); - void OnSysColourChanged(wxSysColourChangedEvent& event); - void OnEraseBackground(wxEraseEvent& event); - - void SetFocus() {} - - static WXHBITMAP MapBitmap(WXHBITMAP bitmap, int width, int height); - - // override WndProc mainly to process WM_SIZE - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - -protected: - // common part of all ctors - void Init(); - - // create the native toolbar control - bool MSWCreateToolbar(const wxPoint& pos, const wxSize& size); - - // recreate the control completely - void Recreate(); - - // implement base class pure virtuals - virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool); - virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool); - - virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable); - 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); - - // return the appropriate size and flags for the toolbar control - virtual wxSize DoGetBestSize() const; - - // handlers for various events - bool HandleSize(WXWPARAM wParam, WXLPARAM lParam); - bool HandlePaint(WXWPARAM wParam, WXLPARAM lParam); - void HandleMouseMove(WXWPARAM wParam, WXLPARAM lParam); - - // should be called whenever the toolbar size changes - void UpdateSize(); - - // create m_disabledImgList (but doesn't fill it), set it to NULL if it is - // unneeded - void CreateDisabledImageList(); - - // get the Windows toolbar style of this control - long GetMSWToolbarStyle() const; - - - // the big bitmap containing all bitmaps of the toolbar buttons - WXHBITMAP m_hBitmap; - - // the image list with disabled images, may be NULL if we use - // system-provided versions of them - wxImageList *m_disabledImgList; - - // the total number of toolbar elements - size_t m_nButtons; - - // the tool the cursor is in - wxToolBarToolBase *m_pInTool; - -private: - // makes sure tool bitmap size is sufficient for all tools - void AdjustToolBitmapSize(); - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxToolBar) - DECLARE_NO_COPY_CLASS(wxToolBar) -}; - -#endif // wxUSE_TOOLBAR - -#endif // _WX_MSW_TBAR95_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/textctrl.h b/desmume/src/windows/wx/include/wx/msw/textctrl.h deleted file mode 100644 index 2ffea75d3..000000000 --- a/desmume/src/windows/wx/include/wx/msw/textctrl.h +++ /dev/null @@ -1,291 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/textctrl.h -// Purpose: wxTextCtrl class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: textctrl.h 52547 2008-03-15 12:33:04Z VS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TEXTCTRL_H_ -#define _WX_TEXTCTRL_H_ - -class WXDLLEXPORT wxTextCtrl : public wxTextCtrlBase -{ -public: - // creation - // -------- - - wxTextCtrl() { Init(); } - wxTextCtrl(wxWindow *parent, wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxTextCtrlNameStr) - { - Init(); - - Create(parent, id, value, pos, size, style, validator, name); - } - virtual ~wxTextCtrl(); - - bool Create(wxWindow *parent, wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxTextCtrlNameStr); - - // implement base class pure virtuals - // ---------------------------------- - - virtual wxString GetValue() const; - virtual bool IsEmpty() const; - - virtual wxString GetRange(long from, long to) const; - - virtual int GetLineLength(long lineNo) const; - virtual wxString GetLineText(long lineNo) const; - virtual int GetNumberOfLines() const; - - virtual bool IsModified() const; - virtual bool IsEditable() const; - - virtual void GetSelection(long* from, long* to) const; - - // operations - // ---------- - - // editing - virtual void Clear(); - virtual void Replace(long from, long to, const wxString& value); - virtual void Remove(long from, long to); - - // load the control's contents from the file - virtual bool DoLoadFile(const wxString& file, int fileType); - - // clears the dirty flag - virtual void MarkDirty(); - virtual void DiscardEdits(); - - virtual void SetMaxLength(unsigned long len); - - // writing text inserts it at the current position, appending always - // inserts it at the end - virtual void WriteText(const wxString& text); - virtual void AppendText(const wxString& text); - -#ifdef __WIN32__ - virtual bool EmulateKeyPress(const wxKeyEvent& event); -#endif // __WIN32__ - -#if wxUSE_RICHEDIT - // apply text attribute to the range of text (only works with richedit - // controls) - virtual bool SetStyle(long start, long end, const wxTextAttr& style); - virtual bool SetDefaultStyle(const wxTextAttr& style); - virtual bool GetStyle(long position, wxTextAttr& style); -#endif // wxUSE_RICHEDIT - - // translate between the position (which is just an index in the text ctrl - // considering all its contents as a single strings) and (x, y) coordinates - // which represent column and line. - virtual long XYToPosition(long x, long y) const; - virtual bool PositionToXY(long pos, long *x, long *y) const; - - virtual void ShowPosition(long pos); - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const; - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, - wxTextCoord *col, - wxTextCoord *row) const - { - return wxTextCtrlBase::HitTest(pt, col, row); - } - - // Clipboard operations - virtual void Copy(); - virtual void Cut(); - virtual void Paste(); - - virtual bool CanCopy() const; - virtual bool CanCut() const; - virtual bool CanPaste() const; - - // Undo/redo - virtual void Undo(); - virtual void Redo(); - - virtual bool CanUndo() const; - virtual bool CanRedo() const; - - // Insertion point - virtual void SetInsertionPoint(long pos); - virtual void SetInsertionPointEnd(); - virtual long GetInsertionPoint() const; - virtual wxTextPos GetLastPosition() const; - - virtual void SetSelection(long from, long to); - virtual void SetEditable(bool editable); - - // Caret handling (Windows only) - - bool ShowNativeCaret(bool show = true); - bool HideNativeCaret() { return ShowNativeCaret(false); } - - // Implementation from now on - // -------------------------- - - virtual void SetWindowStyleFlag(long style); - - virtual void Command(wxCommandEvent& event); - virtual bool MSWCommand(WXUINT param, WXWORD id); - virtual WXHBRUSH MSWControlColor(WXHDC hDC, WXHWND hWnd); - -#if wxUSE_RICHEDIT - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - - int GetRichVersion() const { return m_verRichEdit; } - bool IsRich() const { return m_verRichEdit != 0; } - - // rich edit controls are not compatible with normal ones and wem ust set - // the colours for them otherwise - virtual bool SetBackgroundColour(const wxColour& colour); - virtual bool SetForegroundColour(const wxColour& colour); -#else - bool IsRich() const { return false; } -#endif // wxUSE_RICHEDIT - -#if wxUSE_INKEDIT && wxUSE_RICHEDIT - bool IsInkEdit() const { return m_isInkEdit != 0; } -#else - bool IsInkEdit() const { return false; } -#endif - - virtual void AdoptAttributesFromHWND(); - - virtual bool AcceptsFocus() const; - - // callbacks - void OnDropFiles(wxDropFilesEvent& event); - void OnChar(wxKeyEvent& event); // Process 'enter' if required - - void OnCut(wxCommandEvent& event); - void OnCopy(wxCommandEvent& event); - void OnPaste(wxCommandEvent& event); - void OnUndo(wxCommandEvent& event); - void OnRedo(wxCommandEvent& event); - void OnDelete(wxCommandEvent& event); - void OnSelectAll(wxCommandEvent& event); - - void OnUpdateCut(wxUpdateUIEvent& event); - void OnUpdateCopy(wxUpdateUIEvent& event); - void OnUpdatePaste(wxUpdateUIEvent& event); - void OnUpdateUndo(wxUpdateUIEvent& event); - void OnUpdateRedo(wxUpdateUIEvent& event); - void OnUpdateDelete(wxUpdateUIEvent& event); - void OnUpdateSelectAll(wxUpdateUIEvent& event); - - // Show a context menu for Rich Edit controls (the standard - // EDIT control has one already) - void OnContextMenu(wxContextMenuEvent& event); - - // be sure the caret remains invisible if the user - // called HideNativeCaret() before - void OnSetFocus(wxFocusEvent& event); - - // intercept WM_GETDLGCODE - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - - virtual bool MSWShouldPreProcessMessage(WXMSG* pMsg); - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - virtual wxVisualAttributes GetDefaultAttributes() const; - -protected: - // common part of all ctors - void Init(); - - // creates the control of appropriate class (plain or rich edit) with the - // styles corresponding to m_windowStyle - // - // this is used by ctor/Create() and when we need to recreate the control - // later - bool MSWCreateText(const wxString& value, - const wxPoint& pos, - const wxSize& size); - - virtual void DoSetValue(const wxString &value, int flags = 0); - - // 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; - - // call this to increase the size limit (will do nothing if the current - // limit is big enough) - // - // returns true if we increased the limit to allow entering more text, - // false if we hit the limit set by SetMaxLength() and so didn't change it - bool AdjustSpaceLimit(); - -#if wxUSE_RICHEDIT && (!wxUSE_UNICODE || wxUSE_UNICODE_MSLU) - // replace the selection or the entire control contents with the given text - // in the specified encoding - bool StreamIn(const wxString& value, wxFontEncoding encoding, bool selOnly); - - // get the contents of the control out as text in the given encoding - wxString StreamOut(wxFontEncoding encoding, bool selOnly = false) const; -#endif // wxUSE_RICHEDIT - - // replace the contents of the selection or of the entire control with the - // given text - void DoWriteText(const wxString& text, - int flags = SetValue_SendEvent | SetValue_SelectionOnly); - - // set the selection possibly without scrolling the caret into view - void DoSetSelection(long from, long to, bool scrollCaret = true); - - // return true if there is a non empty selection in the control - bool HasSelection() const; - - // get the length of the line containing the character at the given - // position - long GetLengthOfLineContainingPos(long pos) const; - - // send TEXT_UPDATED event, return true if it was handled, false otherwise - bool SendUpdateEvent(); - - virtual wxSize DoGetBestSize() const; - -#if wxUSE_RICHEDIT - // we're using RICHEDIT (and not simple EDIT) control if this field is not - // 0, it also gives the version of the RICHEDIT control being used (1, 2 or - // 3 so far) - int m_verRichEdit; -#endif // wxUSE_RICHEDIT - - // number of EN_UPDATE events sent by Windows when we change the controls - // text ourselves: we want this to be exactly 1 - int m_updatesCount; - -private: - void OnKeyDown(wxKeyEvent& event); - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxTextCtrl) - - wxMenu* m_privateContextMenu; - - bool m_isNativeCaretShown; - -#if wxUSE_INKEDIT && wxUSE_RICHEDIT - int m_isInkEdit; -#endif - -}; - -#endif - // _WX_TEXTCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/tglbtn.h b/desmume/src/windows/wx/include/wx/msw/tglbtn.h deleted file mode 100644 index 0c5d1c46d..000000000 --- a/desmume/src/windows/wx/include/wx/msw/tglbtn.h +++ /dev/null @@ -1,60 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/tglbtn.h -// Purpose: Declaration of the wxToggleButton class, which implements a -// toggle button under wxMSW. -// Author: John Norris, minor changes by Axel Schlueter -// Modified by: -// Created: 08.02.01 -// RCS-ID: $Id: tglbtn.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) 2000 Johnny C. Norris II -// License: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TOGGLEBUTTON_H_ -#define _WX_TOGGLEBUTTON_H_ - -extern WXDLLEXPORT_DATA(const wxChar) wxCheckBoxNameStr[]; - -// Checkbox item (single checkbox) -class WXDLLEXPORT wxToggleButton : public wxControl -{ -public: - wxToggleButton() {} - wxToggleButton(wxWindow *parent, - wxWindowID id, - const wxString& 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 wxString& 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 MSWCommand(WXUINT param, WXWORD id); - virtual void Command(wxCommandEvent& event); - virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle = NULL) const; - -protected: - virtual wxSize DoGetBestSize() const; - virtual wxBorder GetDefaultBorder() const; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxToggleButton) -}; - -#endif // _WX_TOGGLEBUTTON_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/timer.h b/desmume/src/windows/wx/include/wx/msw/timer.h deleted file mode 100644 index 449543300..000000000 --- a/desmume/src/windows/wx/include/wx/msw/timer.h +++ /dev/null @@ -1,40 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: timer.h -// Purpose: wxTimer class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: timer.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TIMER_H_ -#define _WX_TIMER_H_ - -class WXDLLEXPORT wxTimer : public wxTimerBase -{ -friend void wxProcessTimer(wxTimer& timer); - -public: - wxTimer() { Init(); } - wxTimer(wxEvtHandler *owner, int id = wxID_ANY) : wxTimerBase(owner, id) - { Init(); } - virtual ~wxTimer(); - - virtual bool Start(int milliseconds = -1, bool oneShot = false); - virtual void Stop(); - - virtual bool IsRunning() const { return m_id != 0; } - -protected: - void Init(); - - unsigned long m_id; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxTimer) -}; - -#endif - // _WX_TIMERH_ diff --git a/desmume/src/windows/wx/include/wx/msw/tooltip.h b/desmume/src/windows/wx/include/wx/msw/tooltip.h deleted file mode 100644 index 5da413c7b..000000000 --- a/desmume/src/windows/wx/include/wx/msw/tooltip.h +++ /dev/null @@ -1,71 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/tooltip.h -// Purpose: wxToolTip class - tooltip control -// Author: Vadim Zeitlin -// Modified by: -// Created: 31.01.99 -// RCS-ID: $Id: tooltip.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 1999 Robert Roebling, Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_TOOLTIP_H_ -#define _WX_MSW_TOOLTIP_H_ - -#include "wx/object.h" - -class WXDLLIMPEXP_FWD_CORE wxWindow; - -class WXDLLEXPORT wxToolTip : public wxObject -{ -public: - // ctor & dtor - wxToolTip(const wxString &tip); - virtual ~wxToolTip(); - - // accessors - // tip text - void SetTip(const wxString& tip); - const wxString& GetTip() const { return m_text; } - - // the window we're associated with - void SetWindow(wxWindow *win); - wxWindow *GetWindow() const { return m_window; } - - // controlling tooltip behaviour: globally change tooltip parameters - // enable or disable the tooltips globally - static void Enable(bool flag); - // set the delay after which the tooltip appears - static void SetDelay(long milliseconds); - - // implementation only from now on - // ------------------------------- - - // should be called in responde to WM_MOUSEMOVE - static void RelayEvent(WXMSG *msg); - - // add a window to the tooltip control - void Add(WXHWND hwnd); - - // remove any tooltip from the window - static void Remove(WXHWND hwnd); - -private: - // the one and only one tooltip control we use - never access it directly - // but use GetToolTipCtrl() which will create it when needed - static WXHWND ms_hwndTT; - - // create the tooltip ctrl if it doesn't exist yet and return its HWND - static WXHWND GetToolTipCtrl(); - - // remove this tooltip from the tooltip control - void Remove(); - - wxString m_text; // tooltip text - wxWindow *m_window; // window we're associated with - - DECLARE_ABSTRACT_CLASS(wxToolTip) - DECLARE_NO_COPY_CLASS(wxToolTip) -}; - -#endif // _WX_MSW_TOOLTIP_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/toplevel.h b/desmume/src/windows/wx/include/wx/msw/toplevel.h deleted file mode 100644 index dd86f41df..000000000 --- a/desmume/src/windows/wx/include/wx/msw/toplevel.h +++ /dev/null @@ -1,197 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/toplevel.h -// Purpose: wxTopLevelWindowMSW is the MSW implementation of wxTLW -// Author: Vadim Zeitlin -// Modified by: -// Created: 20.09.01 -// RCS-ID: $Id: toplevel.h 50999 2008-01-03 01:13:44Z VZ $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_TOPLEVEL_H_ -#define _WX_MSW_TOPLEVEL_H_ - -// ---------------------------------------------------------------------------- -// wxTopLevelWindowMSW -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTopLevelWindowMSW : public wxTopLevelWindowBase -{ -public: - // constructors and such - wxTopLevelWindowMSW() { Init(); } - - wxTopLevelWindowMSW(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr) - { - Init(); - - (void)Create(parent, id, title, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr); - - virtual ~wxTopLevelWindowMSW(); - - // implement base class pure virtuals - virtual void SetTitle( const wxString& title); - virtual wxString GetTitle() const; - virtual void Maximize(bool maximize = true); - virtual bool IsMaximized() const; - virtual void Iconize(bool iconize = true); - virtual bool IsIconized() const; - virtual void SetIcon(const wxIcon& icon); - virtual void SetIcons(const wxIconBundle& icons ); - virtual void Restore(); - - 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 bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL); - virtual bool IsFullScreen() const { return m_fsIsShowing; } - - // wxMSW only: EnableCloseButton(false) may be used to remove the "Close" - // button from the title bar - virtual bool EnableCloseButton(bool enable = true); - - // Set window transparency if the platform supports it - virtual bool SetTransparent(wxByte alpha); - virtual bool CanSetTransparent(); - - - // implementation from now on - // -------------------------- - - // event handlers - void OnActivate(wxActivateEvent& event); - - // called by wxWindow whenever it gets focus - void SetLastFocus(wxWindow *win) { m_winLastFocused = win; } - wxWindow *GetLastFocus() const { return m_winLastFocused; } - -#if defined(__SMARTPHONE__) && defined(__WXWINCE__) - virtual void SetLeftMenu(int id = wxID_ANY, const wxString& label = wxEmptyString, wxMenu *subMenu = NULL); - virtual void SetRightMenu(int id = wxID_ANY, const wxString& label = wxEmptyString, wxMenu *subMenu = NULL); - bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control); - virtual bool MSWShouldPreProcessMessage(WXMSG* pMsg); -#endif // __SMARTPHONE__ && __WXWINCE__ - -#if defined(__SMARTPHONE__) || defined(__POCKETPC__) - // Soft Input Panel (SIP) change notification - virtual bool HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam); -#endif - - // translate wxWidgets flags to Windows ones - virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle) const; - - // choose the right parent to use with CreateWindow() - virtual WXHWND MSWGetParent() const; - - // window proc for the frames - WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); - -protected: - // common part of all ctors - void Init(); - - // create a new frame, return false if it couldn't be created - bool CreateFrame(const wxString& title, - const wxPoint& pos, - const wxSize& size); - - // create a new dialog using the given dialog template from resources, - // return false if it couldn't be created - bool CreateDialog(const void *dlgTemplate, - const wxString& title, - const wxPoint& pos, - const wxSize& size); - - // common part of Iconize(), Maximize() and Restore() - void DoShowWindow(int nShowCmd); - - // is the window currently iconized? - bool m_iconized; - - // should the frame be maximized when it will be shown? set by Maximize() - // when it is called while the frame is hidden - bool m_maximizeOnShow; - - // Data to save/restore when calling ShowFullScreen - long m_fsStyle; // Passed to ShowFullScreen - wxRect m_fsOldSize; - long m_fsOldWindowStyle; - bool m_fsIsMaximized; - bool m_fsIsShowing; - - // the last focused child: we restore focus to it on activation - wxWindow *m_winLastFocused; - -#if defined(__SMARTPHONE__) && defined(__WXWINCE__) - class ButtonMenu - { - public: - ButtonMenu(); - ~ButtonMenu(); - - void SetButton(int id = wxID_ANY, - const wxString& label = wxEmptyString, - wxMenu *subMenu = NULL); - - bool IsAssigned() const {return m_assigned;} - bool IsMenu() const {return m_menu!=NULL;} - - int GetId() const {return m_id;} - wxMenu* GetMenu() const {return m_menu;} - wxString GetLabel() {return m_label;} - - static wxMenu *DuplicateMenu(wxMenu *menu); - - protected: - int m_id; - wxString m_label; - wxMenu *m_menu; - bool m_assigned; - }; - - ButtonMenu m_LeftButton; - ButtonMenu m_RightButton; - HWND m_MenuBarHWND; - - void ReloadButton(ButtonMenu& button, UINT menuID); - void ReloadAllButtons(); -#endif // __SMARTPHONE__ && __WXWINCE__ - -private: - // 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) - void DoSelectAndSetIcon(const wxIconBundle& icons, int smX, int smY, int i); - - -#if defined(__SMARTPHONE__) || defined(__POCKETPC__) - void* m_activateInfo; -#endif - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxTopLevelWindowMSW) -}; - -#endif // _WX_MSW_TOPLEVEL_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/treectrl.h b/desmume/src/windows/wx/include/wx/msw/treectrl.h deleted file mode 100644 index f3bf13b5e..000000000 --- a/desmume/src/windows/wx/include/wx/msw/treectrl.h +++ /dev/null @@ -1,315 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/treectrl.h -// Purpose: wxTreeCtrl class -// Author: Julian Smart -// Modified by: Vadim Zeitlin to be less MSW-specific on 10/10/98 -// Created: 01/02/97 -// RCS-ID: $Id: treectrl.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_TREECTRL_H_ -#define _WX_MSW_TREECTRL_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#if wxUSE_TREECTRL - -#include "wx/textctrl.h" -#include "wx/dynarray.h" -#include "wx/treebase.h" -#include "wx/hashmap.h" - -#ifdef __GNUWIN32__ - // Cygwin windows.h defines these identifiers - #undef GetFirstChild - #undef GetNextSibling -#endif // Cygwin - -// fwd decl -class WXDLLIMPEXP_FWD_CORE wxImageList; -class WXDLLIMPEXP_FWD_CORE wxDragImage; -struct WXDLLIMPEXP_FWD_CORE wxTreeViewItem; - -#if WXWIN_COMPATIBILITY_2_6 - // NB: all the following flags are for compatbility only and will be removed in the - // next versions - // flags for deprecated InsertItem() variant (their values are the same as of - // TVI_FIRST and TVI_LAST) - #define wxTREE_INSERT_FIRST 0xFFFF0001 - #define wxTREE_INSERT_LAST 0xFFFF0002 -#endif - -// hash storing attributes for our items -WX_DECLARE_EXPORTED_VOIDPTR_HASH_MAP(wxTreeItemAttr *, wxMapTreeAttr); - -// ---------------------------------------------------------------------------- -// wxTreeCtrl -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTreeCtrl : public wxTreeCtrlBase -{ -public: - // creation - // -------- - wxTreeCtrl() { Init(); } - - wxTreeCtrl(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxTreeCtrlNameStr) - { - Create(parent, id, pos, size, style, validator, name); - } - - virtual ~wxTreeCtrl(); - - bool Create(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxTreeCtrlNameStr); - - // implement base class pure virtuals - // ---------------------------------- - - virtual unsigned int GetCount() const; - - virtual unsigned int GetIndent() const; - virtual void SetIndent(unsigned int indent); - - virtual void SetImageList(wxImageList *imageList); - virtual void SetStateImageList(wxImageList *imageList); - - virtual wxString GetItemText(const wxTreeItemId& item) const; - virtual int GetItemImage(const wxTreeItemId& item, - wxTreeItemIcon which = wxTreeItemIcon_Normal) const; - virtual wxTreeItemData *GetItemData(const wxTreeItemId& item) const; - virtual wxColour GetItemTextColour(const wxTreeItemId& item) const; - virtual wxColour GetItemBackgroundColour(const wxTreeItemId& item) const; - virtual wxFont GetItemFont(const wxTreeItemId& item) const; - - virtual void SetItemText(const wxTreeItemId& item, const wxString& text); - virtual void SetItemImage(const wxTreeItemId& item, int image, - wxTreeItemIcon which = wxTreeItemIcon_Normal); - virtual void SetItemData(const wxTreeItemId& item, wxTreeItemData *data); - virtual void SetItemHasChildren(const wxTreeItemId& item, bool has = true); - virtual void SetItemBold(const wxTreeItemId& item, bool bold = true); - virtual void SetItemDropHighlight(const wxTreeItemId& item, - bool highlight = true); - virtual void SetItemTextColour(const wxTreeItemId& item, - const wxColour& col); - virtual void SetItemBackgroundColour(const wxTreeItemId& item, - const wxColour& col); - virtual void SetItemFont(const wxTreeItemId& item, const wxFont& font); - - // item status inquiries - // --------------------- - - virtual bool IsVisible(const wxTreeItemId& item) const; - virtual bool ItemHasChildren(const wxTreeItemId& item) const; - virtual bool IsExpanded(const wxTreeItemId& item) const; - virtual bool IsSelected(const wxTreeItemId& item) const; - virtual bool IsBold(const wxTreeItemId& item) const; - - virtual size_t GetChildrenCount(const wxTreeItemId& item, - bool recursively = true) const; - - // navigation - // ---------- - - virtual wxTreeItemId GetRootItem() const; - virtual wxTreeItemId GetSelection() const; - virtual size_t GetSelections(wxArrayTreeItemIds& selections) const; - - virtual wxTreeItemId GetItemParent(const wxTreeItemId& item) const; - virtual wxTreeItemId GetFirstChild(const wxTreeItemId& item, - wxTreeItemIdValue& cookie) const; - virtual wxTreeItemId GetNextChild(const wxTreeItemId& item, - wxTreeItemIdValue& cookie) const; - virtual wxTreeItemId GetLastChild(const wxTreeItemId& item) const; - - virtual wxTreeItemId GetNextSibling(const wxTreeItemId& item) const; - virtual wxTreeItemId GetPrevSibling(const wxTreeItemId& item) const; - - virtual wxTreeItemId GetFirstVisibleItem() const; - virtual wxTreeItemId GetNextVisible(const wxTreeItemId& item) const; - virtual wxTreeItemId GetPrevVisible(const wxTreeItemId& item) const; - - // operations - // ---------- - - virtual wxTreeItemId AddRoot(const wxString& text, - int image = -1, int selectedImage = -1, - wxTreeItemData *data = NULL); - - virtual void Delete(const wxTreeItemId& item); - virtual void DeleteChildren(const wxTreeItemId& item); - virtual void DeleteAllItems(); - - virtual void Expand(const wxTreeItemId& item); - virtual void Collapse(const wxTreeItemId& item); - virtual void CollapseAndReset(const wxTreeItemId& item); - virtual void Toggle(const wxTreeItemId& item); - - virtual void Unselect(); - virtual void UnselectAll(); - virtual void SelectItem(const wxTreeItemId& item, bool select = true); - - virtual void EnsureVisible(const wxTreeItemId& item); - virtual void ScrollTo(const wxTreeItemId& item); - - virtual wxTextCtrl *EditLabel(const wxTreeItemId& item, - wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)); - virtual wxTextCtrl *GetEditControl() const; - virtual void EndEditLabel(const wxTreeItemId& WXUNUSED(item), - bool discardChanges = false) - { - DoEndEditLabel(discardChanges); - } - - virtual void SortChildren(const wxTreeItemId& item); - - virtual bool GetBoundingRect(const wxTreeItemId& item, - wxRect& rect, - bool textOnly = false) const; - - // deprecated - // ---------- - -#if WXWIN_COMPATIBILITY_2_4 - // these methods are deprecated and will be removed in future versions of - // wxWidgets, they're here for compatibility only, don't use them in new - // code (the comments indicate why these methods are now useless and how to - // replace them) - - // use Expand, Collapse, CollapseAndReset or Toggle - wxDEPRECATED( void ExpandItem(const wxTreeItemId& item, int action) ); - - // use Set/GetImageList and Set/GetStateImageList - // Use base class GetImageList() - wxDEPRECATED( void SetImageList(wxImageList *imageList, int) ); - - // use Set/GetItemImage directly - wxDEPRECATED( int GetItemSelectedImage(const wxTreeItemId& item) const ); - wxDEPRECATED( void SetItemSelectedImage(const wxTreeItemId& item, int image) ); - - // use the versions taking wxTreeItemIdValue cookies - wxDEPRECATED( wxTreeItemId GetFirstChild(const wxTreeItemId& item, - long& cookie) const ); - wxDEPRECATED( wxTreeItemId GetNextChild(const wxTreeItemId& item, - long& cookie) const ); -#endif // WXWIN_COMPATIBILITY_2_4 - - - // implementation - // -------------- - - virtual wxVisualAttributes GetDefaultAttributes() const - { - return GetClassDefaultAttributes(GetWindowVariant()); - } - - static wxVisualAttributes - GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); - - - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - virtual WXLRESULT MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - virtual bool MSWCommand(WXUINT param, WXWORD id); - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - virtual bool MSWShouldPreProcessMessage(WXMSG* msg); - - // override some base class virtuals - virtual bool SetBackgroundColour(const wxColour &colour); - virtual bool SetForegroundColour(const wxColour &colour); - - // get/set the check state for the item (only for wxTR_MULTIPLE) - bool IsItemChecked(const wxTreeItemId& item) const; - void SetItemCheck(const wxTreeItemId& item, bool check = true); - - // set/get the item state.image (state == -1 means cycle to the next one) - void SetState(const wxTreeItemId& node, int state); - int GetState(const wxTreeItemId& node); - -protected: - // SetImageList helper - void SetAnyImageList(wxImageList *imageList, int which); - - // refresh a single item - void RefreshItem(const wxTreeItemId& item); - - // end edit label - void DoEndEditLabel(bool discardChanges = false); - - virtual wxTreeItemId DoInsertItem(const wxTreeItemId& parent, - size_t pos, - const wxString& text, - int image, int selectedImage, - wxTreeItemData *data); - virtual wxTreeItemId DoInsertAfter(const wxTreeItemId& parent, - const wxTreeItemId& idPrevious, - const wxString& text, - int image = -1, int selImage = -1, - wxTreeItemData *data = NULL); - virtual wxTreeItemId DoTreeHitTest(const wxPoint& point, int& flags) const; - - // obtain the user data for the lParam member of TV_ITEM - class wxTreeItemParam *GetItemParam(const wxTreeItemId& item) const; - - - // data used only while editing the item label: - wxTextCtrl *m_textCtrl; // text control in which it is edited - wxTreeItemId m_idEdited; // the item being edited - -private: - // the common part of all ctors - void Init(); - - // helper functions - bool DoGetItem(wxTreeViewItem *tvItem) const; - void DoSetItem(wxTreeViewItem *tvItem); - - void DoExpand(const wxTreeItemId& item, int flag); - - void DeleteTextCtrl(); - - // return true if the item is the hidden root one (i.e. it's the root item - // and the tree has wxTR_HIDE_ROOT style) - bool IsHiddenRoot(const wxTreeItemId& item) const; - - - // the hash storing the items attributes (indexed by item ids) - wxMapTreeAttr m_attrs; - - // true if the hash above is not empty - bool m_hasAnyAttr; - -#if wxUSE_DRAGIMAGE - // used for dragging - wxDragImage *m_dragImage; -#endif - - // Virtual root item, if wxTR_HIDE_ROOT is set. - void* m_pVirtualRoot; - - // the starting item for selection with Shift - wxTreeItemId m_htSelStart, m_htClickedItem; - wxPoint m_ptClick; - - friend class wxTreeItemIndirectData; - friend class wxTreeSortHelper; - - DECLARE_DYNAMIC_CLASS(wxTreeCtrl) - DECLARE_NO_COPY_CLASS(wxTreeCtrl) -}; - -#endif // wxUSE_TREECTRL - -#endif // _WX_MSW_TREECTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/uxtheme.h b/desmume/src/windows/wx/include/wx/msw/uxtheme.h deleted file mode 100644 index ba64a87b5..000000000 --- a/desmume/src/windows/wx/include/wx/msw/uxtheme.h +++ /dev/null @@ -1,230 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: include/wx/msw/uxtheme.h -// Purpose: wxUxThemeEngine class: support for XP themes -// Author: John Platts, Vadim Zeitlin -// Modified by: -// Created: 2003 -// RCS-ID: $Id: uxtheme.h 42725 2006-10-30 15:37:42Z VZ $ -// Copyright: (c) 2003 John Platts, Vadim Zeitlin -// License: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UXTHEME_H_ -#define _WX_UXTHEME_H_ - -#include "wx/defs.h" - -#include "wx/msw/private.h" // we use GetHwndOf() -#include "wx/msw/uxthemep.h" - -typedef HTHEME (__stdcall *PFNWXUOPENTHEMEDATA)(HWND, const wchar_t *); -typedef HRESULT (__stdcall *PFNWXUCLOSETHEMEDATA)(HTHEME); -typedef HRESULT (__stdcall *PFNWXUDRAWTHEMEBACKGROUND)(HTHEME, HDC, int, int, const RECT *, const RECT *); -typedef HRESULT (__stdcall *PFNWXUDRAWTHEMETEXT)(HTHEME, HDC, int, int, const wchar_t *, int, DWORD, DWORD, const RECT *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEBACKGROUNDCONTENTRECT)(HTHEME, HDC, int, int, const RECT *, RECT *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEBACKGROUNDEXTENT)(HTHEME, HDC, int, int, const RECT *, RECT *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEPARTSIZE)(HTHEME, HDC, int, int, const RECT *, /* enum */ THEMESIZE, SIZE *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMETEXTEXTENT)(HTHEME, HDC, int, int, const wchar_t *, int, DWORD, const RECT *, RECT *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMETEXTMETRICS)(HTHEME, HDC, int, int, TEXTMETRIC*); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEBACKGROUNDREGION)(HTHEME, HDC, int, int, const RECT *, HRGN *); -typedef HRESULT (__stdcall *PFNWXUHITTESTTHEMEBACKGROUND)(HTHEME, HDC, int, int, DWORD, const RECT *, HRGN, POINT, unsigned short *); -typedef HRESULT (__stdcall *PFNWXUDRAWTHEMEEDGE)(HTHEME, HDC, int, int, const RECT *, unsigned int, unsigned int, RECT *); -typedef HRESULT (__stdcall *PFNWXUDRAWTHEMEICON)(HTHEME, HDC, int, int, const RECT *, HIMAGELIST, int); -typedef BOOL (__stdcall *PFNWXUISTHEMEPARTDEFINED)(HTHEME, int, int); -typedef BOOL (__stdcall *PFNWXUISTHEMEBACKGROUNDPARTIALLYTRANSPARENT)(HTHEME, int, int); -typedef HRESULT (__stdcall *PFNWXUGETTHEMECOLOR)(HTHEME, int, int, int, COLORREF*); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEMETRIC)(HTHEME, HDC, int, int, int, int *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMESTRING)(HTHEME, int, int, int, wchar_t *, int); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEBOOL)(HTHEME, int, int, int, BOOL *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEINT)(HTHEME, int, int, int, int *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEENUMVALUE)(HTHEME, int, int, int, int *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEPOSITION)(HTHEME, int, int, int, POINT *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEFONT)(HTHEME, HDC, int, int, int, LOGFONT *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMERECT)(HTHEME, int, int, int, RECT *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEMARGINS)(HTHEME, HDC, int, int, int, RECT *, MARGINS *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEINTLIST)(HTHEME, int, int, int, INTLIST*); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEPROPERTYORIGIN)(HTHEME, int, int, int, /* enum */ PROPERTYORIGIN *); -typedef HRESULT (__stdcall *PFNWXUSETWINDOWTHEME)(HWND, const wchar_t*, const wchar_t *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEFILENAME)(HTHEME, int, int, int, wchar_t *, int); -typedef COLORREF(__stdcall *PFNWXUGETTHEMESYSCOLOR)(HTHEME, int); -typedef HBRUSH (__stdcall *PFNWXUGETTHEMESYSCOLORBRUSH)(HTHEME, int); -typedef BOOL (__stdcall *PFNWXUGETTHEMESYSBOOL)(HTHEME, int); -typedef int (__stdcall *PFNWXUGETTHEMESYSSIZE)(HTHEME, int); -typedef HRESULT (__stdcall *PFNWXUGETTHEMESYSFONT)(HTHEME, int, LOGFONT *); -typedef HRESULT (__stdcall *PFNWXUGETTHEMESYSSTRING)(HTHEME, int, wchar_t *, int); -typedef HRESULT (__stdcall *PFNWXUGETTHEMESYSINT)(HTHEME, int, int *); -typedef BOOL (__stdcall *PFNWXUISTHEMEACTIVE)(); -typedef BOOL (__stdcall *PFNWXUISAPPTHEMED)(); -typedef HTHEME (__stdcall *PFNWXUGETWINDOWTHEME)(HWND); -typedef HRESULT (__stdcall *PFNWXUENABLETHEMEDIALOGTEXTURE)(HWND, DWORD); -typedef BOOL (__stdcall *PFNWXUISTHEMEDIALOGTEXTUREENABLED)(HWND); -typedef DWORD (__stdcall *PFNWXUGETTHEMEAPPPROPERTIES)(); -typedef void (__stdcall *PFNWXUSETTHEMEAPPPROPERTIES)(DWORD); -typedef HRESULT (__stdcall *PFNWXUGETCURRENTTHEMENAME)(wchar_t *, int, wchar_t *, int, wchar_t *, int); -typedef HRESULT (__stdcall *PFNWXUGETTHEMEDOCUMENTATIONPROPERTY)(const wchar_t *, const wchar_t *, wchar_t *, int); -typedef HRESULT (__stdcall *PFNWXUDRAWTHEMEPARENTBACKGROUND)(HWND, HDC, RECT *); -typedef HRESULT (__stdcall *PFNWXUENABLETHEMING)(BOOL); - -// ---------------------------------------------------------------------------- -// wxUxThemeEngine: provides all theme functions from uxtheme.dll -// ---------------------------------------------------------------------------- - -// we always define this class, even if wxUSE_UXTHEME == 0, but we just make it -// empty in this case -- this allows to use it elsewhere without any #ifdefs -#if wxUSE_UXTHEME - #include "wx/dynlib.h" - - #define wxUX_THEME_DECLARE(type, func) type func; -#else - #define wxUX_THEME_DECLARE(type, func) type func(...) { return 0; } -#endif - -class WXDLLEXPORT wxUxThemeEngine -{ -public: - // get the theme engine or NULL if themes are not available - static wxUxThemeEngine *Get(); - - // get the theme enging or NULL if themes are not available or not used for - // this application - static wxUxThemeEngine *GetIfActive(); - - // all uxtheme.dll functions - wxUX_THEME_DECLARE(PFNWXUOPENTHEMEDATA, OpenThemeData) - wxUX_THEME_DECLARE(PFNWXUCLOSETHEMEDATA, CloseThemeData) - wxUX_THEME_DECLARE(PFNWXUDRAWTHEMEBACKGROUND, DrawThemeBackground) - wxUX_THEME_DECLARE(PFNWXUDRAWTHEMETEXT, DrawThemeText) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEBACKGROUNDCONTENTRECT, GetThemeBackgroundContentRect) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEBACKGROUNDEXTENT, GetThemeBackgroundExtent) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEPARTSIZE, GetThemePartSize) - wxUX_THEME_DECLARE(PFNWXUGETTHEMETEXTEXTENT, GetThemeTextExtent) - wxUX_THEME_DECLARE(PFNWXUGETTHEMETEXTMETRICS, GetThemeTextMetrics) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEBACKGROUNDREGION, GetThemeBackgroundRegion) - wxUX_THEME_DECLARE(PFNWXUHITTESTTHEMEBACKGROUND, HitTestThemeBackground) - wxUX_THEME_DECLARE(PFNWXUDRAWTHEMEEDGE, DrawThemeEdge) - wxUX_THEME_DECLARE(PFNWXUDRAWTHEMEICON, DrawThemeIcon) - wxUX_THEME_DECLARE(PFNWXUISTHEMEPARTDEFINED, IsThemePartDefined) - wxUX_THEME_DECLARE(PFNWXUISTHEMEBACKGROUNDPARTIALLYTRANSPARENT, IsThemeBackgroundPartiallyTransparent) - wxUX_THEME_DECLARE(PFNWXUGETTHEMECOLOR, GetThemeColor) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEMETRIC, GetThemeMetric) - wxUX_THEME_DECLARE(PFNWXUGETTHEMESTRING, GetThemeString) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEBOOL, GetThemeBool) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEINT, GetThemeInt) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEENUMVALUE, GetThemeEnumValue) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEPOSITION, GetThemePosition) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEFONT, GetThemeFont) - wxUX_THEME_DECLARE(PFNWXUGETTHEMERECT, GetThemeRect) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEMARGINS, GetThemeMargins) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEINTLIST, GetThemeIntList) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEPROPERTYORIGIN, GetThemePropertyOrigin) - wxUX_THEME_DECLARE(PFNWXUSETWINDOWTHEME, SetWindowTheme) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEFILENAME, GetThemeFilename) - wxUX_THEME_DECLARE(PFNWXUGETTHEMESYSCOLOR, GetThemeSysColor) - wxUX_THEME_DECLARE(PFNWXUGETTHEMESYSCOLORBRUSH, GetThemeSysColorBrush) - wxUX_THEME_DECLARE(PFNWXUGETTHEMESYSBOOL, GetThemeSysBool) - wxUX_THEME_DECLARE(PFNWXUGETTHEMESYSSIZE, GetThemeSysSize) - wxUX_THEME_DECLARE(PFNWXUGETTHEMESYSFONT, GetThemeSysFont) - wxUX_THEME_DECLARE(PFNWXUGETTHEMESYSSTRING, GetThemeSysString) - wxUX_THEME_DECLARE(PFNWXUGETTHEMESYSINT, GetThemeSysInt) - wxUX_THEME_DECLARE(PFNWXUISTHEMEACTIVE, IsThemeActive) - wxUX_THEME_DECLARE(PFNWXUISAPPTHEMED, IsAppThemed) - wxUX_THEME_DECLARE(PFNWXUGETWINDOWTHEME, GetWindowTheme) - wxUX_THEME_DECLARE(PFNWXUENABLETHEMEDIALOGTEXTURE, EnableThemeDialogTexture) - wxUX_THEME_DECLARE(PFNWXUISTHEMEDIALOGTEXTUREENABLED, IsThemeDialogTextureEnabled) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEAPPPROPERTIES, GetThemeAppProperties) - wxUX_THEME_DECLARE(PFNWXUSETTHEMEAPPPROPERTIES, SetThemeAppProperties) - wxUX_THEME_DECLARE(PFNWXUGETCURRENTTHEMENAME, GetCurrentThemeName) - wxUX_THEME_DECLARE(PFNWXUGETTHEMEDOCUMENTATIONPROPERTY, GetThemeDocumentationProperty) - wxUX_THEME_DECLARE(PFNWXUDRAWTHEMEPARENTBACKGROUND, DrawThemeParentBackground) - wxUX_THEME_DECLARE(PFNWXUENABLETHEMING, EnableTheming) - -private: - // construcor is private as only Get() can create us and is also trivial as - // everything really happens in Initialize() - wxUxThemeEngine() { } - - // destructor is private as only Get() and wxUxThemeModule delete us, it is - // not virtual as we're not supposed to be derived from - ~wxUxThemeEngine() { } - -#if wxUSE_UXTHEME - // initialize the theme engine: load the DLL, resolve the functions - // - // return true if we can be used, false if themes are not available - bool Initialize(); - - - // uxtheme.dll - wxDynamicLibrary m_dllUxTheme; - - - // the one and only theme engine, initially NULL - static wxUxThemeEngine *ms_themeEngine; - - // this is a bool which initially has the value -1 meaning "unknown" - static int ms_isThemeEngineAvailable; - - // it must be able to delete us - friend class wxUxThemeModule; -#endif // wxUSE_UXTHEME - - DECLARE_NO_COPY_CLASS(wxUxThemeEngine) -}; - -#if wxUSE_UXTHEME - -/* static */ inline wxUxThemeEngine *wxUxThemeEngine::GetIfActive() -{ - wxUxThemeEngine *engine = Get(); - return engine && engine->IsAppThemed() && engine->IsThemeActive() - ? engine - : NULL; -} - -#else // !wxUSE_UXTHEME - -/* static */ inline wxUxThemeEngine *wxUxThemeEngine::Get() -{ - return NULL; -} - -/* static */ inline wxUxThemeEngine *wxUxThemeEngine::GetIfActive() -{ - return NULL; -} - -#endif // wxUSE_UXTHEME/!wxUSE_UXTHEME - -// ---------------------------------------------------------------------------- -// wxUxThemeHandle: encapsulates ::Open/CloseThemeData() -// ---------------------------------------------------------------------------- - -class wxUxThemeHandle -{ -public: - wxUxThemeHandle(const wxWindow *win, const wchar_t *classes) - { - wxUxThemeEngine *engine = wxUxThemeEngine::Get(); - - m_hTheme = engine ? (HTHEME)engine->OpenThemeData(GetHwndOf(win), classes) - : NULL; - } - - operator HTHEME() const { return m_hTheme; } - - ~wxUxThemeHandle() - { - if ( m_hTheme ) - { - wxUxThemeEngine::Get()->CloseThemeData(m_hTheme); - } - } - -private: - HTHEME m_hTheme; - - DECLARE_NO_COPY_CLASS(wxUxThemeHandle) -}; - -#endif // _WX_UXTHEME_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/uxthemep.h b/desmume/src/windows/wx/include/wx/msw/uxthemep.h deleted file mode 100644 index 9dc75c780..000000000 --- a/desmume/src/windows/wx/include/wx/msw/uxthemep.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Win32 5.1 theme definitions - * - * Copyright (C) 2003 Kevin Koltzau - * - * Originally written for the Wine project, and issued under - * the wxWindows License by kind permission of the author. - * - * License: wxWindows License - */ - -#ifndef __WINE_UXTHEME_H -#define __WINE_UXTHEME_H - -#include "wx/msw/wrapcctl.h" - -typedef HANDLE HTHEME; - -HRESULT WINAPI CloseThemeData(HTHEME hTheme); -HRESULT WINAPI DrawThemeBackground(HTHEME,HDC,int,int,const RECT*,const RECT*); - -#define DTBG_CLIPRECT 0x00000001 -#define DTBG_DRAWSOLID 0x00000002 -#define DTBG_OMITBORDER 0x00000004 -#define DTBG_OMITCONTENT 0x00000008 -#define DTBG_COMPUTINGREGION 0x00000010 -#define DTBG_MIRRORDC 0x00000020 - -typedef struct _DTBGOPTS { - DWORD dwSize; - DWORD dwFlags; - RECT rcClip; -} DTBGOPTS, *PDTBGOPTS; - -HRESULT WINAPI DrawThemeBackgroundEx(HTHEME,HDC,int,int,const RECT*, - const DTBGOPTS*); -HRESULT WINAPI DrawThemeEdge(HTHEME,HDC,int,int,const RECT*,UINT,UINT, - RECT*); -HRESULT WINAPI DrawThemeIcon(HTHEME,HDC,int,int,const RECT*,HIMAGELIST,int); -HRESULT WINAPI DrawThemeParentBackground(HWND,HDC,RECT*); - -#define DTT_GRAYED 0x1 - -HRESULT WINAPI DrawThemeText(HTHEME,HDC,int,int,LPCWSTR,int,DWORD,DWORD, - const RECT*); - -#define ETDT_DISABLE 0x00000001 -#define ETDT_ENABLE 0x00000002 -#define ETDT_USETABTEXTURE 0x00000004 -#define ETDT_ENABLETAB (ETDT_ENABLE|ETDT_USETABTEXTURE) - -HRESULT WINAPI EnableThemeDialogTexture(HWND,DWORD); -HRESULT WINAPI EnableTheming(BOOL); -HRESULT WINAPI GetCurrentThemeName(LPWSTR,int,LPWSTR,int,LPWSTR,int); - -#define STAP_ALLOW_NONCLIENT (1<<0) -#define STAP_ALLOW_CONTROLS (1<<1) -#define STAP_ALLOW_WEBCONTENT (1<<2) - -DWORD WINAPI GetThemeAppProperties(void); -HRESULT WINAPI GetThemeBackgroundContentRect(HTHEME,HDC,int,int, - const RECT*,RECT*); -HRESULT WINAPI GetThemeBackgroundExtent(HTHEME,HDC,int,int,const RECT*,RECT*); -HRESULT WINAPI GetThemeBackgroundRegion(HTHEME,HDC,int,int,const RECT*,HRGN*); -HRESULT WINAPI GetThemeBool(HTHEME,int,int,int,BOOL*); -HRESULT WINAPI GetThemeColor(HTHEME,int,int,int,COLORREF*); - -#if defined(__GNUC__) -# define SZ_THDOCPROP_DISPLAYNAME (const WCHAR []){ 'D','i','s','p','l','a','y','N','a','m','e',0 } -# define SZ_THDOCPROP_CANONICALNAME (const WCHAR []){ 'T','h','e','m','e','N','a','m','e',0 } -# define SZ_THDOCPROP_TOOLTIP (const WCHAR []){ 'T','o','o','l','T','i','p',0 } -# define SZ_THDOCPROP_AUTHOR (const WCHAR []){ 'a','u','t','h','o','r',0 } -#else /* lif defined(_MSC_VER) */ -# define SZ_THDOCPROP_DISPLAYNAME L"DisplayName" -# define SZ_THDOCPROP_CANONICALNAME L"ThemeName" -# define SZ_THDOCPROP_TOOLTIP L"ToolTip" -# define SZ_THDOCPROP_AUTHOR L"author" -/* -#else -static const WCHAR SZ_THDOCPROP_DISPLAYNAME[] = { 'D','i','s','p','l','a','y','N','a','m','e',0 }; -static const WCHAR SZ_THDOCPROP_CANONICALNAME[] = { 'T','h','e','m','e','N','a','m','e',0 }; -static const WCHAR SZ_THDOCPROP_TOOLTIP[] = { 'T','o','o','l','T','i','p',0 }; -static const WCHAR SZ_THDOCPROP_AUTHOR[] = { 'a','u','t','h','o','r',0 }; -*/ -#endif - -HRESULT WINAPI GetThemeDocumentationProperty(LPCWSTR,LPCWSTR,LPWSTR,int); -HRESULT WINAPI GetThemeEnumValue(HTHEME,int,int,int,int*); -HRESULT WINAPI GetThemeFilename(HTHEME,int,int,int,LPWSTR,int); -HRESULT WINAPI GetThemeFont(HTHEME,HDC,int,int,int,LOGFONTW*); -HRESULT WINAPI GetThemeInt(HTHEME,int,int,int,int*); - -#define MAX_INTLIST_COUNT 10 -typedef struct _INTLIST { - int iValueCount; - int iValues[MAX_INTLIST_COUNT]; -} INTLIST, *PINTLIST; - -HRESULT WINAPI GetThemeIntList(HTHEME,int,int,int,INTLIST*); - -typedef struct _MARGINS { - int cxLeftWidth; - int cxRightWidth; - int cyTopHeight; - int cyBottomHeight; -} MARGINS, *PMARGINS; - -HRESULT WINAPI GetThemeMargins(HTHEME,HDC,int,int,int,RECT*,MARGINS*); -HRESULT WINAPI GetThemeMetric(HTHEME,HDC,int,int,int,int*); - -typedef enum { - TS_MIN, - TS_TRUE, - TS_DRAW -} THEMESIZE; - -HRESULT WINAPI GetThemePartSize(HTHEME,HDC,int,int,RECT*,THEMESIZE,SIZE*); -HRESULT WINAPI GetThemePosition(HTHEME,int,int,int,POINT*); - -typedef enum { - PO_STATE, - PO_PART, - PO_CLASS, - PO_GLOBAL, - PO_NOTFOUND -} PROPERTYORIGIN; - -HRESULT WINAPI GetThemePropertyOrigin(HTHEME,int,int,int,PROPERTYORIGIN*); -HRESULT WINAPI GetThemeRect(HTHEME,int,int,int,RECT*); -HRESULT WINAPI GetThemeString(HTHEME,int,int,int,LPWSTR,int); -BOOL WINAPI GetThemeSysBool(HTHEME,int); -COLORREF WINAPI GetThemeSysColor(HTHEME,int); -HBRUSH WINAPI GetThemeSysColorBrush(HTHEME,int); -HRESULT WINAPI GetThemeSysFont(HTHEME,int,LOGFONTW*); -HRESULT WINAPI GetThemeSysInt(HTHEME,int,int*); -int WINAPI GetThemeSysSize(HTHEME,int); -HRESULT WINAPI GetThemeSysString(HTHEME,int,LPWSTR,int); -HRESULT WINAPI GetThemeTextExtent(HTHEME,HDC,int,int,LPCWSTR,int,DWORD, - const RECT*,RECT*); -HRESULT WINAPI GetThemeTextMetrics(HTHEME,HDC,int,int,TEXTMETRICW*); -HTHEME WINAPI GetWindowTheme(HWND); - -#define HTTB_BACKGROUNDSEG 0x0000 -#define HTTB_FIXEDBORDER 0x0002 -#define HTTB_CAPTION 0x0004 -#define HTTB_RESIZINGBORDER_LEFT 0x0010 -#define HTTB_RESIZINGBORDER_TOP 0x0020 -#define HTTB_RESIZINGBORDER_RIGHT 0x0040 -#define HTTB_RESIZINGBORDER_BOTTOM 0x0080 -#define HTTB_RESIZINGBORDER \ - (HTTB_RESIZINGBORDER_LEFT|HTTB_RESIZINGBORDER_TOP|\ - HTTB_RESIZINGBORDER_RIGHT|HTTB_RESIZINGBORDER_BOTTOM) -#define HTTB_SIZINGTEMPLATE 0x0100 -#define HTTB_SYSTEMSIZINGMARGINS 0x0200 - -HRESULT WINAPI HitTestThemeBackground(HTHEME,HDC,int,int,DWORD,const RECT*, - HRGN,POINT,WORD*); -BOOL WINAPI IsAppThemed(void); -BOOL WINAPI IsThemeActive(void); -BOOL WINAPI IsThemeBackgroundPartiallyTransparent(HTHEME,int,int); -BOOL WINAPI IsThemeDialogTextureEnabled(void); -BOOL WINAPI IsThemePartDefined(HTHEME,int,int); -HTHEME WINAPI OpenThemeData(HWND,LPCWSTR); -void WINAPI SetThemeAppProperties(DWORD); -HRESULT WINAPI SetWindowTheme(HWND,LPCWSTR,LPCWSTR); - - -#endif - diff --git a/desmume/src/windows/wx/include/wx/msw/wince/checklst.h b/desmume/src/windows/wx/include/wx/msw/wince/checklst.h deleted file mode 100644 index 76adae99d..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/checklst.h +++ /dev/null @@ -1,95 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wince/checklst.h -// Purpose: wxCheckListBox class - a listbox with checkable items -// Author: Wlodzimierz ABX Skiba -// Modified by: -// Created: 30.10.2005 -// RCS-ID: $Id: checklst.h 38319 2006-03-23 22:05:23Z VZ $ -// Copyright: (c) Wlodzimierz Skiba -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef __CHECKLSTCE__H_ -#define __CHECKLSTCE__H_ - -class WXDLLEXPORT wxCheckListBox : public wxCheckListBoxBase -{ -public: - // ctors - wxCheckListBox(); - wxCheckListBox(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int nStrings = 0, - const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - wxCheckListBox(wxWindow *parent, wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - virtual ~wxCheckListBox(); - - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - - // override base class virtuals - virtual void Delete(unsigned int n); - - // items may be checked - virtual bool IsChecked(unsigned int uiIndex) const; - virtual void Check(unsigned int uiIndex, bool bCheck = true); - - // public interface derived from wxListBox and lower classes - virtual void Clear(); - virtual unsigned int GetCount() const; - virtual int GetSelection() const; - virtual int GetSelections(wxArrayInt& aSelections) const; - virtual wxString GetString(unsigned int n) const; - virtual bool IsSelected(int n) const; - virtual void SetString(unsigned int n, const wxString& s); - - // Implementation - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); -protected: - - void OnSize(wxSizeEvent& event); - - // protected interface derived from wxListBox and lower classes - virtual int DoAppend(const wxString& item); - virtual void* DoGetItemClientData(unsigned int n) const; - virtual wxClientData* DoGetItemClientObject(unsigned int n) const; - virtual void DoInsertItems(const wxArrayString& items, unsigned int pos); - virtual void DoSetFirstItem(int n); - virtual void DoSetItemClientData(unsigned int n, void* clientData); - virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData); - virtual void DoSetItems(const wxArrayString& items, void **clientData); - virtual void DoSetSelection(int n, bool select); - // convert our styles to Windows - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - -private: - - wxArrayPtrVoid m_itemsClientData; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxCheckListBox) -}; - -#endif //_CHECKLSTCE_H diff --git a/desmume/src/windows/wx/include/wx/msw/wince/chkconf.h b/desmume/src/windows/wx/include/wx/msw/wince/chkconf.h deleted file mode 100644 index 12cca184f..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/chkconf.h +++ /dev/null @@ -1,100 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wince/chkconf.h -// Purpose: WinCE-specific configuration options checks -// Author: Vadim Zeitlin -// Modified by: -// Created: 2005-03-07 -// RCS-ID: $Id: chkconf.h 55651 2008-09-16 08:03:55Z VZ $ -// Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_WINCE_CHKCONF_H_ -#define _WX_MSW_WINCE_CHKCONF_H_ - -// Standard SDK lacks a few things, forcefully disable them -#ifdef WCE_PLATFORM_STANDARDSDK - // no shell functions support - #undef wxUSE_STDPATHS - #define wxUSE_STDPATHS 0 -#endif // WCE_PLATFORM_STANDARDSDK - -#if _WIN32_WCE < 400 - // not enough API and lack of ddraw.h - #undef wxUSE_DISPLAY - #define wxUSE_DISPLAY 0 -#endif - -// DDE doesn't exist under WinCE and wxIPC is DDE-based under MSW -#undef wxUSE_IPC -#define wxUSE_IPC 0 - -// no AUI under CE: it's unnecessary and currently doesn't compile -#undef wxUSE_AUI -#define wxUSE_AUI 0 - -// no MDI under CE -#undef wxUSE_MDI -#define wxUSE_MDI 0 -#undef wxUSE_MDI_ARCHITECTURE -#define wxUSE_MDI_ARCHITECTURE 0 - -// metafiles are not supported neither -#undef wxUSE_ENH_METAFILE -#define wxUSE_ENH_METAFILE 0 - -#undef wxUSE_METAFILE -#define wxUSE_METAFILE 0 - -// eVC doesn't support SEH -#undef wxUSE_ON_FATAL_EXCEPTION -#define wxUSE_ON_FATAL_EXCEPTION 0 - -#undef wxUSE_WXHTML_HELP -#define wxUSE_WXHTML_HELP 0 - -// libtiff and regex apparently don't compile with eVC (to check with eVC4?) -// and they're disabled for WinCE in build/bakefiles/{tiff|regex}.bkl so can't -// be enabled here -#undef wxUSE_LIBTIFF -#define wxUSE_LIBTIFF 0 - -#undef wxUSE_REGEX -#define wxUSE_REGEX 0 - -#undef wxUSE_DEBUGREPORT -#define wxUSE_DEBUGREPORT 0 - -// other MSW settings not supported by CE -#undef wxUSE_RICHEDIT -#define wxUSE_RICHEDIT 0 -#undef wxUSE_RICHEDIT2 -#define wxUSE_RICHEDIT2 0 - -#undef wxUSE_UXTHEME -#define wxUSE_UXTHEME 0 -#undef wxUSE_UXTHEME_AUTO -#define wxUSE_UXTHEME_AUTO 0 - -#undef wxUSE_UNICODE_MSLU -#define wxUSE_UNICODE_MSLU 0 - - -// Disable features which don't make sense for MS Smartphones -// (due to pointer device usage, limited controls or dialogs, file system) -#if defined(__SMARTPHONE__) - #undef wxUSE_LISTBOOK - #define wxUSE_LISTBOOK 0 - - #undef wxUSE_NOTEBOOK - #define wxUSE_NOTEBOOK 0 - - #undef wxUSE_STATUSBAR - #define wxUSE_STATUSBAR 0 - - #undef wxUSE_COLOURPICKERCTRL - #define wxUSE_COLOURPICKERCTRL 0 -#endif // __SMARTPHONE__ - -#endif // _WX_MSW_WINCE_CHKCONF_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/wince/choicece.h b/desmume/src/windows/wx/include/wx/msw/wince/choicece.h deleted file mode 100644 index 0d3f738a9..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/choicece.h +++ /dev/null @@ -1,142 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wince/choicece.h -// Purpose: wxChoice implementation for smart phones driven by WinCE -// Author: Wlodzimierz ABX Skiba -// Modified by: -// Created: 29.07.2004 -// RCS-ID: $Id: choicece.h 38319 2006-03-23 22:05:23Z VZ $ -// Copyright: (c) Wlodzimierz Skiba -// License: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CHOICECE_H_BASE_ -#define _WX_CHOICECE_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_CHOICE - -#include "wx/dynarray.h" - -class WXDLLEXPORT wxChoice; -WX_DEFINE_EXPORTED_ARRAY_PTR(wxChoice *, wxArrayChoiceSpins); - -// ---------------------------------------------------------------------------- -// Choice item -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxChoice : public wxChoiceBase -{ -public: - // ctors - wxChoice() { } - virtual ~wxChoice(); - - wxChoice(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr) - { - Create(parent, id, pos, size, n, choices, style, validator, name); - } - wxChoice(wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr) - { - Create(parent, id, pos, size, choices, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr); - - // implement base class pure virtuals - virtual int DoAppend(const wxString& item); - virtual int DoInsert(const wxString& item, unsigned int pos); - virtual void Delete(unsigned int n); - virtual void Clear() ; - - virtual unsigned int GetCount() const; - virtual int GetSelection() const; - virtual void SetSelection(int n); - - virtual int FindString(const wxString& s, bool bCase = false) const; - virtual wxString GetString(unsigned int n) const; - virtual void SetString(unsigned int n, const wxString& s); - - // get the subclassed window proc of the buddy list of choices - WXFARPROC GetBuddyWndProc() const { return m_wndProcBuddy; } - - // return the choice object whose buddy is the given window or NULL - static wxChoice *GetChoiceForListBox(WXHWND hwndBuddy); - - virtual bool MSWCommand(WXUINT param, WXWORD id); - -protected: - virtual void DoSetItemClientData(unsigned int n, void* clientData); - virtual void* DoGetItemClientData(unsigned int n) const; - virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData); - virtual wxClientData* DoGetItemClientObject(unsigned int n) const; - - // MSW implementation - virtual void DoGetPosition(int *x, int *y) const; - virtual void DoMoveWindow(int x, int y, int width, int height); - virtual wxSize DoGetBestSize() const; - virtual void DoGetSize(int *width, int *height) const; - - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - - // create and initialize the control - bool CreateAndInit(wxWindow *parent, wxWindowID id, - const wxPoint& pos, - const wxSize& size, - int n, const wxString choices[], - long style, - const wxValidator& validator, - const wxString& name); - - // free all memory we have (used by Clear() and dtor) - void Free(); - - // the data for the "buddy" list - WXHWND m_hwndBuddy; - WXFARPROC m_wndProcBuddy; - - // all existing wxChoice - this allows to find the one corresponding to - // the given buddy window in GetSpinChoiceCtrl() - static wxArrayChoiceSpins ms_allChoiceSpins; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxChoice) -}; - -#endif // wxUSE_CHOICE - -#endif // _WX_CHOICECE_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/msw/wince/helpwce.h b/desmume/src/windows/wx/include/wx/msw/wince/helpwce.h deleted file mode 100644 index a1cafb1ac..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/helpwce.h +++ /dev/null @@ -1,58 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wince/helpwce.h -// Purpose: Help system: Windows CE help implementation -// Author: Julian Smart -// Modified by: -// Created: 2003-07-12 -// RCS-ID: $Id: helpwce.h 36026 2005-10-27 21:00:26Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HELPWCE_H_ -#define _WX_HELPWCE_H_ - -#if wxUSE_HELP - -#include "wx/helpbase.h" - -class WXDLLEXPORT wxWinceHelpController : public wxHelpControllerBase -{ -public: - wxWinceHelpController(wxWindow* parentWindow = NULL): wxHelpControllerBase(parentWindow) {} - virtual ~wxWinceHelpController() {} - - // Must call this to set the filename - virtual bool Initialize(const wxString& file); - - // If file is "", reloads file given in Initialize - virtual bool LoadFile(const wxString& file = wxEmptyString); - virtual bool DisplayContents(); - virtual bool DisplaySection(int sectionNo); - virtual bool DisplaySection(const wxString& section); - virtual bool DisplayBlock(long blockNo); - virtual bool DisplayContextPopup(int contextId); - virtual bool DisplayTextPopup(const wxString& text, const wxPoint& pos); - virtual bool KeywordSearch(const wxString& k, - wxHelpSearchMode mode = wxHELP_SEARCH_ALL); - virtual bool Quit(); - - wxString GetHelpFile() const { return m_helpFile; } - -protected: - // Append extension if necessary. - wxString GetValidFilename(const wxString& file) const; - - // View topic, or just the HTML file - bool ViewURL(const wxString& topic = wxEmptyString); - -private: - wxString m_helpFile; - - DECLARE_CLASS(wxWinceHelpController) -}; - -#endif // wxUSE_MS_HTML_HELP - -#endif -// _WX_HELPWCE_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/wince/libraries.h b/desmume/src/windows/wx/include/wx/msw/wince/libraries.h deleted file mode 100644 index 1c0e83603..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/libraries.h +++ /dev/null @@ -1,59 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wince/libraries.h -// Purpose: VC++ pragmas for linking against SDK libs -// Author: Vaclav Slavik -// Modified by: -// Created: 2004-04-11 -// RCS-ID: $Id: libraries.h 38141 2006-03-16 11:03:26Z JS $ -// Copyright: (c) 2004 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_LIBRARIES_H_ -#define _WX_LIBRARIES_H_ - -// NB: According to Microsoft, it is up to the OEM to decide whether -// some of libraries will be included in the system or not. For example, -// MS' STANDARDSDK does not include cyshell.lib and aygshell.lib, while -// Pocket PC 2003 SDK does. We depend on some symbols that are in these -// libraries in some SDKs and in different libs in others. Fortunately we -// can detect what SDK is used in C++ code, so we take advantage of -// VC++'s #pragma to link against the libraries conditionally, instead of -// including libraries in project files. - -#if defined(__VISUALC__) && defined(__WXWINCE__) - -#if (_WIN32_WCE >= 400) || defined(__POCKETPC__) - // No commdlg.lib in Mobile 5.0 Smartphone -#if !(defined(__SMARTPHONE__) && _WIN32_WCE >= 1200) - #pragma comment(lib,"commdlg.lib") -#endif -#endif - -#if (_WIN32_WCE >= 400) && !defined(wxNO_RTTI) - #pragma comment(lib,"ccrtrtti.lib") -#endif - -#if defined(__WINCE_STANDARDSDK__) - // DoDragDrop: - #pragma comment(lib,"olece400.lib") -#elif defined(__POCKETPC__) - // PocketPC build: - // DoDragDrop: - #pragma comment(lib,"ceshell.lib") - - #pragma comment(lib,"aygshell.lib") -#elif defined(__HANDHELDPC__) - // Handheld PC builds. Maybe WindowsCE.NET 4.X needs another symbol. - #pragma comment(lib,"ceshell.lib") -#elif defined(__SMARTPHONE__) - // Smartphone build: - #pragma comment(lib,"ceshell.lib") - #pragma comment(lib,"aygshell.lib") -#else - #error "Unknown SDK, please fill-in missing pieces" -#endif - -#endif // __VISUALC__ && __WXWINCE__ - -#endif // _WX_LIBRARIES_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/wince/missing.h b/desmume/src/windows/wx/include/wx/msw/wince/missing.h deleted file mode 100644 index 0c5ccbec0..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/missing.h +++ /dev/null @@ -1,140 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wince/missing.h -// Purpose: Missing things in WinCE -// Author: Marco Cavallini -// Modified by: -// Created: 16/11/2002 -// RCS-ID: -// Copyright: (c) KOAN SAS ( www.koansoftware.com ) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CE_MISSING_H_ -#define _WX_CE_MISSING_H_ - -#include "wx/msw/private.h" -#include "shellapi.h" - -inline BOOL IsIconic( HWND WXUNUSED(hWnd) ) -{ - // Probably not right... -#if 0 - long style = GetWindowLong(hWnd, GWL_STYLE); - return ((style & WS_MINIMIZE) == 0); -#endif - return FALSE; -} - -#ifdef __POCKETPC__ -#define SM_CXCURSOR 13 -#define SM_CYCURSOR 14 -#endif - -// Missing from eVC 4 for some reason -#ifndef I_IMAGENONE -#define I_IMAGENONE (-2) -#endif - -#ifndef TBSTYLE_NO_DROPDOWN_ARROW -#define TBSTYLE_NO_DROPDOWN_ARROW 0x0080 -#endif - -#ifndef SHCMBM_GETMENU -#define SHCMBM_GETMENU (WM_USER + 402) -#endif - -#ifndef SHCMBM_SETSUBMENU -#define SHCMBM_SETSUBMENU (WM_USER + 400) // wparam == id of button, lParam == hmenu, return is old hmenu -#endif - -#ifndef SHCMBM_GETSUBMENU -#define SHCMBM_GETSUBMENU (WM_USER + 401) // lParam == ID -#endif - -#ifndef LVS_EX_FULLROWSELECT - #define LVS_EX_FULLROWSELECT 0x00000020 -#endif - -#ifndef TVS_FULLROWSELECT - #define TVS_FULLROWSELECT 0x1000 -#endif - -#ifndef TVM_SETBKCOLOR - #define TVM_SETBKCOLOR (TV_FIRST + 29) - #define TVM_SETTEXTCOLOR (TV_FIRST + 30) -#endif - -// Used in msgdlg.cpp, evtloop.cpp -#ifndef MB_TASKMODAL -#define MB_TASKMODAL 0x2000 -#endif - -#ifndef HGDI_ERROR -#define HGDI_ERROR ((HANDLE)(0xFFFFFFFFL)) -#endif - -// some windows styles don't exist in CE SDK, replace them with closest -// equivalents -#ifndef WS_THICKFRAME - #define WS_THICKFRAME WS_BORDER -#endif - -#ifndef WS_MINIMIZE - #define WS_MINIMIZE 0 -#endif - -#ifndef WS_MAXIMIZE - #define WS_MAXIMIZE 0 -#endif - - -// global memory functions don't exist under CE (good riddance, of course, but -// the existing code still uses them in some places, so make it compile) -// -// update: they're defined in eVC 4 inside "#ifdef UNDER_CE" block -#ifndef UNDER_CE - #define GlobalAlloc LocalAlloc - #define GlobalFree LocalFree - #define GlobalSize LocalSize - #define GPTR LPTR - #define GHND LPTR - #define GMEM_MOVEABLE 0 - #define GMEM_SHARE 0 -#endif // !UNDER_CE - -// WinCE RTL doesn't implement bsearch() used in encconv.cpp -extern "C" void * -bsearch(const void *key, const void *base, size_t num, size_t size, - int (wxCMPFUNC_CONV *cmp)(const void *, const void *)); - -#define O_RDONLY 0x0000 /* open for reading only */ -#define O_WRONLY 0x0001 /* open for writing only */ -#define O_RDWR 0x0002 /* open for reading and writing */ -#define O_APPEND 0x0008 /* writes done at eof */ - -#define O_CREAT 0x0100 /* create and open file */ -#define O_TRUNC 0x0200 /* open and truncate */ -#define O_EXCL 0x0400 /* open only if file doesn't already exist */ - -#define O_TEXT 0x4000 /* file mode is text (translated) */ -#define O_BINARY 0x8000 /* file mode is binary (untranslated) */ - -#ifndef SS_SUNKEN - #define SS_SUNKEN 0x00001000L -#endif - -// unsupported flags for WINDOWPOS structure -#ifndef SWP_NOCOPYBITS - #define SWP_NOCOPYBITS 0 -#endif - -#ifndef SWP_NOOWNERZORDER - #define SWP_NOOWNERZORDER 0 -#endif - -#ifndef SWP_NOSENDCHANGING - #define SWP_NOSENDCHANGING 0 -#endif - -#endif // _WX_CE_MISSING_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/wince/net.h b/desmume/src/windows/wx/include/wx/msw/wince/net.h deleted file mode 100644 index dbf04259f..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/net.h +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 1998, Ben Goetter. All rights reserved. -// Also released under wxWindows license - see src/msw/wince/net.cpp - -/* - patch holes in winsock - - WCE 2.0 lacks many of the 'database' winsock routines. - Stub just enough them for ss.dll. - - getprotobynumber - getservbyport - getservbyname - -*/ - -struct servent * WINSOCKAPI getservbyport(int port, const char * proto) ; - -struct servent * WINSOCKAPI getservbyname(const char * name, - const char * proto) ; -struct protoent * WINSOCKAPI getprotobynumber(int proto) ; - diff --git a/desmume/src/windows/wx/include/wx/msw/wince/resources.h b/desmume/src/windows/wx/include/wx/msw/wince/resources.h deleted file mode 100644 index df64656b2..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/resources.h +++ /dev/null @@ -1,25 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wince/resources.h -// Purpose: identifiers shared between resource compiler and eVC -// Author: Wlodzimierz ABX Skiba -// Modified by: -// Created: 01.05.2004 -// RCS-ID: $Id: resources.h 27829 2004-06-16 06:17:27Z ABX $ -// Copyright: (c) Wlodzimierz Skiba -// License: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#define IDM_LEFT 40001 -#define IDM_RIGHT 40002 -#define IDM_ITEM 40003 - -#define IDS_EMPTY 40010 - -#define IDR_POPUP_1 40020 -#define IDR_POPUP_2 40021 - -#define IDR_MENUBAR_ONE_BUTTON 40030 -#define IDR_MENUBAR_LEFT_MENU 40031 -#define IDR_MENUBAR_RIGHT_MENU 40032 -#define IDR_MENUBAR_BOTH_MENUS 40033 - diff --git a/desmume/src/windows/wx/include/wx/msw/wince/setup.h b/desmume/src/windows/wx/include/wx/msw/wince/setup.h deleted file mode 100644 index 193f703d4..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/setup.h +++ /dev/null @@ -1,1295 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wince/setup.h -// Purpose: Configuration for the library -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: setup.h 51451 2008-01-29 23:11:55Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SETUP_H_ -#define _WX_SETUP_H_ - -/* --- start common options --- */ -// ---------------------------------------------------------------------------- -// global settings -// ---------------------------------------------------------------------------- - -// define this to 0 when building wxBase library - this can also be done from -// makefile/project file overriding the value here -#ifndef wxUSE_GUI - #define wxUSE_GUI 1 -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// compatibility settings -// ---------------------------------------------------------------------------- - -// This setting determines the compatibility with 2.4 API: set it to 1 to -// enable it but please consider updating your code instead. -// -// Default is 0 -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_4 0 - -// This setting determines the compatibility with 2.6 API: set it to 0 to -// flag all cases of using deprecated functions. -// -// Default is 1 but please try building your code with 0 as the default will -// change to 0 in the next version and the deprecated functions will disappear -// in the version after it completely. -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_6 1 - -// MSW-only: Set to 0 for accurate dialog units, else 1 for old behaviour when -// default system font is used for wxWindow::GetCharWidth/Height() instead of -// the current font. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxDIALOG_UNIT_COMPATIBILITY 0 - -// ---------------------------------------------------------------------------- -// debugging settings -// ---------------------------------------------------------------------------- - -// Generic comment about debugging settings: they are very useful if you don't -// use any other memory leak detection tools such as Purify/BoundsChecker, but -// are probably redundant otherwise. Also, Visual C++ CRT has the same features -// as wxWidgets memory debugging subsystem built in since version 5.0 and you -// may prefer to use it instead of built in memory debugging code because it is -// faster and more fool proof. -// -// Using VC++ CRT memory debugging is enabled by default in debug mode -// (__WXDEBUG__) if wxUSE_GLOBAL_MEMORY_OPERATORS is *not* enabled (i.e. is 0) -// and if __NO_VC_CRTDBG__ is not defined. - -// If 1, enables wxDebugContext, for writing error messages to file, etc. If -// __WXDEBUG__ is not defined, will still use the normal memory operators. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_CONTEXT 0 - -// If 1, enables debugging versions of wxObject::new and wxObject::delete *IF* -// __WXDEBUG__ is also defined. -// -// WARNING: this code may not work with all architectures, especially if -// alignment is an issue. This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 1 if you are not using a memory debugging tool, else 0 -#define wxUSE_MEMORY_TRACING 0 - -// In debug mode, cause new and delete to be redefined globally. -// If this causes problems (e.g. link errors which is a common problem -// especially if you use another library which also redefines the global new -// and delete), set this to 0. -// This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -// In debug mode, causes new to be defined to be WXDEBUG_NEW (see object.h). If -// this causes problems (e.g. link errors), set this to 0. You may need to set -// this to 0 if using templates (at least for VC++). This switch is currently -// ignored for mingw / cygwin / CodeWarrior -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_NEW_ALWAYS 0 - -// wxHandleFatalExceptions() may be used to catch the program faults at run -// time and, instead of terminating the program with a usual GPF message box, -// call the user-defined wxApp::OnFatalException() function. If you set -// wxUSE_ON_FATAL_EXCEPTION to 0, wxHandleFatalExceptions() will not work. -// -// This setting is for Win32 only and can only be enabled if your compiler -// supports Win32 structured exception handling (currently only VC++ does) -// -// Default is 1 -// -// Recommended setting: 1 if your compiler supports it. -#define wxUSE_ON_FATAL_EXCEPTION 1 - -// Set this to 1 to be able to generate a human-readable (unlike -// machine-readable minidump created by wxCrashReport::Generate()) stack back -// trace when your program crashes using wxStackWalker -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_STACKWALKER 1 - -// Set this to 1 to compile in wxDebugReport class which allows you to create -// and optionally upload to your web site a debug report consisting of back -// trace of the crash (if wxUSE_STACKWALKER == 1) and other information. -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, it is compiled into a separate library so there -// is no overhead if you don't use it -#define wxUSE_DEBUGREPORT 1 - -// ---------------------------------------------------------------------------- -// Unicode support -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE to 1 to compile wxWidgets in Unicode mode: wxChar will be -// defined as wchar_t, wxString will use Unicode internally. If you set this -// to 1, you must use wxT() macro for all literal strings in the program. -// -// Unicode is currently only fully supported under Windows NT/2000/XP -// (Windows 9x doesn't support it and the programs compiled in Unicode mode -// will not run under 9x -- but see wxUSE_UNICODE_MSLU below). -// -// Default is 0 -// -// Recommended setting: 0 (unless you only plan to use Windows NT/2000/XP) -#ifndef wxUSE_UNICODE - #define wxUSE_UNICODE 0 -#endif - -// Setting wxUSE_WCHAR_T to 1 gives you some degree of Unicode support without -// compiling the program in Unicode mode. More precisely, it will be possible -// to construct wxString from a wide (Unicode) string and convert any wxString -// to Unicode. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_WCHAR_T 1 - -// ---------------------------------------------------------------------------- -// global features -// ---------------------------------------------------------------------------- - -// Compile library in exception-safe mode? If set to 1, the library will try to -// behave correctly in presence of exceptions (even though it still will not -// use the exceptions itself) and notify the user code about any unhandled -// exceptions. If set to 0, propagation of the exceptions through the library -// code will lead to undefined behaviour -- but the code itself will be -// slightly smaller and faster. -// -// Note that like wxUSE_THREADS this option is automatically set to 0 if -// wxNO_EXCEPTIONS is defined. -// -// Default is 1 -// -// Recommended setting: depends on whether you intend to use C++ exceptions -// in your own code (1 if you do, 0 if you don't) -#define wxUSE_EXCEPTIONS 1 - -// Set wxUSE_EXTENDED_RTTI to 1 to use extended RTTI -// -// Default is 0 -// -// 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<Foo*> and std::vector<Foo*>, 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. -// -// Default is 1 -// -// Recommended setting: 1 (always) -#define wxUSE_LOG 1 - -// Recommended setting: 1 -#define wxUSE_LOGWINDOW 1 - -// Recommended setting: 1 -#define wxUSE_LOGGUI 1 - -// Recommended setting: 1 -#define wxUSE_LOG_DIALOG 1 - -// Support for command line parsing using wxCmdLineParser class. -// -// Default is 1 -// -// Recommended setting: 1 (can be set to 0 if you don't use the cmd line) -#define wxUSE_CMDLINE_PARSER 1 - -// Support for multithreaded applications: if 1, compile in thread classes -// (thread.h) and make the library a bit more thread safe. Although thread -// support is quite stable by now, you may still consider recompiling the -// library without it if you have no use for it - this will result in a -// somewhat smaller and faster operation. -// -// Notice that if wxNO_THREADS is defined, wxUSE_THREADS is automatically reset -// to 0 in wx/chkconf.h, so, for example, if you set USE_THREADS to 0 in -// build/msw/config.* file this value will have no effect. -// -// Default is 1 -// -// Recommended setting: 0 unless you do plan to develop MT applications -#define wxUSE_THREADS 1 - -// If enabled, compiles wxWidgets streams classes -// -// wx stream classes are used for image IO, process IO redirection, network -// protocols implementation and much more and so disabling this results in a -// lot of other functionality being lost. -// -// Default is 1 -// -// Recommended setting: 1 as setting it to 0 disables many other things -#define wxUSE_STREAMS 1 - -// 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 0 - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// 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 header, 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_STRING 0 -#else - #define wxUSE_STD_STRING 1 -#endif - -// 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 -// of wxVsnprintf. The standard vsnprintf() supports positional parameters on -// many Unix systems but usually doesn't under Windows. -// -// Positional parameters are very useful when translating a program since using -// them in formatting strings allow translators to correctly reorder the -// translated sentences. -// -// Default is 1 -// -// Recommended setting: 1 if you want to support multiple languages -#define wxUSE_PRINTF_POS_PARAMS 1 - -// ---------------------------------------------------------------------------- -// non GUI features selection -// ---------------------------------------------------------------------------- - -// Set wxUSE_LONGLONG to 1 to compile the wxLongLong class. This is a 64 bit -// integer which is implemented in terms of native 64 bit integers if any or -// uses emulation otherwise. -// -// This class is required by wxDateTime and so you should enable it if you want -// to use wxDateTime. For most modern platforms, it will use the native 64 bit -// integers in which case (almost) all of its functions are inline and it -// almost does not take any space, so there should be no reason to switch it -// off. -// -// Recommended setting: 1 -#define wxUSE_LONGLONG 1 - -// Set wxUSE_(F)FILE to 1 to compile wx(F)File classes. wxFile uses low level -// POSIX functions for file access, wxFFile uses ANSI C stdio.h functions. -// -// Default is 1 -// -// Recommended setting: 1 (wxFile is highly recommended as it is required by -// i18n code, wxFileConfig and others) -#define wxUSE_FILE 1 -#define wxUSE_FFILE 1 - -// Use wxFSVolume class providing access to the configured/active mount points -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely disabled if you don't use it) -#define wxUSE_FSVOLUME 1 - -// Use wxStandardPaths class which allows to retrieve some standard locations -// in the file system -// -// Default is 1 -// -// Recommended setting: 1 (may be disabled to save space, but not much) -#define wxUSE_STDPATHS 1 - -// use wxTextBuffer class: required by wxTextFile -#define wxUSE_TEXTBUFFER 1 - -// use wxTextFile class: requires wxFile and wxTextBuffer, required by -// wxFileConfig -#define wxUSE_TEXTFILE 1 - -// i18n support: _() macro, wxLocale class. Requires wxTextFile. -#define wxUSE_INTL 1 - -// Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which -// allow to manipulate dates, times and time intervals. wxDateTime replaces the -// old wxTime and wxDate classes which are still provided for backwards -// compatibility (and implemented in terms of wxDateTime). -// -// Note that this class is relatively new and is still officially in alpha -// stage because some features are not yet (fully) implemented. It is already -// quite useful though and should only be disabled if you are aiming at -// absolutely minimal version of the library. -// -// Requires: wxUSE_LONGLONG -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_DATETIME 1 - -// Set wxUSE_TIMER to 1 to compile wxTimer class -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_TIMER 1 - -// Use wxStopWatch clas. -// -// Default is 1 -// -// Recommended setting: 1 (needed by wxSocket) -#define wxUSE_STOPWATCH 1 - -// Setting wxUSE_CONFIG to 1 enables the use of wxConfig and related classes -// which allow the application to store its settings in the persistent -// storage. Setting this to 1 will also enable on-demand creation of the -// global config object in wxApp. -// -// See also wxUSE_CONFIG_NATIVE below. -// -// Recommended setting: 1 -#define wxUSE_CONFIG 1 - -// If wxUSE_CONFIG is 1, you may choose to use either the native config -// classes under Windows (using .INI files under Win16 and the registry under -// Win32) or the portable text file format used by the config classes under -// Unix. -// -// Default is 1 to use native classes. Note that you may still use -// wxFileConfig even if you set this to 1 - just the config object created by -// default for the applications needs will be a wxRegConfig or wxIniConfig and -// not wxFileConfig. -// -// Recommended setting: 1 -#define wxUSE_CONFIG_NATIVE 1 - -// If wxUSE_DIALUP_MANAGER is 1, compile in wxDialUpManager class which allows -// to connect/disconnect from the network and be notified whenever the dial-up -// network connection is established/terminated. Requires wxUSE_DYNAMIC_LOADER. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DIALUP_MANAGER 1 - -// Compile in classes for run-time DLL loading and function calling. -// Required by wxUSE_DIALUP_MANAGER. -// -// This setting is for Win32 only -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DYNLIB_CLASS 1 - -// experimental, don't use for now -#define wxUSE_DYNAMIC_LOADER 1 - -// Set to 1 to use socket classes -#define wxUSE_SOCKETS 1 - -// Set to 1 to enable virtual file systems (required by wxHTML) -#define wxUSE_FILESYSTEM 1 - -// Set to 1 to enable virtual ZIP filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ZIP 1 - -// Set to 1 to enable virtual archive filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ARCHIVE 1 - -// Set to 1 to enable virtual Internet filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_INET 1 - -// wxArchive classes for accessing archives such as zip and tar -#define wxUSE_ARCHIVE_STREAMS 1 - -// Set to 1 to compile wxZipInput/OutputStream classes. -#define wxUSE_ZIPSTREAM 1 - -// Set to 1 to compile wxTarInput/OutputStream classes. -#define wxUSE_TARSTREAM 1 - -// Set to 1 to compile wxZlibInput/OutputStream classes. Also required by -// wxUSE_LIBPNG -#define wxUSE_ZLIB 1 - -// If enabled, the code written by Apple will be used to write, in a portable -// way, float on the disk. See extended.c for the license which is different -// from wxWidgets one. -// -// Default is 1. -// -// Recommended setting: 1 unless you don't like the license terms (unlikely) -#define wxUSE_APPLE_IEEE 1 - -// Joystick support class -#define wxUSE_JOYSTICK 1 - -// wxFontMapper class -#define wxUSE_FONTMAP 1 - -// wxMimeTypesManager class -#define wxUSE_MIMETYPE 1 - -// wxProtocol and related classes: if you want to use either of wxFTP, wxHTTP -// or wxURL you need to set this to 1. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_PROTOCOL 1 - -// The settings for the individual URL schemes -#define wxUSE_PROTOCOL_FILE 1 -#define wxUSE_PROTOCOL_FTP 1 -#define wxUSE_PROTOCOL_HTTP 1 - -// Define this to use wxURL class. -#define wxUSE_URL 1 - -// Define this to use native platform url and protocol support. -// Currently valid only for MS-Windows. -// Note: if you set this to 1, you can open ftp/http/gopher sites -// and obtain a valid input stream for these sites -// even when you set wxUSE_PROTOCOL_FTP/HTTP to 0. -// Doing so reduces the code size. -// -// This code is experimental and subject to change. -#define wxUSE_URL_NATIVE 0 - -// Support for wxVariant class used in several places throughout the library, -// notably in wxDataViewCtrl API. -// -// Default is 1. -// -// Recommended setting: 1 unless you want to reduce the library size as much as -// possible in which case setting this to 0 can gain up to 100KB. -#define wxUSE_VARIANT 1 - -// Support for regular expression matching via wxRegEx class: enable this to -// use POSIX regular expressions in your code. You need to compile regex -// library from src/regex to use it under Windows. -// -// Default is 0 -// -// Recommended setting: 1 if your compiler supports it, if it doesn't please -// contribute us a makefile for src/regex for it -#define wxUSE_REGEX 1 - -// wxSystemOptions class -#define wxUSE_SYSTEM_OPTIONS 1 - -// wxSound class -#define wxUSE_SOUND 1 - -// Use wxMediaCtrl -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_MEDIACTRL 1 - -// Use GStreamer for Unix (req a lot of dependancies) -// -// Default is 0 -// -// Recommended setting: 1 (wxMediaCtrl won't work by default without it) -#define wxUSE_GSTREAMER 0 - -// Use wxWidget's XRC XML-based resource system. Recommended. -// -// Default is 1 -// -// Recommended setting: 1 (requires wxUSE_XML) -#define wxUSE_XRC 1 - -// XML parsing classes. Note that their API will change in the future, so -// using wxXmlDocument and wxXmlNode in your app is not recommended. -// -// Default is the same as wxUSE_XRC, i.e. 1 by default. -// -// Recommended setting: 1 (required by XRC) -#define wxUSE_XML wxUSE_XRC - -// Use wxWidget's AUI docking system -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_AUI 1 - - -// Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced -// 2D drawing API. (Still somewhat experimental) -// -// Please note that on Windows you will need to link with gdiplus.lib (use -// USE_GDIPLUS=1 for makefile builds) and distribute gdiplus.dll with your -// application if you want it to be runnable on pre-XP systems. -// -// Default is 0 -// -// Recommended setting: 1 -#ifndef wxUSE_GRAPHICS_CONTEXT -#define wxUSE_GRAPHICS_CONTEXT 0 -#endif - -// ---------------------------------------------------------------------------- -// Individual GUI controls -// ---------------------------------------------------------------------------- - -// You must set wxUSE_CONTROLS to 1 if you are using any controls at all -// (without it, wxControl class is not compiled) -// -// Default is 1 -// -// Recommended setting: 1 (don't change except for very special programs) -#define wxUSE_CONTROLS 1 - -// wxPopupWindow class is a top level transient window. It is currently used -// to implement wxTipWindow -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0 if you don't wxUSE_TIPWINDOW) -#define wxUSE_POPUPWIN 1 - -// wxTipWindow allows to implement the custom tooltips, it is used by the -// context help classes. Requires wxUSE_POPUPWIN. -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0) -#define wxUSE_TIPWINDOW 1 - -// Each of the settings below corresponds to one wxWidgets control. They are -// all switched on by default but may be disabled if you are sure that your -// program (including any standard dialogs it can show!) doesn't need them and -// if you desperately want to save some space. If you use any of these you must -// set wxUSE_CONTROLS as well. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl -#define wxUSE_BUTTON 1 // wxButton -#define wxUSE_BMPBUTTON 1 // wxBitmapButton -#define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl -#define wxUSE_CHECKBOX 1 // wxCheckBox -#define wxUSE_CHECKLISTBOX 1 // wxCheckListBox (requires wxUSE_OWNER_DRAWN) -#define wxUSE_CHOICE 1 // wxChoice -#define wxUSE_COLLPANE 1 // wxCollapsiblePane -#define wxUSE_COLOURPICKERCTRL 1 // wxColourPickerCtrl -#define wxUSE_COMBOBOX 1 // wxComboBox -#define wxUSE_DATAVIEWCTRL 1 // wxDataViewCtrl -#define wxUSE_DATEPICKCTRL 1 // wxDatePickerCtrl -#define wxUSE_DIRPICKERCTRL 1 // wxDirPickerCtrl -#define wxUSE_FILEPICKERCTRL 1 // wxFilePickerCtrl -#define wxUSE_FONTPICKERCTRL 1 // wxFontPickerCtrl -#define wxUSE_GAUGE 1 // wxGauge -#define wxUSE_HYPERLINKCTRL 1 // wxHyperlinkCtrl -#define wxUSE_LISTBOX 1 // wxListBox -#define wxUSE_LISTCTRL 1 // wxListCtrl -#define wxUSE_RADIOBOX 1 // wxRadioBox -#define wxUSE_RADIOBTN 1 // wxRadioButton -#define wxUSE_SCROLLBAR 1 // wxScrollBar -#define wxUSE_SEARCHCTRL 1 // wxSearchCtrl -#define wxUSE_SLIDER 1 // wxSlider -#define wxUSE_SPINBTN 1 // wxSpinButton -#define wxUSE_SPINCTRL 1 // wxSpinCtrl -#define wxUSE_STATBOX 1 // wxStaticBox -#define wxUSE_STATLINE 1 // wxStaticLine -#define wxUSE_STATTEXT 1 // wxStaticText -#define wxUSE_STATBMP 1 // wxStaticBitmap -#define wxUSE_TEXTCTRL 1 // wxTextCtrl -#define wxUSE_TOGGLEBTN 1 // requires wxButton -#define wxUSE_TREECTRL 1 // wxTreeCtrl - -// Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR -// below either wxStatusBar95 or a generic wxStatusBar will be used. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_STATUSBAR 1 - -// Two status bar implementations are available under Win32: the generic one -// or the wrapper around native control. For native look and feel the native -// version should be used. -// -// Default is 1 for the platforms where native status bar is supported. -// -// Recommended setting: 1 (there is no advantage in using the generic one) -#define wxUSE_NATIVE_STATUSBAR 1 - -// wxToolBar related settings: if wxUSE_TOOLBAR is 0, don't compile any toolbar -// classes at all. Otherwise, use the native toolbar class unless -// wxUSE_TOOLBAR_NATIVE is 0. -// -// Default is 1 for all settings. -// -// Recommended setting: 1 for wxUSE_TOOLBAR and wxUSE_TOOLBAR_NATIVE. -#define wxUSE_TOOLBAR 1 -#define wxUSE_TOOLBAR_NATIVE 1 - -// wxNotebook is a control with several "tabs" located on one of its sides. It -// may be used to logically organise the data presented to the user instead of -// putting everything in one huge dialog. It replaces wxTabControl and related -// classes of wxWin 1.6x. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_NOTEBOOK 1 - -// wxListbook control is similar to wxNotebook but uses wxListCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_LISTBOOK 1 - -// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CHOICEBOOK 1 - -// wxTreebook control is similar to wxNotebook but uses wxTreeCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TREEBOOK 1 - -// wxToolbook control is similar to wxNotebook but uses wxToolBar instead of -// tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLBOOK 1 - -// wxTabDialog is a generic version of wxNotebook but it is incompatible with -// the new class. It shouldn't be used in new code. -// -// Default is 0. -// -// Recommended setting: 0 (use wxNotebook) -#define wxUSE_TAB_DIALOG 0 - -// wxGrid class -// -// Default is 1, set to 0 to cut down compilation time and binaries size if you -// don't use it. -// -// Recommended setting: 1 -// -#define wxUSE_GRID 1 - -// wxMiniFrame class: a frame with narrow title bar -// -// Default is 1. -// -// Recommended setting: 1 (it doesn't cost almost anything) -#define wxUSE_MINIFRAME 1 - -// wxComboCtrl and related classes: combobox with custom popup window and -// not necessarily a listbox. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 except for wxUniv where it -// it used by wxComboBox -#define wxUSE_COMBOCTRL 1 - -// wxOwnerDrawnComboBox is a custom combobox allowing to paint the combobox -// items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0, except where it is -// needed as a base class for generic wxBitmapComboBox. -#define wxUSE_ODCOMBOBOX 1 - -// wxBitmapComboBox is a combobox that can have images in front of text items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 -#define wxUSE_BITMAPCOMBOBOX 1 - -// ---------------------------------------------------------------------------- -// Miscellaneous GUI stuff -// ---------------------------------------------------------------------------- - -// wxAcceleratorTable/Entry classes and support for them in wxMenu(Bar) -#define wxUSE_ACCEL 1 - -// Hotkey support (currently Windows only) -#define wxUSE_HOTKEY 1 - -// Use wxCaret: a class implementing a "cursor" in a text control (called caret -// under Windows). -// -// Default is 1. -// -// Recommended setting: 1 (can be safely set to 0, not used by the library) -#define wxUSE_CARET 1 - -// Use wxDisplay class: it allows enumerating all displays on a system and -// their geometries as well as finding the display on which the given point or -// window lies. -// -// Default is 1. -// -// Recommended setting: 1 if you need it, can be safely set to 0 otherwise -#define wxUSE_DISPLAY 1 - -// Miscellaneous geometry code: needed for Canvas library -#define wxUSE_GEOMETRY 1 - -// Use wxImageList. This class is needed by wxNotebook, wxTreeCtrl and -// wxListCtrl. -// -// Default is 1. -// -// Recommended setting: 1 (set it to 0 if you don't use any of the controls -// enumerated above, then this class is mostly useless too) -#define wxUSE_IMAGLIST 1 - -// Use wxMenu, wxMenuBar, wxMenuItem. -// -// Default is 1. -// -// Recommended setting: 1 (can't be disabled under MSW) -#define wxUSE_MENUS 1 - -// Use wxSashWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SASH 1 - -// Use wxSplitterWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SPLITTER 1 - -// Use wxToolTip and wxWindow::Set/GetToolTip() methods. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLTIPS 1 - -// wxValidator class and related methods -#define wxUSE_VALIDATORS 1 - -// ---------------------------------------------------------------------------- -// common dialogs -// ---------------------------------------------------------------------------- - -// On rare occasions (e.g. using DJGPP) may want to omit common dialogs (e.g. -// file selector, printer dialog). Switching this off also switches off the -// printing architecture and interactive wxPrinterDC. -// -// Default is 1 -// -// Recommended setting: 1 (unless it really doesn't work) -#define wxUSE_COMMON_DIALOGS 1 - -// wxBusyInfo displays window with message when app is busy. Works in same way -// as wxBusyCursor -#define wxUSE_BUSYINFO 1 - -// Use single/multiple choice dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_CHOICEDLG 1 - -// Use colour picker dialog -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_COLOURDLG 1 - -// wxDirDlg class for getting a directory name from user -#define wxUSE_DIRDLG 1 - -// TODO: setting to choose the generic or native one - -// Use file open/save dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in many places in the library itself) -#define wxUSE_FILEDLG 1 - -// Use find/replace dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely set to 0) -#define wxUSE_FINDREPLDLG 1 - -// Use font picker dialog -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_FONTDLG 1 - -// Use wxMessageDialog and wxMessageBox. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_MSGDLG 1 - -// progress dialog class for lengthy operations -#define wxUSE_PROGRESSDLG 1 - -// support for startup tips (wxShowTip &c) -#define wxUSE_STARTUP_TIPS 1 - -// text entry dialog and wxGetTextFromUser function -#define wxUSE_TEXTDLG 1 - -// number entry dialog -#define wxUSE_NUMBERDLG 1 - -// splash screen class -#define wxUSE_SPLASH 1 - -// wizards -#define wxUSE_WIZARDDLG 1 - -// Compile in wxAboutBox() function showing the standard "About" dialog. -// -// Default is 1 -// -// Recommended setting: 1 but can be set to 0 to save some space if you don't -// use this function -#define wxUSE_ABOUTDLG 1 - -// ---------------------------------------------------------------------------- -// Metafiles support -// ---------------------------------------------------------------------------- - -// Windows supports the graphics format known as metafile which is, though not -// portable, is widely used under Windows and so is supported by wxWin (under -// Windows only, of course). Win16 (Win3.1) used the so-called "Window -// MetaFiles" or WMFs which were replaced with "Enhanced MetaFiles" or EMFs in -// Win32 (Win9x, NT, 2000). Both of these are supported in wxWin and, by -// default, WMFs will be used under Win16 and EMFs under Win32. This may be -// changed by setting wxUSE_WIN_METAFILES_ALWAYS to 1 and/or setting -// wxUSE_ENH_METAFILE to 0. You may also set wxUSE_METAFILE to 0 to not compile -// in any metafile related classes at all. -// -// Default is 1 for wxUSE_ENH_METAFILE and 0 for wxUSE_WIN_METAFILES_ALWAYS. -// -// Recommended setting: default or 0 for everything for portable programs. -#define wxUSE_METAFILE 1 -#define wxUSE_ENH_METAFILE 1 -#define wxUSE_WIN_METAFILES_ALWAYS 0 - -// ---------------------------------------------------------------------------- -// Big GUI components -// ---------------------------------------------------------------------------- - -// Set to 0 to disable MDI support. -// -// Requires wxUSE_NOTEBOOK under platforms other than MSW. -// -// Default is 1. -// -// Recommended setting: 1, can be safely set to 0. -#define wxUSE_MDI 1 - -// Set to 0 to disable document/view architecture -#define wxUSE_DOC_VIEW_ARCHITECTURE 1 - -// Set to 0 to disable MDI document/view architecture -// -// Requires wxUSE_MDI && wxUSE_DOC_VIEW_ARCHITECTURE -#define wxUSE_MDI_ARCHITECTURE 1 - -// Set to 0 to disable print/preview architecture code -#define wxUSE_PRINTING_ARCHITECTURE 1 - -// wxHTML sublibrary allows to display HTML in wxWindow programs and much, -// much more. -// -// Default is 1. -// -// Recommended setting: 1 (wxHTML is great!), set to 0 if you want compile a -// smaller library. -#define wxUSE_HTML 1 - -// Setting wxUSE_GLCANVAS to 1 enables OpenGL support. You need to have OpenGL -// headers and libraries to be able to compile the library with wxUSE_GLCANVAS -// set to 1. Note that for some compilers (notably Microsoft Visual C++) you -// will need to manually add opengl32.lib and glu32.lib to the list of -// libraries linked with your program if you use OpenGL. -// -// Default is 0. -// -// Recommended setting: 1 if you intend to use OpenGL, 0 otherwise -#define wxUSE_GLCANVAS 0 - -// wxRichTextCtrl allows editing of styled text. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 if you want compile a -// smaller library. -#define wxUSE_RICHTEXT 1 - -// ---------------------------------------------------------------------------- -// Data transfer -// ---------------------------------------------------------------------------- - -// Use wxClipboard class for clipboard copy/paste. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CLIPBOARD 1 - -// Use wxDataObject and related classes. Needed for clipboard and OLE drag and -// drop -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DATAOBJ 1 - -// Use wxDropTarget and wxDropSource classes for drag and drop (this is -// different from "built in" drag and drop in wxTreeCtrl which is always -// available). Requires wxUSE_DATAOBJ. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DRAG_AND_DROP 1 - -// Use wxAccessible for enhanced and customisable accessibility. -// Depends on wxUSE_OLE. -// -// Default is 0. -// -// Recommended setting (at present): 0 -#define wxUSE_ACCESSIBILITY 0 - -// ---------------------------------------------------------------------------- -// miscellaneous settings -// ---------------------------------------------------------------------------- - -// wxSingleInstanceChecker class allows to verify at startup if another program -// instance is running. -// -// Default is 1 -// -// Recommended setting: 1 (the class is tiny, disabling it won't save much -// space) -#define wxUSE_SNGLINST_CHECKER 1 - -#define wxUSE_DRAGIMAGE 1 - -#define wxUSE_IPC 1 - // 0 for no interprocess comms -#define wxUSE_HELP 1 - // 0 for no help facility - -// Should we use MS HTML help for wxHelpController? If disabled, neither -// wxCHMHelpController nor wxBestHelpController are available. -// -// Default is 1 under MSW, 0 is always used for the other platforms. -// -// Recommended setting: 1, only set to 0 if you have trouble compiling -// wxCHMHelpController (could be a problem with really ancient compilers) -#define wxUSE_MS_HTML_HELP 1 - - -// Use wxHTML-based help controller? -#define wxUSE_WXHTML_HELP 1 - -#define wxUSE_RESOURCES 0 - // 0 for no wxGetResource/wxWriteResource -#define wxUSE_CONSTRAINTS 1 - // 0 for no window layout constraint system - -#define wxUSE_SPLINES 1 - // 0 for no splines - -#define wxUSE_MOUSEWHEEL 1 - // Include mouse wheel support - -// ---------------------------------------------------------------------------- -// postscript support settings -// ---------------------------------------------------------------------------- - -// Set to 1 for PostScript device context. -#define wxUSE_POSTSCRIPT 0 - -// Set to 1 to use font metric files in GetTextExtent -#define wxUSE_AFM_FOR_POSTSCRIPT 1 - -// ---------------------------------------------------------------------------- -// database classes -// ---------------------------------------------------------------------------- - -// Define 1 to use ODBC classes -#define wxUSE_ODBC 0 - -// For backward compatibility reasons, this parameter now only controls the -// default scrolling method used by cursors. This default behavior can be -// overriden by setting the second param of wxDB::wxDbGetConnection() or -// wxDb() constructor to indicate whether the connection (and any wxDbTable()s -// that use the connection) should support forward only scrolling of cursors, -// or both forward and backward support for backward scrolling cursors is -// dependent on the data source as well as the ODBC driver being used. -#define wxODBC_FWD_ONLY_CURSORS 1 - -// Default is 0. Set to 1 to use the deprecated classes, enum types, function, -// member variables. With a setting of 1, full backward compatibility with the -// 2.0.x release is possible. It is STRONGLY recommended that this be set to 0, -// as future development will be done only on the non-deprecated -// functions/classes/member variables/etc. -#define wxODBC_BACKWARD_COMPATABILITY 0 - -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. -// -// Default is 1. -// -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows <iostream> and <iostream.h> but you can't mix -// them. Set to 1 for <iostream.h>, 0 for <iostream>. Note that VC++ 7.1 -// and later doesn't support wxUSE_IOSTREAMH == 1 and so <iostream> will be -// used anyhow. -// -// Default is 1. -// -// Recommended setting: whatever your compiler likes more -#define wxUSE_IOSTREAMH 1 - -// ---------------------------------------------------------------------------- -// image format support -// ---------------------------------------------------------------------------- - -// wxImage supports many different image formats which can be configured at -// compile-time. BMP is always supported, others are optional and can be safely -// disabled if you don't plan to use images in such format sometimes saving -// substantial amount of code in the final library. -// -// Some formats require an extra library which is included in wxWin sources -// which is mentioned if it is the case. - -// Set to 1 for wxImage support (recommended). -#define wxUSE_IMAGE 1 - -// Set to 1 for PNG format support (requires libpng). Also requires wxUSE_ZLIB. -#define wxUSE_LIBPNG 1 - -// Set to 1 for JPEG format support (requires libjpeg) -#define wxUSE_LIBJPEG 1 - -// Set to 1 for TIFF format support (requires libtiff) -#define wxUSE_LIBTIFF 1 - -// Set to 1 for TGA format support (loading only) -#define wxUSE_TGA 1 - -// Set to 1 for GIF format support -#define wxUSE_GIF 1 - -// Set to 1 for PNM format support -#define wxUSE_PNM 1 - -// Set to 1 for PCX format support -#define wxUSE_PCX 1 - -// Set to 1 for IFF format support (Amiga format) -#define wxUSE_IFF 0 - -// Set to 1 for XPM format support -#define wxUSE_XPM 1 - -// Set to 1 for MS Icons and Cursors format support -#define wxUSE_ICO_CUR 1 - -// Set to 1 to compile in wxPalette class -#define wxUSE_PALETTE 1 - -// ---------------------------------------------------------------------------- -// wxUniversal-only options -// ---------------------------------------------------------------------------- - -// Set to 1 to enable compilation of all themes, this is the default -#define wxUSE_ALL_THEMES 1 - -// Set to 1 to enable the compilation of individual theme if wxUSE_ALL_THEMES -// is unset, if it is set these options are not used; notice that metal theme -// uses Win32 one -#define wxUSE_THEME_GTK 0 -#define wxUSE_THEME_METAL 0 -#define wxUSE_THEME_MONO 0 -#define wxUSE_THEME_WIN32 0 - - -/* --- end common options --- */ - -// ---------------------------------------------------------------------------- -// general Windows-specific stuff -// ---------------------------------------------------------------------------- - -// Set this to 1 for generic OLE support: this is required for drag-and-drop, -// clipboard, OLE Automation. Only set it to 0 if your compiler is very old and -// can't compile/doesn't have the OLE headers. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_OLE 1 - -// Set this to 1 to enable wxDIB (don't change unless you have reason to) -#define wxUSE_WXDIB 1 - -// ---------------------------------------------------------------------------- -// Windows CE specific stuff -// ---------------------------------------------------------------------------- - -// list of things which don't make sense under Windows CE in alphabetical order -// (please keep it!) -// -// NB: stuff which doesn't work at all under CE is forcefully disabled in -// wx/msw/wince/chkconf.h - -// Windows CE doesn't use RAS so wxDialUpManager doesn't work under it -#undef wxUSE_DIALUP_MANAGER -#define wxUSE_DIALUP_MANAGER 0 - -#undef wxUSE_DRAG_AND_DROP -#define wxUSE_DRAG_AND_DROP 0 - -#undef wxUSE_FSVOLUME -#define wxUSE_FSVOLUME 0 - -// MDI is not supported under CE -#undef wxUSE_MDI -#define wxUSE_MDI 0 - -#undef wxUSE_MDI_ARCHITECTURE -#define wxUSE_MDI_ARCHITECTURE 0 - -// there is no difference between frame and mini frame decorations under CE -#undef wxUSE_MINIFRAME -#define wxUSE_MINIFRAME 0 - -// no CHM support under CE -#undef wxUSE_MS_HTML_HELP -#define wxUSE_MS_HTML_HELP 0 - -// ??? -#undef wxUSE_OWNER_DRAWN -#define wxUSE_OWNER_DRAWN 0 - -// there is usually no printer attached to a PDA... -#undef wxUSE_PRINTING_ARCHITECTURE -#define wxUSE_PRINTING_ARCHITECTURE 0 - -// doesn't make much sense in absence of mouse... -#undef wxUSE_TOOLTIPS -#define wxUSE_TOOLTIPS 0 - -// Do use commdlg.h -#undef wxUSE_COMMON_DIALOGS -#define wxUSE_COMMON_DIALOGS 1 - -// don't use wxRichTextCtrl on WinCE yet, it's not ready, plus it's -// probably overkill for a WinCE environment. -#undef wxUSE_RICHTEXT -#define wxUSE_RICHTEXT 0 - -// ---------------------------------------------------------------------------- -// Crash debugging helpers -// ---------------------------------------------------------------------------- - -// Set this to 1 to be able to use wxCrashReport::Generate() to create mini -// dumps of your program when it crashes (or at any other moment) -// -// Default is 1 if supported by the compiler (VC++ and recent BC++ only). -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_CRASHREPORT 0 - -// ---------------------------------------------------------------------------- -// obsolete MSW settings, don't change -// ---------------------------------------------------------------------------- - -#define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 0 - -#endif // _WX_SETUP_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/wince/smartphone.rc b/desmume/src/windows/wx/include/wx/msw/wince/smartphone.rc deleted file mode 100644 index 0f13ac669..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/smartphone.rc +++ /dev/null @@ -1,67 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wince/smartphone.h -// Purpose: resources for MS Smartphone build -// Author: Wlodzimierz ABX Skiba -// Modified by: -// Created: 01.05.2004 -// RCS-ID: $Id: smartphone.rc 30036 2004-10-20 15:14:46Z VZ $ -// Copyright: (c) Wlodzimierz Skiba -// License: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#include <aygshell.h> - -#include "wx/msw/wince/resources.h" - -STRINGTABLE -BEGIN - IDS_EMPTY "" -END - -IDR_POPUP_1 MENU -BEGIN - POPUP "" - BEGIN - MENUITEM "M", IDM_ITEM - END -END - -IDR_POPUP_2 MENU -BEGIN - POPUP "" - BEGIN - MENUITEM "M", IDM_ITEM - END - POPUP "" - BEGIN - MENUITEM "M", IDM_ITEM - END -END - -IDR_MENUBAR_ONE_BUTTON RCDATA -BEGIN - 0,2, - I_IMAGENONE, IDM_LEFT, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_EMPTY, 0, NOMENU, - I_IMAGENONE, IDM_RIGHT, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_EMPTY, 0, NOMENU, -END - -IDR_MENUBAR_LEFT_MENU RCDATA -BEGIN - IDR_POPUP_1,1, - I_IMAGENONE, IDM_LEFT, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_EMPTY, 0, 0, -END - -IDR_MENUBAR_RIGHT_MENU RCDATA -BEGIN - IDR_POPUP_1,2, - I_IMAGENONE, IDM_LEFT, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_EMPTY, 0, NOMENU, - I_IMAGENONE, IDM_RIGHT, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_EMPTY, 0, 0, -END - -IDR_MENUBAR_BOTH_MENUS RCDATA -BEGIN - IDR_POPUP_2,2, - I_IMAGENONE, IDM_LEFT, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_EMPTY, 0, 0, - I_IMAGENONE, IDM_RIGHT, TBSTATE_ENABLED, TBSTYLE_DROPDOWN | TBSTYLE_AUTOSIZE, IDS_EMPTY, 0, 1, -END - diff --git a/desmume/src/windows/wx/include/wx/msw/wince/tbarwce.h b/desmume/src/windows/wx/include/wx/msw/wince/tbarwce.h deleted file mode 100644 index 5fc0cf709..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/tbarwce.h +++ /dev/null @@ -1,168 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wince/tbarwce.h -// Purpose: Windows CE wxToolBar class -// Author: Julian Smart -// Modified by: -// Created: 2003-07-12 -// RCS-ID: $Id: tbarwce.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_BARWCE_H_ -#define _WX_BARWCE_H_ - -#if wxUSE_TOOLBAR - -#include "wx/dynarray.h" - -// Smartphones don't have toolbars, so use a dummy class -#ifdef __SMARTPHONE__ - -class WXDLLEXPORT wxToolBar : public wxToolBarBase -{ -public: - // ctors and dtor - wxToolBar() { } - - wxToolBar(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxNO_BORDER | wxTB_HORIZONTAL, - const wxString& name = wxToolBarNameStr) - { - Create(parent, id, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxNO_BORDER | wxTB_HORIZONTAL, - const wxString& name = wxToolBarNameStr); - - // override/implement base class virtuals - virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const; - virtual bool Realize() { return true; } - -protected: - // implement base class pure virtuals - virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool); - virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool); - - virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable); - 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); - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxToolBar) - DECLARE_NO_COPY_CLASS(wxToolBar) -}; - -#else - -// For __POCKETPC__ - -#include "wx/msw/tbar95.h" - -class WXDLLEXPORT wxToolMenuBar : public wxToolBar -{ -public: - // ctors and dtor - wxToolMenuBar() { Init(); } - - wxToolMenuBar(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxNO_BORDER | wxTB_HORIZONTAL, - const wxString& name = wxToolBarNameStr, - wxMenuBar* menuBar = NULL) - { - Init(); - - Create(parent, id, pos, size, style, name, menuBar); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxNO_BORDER | wxTB_HORIZONTAL, - const wxString& name = wxToolBarNameStr, - wxMenuBar* menuBar = NULL); - - virtual ~wxToolMenuBar(); - - // override/implement base class virtuals - virtual bool Realize(); - - // implementation only from now on - // ------------------------------- - - // Override in order to bypass wxToolBar's overridden function - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - - virtual bool MSWCommand(WXUINT param, WXWORD id); - - // Return HMENU for the menu associated with the commandbar - WXHMENU GetHMenu(); - - // Set the wxMenuBar associated with this commandbar - void SetMenuBar(wxMenuBar* menuBar) { m_menuBar = menuBar; } - - // Returns the wxMenuBar associated with this commandbar - wxMenuBar* GetMenuBar() const { return m_menuBar; } - -protected: - // common part of all ctors - void Init(); - - // create the native toolbar control - bool MSWCreateToolbar(const wxPoint& pos, const wxSize& size, wxMenuBar* menuBar); - - // recreate the control completely - void Recreate(); - - // implement base class pure virtuals - virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool); - virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool); - - 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); - - // The menubar associated with this toolbar - wxMenuBar* m_menuBar; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxToolMenuBar) - DECLARE_NO_COPY_CLASS(wxToolMenuBar) -}; - -#endif - // __SMARTPHONE__ - -#endif // wxUSE_TOOLBAR - -#endif - // _WX_BARWCE_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/wince/textctrlce.h b/desmume/src/windows/wx/include/wx/msw/wince/textctrlce.h deleted file mode 100644 index aec359cf9..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/textctrlce.h +++ /dev/null @@ -1,236 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wince/textctrlce.h -// Purpose: wxTextCtrl implementation for smart phones driven by WinCE -// Author: Wlodzimierz ABX Skiba -// Modified by: -// Created: 30.08.2004 -// RCS-ID: $Id: textctrlce.h 41739 2006-10-08 17:46:12Z VZ $ -// Copyright: (c) Wlodzimierz Skiba -// License: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TEXTCTRLCE_H_ -#define _WX_TEXTCTRLCE_H_ - -#include "wx/dynarray.h" - -class WXDLLEXPORT wxTextCtrl; -WX_DEFINE_EXPORTED_ARRAY_PTR(wxTextCtrl *, wxArrayTextSpins); - -class WXDLLEXPORT wxTextCtrl : public wxTextCtrlBase -{ -public: - // creation - // -------- - - wxTextCtrl() { Init(); } - wxTextCtrl(wxWindow *parent, wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxTextCtrlNameStr) - { - Init(); - - Create(parent, id, value, pos, size, style, validator, name); - } - virtual ~wxTextCtrl(); - - bool Create(wxWindow *parent, wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxTextCtrlNameStr); - - // implement base class pure virtuals - // ---------------------------------- - - virtual wxString GetValue() const; - virtual void SetValue(const wxString& value) { DoSetValue(value, SetValue_SendEvent); } - - virtual void ChangeValue(const wxString &value) { DoSetValue(value); } - - virtual wxString GetRange(long from, long to) const; - - virtual int GetLineLength(long lineNo) const; - virtual wxString GetLineText(long lineNo) const; - virtual int GetNumberOfLines() const; - - virtual bool IsModified() const; - virtual bool IsEditable() const; - - virtual void GetSelection(long* from, long* to) const; - - // operations - // ---------- - - // editing - virtual void Clear(); - virtual void Replace(long from, long to, const wxString& value); - virtual void Remove(long from, long to); - - // load the controls contents from the file - virtual bool LoadFile(const wxString& file); - - // clears the dirty flag - virtual void MarkDirty(); - virtual void DiscardEdits(); - - virtual void SetMaxLength(unsigned long len); - - // writing text inserts it at the current position, appending always - // inserts it at the end - virtual void WriteText(const wxString& text); - virtual void AppendText(const wxString& text); - - // translate between the position (which is just an index in the text ctrl - // considering all its contents as a single strings) and (x, y) coordinates - // which represent column and line. - virtual long XYToPosition(long x, long y) const; - virtual bool PositionToXY(long pos, long *x, long *y) const; - - virtual void ShowPosition(long pos); - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const; - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, - wxTextCoord *col, - wxTextCoord *row) const - { - return wxTextCtrlBase::HitTest(pt, col, row); - } - - // Clipboard operations - virtual void Copy(); - virtual void Cut(); - virtual void Paste(); - - virtual bool CanCopy() const; - virtual bool CanCut() const; - virtual bool CanPaste() const; - - // Undo/redo - virtual void Undo(); - virtual void Redo(); - - virtual bool CanUndo() const; - virtual bool CanRedo() const; - - // Insertion point - virtual void SetInsertionPoint(long pos); - virtual void SetInsertionPointEnd(); - virtual long GetInsertionPoint() const; - virtual wxTextPos GetLastPosition() const; - - virtual void SetSelection(long from, long to); - virtual void SetEditable(bool editable); - - // Caret handling (Windows only) - - bool ShowNativeCaret(bool show = true); - bool HideNativeCaret() { return ShowNativeCaret(false); } - - // Implementation from now on - // -------------------------- - - virtual void Command(wxCommandEvent& event); - virtual bool MSWCommand(WXUINT param, WXWORD id); - - virtual void AdoptAttributesFromHWND(); - - virtual bool AcceptsFocus() const; - - // callbacks - void OnDropFiles(wxDropFilesEvent& event); - void OnChar(wxKeyEvent& event); // Process 'enter' if required - - void OnCut(wxCommandEvent& event); - void OnCopy(wxCommandEvent& event); - void OnPaste(wxCommandEvent& event); - void OnUndo(wxCommandEvent& event); - void OnRedo(wxCommandEvent& event); - void OnDelete(wxCommandEvent& event); - void OnSelectAll(wxCommandEvent& event); - - void OnUpdateCut(wxUpdateUIEvent& event); - void OnUpdateCopy(wxUpdateUIEvent& event); - void OnUpdatePaste(wxUpdateUIEvent& event); - void OnUpdateUndo(wxUpdateUIEvent& event); - void OnUpdateRedo(wxUpdateUIEvent& event); - void OnUpdateDelete(wxUpdateUIEvent& event); - void OnUpdateSelectAll(wxUpdateUIEvent& event); - - // Show a context menu for Rich Edit controls (the standard - // EDIT control has one already) - void OnRightClick(wxMouseEvent& event); - - // be sure the caret remains invisible if the user - // called HideNativeCaret() before - void OnSetFocus(wxFocusEvent& event); - - // get the subclassed window proc of the buddy - WXFARPROC GetBuddyWndProc() const { return m_wndProcBuddy; } - - // intercept WM_GETDLGCODE - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - -protected: - // common part of all ctors - void Init(); - - // call this to increase the size limit (will do nothing if the current - // limit is big enough) - // - // returns true if we increased the limit to allow entering more text, - // false if we hit the limit set by SetMaxLength() and so didn't change it - bool AdjustSpaceLimit(); - - void DoSetValue(const wxString &value, int flags = 0); - - // replace the contents of the selection or of the entire control with the - // given text - void DoWriteText(const wxString& text, int flags = SetValue_SelectionOnly); - - // set the selection possibly without scrolling the caret into view - void DoSetSelection(long from, long to, bool scrollCaret = true); - - // return true if there is a non empty selection in the control - bool HasSelection() const; - - // get the length of the line containing the character at the given - // position - long GetLengthOfLineContainingPos(long pos) const; - - // send TEXT_UPDATED event, return true if it was handled, false otherwise - bool SendUpdateEvent(); - - // override some base class virtuals - virtual void DoMoveWindow(int x, int y, int width, int height); - virtual wxSize DoGetBestSize() const; - - virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; - - // if true, SendUpdateEvent() will eat the next event (see comments in the - // code as to why this is needed) - bool m_suppressNextUpdate; - - // all existing wxTextCtrl - this allows to find the one corresponding to - // the given buddy window in GetSpinTextCtrl() - static wxArrayTextSpins ms_allTextSpins; - -protected: - - // the data for the "buddy" list - WXHWND m_hwndBuddy; - WXFARPROC m_wndProcBuddy; - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxTextCtrl) - - bool m_isNativeCaretShown; -}; - -#endif // _WX_TEXTCTRLCE_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/wince/time.h b/desmume/src/windows/wx/include/wx/msw/wince/time.h deleted file mode 100644 index d711111c8..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/time.h +++ /dev/null @@ -1,53 +0,0 @@ - -/* - * time.h - * Missing time functions and structures for use under WinCE - */ - -#ifndef _WX_MSW_WINCE_TIME_H_ -#define _WX_MSW_WINCE_TIME_H_ - -#ifndef _TM_DEFINED - -#define _TM_DEFINED - -struct tm { - int tm_sec; /* seconds after the minute - [0,59] */ - int tm_min; /* minutes after the hour - [0,59] */ - int tm_hour; /* hours since midnight - [0,23] */ - int tm_mday; /* day of the month - [1,31] */ - int tm_mon; /* months since January - [0,11] */ - int tm_year; /* years since 1900 */ - int tm_wday; /* days since Sunday - [0,6] */ - int tm_yday; /* days since January 1 - [0,365] */ - int tm_isdst; /* daylight savings time flag */ - }; - -extern "C" -{ - -time_t __cdecl time(time_t *); - -time_t __cdecl mktime(struct tm *); - -// VC8 CRT provides the other functions -#if !defined(__VISUALC__) || (__VISUALC__ < 1400) - -struct tm * __cdecl localtime(const time_t *); - -struct tm * __cdecl gmtime(const time_t *); - -#define _tcsftime wcsftime - -size_t __cdecl wcsftime(wchar_t *, size_t, const wchar_t *, const struct tm *); - -extern long timezone; - -#endif // !VC8 - -} - -#endif // !_TM_DEFINED - -#endif // _WX_MSW_WINCE_TIME_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/wince/wince.rc b/desmume/src/windows/wx/include/wx/msw/wince/wince.rc deleted file mode 100644 index d1f542224..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wince/wince.rc +++ /dev/null @@ -1,26 +0,0 @@ -#include <commctrl.h> - -#ifdef WIN32_PLATFORM_WFSP - #include "wx/msw/wince/smartphone.rc" -#else - -// Dummy menubar/toolbar for WinCE - -5000 RCDATA DISCARDABLE -BEGIN - // Popup menu name - 5000, - // Count of items to put on the menu - 0 -END - -5000 MENU DISCARDABLE -BEGIN - POPUP "Dummy" - BEGIN - MENUITEM "Dummy" 99 - END -END - -#endif - diff --git a/desmume/src/windows/wx/include/wx/msw/window.h b/desmume/src/windows/wx/include/wx/msw/window.h deleted file mode 100644 index c75ac55d3..000000000 --- a/desmume/src/windows/wx/include/wx/msw/window.h +++ /dev/null @@ -1,601 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/window.h -// Purpose: wxWindowMSW class -// Author: Julian Smart -// 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 53929 2008-06-02 18:27:16Z RD $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WINDOW_H_ -#define _WX_WINDOW_H_ - -// --------------------------------------------------------------------------- -// constants -// --------------------------------------------------------------------------- - -#if WXWIN_COMPATIBILITY_2_4 -// they're unused by wxWidgets... -enum -{ - wxKEY_SHIFT = 1, - wxKEY_CTRL = 2 -}; -#endif - -// --------------------------------------------------------------------------- -// wxWindow declaration for MSW -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxWindowMSW : public wxWindowBase -{ - friend class wxSpinCtrl; - friend class wxSlider; - friend class wxRadioBox; -#if defined __VISUALC__ && __VISUALC__ <= 1200 - friend class wxWindowMSW; -#endif -public: - wxWindowMSW() { Init(); } - - wxWindowMSW(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxPanelNameStr) - { - Init(); - Create(parent, id, pos, size, style, name); - } - - virtual ~wxWindowMSW(); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxPanelNameStr); - - // implement base class pure virtuals - virtual void SetLabel(const wxString& label); - virtual wxString GetLabel() const; - - virtual void Raise(); - virtual void Lower(); - - virtual bool Show( bool show = true ); - virtual bool Enable( bool enable = true ); - - virtual void SetFocus(); - virtual void SetFocusFromKbd(); - - virtual bool Reparent(wxWindowBase *newParent); - - virtual void WarpPointer(int x, int y); - - virtual void Refresh( bool eraseBackground = true, - const wxRect *rect = (const wxRect *) NULL ); - virtual void Update(); - virtual void Freeze(); - virtual void Thaw(); - virtual bool IsFrozen() const { return m_frozenness > 0; } - - virtual void SetWindowStyleFlag(long style); - virtual void SetExtraStyle(long exStyle); - virtual bool SetCursor( const wxCursor &cursor ); - virtual bool SetFont( const wxFont &font ); - - virtual int GetCharHeight() const; - virtual int GetCharWidth() const; - virtual void GetTextExtent(const wxString& string, - int *x, int *y, - int *descent = (int *) NULL, - int *externalLeading = (int *) NULL, - const wxFont *theFont = (const wxFont *) NULL) - const; - - virtual void SetScrollbar( int orient, int pos, int thumbVisible, - int range, bool refresh = true ); - virtual void SetScrollPos( int orient, int pos, bool refresh = true ); - virtual int GetScrollPos( int orient ) const; - virtual int GetScrollThumb( int orient ) const; - virtual int GetScrollRange( int orient ) const; - virtual void ScrollWindow( int dx, int dy, - const wxRect* rect = (wxRect *) NULL ); - - virtual bool ScrollLines(int lines); - virtual bool ScrollPages(int pages); - - virtual void SetLayoutDirection(wxLayoutDirection dir); - virtual wxLayoutDirection GetLayoutDirection() const; - virtual wxCoord AdjustForLayoutDirection(wxCoord x, - wxCoord width, - wxCoord widthTotal) const; - -#if wxUSE_DRAG_AND_DROP - virtual void SetDropTarget( wxDropTarget *dropTarget ); -#endif // wxUSE_DRAG_AND_DROP - - // Accept files for dragging - virtual void DragAcceptFiles(bool accept); - -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( bool GetUseCtl3D() const ); - wxDEPRECATED( bool GetTransparentBackground() const ); - wxDEPRECATED( void SetTransparent(bool t = true) ); -#endif // WXWIN_COMPATIBILITY_2_4 - -#ifndef __WXUNIVERSAL__ - // Native resource loading (implemented in src/msw/nativdlg.cpp) - // FIXME: should they really be all virtual? - virtual bool LoadNativeDialog(wxWindow* parent, wxWindowID& id); - virtual bool LoadNativeDialog(wxWindow* parent, const wxString& name); - wxWindow* GetWindowChild1(wxWindowID id); - wxWindow* GetWindowChild(wxWindowID id); -#endif // __WXUNIVERSAL__ - -#if wxUSE_HOTKEY - // install and deinstall a system wide hotkey - virtual bool RegisterHotKey(int hotkeyId, int modifiers, int keycode); - virtual bool UnregisterHotKey(int hotkeyId); -#endif // wxUSE_HOTKEY - -#ifdef __POCKETPC__ - bool IsContextMenuEnabled() const { return m_contextMenuEnabled; } - void EnableContextMenu(bool enable = true) { m_contextMenuEnabled = enable; } -#endif - - // window handle stuff - // ------------------- - - WXHWND GetHWND() const { return m_hWnd; } - void SetHWND(WXHWND hWnd) { m_hWnd = hWnd; } - virtual WXWidget GetHandle() const { return GetHWND(); } - - void AssociateHandle(WXWidget handle); - void DissociateHandle(); - - // does this window have deferred position and/or size? - bool IsSizeDeferred() const; - - - // implementation from now on - // ========================== - - // event handlers - // -------------- - - void OnPaint(wxPaintEvent& event); - void OnEraseBackground(wxEraseEvent& event); -#ifdef __WXWINCE__ - void OnInitDialog(wxInitDialogEvent& event); -#endif - -public: - // Windows subclassing - void SubclassWin(WXHWND hWnd); - void UnsubclassWin(); - - WXFARPROC MSWGetOldWndProc() const { return m_oldWndProc; } - void MSWSetOldWndProc(WXFARPROC proc) { m_oldWndProc = proc; } - - // return true if the window is of a standard (i.e. not wxWidgets') class - // - // to understand why does it work, look at SubclassWin() code and comments - bool IsOfStandardClass() const { return m_oldWndProc != NULL; } - - wxWindow *FindItem(long id) const; - wxWindow *FindItemByHWND(WXHWND hWnd, bool controlOnly = false) const; - - // MSW only: true if this control is part of the main control - virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return false; } - -#if wxUSE_TOOLTIPS - // MSW only: true if this window or any of its children have a tooltip - virtual bool HasToolTips() const { return GetToolTip() != NULL; } -#endif // wxUSE_TOOLTIPS - - // translate wxWidgets style flags for this control into the Windows style - // and optional extended style for the corresponding native control - // - // this is the function that should be overridden in the derived classes, - // but you will mostly use MSWGetCreateWindowFlags() below - virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle = NULL) const ; - - // get the MSW window flags corresponding to wxWidgets ones - // - // the functions returns the flags (WS_XXX) directly and puts the ext - // (WS_EX_XXX) flags into the provided pointer if not NULL - WXDWORD MSWGetCreateWindowFlags(WXDWORD *exflags = NULL) const - { return MSWGetStyle(GetWindowStyle(), exflags); } - - // update the real underlying window style flags to correspond to the - // current wxWindow object style (safe to call even if window isn't fully - // created yet) - void MSWUpdateStyle(long flagsOld, long exflagsOld); - -#if wxABI_VERSION >= 20805 - // Helper for getting an appropriate theme style for the application. Unnecessary in - // 2.9 and above. - wxBorder GetThemedBorderStyle() const; -#endif - - // translate wxWidgets coords into Windows ones suitable to be passed to - // ::CreateWindow() - // - // returns true if non default coords are returned, false otherwise - bool MSWGetCreateWindowCoords(const wxPoint& pos, - const wxSize& size, - int& x, int& y, - int& w, int& h) const; - - // get the HWND to be used as parent of this window with CreateWindow() - virtual WXHWND MSWGetParent() const; - - // creates the window of specified Windows class with given style, extended - // style, title and geometry (default values - // - // returns true if the window has been created, false if creation failed - bool MSWCreate(const wxChar *wclass, - const wxChar *title = NULL, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - WXDWORD style = 0, - WXDWORD exendedStyle = 0); - - virtual bool MSWCommand(WXUINT param, WXWORD id); - -#ifndef __WXUNIVERSAL__ - // Create an appropriate wxWindow from a HWND - virtual wxWindow* CreateWindowFromHWND(wxWindow* parent, WXHWND hWnd); - - // Make sure the window style reflects the HWND style (roughly) - virtual void AdoptAttributesFromHWND(); -#endif // __WXUNIVERSAL__ - - // Setup background and foreground colours correctly - virtual void SetupColours(); - - // ------------------------------------------------------------------------ - // helpers for message handlers: these perform the same function as the - // message crackers from <windowsx.h> - they unpack WPARAM and LPARAM into - // the correct parameters - // ------------------------------------------------------------------------ - - void UnpackCommand(WXWPARAM wParam, WXLPARAM lParam, - WXWORD *id, WXHWND *hwnd, WXWORD *cmd); - void UnpackActivate(WXWPARAM wParam, WXLPARAM lParam, - WXWORD *state, WXWORD *minimized, WXHWND *hwnd); - void UnpackScroll(WXWPARAM wParam, WXLPARAM lParam, - WXWORD *code, WXWORD *pos, WXHWND *hwnd); - void UnpackCtlColor(WXWPARAM wParam, WXLPARAM lParam, - WXHDC *hdc, WXHWND *hwnd); - void UnpackMenuSelect(WXWPARAM wParam, WXLPARAM lParam, - WXWORD *item, WXWORD *flags, WXHMENU *hmenu); - - // ------------------------------------------------------------------------ - // internal handlers for MSW messages: all handlers return a boolean value: - // true means that the handler processed the event and false that it didn't - // ------------------------------------------------------------------------ - - // there are several cases where we have virtual functions for Windows - // message processing: this is because these messages often require to be - // processed in a different manner in the derived classes. For all other - // messages, however, we do *not* have corresponding MSWOnXXX() function - // and if the derived class wants to process them, it should override - // MSWWindowProc() directly. - - // scroll event (both horizontal and vertical) - virtual bool MSWOnScroll(int orientation, WXWORD nSBCode, - WXWORD pos, WXHWND control); - - // child control notifications - virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - - // owner-drawn controls need to process these messages - virtual bool MSWOnDrawItem(int id, WXDRAWITEMSTRUCT *item); - virtual bool MSWOnMeasureItem(int id, WXMEASUREITEMSTRUCT *item); - - // the rest are not virtual - bool HandleCreate(WXLPCREATESTRUCT cs, bool *mayCreate); - bool HandleInitDialog(WXHWND hWndFocus); - bool HandleDestroy(); - - bool HandlePaint(); - bool HandlePrintClient(WXHDC hDC); - bool HandleEraseBkgnd(WXHDC hDC); - - bool HandleMinimize(); - bool HandleMaximize(); - bool HandleSize(int x, int y, WXUINT flag); - bool HandleSizing(wxRect& rect); - bool HandleGetMinMaxInfo(void *mmInfo); - - bool HandleShow(bool show, int status); - bool HandleActivate(int flag, bool minimized, WXHWND activate); - - bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control); - - bool HandleCtlColor(WXHBRUSH *hBrush, WXHDC hdc, WXHWND hWnd); - - bool HandlePaletteChanged(WXHWND hWndPalChange); - bool HandleQueryNewPalette(); - bool HandleSysColorChange(); - bool HandleDisplayChange(); - bool HandleCaptureChanged(WXHWND gainedCapture); - virtual bool HandleSettingChange(WXWPARAM wParam, WXLPARAM lParam); - - bool HandleQueryEndSession(long logOff, bool *mayEnd); - bool HandleEndSession(bool endSession, long logOff); - - bool HandleSetFocus(WXHWND wnd); - bool HandleKillFocus(WXHWND wnd); - - bool HandleDropFiles(WXWPARAM wParam); - - bool HandleMouseEvent(WXUINT msg, int x, int y, WXUINT flags); - bool HandleMouseMove(int x, int y, WXUINT flags); - bool HandleMouseWheel(WXWPARAM wParam, WXLPARAM lParam); - - bool HandleChar(WXWPARAM wParam, WXLPARAM lParam, bool isASCII = false); - bool HandleKeyDown(WXWPARAM wParam, WXLPARAM lParam); - bool HandleKeyUp(WXWPARAM wParam, WXLPARAM lParam); -#if wxUSE_ACCEL - bool HandleHotKey(WXWPARAM wParam, WXLPARAM lParam); -#endif -#ifdef __WIN32__ - int HandleMenuChar(int chAccel, WXLPARAM lParam); -#endif - // Create and process a clipboard event specified by type. - bool HandleClipboardEvent( WXUINT nMsg ); - - bool HandleQueryDragIcon(WXHICON *hIcon); - - bool HandleSetCursor(WXHWND hWnd, short nHitTest, int mouseMsg); - - bool HandlePower(WXWPARAM wParam, WXLPARAM lParam, bool *vetoed); - - - // Window procedure - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - - // Calls an appropriate default window procedure - virtual WXLRESULT MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); - - // message processing helpers - - // return false if the message shouldn't be translated/preprocessed but - // dispatched normally - virtual bool MSWShouldPreProcessMessage(WXMSG* pMsg); - - // return true if the message was preprocessed and shouldn't be dispatched - virtual bool MSWProcessMessage(WXMSG* pMsg); - - // return true if the message was translated and shouldn't be dispatched - virtual bool MSWTranslateMessage(WXMSG* pMsg); - - // called when the window is about to be destroyed - virtual void MSWDestroyWindow(); - - - // this function should return the brush to paint the children controls - // background or 0 if this window doesn't impose any particular background - // on its children - // - // the base class version returns a solid brush if we have a non default - // background colour or 0 otherwise - virtual WXHBRUSH MSWGetBgBrushForChild(WXHDC hDC, WXHWND hWnd); - - // return the background brush to use for painting the given window by - // quering the parent windows via their MSWGetBgBrushForChild() recursively - // - // hWndToPaint is normally NULL meaning this window itself, but it can also - // be a child of this window which is used by the static box and could be - // potentially useful for other transparent controls - WXHBRUSH MSWGetBgBrush(WXHDC hDC, WXHWND hWndToPaint = NULL); - - // gives the parent the possibility to draw its children background, e.g. - // this is used by wxNotebook to do it using DrawThemeBackground() - // - // return true if background was drawn, false otherwise - virtual bool MSWPrintChild(WXHDC WXUNUSED(hDC), wxWindow * WXUNUSED(child)) - { - return false; - } - - // some controls (e.g. wxListBox) need to set the return value themselves - // - // return true to let parent handle it if we don't, false otherwise - virtual bool MSWShouldPropagatePrintChild() - { - return true; - } - - - // Responds to colour changes: passes event on to children. - void OnSysColourChanged(wxSysColourChangedEvent& event); - - // initialize various fields of wxMouseEvent (common part of MSWOnMouseXXX) - void InitMouseEvent(wxMouseEvent& event, int x, int y, WXUINT flags); - - // check if mouse is in the window - bool IsMouseInWindow() const; - - // check if a native double-buffering applies for this window - virtual bool IsDoubleBuffered() const; - -#if wxABI_VERSION >= 20808 - void SetDoubleBuffered(bool on); -#endif - - // synthesize a wxEVT_LEAVE_WINDOW event and set m_mouseInWindow to false - void GenerateMouseLeave(); - - // virtual function for implementing internal idle - // behaviour - virtual void OnInternalIdle(); - -protected: - -#if wxUSE_MENUS_NATIVE - virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); -#endif // wxUSE_MENUS_NATIVE - - // the window handle - WXHWND m_hWnd; - - // the old window proc (we subclass all windows) - WXFARPROC m_oldWndProc; - - // additional (MSW specific) flags - bool m_mouseInWindow:1; - bool m_lastKeydownProcessed:1; - - // the size of one page for scrolling - int m_xThumbSize; - int m_yThumbSize; - - // implement the base class pure virtuals - virtual void DoClientToScreen( int *x, int *y ) const; - virtual void DoScreenToClient( int *x, int *y ) const; - virtual void DoGetPosition( int *x, int *y ) const; - virtual void DoGetSize( int *width, int *height ) const; - virtual void DoGetClientSize( int *width, int *height ) const; - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - virtual void DoSetClientSize(int width, int height); - - virtual void DoCaptureMouse(); - virtual void DoReleaseMouse(); - - // this simply moves/resizes the given HWND which is supposed to be our - // sibling (this is useful for controls which are composite at MSW level - // and for which DoMoveWindow() is not enough) - // - // returns true if the window move was deferred, false if it was moved - // immediately (no error return) - bool DoMoveSibling(WXHWND hwnd, int x, int y, int width, int height); - - // move the window to the specified location and resize it: this is called - // from both DoSetSize() and DoSetClientSize() and would usually just call - // ::MoveWindow() except for composite controls which will want to arrange - // themselves inside the given rectangle - virtual void DoMoveWindow(int x, int y, int width, int height); - -#if wxUSE_TOOLTIPS - virtual void DoSetToolTip( wxToolTip *tip ); - - // process TTN_NEEDTEXT message properly (i.e. fixing the bugs in - // comctl32.dll in our code -- see the function body for more info) - bool HandleTooltipNotify(WXUINT code, - WXLPARAM lParam, - const wxString& ttip); -#endif // wxUSE_TOOLTIPS - - // the helper functions used by HandleChar/KeyXXX methods - wxKeyEvent CreateKeyEvent(wxEventType evType, int id, - WXLPARAM lParam = 0, WXWPARAM wParam = 0) const; - - - // default OnEraseBackground() implementation, return true if we did erase - // the background, false otherwise (i.e. the system should erase it) - bool DoEraseBackground(WXHDC hDC); - - // generate WM_CHANGEUISTATE if it's needed for the OS we're running under - // - // action should be one of the UIS_XXX constants - // state should be one or more of the UISF_XXX constants - // if action == UIS_INITIALIZE then it doesn't seem to matter what we use - // for state as the system will decide for us what needs to be set - void MSWUpdateUIState(int action, int state = 0); - -private: - // common part of all ctors - void Init(); - - // the (non-virtual) handlers for the events - bool HandleMove(int x, int y); - bool HandleMoving(wxRect& rect); - bool HandleJoystickEvent(WXUINT msg, int x, int y, WXUINT flags); - bool HandleNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - - // list of disabled children before last call to our Disable() - wxWindowList *m_childrenDisabled; - - // number of calls to Freeze() minus number of calls to Thaw() - unsigned int m_frozenness; - - // current defer window position operation handle (may be NULL) - WXHANDLE m_hDWP; - -protected: - // When deferred positioning is done these hold the pending changes, and - // are used for the default values if another size/pos changes is done on - // this window before the group of deferred changes is completed. - wxPoint m_pendingPosition; - wxSize m_pendingSize; - -private: -#ifdef __POCKETPC__ - bool m_contextMenuEnabled; -#endif - - DECLARE_DYNAMIC_CLASS(wxWindowMSW) - DECLARE_NO_COPY_CLASS(wxWindowMSW) - DECLARE_EVENT_TABLE() -}; - -// ---------------------------------------------------------------------------- -// inline functions -// ---------------------------------------------------------------------------- - -#if WXWIN_COMPATIBILITY_2_4 - -inline bool wxWindowMSW::GetUseCtl3D() const { return false; } -inline bool wxWindowMSW::GetTransparentBackground() const { return false; } -inline void wxWindowMSW::SetTransparent(bool WXUNUSED(t)) { } - -#endif // WXWIN_COMPATIBILITY_2_4 - -// --------------------------------------------------------------------------- -// global functions -// --------------------------------------------------------------------------- - -// kbd code translation -WXDLLEXPORT int wxCharCodeMSWToWX(int keySym, WXLPARAM lParam = 0); -WXDLLEXPORT WXWORD wxCharCodeWXToMSW(int id, bool *IsVirtual = NULL); - -// window creation helper class: before creating a new HWND, instantiate an -// object of this class on stack - this allows to process the messages sent to -// the window even before CreateWindow() returns -class wxWindowCreationHook -{ -public: - wxWindowCreationHook(wxWindowMSW *winBeingCreated); - ~wxWindowCreationHook(); -}; - -// ---------------------------------------------------------------------------- -// global objects -// ---------------------------------------------------------------------------- - -// notice that this hash must be defined after wxWindow declaration as it -// needs to "see" its dtor and not just forward declaration -#include "wx/hash.h" - -// pseudo-template HWND <-> wxWindow hash table -#if WXWIN_COMPATIBILITY_2_4 -WX_DECLARE_HASH(wxWindow, wxWindowList, wxWinHashTable); -#else -WX_DECLARE_HASH(wxWindowMSW, wxWindowList, wxWinHashTable); -#endif - -extern wxWinHashTable *wxWinHandleHash; - -#endif // _WX_WINDOW_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/winundef.h b/desmume/src/windows/wx/include/wx/msw/winundef.h deleted file mode 100644 index 47d59e7c4..000000000 --- a/desmume/src/windows/wx/include/wx/msw/winundef.h +++ /dev/null @@ -1,490 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: winundef.h -// Purpose: undefine the common symbols #define'd by <windows.h> -// Author: Vadim Zeitlin -// Modified by: -// Created: 16.05.99 -// RCS-ID: $Id: winundef.h 36044 2005-10-31 19:35:41Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -/* THIS SHOULD NOT BE USED since you might include it once e.g. in window.h, - * then again _AFTER_ you've included windows.h, in which case it won't work - * a 2nd time -- JACS -#ifndef _WX_WINUNDEF_H_ -#define _WX_WINUNDEF_H_ - */ - -// ---------------------------------------------------------------------------- -// windows.h #defines the following identifiers which are also used in wxWin so -// we replace these symbols with the corresponding inline functions and -// undefine the macro. -// -// This looks quite ugly here but allows us to write clear (and correct!) code -// elsewhere because the functions, unlike the macros, respect the scope. -// ---------------------------------------------------------------------------- - -// CreateDialog - -#if defined(CreateDialog) - #undef CreateDialog - - inline HWND CreateDialog(HINSTANCE hInstance, - LPCTSTR pTemplate, - HWND hwndParent, - DLGPROC pDlgProc) - { - #ifdef _UNICODE - return CreateDialogW(hInstance, pTemplate, hwndParent, pDlgProc); - #else - return CreateDialogA(hInstance, pTemplate, hwndParent, pDlgProc); - #endif - } -#endif - -// CreateFont - -#ifdef CreateFont - #undef CreateFont - - inline HFONT CreateFont(int height, - int width, - int escapement, - int orientation, - int weight, - DWORD italic, - DWORD underline, - DWORD strikeout, - DWORD charset, - DWORD outprecision, - DWORD clipprecision, - DWORD quality, - DWORD family, - LPCTSTR facename) - { - #ifdef _UNICODE - return CreateFontW(height, width, escapement, orientation, - weight, italic, underline, strikeout, charset, - outprecision, clipprecision, quality, - family, facename); - #else - return CreateFontA(height, width, escapement, orientation, - weight, italic, underline, strikeout, charset, - outprecision, clipprecision, quality, - family, facename); - #endif - } -#endif // CreateFont - -// CreateWindow - -#if defined(CreateWindow) - #undef CreateWindow - - inline HWND CreateWindow(LPCTSTR lpClassName, - LPCTSTR lpWndClass, - DWORD dwStyle, - int x, int y, int w, int h, - HWND hWndParent, - HMENU hMenu, - HINSTANCE hInstance, - LPVOID lpParam) - { - #ifdef _UNICODE - return CreateWindowW(lpClassName, lpWndClass, dwStyle, x, y, w, h, - hWndParent, hMenu, hInstance, lpParam); - #else - return CreateWindowA(lpClassName, lpWndClass, dwStyle, x, y, w, h, - hWndParent, hMenu, hInstance, lpParam); - #endif - } -#endif - -// LoadMenu - -#ifdef LoadMenu - #undef LoadMenu - - inline HMENU LoadMenu(HINSTANCE instance, LPCTSTR name) - { - #ifdef _UNICODE - return LoadMenuW(instance, name); - #else - return LoadMenuA(instance, name); - #endif - } -#endif - -// FindText - -#ifdef FindText - #undef FindText - - inline HWND APIENTRY FindText(LPFINDREPLACE lpfindreplace) - { - #ifdef UNICODE - return FindTextW(lpfindreplace); - #else - return FindTextA(lpfindreplace); - #endif // !UNICODE - } -#endif - -// GetCharWidth - -#ifdef GetCharWidth - #undef GetCharWidth - inline BOOL GetCharWidth(HDC dc, UINT first, UINT last, LPINT buffer) - { - #ifdef _UNICODE - return GetCharWidthW(dc, first, last, buffer); - #else - return GetCharWidthA(dc, first, last, buffer); - #endif - } -#endif - -// FindWindow - -#ifdef FindWindow - #undef FindWindow - #ifdef _UNICODE - inline HWND FindWindow(LPCWSTR classname, LPCWSTR windowname) - { - return FindWindowW(classname, windowname); - } - #else - inline HWND FindWindow(LPCSTR classname, LPCSTR windowname) - { - return FindWindowA(classname, windowname); - } - #endif -#endif - -// PlaySound - -#ifdef PlaySound - #undef PlaySound - #ifdef _UNICODE - inline BOOL PlaySound(LPCWSTR pszSound, HMODULE hMod, DWORD fdwSound) - { - return PlaySoundW(pszSound, hMod, fdwSound); - } - #else - inline BOOL PlaySound(LPCSTR pszSound, HMODULE hMod, DWORD fdwSound) - { - return PlaySoundA(pszSound, hMod, fdwSound); - } - #endif -#endif - -// GetClassName - -#ifdef GetClassName - #undef GetClassName - #ifdef _UNICODE - inline int GetClassName(HWND h, LPWSTR classname, int maxcount) - { - return GetClassNameW(h, classname, maxcount); - } - #else - inline int GetClassName(HWND h, LPSTR classname, int maxcount) - { - return GetClassNameA(h, classname, maxcount); - } - #endif -#endif - -// GetClassInfo - -#ifdef GetClassInfo - #undef GetClassInfo - #ifdef _UNICODE - inline BOOL GetClassInfo(HINSTANCE h, LPCWSTR name, LPWNDCLASSW winclass) - { - return GetClassInfoW(h, name, winclass); - } - #else - inline BOOL GetClassInfo(HINSTANCE h, LPCSTR name, LPWNDCLASSA winclass) - { - return GetClassInfoA(h, name, winclass); - } - #endif -#endif - -// LoadAccelerators - -#ifdef LoadAccelerators - #undef LoadAccelerators - #ifdef _UNICODE - inline HACCEL LoadAccelerators(HINSTANCE h, LPCWSTR name) - { - return LoadAcceleratorsW(h, name); - } - #else - inline HACCEL LoadAccelerators(HINSTANCE h, LPCSTR name) - { - return LoadAcceleratorsA(h, name); - } - #endif -#endif - -// DrawText - -#ifdef DrawText - #undef DrawText - #ifdef _UNICODE - inline int DrawText(HDC h, LPCWSTR str, int count, LPRECT rect, UINT format) - { - return DrawTextW(h, str, count, rect, format); - } - #else - inline int DrawText(HDC h, LPCSTR str, int count, LPRECT rect, UINT format) - { - return DrawTextA(h, str, count, rect, format); - } - #endif -#endif - - -/* - When this file is included, sometimes the wxCHECK_W32API_VERSION macro - is undefined. With for example CodeWarrior this gives problems with - the following code: - #if 0 && wxCHECK_W32API_VERSION( 0, 5 ) - Because CodeWarrior does macro expansion before test evaluation. - We define wxCHECK_W32API_VERSION here if it's undefined. -*/ -#if !defined(__GNUG__) && !defined(wxCHECK_W32API_VERSION) - #define wxCHECK_W32API_VERSION(maj, min) (0) -#endif - -// StartDoc - -#ifdef StartDoc - #undef StartDoc - #if defined( __GNUG__ ) && !wxCHECK_W32API_VERSION( 0, 5 ) - #define DOCINFOW DOCINFO - #define DOCINFOA DOCINFO - #endif - #ifdef _UNICODE - inline int StartDoc(HDC h, CONST DOCINFOW* info) - { - return StartDocW(h, (DOCINFOW*) info); - } - #else - inline int StartDoc(HDC h, CONST DOCINFOA* info) - { - return StartDocA(h, (DOCINFOA*) info); - } - #endif -#endif - -// GetObject - -#ifdef GetObject - #undef GetObject - inline int GetObject(HGDIOBJ h, int i, LPVOID buffer) - { - #ifdef _UNICODE - return GetObjectW(h, i, buffer); - #else - return GetObjectA(h, i, buffer); - #endif - } -#endif - -// GetMessage - -#ifdef GetMessage - #undef GetMessage - inline int GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax) - { - #ifdef _UNICODE - return GetMessageW(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax); - #else - return GetMessageA(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax); - #endif - } -#endif - -// LoadIcon -#ifdef LoadIcon - #undef LoadIcon - inline HICON LoadIcon(HINSTANCE hInstance, LPCTSTR lpIconName) - { - #ifdef _UNICODE - return LoadIconW(hInstance, lpIconName); - #else // ANSI - return LoadIconA(hInstance, lpIconName); - #endif // Unicode/ANSI - } -#endif // LoadIcon - -// LoadBitmap -#ifdef LoadBitmap - #undef LoadBitmap - inline HBITMAP LoadBitmap(HINSTANCE hInstance, LPCTSTR lpBitmapName) - { - #ifdef _UNICODE - return LoadBitmapW(hInstance, lpBitmapName); - #else // ANSI - return LoadBitmapA(hInstance, lpBitmapName); - #endif // Unicode/ANSI - } -#endif // LoadBitmap - -// LoadLibrary - -#ifdef LoadLibrary - #undef LoadLibrary - #ifdef _UNICODE - inline HINSTANCE LoadLibrary(LPCWSTR lpLibFileName) - { - return LoadLibraryW(lpLibFileName); - } - #else - inline HINSTANCE LoadLibrary(LPCSTR lpLibFileName) - { - return LoadLibraryA(lpLibFileName); - } - #endif -#endif - -// FindResource -#ifdef FindResource - #undef FindResource - #ifdef _UNICODE - inline HRSRC FindResource(HMODULE hModule, LPCWSTR lpName, LPCWSTR lpType) - { - return FindResourceW(hModule, lpName, lpType); - } - #else - inline HRSRC FindResource(HMODULE hModule, LPCSTR lpName, LPCSTR lpType) - { - return FindResourceA(hModule, lpName, lpType); - } - #endif -#endif - -// IsMaximized - -#ifdef IsMaximized - #undef IsMaximized - inline BOOL IsMaximized(HWND WXUNUSED_IN_WINCE(hwnd)) - { -#ifdef __WXWINCE__ - return FALSE; -#else - return IsZoomed(hwnd); -#endif - } -#endif - -// GetFirstChild - -#ifdef GetFirstChild - #undef GetFirstChild - inline HWND GetFirstChild(HWND WXUNUSED_IN_WINCE(hwnd)) - { -#ifdef __WXWINCE__ - return 0; -#else - return GetTopWindow(hwnd); -#endif - } -#endif - -// GetFirstSibling - -#ifdef GetFirstSibling - #undef GetFirstSibling - inline HWND GetFirstSibling(HWND hwnd) - { - return GetWindow(hwnd,GW_HWNDFIRST); - } -#endif - -// GetLastSibling - -#ifdef GetLastSibling - #undef GetLastSibling - inline HWND GetLastSibling(HWND hwnd) - { - return GetWindow(hwnd,GW_HWNDLAST); - } -#endif - -// GetPrevSibling - -#ifdef GetPrevSibling - #undef GetPrevSibling - inline HWND GetPrevSibling(HWND hwnd) - { - return GetWindow(hwnd,GW_HWNDPREV); - } -#endif - -// GetNextSibling - -#ifdef GetNextSibling - #undef GetNextSibling - inline HWND GetNextSibling(HWND hwnd) - { - return GetWindow(hwnd,GW_HWNDNEXT); - } -#endif - -// For WINE - -#if defined(GetWindowStyle) - #undef GetWindowStyle -#endif - -// For ming and cygwin - -// GetFirstChild -#ifdef GetFirstChild - #undef GetFirstChild - inline HWND GetFirstChild(HWND h) - { - return GetTopWindow(h); - } -#endif - - -// GetNextSibling -#ifdef GetNextSibling - #undef GetNextSibling - inline HWND GetNextSibling(HWND h) - { - return GetWindow(h, GW_HWNDNEXT); - } -#endif - - -#ifdef Yield - #undef Yield -#endif - - -#if defined(__WXWINCE__) && defined(DrawIcon) //#ifdef DrawIcon - #undef DrawIcon - inline BOOL DrawIcon(HDC hdc, int x, int y, HICON hicon) - { - return DrawIconEx(hdc,x,y,hicon,0,0,0,NULL, DI_NORMAL) ; - } -#endif - - -// GetWindowProc -//ifdef GetWindowProc -// #undef GetWindowProc -//endif -//ifdef GetNextChild -// #undef GetNextChild -//endif - -// #endif // _WX_WINUNDEF_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/wrapcctl.h b/desmume/src/windows/wx/include/wx/msw/wrapcctl.h deleted file mode 100644 index ecd206db3..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wrapcctl.h +++ /dev/null @@ -1,62 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wrapcctl.h -// Purpose: Wrapper for the standard <commctrl.h> header -// Author: Vadim Zeitlin -// Modified by: -// Created: 03.08.2003 -// RCS-ID: $Id: wrapcctl.h 41054 2006-09-07 19:01:45Z ABX $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_WRAPCCTL_H_ -#define _WX_MSW_WRAPCCTL_H_ - -// define _WIN32_IE to a high value because we always check for the version -// of installed DLLs at runtime anyway (see wxApp::GetComCtl32Version()) unless -// the user really doesn't want it and had defined it to a (presumably lower) -// value -// -// just for the reference, here is the table showing what the different value -// of _WIN32_IE correspond to: -// -// 0x0200 for comctl32.dll 4.00 shipped with Win95/NT 4.0 -// 0x0300 4.70 IE 3.x -// 0x0400 4.71 IE 4.0 -// 0x0401 4.72 IE 4.01 and Win98 -// 0x0500 5.80 IE 5.x -// 0x0500 5.81 Win2k/ME -// 0x0600 6.00 WinXP - -#ifndef _WIN32_IE - // use maximal set of features by default, we check for them during - // run-time anyhow - #define _WIN32_IE 0x0600 -#endif // !defined(_WIN32_IE) - -#include "wx/msw/wrapwin.h" - -#include <commctrl.h> - -// define things which might be missing from our commctrl.h -#include "wx/msw/missing.h" - -// Set Unicode format for a common control -inline void wxSetCCUnicodeFormat(HWND WXUNUSED_IN_WINCE(hwnd)) -{ -#ifndef __WXWINCE__ - ::SendMessage(hwnd, CCM_SETUNICODEFORMAT, wxUSE_UNICODE, 0); -#else // !__WXWINCE__ - // here it should be already in Unicode anyhow -#endif // __WXWINCE__/!__WXWINCE__ -} - -#if wxUSE_GUI -// Return the default font for the common controls -// -// this is implemented in msw/settings.cpp -class wxFont; -extern wxFont wxGetCCDefaultFont(); -#endif - -#endif // _WX_MSW_WRAPCCTL_H_ diff --git a/desmume/src/windows/wx/include/wx/msw/wrapcdlg.h b/desmume/src/windows/wx/include/wx/msw/wrapcdlg.h deleted file mode 100644 index 733e1b5f9..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wrapcdlg.h +++ /dev/null @@ -1,28 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wrapcdlg.h -// Purpose: Wrapper for the standard <commdlg.h> header -// Author: Wlodzimierz ABX Skiba -// Modified by: -// Created: 22.03.2005 -// RCS-ID: $Id: wrapcdlg.h 43151 2006-11-07 09:08:33Z JS $ -// Copyright: (c) 2005 Wlodzimierz Skiba -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_WRAPCDLG_H_ -#define _WX_MSW_WRAPCDLG_H_ - -#include "wx/defs.h" - -#include "wx/msw/wrapwin.h" -#include "wx/msw/private.h" -#include "wx/msw/missing.h" - -#if wxUSE_COMMON_DIALOGS && !defined(__SMARTPHONE__) && !defined(__WXMICROWIN__) - #include <commdlg.h> -#endif - -#include "wx/msw/winundef.h" - -#endif // _WX_MSW_WRAPCDLG_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/wrapshl.h b/desmume/src/windows/wx/include/wx/msw/wrapshl.h deleted file mode 100644 index 72578af61..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wrapshl.h +++ /dev/null @@ -1,90 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/wrapshl.h -// Purpose: wrapper class for stuff from shell32.dll -// Author: Vadim Zeitlin -// Modified by: -// Created: 2004-10-19 -// RCS-ID: $Id: wrapshl.h 40367 2006-07-29 19:19:50Z VZ $ -// Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_MSW_WRAPSHL_H_ -#define _WX_MSW_WRAPSHL_H_ - -#ifdef __WXWINCE__ - #include <winreg.h> - #include <objbase.h> - #include <shlguid.h> -#endif - -#include <shlobj.h> - -#include "wx/msw/winundef.h" - -// ---------------------------------------------------------------------------- -// wxItemIdList implements RAII on top of ITEMIDLIST -// ---------------------------------------------------------------------------- - -class wxItemIdList -{ -public: - // ctor takes ownership of the item and will free it - wxItemIdList(LPITEMIDLIST pidl) - { - m_pidl = pidl; - } - - static void Free(LPITEMIDLIST pidl) - { - if ( pidl ) - { - LPMALLOC pMalloc; - SHGetMalloc(&pMalloc); - if ( pMalloc ) - { - pMalloc->Free(pidl); - pMalloc->Release(); - } - else - { - wxLogLastError(wxT("SHGetMalloc")); - } - } - } - - ~wxItemIdList() - { - Free(m_pidl); - } - - // implicit conversion to LPITEMIDLIST - operator LPITEMIDLIST() const { return m_pidl; } - - // get the corresponding path, returns empty string on error - wxString GetPath() const - { - wxString path; - if ( !SHGetPathFromIDList(m_pidl, wxStringBuffer(path, MAX_PATH)) ) - { - wxLogLastError(_T("SHGetPathFromIDList")); - } - - return path; - } - -private: - LPITEMIDLIST m_pidl; - - DECLARE_NO_COPY_CLASS(wxItemIdList) -}; - -// enable autocompleting filenames in the text control with given HWND -// -// this only works on systems with shlwapi.dll 5.0 or later -// -// implemented in src/msw/utilsgui.cpp -extern bool wxEnableFileNameAutoComplete(HWND hwnd); - -#endif // _WX_MSW_WRAPSHL_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/wrapwin.h b/desmume/src/windows/wx/include/wx/msw/wrapwin.h deleted file mode 100644 index 8c3c4cef1..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wrapwin.h +++ /dev/null @@ -1,99 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: msw/wrapwin.h -// Purpose: Wrapper around <windows.h>, to be included instead of it -// Author: Vaclav Slavik -// Created: 2003/07/22 -// RCS-ID: $Id: wrapwin.h 53877 2008-05-31 12:43:44Z SN $ -// Copyright: (c) 2003 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WRAPWIN_H_ -#define _WX_WRAPWIN_H_ - -#include "wx/platform.h" - -// strict type checking to detect conversion from HFOO to HBAR at compile-time -#ifndef STRICT - #define STRICT 1 -#endif - -// this macro tells windows.h to not define min() and max() as macros: we need -// this as otherwise they conflict with standard C++ functions -#ifndef NOMINMAX - #define NOMINMAX -#endif // NOMINMAX - - -// before including windows.h, define version macros at (currently) maximal -// values because we do all our checks at run-time anyhow -#ifndef WINVER - // the only exception to the above is MSVC 6 which has a time bomb in its - // headers: they warn against using them with WINVER >= 0x0500 as they - // contain only part of the declarations and they're not always correct, so - // don't define WINVER for it at all as this allows everything to work as - // expected both with standard VC6 headers (which define WINVER as 0x0400 - // by default) and headers from a newer SDK (which may define it as 0x0500) - #if !defined(__VISUALC__) || (__VISUALC__ >= 1300) - #define WINVER 0x0600 - #endif -#endif - -#ifndef _WIN32_WINNT - #define _WIN32_WINNT 0x0600 -#endif - -/* Deal with clash with __WINDOWS__ include guard */ -#if defined(__WXWINCE__) && defined(__WINDOWS__) -#undef __WINDOWS__ -#endif - -#include <windows.h> - -#if defined(__WXWINCE__) && !defined(__WINDOWS__) -#define __WINDOWS__ -#endif - -// #undef the macros defined in winsows.h which conflict with code elsewhere -#include "wx/msw/winundef.h" - -// Types DWORD_PTR, ULONG_PTR and so on are used for 64-bit compatability -// in the WINAPI SDK (they are an integral type that is the size of a -// pointer) on MSVC 7 and later. However, they are not available in older -// Platform SDKs, and since they are typedefs and not #defines we simply -// overwrite them if there is a chance that they're not defined -#if (!defined(_MSC_VER) || (_MSC_VER < 1300)) && !defined(__WIN64__) - #define UINT_PTR unsigned int - #define LONG_PTR long - #define ULONG_PTR unsigned long - #define DWORD_PTR unsigned long -#endif // !defined(_MSC_VER) || _MSC_VER < 1300 - -// ---------------------------------------------------------------------------- -// Fix the functions wrongly implemented in unicows.dll -// ---------------------------------------------------------------------------- - -#if wxUSE_UNICODE_MSLU - -#if wxUSE_GUI - -WXDLLEXPORT int wxMSLU_DrawStateW(WXHDC dc, WXHBRUSH br, WXFARPROC outputFunc, - WXLPARAM lData, WXWPARAM wData, - int x, int y, int cx, int cy, - unsigned int flags); -#define DrawStateW(dc, br, func, ld, wd, x, y, cx, cy, flags) \ - wxMSLU_DrawStateW((WXHDC)dc,(WXHBRUSH)br,(WXFARPROC)func, \ - ld, wd, x, y, cx, cy, flags) - -WXDLLEXPORT int wxMSLU_GetOpenFileNameW(void *ofn); -#define GetOpenFileNameW(ofn) wxMSLU_GetOpenFileNameW((void*)ofn) - -WXDLLEXPORT int wxMSLU_GetSaveFileNameW(void *ofn); -#define GetSaveFileNameW(ofn) wxMSLU_GetSaveFileNameW((void*)ofn) - -#endif // wxUSE_GUI - -#endif // wxUSE_UNICODE_MSLU - -#endif // _WX_WRAPWIN_H_ - diff --git a/desmume/src/windows/wx/include/wx/msw/wx.manifest b/desmume/src/windows/wx/include/wx/msw/wx.manifest deleted file mode 100644 index ecce6f5c3..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wx.manifest +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> -<assemblyIdentity - version="0.64.1.0" - processorArchitecture="x86" - name="Controls" - type="win32" -/> -<description>wxWindows application</description> -<dependency> - <dependentAssembly> - <assemblyIdentity - type="win32" - name="Microsoft.Windows.Common-Controls" - version="6.0.0.0" - processorArchitecture="X86" - publicKeyToken="6595b64144ccf1df" - language="*" - /> - </dependentAssembly> -</dependency> -</assembly> diff --git a/desmume/src/windows/wx/include/wx/msw/wx.rc b/desmume/src/windows/wx/include/wx/msw/wx.rc deleted file mode 100644 index 60d52dc30..000000000 --- a/desmume/src/windows/wx/include/wx/msw/wx.rc +++ /dev/null @@ -1,119 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// File: wx.rc -// Purpose: wxWindows resource definitions. ALWAYS include -// this in your application resource file. -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: wx.rc 43491 2006-11-18 16:46:59Z VZ $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#if defined(__MWERKS__) -#include <winresrc.h> -#else -#include <windows.h> -#endif - -#if defined(_WIN32_WCE) - #include "wx/msw/wince/wince.rc" -#endif - -#include "wx/msw/rcdefs.h" - -////////////////////////////////////////////////////////////////////////////// -// -// This is the MDI Window menu -// - -wxWindowMenu MENU DISCARDABLE -BEGIN - POPUP "&Window" - BEGIN - MENUITEM "&Cascade", 4002 - MENUITEM "Tile &Horizontally", 4001 - MENUITEM "Tile &Vertically", 4005 - MENUITEM "", -1 - MENUITEM "&Arrange Icons", 4003 - MENUITEM "&Next", 4004 - END -END - -////////////////////////////////////////////////////////////////////////////// -// -// Standard wxWindows Cursors -// - -WXCURSOR_HAND CURSOR DISCARDABLE "wx/msw/hand.cur" -WXCURSOR_BULLSEYE CURSOR DISCARDABLE "wx/msw/bullseye.cur" -WXCURSOR_PENCIL CURSOR DISCARDABLE "wx/msw/pencil.cur" -WXCURSOR_MAGNIFIER CURSOR DISCARDABLE "wx/msw/magnif1.cur" -WXCURSOR_ROLLER CURSOR DISCARDABLE "wx/msw/roller.cur" -WXCURSOR_PBRUSH CURSOR DISCARDABLE "wx/msw/pbrush.cur" -WXCURSOR_PLEFT CURSOR DISCARDABLE "wx/msw/pntleft.cur" -WXCURSOR_PRIGHT CURSOR DISCARDABLE "wx/msw/pntright.cur" -WXCURSOR_BLANK CURSOR DISCARDABLE "wx/msw/blank.cur" -WXCURSOR_RIGHT_ARROW CURSOR DISCARDABLE "wx/msw/rightarr.cur" -WXCURSOR_CROSS CURSOR DISCARDABLE "wx/msw/cross.cur" - - -////////////////////////////////////////////////////////////////////////////// -// -// Default Icons -// - -// First wx icon in alphabetical order, so it will be used by Explorer if the -// application doesn't have any icons of its own -wxICON_AAA ICON "wx/msw/std.ico" - -//wxDEFAULT_FRAME ICON "wx/msw/std.ico" -//wxDEFAULT_MDIPARENTFRAME ICON "wx/msw/mdi.ico" -//wxDEFAULT_MDICHILDFRAME ICON "wx/msw/child.ico" - -// Standard small icons -wxICON_SMALL_CLOSED_FOLDER ICON "wx/msw/folder1.ico" -wxICON_SMALL_OPEN_FOLDER ICON "wx/msw/folder2.ico" -wxICON_SMALL_FILE ICON "wx/msw/file1.ico" -wxICON_SMALL_COMPUTER ICON "wx/msw/computer.ico" -wxICON_SMALL_DRIVE ICON "wx/msw/drive.ico" -wxICON_SMALL_CDROM ICON "wx/msw/cdrom.ico" -wxICON_SMALL_FLOPPY ICON "wx/msw/floppy.ico" -wxICON_SMALL_REMOVEABLE ICON "wx/msw/removble.ico" - -////////////////////////////////////////////////////////////////////////////// -// -// Bitmaps -// - -// For wxContextHelpButton -csquery BITMAP "wx/msw/csquery.bmp" - -// For obtaining the RGB values of standard colours -wxBITMAP_STD_COLOURS BITMAP "wx/msw/colours.bmp" - -////////////////////////////////////////////////////////////////////////////// -// -// Manifest file for Windows XP -// - -#if !defined(wxUSE_NO_MANIFEST) || (wxUSE_NO_MANIFEST == 0) -#if !defined(WX_MSC_FULL_VER) || WX_MSC_FULL_VER < 140040130 - -// see "about isolated applications" topic in MSDN -#ifdef ISOLATION_AWARE_ENABLED -#define wxMANIFEST_ID 2 -#else -#define wxMANIFEST_ID 1 -#endif - -#if defined(WX_CPU_AMD64) -wxMANIFEST_ID 24 "wx/msw/amd64.manifest" -#elif defined(WX_CPU_IA64) -wxMANIFEST_ID 24 "wx/msw/ia64.manifest" -#elif defined(WX_CPU_X86) -wxMANIFEST_ID 24 "wx/msw/wx.manifest" -#endif - -#endif // !defined(WX_MSC_FULL_VER) || WX_MSC_FULL_VER < 140040130 -#endif // !defined(wxUSE_NO_MANIFEST) || (wxUSE_NO_MANIFEST == 0) diff --git a/desmume/src/windows/wx/include/wx/notebook.h b/desmume/src/windows/wx/include/wx/notebook.h deleted file mode 100644 index 40c8ccb96..000000000 --- a/desmume/src/windows/wx/include/wx/notebook.h +++ /dev/null @@ -1,183 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/notebook.h -// Purpose: wxNotebook interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 01.02.01 -// RCS-ID: $Id: notebook.h 42152 2006-10-20 09:16:41Z VZ $ -// Copyright: (c) 1996-2000 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_NOTEBOOK_H_BASE_ -#define _WX_NOTEBOOK_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_NOTEBOOK - -#include "wx/bookctrl.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// wxNotebook hit results, use wxBK_HITTEST so other book controls can share them -// if wxUSE_NOTEBOOK is disabled -enum -{ - wxNB_HITTEST_NOWHERE = wxBK_HITTEST_NOWHERE, - wxNB_HITTEST_ONICON = wxBK_HITTEST_ONICON, - wxNB_HITTEST_ONLABEL = wxBK_HITTEST_ONLABEL, - wxNB_HITTEST_ONITEM = wxBK_HITTEST_ONITEM, - wxNB_HITTEST_ONPAGE = wxBK_HITTEST_ONPAGE -}; - -// wxNotebook flags - -// use common book wxBK_* flags for describing alignment -#define wxNB_DEFAULT wxBK_DEFAULT -#define wxNB_TOP wxBK_TOP -#define wxNB_BOTTOM wxBK_BOTTOM -#define wxNB_LEFT wxBK_LEFT -#define wxNB_RIGHT wxBK_RIGHT - -#define wxNB_FIXEDWIDTH 0x0100 -#define wxNB_MULTILINE 0x0200 -#define wxNB_NOPAGETHEME 0x0400 -#define wxNB_FLAT 0x0800 - - -typedef wxWindow wxNotebookPage; // so far, any window can be a page - -extern WXDLLEXPORT_DATA(const wxChar) wxNotebookNameStr[]; - -#if WXWIN_COMPATIBILITY_2_4 - #define wxNOTEBOOK_NAME wxNotebookNameStr -#endif - -// ---------------------------------------------------------------------------- -// wxNotebookBase: define wxNotebook interface -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxNotebookBase : public wxBookCtrlBase -{ -public: - // ctors - // ----- - - wxNotebookBase() { } - - wxNotebookBase(wxWindow *parent, - wxWindowID winid, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxNotebookNameStr) ; - - // wxNotebook-specific additions to wxBookCtrlBase interface - // --------------------------------------------------------- - - // get the number of rows for a control with wxNB_MULTILINE style (not all - // versions support it - they will always return 1 then) - virtual int GetRowCount() const { return 1; } - - // set the padding between tabs (in pixels) - virtual void SetPadding(const wxSize& padding) = 0; - - // set the size of the tabs for wxNB_FIXEDWIDTH controls - virtual void SetTabSize(const wxSize& sz) = 0; - - - - // implement some base class functions - virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; - - // On platforms that support it, get the theme page background colour, else invalid colour - virtual wxColour GetThemeBackgroundColour() const { return wxNullColour; } - - - // send wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING/ED events - - // returns false if the change to nPage is vetoed by the program - bool SendPageChangingEvent(int nPage); - - // sends the event about page change from old to new (or GetSelection() if - // new is -1) - void SendPageChangedEvent(int nPageOld, int nPageNew = -1); - - -protected: - DECLARE_NO_COPY_CLASS(wxNotebookBase) -}; - -// ---------------------------------------------------------------------------- -// notebook event class and related stuff -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxNotebookEvent : public wxBookCtrlBaseEvent -{ -public: - wxNotebookEvent(wxEventType commandType = wxEVT_NULL, int winid = 0, - int nSel = -1, int nOldSel = -1) - : wxBookCtrlBaseEvent(commandType, winid, nSel, nOldSel) - { - } - - wxNotebookEvent(const wxNotebookEvent& event) - : wxBookCtrlBaseEvent(event) - { - } - - virtual wxEvent *Clone() const { return new wxNotebookEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxNotebookEvent) -}; - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, 802) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, 803) -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxNotebookEventFunction)(wxNotebookEvent&); - -#define wxNotebookEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxNotebookEventFunction, &func) - -#define EVT_NOTEBOOK_PAGE_CHANGED(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, winid, wxNotebookEventHandler(fn)) - -#define EVT_NOTEBOOK_PAGE_CHANGING(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, winid, wxNotebookEventHandler(fn)) - -// ---------------------------------------------------------------------------- -// wxNotebook class itself -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/notebook.h" -#elif defined(__WXMSW__) - #include "wx/msw/notebook.h" -#elif defined(__WXMOTIF__) - #include "wx/generic/notebook.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/notebook.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/notebook.h" -#elif defined(__WXMAC__) - #include "wx/mac/notebook.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/notebook.h" -#elif defined(__WXPM__) - #include "wx/os2/notebook.h" -#endif - -#endif // wxUSE_NOTEBOOK - -#endif - // _WX_NOTEBOOK_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/numdlg.h b/desmume/src/windows/wx/include/wx/numdlg.h deleted file mode 100644 index a3a1505fc..000000000 --- a/desmume/src/windows/wx/include/wx/numdlg.h +++ /dev/null @@ -1,23 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/numdlg.h -// Purpose: wxNumberEntryDialog class -// Author: John Labenski -// Modified by: -// Created: 07.02.04 (extracted from wx/textdlg.h) -// RCS-ID: $Id: numdlg.h 37157 2006-01-26 15:33:27Z ABX $ -// Copyright: (c) John Labenski -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_NUMDLGDLG_H_BASE_ -#define _WX_NUMDLGDLG_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_NUMBERDLG - -#include "wx/generic/numdlgg.h" - -#endif // wxUSE_NUMBERDLG - -#endif // _WX_NUMDLGDLG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/object.h b/desmume/src/windows/wx/include/wx/object.h deleted file mode 100644 index d46efcfaa..000000000 --- a/desmume/src/windows/wx/include/wx/object.h +++ /dev/null @@ -1,569 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/object.h -// Purpose: wxObject class, plus run-time type information macros -// Author: Julian Smart -// Modified by: Ron Lee -// Created: 01/02/97 -// RCS-ID: $Id: object.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1997 Julian Smart -// (c) 2001 Ron Lee <ron@debian.org> -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_OBJECTH__ -#define _WX_OBJECTH__ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/memory.h" - -class WXDLLIMPEXP_FWD_BASE wxObject; - -#ifndef wxUSE_EXTENDED_RTTI -#define wxUSE_EXTENDED_RTTI 0 -#endif - -#if wxUSE_EXTENDED_RTTI -#include "wx/xti.h" -#else - -// ---------------------------------------------------------------------------- -// conditional compilation -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_BASE wxClassInfo; -class WXDLLIMPEXP_FWD_BASE wxHashTable; -class WXDLLIMPEXP_FWD_BASE wxObjectRefData; - -// ---------------------------------------------------------------------------- -// wxClassInfo -// ---------------------------------------------------------------------------- - -typedef wxObject *(*wxObjectConstructorFn)(void); - -class WXDLLIMPEXP_BASE wxClassInfo -{ -public: - wxClassInfo( const wxChar *className, - const wxClassInfo *baseInfo1, - const wxClassInfo *baseInfo2, - int size, - wxObjectConstructorFn ctor ) - : m_className(className) - , m_objectSize(size) - , m_objectConstructor(ctor) - , m_baseInfo1(baseInfo1) - , m_baseInfo2(baseInfo2) - , m_next(sm_first) - { - sm_first = this; - Register(); - } - - ~wxClassInfo(); - - wxObject *CreateObject() const - { return m_objectConstructor ? (*m_objectConstructor)() : 0; } - bool IsDynamic() const { return (NULL != m_objectConstructor); } - - const wxChar *GetClassName() const { return m_className; } - const wxChar *GetBaseClassName1() const - { return m_baseInfo1 ? m_baseInfo1->GetClassName() : NULL; } - const wxChar *GetBaseClassName2() const - { return m_baseInfo2 ? m_baseInfo2->GetClassName() : NULL; } - const wxClassInfo *GetBaseClass1() const { return m_baseInfo1; } - const wxClassInfo *GetBaseClass2() const { return m_baseInfo2; } - int GetSize() const { return m_objectSize; } - - wxObjectConstructorFn GetConstructor() const - { return m_objectConstructor; } - static const wxClassInfo *GetFirst() { return sm_first; } - const wxClassInfo *GetNext() const { return m_next; } - static wxClassInfo *FindClass(const wxChar *className); - - // Climb upwards through inheritance hierarchy. - // Dual inheritance is catered for. - - bool IsKindOf(const wxClassInfo *info) const - { - return info != 0 && - ( info == this || - ( m_baseInfo1 && m_baseInfo1->IsKindOf(info) ) || - ( m_baseInfo2 && m_baseInfo2->IsKindOf(info) ) ); - } - -#if WXWIN_COMPATIBILITY_2_4 - // Initializes parent pointers and hash table for fast searching. - wxDEPRECATED( static void InitializeClasses() ); - // Cleans up hash table used for fast searching. - wxDEPRECATED( static void CleanUpClasses() ); -#endif - -public: - const wxChar *m_className; - int m_objectSize; - wxObjectConstructorFn m_objectConstructor; - - // Pointers to base wxClassInfos: set in InitializeClasses - - const wxClassInfo *m_baseInfo1; - const wxClassInfo *m_baseInfo2; - - // class info object live in a linked list: - // pointers to its head and the next element in it - - static wxClassInfo *sm_first; - wxClassInfo *m_next; - - // FIXME: this should be private (currently used directly by way too - // many clients) - static wxHashTable *sm_classTable; - -private: - // InitializeClasses() helper - static wxClassInfo *GetBaseByName(const wxChar *name); - - DECLARE_NO_COPY_CLASS(wxClassInfo) - -protected: - // registers the class - void Register(); - void Unregister(); -}; - -WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxChar *name); - -#if WXWIN_COMPATIBILITY_2_4 -inline void wxClassInfo::InitializeClasses() {} -inline void wxClassInfo::CleanUpClasses() {} -#endif - -// ---------------------------------------------------------------------------- -// Dynamic class macros -// ---------------------------------------------------------------------------- - -#define DECLARE_ABSTRACT_CLASS(name) \ - public: \ - static wxClassInfo ms_classInfo; \ - virtual wxClassInfo *GetClassInfo() const; - -#define DECLARE_DYNAMIC_CLASS_NO_ASSIGN(name) \ - DECLARE_NO_ASSIGN_CLASS(name) \ - DECLARE_DYNAMIC_CLASS(name) - -#define DECLARE_DYNAMIC_CLASS_NO_COPY(name) \ - DECLARE_NO_COPY_CLASS(name) \ - DECLARE_DYNAMIC_CLASS(name) - -#define DECLARE_DYNAMIC_CLASS(name) \ - DECLARE_ABSTRACT_CLASS(name) \ - static wxObject* wxCreateObject(); - -#define DECLARE_CLASS(name) DECLARE_DYNAMIC_CLASS(name) - - -// common part of the macros below -#define wxIMPLEMENT_CLASS_COMMON(name, basename, baseclsinfo2, func) \ - wxClassInfo name::ms_classInfo(wxT(#name), \ - &basename::ms_classInfo, \ - baseclsinfo2, \ - (int) sizeof(name), \ - (wxObjectConstructorFn) func); \ - \ - wxClassInfo *name::GetClassInfo() const \ - { return &name::ms_classInfo; } - -#define wxIMPLEMENT_CLASS_COMMON1(name, basename, func) \ - wxIMPLEMENT_CLASS_COMMON(name, basename, NULL, func) - -#define wxIMPLEMENT_CLASS_COMMON2(name, basename1, basename2, func) \ - wxIMPLEMENT_CLASS_COMMON(name, basename1, &basename2::ms_classInfo, func) - -// ----------------------------------- -// for concrete classes -// ----------------------------------- - - // Single inheritance with one base class -#define IMPLEMENT_DYNAMIC_CLASS(name, basename) \ - wxIMPLEMENT_CLASS_COMMON1(name, basename, name::wxCreateObject) \ - wxObject* name::wxCreateObject() \ - { return new name; } - - // Multiple inheritance with two base classes -#define IMPLEMENT_DYNAMIC_CLASS2(name, basename1, basename2) \ - wxIMPLEMENT_CLASS_COMMON2(name, basename1, basename2, \ - name::wxCreateObject) \ - wxObject* name::wxCreateObject() \ - { return new name; } - -// ----------------------------------- -// for abstract classes -// ----------------------------------- - - // Single inheritance with one base class - -#define IMPLEMENT_ABSTRACT_CLASS(name, basename) \ - wxIMPLEMENT_CLASS_COMMON1(name, basename, NULL) - - // Multiple inheritance with two base classes - -#define IMPLEMENT_ABSTRACT_CLASS2(name, basename1, basename2) \ - wxIMPLEMENT_CLASS_COMMON2(name, basename1, basename2, NULL) - -#define IMPLEMENT_CLASS IMPLEMENT_ABSTRACT_CLASS -#define IMPLEMENT_CLASS2 IMPLEMENT_ABSTRACT_CLASS2 - -#endif // !wxUSE_EXTENDED_RTTI - - -// ----------------------------------- -// for pluggable classes -// ----------------------------------- - - // NOTE: this should probably be the very first statement - // in the class declaration so wxPluginSentinel is - // the first member initialised and the last destroyed. - -// _DECLARE_DL_SENTINEL(name) wxPluginSentinel m_pluginsentinel; - -#if wxUSE_NESTED_CLASSES - -#define _DECLARE_DL_SENTINEL(name, exportdecl) \ -class exportdecl name##PluginSentinel { \ -private: \ - static const wxString sm_className; \ -public: \ - name##PluginSentinel(); \ - ~name##PluginSentinel(); \ -}; \ -name##PluginSentinel m_pluginsentinel; - -#define _IMPLEMENT_DL_SENTINEL(name) \ - const wxString name::name##PluginSentinel::sm_className(#name); \ - name::name##PluginSentinel::name##PluginSentinel() { \ - wxPluginLibrary *e = (wxPluginLibrary*) wxPluginLibrary::ms_classes.Get(#name); \ - if( e != 0 ) { e->RefObj(); } \ - } \ - name::name##PluginSentinel::~name##PluginSentinel() { \ - wxPluginLibrary *e = (wxPluginLibrary*) wxPluginLibrary::ms_classes.Get(#name); \ - if( e != 0 ) { e->UnrefObj(); } \ - } -#else - -#define _DECLARE_DL_SENTINEL(name) -#define _IMPLEMENT_DL_SENTINEL(name) - -#endif // wxUSE_NESTED_CLASSES - -#define DECLARE_PLUGGABLE_CLASS(name) \ - DECLARE_DYNAMIC_CLASS(name) _DECLARE_DL_SENTINEL(name, WXDLLEXPORT) -#define DECLARE_ABSTRACT_PLUGGABLE_CLASS(name) \ - DECLARE_ABSTRACT_CLASS(name) _DECLARE_DL_SENTINEL(name, WXDLLEXPORT) - -#define DECLARE_USER_EXPORTED_PLUGGABLE_CLASS(name, usergoo) \ - DECLARE_DYNAMIC_CLASS(name) _DECLARE_DL_SENTINEL(name, usergoo) -#define DECLARE_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS(name, usergoo) \ - DECLARE_ABSTRACT_CLASS(name) _DECLARE_DL_SENTINEL(name, usergoo) - -#define IMPLEMENT_PLUGGABLE_CLASS(name, basename) \ - IMPLEMENT_DYNAMIC_CLASS(name, basename) _IMPLEMENT_DL_SENTINEL(name) -#define IMPLEMENT_PLUGGABLE_CLASS2(name, basename1, basename2) \ - IMPLEMENT_DYNAMIC_CLASS2(name, basename1, basename2) _IMPLEMENT_DL_SENTINEL(name) -#define IMPLEMENT_ABSTRACT_PLUGGABLE_CLASS(name, basename) \ - IMPLEMENT_ABSTRACT_CLASS(name, basename) _IMPLEMENT_DL_SENTINEL(name) -#define IMPLEMENT_ABSTRACT_PLUGGABLE_CLASS2(name, basename1, basename2) \ - IMPLEMENT_ABSTRACT_CLASS2(name, basename1, basename2) _IMPLEMENT_DL_SENTINEL(name) - -#define IMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS(name, basename) \ - IMPLEMENT_PLUGGABLE_CLASS(name, basename) -#define IMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS2(name, basename1, basename2) \ - IMPLEMENT_PLUGGABLE_CLASS2(name, basename1, basename2) -#define IMPLEMENT_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS(name, basename) \ - IMPLEMENT_ABSTRACT_PLUGGABLE_CLASS(name, basename) -#define IMPLEMENT_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS2(name, basename1, basename2) \ - IMPLEMENT_ABSTRACT_PLUGGABLE_CLASS2(name, basename1, basename2) - -#define CLASSINFO(name) (&name::ms_classInfo) - -#define wxIS_KIND_OF(obj, className) obj->IsKindOf(&className::ms_classInfo) - -// Just seems a bit nicer-looking (pretend it's not a macro) -#define wxIsKindOf(obj, className) obj->IsKindOf(&className::ms_classInfo) - -// this cast does some more checks at compile time as it uses static_cast -// internally -// -// note that it still has different semantics from dynamic_cast<> and so can't -// be replaced by it as long as there are any compilers not supporting it -#define wxDynamicCast(obj, className) \ - ((className *) wxCheckDynamicCast( \ - wx_const_cast(wxObject *, wx_static_cast(const wxObject *, \ - wx_const_cast(className *, wx_static_cast(const className *, obj)))), \ - &className::ms_classInfo)) - -// The 'this' pointer is always true, so use this version -// to cast the this pointer and avoid compiler warnings. -#define wxDynamicCastThis(className) \ - (IsKindOf(&className::ms_classInfo) ? (className *)(this) : (className *)0) - -#ifdef __WXDEBUG__ -inline void* wxCheckCast(void *ptr) -{ - wxASSERT_MSG( ptr, _T("wxStaticCast() used incorrectly") ); - return ptr; -} -#define wxStaticCast(obj, className) \ - ((className *)wxCheckCast(wxDynamicCast(obj, className))) - -#else // !__WXDEBUG__ -#define wxStaticCast(obj, className) \ - wx_const_cast(className *, wx_static_cast(const className *, obj)) - -#endif // __WXDEBUG__ - -// ---------------------------------------------------------------------------- -// set up memory debugging macros -// ---------------------------------------------------------------------------- - -/* - Which new/delete operator variants do we want? - - _WX_WANT_NEW_SIZET_WXCHAR_INT = void *operator new (size_t size, wxChar *fileName = 0, int lineNum = 0) - _WX_WANT_DELETE_VOID = void operator delete (void * buf) - _WX_WANT_DELETE_VOID_CONSTCHAR_SIZET = void operator delete (void *buf, const char *_fname, size_t _line) - _WX_WANT_DELETE_VOID_WXCHAR_INT = void operator delete(void *buf, wxChar*, int) - _WX_WANT_ARRAY_NEW_SIZET_WXCHAR_INT = void *operator new[] (size_t size, wxChar *fileName , int lineNum = 0) - _WX_WANT_ARRAY_DELETE_VOID = void operator delete[] (void *buf) - _WX_WANT_ARRAY_DELETE_VOID_WXCHAR_INT = void operator delete[] (void* buf, wxChar*, int ) -*/ - -#if defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING - -// All compilers get this one -#define _WX_WANT_NEW_SIZET_WXCHAR_INT - -// Everyone except Visage gets the next one -#ifndef __VISAGECPP__ - #define _WX_WANT_DELETE_VOID -#endif - -// Only visage gets this one under the correct circumstances -#if defined(__VISAGECPP__) && __DEBUG_ALLOC__ - #define _WX_WANT_DELETE_VOID_CONSTCHAR_SIZET -#endif - -// Only VC++ 6 and CodeWarrior get overloaded delete that matches new -#if (defined(__VISUALC__) && (__VISUALC__ >= 1200)) || \ - (defined(__MWERKS__) && (__MWERKS__ >= 0x2400)) - #define _WX_WANT_DELETE_VOID_WXCHAR_INT -#endif - -// Now see who (if anyone) gets the array memory operators -#if wxUSE_ARRAY_MEMORY_OPERATORS - - // Everyone except Visual C++ (cause problems for VC++ - crashes) - #if !defined(__VISUALC__) - #define _WX_WANT_ARRAY_NEW_SIZET_WXCHAR_INT - #endif - - // Everyone except Visual C++ (cause problems for VC++ - crashes) - #if !defined(__VISUALC__) - #define _WX_WANT_ARRAY_DELETE_VOID - #endif - - // Only CodeWarrior 6 or higher - #if defined(__MWERKS__) && (__MWERKS__ >= 0x2400) - #define _WX_WANT_ARRAY_DELETE_VOID_WXCHAR_INT - #endif - -#endif // wxUSE_ARRAY_MEMORY_OPERATORS - -#endif // __WXDEBUG__ && wxUSE_MEMORY_TRACING - -// ---------------------------------------------------------------------------- -// wxObjectRefData: ref counted data meant to be stored in wxObject -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxObjectRefData -{ - friend class WXDLLIMPEXP_FWD_BASE wxObject; - -public: - wxObjectRefData() : m_count(1) { } - virtual ~wxObjectRefData() { } - - int GetRefCount() const { return m_count; } - -private: - int m_count; -}; - -// ---------------------------------------------------------------------------- -// wxObject: the root class of wxWidgets object hierarchy -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxObject -{ - DECLARE_ABSTRACT_CLASS(wxObject) - -public: - wxObject() { m_refData = NULL; } - virtual ~wxObject() { UnRef(); } - - wxObject(const wxObject& other) - { - m_refData = other.m_refData; - if (m_refData) - m_refData->m_count++; - } - - wxObject& operator=(const wxObject& other) - { - if ( this != &other ) - { - Ref(other); - } - return *this; - } - - bool IsKindOf(wxClassInfo *info) const; - - - // Turn on the correct set of new and delete operators - -#ifdef _WX_WANT_NEW_SIZET_WXCHAR_INT - void *operator new ( size_t size, const wxChar *fileName = NULL, int lineNum = 0 ); -#endif - -#ifdef _WX_WANT_DELETE_VOID - void operator delete ( void * buf ); -#endif - -#ifdef _WX_WANT_DELETE_VOID_CONSTCHAR_SIZET - void operator delete ( void *buf, const char *_fname, size_t _line ); -#endif - -#ifdef _WX_WANT_DELETE_VOID_WXCHAR_INT - void operator delete ( void *buf, const wxChar*, int ); -#endif - -#ifdef _WX_WANT_ARRAY_NEW_SIZET_WXCHAR_INT - void *operator new[] ( size_t size, const wxChar *fileName = NULL, int lineNum = 0 ); -#endif - -#ifdef _WX_WANT_ARRAY_DELETE_VOID - void operator delete[] ( void *buf ); -#endif - -#ifdef _WX_WANT_ARRAY_DELETE_VOID_WXCHAR_INT - void operator delete[] (void* buf, const wxChar*, int ); -#endif - - // ref counted data handling methods - - // get/set - wxObjectRefData *GetRefData() const { return m_refData; } - void SetRefData(wxObjectRefData *data) { m_refData = data; } - - // make a 'clone' of the object - void Ref(const wxObject& clone); - - // destroy a reference - void UnRef(); - - // Make sure this object has only one reference - void UnShare() { AllocExclusive(); } - - // check if this object references the same data as the other one - bool IsSameAs(const wxObject& o) const { return m_refData == o.m_refData; } - -protected: - // ensure that our data is not shared with anybody else: if we have no - // data, it is created using CreateRefData() below, if we have shared data - // it is copied using CloneRefData(), otherwise nothing is done - void AllocExclusive(); - - // both methods must be implemented if AllocExclusive() is used, not pure - // virtual only because of the backwards compatibility reasons - - // create a new m_refData - virtual wxObjectRefData *CreateRefData() const; - - // create a new m_refData initialized with the given one - virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const; - - wxObjectRefData *m_refData; -}; - -inline wxObject *wxCheckDynamicCast(wxObject *obj, wxClassInfo *classInfo) -{ - return obj && obj->GetClassInfo()->IsKindOf(classInfo) ? obj : NULL; -} - -#if wxUSE_EXTENDED_RTTI -class WXDLLIMPEXP_BASE wxDynamicObject : public wxObject -{ - friend class WXDLLIMPEXP_BASE wxDynamicClassInfo ; -public: - // instantiates this object with an instance of its superclass - wxDynamicObject(wxObject* superClassInstance, const wxDynamicClassInfo *info) ; - virtual ~wxDynamicObject(); - - void SetProperty (const wxChar *propertyName, const wxxVariant &value); - wxxVariant GetProperty (const wxChar *propertyName) const ; - - // get the runtime identity of this object - wxClassInfo *GetClassInfo() const - { -#ifdef _MSC_VER - return (wxClassInfo*) m_classInfo; -#else - return wx_const_cast(wxClassInfo *, m_classInfo); -#endif - } - - wxObject* GetSuperClassInstance() const - { - return m_superClassInstance ; - } -private : - // removes an existing runtime-property - void RemoveProperty( const wxChar *propertyName ) ; - - // renames an existing runtime-property - void RenameProperty( const wxChar *oldPropertyName , const wxChar *newPropertyName ) ; - - wxObject *m_superClassInstance ; - const wxDynamicClassInfo *m_classInfo; - struct wxDynamicObjectInternal; - wxDynamicObjectInternal *m_data; -}; -#endif - -// ---------------------------------------------------------------------------- -// more debugging macros -// ---------------------------------------------------------------------------- - -// Redefine new to be the debugging version. This doesn't work with all -// compilers, in which case you need to use WXDEBUG_NEW explicitly if you wish -// to use the debugging version. - -#ifdef __WXDEBUG__ - #define WXDEBUG_NEW new(__TFILE__,__LINE__) - - #if wxUSE_DEBUG_NEW_ALWAYS - #if wxUSE_GLOBAL_MEMORY_OPERATORS - #define new WXDEBUG_NEW - #elif defined(__VISUALC__) - // Including this file redefines new and allows leak reports to - // contain line numbers - #include "wx/msw/msvcrt.h" - #endif - #endif // wxUSE_DEBUG_NEW_ALWAYS -#else // !__WXDEBUG__ - #define WXDEBUG_NEW new -#endif // __WXDEBUG__/!__WXDEBUG__ - -#endif // _WX_OBJECTH__ diff --git a/desmume/src/windows/wx/include/wx/odcombo.h b/desmume/src/windows/wx/include/wx/odcombo.h deleted file mode 100644 index a0f67a88e..000000000 --- a/desmume/src/windows/wx/include/wx/odcombo.h +++ /dev/null @@ -1,386 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/odcombo.h -// Purpose: wxOwnerDrawnComboBox and wxVListBoxPopup -// Author: Jaakko Salli -// Modified by: -// Created: Apr-30-2006 -// RCS-ID: $Id: odcombo.h 41305 2006-09-19 17:16:50Z RR $ -// Copyright: (c) Jaakko Salli -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_ODCOMBO_H_ -#define _WX_ODCOMBO_H_ - -#include "wx/defs.h" - -#if wxUSE_ODCOMBOBOX - -#include "wx/combo.h" -#include "wx/ctrlsub.h" -#include "wx/vlbox.h" -#include "wx/timer.h" - - -// -// New window styles for wxOwnerDrawnComboBox -// -enum -{ - // Double-clicking cycles item if wxCB_READONLY is also used. - wxODCB_DCLICK_CYCLES = wxCC_SPECIAL_DCLICK, - - // If used, control itself is not custom paint using callback. - // Even if this is not used, writable combo is never custom paint - // until SetCustomPaintWidth is called - wxODCB_STD_CONTROL_PAINT = 0x1000 -}; - - -// -// Callback flags (see wxOwnerDrawnComboBox::OnDrawItem) -// -enum -{ - // when set, we are painting the selected item in control, - // not in the popup - wxODCB_PAINTING_CONTROL = 0x0001, - - - // when set, we are painting an item which should have - // focus rectangle painted in the background. Text colour - // and clipping region are then appropriately set in - // the default OnDrawBackground implementation. - wxODCB_PAINTING_SELECTED = 0x0002 -}; - - -// ---------------------------------------------------------------------------- -// wxVListBoxComboPopup is a wxVListBox customized to act as a popup control. -// -// Notes: -// wxOwnerDrawnComboBox uses this as its popup. However, it always derives -// from native wxComboCtrl. If you need to use this popup with -// wxGenericComboControl, then remember that vast majority of item manipulation -// functionality is implemented in the wxVListBoxComboPopup class itself. -// -// ---------------------------------------------------------------------------- - - -class WXDLLIMPEXP_ADV wxVListBoxComboPopup : public wxVListBox, - public wxComboPopup -{ - friend class wxOwnerDrawnComboBox; -public: - - // init and dtor - wxVListBoxComboPopup() : wxVListBox(), wxComboPopup() { } - virtual ~wxVListBoxComboPopup(); - - // required virtuals - virtual void Init(); - virtual bool Create(wxWindow* parent); - virtual wxWindow *GetControl() { return this; } - virtual void SetStringValue( const wxString& value ); - virtual wxString GetStringValue() const; - - // more customization - virtual void OnPopup(); - virtual wxSize GetAdjustedSize( int minWidth, int prefHeight, int maxHeight ); - virtual void PaintComboControl( wxDC& dc, const wxRect& rect ); - virtual void OnComboKeyEvent( wxKeyEvent& event ); - virtual void OnComboDoubleClick(); - virtual bool LazyCreate(); - - // Item management - void SetSelection( int item ); - void Insert( const wxString& item, int pos ); - int Append(const wxString& item); - void Clear(); - void Delete( unsigned int item ); - void SetItemClientData(unsigned int n, void* clientData, wxClientDataType clientDataItemsType); - void *GetItemClientData(unsigned int n) const; - void SetString( int item, const wxString& str ); - wxString GetString( int item ) const; - unsigned int GetCount() const; - int FindString(const wxString& s, bool bCase = false) const; - int GetSelection() const; - - //void Populate( int n, const wxString choices[] ); - void Populate( const wxArrayString& choices ); - void ClearClientDatas(); - - // helpers - int GetItemAtPosition( const wxPoint& pos ) { return HitTest(pos); } - wxCoord GetTotalHeight() const { return EstimateTotalHeight(); } - wxCoord GetLineHeight(int line) const { return OnGetLineHeight(line); } - -protected: - - // Called by OnComboDoubleClick and OnComboKeyEvent - bool HandleKey( int keycode, bool saturate, wxChar unicode = 0 ); - - // sends combobox select event from the parent combo control - void SendComboBoxEvent( int selection ); - - // gets value, sends event and dismisses - void DismissWithEvent(); - - // OnMeasureItemWidth will be called on next GetAdjustedSize. - void ItemWidthChanged(unsigned int item) - { - m_widths[item] = -1; - m_widthsDirty = true; - } - - // Callbacks for drawing and measuring items. Override in a derived class for - // owner-drawnness. Font, background and text colour have been prepared according - // to selection, focus and such. - // - // item: item index to be drawn, may be wxNOT_FOUND when painting combo control itself - // and there is no valid selection - // flags: wxODCB_PAINTING_CONTROL is set if painting to combo control instead of list - // NOTE: If wxVListBoxComboPopup is used with wxComboCtrl class not derived from - // wxOwnerDrawnComboBox, this method must be overridden. - virtual void OnDrawItem( wxDC& dc, const wxRect& rect, int item, int flags ) const; - - // This is same as in wxVListBox - virtual wxCoord OnMeasureItem( size_t item ) const; - - // Return item width, or -1 for calculating from text extent (default) - virtual wxCoord OnMeasureItemWidth( size_t item ) const; - - // Draw item and combo control background. Flags are same as with OnDrawItem. - // NB: Can't use name OnDrawBackground because of virtual function hiding warnings. - virtual void OnDrawBg(wxDC& dc, const wxRect& rect, int item, int flags) const; - - // Additional wxVListBox implementation (no need to override in derived classes) - virtual void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const; - void OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const; - - // filter mouse move events happening outside the list box - // move selection with cursor - void OnMouseMove(wxMouseEvent& event); - void OnMouseWheel(wxMouseEvent& event); - void OnKey(wxKeyEvent& event); - void OnLeftClick(wxMouseEvent& event); - - // Return the widest item width (recalculating it if necessary) - int GetWidestItemWidth() { CalcWidths(); return m_widestWidth; } - - // Return the index of the widest item (recalculating it if necessary) - int GetWidestItem() { CalcWidths(); return m_widestItem; } - - // Stop partial completion (when some other event occurs) - void StopPartialCompletion(); - - wxArrayString m_strings; - wxArrayPtrVoid m_clientDatas; - - wxFont m_useFont; - - //wxString m_stringValue; // displayed text (may be different than m_strings[m_value]) - int m_value; // selection - int m_itemHover; // on which item the cursor is - int m_itemHeight; // default item height (calculate from font size - // and used in the absence of callback) - wxClientDataType m_clientDataItemsType; - -private: - - // Cached item widths (in pixels). - wxArrayInt m_widths; - - // Width of currently widest item. - int m_widestWidth; - - // Index of currently widest item. - int m_widestItem; - - // Measure some items in next GetAdjustedSize? - bool m_widthsDirty; - - // Find widest item in next GetAdjustedSize? - bool m_findWidest; - - // has the mouse been released on this control? - bool m_clicked; - - // Recalculate widths if they are dirty - void CalcWidths(); - - // Partial completion string - wxString m_partialCompletionString; - -#if wxUSE_TIMER - // Partial completion timer - wxTimer m_partialCompletionTimer; -#endif // wxUSE_TIMER - - DECLARE_EVENT_TABLE() -}; - - -// ---------------------------------------------------------------------------- -// wxOwnerDrawnComboBox: a generic wxComboBox that allows custom paint items -// in addition to many other types of customization already allowed by -// the wxComboCtrl. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxOwnerDrawnComboBox : public wxComboCtrl, - public wxItemContainer -{ - //friend class wxComboPopupWindow; - friend class wxVListBoxComboPopup; -public: - - // ctors and such - wxOwnerDrawnComboBox() : wxComboCtrl() { Init(); } - - wxOwnerDrawnComboBox(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - int n, - const wxString choices[], - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr) - : wxComboCtrl() - { - Init(); - - (void)Create(parent, id, value, pos, size, n, - choices, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr); - - wxOwnerDrawnComboBox(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - int n, - const wxString choices[], - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr); - - virtual ~wxOwnerDrawnComboBox(); - - // Prevent app from using wxComboPopup - void SetPopupControl(wxVListBoxComboPopup* popup) - { - DoSetPopupControl(popup); - } - - // wxControlWithItems methods - virtual void Clear(); - virtual void Delete(unsigned int n); - virtual unsigned int GetCount() const; - virtual wxString GetString(unsigned int n) const; - virtual void SetString(unsigned int n, const wxString& s); - virtual int FindString(const wxString& s, bool bCase = false) const; - virtual void Select(int n); - virtual int GetSelection() const; - virtual void SetSelection(int n) { Select(n); } - - - // Prevent a method from being hidden - virtual void SetSelection(long from, long to) - { - wxComboCtrl::SetSelection(from,to); - } - - // Return the widest item width (recalculating it if necessary) - virtual int GetWidestItemWidth() { EnsurePopupControl(); return GetVListBoxComboPopup()->GetWidestItemWidth(); } - - // Return the index of the widest item (recalculating it if necessary) - virtual int GetWidestItem() { EnsurePopupControl(); return GetVListBoxComboPopup()->GetWidestItem(); } - - wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST - -protected: - - // Callback for drawing. Font, background and text colour have been - // prepared according to selection, focus and such. - // item: item index to be drawn, may be wxNOT_FOUND when painting combo control itself - // and there is no valid selection - // flags: wxODCB_PAINTING_CONTROL is set if painting to combo control instead of list - virtual void OnDrawItem( wxDC& dc, const wxRect& rect, int item, int flags ) const; - - // Callback for item height, or -1 for default - virtual wxCoord OnMeasureItem( size_t item ) const; - - // Callback for item width, or -1 for default/undetermined - virtual wxCoord OnMeasureItemWidth( size_t item ) const; - - // Callback for background drawing. Flags are same as with - // OnDrawItem. - virtual void OnDrawBackground( wxDC& dc, const wxRect& rect, int item, int flags ) const; - - // NULL popup can be used to indicate default interface - virtual void DoSetPopupControl(wxComboPopup* popup); - - // clears all allocated client datas - void ClearClientDatas(); - - wxVListBoxComboPopup* GetVListBoxComboPopup() const - { - return (wxVListBoxComboPopup*) m_popupInterface; - } - - virtual int DoAppend(const wxString& item); - virtual int DoInsert(const wxString& item, unsigned int pos); - virtual void DoSetItemClientData(unsigned int n, void* clientData); - virtual void* DoGetItemClientData(unsigned int n) const; - virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData); - virtual wxClientData* DoGetItemClientObject(unsigned int n) const; - - // temporary storage for the initial choices - //const wxString* m_baseChoices; - //int m_baseChoicesCount; - wxArrayString m_initChs; - -private: - void Init(); - - DECLARE_EVENT_TABLE() - - DECLARE_DYNAMIC_CLASS(wxOwnerDrawnComboBox) -}; - - -#endif // wxUSE_ODCOMBOBOX - -#endif - // _WX_ODCOMBO_H_ diff --git a/desmume/src/windows/wx/include/wx/overlay.h b/desmume/src/windows/wx/include/wx/overlay.h deleted file mode 100644 index b8ae18c19..000000000 --- a/desmume/src/windows/wx/include/wx/overlay.h +++ /dev/null @@ -1,97 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/overlay.h -// Purpose: wxOverlay class -// Author: Stefan Csomor -// Modified by: -// Created: 2006-10-20 -// RCS-ID: $Id: overlay.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_OVERLAY_H_ -#define _WX_OVERLAY_H_ - -#include "wx/defs.h" - -#if defined(wxMAC_USE_CORE_GRAPHICS) && wxMAC_USE_CORE_GRAPHICS - #define wxHAS_NATIVE_OVERLAY 1 -#elif defined(__WXDFB__) - #define wxHAS_NATIVE_OVERLAY 1 -#else - // don't define wxHAS_NATIVE_OVERLAY -#endif - -// ---------------------------------------------------------------------------- -// creates an overlay over an existing window, allowing for manipulations like -// rubberbanding etc. This API is not stable yet, not to be used outside wx -// internal code -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxOverlayImpl; -class WXDLLIMPEXP_FWD_CORE wxWindowDC; - -class WXDLLEXPORT wxOverlay -{ -public: - wxOverlay(); - ~wxOverlay(); - - // clears the overlay without restoring the former state - // to be done eg when the window content has been changed and repainted - void Reset(); - - // returns (port-specific) implementation of the overlay - wxOverlayImpl *GetImpl() { return m_impl; } - -private: - friend class WXDLLIMPEXP_FWD_CORE wxDCOverlay; - - // returns true if it has been setup - bool IsOk(); - - void Init(wxWindowDC* dc, int x , int y , int width , int height); - - void BeginDrawing(wxWindowDC* dc); - - void EndDrawing(wxWindowDC* dc); - - void Clear(wxWindowDC* dc); - - wxOverlayImpl* m_impl; - - bool m_inDrawing; - - - DECLARE_NO_COPY_CLASS(wxOverlay) -}; - - -class WXDLLEXPORT wxDCOverlay -{ -public: - // connects this overlay to the corresponding drawing dc, if the overlay is - // not initialized yet this call will do so - wxDCOverlay(wxOverlay &overlay, wxWindowDC *dc, int x , int y , int width , int height); - - // convenience wrapper that behaves the same using the entire area of the dc - wxDCOverlay(wxOverlay &overlay, wxWindowDC *dc); - - // removes the connection between the overlay and the dc - virtual ~wxDCOverlay(); - - // clears the layer, restoring the state at the last init - void Clear(); - -private: - void Init(wxWindowDC *dc, int x , int y , int width , int height); - - wxOverlay& m_overlay; - - wxWindowDC* m_dc; - - - DECLARE_NO_COPY_CLASS(wxDCOverlay) -}; - -#endif // _WX_OVERLAY_H_ diff --git a/desmume/src/windows/wx/include/wx/ownerdrw.h b/desmume/src/windows/wx/include/wx/ownerdrw.h deleted file mode 100644 index 4d6422229..000000000 --- a/desmume/src/windows/wx/include/wx/ownerdrw.h +++ /dev/null @@ -1,174 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: ownerdrw.h -// Purpose: interface for owner-drawn GUI elements -// Author: Vadim Zeitlin -// Modified by: -// Created: 11.11.97 -// RCS-ID: $Id: ownerdrw.h 35695 2005-09-25 20:43:35Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _OWNERDRW_H -#define _OWNERDRW_H - -#include "wx/defs.h" - -#if wxUSE_OWNER_DRAWN - -#include "wx/bitmap.h" -#include "wx/colour.h" -#include "wx/font.h" - -// ---------------------------------------------------------------------------- -// wxOwnerDrawn - a mix-in base class, derive from it to implement owner-drawn -// behaviour -// -// wxOwnerDrawn supports drawing of an item with non standard font, color and -// also supports 3 bitmaps: either a checked/unchecked bitmap for a checkable -// element or one unchangeable bitmap otherwise. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxOwnerDrawn -{ -public: - // ctor & dtor - wxOwnerDrawn(const wxString& str = wxEmptyString, - bool bCheckable = false, - bool bMenuItem = false); // FIXME kludge for colors - virtual ~wxOwnerDrawn(); - - // fix appearance - void SetFont(const wxFont& font) - { m_font = font; m_bOwnerDrawn = true; } - - wxFont& GetFont() const { return (wxFont &)m_font; } - - void SetTextColour(const wxColour& colText) - { m_colText = colText; m_bOwnerDrawn = true; } - - wxColour& GetTextColour() const { return (wxColour&) m_colText; } - - void SetBackgroundColour(const wxColour& colBack) - { m_colBack = colBack; m_bOwnerDrawn = true; } - - wxColour& GetBackgroundColour() const - { return (wxColour&) m_colBack ; } - - void SetBitmaps(const wxBitmap& bmpChecked, - const wxBitmap& bmpUnchecked = wxNullBitmap) - { m_bmpChecked = bmpChecked; - m_bmpUnchecked = bmpUnchecked; - m_bOwnerDrawn = true; } - - void SetBitmap(const wxBitmap& bmpChecked) - { m_bmpChecked = bmpChecked; - m_bOwnerDrawn = true; } - - void SetDisabledBitmap( const wxBitmap& bmpDisabled ) - { m_bmpDisabled = bmpDisabled; - m_bOwnerDrawn = true; } - - const wxBitmap& GetBitmap(bool bChecked = true) const - { return (bChecked ? m_bmpChecked : m_bmpUnchecked); } - - const wxBitmap& GetDisabledBitmap() const - { return m_bmpDisabled; } - - // the height of the menu checkmark (or bitmap) is determined by the font - // for the current item, but the width should be always the same (for the - // items to be aligned), so by default it's taken to be the same as for - // the last item (and default width for the first one). - // - // NB: default is too small for bitmaps, but ok for checkmarks. - void SetMarginWidth(int nWidth) - { - ms_nLastMarginWidth = m_nMarginWidth = (size_t) nWidth; - if ( ((size_t) nWidth) != ms_nDefaultMarginWidth ) - m_bOwnerDrawn = true; - } - - int GetMarginWidth() const { return (int) m_nMarginWidth; } - static int GetDefaultMarginWidth() { return (int) ms_nDefaultMarginWidth; } - - // accessors - void SetName(const wxString& strName) { m_strName = strName; } - const wxString& GetName() const { return m_strName; } - void SetCheckable(bool checkable) { m_bCheckable = checkable; } - bool IsCheckable() const { return m_bCheckable; } - - // this is for menu items only: accel string is drawn right aligned after the - // menu item if not empty - void SetAccelString(const wxString& strAccel) { m_strAccel = strAccel; } - - // this function might seem strange, but if it returns false it means that - // no non-standard attribute are set, so there is no need for this control - // to be owner-drawn. Moreover, you can force owner-drawn to false if you - // want to change, say, the color for the item but only if it is owner-drawn - // (see wxMenuItem::wxMenuItem for example) - bool IsOwnerDrawn() const { return m_bOwnerDrawn; } - - // switch on/off owner-drawing the item - void SetOwnerDrawn(bool ownerDrawn = true) { m_bOwnerDrawn = ownerDrawn; } - void ResetOwnerDrawn() { m_bOwnerDrawn = false; } - -public: - // constants used in OnDrawItem - // (they have the same values as corresponding Win32 constants) - enum wxODAction - { - wxODDrawAll = 0x0001, // redraw entire control - wxODSelectChanged = 0x0002, // selection changed (see Status.Select) - wxODFocusChanged = 0x0004 // keyboard focus changed (see Status.Focus) - }; - - enum wxODStatus - { - wxODSelected = 0x0001, // control is currently selected - wxODGrayed = 0x0002, // item is to be grayed - wxODDisabled = 0x0004, // item is to be drawn as disabled - wxODChecked = 0x0008, // item is to be checked - wxODHasFocus = 0x0010, // item has the keyboard focus - wxODDefault = 0x0020, // item is the default item - wxODHidePrefix= 0x0100 // hide keyboard cues (w2k and xp only) - }; - - // virtual functions to implement drawing (return true if processed) - virtual bool OnMeasureItem(size_t *pwidth, size_t *pheight); - virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat); - -protected: - // return true if this is a menu item - bool IsMenuItem() const; - - // get the font to use, whether m_font is set or not - wxFont GetFontToUse() const; - - - wxString m_strName, // label for a manu item - m_strAccel; // the accel string ("Ctrl-F17") if any - -private: - static size_t ms_nDefaultMarginWidth; // menu check mark width - static size_t ms_nLastMarginWidth; // handy for aligning all items - - bool m_bCheckable, // used only for menu or check listbox items - m_bOwnerDrawn, // true if something is non standard - m_isMenuItem; // true if this is a menu item - - wxFont m_font; // font to use for drawing - wxColour m_colText, // color ----"---"---"---- - m_colBack; // background color - wxBitmap m_bmpChecked, // bitmap to put near the item - m_bmpUnchecked, // (checked is used also for 'uncheckable' items) - m_bmpDisabled; - - size_t m_nHeight, // font height - m_nMinHeight, // minimum height, as determined by user's system settings - m_nMarginWidth; // space occupied by bitmap to the left of the item -}; - -#endif // wxUSE_OWNER_DRAWN - -#endif - // _OWNERDRW_H diff --git a/desmume/src/windows/wx/include/wx/palette.h b/desmume/src/windows/wx/include/wx/palette.h deleted file mode 100644 index 9a09456ff..000000000 --- a/desmume/src/windows/wx/include/wx/palette.h +++ /dev/null @@ -1,59 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/palette.h -// Purpose: Common header and base class for wxPalette -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: palette.h 41751 2006-10-08 21:56:55Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PALETTE_H_BASE_ -#define _WX_PALETTE_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_PALETTE - -#include "wx/object.h" -#include "wx/gdiobj.h" - -// wxPaletteBase -class WXDLLEXPORT wxPaletteBase: public wxGDIObject -{ -public: - virtual ~wxPaletteBase() { } - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const = 0; - virtual int GetColoursCount() const { wxFAIL_MSG( _T("not implemented") ); return 0; } -}; - -#if defined(__WXPALMOS__) - #include "wx/palmos/palette.h" -#elif defined(__WXMSW__) - #include "wx/msw/palette.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/palette.h" -#elif defined(__WXGTK__) || defined(__WXCOCOA__) - #include "wx/generic/paletteg.h" -#elif defined(__WXX11__) - #include "wx/x11/palette.h" -#elif defined(__WXMGL__) - #include "wx/mgl/palette.h" -#elif defined(__WXMAC__) - #include "wx/mac/palette.h" -#elif defined(__WXPM__) - #include "wx/os2/palette.h" -#endif - -#if WXWIN_COMPATIBILITY_2_4 - #define wxColorMap wxPalette - #define wxColourMap wxPalette -#endif - -#endif // wxUSE_PALETTE - -#endif - // _WX_PALETTE_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/panel.h b/desmume/src/windows/wx/include/wx/panel.h deleted file mode 100644 index 366177d7c..000000000 --- a/desmume/src/windows/wx/include/wx/panel.h +++ /dev/null @@ -1,18 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/panel.h -// Purpose: Base header for wxPanel -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: panel.h 33948 2005-05-04 18:57:50Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PANEL_H_BASE_ -#define _WX_PANEL_H_BASE_ - -#include "wx/generic/panelg.h" - -#endif - // _WX_PANELH_BASE_ diff --git a/desmume/src/windows/wx/include/wx/paper.h b/desmume/src/windows/wx/include/wx/paper.h deleted file mode 100644 index eb0893dfc..000000000 --- a/desmume/src/windows/wx/include/wx/paper.h +++ /dev/null @@ -1,122 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: paper.h -// Purpose: Paper database types and classes -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: paper.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PAPERH__ -#define _WX_PAPERH__ - -#include "wx/defs.h" -#include "wx/event.h" -#include "wx/cmndata.h" -#include "wx/intl.h" -#include "wx/hashmap.h" - -/* - * Paper type: see defs.h for wxPaperSize enum. - * A wxPrintPaperType can have an id and a name, or just a name and wxPAPER_NONE, - * so you can add further paper types without needing new ids. - */ - -#ifdef __WXMSW__ -#define WXADDPAPER(paperId, platformId, name, w, h) AddPaperType(paperId, platformId, name, w, h) -#else -#define WXADDPAPER(paperId, platformId, name, w, h) AddPaperType(paperId, 0, name, w, h) -#endif - -class WXDLLEXPORT wxPrintPaperType: public wxObject -{ -public: - wxPrintPaperType(); - - // platformId is a platform-specific id, such as in Windows, DMPAPER_... - wxPrintPaperType(wxPaperSize paperId, int platformId, const wxString& name, int w, int h); - - inline wxString GetName() const { return wxGetTranslation(m_paperName); } - inline wxPaperSize GetId() const { return m_paperId; } - inline int GetPlatformId() const { return m_platformId; } - - // Get width and height in tenths of a millimetre - inline int GetWidth() const { return m_width; } - inline int GetHeight() const { return m_height; } - - // Get size in tenths of a millimetre - inline wxSize GetSize() const { return wxSize(m_width, m_height); } - - // Get size in a millimetres - inline wxSize GetSizeMM() const { return wxSize(m_width/10, m_height/10); } - - // Get width and height in device units (1/72th of an inch) - wxSize GetSizeDeviceUnits() const ; - -public: - wxPaperSize m_paperId; - int m_platformId; - int m_width; // In tenths of a millimetre - int m_height; // In tenths of a millimetre - wxString m_paperName; - -private: - DECLARE_DYNAMIC_CLASS(wxPrintPaperType) -}; - -WX_DECLARE_STRING_HASH_MAP(wxPrintPaperType*, wxStringToPrintPaperTypeHashMap); - -class WXDLLIMPEXP_FWD_CORE wxPrintPaperTypeList; - -class WXDLLEXPORT wxPrintPaperDatabase -{ -public: - wxPrintPaperDatabase(); - ~wxPrintPaperDatabase(); - - void CreateDatabase(); - void ClearDatabase(); - - void AddPaperType(wxPaperSize paperId, const wxString& name, int w, int h); - void AddPaperType(wxPaperSize paperId, int platformId, const wxString& name, int w, int h); - - // Find by name - wxPrintPaperType *FindPaperType(const wxString& name); - - // Find by size id - wxPrintPaperType *FindPaperType(wxPaperSize id); - - // Find by platform id - wxPrintPaperType *FindPaperTypeByPlatformId(int id); - - // Find by size - wxPrintPaperType *FindPaperType(const wxSize& size); - - // Convert name to size id - wxPaperSize ConvertNameToId(const wxString& name); - - // Convert size id to name - wxString ConvertIdToName(wxPaperSize paperId); - - // Get the paper size - wxSize GetSize(wxPaperSize paperId); - - // Get the paper size - wxPaperSize GetSize(const wxSize& size); - - // - wxPrintPaperType* Item(size_t index) const; - size_t GetCount() const; -private: - wxStringToPrintPaperTypeHashMap* m_map; - wxPrintPaperTypeList* m_list; - // DECLARE_DYNAMIC_CLASS(wxPrintPaperDatabase) -}; - -extern WXDLLEXPORT_DATA(wxPrintPaperDatabase*) wxThePrintPaperDatabase; - - -#endif - // _WX_PAPERH__ diff --git a/desmume/src/windows/wx/include/wx/pen.h b/desmume/src/windows/wx/include/wx/pen.h deleted file mode 100644 index 080d6c5c5..000000000 --- a/desmume/src/windows/wx/include/wx/pen.h +++ /dev/null @@ -1,40 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/pen.h -// Purpose: Base header for wxPen -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: pen.h 40865 2006-08-27 09:42:42Z VS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PEN_H_BASE_ -#define _WX_PEN_H_BASE_ - -#include "wx/defs.h" - -#if defined(__WXPALMOS__) -#include "wx/palmos/pen.h" -#elif defined(__WXMSW__) -#include "wx/msw/pen.h" -#elif defined(__WXMOTIF__) || defined(__WXX11__) -#include "wx/x11/pen.h" -#elif defined(__WXGTK20__) -#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__) -#include "wx/mac/pen.h" -#elif defined(__WXCOCOA__) -#include "wx/cocoa/pen.h" -#elif defined(__WXPM__) -#include "wx/os2/pen.h" -#endif - -#endif - // _WX_PEN_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/pickerbase.h b/desmume/src/windows/wx/include/wx/pickerbase.h deleted file mode 100644 index d0f0614c6..000000000 --- a/desmume/src/windows/wx/include/wx/pickerbase.h +++ /dev/null @@ -1,189 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/pickerbase.h -// Purpose: wxPickerBase definition -// Author: Francesco Montorsi (based on Vadim Zeitlin's code) -// Modified by: -// Created: 14/4/2006 -// Copyright: (c) Vadim Zeitlin, Francesco Montorsi -// RCS-ID: $Id: pickerbase.h 49804 2007-11-10 01:09:42Z VZ $ -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PICKERBASE_H_BASE_ -#define _WX_PICKERBASE_H_BASE_ - -#include "wx/control.h" -#include "wx/sizer.h" -#include "wx/containr.h" - -class WXDLLIMPEXP_FWD_CORE wxTextCtrl; -class WXDLLIMPEXP_FWD_CORE wxToolTip; - -extern WXDLLEXPORT_DATA(const wxChar) wxButtonNameStr[]; - -// ---------------------------------------------------------------------------- -// wxPickerBase is the base class for the picker controls which support -// a wxPB_USE_TEXTCTRL style; i.e. for those pickers which can use an auxiliary -// text control next to the 'real' picker. -// -// The wxTextPickerHelper class manages enabled/disabled state of the text control, -// its sizing and positioning. -// ---------------------------------------------------------------------------- - -#define wxPB_USE_TEXTCTRL 0x0002 - -class WXDLLIMPEXP_CORE wxPickerBase : public wxControl -{ -public: - // ctor: text is the associated text control - wxPickerBase() : m_text(NULL), m_picker(NULL), m_sizer(NULL) - { m_container.SetContainerWindow(this); } - virtual ~wxPickerBase() {} - - - // if present, intercepts wxPB_USE_TEXTCTRL style and creates the text control - // The 3rd argument is the initial wxString to display in the text control - bool CreateBase(wxWindow *parent, - wxWindowID id, - const wxString& text = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr); - -public: // public API - - // margin between the text control and the picker - void SetInternalMargin(int newmargin) - { GetTextCtrlItem()->SetBorder(newmargin); m_sizer->Layout(); } - int GetInternalMargin() const - { return GetTextCtrlItem()->GetBorder(); } - - // proportion of the text control - void SetTextCtrlProportion(int prop) - { GetTextCtrlItem()->SetProportion(prop); m_sizer->Layout(); } - int GetTextCtrlProportion() const - { return GetTextCtrlItem()->GetProportion(); } - - // proportion of the picker control - void SetPickerCtrlProportion(int prop) - { GetPickerCtrlItem()->SetProportion(prop); m_sizer->Layout(); } - int GetPickerCtrlProportion() const - { return GetPickerCtrlItem()->GetProportion(); } - - bool IsTextCtrlGrowable() const - { return (GetTextCtrlItem()->GetFlag() & wxGROW) != 0; } - void SetTextCtrlGrowable(bool grow = true) - { - int f = GetDefaultTextCtrlFlag(); - if ( grow ) - f |= wxGROW; - else - f &= ~wxGROW; - - GetTextCtrlItem()->SetFlag(f); - } - - bool IsPickerCtrlGrowable() const - { return (GetPickerCtrlItem()->GetFlag() & wxGROW) != 0; } - void SetPickerCtrlGrowable(bool grow = true) - { - int f = GetDefaultPickerCtrlFlag(); - if ( grow ) - f |= wxGROW; - else - f &= ~wxGROW; - - GetPickerCtrlItem()->SetFlag(f); - } - - bool HasTextCtrl() const - { return m_text != NULL; } - wxTextCtrl *GetTextCtrl() - { return m_text; } - wxControl *GetPickerCtrl() - { return m_picker; } - - // methods that derived class must/may override - virtual void UpdatePickerFromTextCtrl() = 0; - virtual void UpdateTextCtrlFromPicker() = 0; - -protected: - // overridden base class methods -#if wxUSE_TOOLTIPS - virtual void DoSetToolTip(wxToolTip *tip); -#endif // wxUSE_TOOLTIPS - - - // event handlers - void OnTextCtrlDelete(wxWindowDestroyEvent &); - 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 - { return (style & wxWINDOW_STYLE_MASK); } - - // returns the set of styles for the m_picker - virtual long GetPickerStyle(long style) const - { return (style & wxWINDOW_STYLE_MASK); } - - - wxSizerItem *GetPickerCtrlItem() const - { - if (this->HasTextCtrl()) - return m_sizer->GetItem((size_t)1); - return m_sizer->GetItem((size_t)0); - } - - wxSizerItem *GetTextCtrlItem() const - { - wxASSERT(this->HasTextCtrl()); - return m_sizer->GetItem((size_t)0); - } - - int GetDefaultPickerCtrlFlag() const - { - // on macintosh, without additional borders - // there's not enough space for focus rect - return wxALIGN_CENTER_VERTICAL|wxGROW -#ifdef __WXMAC__ - | wxTOP | wxRIGHT | wxBOTTOM -#endif - ; - } - - int GetDefaultTextCtrlFlag() const - { - // on macintosh, without wxALL there's not enough space for focus rect - return wxALIGN_CENTER_VERTICAL -#ifdef __WXMAC__ - | wxALL -#else - | wxRIGHT -#endif - ; - } - - void PostCreation(); - -protected: - wxTextCtrl *m_text; // can be NULL - wxControl *m_picker; - wxBoxSizer *m_sizer; - -private: - DECLARE_ABSTRACT_CLASS(wxPickerBase) - DECLARE_EVENT_TABLE() - - // This class must be something just like a panel... - WX_DECLARE_CONTROL_CONTAINER(); -}; - - -#endif - // _WX_PICKERBASE_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/platform.h b/desmume/src/windows/wx/include/wx/platform.h deleted file mode 100644 index 4ac085d41..000000000 --- a/desmume/src/windows/wx/include/wx/platform.h +++ /dev/null @@ -1,662 +0,0 @@ -/** -* Name: wx/platform.h -* Purpose: define the OS and compiler identification macros -* Author: Vadim Zeitlin -* Modified by: -* Created: 29.10.01 (extracted from wx/defs.h) -* RCS-ID: $Id: platform.h 53877 2008-05-31 12:43:44Z SN $ -* Copyright: (c) 1997-2001 Vadim Zeitlin -* Licence: wxWindows licence -*/ - -/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ - -#ifndef _WX_PLATFORM_H_ -#define _WX_PLATFORM_H_ - - -/* - Codewarrior doesn't define any Windows symbols until some headers - are included -*/ -#ifdef __MWERKS__ -# include <stddef.h> -#endif - -/* - WXMAC variants - __WXMAC_CLASSIC__ means ppc non-carbon builds, __WXMAC_CARBON__ means - carbon API available (mach or cfm builds) , __WXMAC_OSX__ means mach-o - builds, running under 10.2 + only -*/ -#ifdef __WXMAC__ -# if defined(__MACH__) -# define __WXMAC_OSX__ -# define __WXMAC_CARBON__ -# include <AvailabilityMacros.h> -# 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 -# ifdef __WXMAC_XCODE__ -# include <unistd.h> -# include "wx/mac/carbon/config_xcode.h" -# endif -# else -# if TARGET_CARBON -# define __WXMAC_CARBON__ -# else -# define __WXMAC_CLASSIC__ -# endif -# endif -#endif - -/* - __WXOSX__ is a common define to wxMac (Carbon) and wxCocoa ports under OS X. - */ -#if defined(__WXMAC_OSX__) || defined(__WXCOCOA__) -# define __WXOSX__ -#endif - -/* - first define Windows symbols if they're not defined on the command line: we - can autodetect everything we need if _WIN32 is defined - */ -#if defined(__CYGWIN__) && defined(__WINDOWS__) -# ifndef __WXMSW__ -# define __WXMSW__ -# endif - -# ifndef _WIN32 -# define _WIN32 -# endif - -# ifndef WIN32 -# define WIN32 -# endif -#endif - -#if defined(__PALMOS__) -# if __PALMOS__ == 0x06000000 -# define __WXPALMOS6__ -# endif -# if __PALMOS__ == 0x05000000 -# define __WXPALMOS5__ -# endif -# ifndef __WXPALMOS__ -# define __WXPALMOS__ -# 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 - /* - a lot of code (mistakenly) uses #ifdef _WIN32 to either test for - Windows or to test for !__WIN16__, so we must define _WIN32 for - Win64 as well to ensure that the existing code continues to work. - */ -# define _WIN32 -# endif /* !_WIN32 */ - -# ifndef __WIN64__ -# define __WIN64__ -# endif /* !__WIN64__ */ -#endif /* _WIN64 */ - -#if (defined(_WIN32) || defined(WIN32) || defined(__NT__) || defined(__WXWINCE__)) \ - && !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__) -# ifndef __WXMSW__ -# define __WXMSW__ -# endif - -# ifndef __WIN32__ -# define __WIN32__ -# endif -#endif /* Win32 */ - -#if defined(__WXMSW__) || defined(__WIN32__) -# if !defined(__WINDOWS__) -# define __WINDOWS__ -# endif -#endif - -/* detect MS SmartPhone */ -#if defined( WIN32_PLATFORM_WFSP ) -# ifndef __SMARTPHONE__ -# define __SMARTPHONE__ -# endif -# ifndef __WXWINCE__ -# define __WXWINCE__ -# endif -#endif - -/* detect PocketPC */ -#if defined( WIN32_PLATFORM_PSPC ) -# ifndef __POCKETPC__ -# define __POCKETPC__ -# endif -# ifndef __WXWINCE__ -# define __WXWINCE__ -# endif -#endif - -/* detect Standard WinCE SDK */ -#if defined( WCE_PLATFORM_STANDARDSDK ) -# ifndef __WINCE_STANDARDSDK__ -# define __WINCE_STANDARDSDK__ -# endif -# ifndef __WXWINCE__ -# define __WXWINCE__ -# endif -#endif - -#if defined(_WIN32_WCE) && !defined(WIN32_PLATFORM_WFSP) && !defined(WIN32_PLATFORM_PSPC) -# if (_WIN32_WCE >= 400) -# ifndef __WINCE_NET__ -# define __WINCE_NET__ -# endif -# elif (_WIN32_WCE >= 200) -# ifndef __HANDHELDPC__ -# define __HANDHELDPC__ -# endif -# endif -# ifndef __WXWINCE__ -# define __WXWINCE__ -# endif -#endif - -#if defined(__POCKETPC__) || defined(__SMARTPHONE__) || defined(__WXGPE__) -# define __WXHANDHELD__ -#endif - -/* - Include wx/setup.h for the Unix platform defines generated by configure and - the library compilation options - - Note that it must be included before defining hardware symbols below as they - could be already defined by configure - */ -#include "wx/setup.h" - -/* - Hardware platform detection. - - VC++ defines _M_xxx symbols. - */ -#if defined(_M_IX86) || defined(i386) || defined(__i386) || defined(__i386__) - #ifndef __INTEL__ - #define __INTEL__ - #endif -#endif /* x86 */ - -#if defined(_M_IA64) - #ifndef __IA64__ - #define __IA64__ - #endif -#endif /* ia64 */ - -#if defined(_M_MPPC) || defined(__PPC__) || defined(__ppc__) - #ifndef __POWERPC__ - #define __POWERPC__ - #endif -#endif /* alpha */ - -#if defined(_M_ALPHA) || defined(__AXP__) - #ifndef __ALPHA__ - #define __ALPHA__ - #endif -#endif /* alpha */ - - -/* - adjust the Unicode setting: wxUSE_UNICODE should be defined as 0 or 1 - and is used by wxWidgets, _UNICODE and/or UNICODE may be defined or used by - the system headers so bring these settings in sync - */ - -/* set wxUSE_UNICODE to 1 if UNICODE or _UNICODE is defined */ -#if defined(_UNICODE) || defined(UNICODE) -# undef wxUSE_UNICODE -# define wxUSE_UNICODE 1 -#else /* !UNICODE */ -# ifndef wxUSE_UNICODE -# define wxUSE_UNICODE 0 -# endif -#endif /* UNICODE/!UNICODE */ - -/* and vice versa: define UNICODE and _UNICODE if wxUSE_UNICODE is 1 */ -#if wxUSE_UNICODE -# ifndef _UNICODE -# define _UNICODE -# endif -# ifndef UNICODE -# define UNICODE -# endif -#endif /* wxUSE_UNICODE */ - -#if defined( __MWERKS__ ) && !defined(__INTEL__) -/* otherwise MSL headers bring in WIN32 dependant APIs */ -#undef UNICODE -#endif - -/* - Notice that Turbo Explorer (BCC 5.82) is available for free at - http://www.turboexplorer.com/downloads, you can get it if you have trouble - compiling wxWidgets with your current Borland compiler. -*/ -#if defined(__BORLANDC__) && (__BORLANDC__ < 0x540) -# error "wxWidgets requires a newer version of Borland, we recommend upgrading to 5.82 (Turbo Explorer). You may at your own risk remove this line and try building but be prepared to get build errors." -#endif /* __BORLANDC__ */ - -#if defined(__BORLANDC__) && (__BORLANDC__ < 0x582) && (__BORLANDC__ > 0x559) -# ifndef _USE_OLD_RW_STL -# error "wxWidgets is incompatible with default Borland C++ 5.6 STL library, please add -D_USE_OLD_RW_STL to your bcc32.cfg to use RogueWave STL implementation." -# endif -#endif /* __BORLANDC__ */ - -/* - This macro can be used to test the Open Watcom version. -*/ -#ifndef __WATCOMC__ -# define wxWATCOM_VERSION(major,minor) 0 -# define wxCHECK_WATCOM_VERSION(major,minor) 0 -# define wxONLY_WATCOM_EARLIER_THAN(major,minor) 0 -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# error "Only Open Watcom is supported in this release" -#else -# define wxWATCOM_VERSION(major,minor) ( major * 100 + minor * 10 + 1100 ) -# define wxCHECK_WATCOM_VERSION(major,minor) ( __WATCOMC__ >= wxWATCOM_VERSION(major,minor) ) -# define wxONLY_WATCOM_EARLIER_THAN(major,minor) ( __WATCOMC__ < wxWATCOM_VERSION(major,minor) ) -#endif - -/* - check the consistency of the settings in setup.h: note that this must be - done after setting wxUSE_UNICODE correctly as it is used in wx/chkconf.h - */ -#include "wx/chkconf.h" - - -/* - some compilers don't support iostream.h any longer, while some of theme - are not updated with <iostream> yet, so override the users setting here - in such case. - */ -#if defined(_MSC_VER) && (_MSC_VER >= 1310) -# undef wxUSE_IOSTREAMH -# define wxUSE_IOSTREAMH 0 -#elif defined(__DMC__) || defined(__WATCOMC__) -# undef wxUSE_IOSTREAMH -# define wxUSE_IOSTREAMH 1 -#elif defined(__MINGW32__) -# undef wxUSE_IOSTREAMH -# define wxUSE_IOSTREAMH 0 -#endif /* compilers with/without iostream.h */ - -/* - old C++ headers (like <iostream.h>) declare classes in the global namespace - while the new, standard ones (like <iostream>) do it in std:: namespace, - unless it's an old gcc version. - - using this macro allows constuctions like "wxSTD iostream" to work in - either case - */ -#if !wxUSE_IOSTREAMH && (!defined(__GNUC__) || ( __GNUC__ > 2 ) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) -# define wxSTD std:: -#else -# define wxSTD -#endif - -/* - OS: first of all, test for MS-DOS platform. We must do this before testing - for Unix, because DJGPP compiler defines __unix__ under MS-DOS - */ -#if defined(__GO32__) || defined(__DJGPP__) || defined(__DOS__) -# ifndef __DOS__ -# define __DOS__ -# endif - /* size_t is the same as unsigned int for Watcom 11 compiler, */ - /* so define it if it hadn't been done by configure yet */ -# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG) -# ifdef __WATCOMC__ -# define wxSIZE_T_IS_UINT -# endif -# ifdef __DJGPP__ -# define wxSIZE_T_IS_ULONG -# endif -# endif - -/* - OS: then test for generic Unix defines, then for particular flavours and - finally for Unix-like systems - Mac OS X matches this case (__MACH__), prior Mac OS do not. - */ -#elif defined(__UNIX__) || defined(__unix) || defined(__unix__) || \ - defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) || \ - defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) || \ - defined(__EMX__) || defined(__VMS) || defined(__BEOS__) || defined(__MACH__) - -# define __UNIX_LIKE__ - - /* Helps SGI compilation, apparently */ -# ifdef __SGI__ -# ifdef __GNUG__ -# define __need_wchar_t -# else /* !gcc */ - /* - Note I use the term __SGI_CC__ for both cc and CC, its not a good - idea to mix gcc and cc/CC, the name mangling is different - */ -# define __SGI_CC__ -# endif /* gcc/!gcc */ - - /* system headers use this symbol and not __cplusplus in some places */ -# ifndef _LANGUAGE_C_PLUS_PLUS -# define _LANGUAGE_C_PLUS_PLUS -# endif -# endif /* SGI */ - -# if defined(sun) || defined(__SUN__) -# ifndef __GNUG__ -# ifndef __SUNCC__ -# define __SUNCC__ -# endif /* Sun CC */ -# endif -# endif /* Sun */ - -# ifdef __EMX__ -# define OS2EMX_PLAIN_CHAR -# endif - - /* define __HPUX__ for HP-UX where standard macro is __hpux */ -# if defined(__hpux) && !defined(__HPUX__) -# define __HPUX__ -# endif /* HP-UX */ - -# if defined(__CYGWIN__) || defined(__WINE__) -# if !defined(wxSIZE_T_IS_UINT) -# define wxSIZE_T_IS_UINT -# endif -# endif - - /* All of these should already be defined by including configure- - generated setup.h but we wish to support Xcode compilation without - requiring the user to define these himself. - */ -# if defined(__APPLE__) && defined(__MACH__) -# ifndef __UNIX__ -# define __UNIX__ 1 -# endif -# ifndef __BSD__ -# define __BSD__ 1 -# endif - /* __DARWIN__ is our own define to mean OS X or pure Darwin */ -# ifndef __DARWIN__ -# define __DARWIN__ 1 -# endif - /* NOTE: TARGET_CARBON is actually a 0/1 and must be 1 for OS X */ -# ifndef TARGET_CARBON -# define TARGET_CARBON 1 -# endif - /* OS X uses unsigned long size_t for both ILP32 and LP64 modes. */ -# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG) -# define wxSIZE_T_IS_ULONG -# endif -# endif - -/* - OS: Classic Mac OS - */ -#elif defined(applec) || \ - defined(THINK_C) || \ - (defined(__MWERKS__) && !defined(__INTEL__)) - /* MacOS */ -# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG) -# define wxSIZE_T_IS_ULONG -# endif - -/* - OS: OS/2 - */ -#elif defined(__OS2__) - - /* wxOS2 vs. non wxOS2 ports on OS2 platform */ -# if !defined(__WXMOTIF__) && !defined(__WXGTK__) && !defined(__WXX11__) -# ifndef __WXPM__ -# define __WXPM__ -# endif -# endif - -# if defined(__IBMCPP__) -# define __VISAGEAVER__ __IBMCPP__ -# endif - - /* Place other OS/2 compiler environment defines here */ -# if defined(__VISAGECPP__) - /* VisualAge is the only thing that understands _Optlink */ -# define LINKAGEMODE _Optlink -# 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 - */ -#else /* Windows */ -# ifndef __WINDOWS__ -# define __WINDOWS__ -# endif /* Windows */ - - /* to be changed for Win64! */ -# ifndef __WIN32__ -# error "__WIN32__ should be defined for Win32 and Win64, Win16 is not supported" -# endif - - /* - define another standard symbol for Microsoft Visual C++: the standard - one (_MSC_VER) is also defined by Metrowerks compiler - */ -# if defined(_MSC_VER) && !defined(__MWERKS__) -# define __VISUALC__ _MSC_VER -# elif defined(__BCPLUSPLUS__) && !defined(__BORLANDC__) -# define __BORLANDC__ -# elif defined(__WATCOMC__) -# elif defined(__SC__) -# define __SYMANTECC__ -# endif /* compiler */ - - /* size_t is the same as unsigned int for all Windows compilers we know, */ - /* so define it if it hadn't been done by configure yet */ -# if !defined(wxSIZE_T_IS_UINT) && !defined(wxSIZE_T_IS_ULONG) && !defined(__WIN64__) -# define wxSIZE_T_IS_UINT -# endif -#endif /* OS */ - -/* - if we're on a Unix system but didn't use configure (so that setup.h didn't - define __UNIX__), do define __UNIX__ now - */ -#if !defined(__UNIX__) && defined(__UNIX_LIKE__) -# define __UNIX__ -#endif /* Unix */ - -#if defined(__WXMOTIF__) || defined(__WXX11__) -# define __X__ -#endif - -#ifdef __SC__ -# ifdef __DMC__ -# define __DIGITALMARS__ -# else -# define __SYMANTEC__ -# endif -#endif - -#ifdef __INTEL_COMPILER -# define __INTELC__ -#endif - -/* - We get "Large Files (ILP32) not supported in strict ANSI mode." #error - from HP-UX standard headers when compiling with g++ without this: - */ -#if defined(__HPUX__) && !defined(__STDC_EXT__) -# define __STDC_EXT__ 1 -#endif - -/* Force linking against required libraries under Windows: */ -#ifdef __WXWINCE__ -# include "wx/msw/wince/libraries.h" -#elif defined __WINDOWS__ -# include "wx/msw/libraries.h" -#endif - -/* - This macro can be used to test the gcc version and can be used like this: - -# if wxCHECK_GCC_VERSION(3, 1) - ... we have gcc 3.1 or later ... -# else - ... no gcc at all or gcc < 3.1 ... -# endif -*/ -#if defined(__GNUC__) && defined(__GNUC_MINOR__) - #define wxCHECK_GCC_VERSION( major, minor ) \ - ( ( __GNUC__ > (major) ) \ - || ( __GNUC__ == (major) && __GNUC_MINOR__ >= (minor) ) ) -#else - #define wxCHECK_GCC_VERSION( major, minor ) 0 -#endif - -#if defined(__BORLANDC__) || (defined(__GNUC__) && __GNUC__ < 3) -#define wxNEEDS_CHARPP -#endif - -/* - This macro can be used to check that the version of mingw32 compiler is - at least maj.min - */ -#if ( defined( __GNUWIN32__ ) || defined( __MINGW32__ ) || \ - ( defined( __CYGWIN__ ) && defined( __WINDOWS__ ) ) || \ - wxCHECK_WATCOM_VERSION(1,0) ) && \ - !defined(__DOS__) && \ - !defined(__WXPM__) && \ - !defined(__WXMOTIF__) && \ - !defined(__WXGTK__) && \ - !defined(__WXX11__) && \ - !defined(__WXPALMOS__) -# include "wx/msw/gccpriv.h" -#else -# undef wxCHECK_W32API_VERSION -# define wxCHECK_W32API_VERSION(maj, min) (0) -#endif - -#if defined (__WXMSW__) -# if !defined(__WATCOMC__) -# define wxHAVE_RAW_BITMAP -# endif -#endif -#if defined(__WXGTK20__) || defined(__WXMAC__) -# define wxHAVE_RAW_BITMAP -#endif - -/* - Handle Darwin gcc universal compilation. Don't do this in an Apple- - specific case since no sane compiler should be defining either - __BIG_ENDIAN__ or __LITTLE_ENDIAN__ unless it really is generating - code that will be hosted on a machine with the appropriate endianness. - If a compiler defines neither, assume the user or configure set - WORDS_BIGENDIAN appropriately. - */ -#if defined(__BIG_ENDIAN__) -# undef WORDS_BIGENDIAN -# define WORDS_BIGENDIAN 1 -#elif defined(__LITTLE_ENDIAN__) -# undef WORDS_BIGENDIAN -#elif defined(__WXMAC__) && !defined(WORDS_BIGENDIAN) -/* According to Stefan even ancient Mac compilers defined __BIG_ENDIAN__ */ -# warning "Compiling wxMac with probably wrong endianness" -#endif - -#ifdef __VMS -#define XtDisplay XTDISPLAY -#ifdef __WXMOTIF__ -#define XtParent XTPARENT -#define XtScreen XTSCREEN -#define XtWindow XTWINDOW -#endif -#endif - -/* Choose which method we will use for updating menus - * - in OnIdle, or when we receive a wxEVT_MENU_OPEN event. - * Presently, only Windows and GTK+ support wxEVT_MENU_OPEN. - */ -#ifndef wxUSE_IDLEMENUUPDATES -# if (defined(__WXMSW__) || defined(__WXGTK__)) && !defined(__WXUNIVERSAL__) -# define wxUSE_IDLEMENUUPDATES 0 -# else -# define wxUSE_IDLEMENUUPDATES 1 -# endif -#endif - -/* - * Define symbols that are not yet in - * configure or possibly some setup.h files. - * They will need to be added. - */ - -#ifndef wxUSE_FILECONFIG -# if wxUSE_CONFIG -# define wxUSE_FILECONFIG 1 -# else -# define wxUSE_FILECONFIG 0 -# endif -#endif - -#ifndef wxUSE_HOTKEY -# define wxUSE_HOTKEY 0 -#endif - -#if !defined(wxUSE_WXDIB) && defined(__WXMSW__) -# define wxUSE_WXDIB 1 -#endif - -/* - We need AvailabilityMacros.h for ifdefing out things that don't exist on - OSX 10.2 and lower - FIXME: We need a better way to detect for 10.3 then including a system header -*/ -#ifdef __DARWIN__ - #include <AvailabilityMacros.h> -#endif - -#endif /* _WX_PLATFORM_H_ */ diff --git a/desmume/src/windows/wx/include/wx/platinfo.h b/desmume/src/windows/wx/include/wx/platinfo.h deleted file mode 100644 index 7a77acb3e..000000000 --- a/desmume/src/windows/wx/include/wx/platinfo.h +++ /dev/null @@ -1,313 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/platinfo.h -// Purpose: declaration of the wxPlatformInfo class -// Author: Francesco Montorsi -// Modified by: -// Created: 07.07.2006 (based on wxToolkitInfo) -// RCS-ID: $Id: platinfo.h 41807 2006-10-09 15:58:56Z VZ $ -// Copyright: (c) 2006 Francesco Montorsi -// License: wxWindows license -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PLATINFO_H_ -#define _WX_PLATINFO_H_ - -#include "wx/string.h" - -// ---------------------------------------------------------------------------- -// wxPlatformInfo -// ---------------------------------------------------------------------------- - -// VERY IMPORTANT: when changing these enum values, also change the relative -// string tables in src/common/platinfo.cpp - - -// families & sub-families of operating systems -enum wxOperatingSystemId -{ - wxOS_UNKNOWN = 0, // returned on error - - wxOS_MAC_OS = 1 << 0, // Apple Mac OS 8/9/X with Mac paths - wxOS_MAC_OSX_DARWIN = 1 << 1, // Apple Mac OS X with Unix paths - wxOS_MAC = wxOS_MAC_OS|wxOS_MAC_OSX_DARWIN, - - wxOS_WINDOWS_9X = 1 << 2, // Windows 9x family (95/98/ME) - wxOS_WINDOWS_NT = 1 << 3, // Windows NT family (NT/2000/XP) - wxOS_WINDOWS_MICRO = 1 << 4, // MicroWindows - wxOS_WINDOWS_CE = 1 << 5, // Windows CE (Window Mobile) - wxOS_WINDOWS = wxOS_WINDOWS_9X | - wxOS_WINDOWS_NT | - wxOS_WINDOWS_MICRO | - wxOS_WINDOWS_CE, - - wxOS_UNIX_LINUX = 1 << 6, // Linux - wxOS_UNIX_FREEBSD = 1 << 7, // FreeBSD - wxOS_UNIX_OPENBSD = 1 << 8, // OpenBSD - wxOS_UNIX_NETBSD = 1 << 9, // NetBSD - wxOS_UNIX_SOLARIS = 1 << 10, // SunOS - wxOS_UNIX_AIX = 1 << 11, // AIX - wxOS_UNIX_HPUX = 1 << 12, // HP/UX - wxOS_UNIX = wxOS_UNIX_LINUX | - wxOS_UNIX_FREEBSD | - wxOS_UNIX_OPENBSD | - wxOS_UNIX_NETBSD | - wxOS_UNIX_SOLARIS | - wxOS_UNIX_AIX | - wxOS_UNIX_HPUX, - - // 1<<13 and 1<<14 available for other Unix flavours - - wxOS_DOS = 1 << 15, // Microsoft DOS - wxOS_OS2 = 1 << 16 // OS/2 -}; - -// list of wxWidgets ports - some of them can be used with more than -// a single toolkit. -enum wxPortId -{ - wxPORT_UNKNOWN = 0, // returned on error - - wxPORT_BASE = 1 << 0, // wxBase, no native toolkit used - - 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_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, // wxMac, using Carbon or Classic Mac 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 -}; - -// architecture of the operating system -// (regardless of the build environment of wxWidgets library - see -// wxIsPlatform64bit documentation for more info) -enum wxArchitecture -{ - wxARCH_INVALID = -1, // returned on error - - wxARCH_32, // 32 bit - wxARCH_64, - - wxARCH_MAX -}; - - -// endian-ness of the machine -enum wxEndianness -{ - wxENDIAN_INVALID = -1, // returned on error - - wxENDIAN_BIG, // 4321 - wxENDIAN_LITTLE, // 1234 - wxENDIAN_PDP, // 3412 - - wxENDIAN_MAX -}; - -// Information about the toolkit that the app is running under and some basic -// platform and architecture info -class WXDLLIMPEXP_BASE wxPlatformInfo -{ -public: - wxPlatformInfo(); - wxPlatformInfo(wxPortId pid, - int tkMajor = -1, int tkMinor = -1, - wxOperatingSystemId id = wxOS_UNKNOWN, - int osMajor = -1, int osMinor = -1, - wxArchitecture arch = wxARCH_INVALID, - wxEndianness endian = wxENDIAN_INVALID, - bool usingUniversal = false); - - // default copy ctor, assignment operator and dtor are ok - - bool operator==(const wxPlatformInfo &t) const; - - bool operator!=(const wxPlatformInfo &t) const - { return !(*this == t); } - - // Gets a wxPlatformInfo already initialized with the values for - // the currently running platform. - static const wxPlatformInfo& Get(); - - - - // string -> enum conversions - // --------------------------------- - - static wxOperatingSystemId GetOperatingSystemId(const wxString &name); - static wxPortId GetPortId(const wxString &portname); - - static wxArchitecture GetArch(const wxString &arch); - static wxEndianness GetEndianness(const wxString &end); - - // enum -> string conversions - // --------------------------------- - - static wxString GetOperatingSystemFamilyName(wxOperatingSystemId os); - static wxString GetOperatingSystemIdName(wxOperatingSystemId os); - static wxString GetPortIdName(wxPortId port, bool usingUniversal); - static wxString GetPortIdShortName(wxPortId port, bool usingUniversal); - - static wxString GetArchName(wxArchitecture arch); - static wxString GetEndiannessName(wxEndianness end); - - // getters - // ----------------- - - int GetOSMajorVersion() const - { return m_osVersionMajor; } - int GetOSMinorVersion() const - { return m_osVersionMinor; } - - // return true if the OS version >= major.minor - bool CheckOSVersion(int major, int minor) const - { - return DoCheckVersion(GetOSMajorVersion(), - GetOSMinorVersion(), - major, - minor); - } - - int GetToolkitMajorVersion() const - { return m_tkVersionMajor; } - int GetToolkitMinorVersion() const - { return m_tkVersionMinor; } - - bool CheckToolkitVersion(int major, int minor) const - { - return DoCheckVersion(GetToolkitMajorVersion(), - GetToolkitMinorVersion(), - major, - minor); - } - - bool IsUsingUniversalWidgets() const - { return m_usingUniversal; } - - wxOperatingSystemId GetOperatingSystemId() const - { return m_os; } - wxPortId GetPortId() const - { return m_port; } - wxArchitecture GetArchitecture() const - { return m_arch; } - wxEndianness GetEndianness() const - { return m_endian; } - - - // string getters - // ----------------- - - wxString GetOperatingSystemFamilyName() const - { return GetOperatingSystemFamilyName(m_os); } - wxString GetOperatingSystemIdName() const - { return GetOperatingSystemIdName(m_os); } - wxString GetPortIdName() const - { return GetPortIdName(m_port, m_usingUniversal); } - wxString GetPortIdShortName() const - { return GetPortIdShortName(m_port, m_usingUniversal); } - wxString GetArchName() const - { return GetArchName(m_arch); } - wxString GetEndiannessName() const - { return GetEndiannessName(m_endian); } - - // setters - // ----------------- - - void SetOSVersion(int major, int minor) - { m_osVersionMajor=major; m_osVersionMinor=minor; } - void SetToolkitVersion(int major, int minor) - { m_tkVersionMajor=major; m_tkVersionMinor=minor; } - - void SetOperatingSystemId(wxOperatingSystemId n) - { m_os = n; } - void SetPortId(wxPortId n) - { m_port = n; } - void SetArchitecture(wxArchitecture n) - { m_arch = n; } - void SetEndianness(wxEndianness n) - { m_endian = n; } - - // miscellaneous - // ----------------- - - bool IsOk() const - { - return m_osVersionMajor != -1 && m_osVersionMinor != -1 && - m_os != wxOS_UNKNOWN && - m_tkVersionMajor != -1 && m_tkVersionMinor != -1 && - m_port != wxPORT_UNKNOWN && - m_arch != wxARCH_INVALID && m_endian != wxENDIAN_INVALID; - } - - -protected: - static bool DoCheckVersion(int majorCur, int minorCur, int major, int minor) - { - return majorCur > major || (majorCur == major && minorCur >= minor); - } - - void InitForCurrentPlatform(); - - - // OS stuff - // ----------------- - - // Version of the OS; valid if m_os != wxOS_UNKNOWN - // (-1 means not initialized yet). - int m_osVersionMajor, - m_osVersionMinor; - - // Operating system ID. - wxOperatingSystemId m_os; - - - // toolkit - // ----------------- - - // Version of the underlying toolkit - // (-1 means not initialized yet; zero means no toolkit). - int m_tkVersionMajor, m_tkVersionMinor; - - // name of the wxWidgets port - wxPortId m_port; - - // is using wxUniversal widgets? - bool m_usingUniversal; - - - // others - // ----------------- - - // architecture of the OS - wxArchitecture m_arch; - - // endianness of the machine - wxEndianness m_endian; -}; - - -#if WXWIN_COMPATIBILITY_2_6 - #define wxUNKNOWN_PLATFORM wxOS_UNKNOWN - #define wxUnix wxOS_UNIX - #define wxWin95 wxOS_WINDOWS_9X - #define wxWIN95 wxOS_WINDOWS_9X - #define wxWINDOWS_NT wxOS_WINDOWS_NT - #define wxMSW wxOS_WINDOWS - #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 - #define wxGTK wxPORT_GTK -#endif // WXWIN_COMPATIBILITY_2_6 - -#endif // _WX_PLATINFO_H_ diff --git a/desmume/src/windows/wx/include/wx/popupwin.h b/desmume/src/windows/wx/include/wx/popupwin.h deleted file mode 100644 index c2f2d984d..000000000 --- a/desmume/src/windows/wx/include/wx/popupwin.h +++ /dev/null @@ -1,192 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/popupwin.h -// Purpose: wxPopupWindow interface declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 06.01.01 -// RCS-ID: $Id: popupwin.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// License: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_POPUPWIN_H_BASE_ -#define _WX_POPUPWIN_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_POPUPWIN - -#include "wx/window.h" - -// ---------------------------------------------------------------------------- -// wxPopupWindow: a special kind of top level window used for popup menus, -// combobox popups and such. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPopupWindowBase : public wxWindow -{ -public: - wxPopupWindowBase() { } - virtual ~wxPopupWindowBase(); - - // create the popup window - // - // style may only contain border flags - bool Create(wxWindow *parent, int style = wxBORDER_NONE); - - // move the popup window to the right position, i.e. such that it is - // entirely visible - // - // the popup is positioned at ptOrigin + size if it opens below and to the - // right (default), at ptOrigin - sizePopup if it opens above and to the - // left &c - // - // the point must be given in screen coordinates! - virtual void Position(const wxPoint& ptOrigin, - const wxSize& size); - - virtual bool IsTopLevel() const { return true; } - - DECLARE_NO_COPY_CLASS(wxPopupWindowBase) -}; - - -// include the real class declaration -#if defined(__WXMSW__) - #include "wx/msw/popupwin.h" -#elif defined(__WXPM__) - #include "wx/os2/popupwin.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/popupwin.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/popupwin.h" -#elif defined(__WXX11__) - #include "wx/x11/popupwin.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/popupwin.h" -#elif defined(__WXMGL__) - #include "wx/mgl/popupwin.h" -#elif defined(__WXMAC__) - #include "wx/mac/popupwin.h" -#else - #error "wxPopupWindow is not supported under this platform." -#endif - -// ---------------------------------------------------------------------------- -// wxPopupTransientWindow: a wxPopupWindow which disappears automatically -// when the user clicks mouse outside it or if it loses focus in any other way -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxPopupWindowHandler; -class WXDLLIMPEXP_FWD_CORE wxPopupFocusHandler; - -class WXDLLEXPORT wxPopupTransientWindow : public wxPopupWindow -{ -public: - // ctors - wxPopupTransientWindow() { Init(); } - wxPopupTransientWindow(wxWindow *parent, int style = wxBORDER_NONE); - - virtual ~wxPopupTransientWindow(); - - // popup the window (this will show it too) and keep focus at winFocus - // (or itself if it's NULL), dismiss the popup if we lose focus - virtual void Popup(wxWindow *focus = NULL); - - // hide the window - virtual void Dismiss(); - - // can the window be dismissed now? - // - // VZ: where is this used?? - virtual bool CanDismiss() - { return true; } - - // called when a mouse is pressed while the popup is shown: return true - // from here to prevent its normal processing by the popup (which consists - // in dismissing it if the mouse is cilcked outside it) - virtual bool ProcessLeftDown(wxMouseEvent& event); - - // Overridden to grab the input on some plaforms - virtual bool Show( bool show = true ); - -protected: - // common part of all ctors - void Init(); - - // this is called when the popup is disappeared because of anything - // else but direct call to Dismiss() - virtual void OnDismiss(); - - // dismiss and notify the derived class - void DismissAndNotify(); - - // remove our event handlers - void PopHandlers(); - - // 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 - void OnIdle(wxIdleEvent& event); -#endif - - // the child of this popup if any - wxWindow *m_child; - - // the window which has the focus while we're shown - wxWindow *m_focus; - - // these classes may call our DismissAndNotify() - friend class wxPopupWindowHandler; - friend class wxPopupFocusHandler; - - // the handlers we created, may be NULL (if not, must be deleted) - wxPopupWindowHandler *m_handlerPopup; - wxPopupFocusHandler *m_handlerFocus; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxPopupTransientWindow) - DECLARE_NO_COPY_CLASS(wxPopupTransientWindow) -}; - -#if wxUSE_COMBOBOX && defined(__WXUNIVERSAL__) - -// ---------------------------------------------------------------------------- -// wxPopupComboWindow: wxPopupTransientWindow used by wxComboBox -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxComboBox; -class WXDLLEXPORT wxComboCtrl; - -class WXDLLEXPORT wxPopupComboWindow : public wxPopupTransientWindow -{ -public: - wxPopupComboWindow() { m_combo = NULL; } - wxPopupComboWindow(wxComboCtrl *parent); - - bool Create(wxComboCtrl *parent); - - // position the window correctly relatively to the combo - void PositionNearCombo(); - -protected: - // notify the combo here - virtual void OnDismiss(); - - // forward the key presses to the combobox - void OnKeyDown(wxKeyEvent& event); - - // the parent combobox - wxComboCtrl *m_combo; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxPopupComboWindow) -}; - -#endif // wxUSE_COMBOBOX && defined(__WXUNIVERSAL__) - -#endif // wxUSE_POPUPWIN - -#endif // _WX_POPUPWIN_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/power.h b/desmume/src/windows/wx/include/wx/power.h deleted file mode 100644 index d81677e0b..000000000 --- a/desmume/src/windows/wx/include/wx/power.h +++ /dev/null @@ -1,111 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/power.h -// Purpose: functions and classes for system power management -// Author: Vadim Zeitlin -// Modified by: -// Created: 2006-05-27 -// RCS-ID: $Id: power.h 48811 2007-09-19 23:11:28Z RD $ -// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_POWER_H_ -#define _WX_POWER_H_ - -#include "wx/event.h" - -// ---------------------------------------------------------------------------- -// power management constants -// ---------------------------------------------------------------------------- - -enum wxPowerType -{ - wxPOWER_SOCKET, - wxPOWER_BATTERY, - wxPOWER_UNKNOWN -}; - -enum wxBatteryState -{ - wxBATTERY_NORMAL_STATE, // system is fully usable - wxBATTERY_LOW_STATE, // start to worry - wxBATTERY_CRITICAL_STATE, // save quickly - wxBATTERY_SHUTDOWN_STATE, // too late - wxBATTERY_UNKNOWN_STATE -}; - -// ---------------------------------------------------------------------------- -// wxPowerEvent is generated when the system online status changes -// ---------------------------------------------------------------------------- - -// currently the power events are only available under Windows, to avoid -// 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__ - -#define wxHAS_POWER_EVENTS - -class WXDLLIMPEXP_BASE wxPowerEvent : public wxEvent -{ -public: - wxPowerEvent(wxEventType evtType) : wxEvent(wxID_NONE, evtType) - { - m_veto = false; - } - - // Veto the operation (only makes sense with EVT_POWER_SUSPENDING) - void Veto() { m_veto = true; } - - bool IsVetoed() const { return m_veto; } - - - // default copy ctor, assignment operator and dtor are ok - - virtual wxEvent *Clone() const { return new wxPowerEvent(*this); } - -private: - bool m_veto; - -#if wxABI_VERSION >= 20806 - DECLARE_ABSTRACT_CLASS(wxPowerEvent) -#endif -}; - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_POWER_SUSPENDING, 406) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_POWER_SUSPENDED, 407) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_POWER_SUSPEND_CANCEL, 408) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_POWER_RESUME, 444) -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxPowerEventFunction)(wxPowerEvent&); - -#define wxPowerEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction) \ - wxStaticCastEvent(wxPowerEventFunction, &func) - -#define EVT_POWER_SUSPENDING(func) \ - wx__DECLARE_EVT0(wxEVT_POWER_SUSPENDING, wxPowerEventHandler(func)) -#define EVT_POWER_SUSPENDED(func) \ - wx__DECLARE_EVT0(wxEVT_POWER_SUSPENDED, wxPowerEventHandler(func)) -#define EVT_POWER_SUSPEND_CANCEL(func) \ - wx__DECLARE_EVT0(wxEVT_POWER_SUSPEND_CANCEL, wxPowerEventHandler(func)) -#define EVT_POWER_RESUME(func) \ - wx__DECLARE_EVT0(wxEVT_POWER_RESUME, wxPowerEventHandler(func)) - -#else // no support for power events - #undef wxHAS_POWER_EVENTS -#endif // support for power events/no support - -// ---------------------------------------------------------------------------- -// power management functions -// ---------------------------------------------------------------------------- - -// return the current system power state: online or offline -WXDLLIMPEXP_BASE wxPowerType wxGetPowerType(); - -// return approximate battery state -WXDLLIMPEXP_BASE wxBatteryState wxGetBatteryState(); - -#endif // _WX_POWER_H_ diff --git a/desmume/src/windows/wx/include/wx/print.h b/desmume/src/windows/wx/include/wx/print.h deleted file mode 100644 index e366ee25c..000000000 --- a/desmume/src/windows/wx/include/wx/print.h +++ /dev/null @@ -1,39 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/print.h -// Purpose: Base header for printer classes -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: print.h 41240 2006-09-15 16:45:48Z PC $ -// Copyright: (c) Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PRINT_H_BASE_ -#define _WX_PRINT_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_PRINTING_ARCHITECTURE - -#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) - -#include "wx/msw/printwin.h" - -#elif defined(__WXMAC__) - -#include "wx/mac/printmac.h" - -#elif defined(__WXPM__) - -#include "wx/os2/printos2.h" - -#else - -#include "wx/generic/printps.h" - -#endif - -#endif // wxUSE_PRINTING_ARCHITECTURE -#endif - // _WX_PRINT_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/printdlg.h b/desmume/src/windows/wx/include/wx/printdlg.h deleted file mode 100644 index 21f57b19d..000000000 --- a/desmume/src/windows/wx/include/wx/printdlg.h +++ /dev/null @@ -1,122 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/printdlg.h -// Purpose: Base header and class for print dialogs -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: printdlg.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PRINTDLG_H_BASE_ -#define _WX_PRINTDLG_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_PRINTING_ARCHITECTURE - -#include "wx/event.h" -#include "wx/dialog.h" -#include "wx/intl.h" -#include "wx/cmndata.h" - - -// --------------------------------------------------------------------------- -// wxPrintDialogBase: interface for the dialog for printing -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxPrintDialogBase : public wxDialog -{ -public: - wxPrintDialogBase() { } - wxPrintDialogBase(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString &title = wxEmptyString, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE); - - virtual wxPrintDialogData& GetPrintDialogData() = 0; - virtual wxPrintData& GetPrintData() = 0; - virtual wxDC *GetPrintDC() = 0; - -private: - DECLARE_ABSTRACT_CLASS(wxPrintDialogBase) - DECLARE_NO_COPY_CLASS(wxPrintDialogBase) -}; - -// --------------------------------------------------------------------------- -// wxPrintDialog: the dialog for printing. -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxPrintDialog : public wxObject -{ -public: - wxPrintDialog(wxWindow *parent, wxPrintDialogData* data = NULL); - wxPrintDialog(wxWindow *parent, wxPrintData* data); - virtual ~wxPrintDialog(); - - virtual int ShowModal(); - - virtual wxPrintDialogData& GetPrintDialogData(); - virtual wxPrintData& GetPrintData(); - virtual wxDC *GetPrintDC(); - -private: - wxPrintDialogBase *m_pimpl; - -private: - DECLARE_DYNAMIC_CLASS(wxPrintDialog) - DECLARE_NO_COPY_CLASS(wxPrintDialog) -}; - -// --------------------------------------------------------------------------- -// wxPageSetupDialogBase: interface for the page setup dialog -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxPageSetupDialogBase: public wxDialog -{ -public: - wxPageSetupDialogBase() { } - wxPageSetupDialogBase(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxString &title = wxEmptyString, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE); - - virtual wxPageSetupDialogData& GetPageSetupDialogData() = 0; - -private: - DECLARE_ABSTRACT_CLASS(wxPageSetupDialogBase) - DECLARE_NO_COPY_CLASS(wxPageSetupDialogBase) -}; - -// --------------------------------------------------------------------------- -// wxPageSetupDialog: the page setup dialog -// --------------------------------------------------------------------------- - -class WXDLLEXPORT wxPageSetupDialog: public wxObject -{ -public: - wxPageSetupDialog(wxWindow *parent, wxPageSetupDialogData *data = NULL); - virtual ~wxPageSetupDialog(); - - int ShowModal(); - wxPageSetupDialogData& GetPageSetupDialogData(); - // old name - wxPageSetupDialogData& GetPageSetupData(); - -private: - wxPageSetupDialogBase *m_pimpl; - -private: - DECLARE_DYNAMIC_CLASS(wxPageSetupDialog) - DECLARE_NO_COPY_CLASS(wxPageSetupDialog) -}; - -#endif - -#endif - // _WX_PRINTDLG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/private/browserhack28.h b/desmume/src/windows/wx/include/wx/private/browserhack28.h deleted file mode 100644 index 28d6da71b..000000000 --- a/desmume/src/windows/wx/include/wx/private/browserhack28.h +++ /dev/null @@ -1,20 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/private/browserhack28.h -// Purpose: Allows GUI library to override base wxLaunchDefaultBrowser. -// Author: David Elliott -// Modified by: -// Created: 2007-08-19 -// RCS-ID: $Id: browserhack28.h 48184 2007-08-19 19:22:09Z DE $ -// Copyright: (c) David Elliott -// Licence: wxWidgets licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PRIVATE_BROWSERHACK28_H_ -#define _WX_PRIVATE_BROWSERHACK28_H_ - -typedef bool (*wxLaunchDefaultBrowserImpl_t)(const wxString& url, int flags); - -// Function the GUI library can call to provide a better implementation -WXDLLIMPEXP_BASE void wxSetLaunchDefaultBrowserImpl(wxLaunchDefaultBrowserImpl_t newImpl); - -#endif //ndef _WX_PRIVATE_BROWSERHACK28_H_ diff --git a/desmume/src/windows/wx/include/wx/private/fileback.h b/desmume/src/windows/wx/include/wx/private/fileback.h deleted file mode 100644 index 534a0f31b..000000000 --- a/desmume/src/windows/wx/include/wx/private/fileback.h +++ /dev/null @@ -1,83 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: include/wx/private/fileback.h -// Purpose: Back an input stream with memory or a file -// Author: Mike Wetherell -// RCS-ID: $Id: fileback.h 42651 2006-10-29 20:06:45Z MW $ -// Copyright: (c) 2006 Mike Wetherell -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_FILEBACK_H__ -#define _WX_FILEBACK_H__ - -#include "wx/defs.h" - -#if wxUSE_FILESYSTEM - -#include "wx/stream.h" - -// ---------------------------------------------------------------------------- -// Backs an input stream with memory or a file to make it seekable. -// -// One or more wxBackedInputStreams can be used to read it's data. The data is -// reference counted, so stays alive until the last wxBackingFile or -// wxBackedInputStream using it is destroyed. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxBackingFile -{ -public: - enum { DefaultBufSize = 16384 }; - - // Takes ownership of stream. If the stream is smaller than bufsize, the - // backing file is never created and the backing is done with memory. - wxBackingFile(wxInputStream *stream, - size_t bufsize = DefaultBufSize, - const wxString& prefix = _T("wxbf")); - - wxBackingFile() : m_impl(NULL) { } - ~wxBackingFile(); - - wxBackingFile(const wxBackingFile& backer); - wxBackingFile& operator=(const wxBackingFile& backer); - - operator bool() const { return m_impl != NULL; } - -private: - class wxBackingFileImpl *m_impl; - friend class wxBackedInputStream; -}; - -// ---------------------------------------------------------------------------- -// An input stream to read from a wxBackingFile. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxBackedInputStream : public wxInputStream -{ -public: - wxBackedInputStream(const wxBackingFile& backer); - - // If the length of the backer's parent stream is unknown then GetLength() - // returns wxInvalidOffset until the parent has been read to the end. - wxFileOffset GetLength() const; - - // Returns the length, reading the parent stream to the end if necessary. - wxFileOffset FindLength() const; - - bool IsSeekable() const { return true; } - -protected: - size_t OnSysRead(void *buffer, size_t size); - wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); - wxFileOffset OnSysTell() const; - -private: - wxBackingFile m_backer; - wxFileOffset m_pos; - - DECLARE_NO_COPY_CLASS(wxBackedInputStream) -}; - -#endif // wxUSE_FILESYSTEM - -#endif // _WX_FILEBACK_H__ diff --git a/desmume/src/windows/wx/include/wx/private/filename.h b/desmume/src/windows/wx/include/wx/private/filename.h deleted file mode 100644 index e6c754b6e..000000000 --- a/desmume/src/windows/wx/include/wx/private/filename.h +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: include/wx/private/filename.h -// Purpose: Internal declarations for src/common/filename.cpp -// Author: Mike Wetherell -// Modified by: -// Created: 2006-10-22 -// RCS-ID: $Id: filename.h 42277 2006-10-23 13:10:12Z MW $ -// Copyright: (c) 2006 Mike Wetherell -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PRIVATE_FILENAME_H_ -#define _WX_PRIVATE_FILENAME_H_ - -#include "wx/file.h" -#include "wx/ffile.h" - -// Self deleting temp files aren't supported on all platforms. Therefore -// rather than let these be in the API, they can be used internally to -// implement classes (e.g. wxTempFileStream), that will do the clean up when -// the OS doesn't support it. - -// Same usage as wxFileName::CreateTempFileName() with the extra parameter -// deleteOnClose. *deleteOnClose true on entry requests a file created with a -// delete on close flag, on exit the value of *deleteOnClose indicates whether -// available. - -#if wxUSE_FILE -wxString wxCreateTempFileName(const wxString& prefix, - wxFile *fileTemp, - bool *deleteOnClose = NULL); -#endif - -#if wxUSE_FFILE -wxString wxCreateTempFileName(const wxString& prefix, - wxFFile *fileTemp, - bool *deleteOnClose = NULL); -#endif - -// Returns an open temp file, if possible either an unlinked open file or one -// that will delete on close. Only returns the filename if neither was -// possible, so that the caller can delete the file when done. - -#if wxUSE_FILE -bool wxCreateTempFile(const wxString& prefix, - wxFile *fileTemp, - wxString *name); -#endif - -#if wxUSE_FFILE -bool wxCreateTempFile(const wxString& prefix, - wxFFile *fileTemp, - wxString *name); -#endif - -#endif // _WX_PRIVATE_FILENAME_H_ diff --git a/desmume/src/windows/wx/include/wx/private/fontmgr.h b/desmume/src/windows/wx/include/wx/private/fontmgr.h deleted file mode 100644 index 88904a402..000000000 --- a/desmume/src/windows/wx/include/wx/private/fontmgr.h +++ /dev/null @@ -1,255 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/private/fontmgr.h -// Purpose: font management for ports that don't have their own -// Author: Vaclav Slavik -// Created: 2006-11-18 -// RCS-ID: $Id: fontmgr.h 43855 2006-12-07 08:57:44Z PC $ -// Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com) -// (c) 2006 REA Elektronik GmbH -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PRIVATE_FONTMGR_H_ -#define _WX_PRIVATE_FONTMGR_H_ - -#include "wx/list.h" -#include "wx/fontutil.h" - -class wxFontsManager; -class wxFontInstance; -class wxFontInstanceList; -class wxFontFace; -class wxFontBundle; -class wxFontBundleHash; -class wxFontMgrFontRefData; - -WX_DECLARE_LIST(wxFontBundle, wxFontBundleList); - -/** - This class represents single font face with set parameters (point size, - antialiasing). - */ -class wxFontInstanceBase -{ -protected: - wxFontInstanceBase(float ptSize, bool aa) : m_ptSize(ptSize), m_aa(aa) {} - virtual ~wxFontInstanceBase() {} - -public: - float GetPointSize() const { return m_ptSize; } - bool IsAntiAliased() const { return m_aa; } - -protected: - float m_ptSize; - bool m_aa; -}; - - -/// This class represents loaded font face (bundle+weight+italics). -class wxFontFaceBase -{ -protected: - /// Ctor. Creates object with reference count = 0, Acquire() must be - /// called after the object is created. - wxFontFaceBase(); - virtual ~wxFontFaceBase(); - -public: - /// Increases reference count of the face - virtual void Acquire(); - - /** - Decreases reference count of the face. Call this when you no longer - use the object returned by wxFontBundle. Note that this doesn't destroy - the object, but only optionally shuts it down, so it's possible to - call Acquire() and Release() more than once. - */ - virtual void Release(); - - /** - Returns instance of the font at given size. - - @param ptSize point size of the font to create; note that this is - a float and not integer, it should be wxFont's point - size multipled by wxDC's scale factor - @param aa should the font be antialiased? - */ - virtual wxFontInstance *GetFontInstance(float ptSize, bool aa); - -protected: - /// Called to create a new instance of the font by GetFontInstance() if - /// it wasn't found it cache. - virtual wxFontInstance *CreateFontInstance(float ptSize, bool aa) = 0; - -protected: - unsigned m_refCnt; - wxFontInstanceList *m_instances; -}; - -/** - This class represents font bundle. Font bundle is set of faces that have - the same name, but differ in weight and italics. - */ -class wxFontBundleBase -{ -public: - wxFontBundleBase(); - virtual ~wxFontBundleBase(); - - /// Returns name of the bundle - virtual wxString GetName() const = 0; - - /// Returns true if the font is fixe-width - virtual bool IsFixed() const = 0; - - /// Type of faces in the bundle - enum FaceType - { - // NB: values of these constants are set so that it's possible to - // make OR-combinations of them and still get valid enum element - FaceType_Regular = 0, - FaceType_Italic = 1, - FaceType_Bold = 2, - FaceType_BoldItalic = FaceType_Italic | FaceType_Bold, - - FaceType_Max - }; - - /// Returns true if the given face is available - bool HasFace(FaceType type) const { return m_faces[type] != NULL; } - - /** - Returns font face object that can be used to render font of given type. - - Note that this method can only be called if HasFace(type) returns true. - - Acquire() was called on the returned object, you must call Release() - when you stop using it. - */ - wxFontFace *GetFace(FaceType type) const; - - /** - Returns font face object that can be used to render given font. - - Acquire() was called on the returned object, you must call Release() - when you stop using it. - */ - wxFontFace *GetFaceForFont(const wxFontMgrFontRefData& font) const; - -protected: - wxFontFace *m_faces[FaceType_Max]; -}; - - -/** - Base class for wxFontsManager class, which manages the list of all - available fonts and their loaded instances. - */ -class wxFontsManagerBase -{ -protected: - wxFontsManagerBase(); - virtual ~wxFontsManagerBase(); - -public: - /// Returns the font manager singleton, creating it if it doesn't exist - static wxFontsManager *Get(); - - /// Called by wxApp to shut down the manager - static void CleanUp(); - - /// Returns list of all available font bundles - const wxFontBundleList& GetBundles() const { return *m_list; } - - /** - Returns object representing font bundle with the given name. - - The returned object is owned by wxFontsManager, you must not delete it. - */ - wxFontBundle *GetBundle(const wxString& name) const; - - /** - Returns object representing font bundle that can be used to render - given font. - - The returned object is owned by wxFontsManager, you must not delete it. - */ - wxFontBundle *GetBundleForFont(const wxFontMgrFontRefData& font) const; - - /// This method must be called by derived - void AddBundle(wxFontBundle *bundle); - - /// Returns default facename for given wxFont family - virtual wxString GetDefaultFacename(wxFontFamily family) const = 0; - -private: - wxFontBundleHash *m_hash; - wxFontBundleList *m_list; - -protected: - static wxFontsManager *ms_instance; -}; - - - -#if defined(__WXMGL__) - #include "wx/mgl/private/fontmgr.h" -#elif defined(__WXDFB__) - #include "wx/dfb/private/fontmgr.h" -#endif - - - -/// wxFontMgrFontRefData implementation using wxFontsManager classes -class wxFontMgrFontRefData : public wxObjectRefData -{ -public: - wxFontMgrFontRefData(int size = wxDEFAULT, - int family = wxDEFAULT, - int style = wxDEFAULT, - int weight = wxDEFAULT, - bool underlined = false, - const wxString& faceName = wxEmptyString, - wxFontEncoding encoding = wxFONTENCODING_DEFAULT); - wxFontMgrFontRefData(const wxFontMgrFontRefData& data); - ~wxFontMgrFontRefData(); - - wxFontBundle *GetFontBundle() const; - wxFontInstance *GetFontInstance(float scale, bool antialiased) const; - - bool IsFixedWidth() const { return GetFontBundle()->IsFixed(); } - - const wxNativeFontInfo *GetNativeFontInfo() const { return &m_info; } - - int GetPointSize() const { return m_info.pointSize; } - wxString GetFaceName() const { return m_info.faceName; } - int GetFamily() const { return m_info.family; } - int GetStyle() const { return m_info.style; } - int GetWeight() const { return m_info.weight; } - bool GetUnderlined() const { return m_info.underlined; } - wxFontEncoding GetEncoding() const { return m_info.encoding; } - - void SetPointSize(int pointSize); - void SetFamily(int family); - void SetStyle(int style); - void SetWeight(int weight); - void SetFaceName(const wxString& faceName); - void SetUnderlined(bool underlined); - void SetEncoding(wxFontEncoding encoding); - - // Unofficial API, don't use - void SetNoAntiAliasing(bool no); - bool GetNoAntiAliasing() const { return m_noAA; } - -private: - void EnsureValidFont(); - - wxNativeFontInfo m_info; - bool m_noAA; - - wxFontFace *m_fontFace; - wxFontBundle *m_fontBundle; - bool m_fontValid; -}; - -#endif // _WX_PRIVATE_FONTMGR_H_ diff --git a/desmume/src/windows/wx/include/wx/private/overlay.h b/desmume/src/windows/wx/include/wx/private/overlay.h deleted file mode 100644 index a3f95e201..000000000 --- a/desmume/src/windows/wx/include/wx/private/overlay.h +++ /dev/null @@ -1,72 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/private/overlay.h -// Purpose: wxOverlayImpl declaration -// Author: Stefan Csomor -// Modified by: -// Created: 2006-10-20 -// RCS-ID: $Id: overlay.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PRIVATE_OVERLAY_H_ -#define _WX_PRIVATE_OVERLAY_H_ - -#include "wx/overlay.h" - -#ifdef wxHAS_NATIVE_OVERLAY - -#if defined(__WXMAC__) - #include "wx/mac/carbon/private/overlay.h" -#elif defined(__WXDFB__) - #include "wx/dfb/private/overlay.h" -#else - #error "unknown native wxOverlay implementation" -#endif - -#else // !wxHAS_NATIVE_OVERLAY - -#include "wx/bitmap.h" - -class WXDLLIMPEXP_FWD_CORE wxWindow; - -// generic implementation of wxOverlay -class wxOverlayImpl -{ -public: - wxOverlayImpl(); - ~wxOverlayImpl(); - - - // clears the overlay without restoring the former state - // to be done eg when the window content has been changed and repainted - void Reset(); - - // returns true if it has been setup - bool IsOk(); - - void Init(wxWindowDC* dc, int x , int y , int width , int height); - - void BeginDrawing(wxWindowDC* dc); - - void EndDrawing(wxWindowDC* dc); - - void Clear(wxWindowDC* dc); - -private: - wxBitmap m_bmpSaved ; - int m_x ; - int m_y ; - int m_width ; - int m_height ; -// this is to enable wxMOTIF and UNIV to compile.... -// currently (10 oct 06) we don't use m_window -// ce - how do we fix this -#if defined(__WXGTK__) || defined(__WXMSW__) - wxWindow* m_window ; -#endif -} ; - -#endif // wxHAS_NATIVE_OVERLAY/!wxHAS_NATIVE_OVERLAY - -#endif // _WX_PRIVATE_OVERLAY_H_ diff --git a/desmume/src/windows/wx/include/wx/private/socketevtdispatch.h b/desmume/src/windows/wx/include/wx/private/socketevtdispatch.h deleted file mode 100644 index 553c78231..000000000 --- a/desmume/src/windows/wx/include/wx/private/socketevtdispatch.h +++ /dev/null @@ -1,67 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/private/socketevtdispatch.h -// Purpose: wxSocketEventDispatcher class -// Authors: Angel Vidal -// Modified by: -// Created: August 2006 -// Copyright: (c) Angel Vidal -// RCS-ID: $Id: socketevtdispatch.h 43976 2006-12-14 14:13:57Z VS $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PRIVATE_SOCKETEVTDISPATCH_H_ -#define _WX_PRIVATE_SOCKETEVTDISPATCH_H_ - -#include "wx/defs.h" - -#if wxUSE_SOCKETS - -#include "wx/hash.h" - -// forward declarations -class wxSocketEventDispatcherEntry; -class GSocket; - -enum wxSocketEventDispatcherType -{ - wxSocketEventDispatcherInput, - wxSocketEventDispatcherOutput -}; - -class WXDLLIMPEXP_CORE wxSocketEventDispatcher : public wxHashTable -{ -protected: - wxSocketEventDispatcher() : wxHashTable(wxKEY_INTEGER) {} - -public: - // returns instance of the table - static wxSocketEventDispatcher& Get(); - - virtual ~wxSocketEventDispatcher() - { - WX_CLEAR_HASH_TABLE(*this) - } - - void RegisterCallback(int fd, wxSocketEventDispatcherType socketType, - GSocket* socket); - - void UnregisterCallback(int fd, wxSocketEventDispatcherType socketType); - - void RunLoop(int timeout = 0); - -private: - void AddEvents(fd_set* readset, fd_set* writeset); - - int FillSets(fd_set* readset, fd_set* writeset); - - wxSocketEventDispatcherEntry* FindEntry(int fd); - -private: - static wxSocketEventDispatcher *ms_instance; - - friend class wxSocketEventDispatcherModule; -}; - -#endif // wxUSE_SOCKETS - -#endif // _WX_PRIVATE_SOCKETEVTDISPATCH_H_ diff --git a/desmume/src/windows/wx/include/wx/prntbase.h b/desmume/src/windows/wx/include/wx/prntbase.h deleted file mode 100644 index 196609c74..000000000 --- a/desmume/src/windows/wx/include/wx/prntbase.h +++ /dev/null @@ -1,665 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/prntbase.h -// Purpose: Base classes for printing framework -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: prntbase.h 54404 2008-06-28 15:32:52Z VS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PRNTBASEH__ -#define _WX_PRNTBASEH__ - -#include "wx/defs.h" - -#if wxUSE_PRINTING_ARCHITECTURE - -#include "wx/event.h" -#include "wx/cmndata.h" -#include "wx/panel.h" -#include "wx/scrolwin.h" -#include "wx/dialog.h" -#include "wx/frame.h" - -class WXDLLIMPEXP_FWD_CORE wxDC; -class WXDLLIMPEXP_FWD_CORE wxButton; -class WXDLLIMPEXP_FWD_CORE wxChoice; -class WXDLLIMPEXP_FWD_CORE wxPrintout; -class WXDLLIMPEXP_FWD_CORE wxPrinterBase; -class WXDLLIMPEXP_FWD_CORE wxPrintDialogBase; -class WXDLLIMPEXP_FWD_CORE wxPrintDialog; -class WXDLLIMPEXP_FWD_CORE wxPageSetupDialogBase; -class WXDLLIMPEXP_FWD_CORE wxPageSetupDialog; -class WXDLLIMPEXP_FWD_CORE wxPrintPreviewBase; -class WXDLLIMPEXP_FWD_CORE wxPreviewCanvas; -class WXDLLIMPEXP_FWD_CORE wxPreviewControlBar; -class WXDLLIMPEXP_FWD_CORE wxPreviewFrame; -class WXDLLIMPEXP_FWD_CORE wxPrintFactory; -class WXDLLIMPEXP_FWD_CORE wxPrintNativeDataBase; - -//---------------------------------------------------------------------------- -// error consts -//---------------------------------------------------------------------------- - -enum wxPrinterError -{ - wxPRINTER_NO_ERROR = 0, - wxPRINTER_CANCELLED, - wxPRINTER_ERROR -}; - -//---------------------------------------------------------------------------- -// wxPrintFactory -//---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPrintFactory -{ -public: - wxPrintFactory() {} - virtual ~wxPrintFactory() {} - - virtual wxPrinterBase *CreatePrinter( wxPrintDialogData* data ) = 0; - - virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, - wxPrintout *printout = NULL, - wxPrintDialogData *data = NULL ) = 0; - virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, - wxPrintout *printout, - wxPrintData *data ) = 0; - - virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent, - wxPrintDialogData *data = NULL ) = 0; - virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent, - wxPrintData *data ) = 0; - - virtual wxPageSetupDialogBase *CreatePageSetupDialog( wxWindow *parent, - wxPageSetupDialogData * data = NULL ) = 0; - - virtual wxDC* CreatePrinterDC( const wxPrintData& data ) = 0; - - // What to do and what to show in the wxPrintDialog - // a) Use the generic print setup dialog or a native one? - virtual bool HasPrintSetupDialog() = 0; - virtual wxDialog *CreatePrintSetupDialog( wxWindow *parent, wxPrintData *data ) = 0; - // b) Provide the "print to file" option ourselves or via print setup? - virtual bool HasOwnPrintToFile() = 0; - // c) Show current printer - virtual bool HasPrinterLine() = 0; - virtual wxString CreatePrinterLine() = 0; - // d) Show Status line for current printer? - virtual bool HasStatusLine() = 0; - virtual wxString CreateStatusLine() = 0; - - - virtual wxPrintNativeDataBase *CreatePrintNativeData() = 0; - - static void SetPrintFactory( wxPrintFactory *factory ); - static wxPrintFactory *GetFactory(); -private: - static wxPrintFactory *m_factory; -}; - -class WXDLLEXPORT wxNativePrintFactory: public wxPrintFactory -{ -public: - virtual wxPrinterBase *CreatePrinter( wxPrintDialogData *data ); - - virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, - wxPrintout *printout = NULL, - wxPrintDialogData *data = NULL ); - virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview, - wxPrintout *printout, - wxPrintData *data ); - - virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent, - wxPrintDialogData *data = NULL ); - virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent, - wxPrintData *data ); - - virtual wxPageSetupDialogBase *CreatePageSetupDialog( wxWindow *parent, - wxPageSetupDialogData * data = NULL ); - - virtual wxDC* CreatePrinterDC( const wxPrintData& data ); - - virtual bool HasPrintSetupDialog(); - virtual wxDialog *CreatePrintSetupDialog( wxWindow *parent, wxPrintData *data ); - virtual bool HasOwnPrintToFile(); - virtual bool HasPrinterLine(); - virtual wxString CreatePrinterLine(); - virtual bool HasStatusLine(); - virtual wxString CreateStatusLine(); - - virtual wxPrintNativeDataBase *CreatePrintNativeData(); -}; - -//---------------------------------------------------------------------------- -// wxPrintNativeDataBase -//---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPrintNativeDataBase: public wxObject -{ -public: - wxPrintNativeDataBase(); - virtual ~wxPrintNativeDataBase() {} - - virtual bool TransferTo( wxPrintData &data ) = 0; - virtual bool TransferFrom( const wxPrintData &data ) = 0; - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const = 0; - - int m_ref; - -private: - DECLARE_CLASS(wxPrintNativeDataBase) - DECLARE_NO_COPY_CLASS(wxPrintNativeDataBase) -}; - -//---------------------------------------------------------------------------- -// wxPrinterBase -//---------------------------------------------------------------------------- - -/* - * Represents the printer: manages printing a wxPrintout object - */ - -class WXDLLEXPORT wxPrinterBase: public wxObject -{ -public: - wxPrinterBase(wxPrintDialogData *data = (wxPrintDialogData *) NULL); - virtual ~wxPrinterBase(); - - virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout); - virtual void ReportError(wxWindow *parent, wxPrintout *printout, const wxString& message); - - virtual wxPrintDialogData& GetPrintDialogData() const; - bool GetAbort() const { return sm_abortIt; } - - static wxPrinterError GetLastError() { return sm_lastError; } - - /////////////////////////////////////////////////////////////////////////// - // OVERRIDES - - virtual bool Setup(wxWindow *parent) = 0; - virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = true) = 0; - virtual wxDC* PrintDialog(wxWindow *parent) = 0; - -protected: - wxPrintDialogData m_printDialogData; - wxPrintout* m_currentPrintout; - - static wxPrinterError sm_lastError; - -public: - static wxWindow* sm_abortWindow; - static bool sm_abortIt; - -private: - DECLARE_CLASS(wxPrinterBase) - DECLARE_NO_COPY_CLASS(wxPrinterBase) -}; - -//---------------------------------------------------------------------------- -// wxPrinter -//---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPrinter: public wxPrinterBase -{ -public: - wxPrinter(wxPrintDialogData *data = (wxPrintDialogData *) NULL); - virtual ~wxPrinter(); - - virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout); - virtual void ReportError(wxWindow *parent, wxPrintout *printout, const wxString& message); - - virtual bool Setup(wxWindow *parent); - virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = true); - virtual wxDC* PrintDialog(wxWindow *parent); - - virtual wxPrintDialogData& GetPrintDialogData() const; - -protected: - wxPrinterBase *m_pimpl; - -private: - DECLARE_CLASS(wxPrinter) - DECLARE_NO_COPY_CLASS(wxPrinter) -}; - -//---------------------------------------------------------------------------- -// wxPrintout -//---------------------------------------------------------------------------- - -/* - * Represents an object via which a document may be printed. - * The programmer derives from this, overrides (at least) OnPrintPage, - * and passes it to a wxPrinter object for printing, or a wxPrintPreview - * object for previewing. - */ - -class WXDLLEXPORT wxPrintout: public wxObject -{ -public: - wxPrintout(const wxString& title = wxT("Printout")); - virtual ~wxPrintout(); - - virtual bool OnBeginDocument(int startPage, int endPage); - virtual void OnEndDocument(); - virtual void OnBeginPrinting(); - virtual void OnEndPrinting(); - - // Guaranteed to be before any other functions are called - virtual void OnPreparePrinting() { } - - virtual bool HasPage(int page); - virtual bool OnPrintPage(int page) = 0; - virtual void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo); - - virtual wxString GetTitle() const { return m_printoutTitle; } - - wxDC *GetDC() const { return m_printoutDC; } - void SetDC(wxDC *dc) { m_printoutDC = dc; } - - void FitThisSizeToPaper(const wxSize& imageSize); - void FitThisSizeToPage(const wxSize& imageSize); - void FitThisSizeToPageMargins(const wxSize& imageSize, const wxPageSetupDialogData& pageSetupData); - void MapScreenSizeToPaper(); - void MapScreenSizeToPage(); - void MapScreenSizeToPageMargins(const wxPageSetupDialogData& pageSetupData); - void MapScreenSizeToDevice(); - - wxRect GetLogicalPaperRect() const; - wxRect GetLogicalPageRect() const; - wxRect GetLogicalPageMarginsRect(const wxPageSetupDialogData& pageSetupData) const; - - void SetLogicalOrigin(wxCoord x, wxCoord y); - void OffsetLogicalOrigin(wxCoord xoff, wxCoord yoff); - - void SetPageSizePixels(int w, int h) { m_pageWidthPixels = w; m_pageHeightPixels = h; } - void GetPageSizePixels(int *w, int *h) const { *w = m_pageWidthPixels; *h = m_pageHeightPixels; } - void SetPageSizeMM(int w, int h) { m_pageWidthMM = w; m_pageHeightMM = h; } - void GetPageSizeMM(int *w, int *h) const { *w = m_pageWidthMM; *h = m_pageHeightMM; } - - void SetPPIScreen(int x, int y) { m_PPIScreenX = x; m_PPIScreenY = y; } - void GetPPIScreen(int *x, int *y) const { *x = m_PPIScreenX; *y = m_PPIScreenY; } - void SetPPIPrinter(int x, int y) { m_PPIPrinterX = x; m_PPIPrinterY = y; } - void GetPPIPrinter(int *x, int *y) const { *x = m_PPIPrinterX; *y = m_PPIPrinterY; } - - void SetPaperRectPixels(const wxRect& paperRectPixels) { m_paperRectPixels = paperRectPixels; } - wxRect GetPaperRectPixels() const { return m_paperRectPixels; } - - virtual bool IsPreview() const { return m_isPreview; } - - virtual void SetIsPreview(bool p) { m_isPreview = p; } - -private: - wxString m_printoutTitle; - wxDC* m_printoutDC; - - int m_pageWidthPixels; - int m_pageHeightPixels; - - int m_pageWidthMM; - int m_pageHeightMM; - - int m_PPIScreenX; - int m_PPIScreenY; - int m_PPIPrinterX; - int m_PPIPrinterY; - - wxRect m_paperRectPixels; - - bool m_isPreview; - -private: - DECLARE_ABSTRACT_CLASS(wxPrintout) - DECLARE_NO_COPY_CLASS(wxPrintout) -}; - -//---------------------------------------------------------------------------- -// wxPreviewCanvas -//---------------------------------------------------------------------------- - -/* - * Canvas upon which a preview is drawn. - */ - -class WXDLLEXPORT wxPreviewCanvas: public wxScrolledWindow -{ -public: - wxPreviewCanvas(wxPrintPreviewBase *preview, - wxWindow *parent, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxT("canvas")); - virtual ~wxPreviewCanvas(); - - void OnPaint(wxPaintEvent& event); - void OnChar(wxKeyEvent &event); - // Responds to colour changes - void OnSysColourChanged(wxSysColourChangedEvent& event); - -private: -#if wxUSE_MOUSEWHEEL - void OnMouseWheel(wxMouseEvent& event); -#endif // wxUSE_MOUSEWHEEL - - wxPrintPreviewBase* m_printPreview; - - DECLARE_CLASS(wxPreviewCanvas) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxPreviewCanvas) -}; - -//---------------------------------------------------------------------------- -// wxPreviewFrame -//---------------------------------------------------------------------------- - -/* - * Default frame for showing preview. - */ - -class WXDLLEXPORT wxPreviewFrame: public wxFrame -{ -public: - wxPreviewFrame(wxPrintPreviewBase *preview, - wxWindow *parent, - const wxString& title = wxT("Print Preview"), - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxT("frame")); - virtual ~wxPreviewFrame(); - - void OnCloseWindow(wxCloseEvent& event); - virtual void Initialize(); - virtual void CreateCanvas(); - virtual void CreateControlBar(); - - inline wxPreviewControlBar* GetControlBar() const { return m_controlBar; } - -protected: - wxPreviewCanvas* m_previewCanvas; - wxPreviewControlBar* m_controlBar; - wxPrintPreviewBase* m_printPreview; - wxWindowDisabler* m_windowDisabler; - -private: - DECLARE_CLASS(wxPreviewFrame) - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxPreviewFrame) -}; - -//---------------------------------------------------------------------------- -// wxPreviewControlBar -//---------------------------------------------------------------------------- - -/* - * A panel with buttons for controlling a print preview. - * The programmer may wish to use other means for controlling - * the print preview. - */ - -#define wxPREVIEW_PRINT 1 -#define wxPREVIEW_PREVIOUS 2 -#define wxPREVIEW_NEXT 4 -#define wxPREVIEW_ZOOM 8 -#define wxPREVIEW_FIRST 16 -#define wxPREVIEW_LAST 32 -#define wxPREVIEW_GOTO 64 - -#define wxPREVIEW_DEFAULT (wxPREVIEW_PREVIOUS|wxPREVIEW_NEXT|wxPREVIEW_ZOOM\ - |wxPREVIEW_FIRST|wxPREVIEW_GOTO|wxPREVIEW_LAST) - -// Ids for controls -#define wxID_PREVIEW_CLOSE 1 -#define wxID_PREVIEW_NEXT 2 -#define wxID_PREVIEW_PREVIOUS 3 -#define wxID_PREVIEW_PRINT 4 -#define wxID_PREVIEW_ZOOM 5 -#define wxID_PREVIEW_FIRST 6 -#define wxID_PREVIEW_LAST 7 -#define wxID_PREVIEW_GOTO 8 - -class WXDLLEXPORT wxPreviewControlBar: public wxPanel -{ - DECLARE_CLASS(wxPreviewControlBar) - -public: - wxPreviewControlBar(wxPrintPreviewBase *preview, - long buttons, - wxWindow *parent, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxTAB_TRAVERSAL, - const wxString& name = wxT("panel")); - virtual ~wxPreviewControlBar(); - - virtual void CreateButtons(); - virtual void SetZoomControl(int zoom); - virtual int GetZoomControl(); - virtual wxPrintPreviewBase *GetPrintPreview() const - { return m_printPreview; } - - void OnWindowClose(wxCommandEvent& event); - void OnNext(); - void OnPrevious(); - void OnFirst(); - void OnLast(); - void OnGoto(); - void OnPrint(); - void OnPrintButton(wxCommandEvent& WXUNUSED(event)) { OnPrint(); } - void OnNextButton(wxCommandEvent & WXUNUSED(event)) { OnNext(); } - void OnPreviousButton(wxCommandEvent & WXUNUSED(event)) { OnPrevious(); } - void OnFirstButton(wxCommandEvent & WXUNUSED(event)) { OnFirst(); } - void OnLastButton(wxCommandEvent & WXUNUSED(event)) { OnLast(); } - void OnGotoButton(wxCommandEvent & WXUNUSED(event)) { OnGoto(); } - void OnZoom(wxCommandEvent& event); - void OnPaint(wxPaintEvent& event); - -protected: - wxPrintPreviewBase* m_printPreview; - wxButton* m_closeButton; - wxButton* m_nextPageButton; - wxButton* m_previousPageButton; - wxButton* m_printButton; - wxChoice* m_zoomControl; - wxButton* m_firstPageButton; - wxButton* m_lastPageButton; - wxButton* m_gotoPageButton; - long m_buttonFlags; - -private: - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxPreviewControlBar) -}; - -//---------------------------------------------------------------------------- -// wxPrintPreviewBase -//---------------------------------------------------------------------------- - -/* - * Programmer creates an object of this class to preview a wxPrintout. - */ - -class WXDLLEXPORT wxPrintPreviewBase: public wxObject -{ -public: - wxPrintPreviewBase(wxPrintout *printout, - wxPrintout *printoutForPrinting = (wxPrintout *) NULL, - wxPrintDialogData *data = (wxPrintDialogData *) NULL); - wxPrintPreviewBase(wxPrintout *printout, - wxPrintout *printoutForPrinting, - wxPrintData *data); - virtual ~wxPrintPreviewBase(); - - virtual bool SetCurrentPage(int pageNum); - virtual int GetCurrentPage() const; - - virtual void SetPrintout(wxPrintout *printout); - virtual wxPrintout *GetPrintout() const; - virtual wxPrintout *GetPrintoutForPrinting() const; - - virtual void SetFrame(wxFrame *frame); - virtual void SetCanvas(wxPreviewCanvas *canvas); - - virtual wxFrame *GetFrame() const; - virtual wxPreviewCanvas *GetCanvas() const; - - // This is a helper routine, used by the next 4 routines. - - virtual void CalcRects(wxPreviewCanvas *canvas, wxRect& printableAreaRect, wxRect& paperRect); - - // The preview canvas should call this from OnPaint - virtual bool PaintPage(wxPreviewCanvas *canvas, wxDC& dc); - - // This draws a blank page onto the preview canvas - virtual bool DrawBlankPage(wxPreviewCanvas *canvas, wxDC& dc); - - // Adjusts the scrollbars for the current scale - virtual void AdjustScrollbars(wxPreviewCanvas *canvas); - - // This is called by wxPrintPreview to render a page into a wxMemoryDC. - virtual bool RenderPage(int pageNum); - - - virtual void SetZoom(int percent); - virtual int GetZoom() const; - - virtual wxPrintDialogData& GetPrintDialogData(); - - virtual int GetMaxPage() const; - virtual int GetMinPage() const; - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const; - virtual void SetOk(bool ok); - - /////////////////////////////////////////////////////////////////////////// - // OVERRIDES - - // If we own a wxPrintout that can be used for printing, this - // will invoke the actual printing procedure. Called - // by the wxPreviewControlBar. - virtual bool Print(bool interactive) = 0; - - // Calculate scaling that needs to be done to get roughly - // the right scaling for the screen pretending to be - // the currently selected printer. - virtual void DetermineScaling() = 0; - -protected: - wxPrintDialogData m_printDialogData; - wxPreviewCanvas* m_previewCanvas; - wxFrame* m_previewFrame; - wxBitmap* m_previewBitmap; - wxPrintout* m_previewPrintout; - wxPrintout* m_printPrintout; - int m_currentPage; - int m_currentZoom; - float m_previewScaleX; - float m_previewScaleY; - int m_topMargin; - int m_leftMargin; - int m_pageWidth; - int m_pageHeight; - int m_minPage; - int m_maxPage; - - bool m_isOk; - bool m_printingPrepared; // Called OnPreparePrinting? - -private: - void Init(wxPrintout *printout, wxPrintout *printoutForPrinting); - - // helpers for RenderPage(): - bool RenderPageIntoDC(wxDC& dc, int pageNum); - bool RenderPageIntoBitmap(wxBitmap& bmp, int pageNum); - - DECLARE_NO_COPY_CLASS(wxPrintPreviewBase) - DECLARE_CLASS(wxPrintPreviewBase) -}; - -//---------------------------------------------------------------------------- -// wxPrintPreview -//---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPrintPreview: public wxPrintPreviewBase -{ -public: - wxPrintPreview(wxPrintout *printout, - wxPrintout *printoutForPrinting = (wxPrintout *) NULL, - wxPrintDialogData *data = (wxPrintDialogData *) NULL); - wxPrintPreview(wxPrintout *printout, - wxPrintout *printoutForPrinting, - wxPrintData *data); - virtual ~wxPrintPreview(); - - virtual bool SetCurrentPage(int pageNum); - virtual int GetCurrentPage() const; - virtual void SetPrintout(wxPrintout *printout); - virtual wxPrintout *GetPrintout() const; - virtual wxPrintout *GetPrintoutForPrinting() const; - virtual void SetFrame(wxFrame *frame); - virtual void SetCanvas(wxPreviewCanvas *canvas); - - virtual wxFrame *GetFrame() const; - virtual wxPreviewCanvas *GetCanvas() const; - virtual bool PaintPage(wxPreviewCanvas *canvas, wxDC& dc); - virtual bool DrawBlankPage(wxPreviewCanvas *canvas, wxDC& dc); - virtual void AdjustScrollbars(wxPreviewCanvas *canvas); - virtual bool RenderPage(int pageNum); - virtual void SetZoom(int percent); - virtual int GetZoom() const; - - virtual bool Print(bool interactive); - virtual void DetermineScaling(); - - virtual wxPrintDialogData& GetPrintDialogData(); - - virtual int GetMaxPage() const; - virtual int GetMinPage() const; - - virtual bool Ok() const { return IsOk(); } - virtual bool IsOk() const; - virtual void SetOk(bool ok); - -private: - wxPrintPreviewBase *m_pimpl; - -private: - DECLARE_CLASS(wxPrintPreview) - DECLARE_NO_COPY_CLASS(wxPrintPreview) -}; - -//---------------------------------------------------------------------------- -// wxPrintAbortDialog -//---------------------------------------------------------------------------- - -class WXDLLEXPORT wxPrintAbortDialog: public wxDialog -{ -public: - wxPrintAbortDialog(wxWindow *parent, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxT("dialog")) - : wxDialog(parent, wxID_ANY, title, pos, size, style, name) - { - } - - void OnCancel(wxCommandEvent& event); - -private: - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxPrintAbortDialog) -}; - -#endif // wxUSE_PRINTING_ARCHITECTURE - -#endif - // _WX_PRNTBASEH__ diff --git a/desmume/src/windows/wx/include/wx/process.h b/desmume/src/windows/wx/include/wx/process.h deleted file mode 100644 index aaed2703a..000000000 --- a/desmume/src/windows/wx/include/wx/process.h +++ /dev/null @@ -1,172 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/process.h -// Purpose: wxProcess class -// Author: Guilhem Lavaux -// Modified by: Vadim Zeitlin to check error codes, added Detach() method -// Created: 24/06/98 -// RCS-ID: $Id: process.h 42713 2006-10-30 11:56:12Z ABX $ -// Copyright: (c) 1998 Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PROCESSH__ -#define _WX_PROCESSH__ - -#include "wx/event.h" - -#if wxUSE_STREAMS - #include "wx/stream.h" -#endif - -#include "wx/utils.h" // for wxSignal - -// the wxProcess creation flags -enum -{ - // no redirection - wxPROCESS_DEFAULT = 0, - - // redirect the IO of the child process - wxPROCESS_REDIRECT = 1 -}; - -// ---------------------------------------------------------------------------- -// A wxProcess object should be passed to wxExecute - than its OnTerminate() -// function will be called when the process terminates. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxProcess : public wxEvtHandler -{ -public: - // kill the process with the given PID - static wxKillError Kill(int pid, wxSignal sig = wxSIGTERM, int flags = wxKILL_NOCHILDREN); - - // test if the given process exists - static bool Exists(int pid); - - // this function replaces the standard popen() one: it launches a process - // asynchronously and allows the caller to get the streams connected to its - // std{in|out|err} - // - // on error NULL is returned, in any case the process object will be - // deleted automatically when the process terminates and should *not* be - // deleted by the caller - static wxProcess *Open(const wxString& cmd, int flags = wxEXEC_ASYNC); - - - // ctors - wxProcess(wxEvtHandler *parent = (wxEvtHandler *) NULL, int nId = wxID_ANY) - { Init(parent, nId, wxPROCESS_DEFAULT); } - - wxProcess(int flags) { Init(NULL, wxID_ANY, flags); } - - virtual ~wxProcess(); - - // get the process ID of the process executed by Open() - long GetPid() const { return m_pid; } - - // may be overridden to be notified about process termination - virtual void OnTerminate(int pid, int status); - - // call this before passing the object to wxExecute() to redirect the - // launched process stdin/stdout, then use GetInputStream() and - // GetOutputStream() to get access to them - void Redirect() { m_redirect = true; } - bool IsRedirected() const { return m_redirect; } - - // detach from the parent - should be called by the parent if it's deleted - // before the process it started terminates - void Detach(); - -#if wxUSE_STREAMS - // Pipe handling - wxInputStream *GetInputStream() const { return m_inputStream; } - wxInputStream *GetErrorStream() const { return m_errorStream; } - wxOutputStream *GetOutputStream() const { return m_outputStream; } - - // close the output stream indicating that nothing more will be written - void CloseOutput() { delete m_outputStream; m_outputStream = NULL; } - - // return true if the child process stdout is not closed - bool IsInputOpened() const; - - // return true if any input is available on the child process stdout/err - bool IsInputAvailable() const; - bool IsErrorAvailable() const; - - // implementation only (for wxExecute) - // - // NB: the streams passed here should correspond to the child process - // stdout, stdin and stderr and here the normal naming convention is - // used unlike elsewhere in this class - void SetPipeStreams(wxInputStream *outStream, - wxOutputStream *inStream, - wxInputStream *errStream); -#endif // wxUSE_STREAMS - -protected: - void Init(wxEvtHandler *parent, int id, int flags); - void SetPid(long pid) { m_pid = pid; } - - int m_id; - long m_pid; - -#if wxUSE_STREAMS - // these streams are connected to stdout, stderr and stdin of the child - // process respectively (yes, m_inputStream corresponds to stdout -- very - // confusing but too late to change now) - wxInputStream *m_inputStream, - *m_errorStream; - wxOutputStream *m_outputStream; -#endif // wxUSE_STREAMS - - bool m_redirect; - - DECLARE_DYNAMIC_CLASS(wxProcess) - DECLARE_NO_COPY_CLASS(wxProcess) -}; - -// ---------------------------------------------------------------------------- -// wxProcess events -// ---------------------------------------------------------------------------- - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_END_PROCESS, 440) -END_DECLARE_EVENT_TYPES() - -class WXDLLIMPEXP_BASE wxProcessEvent : public wxEvent -{ -public: - wxProcessEvent(int nId = 0, int pid = 0, int exitcode = 0) : wxEvent(nId) - { - m_eventType = wxEVT_END_PROCESS; - m_pid = pid; - m_exitcode = exitcode; - } - - // accessors - // PID of process which terminated - int GetPid() { return m_pid; } - - // the exit code - int GetExitCode() { return m_exitcode; } - - // implement the base class pure virtual - virtual wxEvent *Clone() const { return new wxProcessEvent(*this); } - -public: - int m_pid, - m_exitcode; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxProcessEvent) -}; - -typedef void (wxEvtHandler::*wxProcessEventFunction)(wxProcessEvent&); - -#define wxProcessEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxProcessEventFunction, &func) - -#define EVT_END_PROCESS(id, func) \ - wx__DECLARE_EVT1(wxEVT_END_PROCESS, id, wxProcessEventHandler(func)) - -#endif // _WX_PROCESSH__ diff --git a/desmume/src/windows/wx/include/wx/progdlg.h b/desmume/src/windows/wx/include/wx/progdlg.h deleted file mode 100644 index f1692b130..000000000 --- a/desmume/src/windows/wx/include/wx/progdlg.h +++ /dev/null @@ -1,36 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/progdlg.h -// Purpose: Base header for wxProgressDialog -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: progdlg.h 41089 2006-09-09 13:36:54Z RR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PROGDLG_H_BASE_ -#define _WX_PROGDLG_H_BASE_ - -#include "wx/defs.h" - -/* - * wxProgressDialog flags - */ -#define wxPD_CAN_ABORT 0x0001 -#define wxPD_APP_MODAL 0x0002 -#define wxPD_AUTO_HIDE 0x0004 -#define wxPD_ELAPSED_TIME 0x0008 -#define wxPD_ESTIMATED_TIME 0x0010 -#define wxPD_SMOOTH 0x0020 -#define wxPD_REMAINING_TIME 0x0040 -#define wxPD_CAN_SKIP 0x0080 - - -#ifdef __WXPALMOS__ - #include "wx/palmos/progdlg.h" -#else - #include "wx/generic/progdlgg.h" -#endif - -#endif // _WX_PROGDLG_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/propdlg.h b/desmume/src/windows/wx/include/wx/propdlg.h deleted file mode 100644 index 4bad68bb3..000000000 --- a/desmume/src/windows/wx/include/wx/propdlg.h +++ /dev/null @@ -1,19 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/propdlg.h -// Purpose: wxPropertySheetDialog base header -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: propdlg.h 33948 2005-05-04 18:57:50Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PROPDLG_H_BASE_ -#define _WX_PROPDLG_H_BASE_ - -#include "wx/generic/propdlg.h" - -#endif - // _WX_PROPDLG_H_BASE_ - diff --git a/desmume/src/windows/wx/include/wx/protocol/file.h b/desmume/src/windows/wx/include/wx/protocol/file.h deleted file mode 100644 index e31d88fb4..000000000 --- a/desmume/src/windows/wx/include/wx/protocol/file.h +++ /dev/null @@ -1,37 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: file.h -// Purpose: File protocol -// Author: Guilhem Lavaux -// Modified by: -// Created: 1997 -// RCS-ID: $Id: file.h 43836 2006-12-06 19:20:40Z VZ $ -// Copyright: (c) 1997, 1998 Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __WX_PROTO_FILE_H__ -#define __WX_PROTO_FILE_H__ - -#include "wx/defs.h" - -#if wxUSE_PROTOCOL_FILE - -#include "wx/protocol/protocol.h" - -class WXDLLIMPEXP_NET wxFileProto: public wxProtocol { - DECLARE_DYNAMIC_CLASS_NO_COPY(wxFileProto) - DECLARE_PROTOCOL(wxFileProto) -protected: - wxProtocolError m_error; -public: - wxFileProto(); - virtual ~wxFileProto(); - - wxProtocolError GetError() { return m_error; } - bool Abort() { return TRUE; } - wxInputStream *GetInputStream(const wxString& path); -}; - -#endif // wxUSE_PROTOCOL_FILE - -#endif // __WX_PROTO_FILE_H__ diff --git a/desmume/src/windows/wx/include/wx/protocol/ftp.h b/desmume/src/windows/wx/include/wx/protocol/ftp.h deleted file mode 100644 index b074e15ea..000000000 --- a/desmume/src/windows/wx/include/wx/protocol/ftp.h +++ /dev/null @@ -1,182 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: ftp.h -// Purpose: FTP protocol -// Author: Vadim Zeitlin -// Modified by: Mark Johnson, wxWindows@mj10777.de -// 20000917 : RmDir, GetLastResult, GetList -// Created: 07/07/1997 -// RCS-ID: $Id: ftp.h 45498 2007-04-16 13:03:05Z VZ $ -// Copyright: (c) 1997, 1998 Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __WX_FTP_H__ -#define __WX_FTP_H__ - -#include "wx/defs.h" - -#if wxUSE_PROTOCOL_FTP - -#include "wx/sckaddr.h" -#include "wx/protocol/protocol.h" -#include "wx/url.h" - -class WXDLLIMPEXP_NET wxFTP : public wxProtocol -{ -public: - enum TransferMode - { - NONE, // not set by user explicitly - ASCII, - BINARY - }; - - wxFTP(); - virtual ~wxFTP(); - - // Connecting and disconnecting - void SetUser(const wxString& user) { m_user = user; } - void SetPassword(const wxString& passwd) { m_passwd = passwd; } - - bool Connect(wxSockAddress& addr, bool wait = true); - bool Connect(const wxString& host); - - // disconnect - virtual bool Close(); - - // Parameters set up - - // set transfer mode now - void SetPassive(bool pasv) { m_bPassive = pasv; } - void SetDefaultTimeout(wxUint32 Value); - bool SetBinary() { return SetTransferMode(BINARY); } - bool SetAscii() { return SetTransferMode(ASCII); } - bool SetTransferMode(TransferMode mode); - - // Generic FTP interface - - // the error code - virtual wxProtocolError GetError() { return m_lastError; } - - // the last FTP server reply - const wxString& GetLastResult() { return m_lastResult; } - - // send any FTP command (should be full FTP command line but without - // trailing "\r\n") and return its return code - char SendCommand(const wxString& command); - - // check that the command returned the given code - bool CheckCommand(const wxString& command, char expectedReturn) - { - return SendCommand(command) == expectedReturn; - } - - // Filesystem commands - bool ChDir(const wxString& dir); - bool MkDir(const wxString& dir); - bool RmDir(const wxString& dir); - wxString Pwd(); - bool Rename(const wxString& src, const wxString& dst); - bool RmFile(const wxString& path); - - // Get the size of a file in the current dir. - // this function tries its best to deliver the size in bytes using BINARY - // (the SIZE command reports different sizes depending on whether - // type is set to ASCII or BINARY) - // returns -1 if file is non-existant or size could not be found - int GetFileSize(const wxString& fileName); - - // Check to see if a file exists in the current dir - bool FileExists(const wxString& fileName); - - // Download methods - bool Abort(); - - virtual wxInputStream *GetInputStream(const wxString& path); - virtual wxOutputStream *GetOutputStream(const wxString& path); - - // Directory listing - - // get the list of full filenames, the format is fixed: one file name per - // line - bool GetFilesList(wxArrayString& files, - const wxString& wildcard = wxEmptyString) - { - return GetList(files, wildcard, false); - } - - // get a directory list in server dependent format - this can be shown - // directly to the user - bool GetDirList(wxArrayString& files, - const wxString& wildcard = wxEmptyString) - { - return GetList(files, wildcard, true); - } - - // equivalent to either GetFilesList() (default) or GetDirList() - bool GetList(wxArrayString& files, - const wxString& wildcard = wxEmptyString, - bool details = false); - -protected: - // this executes a simple ftp command with the given argument and returns - // true if it its return code starts with '2' - bool DoSimpleCommand(const wxChar *command, - const wxString& arg = wxEmptyString); - - // get the server reply, return the first character of the reply code, - // '1'..'5' for normal FTP replies, 0 (*not* '0') if an error occurred - char GetResult(); - - // check that the result is equal to expected value - bool CheckResult(char ch) { return GetResult() == ch; } - - // return the socket to be used, Passive/Active versions are used only by - // GetPort() - wxSocketBase *GetPort(); - wxSocketBase *GetPassivePort(); - wxSocketBase *GetActivePort(); - - // helper for GetPort() - 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 - wxSocketBase *AcceptIfActive(wxSocketBase *sock); - - - wxString m_user, - m_passwd; - - wxString m_lastResult; - wxProtocolError m_lastError; - - // true if there is an FTP transfer going on - bool m_streaming; - - // although this should be set to ASCII by default according to STD9, - // we will use BINARY transfer mode by default for backwards compatibility - TransferMode m_currentTransfermode; - - friend class wxInputFTPStream; - friend class wxOutputFTPStream; - - bool m_bPassive; - wxUint32 m_uiDefaultTimeout; - - // following is true when a read or write times out, we then assume - // the connection is dead and abort. we avoid additional delays this way - bool m_bEncounteredError; - - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxFTP) - DECLARE_PROTOCOL(wxFTP) -}; - -// the trace mask used by assorted wxLogTrace() in ftp code, do -// wxLog::AddTraceMask(FTP_TRACE_MASK) to see them in output -#define FTP_TRACE_MASK _T("ftp") - -#endif // wxUSE_PROTOCOL_FTP - -#endif // __WX_FTP_H__ diff --git a/desmume/src/windows/wx/include/wx/protocol/http.h b/desmume/src/windows/wx/include/wx/protocol/http.h deleted file mode 100644 index b52664d32..000000000 --- a/desmume/src/windows/wx/include/wx/protocol/http.h +++ /dev/null @@ -1,91 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: http.h -// Purpose: HTTP protocol -// Author: Guilhem Lavaux -// Modified by: Simo Virokannas (authentication, Dec 2005) -// Created: August 1997 -// RCS-ID: $Id: http.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) 1997, 1998 Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_HTTP_H -#define _WX_HTTP_H - -#include "wx/defs.h" - -#if wxUSE_PROTOCOL_HTTP - -#include "wx/hashmap.h" -#include "wx/protocol/protocol.h" - -WX_DECLARE_STRING_HASH_MAP_WITH_DECL( wxString, wxStringToStringHashMap, - class WXDLLIMPEXP_NET ); - -class WXDLLIMPEXP_NET wxHTTP : public wxProtocol -{ -public: - wxHTTP(); - virtual ~wxHTTP(); - - virtual bool Connect(const wxString& host, unsigned short port); - virtual bool Connect(const wxString& host) { return Connect(host, 0); } - virtual bool Connect(wxSockAddress& addr, bool wait); - bool Abort(); - wxInputStream *GetInputStream(const wxString& path); - inline wxProtocolError GetError() { return m_perr; } - wxString GetContentType(); - - void SetHeader(const wxString& header, const wxString& h_data); - wxString GetHeader(const wxString& header) const; - void SetPostBuffer(const wxString& post_buf); - - void SetProxyMode(bool on); - - int GetResponse() { return m_http_response; } - - virtual void SetUser(const wxString& user) { m_username = user; } - virtual void SetPassword(const wxString& passwd ) { m_password = passwd; } - -protected: - enum wxHTTP_Req - { - wxHTTP_GET, - wxHTTP_POST, - wxHTTP_HEAD - }; - - typedef wxStringToStringHashMap::iterator wxHeaderIterator; - typedef wxStringToStringHashMap::const_iterator wxHeaderConstIterator; - - bool BuildRequest(const wxString& path, wxHTTP_Req req); - void SendHeaders(); - bool ParseHeaders(); - - wxString GenerateAuthString(const wxString& user, const wxString& pass) const; - - // find the header in m_headers - wxHeaderIterator FindHeader(const wxString& header); - wxHeaderConstIterator FindHeader(const wxString& header) const; - - // deletes the header value strings - void ClearHeaders(); - - wxProtocolError m_perr; - wxStringToStringHashMap m_headers; - bool m_read, - m_proxy_mode; - wxSockAddress *m_addr; - wxString m_post_buf; - int m_http_response; - wxString m_username; - wxString m_password; - - DECLARE_DYNAMIC_CLASS(wxHTTP) - DECLARE_PROTOCOL(wxHTTP) - DECLARE_NO_COPY_CLASS(wxHTTP) -}; - -#endif // wxUSE_PROTOCOL_HTTP - -#endif // _WX_HTTP_H - diff --git a/desmume/src/windows/wx/include/wx/protocol/protocol.h b/desmume/src/windows/wx/include/wx/protocol/protocol.h deleted file mode 100644 index 5fd35ac0a..000000000 --- a/desmume/src/windows/wx/include/wx/protocol/protocol.h +++ /dev/null @@ -1,131 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/protocol/protocol.h -// Purpose: Protocol base class -// Author: Guilhem Lavaux -// Modified by: -// Created: 10/07/1997 -// RCS-ID: $Id: protocol.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 1997, 1998 Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_PROTOCOL_PROTOCOL_H -#define _WX_PROTOCOL_PROTOCOL_H - -#include "wx/defs.h" - -#if wxUSE_PROTOCOL - -#include "wx/object.h" -#include "wx/string.h" -#include "wx/stream.h" - -#if wxUSE_SOCKETS - #include "wx/socket.h" -#endif - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -typedef enum -{ - wxPROTO_NOERR = 0, - wxPROTO_NETERR, - wxPROTO_PROTERR, - wxPROTO_CONNERR, - wxPROTO_INVVAL, - wxPROTO_NOHNDLR, - wxPROTO_NOFILE, - wxPROTO_ABRT, - wxPROTO_RCNCT, - wxPROTO_STREAMING -} wxProtocolError; - -// ---------------------------------------------------------------------------- -// wxProtocol: abstract base class for all protocols -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_NET wxProtocol -#if wxUSE_SOCKETS - : public wxSocketClient -#else - : public wxObject -#endif -{ -public: - wxProtocol(); - -#if wxUSE_SOCKETS - bool Reconnect(); - virtual bool Connect( const wxString& WXUNUSED(host) ) { return FALSE; } - virtual bool Connect( wxSockAddress& addr, bool WXUNUSED(wait) = TRUE) { return wxSocketClient::Connect(addr); } - - // read a '\r\n' terminated line from the given socket and put it in - // result (without the terminators) - static wxProtocolError ReadLine(wxSocketBase *socket, wxString& result); - - // read a line from this socket - this one can be overridden in the - // derived classes if different line termination convention is to be used - virtual wxProtocolError ReadLine(wxString& result); -#endif // wxUSE_SOCKETS - - virtual bool Abort() = 0; - virtual wxInputStream *GetInputStream(const wxString& path) = 0; - virtual wxProtocolError GetError() = 0; - virtual wxString GetContentType() { return wxEmptyString; } - virtual void SetUser(const wxString& WXUNUSED(user)) {} - virtual void SetPassword(const wxString& WXUNUSED(passwd) ) {} - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxProtocol) -}; - -#if wxUSE_SOCKETS -wxProtocolError WXDLLIMPEXP_NET GetLine(wxSocketBase *sock, wxString& result); -#endif - -// ---------------------------------------------------------------------------- -// macros for protocol classes -// ---------------------------------------------------------------------------- - -#define DECLARE_PROTOCOL(class) \ -public: \ - static wxProtoInfo g_proto_##class; - -#define IMPLEMENT_PROTOCOL(class, name, serv, host) \ -wxProtoInfo class::g_proto_##class(name, serv, host, CLASSINFO(class)); \ -bool wxProtocolUse##class = TRUE; - -#define USE_PROTOCOL(class) \ - extern bool wxProtocolUse##class ; \ - static struct wxProtocolUserFor##class \ - { \ - wxProtocolUserFor##class() { wxProtocolUse##class = TRUE; } \ - } wxProtocolDoUse##class; - -class WXDLLIMPEXP_NET wxProtoInfo : public wxObject -{ -public: - wxProtoInfo(const wxChar *name, - const wxChar *serv_name, - const bool need_host1, - wxClassInfo *info); - -protected: - wxProtoInfo *next; - wxString m_protoname; - wxString prefix; - wxString m_servname; - wxClassInfo *m_cinfo; - bool m_needhost; - - friend class wxURL; - - DECLARE_DYNAMIC_CLASS(wxProtoInfo) - DECLARE_NO_COPY_CLASS(wxProtoInfo) -}; - -#endif // wxUSE_PROTOCOL - -#endif // _WX_PROTOCOL_PROTOCOL_H diff --git a/desmume/src/windows/wx/include/wx/ptr_scpd.h b/desmume/src/windows/wx/include/wx/ptr_scpd.h deleted file mode 100644 index e78d53fb6..000000000 --- a/desmume/src/windows/wx/include/wx/ptr_scpd.h +++ /dev/null @@ -1,222 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/ptr_scpd.h -// Purpose: scoped smart pointer class -// Author: Jesse Lovelace <jllovela@eos.ncsu.edu> -// Modified by: -// Created: 06/01/02 -// RCS-ID: $Id: ptr_scpd.h 35688 2005-09-25 19:59:19Z VZ $ -// Copyright: (c) Jesse Lovelace and original Boost authors (see below) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -// This class closely follows the implementation of the boost -// library scoped_ptr and is an adaption for c++ macro's in -// the wxWidgets project. The original authors of the boost -// scoped_ptr are given below with their respective copyrights. - -// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999. -// Copyright (c) 2001, 2002 Peter Dimov -// -// Permission to copy, use, modify, sell and distribute this software -// is granted provided this copyright notice appears in all copies. -// This software is provided "as is" without express or implied -// warranty, and with no claim as to its suitability for any purpose. -// -// See http://www.boost.org/libs/smart_ptr/scoped_ptr.htm for documentation. -// - -#ifndef __WX_SCOPED_POINTER__ -#define __WX_SCOPED_POINTER__ - -#include "wx/defs.h" - -/* - checked deleters are used to make sure that the type being deleted is really - a complete type.: otherwise sizeof() would result in a compile-time error - - do { ... } while ( 0 ) construct is used to have an anonymous scope - (otherwise we could have name clashes between different "complete"s) but - still force a semicolon after the macro -*/ - -#ifdef __WATCOMC__ - #define wxFOR_ONCE(name) for(int name=0; name<1; name++) - #define wxPRE_NO_WARNING_SCOPE(name) wxFOR_ONCE(wxMAKE_UNIQUE_NAME(name)) - #define wxPOST_NO_WARNING_SCOPE(name) -#else - #define wxPRE_NO_WARNING_SCOPE(name) do - #define wxPOST_NO_WARNING_SCOPE(name) while ( wxFalse ) -#endif - -#define wxCHECKED_DELETE(ptr) \ - wxPRE_NO_WARNING_SCOPE(scope_var1) \ - { \ - typedef char complete[sizeof(*ptr)]; \ - delete ptr; \ - } wxPOST_NO_WARNING_SCOPE(scope_var1) - -#define wxCHECKED_DELETE_ARRAY(ptr) \ - wxPRE_NO_WARNING_SCOPE(scope_var2) \ - { \ - typedef char complete[sizeof(*ptr)]; \ - delete [] ptr; \ - } wxPOST_NO_WARNING_SCOPE(scope_var2) - -/* These scoped pointers are *not* assignable and cannot be used - within a container. Look for wxDECLARE_SHARED_PTR for this - functionality. - - In addition, the type being used *must* be complete at the time - that wxDEFINE_SCOPED_* is called or a compiler error will result. - This is because the class checks for the completeness of the type - being used. -*/ - - -#define wxDECLARE_SCOPED_PTR(T, name) \ -class name \ -{ \ -private: \ - T * m_ptr; \ - \ - name(name const &); \ - name & operator=(name const &); \ - \ -public: \ - wxEXPLICIT name(T * ptr = NULL) \ - : m_ptr(ptr) { } \ - \ - ~name(); \ - \ - void reset(T * ptr = NULL) \ - { \ - if (m_ptr != ptr) \ - { \ - delete m_ptr; \ - m_ptr = ptr; \ - } \ - } \ - \ - T *release() \ - { \ - T *ptr = m_ptr; \ - m_ptr = NULL; \ - return ptr; \ - } \ - \ - T & operator*() const \ - { \ - wxASSERT(m_ptr != NULL); \ - return *m_ptr; \ - } \ - \ - T * operator->() const \ - { \ - wxASSERT(m_ptr != NULL); \ - return m_ptr; \ - } \ - \ - T * get() const \ - { \ - return m_ptr; \ - } \ - \ - void swap(name & ot) \ - { \ - T * tmp = ot.m_ptr; \ - ot.m_ptr = m_ptr; \ - m_ptr = tmp; \ - } \ -}; - -#define wxDEFINE_SCOPED_PTR(T, name)\ -name::~name() \ -{ \ - wxCHECKED_DELETE(m_ptr); \ -} - -// this macro can be used for the most common case when you want to declare and -// define the scoped pointer at the same time and want to use the standard -// naming convention: auto pointer to Foo is called FooPtr -#define wxDEFINE_SCOPED_PTR_TYPE(T) \ - wxDECLARE_SCOPED_PTR(T, T ## Ptr) \ - wxDEFINE_SCOPED_PTR(T, T ## Ptr) - -// the same but for arrays instead of simple pointers -#define wxDECLARE_SCOPED_ARRAY(T, name)\ -class name \ -{ \ -private: \ - T * m_ptr; \ - name(name const &); \ - name & operator=(name const &); \ - \ -public: \ - wxEXPLICIT name(T * p = NULL) : m_ptr(p) \ - {} \ - \ - ~name(); \ - void reset(T * p = NULL); \ - \ - T & operator[](long int i) const\ - { \ - wxASSERT(m_ptr != NULL); \ - wxASSERT(i >= 0); \ - return m_ptr[i]; \ - } \ - \ - T * get() const \ - { \ - return m_ptr; \ - } \ - \ - void swap(name & ot) \ - { \ - T * tmp = ot.m_ptr; \ - ot.m_ptr = m_ptr; \ - m_ptr = tmp; \ - } \ -}; - -#define wxDEFINE_SCOPED_ARRAY(T, name) \ -name::~name() \ -{ \ - wxCHECKED_DELETE_ARRAY(m_ptr); \ -} \ -void name::reset(T * p){ \ - if (m_ptr != p) \ - { \ - wxCHECKED_DELETE_ARRAY(m_ptr); \ - m_ptr = p; \ - } \ -} - -// ---------------------------------------------------------------------------- -// "Tied" scoped pointer: same as normal one but also sets the value of -// some other variable to the pointer value -// ---------------------------------------------------------------------------- - -#define wxDEFINE_TIED_SCOPED_PTR_TYPE(T) \ - wxDEFINE_SCOPED_PTR_TYPE(T) \ - class T ## TiedPtr : public T ## Ptr \ - { \ - public: \ - T ## TiedPtr(T **pp, T *p) \ - : T ## Ptr(p), m_pp(pp) \ - { \ - m_pOld = *pp; \ - *pp = p; \ - } \ - \ - ~ T ## TiedPtr() \ - { \ - *m_pp = m_pOld; \ - } \ - \ - private: \ - T **m_pp; \ - T *m_pOld; \ - }; - -#endif // __WX_SCOPED_POINTER__ - diff --git a/desmume/src/windows/wx/include/wx/quantize.h b/desmume/src/windows/wx/include/wx/quantize.h deleted file mode 100644 index 159ccaf88..000000000 --- a/desmume/src/windows/wx/include/wx/quantize.h +++ /dev/null @@ -1,76 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/quantize.h -// Purpose: wxQuantizer class -// Author: Julian Smart -// Modified by: -// Created: 22/6/2000 -// RCS-ID: $Id: quantize.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) Julian Smart -// Licence: -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_QUANTIZE_H_ -#define _WX_QUANTIZE_H_ - -#include "wx/object.h" - -/* - * From jquant2.c - * - * Copyright (C) 1991-1996, Thomas G. Lane. - * This file is part of the Independent JPEG Group's software. - * For conditions of distribution and use, see the accompanying README file. - */ - -class WXDLLIMPEXP_FWD_CORE wxImage; -class WXDLLIMPEXP_FWD_CORE wxPalette; - -/* - * wxQuantize - * Based on the JPEG quantization code. Reduces the number of colours in a wxImage. - */ - -#define wxQUANTIZE_INCLUDE_WINDOWS_COLOURS 0x01 -#define wxQUANTIZE_RETURN_8BIT_DATA 0x02 -#define wxQUANTIZE_FILL_DESTINATION_IMAGE 0x04 - -class WXDLLEXPORT wxQuantize: public wxObject -{ -public: -DECLARE_DYNAMIC_CLASS(wxQuantize) - -//// Constructor - - wxQuantize() {} - virtual ~wxQuantize() {} - -//// Operations - - // Reduce the colours in the source image and put the result into the - // destination image. Both images may be the same, to overwrite the source image. - // Specify an optional palette pointer to receive the resulting palette. - // This palette may be passed to ConvertImageToBitmap, for example. - // If you pass a palette pointer, you must free the palette yourself. - - static bool Quantize(const wxImage& src, wxImage& dest, wxPalette** pPalette, int desiredNoColours = 236, - unsigned char** eightBitData = 0, int flags = wxQUANTIZE_INCLUDE_WINDOWS_COLOURS|wxQUANTIZE_FILL_DESTINATION_IMAGE|wxQUANTIZE_RETURN_8BIT_DATA); - - // This version sets a palette in the destination image so you don't - // have to manage it yourself. - - static bool Quantize(const wxImage& src, wxImage& dest, int desiredNoColours = 236, - unsigned char** eightBitData = 0, int flags = wxQUANTIZE_INCLUDE_WINDOWS_COLOURS|wxQUANTIZE_FILL_DESTINATION_IMAGE|wxQUANTIZE_RETURN_8BIT_DATA); - -//// Helpers - - // Converts input bitmap(s) into 8bit representation with custom palette - - // in_rows and out_rows are arrays [0..h-1] of pointer to rows - // (in_rows contains w * 3 bytes per row, out_rows w bytes per row) - // fills out_rows with indexes into palette (which is also stored into palette variable) - static void DoQuantize(unsigned w, unsigned h, unsigned char **in_rows, unsigned char **out_rows, unsigned char *palette, int desiredNoColours); - -}; - -#endif - // _WX_QUANTIZE_H_ diff --git a/desmume/src/windows/wx/include/wx/radiobox.h b/desmume/src/windows/wx/include/wx/radiobox.h deleted file mode 100644 index 69a09c43b..000000000 --- a/desmume/src/windows/wx/include/wx/radiobox.h +++ /dev/null @@ -1,181 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/radiobox.h -// Purpose: wxRadioBox declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 10.09.00 -// RCS-ID: $Id: radiobox.h 54930 2008-08-02 19:45:23Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RADIOBOX_H_BASE_ -#define _WX_RADIOBOX_H_BASE_ - -#if wxUSE_RADIOBOX - -#include "wx/ctrlsub.h" - -#if wxUSE_TOOLTIPS - -#include "wx/dynarray.h" - -class WXDLLIMPEXP_FWD_CORE wxToolTip; - -WX_DEFINE_EXPORTED_ARRAY_PTR(wxToolTip *, wxToolTipArray); - -#endif // wxUSE_TOOLTIPS - -extern WXDLLEXPORT_DATA(const wxChar) wxRadioBoxNameStr[]; - -// ---------------------------------------------------------------------------- -// wxRadioBoxBase is not a normal base class, but rather a mix-in because the -// real wxRadioBox derives from different classes on different platforms: for -// example, it is a wxStaticBox in wxUniv and wxMSW but not in other ports -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxRadioBoxBase : public wxItemContainerImmutable -{ -public: - virtual ~wxRadioBoxBase(); - - // change/query the individual radio button state - virtual bool Enable(unsigned int n, bool enable = true) = 0; - virtual bool Show(unsigned int n, bool show = true) = 0; - virtual bool IsItemEnabled(unsigned int n) const = 0; - virtual bool IsItemShown(unsigned int n) const = 0; - - // return number of columns/rows in this radiobox - unsigned int GetColumnCount() const { return m_numCols; } - unsigned int GetRowCount() const { return m_numRows; } - - // return the next active (i.e. shown and not disabled) item above/below/to - // the left/right of the given one - int GetNextItem(int item, wxDirection dir, long style) const; - -#if wxUSE_TOOLTIPS - // set the tooltip text for a radio item, empty string unsets any tooltip - void SetItemToolTip(unsigned int item, const wxString& text); - - // get the individual items tooltip; returns NULL if none - wxToolTip *GetItemToolTip(unsigned int item) const - { return m_itemsTooltips ? (*m_itemsTooltips)[item] : NULL; } -#endif // wxUSE_TOOLTIPS - -#if wxUSE_HELP - // set helptext for a particular item, pass an empty string to erase it - void SetItemHelpText(unsigned int n, const wxString& helpText); - - // retrieve helptext for a particular item, empty string means no help text - wxString GetItemHelpText(unsigned int n) const; -#else // wxUSE_HELP - // just silently ignore the help text, it's better than requiring using - // conditional compilation in all code using this function - void SetItemHelpText(unsigned int WXUNUSED(n), - const wxString& WXUNUSED(helpText)) - { - } -#endif // wxUSE_HELP - - // returns the radio item at the given position or wxNOT_FOUND if none - // (currently implemented only under MSW and GTK) - virtual int GetItemFromPoint(const wxPoint& WXUNUSED(pt)) const - { - return wxNOT_FOUND; - } - - - // deprecated functions - // -------------------- - -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( int GetNumberOfRowsOrCols() const ); - wxDEPRECATED( void SetNumberOfRowsOrCols(int n) ); -#endif // WXWIN_COMPATIBILITY_2_4 - -protected: - wxRadioBoxBase() - { - m_numCols = - m_numRows = - m_majorDim = 0; - -#if wxUSE_TOOLTIPS - m_itemsTooltips = NULL; -#endif // wxUSE_TOOLTIPS - } - - // return the number of items in major direction (which depends on whether - // we have wxRA_SPECIFY_COLS or wxRA_SPECIFY_ROWS style) - unsigned int GetMajorDim() const { return m_majorDim; } - - // sets m_majorDim and also updates m_numCols/Rows - // - // the style parameter should be the style of the radiobox itself - void SetMajorDim(unsigned int majorDim, long style); - -#if wxUSE_TOOLTIPS - // called from SetItemToolTip() to really set the tooltip for the specified - // item in the box (or, if tooltip is NULL, to remove any existing one). - // - // NB: this function should really be pure virtual but to avoid breaking - // the build of the ports for which it's not implemented yet we provide - // an empty stub in the base class for now - virtual void DoSetItemToolTip(unsigned int item, wxToolTip *tooltip); - - // returns true if we have any item tooltips - bool HasItemToolTips() const { return m_itemsTooltips != NULL; } -#endif // wxUSE_TOOLTIPS - -#if wxUSE_HELP - // Retrieve help text for an item: this is a helper for the implementation - // of wxWindow::GetHelpTextAtPoint() in the real radiobox class - wxString DoGetHelpTextAtPoint(const wxWindow *derived, - const wxPoint& pt, - wxHelpEvent::Origin origin) const; -#endif // wxUSE_HELP - -private: - // the number of elements in major dimension (i.e. number of columns if - // wxRA_SPECIFY_COLS or the number of rows if wxRA_SPECIFY_ROWS) and also - // the number of rows/columns calculated from it - unsigned int m_majorDim, - m_numCols, - m_numRows; - -#if wxUSE_TOOLTIPS - // array of tooltips for the individual items - // - // this array is initially NULL and initialized on first use - wxToolTipArray *m_itemsTooltips; -#endif - -#if wxUSE_HELP - // help text associated with a particular item or empty string if none - wxArrayString m_itemsHelpTexts; -#endif // wxUSE_HELP -}; - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/radiobox.h" -#elif defined(__WXMSW__) - #include "wx/msw/radiobox.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/radiobox.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/radiobox.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/radiobox.h" -#elif defined(__WXMAC__) - #include "wx/mac/radiobox.h" -#elif defined(__WXCOCOA__) - #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 - -#endif // _WX_RADIOBOX_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/radiobut.h b/desmume/src/windows/wx/include/wx/radiobut.h deleted file mode 100644 index 598c44c30..000000000 --- a/desmume/src/windows/wx/include/wx/radiobut.h +++ /dev/null @@ -1,61 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/radiobut.h -// Purpose: wxRadioButton declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 07.09.00 -// RCS-ID: $Id: radiobut.h 37066 2006-01-23 03:27:34Z MR $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RADIOBUT_H_BASE_ -#define _WX_RADIOBUT_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_RADIOBTN - -/* - There is no wxRadioButtonBase class as wxRadioButton interface is the same - as wxCheckBox(Base), but under some platforms wxRadioButton really - derives from wxCheckBox and on the others it doesn't. - - The pseudo-declaration of wxRadioButtonBase would look like this: - - class wxRadioButtonBase : public ... - { - public: - virtual void SetValue(bool value); - virtual bool GetValue() const; - }; - */ - -#include "wx/control.h" - -extern WXDLLEXPORT_DATA(const wxChar) wxRadioButtonNameStr[]; - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/radiobut.h" -#elif defined(__WXMSW__) - #include "wx/msw/radiobut.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/radiobut.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/radiobut.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/radiobut.h" -#elif defined(__WXMAC__) - #include "wx/mac/radiobut.h" -#elif defined(__WXCOCOA__) - #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 - -#endif - // _WX_RADIOBUT_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/rawbmp.h b/desmume/src/windows/wx/include/wx/rawbmp.h deleted file mode 100644 index 6360a6de5..000000000 --- a/desmume/src/windows/wx/include/wx/rawbmp.h +++ /dev/null @@ -1,713 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/rawbmp.h -// Purpose: macros for fast, raw bitmap data access -// Author: Eric Kidd, Vadim Zeitlin -// Modified by: -// Created: 10.03.03 -// RCS-ID: $Id: rawbmp.h 41661 2006-10-06 16:34:45Z PC $ -// Copyright: (c) 2002 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RAWBMP_H_BASE_ -#define _WX_RAWBMP_H_BASE_ - -#include "wx/image.h" - -// ---------------------------------------------------------------------------- -// Abstract Pixel API -// -// We need to access our raw bitmap data (1) portably and (2) efficiently. -// We do this using a two-dimensional "iteration" interface. Performance -// is extremely important here: these functions will be called hundreds -// of thousands of times in a row, and even small inefficiencies will -// make applications seem slow. -// -// We can't always rely on inline functions, because not all compilers actually -// bother to inline them unless we crank the optimization levels way up. -// Therefore, we also provide macros to wring maximum speed out of compiler -// unconditionally (e.g. even in debug builds). Of course, if the performance -// isn't absolutely crucial for you you shouldn't be using them but the inline -// functions instead. -// ---------------------------------------------------------------------------- - -/* - Usage example: - - typedef wxPixelData<wxBitmap, wxNativePixelFormat> PixelData; - - wxBitmap bmp; - PixelData data(bmp); - if ( !data ) - { - ... raw access to bitmap data unavailable, do something else ... - return; - } - - if ( data.GetWidth() < 20 || data.GetHeight() < 20 ) - { - ... complain: the bitmap it too small ... - return; - } - - PixelData::Iterator p(data); - - // we draw a (10, 10)-(20, 20) rect manually using the given r, g, b - p.Offset(data, 10, 10); - - for ( int y = 0; y < 10; ++y ) - { - PixelData::Iterator rowStart = p; - - for ( int x = 0; x < 10; ++x, ++p ) - { - p.Red() = r; - p.Green() = g; - p.Blue() = b; - } - - p = rowStart; - p.OffsetY(data, 1); - } - */ - -/* - Note: we do not use WXDLLEXPORT with classes in this file because VC++ has - problems with exporting inner class defined inside a specialization of a - template class from a DLL. Besides, as all the methods are inline it's not - really necessary to put them in DLL at all. - */ - -// ---------------------------------------------------------------------------- -// wxPixelFormat -// ---------------------------------------------------------------------------- - -/* - wxPixelFormat is a template class describing the bitmap data format. It - contains the constants describing the format of pixel data, but does not - describe how the entire bitmap is stored (i.e. top-to-bottom, - bottom-to-top, ...). It is also a "traits"-like class, i.e. it only - contains some constants and maybe static methods but nothing more, so it - can be safely used without incurring any overhead as all accesses to it are - done at compile-time. - - Current limitations: we don't support RAGABA and ARAGAB formats supported - by Mac OS X. If there is sufficient interest, these classes could be - extended to deal with them. Neither do we support alpha channel having - different representation from the RGB ones (happens under QNX/Photon I - think), but again this could be achieved with some small extra effort. - - Template parameters are: - - type of a single pixel component - - size of the single pixel in bits - - indices of red, green and blue pixel components inside the pixel - - index of the alpha component or -1 if none - - type which can contain the full pixel value (all channels) - */ - -template <class Channel, - size_t Bpp, int R, int G, int B, int A = -1, - class Pixel = wxUint32> - -struct wxPixelFormat -{ - // iterator over pixels is usually of type "ChannelType *" - typedef Channel ChannelType; - - // the type which may hold the entire pixel value - typedef Pixel PixelType; - - // NB: using static ints initialized inside the class declaration is not - // portable as it doesn't work with VC++ 6, so we must use enums - - // size of one pixel in bits - enum { BitsPerPixel = Bpp }; - - // size of one pixel in ChannelType units (usually bytes) - enum { SizePixel = Bpp / (8 * sizeof(Channel)) }; - - // the channels indices inside the pixel - enum - { - RED = R, - GREEN = G, - BLUE = B, - ALPHA = A - }; - - // true if we have an alpha channel (together with the other channels, this - // doesn't cover the case of wxImage which stores alpha separately) - enum { HasAlpha = A != -1 }; -}; - -// some "predefined" pixel formats -// ------------------------------- - -// wxImage format is common to all platforms -typedef wxPixelFormat<unsigned char, 24, 0, 1, 2> wxImagePixelFormat; - -// the (most common) native bitmap format without alpha support -#if defined(__WXMSW__) - // under MSW the RGB components are reversed, they're in BGR order - typedef wxPixelFormat<unsigned char, 24, 2, 1, 0> wxNativePixelFormat; - - #define wxPIXEL_FORMAT_ALPHA 3 -#elif defined(__WXMAC__) - // under Mac, first component is unused but still present, hence we use - // 32bpp, not 24 - typedef wxPixelFormat<unsigned char, 32, 1, 2, 3> wxNativePixelFormat; - - #define wxPIXEL_FORMAT_ALPHA 0 -#elif defined(__WXCOCOA__) - // Cocoa is standard RGB or RGBA (normally it is RGBA) - typedef wxPixelFormat<unsigned char, 24, 0, 1, 2> wxNativePixelFormat; - - #define wxPIXEL_FORMAT_ALPHA 3 -#elif defined(__WXGTK__) - // Under GTK+ 2.X we use GdkPixbuf, which is standard RGB or RGBA - typedef wxPixelFormat<unsigned char, 24, 0, 1, 2> wxNativePixelFormat; - - #define wxPIXEL_FORMAT_ALPHA 3 -#endif - -// the (most common) native format for bitmaps with alpha channel -#ifdef wxPIXEL_FORMAT_ALPHA - typedef wxPixelFormat<unsigned char, 32, - wxNativePixelFormat::RED, - wxNativePixelFormat::GREEN, - wxNativePixelFormat::BLUE, - wxPIXEL_FORMAT_ALPHA> wxAlphaPixelFormat; -#endif // wxPIXEL_FORMAT_ALPHA - -// we also define the (default/best) pixel format for the given class: this is -// used as default value for the pixel format in wxPixelIterator template -template <class T> struct wxPixelFormatFor; - -#if wxUSE_IMAGE -// wxPixelFormatFor is only defined for wxImage, attempt to use it with other -// classes (wxBitmap...) will result in compile errors which is exactly what we -// want -template <> -struct wxPixelFormatFor<wxImage> -{ - typedef wxImagePixelFormat Format; -}; -#endif //wxUSE_IMAGE - -// ---------------------------------------------------------------------------- -// wxPixelData -// ---------------------------------------------------------------------------- - -/* - wxPixelDataBase is just a helper for wxPixelData: it contains things common - to both wxImage and wxBitmap specializations. - */ -class wxPixelDataBase -{ -public: - // origin of the rectangular region we represent - wxPoint GetOrigin() const { return m_ptOrigin; } - - // width and height of the region we represent - int GetWidth() const { return m_width; } - int GetHeight() const { return m_height; } - - wxSize GetSize() const { return wxSize(m_width, m_height); } - - // the distance between two rows - int GetRowStride() const { return m_stride; } - -// private: -- see comment in the beginning of the file - - // the origin of this image inside the bigger bitmap (usually (0, 0)) - wxPoint m_ptOrigin; - - // the size of the image we address, in pixels - int m_width, - m_height; - - // this parameter is the offset of the start of the (N+1)st row from the - // Nth one and can be different from m_bypp*width in some cases: - // a) the most usual one is to force 32/64 bit alignment of rows - // b) another one is for bottom-to-top images where it's negative - // c) finally, it could conceivably be 0 for the images with all - // lines being identical - int m_stride; - -protected: - // ctor is protected because this class is only meant to be used as the - // base class by wxPixelData - wxPixelDataBase() - { - m_width = - m_height = - m_stride = 0; - } -}; - -/* - wxPixelData represents the entire bitmap data, i.e. unlike - wxPixelFormat (which it uses) it also stores the global bitmap - characteristics such as its size, inter-row separation and so on. - - Because of this it can be used to move the pixel iterators (which don't - have enough information about the bitmap themselves). This may seem a bit - unnatural but must be done in this way to keep the iterator objects as - small as possible for maximum efficiency as otherwise they wouldn't be put - into the CPU registers by the compiler any more. - - Implementation note: we use the standard workaround for lack of partial - template specialization support in VC (both 6 and 7): instead of partly - specializing the class Foo<T, U> for some T we introduce FooOut<T> and - FooIn<U> nested in it, make Foo<T, U> equivalent to FooOut<T>::FooIn<U> and - fully specialize FooOut. - - Also note that this class doesn't have any default definition because we - can't really do anything without knowing the exact image class. We do - provide wxPixelDataBase to make it simpler to write new wxPixelData - specializations. - */ - -// we need to define this skeleton template to mollify VC++ -template <class Image> -struct wxPixelDataOut -{ - template <class PixelFormat> - class wxPixelDataIn - { - public: - class Iterator { }; - }; -}; - -#if wxUSE_IMAGE -// wxPixelData specialization for wxImage: this is the simplest case as we -// don't have to care about different pixel formats here -template <> -struct wxPixelDataOut<wxImage> -{ - // NB: this is a template class even though it doesn't use its template - // parameter because otherwise wxPixelData couldn't compile - template <class dummyPixelFormat> - class wxPixelDataIn : public wxPixelDataBase - { - public: - // the type of the class we're working with - typedef wxImage ImageType; - - // the iterator which should be used for working with data in this - // format - class Iterator - { - public: - // the pixel format we use - typedef wxImagePixelFormat PixelFormat; - - // the type of the pixel components - typedef typename dummyPixelFormat::ChannelType ChannelType; - - // the pixel data we're working with - typedef - wxPixelDataOut<wxImage>::wxPixelDataIn<PixelFormat> PixelData; - - // go back to (0, 0) - void Reset(const PixelData& data) - { - *this = data.GetPixels(); - } - - // creates the iterator pointing to the beginning of data - Iterator(PixelData& data) - { - Reset(data); - } - - // creates the iterator initially pointing to the image origin - Iterator(const wxImage& image) - { - m_pRGB = image.GetData(); - - if ( image.HasAlpha() ) - { - m_pAlpha = image.GetAlpha(); - } - else // alpha is not used at all - { - m_pAlpha = NULL; - } - } - - // true if the iterator is valid - bool IsOk() const { return m_pRGB != NULL; } - - - // navigation - // ---------- - - // advance the iterator to the next pixel, prefix version - Iterator& operator++() - { - m_pRGB += PixelFormat::SizePixel; - if ( m_pAlpha ) - ++m_pAlpha; - - return *this; - } - - // postfix (hence less efficient -- don't use it unless you - // absolutely must) version - Iterator operator++(int) - { - Iterator p(*this); - ++*this; - return p; - } - - // move x pixels to the right and y down - // - // note that the rows don't wrap! - void Offset(const PixelData& data, int x, int y) - { - m_pRGB += data.GetRowStride()*y + PixelFormat::SizePixel*x; - if ( m_pAlpha ) - m_pAlpha += data.GetWidth() + x; - } - - // move x pixels to the right (again, no row wrapping) - void OffsetX(const PixelData& WXUNUSED(data), int x) - { - m_pRGB += PixelFormat::SizePixel*x; - if ( m_pAlpha ) - m_pAlpha += x; - } - - // move y rows to the bottom - void OffsetY(const PixelData& data, int y) - { - m_pRGB += data.GetRowStride()*y; - if ( m_pAlpha ) - m_pAlpha += data.GetWidth(); - } - - // go to the given position - void MoveTo(const PixelData& data, int x, int y) - { - Reset(data); - Offset(data, x, y); - } - - - // data access - // ----------- - - // access to invidividual colour components - ChannelType& Red() { return m_pRGB[PixelFormat::RED]; } - ChannelType& Green() { return m_pRGB[PixelFormat::GREEN]; } - ChannelType& Blue() { return m_pRGB[PixelFormat::BLUE]; } - ChannelType& Alpha() { return *m_pAlpha; } - - // private: -- see comment in the beginning of the file - - // pointer into RGB buffer - unsigned char *m_pRGB; - - // pointer into alpha buffer or NULL if alpha isn't used - unsigned char *m_pAlpha; - }; - - // initializes us with the data of the given image - wxPixelDataIn(ImageType& image) : m_image(image), m_pixels(image) - { - m_width = image.GetWidth(); - m_height = image.GetHeight(); - m_stride = Iterator::SizePixel * m_width; - } - - // initializes us with the given region of the specified image - wxPixelDataIn(ImageType& image, - const wxPoint& pt, - const wxSize& sz) : m_image(image), m_pixels(image) - { - m_stride = Iterator::SizePixel * m_width; - - InitRect(pt, sz); - } - - // initializes us with the given region of the specified image - wxPixelDataIn(ImageType& image, - const wxRect& rect) : m_image(image), m_pixels(image) - { - m_stride = Iterator::SizePixel * m_width; - - InitRect(rect.GetPosition(), rect.GetSize()); - } - - // we evaluate to true only if we could get access to bitmap data - // successfully - operator bool() const { return m_pixels.IsOk(); } - - // get the iterator pointing to the origin - Iterator GetPixels() const { return m_pixels; } - - private: - void InitRect(const wxPoint& pt, const wxSize& sz) - { - m_width = sz.x; - m_height = sz.y; - - m_ptOrigin = pt; - m_pixels.Offset(*this, pt.x, pt.y); - } - - // the image we're working with - ImageType& m_image; - - // the iterator pointing to the image origin - Iterator m_pixels; - }; -}; -#endif //wxUSE_IMAGE - -#if wxUSE_GUI -// wxPixelData specialization for wxBitmap: here things are more interesting as -// we also have to support different pixel formats -template <> -struct wxPixelDataOut<wxBitmap> -{ - template <class Format> - class wxPixelDataIn : public wxPixelDataBase - { - public: - // the type of the class we're working with - typedef wxBitmap ImageType; - - class Iterator - { - public: - // the pixel format we use - typedef Format PixelFormat; - - // the type of the pixel components - typedef typename PixelFormat::ChannelType ChannelType; - - // the pixel data we're working with - typedef wxPixelDataOut<wxBitmap>::wxPixelDataIn<Format> PixelData; - - - // go back to (0, 0) - void Reset(const PixelData& data) - { - *this = data.GetPixels(); - } - - // initializes the iterator to point to the origin of the given - // pixel data - Iterator(PixelData& data) - { - Reset(data); - } - - // initializes the iterator to point to the origin of the given - // bitmap - Iterator(wxBitmap& bmp, PixelData& data) - { - // using cast here is ugly but it should be safe as - // GetRawData() real return type should be consistent with - // BitsPerPixel (which is in turn defined by ChannelType) and - // this is the only thing we can do without making GetRawData() - // a template function which is undesirable - m_ptr = (ChannelType *) - bmp.GetRawData(data, PixelFormat::BitsPerPixel); - } - - // default constructor - Iterator() - { - m_ptr = NULL; - } - - // return true if this iterator is valid - bool IsOk() const { return m_ptr != NULL; } - - - // navigation - // ---------- - - // advance the iterator to the next pixel, prefix version - Iterator& operator++() - { - m_ptr += PixelFormat::SizePixel; - - return *this; - } - - // postfix (hence less efficient -- don't use it unless you - // absolutely must) version - Iterator operator++(int) - { - Iterator p(*this); - ++*this; - return p; - } - - // move x pixels to the right and y down - // - // note that the rows don't wrap! - void Offset(const PixelData& data, int x, int y) - { - m_ptr += data.GetRowStride()*y + PixelFormat::SizePixel*x; - } - - // move x pixels to the right (again, no row wrapping) - void OffsetX(const PixelData& WXUNUSED(data), int x) - { - m_ptr += PixelFormat::SizePixel*x; - } - - // move y rows to the bottom - void OffsetY(const PixelData& data, int y) - { - m_ptr += data.GetRowStride()*y; - } - - // go to the given position - void MoveTo(const PixelData& data, int x, int y) - { - Reset(data); - Offset(data, x, y); - } - - - // data access - // ----------- - - // access to invidividual colour components - ChannelType& Red() { return m_ptr[PixelFormat::RED]; } - ChannelType& Green() { return m_ptr[PixelFormat::GREEN]; } - ChannelType& Blue() { return m_ptr[PixelFormat::BLUE]; } - ChannelType& Alpha() { return m_ptr[PixelFormat::ALPHA]; } - - // address the pixel contents directly - // - // warning: the format is platform dependent - typename PixelFormat::PixelType& Data() - { return *(typename PixelFormat::PixelType *)m_ptr; } - - // private: -- see comment in the beginning of the file - - // for efficiency reasons this class should not have any other - // fields, otherwise it won't be put into a CPU register (as it - // should inside the inner loops) by some compilers, notably gcc - ChannelType *m_ptr; - }; - - // ctor associates this pointer with a bitmap and locks the bitmap for - // raw access, it will be unlocked only by our dtor and so these - // objects should normally be only created on the stack, i.e. have - // limited life-time - wxPixelDataIn(wxBitmap& bmp) : m_bmp(bmp), m_pixels(bmp, *this) - { - } - - wxPixelDataIn(wxBitmap& bmp, const wxRect& rect) - : m_bmp(bmp), m_pixels(bmp, *this) - { - InitRect(rect.GetPosition(), rect.GetSize()); - } - - wxPixelDataIn(wxBitmap& bmp, const wxPoint& pt, const wxSize& sz) - : m_bmp(bmp), m_pixels(bmp, *this) - { - InitRect(pt, sz); - } - - // we evaluate to true only if we could get access to bitmap data - // successfully - operator bool() const { return m_pixels.IsOk(); } - - // get the iterator pointing to the origin - Iterator GetPixels() const { return m_pixels; } - - // dtor unlocks the bitmap - ~wxPixelDataIn() - { - m_bmp.UngetRawData(*this); - } - - // call this to indicate that we should use the alpha channel - void UseAlpha() { m_bmp.UseAlpha(); } - - // private: -- see comment in the beginning of the file - - // the bitmap we're associated with - wxBitmap m_bmp; - - // the iterator pointing to the image origin - Iterator m_pixels; - - private: - void InitRect(const wxPoint& pt, const wxSize& sz) - { - m_pixels.Offset(*this, pt.x, pt.y); - - m_ptOrigin = pt; - m_width = sz.x; - m_height = sz.y; - } - }; -}; -#endif //wxUSE_GUI - -template <class Image, class PixelFormat = wxPixelFormatFor<Image> > -class wxPixelData : - public wxPixelDataOut<Image>::template wxPixelDataIn<PixelFormat> -{ -public: - typedef - typename wxPixelDataOut<Image>::template wxPixelDataIn<PixelFormat> - Base; - - wxPixelData(Image& image) : Base(image) { } - - wxPixelData(Image& i, const wxRect& rect) : Base(i, rect) { } - - wxPixelData(Image& i, const wxPoint& pt, const wxSize& sz) - : Base(i, pt, sz) - { - } -}; - - -// some "predefined" pixel data classes -#if wxUSE_IMAGE -typedef wxPixelData<wxImage> wxImagePixelData; -#endif //wxUSE_IMAGE -#if wxUSE_GUI -typedef wxPixelData<wxBitmap, wxNativePixelFormat> wxNativePixelData; -typedef wxPixelData<wxBitmap, wxAlphaPixelFormat> wxAlphaPixelData; - -#endif //wxUSE_GUI - -// ---------------------------------------------------------------------------- -// wxPixelIterator -// ---------------------------------------------------------------------------- - -/* - wxPixel::Iterator represents something which points to the pixel data and - allows us to iterate over it. In the simplest case of wxBitmap it is, - indeed, just a pointer, but it can be something more complicated and, - moreover, you are free to specialize it for other image classes and bitmap - formats. - - Note that although it would have been much more intuitive to have a real - class here instead of what we have now, this class would need two template - parameters, and this can't be done because we'd need compiler support for - partial template specialization then and neither VC6 nor VC7 provide it. - */ -template < class Image, class PixelFormat = wxPixelFormatFor<Image> > -struct wxPixelIterator : public wxPixelData<Image, PixelFormat>::Iterator -{ -}; - -#endif // _WX_RAWBMP_H_BASE_ - diff --git a/desmume/src/windows/wx/include/wx/recguard.h b/desmume/src/windows/wx/include/wx/recguard.h deleted file mode 100644 index f2c6ffe02..000000000 --- a/desmume/src/windows/wx/include/wx/recguard.h +++ /dev/null @@ -1,53 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/recguard.h -// Purpose: declaration and implementation of wxRecursionGuard class -// Author: Vadim Zeitlin -// Modified by: -// Created: 14.08.2003 -// RCS-ID: $Id: recguard.h 29243 2004-09-21 18:15:59Z ABX $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RECGUARD_H_ -#define _WX_RECGUARD_H_ - -#include "wx/defs.h" - -// ---------------------------------------------------------------------------- -// wxRecursionGuardFlag is used with wxRecursionGuard -// ---------------------------------------------------------------------------- - -typedef int wxRecursionGuardFlag; - -// ---------------------------------------------------------------------------- -// wxRecursionGuard is the simplest way to protect a function from reentrancy -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxRecursionGuard -{ -public: - wxRecursionGuard(wxRecursionGuardFlag& flag) - : m_flag(flag) - { - m_isInside = flag++ != 0; - } - - ~wxRecursionGuard() - { - wxASSERT_MSG( m_flag > 0, _T("unbalanced wxRecursionGuards!?") ); - - m_flag--; - } - - bool IsInside() const { return m_isInside; } - -private: - wxRecursionGuardFlag& m_flag; - - // true if the flag had been already set when we were created - bool m_isInside; -}; - -#endif // _WX_RECGUARD_H_ - diff --git a/desmume/src/windows/wx/include/wx/regex.h b/desmume/src/windows/wx/include/wx/regex.h deleted file mode 100644 index 0e69b8359..000000000 --- a/desmume/src/windows/wx/include/wx/regex.h +++ /dev/null @@ -1,166 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/regex.h -// Purpose: regular expression matching -// Author: Karsten Ballueder -// Modified by: VZ at 13.07.01 (integrated to wxWin) -// Created: 05.02.2000 -// RCS-ID: $Id: regex.h 57779 2009-01-02 17:35:16Z PC $ -// Copyright: (c) 2000 Karsten Ballueder <ballueder@gmx.net> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_REGEX_H_ -#define _WX_REGEX_H_ - -#include "wx/defs.h" - -#if wxUSE_REGEX - -#include "wx/string.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// flags for regex compilation: these can be used with Compile() -enum -{ - // use extended regex syntax - wxRE_EXTENDED = 0, - - // use advanced RE syntax (built-in regex only) -#ifdef wxHAS_REGEX_ADVANCED - wxRE_ADVANCED = 1, -#endif - - // use basic RE syntax - wxRE_BASIC = 2, - - // ignore case in match - wxRE_ICASE = 4, - - // only check match, don't set back references - wxRE_NOSUB = 8, - - // if not set, treat '\n' as an ordinary character, otherwise it is - // special: it is not matched by '.' and '^' and '$' always match - // after/before it regardless of the setting of wxRE_NOT[BE]OL - wxRE_NEWLINE = 16, - - // default flags - wxRE_DEFAULT = wxRE_EXTENDED -}; - -// flags for regex matching: these can be used with Matches() -// -// these flags are mainly useful when doing several matches in a long string, -// they can be used to prevent erroneous matches for '^' and '$' -enum -{ - // '^' doesn't match at the start of line - wxRE_NOTBOL = 32, - - // '$' doesn't match at the end of line - wxRE_NOTEOL = 64 -}; - -// ---------------------------------------------------------------------------- -// wxRegEx: a regular expression -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_BASE wxRegExImpl; - -class WXDLLIMPEXP_BASE wxRegEx -{ -public: - // default ctor: use Compile() later - wxRegEx() { Init(); } - - // create and compile - wxRegEx(const wxString& expr, int flags = wxRE_DEFAULT) - { - Init(); - (void)Compile(expr, flags); - } - - // return true if this is a valid compiled regular expression - bool IsValid() const { return m_impl != NULL; } - - // compile the string into regular expression, return true if ok or false - // if string has a syntax error - bool Compile(const wxString& pattern, int flags = wxRE_DEFAULT); - - // matches the precompiled regular expression against a string, return - // true if matches and false otherwise - // - // flags may be combination of wxRE_NOTBOL and wxRE_NOTEOL - // len may be the length of text (ignored by most system regex libs) - // - // may only be called after successful call to Compile() - bool Matches(const wxChar *text, int flags = 0) const; - bool Matches(const wxChar *text, int flags, size_t len) const; - bool Matches(const wxString& text, int flags = 0) const - { return Matches(text.c_str(), flags, text.length()); } - - // get the start index and the length of the match of the expression - // (index 0) or a bracketed subexpression (index != 0) - // - // may only be called after successful call to Matches() - // - // return false if no match or on error - bool GetMatch(size_t *start, size_t *len, size_t index = 0) const; - - // return the part of string corresponding to the match, empty string is - // returned if match failed - // - // may only be called after successful call to Matches() - wxString GetMatch(const wxString& text, size_t index = 0) const; - - // return the size of the array of matches, i.e. the number of bracketed - // subexpressions plus one for the expression itself, or 0 on error. - // - // may only be called after successful call to Compile() - size_t GetMatchCount() const; - - // replaces the current regular expression in the string pointed to by - // pattern, with the text in replacement and return number of matches - // replaced (maybe 0 if none found) or -1 on error - // - // the replacement text may contain backreferences (\number) which will be - // replaced with the value of the corresponding subexpression in the - // pattern match - // - // maxMatches may be used to limit the number of replacements made, setting - // it to 1, for example, will only replace first occurence (if any) of the - // pattern in the text while default value of 0 means replace all - int Replace(wxString *text, const wxString& replacement, - size_t maxMatches = 0) const; - - // replace the first occurence - int ReplaceFirst(wxString *text, const wxString& replacement) const - { return Replace(text, replacement, 1); } - - // replace all occurences: this is actually a synonym for Replace() - int ReplaceAll(wxString *text, const wxString& replacement) const - { return Replace(text, replacement, 0); } - - // dtor not virtual, don't derive from this class - ~wxRegEx(); - -private: - // common part of all ctors - void Init(); - - // the real guts of this class - wxRegExImpl *m_impl; - - // as long as the class wxRegExImpl is not ref-counted, - // instances of the handle wxRegEx must not be copied. - wxRegEx(const wxRegEx&); - wxRegEx &operator=(const wxRegEx&); -}; - -#endif // wxUSE_REGEX - -#endif // _WX_REGEX_H_ - diff --git a/desmume/src/windows/wx/include/wx/region.h b/desmume/src/windows/wx/include/wx/region.h deleted file mode 100644 index 32c27cce0..000000000 --- a/desmume/src/windows/wx/include/wx/region.h +++ /dev/null @@ -1,300 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/region.h -// Purpose: Base header for wxRegion -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: region.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_REGION_H_BASE_ -#define _WX_REGION_H_BASE_ - -#include "wx/gdiobj.h" -#include "wx/gdicmn.h" - -class WXDLLIMPEXP_FWD_CORE wxBitmap; -class WXDLLIMPEXP_FWD_CORE wxColour; -class WXDLLIMPEXP_FWD_CORE wxRegion; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// result of wxRegion::Contains() call -enum wxRegionContain -{ - wxOutRegion = 0, - wxPartRegion = 1, - wxInRegion = 2 -}; - -// these constants are used with wxRegion::Combine() in the ports which have -// this method -enum wxRegionOp -{ - // Creates the intersection of the two combined regions. - wxRGN_AND, - - // Creates a copy of the region - wxRGN_COPY, - - // Combines the parts of first region that are not in the second one - wxRGN_DIFF, - - // Creates the union of two combined regions. - wxRGN_OR, - - // Creates the union of two regions except for any overlapping areas. - wxRGN_XOR -}; - -// ---------------------------------------------------------------------------- -// wxRegionBase defines wxRegion API -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxRegionBase : public wxGDIObject -{ -public: - // ctors - // ----- - - // none are defined here but the following should be available: -#if 0 - wxRegion(); - wxRegion(wxCoord x, wxCoord y, wxCoord w, wxCoord h); - wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight); - wxRegion(const wxRect& rect); - wxRegion(size_t n, const wxPoint *points, int fillStyle = wxODDEVEN_RULE); - wxRegion(const wxBitmap& bmp); - wxRegion(const wxBitmap& bmp, const wxColour& transp, int tolerance = 0); -#endif // 0 - - // operators - // --------- - - bool operator==(const wxRegion& region) const { return IsEqual(region); } - bool operator!=(const wxRegion& region) const { return !(*this == region); } - - - // accessors - // --------- - - bool Ok() const { return IsOk(); } - bool IsOk() const { return m_refData != NULL; } - - // Is region empty? - virtual bool IsEmpty() const = 0; - bool Empty() const { return IsEmpty(); } - - // Is region equal (i.e. covers the same area as another one)? - bool IsEqual(const wxRegion& region) const; - - // Get the bounding box - bool GetBox(wxCoord& x, wxCoord& y, wxCoord& w, wxCoord& h) const - { return DoGetBox(x, y, w, h); } - wxRect GetBox() const - { - wxCoord x, y, w, h; - return DoGetBox(x, y, w, h) ? wxRect(x, y, w, h) : wxRect(); - } - - // Test if the given point or rectangle is inside this region - wxRegionContain Contains(wxCoord x, wxCoord y) const - { return DoContainsPoint(x, y); } - wxRegionContain Contains(const wxPoint& pt) const - { return DoContainsPoint(pt.x, pt.y); } - wxRegionContain Contains(wxCoord x, wxCoord y, wxCoord w, wxCoord h) const - { return DoContainsRect(wxRect(x, y, w, h)); } - wxRegionContain Contains(const wxRect& rect) const - { return DoContainsRect(rect); } - - - // operations - // ---------- - - virtual void Clear() = 0; - - // Move the region - bool Offset(wxCoord x, wxCoord y) - { return DoOffset(x, y); } - bool Offset(const wxPoint& pt) - { return DoOffset(pt.x, pt.y); } - - // Union rectangle or region with this region. - bool Union(wxCoord x, wxCoord y, wxCoord w, wxCoord h) - { return DoUnionWithRect(wxRect(x, y, w, h)); } - bool Union(const wxRect& rect) - { return DoUnionWithRect(rect); } - bool Union(const wxRegion& region) - { return DoUnionWithRegion(region); } - -#if wxUSE_IMAGE - // Use the non-transparent pixels of a wxBitmap for the region to combine - // with this region. First version takes transparency from bitmap's mask, - // second lets the user specify the colour to be treated as transparent - // along with an optional tolerance value. - // NOTE: implemented in common/rgncmn.cpp - bool Union(const wxBitmap& bmp); - bool Union(const wxBitmap& bmp, const wxColour& transp, int tolerance = 0); -#endif // wxUSE_IMAGE - - // Intersect rectangle or region with this one. - bool Intersect(wxCoord x, wxCoord y, wxCoord w, wxCoord h); - bool Intersect(const wxRect& rect); - bool Intersect(const wxRegion& region) - { return DoIntersect(region); } - - // Subtract rectangle or region from this: - // Combines the parts of 'this' that are not part of the second region. - bool Subtract(wxCoord x, wxCoord y, wxCoord w, wxCoord h); - bool Subtract(const wxRect& rect); - bool Subtract(const wxRegion& region) - { return DoSubtract(region); } - - // XOR: the union of two combined regions except for any overlapping areas. - bool Xor(wxCoord x, wxCoord y, wxCoord w, wxCoord h); - bool Xor(const wxRect& rect); - bool Xor(const wxRegion& region) - { return DoXor(region); } - - - // Convert the region to a B&W bitmap with the white pixels being inside - // the region. - wxBitmap ConvertToBitmap() const; - -protected: - virtual bool DoIsEqual(const wxRegion& region) const = 0; - virtual bool DoGetBox(wxCoord& x, wxCoord& y, wxCoord& w, wxCoord& h) const = 0; - virtual wxRegionContain DoContainsPoint(wxCoord x, wxCoord y) const = 0; - virtual wxRegionContain DoContainsRect(const wxRect& rect) const = 0; - - virtual bool DoOffset(wxCoord x, wxCoord y) = 0; - - virtual bool DoUnionWithRect(const wxRect& rect) = 0; - virtual bool DoUnionWithRegion(const wxRegion& region) = 0; - - virtual bool DoIntersect(const wxRegion& region) = 0; - virtual bool DoSubtract(const wxRegion& region) = 0; - virtual bool DoXor(const wxRegion& region) = 0; -}; - -// 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__) || \ - defined(__WXMAC__) || \ - defined(__WXPM__) - -#define wxHAS_REGION_COMBINE - -class WXDLLEXPORT wxRegionWithCombine : public wxRegionBase -{ -public: - // these methods are not part of public API as they're not implemented on - // all ports - bool Combine(wxCoord x, wxCoord y, wxCoord w, wxCoord h, wxRegionOp op); - bool Combine(const wxRect& rect, wxRegionOp op); - bool Combine(const wxRegion& region, wxRegionOp op) - { return DoCombine(region, op); } - - -protected: - // the real Combine() method, to be defined in the derived class - virtual bool DoCombine(const wxRegion& region, wxRegionOp op) = 0; - - // implement some wxRegionBase pure virtuals in terms of Combine() - virtual bool DoUnionWithRect(const wxRect& rect); - virtual bool DoUnionWithRegion(const wxRegion& region); - virtual bool DoIntersect(const wxRegion& region); - virtual bool DoSubtract(const wxRegion& region); - virtual bool DoXor(const wxRegion& region); -}; - -#endif // ports with wxRegion::Combine() - -#if defined(__WXPALMOS__) - #include "wx/palmos/region.h" -#elif defined(__WXMSW__) - #include "wx/msw/region.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/region.h" -#elif defined(__WXGTK__) - #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__) - #include "wx/mac/region.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/region.h" -#elif defined(__WXPM__) - #include "wx/os2/region.h" -#endif - -// ---------------------------------------------------------------------------- -// inline functions implementation -// ---------------------------------------------------------------------------- - -// NB: these functions couldn't be defined in the class declaration as they use -// wxRegion and so can be only defined after including the header declaring -// the real class - -inline bool wxRegionBase::Intersect(const wxRect& rect) -{ - return DoIntersect(wxRegion(rect)); -} - -inline bool wxRegionBase::Subtract(const wxRect& rect) -{ - return DoSubtract(wxRegion(rect)); -} - -inline bool wxRegionBase::Xor(const wxRect& rect) -{ - return DoXor(wxRegion(rect)); -} - -// ...and these functions are here because they call the ones above, and its -// not really proper to call an inline function before its defined inline. - -inline bool wxRegionBase::Intersect(wxCoord x, wxCoord y, wxCoord w, wxCoord h) -{ - return Intersect(wxRect(x, y, w, h)); -} - -inline bool wxRegionBase::Subtract(wxCoord x, wxCoord y, wxCoord w, wxCoord h) -{ - return Subtract(wxRect(x, y, w, h)); -} - -inline bool wxRegionBase::Xor(wxCoord x, wxCoord y, wxCoord w, wxCoord h) -{ - return Xor(wxRect(x, y, w, h)); -} - -#ifdef wxHAS_REGION_COMBINE - -inline bool wxRegionWithCombine::Combine(wxCoord x, - wxCoord y, - wxCoord w, - wxCoord h, - wxRegionOp op) -{ - return DoCombine(wxRegion(x, y, w, h), op); -} - -inline bool wxRegionWithCombine::Combine(const wxRect& rect, wxRegionOp op) -{ - return DoCombine(wxRegion(rect), op); -} - -#endif // wxHAS_REGION_COMBINE - -#endif // _WX_REGION_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/renderer.h b/desmume/src/windows/wx/include/wx/renderer.h deleted file mode 100644 index f7eb8558e..000000000 --- a/desmume/src/windows/wx/include/wx/renderer.h +++ /dev/null @@ -1,436 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/renderer.h -// Purpose: wxRendererNative class declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 20.07.2003 -// RCS-ID: $Id: renderer.h 53667 2008-05-20 09:28:48Z VS $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -/* - Renderers are used in wxWidgets for two similar but different things: - (a) wxUniversal uses them to draw everything, i.e. all the control - (b) all the native ports use them to draw generic controls only - - wxUniversal needs more functionality than what is included in the base class - as it needs to draw stuff like scrollbars which are never going to be - generic. So we put the bare minimum needed by the native ports here and the - full wxRenderer class is declared in wx/univ/renderer.h and is only used by - wxUniveral (although note that native ports can load wxRenderer objects from - theme DLLs and use them as wxRendererNative ones, of course). - */ - -#ifndef _WX_RENDERER_H_ -#define _WX_RENDERER_H_ - -class WXDLLIMPEXP_FWD_CORE wxDC; -class WXDLLIMPEXP_FWD_CORE wxWindow; - -#include "wx/gdicmn.h" // for wxPoint -#include "wx/colour.h" -#include "wx/font.h" -#include "wx/bitmap.h" -#include "wx/string.h" - -// some platforms have their own renderers, others use the generic one -#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__WXGTK__) - #define wxHAS_NATIVE_RENDERER -#else - #undef wxHAS_NATIVE_RENDERER -#endif - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// control state flags used in wxRenderer and wxColourScheme -enum -{ - wxCONTROL_DISABLED = 0x00000001, // control is disabled - wxCONTROL_FOCUSED = 0x00000002, // currently has keyboard focus - wxCONTROL_PRESSED = 0x00000004, // (button) is pressed - wxCONTROL_SPECIAL = 0x00000008, // control-specific bit: - wxCONTROL_ISDEFAULT = wxCONTROL_SPECIAL, // only for the buttons - wxCONTROL_ISSUBMENU = wxCONTROL_SPECIAL, // only for the menu items - wxCONTROL_EXPANDED = wxCONTROL_SPECIAL, // only for the tree items - wxCONTROL_SIZEGRIP = wxCONTROL_SPECIAL, // only for the status bar panes - wxCONTROL_CURRENT = 0x00000010, // mouse is currently over the control - wxCONTROL_SELECTED = 0x00000020, // selected item in e.g. listbox - wxCONTROL_CHECKED = 0x00000040, // (check/radio button) is checked - wxCONTROL_CHECKABLE = 0x00000080, // (menu) item can be checked - wxCONTROL_UNDETERMINED = wxCONTROL_CHECKABLE, // (check) undetermined state - - wxCONTROL_FLAGS_MASK = 0x000000ff, - - // this is a pseudo flag not used directly by wxRenderer but rather by some - // controls internally - wxCONTROL_DIRTY = 0x80000000 -}; - -// ---------------------------------------------------------------------------- -// helper structs -// ---------------------------------------------------------------------------- - -// wxSplitterWindow parameters -struct WXDLLEXPORT wxSplitterRenderParams -{ - // the only way to initialize this struct is by using this ctor - wxSplitterRenderParams(wxCoord widthSash_, wxCoord border_, bool isSens_) - : widthSash(widthSash_), border(border_), isHotSensitive(isSens_) - { - } - - // the width of the splitter sash - const wxCoord widthSash; - - // the width of the border of the splitter window - const wxCoord border; - - // true if the splitter changes its appearance when the mouse is over it - const bool isHotSensitive; -}; - - -// extra optional parameters for DrawHeaderButton -struct WXDLLEXPORT wxHeaderButtonParams -{ - wxHeaderButtonParams() - : m_labelAlignment(wxALIGN_LEFT) - { } - - wxColour m_arrowColour; - wxColour m_selectionColour; - wxString m_labelText; - wxFont m_labelFont; - wxColour m_labelColour; - wxBitmap m_labelBitmap; - int m_labelAlignment; -}; - -enum wxHeaderSortIconType { - wxHDR_SORT_ICON_NONE, // Header button has no sort arrow - wxHDR_SORT_ICON_UP, // Header button an an up sort arrow icon - wxHDR_SORT_ICON_DOWN // Header button an a down sort arrow icon -}; - - -// wxRendererNative interface version -struct WXDLLEXPORT wxRendererVersion -{ - wxRendererVersion(int version_, int age_) : version(version_), age(age_) { } - - // default copy ctor, assignment operator and dtor are ok - - // the current version and age of wxRendererNative interface: different - // versions are incompatible (in both ways) while the ages inside the same - // version are upwards compatible, i.e. the version of the renderer must - // match the version of the main program exactly while the age may be - // highergreater or equal to it - // - // NB: don't forget to increment age after adding any new virtual function! - enum - { - Current_Version = 1, - Current_Age = 5 - }; - - - // check if the given version is compatible with the current one - static bool IsCompatible(const wxRendererVersion& ver) - { - return ver.version == Current_Version && ver.age >= Current_Age; - } - - const int version; - const int age; -}; - -// ---------------------------------------------------------------------------- -// wxRendererNative: abstracts drawing methods needed by the native controls -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxRendererNative -{ -public: - // drawing functions - // ----------------- - - // draw the header control button (used by wxListCtrl) Returns optimal - // width for the label contents. - virtual int DrawHeaderButton(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0, - wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE, - wxHeaderButtonParams* params=NULL) = 0; - - - // Draw the contents of a header control button (label, sort arrows, etc.) - // Normally only called by DrawHeaderButton. - virtual int DrawHeaderButtonContents(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0, - wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE, - wxHeaderButtonParams* params=NULL) = 0; - - // Returns the default height of a header button, either a fixed platform - // height if available, or a generic height based on the window's font. - virtual int GetHeaderButtonHeight(wxWindow *win) = 0; - - - // draw the expanded/collapsed icon for a tree control item - virtual void DrawTreeItemButton(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) = 0; - - // draw the border for sash window: this border must be such that the sash - // drawn by DrawSash() blends into it well - virtual void DrawSplitterBorder(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) = 0; - - // draw a (vertical) sash - virtual void DrawSplitterSash(wxWindow *win, - wxDC& dc, - const wxSize& size, - wxCoord position, - wxOrientation orient, - int flags = 0) = 0; - - // draw a combobox dropdown button - // - // flags may use wxCONTROL_PRESSED and wxCONTROL_CURRENT - virtual void DrawComboBoxDropButton(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) = 0; - - // draw a dropdown arrow - // - // flags may use wxCONTROL_PRESSED and wxCONTROL_CURRENT - virtual void DrawDropArrow(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) = 0; - - // draw check button - // - // flags may use wxCONTROL_CHECKED, wxCONTROL_UNDETERMINED and wxCONTROL_CURRENT - virtual void DrawCheckBox(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) = 0; - - // draw blank button - // - // flags may use wxCONTROL_PRESSED, wxCONTROL_CURRENT and wxCONTROL_ISDEFAULT - virtual void DrawPushButton(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) = 0; - - // draw rectangle indicating that an item in e.g. a list control - // has been selected or focused - // - // flags may use - // wxCONTROL_SELECTED (item is selected, e.g. draw background) - // wxCONTROL_CURRENT (item is the current item, e.g. dotted border) - // wxCONTROL_FOCUSED (the whole control has focus, e.g. blue background vs. grey otherwise) - virtual void DrawItemSelectionRect(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) = 0; - - // geometry functions - // ------------------ - - // get the splitter parameters: the x field of the returned point is the - // sash width and the y field is the border width - virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win) = 0; - - - // pseudo constructors - // ------------------- - - // return the currently used renderer - static wxRendererNative& Get(); - - // return the generic implementation of the renderer - static wxRendererNative& GetGeneric(); - - // return the default (native) implementation for this platform - static wxRendererNative& GetDefault(); - - - // changing the global renderer - // ---------------------------- - -#if wxUSE_DYNLIB_CLASS - // load the renderer from the specified DLL, the returned pointer must be - // deleted by caller if not NULL when it is not used any more - static wxRendererNative *Load(const wxString& name); -#endif // wxUSE_DYNLIB_CLASS - - // set the renderer to use, passing NULL reverts to using the default - // renderer - // - // return the previous renderer used with Set() or NULL if none - static wxRendererNative *Set(wxRendererNative *renderer); - - - // miscellaneous stuff - // ------------------- - - // this function is used for version checking: Load() refuses to load any - // DLLs implementing an older or incompatible version; it should be - // implemented simply by returning wxRendererVersion::Current_XXX values - virtual wxRendererVersion GetVersion() const = 0; - - // virtual dtor for any base class - virtual ~wxRendererNative(); -}; - -// ---------------------------------------------------------------------------- -// wxDelegateRendererNative: allows reuse of renderers code -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDelegateRendererNative : public wxRendererNative -{ -public: - wxDelegateRendererNative() - : m_rendererNative(GetGeneric()) { } - - wxDelegateRendererNative(wxRendererNative& rendererNative) - : m_rendererNative(rendererNative) { } - - - virtual int DrawHeaderButton(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0, - wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE, - wxHeaderButtonParams* params = NULL) - { return m_rendererNative.DrawHeaderButton(win, dc, rect, flags, sortArrow, params); } - - virtual int DrawHeaderButtonContents(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0, - wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE, - wxHeaderButtonParams* params = NULL) - { return m_rendererNative.DrawHeaderButtonContents(win, dc, rect, flags, sortArrow, params); } - - virtual int GetHeaderButtonHeight(wxWindow *win) - { return m_rendererNative.GetHeaderButtonHeight(win); } - - virtual void DrawTreeItemButton(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) - { m_rendererNative.DrawTreeItemButton(win, dc, rect, flags); } - - virtual void DrawSplitterBorder(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) - { m_rendererNative.DrawSplitterBorder(win, dc, rect, flags); } - - virtual void DrawSplitterSash(wxWindow *win, - wxDC& dc, - const wxSize& size, - wxCoord position, - wxOrientation orient, - int flags = 0) - { m_rendererNative.DrawSplitterSash(win, dc, size, - position, orient, flags); } - - virtual void DrawComboBoxDropButton(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) - { m_rendererNative.DrawComboBoxDropButton(win, dc, rect, flags); } - - virtual void DrawDropArrow(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) - { m_rendererNative.DrawDropArrow(win, dc, rect, flags); } - - virtual void DrawCheckBox(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0 ) - { m_rendererNative.DrawCheckBox( win, dc, rect, flags ); } - - virtual void DrawPushButton(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0 ) - { m_rendererNative.DrawPushButton( win, dc, rect, flags ); } - - virtual void DrawItemSelectionRect(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0 ) - { m_rendererNative.DrawItemSelectionRect( win, dc, rect, flags ); } - - virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win) - { return m_rendererNative.GetSplitterParams(win); } - - virtual wxRendererVersion GetVersion() const - { return m_rendererNative.GetVersion(); } - -protected: - wxRendererNative& m_rendererNative; - - DECLARE_NO_COPY_CLASS(wxDelegateRendererNative) -}; - -// ---------------------------------------------------------------------------- -// inline functions implementation -// ---------------------------------------------------------------------------- - -#ifndef wxHAS_NATIVE_RENDERER - -// default native renderer is the generic one then -/* static */ inline -wxRendererNative& wxRendererNative::GetDefault() -{ - return GetGeneric(); -} - -#endif // !wxHAS_NATIVE_RENDERER - - -// ---------------------------------------------------------------------------- -// Other renderer functions to be merged in to wxRenderer class in 2.9, but -// they are standalone functions here to protect the ABI. -// ---------------------------------------------------------------------------- - -#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__WXGTK20__) -#if wxABI_VERSION >= 20808 - -// Draw a native wxChoice -void WXDLLEXPORT wxRenderer_DrawChoice(wxWindow* win, wxDC& dc, - const wxRect& rect, int flags=0); - -// Draw a native wxComboBox -void WXDLLEXPORT wxRenderer_DrawComboBox(wxWindow* win, wxDC& dc, - const wxRect& rect, int flags=0); - -// Draw a native wxTextCtrl frame -void WXDLLEXPORT wxRenderer_DrawTextCtrl(wxWindow* win, wxDC& dc, - const wxRect& rect, int flags=0); - -// Draw a native wxRadioButton (just the graphical portion) -void WXDLLEXPORT wxRenderer_DrawRadioButton(wxWindow* win, wxDC& dc, - const wxRect& rect, int flags=0); -#endif // wxABI_VERSION -#endif // (platforms) - -#endif // _WX_RENDERER_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextbuffer.h b/desmume/src/windows/wx/include/wx/richtext/richtextbuffer.h deleted file mode 100644 index 274e47b46..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextbuffer.h +++ /dev/null @@ -1,2398 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtextbuffer.h -// Purpose: Buffer for wxRichTextCtrl -// Author: Julian Smart -// Modified by: -// Created: 2005-09-30 -// RCS-ID: $Id: richtextbuffer.h 58841 2009-02-12 10:16:07Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RICHTEXTBUFFER_H_ -#define _WX_RICHTEXTBUFFER_H_ - -/* - - Data structures - =============== - - Data is represented by a hierarchy of objects, all derived from - wxRichTextObject. - - The top of the hierarchy is the buffer, a kind of wxRichTextParagraphLayoutBox. - These boxes will allow flexible placement of text boxes on a page, but - for now there is a single box representing the document, and this box is - a wxRichTextParagraphLayoutBox which contains further wxRichTextParagraph - objects, each of which can include text and images. - - Each object maintains a range (start and end position) measured - from the start of the main parent box. - A paragraph object knows its range, and a text fragment knows its range - too. So, a character or image in a page has a position relative to the - start of the document, and a character in an embedded text box has - a position relative to that text box. For now, we will not be dealing with - embedded objects but it's something to bear in mind for later. - - Note that internally, a range (5,5) represents a range of one character. - In the public wx[Rich]TextCtrl API, this would be passed to e.g. SetSelection - as (5,6). A paragraph with one character might have an internal range of (0, 1) - since the end of the paragraph takes up one position. - - Layout - ====== - - When Layout is called on an object, it is given a size which the object - must limit itself to, or one or more flexible directions (vertical - or horizontal). So for example a centered paragraph is given the page - width to play with (minus any margins), but can extend indefinitely - in the vertical direction. The implementation of Layout can then - cache the calculated size and position within the parent. - - */ - -/*! - * Includes - */ - -#include "wx/defs.h" - -#if wxUSE_RICHTEXT - -#include "wx/list.h" -#include "wx/textctrl.h" -#include "wx/bitmap.h" -#include "wx/image.h" -#include "wx/cmdproc.h" -#include "wx/txtstrm.h" - -#if wxUSE_DATAOBJ -#include "wx/dataobj.h" -#endif - -// Setting wxRICHTEXT_USE_OWN_CARET to 1 implements a non-flashing -// cursor reliably without using wxClientDC in case there -// are platform-specific problems with the generic caret. -#if defined(wxMAC_USE_CORE_GRAPHICS) && wxMAC_USE_CORE_GRAPHICS -#define wxRICHTEXT_USE_OWN_CARET 1 -#else -#define wxRICHTEXT_USE_OWN_CARET 0 -#endif - -// Switch off for binary compatibility, on for faster drawing -#define wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING 0 - -/*! - * Special characters - */ - -extern WXDLLIMPEXP_RICHTEXT const wxChar wxRichTextLineBreakChar; - -/*! - * File types - */ - -#define wxRICHTEXT_TYPE_ANY 0 -#define wxRICHTEXT_TYPE_TEXT 1 -#define wxRICHTEXT_TYPE_XML 2 -#define wxRICHTEXT_TYPE_HTML 3 -#define wxRICHTEXT_TYPE_RTF 4 -#define wxRICHTEXT_TYPE_PDF 5 - -/*! - * Forward declarations - */ - -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCtrl; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextObject; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCacheObject; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextObjectList; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextLine; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextParagraph; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextFileHandler; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextStyleSheet; -class WXDLLIMPEXP_FWD_RICHTEXT wxTextAttrEx; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextListStyleDefinition; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextEvent; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextRenderer; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextBuffer; - -/*! - * Flags determining the available space, passed to Layout - */ - -#define wxRICHTEXT_FIXED_WIDTH 0x01 -#define wxRICHTEXT_FIXED_HEIGHT 0x02 -#define wxRICHTEXT_VARIABLE_WIDTH 0x04 -#define wxRICHTEXT_VARIABLE_HEIGHT 0x08 - -// Only lay out the part of the buffer that lies within -// the rect passed to Layout. -#define wxRICHTEXT_LAYOUT_SPECIFIED_RECT 0x10 - -/*! - * Flags to pass to Draw - */ - -// Ignore paragraph cache optimization, e.g. for printing purposes -// where one line may be drawn higher (on the next page) compared -// with the previous line -#define wxRICHTEXT_DRAW_IGNORE_CACHE 0x01 - -/*! - * Flags returned from hit-testing - */ - -// The point was not on this object -#define wxRICHTEXT_HITTEST_NONE 0x01 -// The point was before the position returned from HitTest -#define wxRICHTEXT_HITTEST_BEFORE 0x02 -// The point was after the position returned from HitTest -#define wxRICHTEXT_HITTEST_AFTER 0x04 -// The point was on the position returned from HitTest -#define wxRICHTEXT_HITTEST_ON 0x08 -// The point was on space outside content -#define wxRICHTEXT_HITTEST_OUTSIDE 0x10 - -/*! - * Flags for GetRangeSize - */ - -#define wxRICHTEXT_FORMATTED 0x01 -#define wxRICHTEXT_UNFORMATTED 0x02 -#define wxRICHTEXT_CACHE_SIZE 0x04 -#define wxRICHTEXT_HEIGHT_ONLY 0x08 - -/*! - * Flags for SetStyle/SetListStyle - */ - -#define wxRICHTEXT_SETSTYLE_NONE 0x00 - -// Specifies that this operation should be undoable -#define wxRICHTEXT_SETSTYLE_WITH_UNDO 0x01 - -// Specifies that the style should not be applied if the -// combined style at this point is already the style in question. -#define wxRICHTEXT_SETSTYLE_OPTIMIZE 0x02 - -// Specifies that the style should only be applied to paragraphs, -// and not the content. This allows content styling to be -// preserved independently from that of e.g. a named paragraph style. -#define wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY 0x04 - -// Specifies that the style should only be applied to characters, -// and not the paragraph. This allows content styling to be -// preserved independently from that of e.g. a named paragraph style. -#define wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY 0x08 - -// For SetListStyle only: specifies starting from the given number, otherwise -// deduces number from existing attributes -#define wxRICHTEXT_SETSTYLE_RENUMBER 0x10 - -// For SetListStyle only: specifies the list level for all paragraphs, otherwise -// the current indentation will be used -#define wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL 0x20 - -// Resets the existing style before applying the new style -#define wxRICHTEXT_SETSTYLE_RESET 0x40 - -// Removes the given style instead of applying it -#define wxRICHTEXT_SETSTYLE_REMOVE 0x80 - -/*! - * Flags for text insertion - */ - -#define wxRICHTEXT_INSERT_NONE 0x00 -#define wxRICHTEXT_INSERT_WITH_PREVIOUS_PARAGRAPH_STYLE 0x01 -#define wxRICHTEXT_INSERT_INTERACTIVE 0x02 - -/*! - * Extra formatting flags not in wxTextAttr - */ - -#define wxTEXT_ATTR_PARA_SPACING_AFTER 0x00000800 -#define wxTEXT_ATTR_PARA_SPACING_BEFORE 0x00001000 -#define wxTEXT_ATTR_LINE_SPACING 0x00002000 -#define wxTEXT_ATTR_CHARACTER_STYLE_NAME 0x00004000 -#define wxTEXT_ATTR_PARAGRAPH_STYLE_NAME 0x00008000 -#define wxTEXT_ATTR_LIST_STYLE_NAME 0x00010000 -#define wxTEXT_ATTR_BULLET_STYLE 0x00020000 -#define wxTEXT_ATTR_BULLET_NUMBER 0x00040000 -#define wxTEXT_ATTR_BULLET_TEXT 0x00080000 -#define wxTEXT_ATTR_BULLET_NAME 0x00100000 -#define wxTEXT_ATTR_URL 0x00200000 -#define wxTEXT_ATTR_PAGE_BREAK 0x00400000 -#define wxTEXT_ATTR_EFFECTS 0x00800000 -#define wxTEXT_ATTR_OUTLINE_LEVEL 0x01000000 - -// A special flag telling the buffer to keep the first paragraph style -// as-is, when deleting a paragraph marker. In future we might pass a -// flag to InsertFragment and DeleteRange to indicate the appropriate mode. -#define wxTEXT_ATTR_KEEP_FIRST_PARA_STYLE 0x10000000 - -/*! - * Styles for wxTextAttrEx::SetBulletStyle - */ - -#define wxTEXT_ATTR_BULLET_STYLE_NONE 0x00000000 -#define wxTEXT_ATTR_BULLET_STYLE_ARABIC 0x00000001 -#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_UPPER 0x00000002 -#define wxTEXT_ATTR_BULLET_STYLE_LETTERS_LOWER 0x00000004 -#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_UPPER 0x00000008 -#define wxTEXT_ATTR_BULLET_STYLE_ROMAN_LOWER 0x00000010 -#define wxTEXT_ATTR_BULLET_STYLE_SYMBOL 0x00000020 -#define wxTEXT_ATTR_BULLET_STYLE_BITMAP 0x00000040 -#define wxTEXT_ATTR_BULLET_STYLE_PARENTHESES 0x00000080 -#define wxTEXT_ATTR_BULLET_STYLE_PERIOD 0x00000100 -#define wxTEXT_ATTR_BULLET_STYLE_STANDARD 0x00000200 -#define wxTEXT_ATTR_BULLET_STYLE_RIGHT_PARENTHESIS 0x00000400 -#define wxTEXT_ATTR_BULLET_STYLE_OUTLINE 0x00000800 - -#define wxTEXT_ATTR_BULLET_STYLE_ALIGN_LEFT 0x00000000 -#define wxTEXT_ATTR_BULLET_STYLE_ALIGN_RIGHT 0x00001000 -#define wxTEXT_ATTR_BULLET_STYLE_ALIGN_CENTRE 0x00002000 - -/*! - * Styles for wxTextAttrEx::SetTextEffects - */ - -#define wxTEXT_ATTR_EFFECT_NONE 0x00000000 -#define wxTEXT_ATTR_EFFECT_CAPITALS 0x00000001 -#define wxTEXT_ATTR_EFFECT_SMALL_CAPITALS 0x00000002 -#define wxTEXT_ATTR_EFFECT_STRIKETHROUGH 0x00000004 -#define wxTEXT_ATTR_EFFECT_DOUBLE_STRIKETHROUGH 0x00000008 -#define wxTEXT_ATTR_EFFECT_SHADOW 0x00000010 -#define wxTEXT_ATTR_EFFECT_EMBOSS 0x00000020 -#define wxTEXT_ATTR_EFFECT_OUTLINE 0x00000040 -#define wxTEXT_ATTR_EFFECT_ENGRAVE 0x00000080 -#define wxTEXT_ATTR_EFFECT_SUPERSCRIPT 0x00000100 -#define wxTEXT_ATTR_EFFECT_SUBSCRIPT 0x00000200 - -/*! - * Line spacing values - */ - -#define wxTEXT_ATTR_LINE_SPACING_NORMAL 10 -#define wxTEXT_ATTR_LINE_SPACING_HALF 15 -#define wxTEXT_ATTR_LINE_SPACING_TWICE 20 - -/*! - * Character and paragraph combined styles - */ - -#define wxTEXT_ATTR_CHARACTER (wxTEXT_ATTR_FONT|wxTEXT_ATTR_EFFECTS|wxTEXT_ATTR_BACKGROUND_COLOUR|wxTEXT_ATTR_TEXT_COLOUR|wxTEXT_ATTR_CHARACTER_STYLE_NAME|wxTEXT_ATTR_URL) - -#define wxTEXT_ATTR_PARAGRAPH (wxTEXT_ATTR_ALIGNMENT|wxTEXT_ATTR_LEFT_INDENT|wxTEXT_ATTR_RIGHT_INDENT|wxTEXT_ATTR_TABS|\ - wxTEXT_ATTR_PARA_SPACING_BEFORE|wxTEXT_ATTR_PARA_SPACING_AFTER|wxTEXT_ATTR_LINE_SPACING|\ - wxTEXT_ATTR_BULLET_STYLE|wxTEXT_ATTR_BULLET_NUMBER|wxTEXT_ATTR_BULLET_TEXT|wxTEXT_ATTR_BULLET_NAME|\ - wxTEXT_ATTR_PARAGRAPH_STYLE_NAME|wxTEXT_ATTR_LIST_STYLE_NAME|wxTEXT_ATTR_OUTLINE_LEVEL) - -#define wxTEXT_ATTR_ALL (wxTEXT_ATTR_CHARACTER|wxTEXT_ATTR_PARAGRAPH) - -/*! - * Default superscript/subscript font multiplication factor - */ - -#define wxSCRIPT_MUL_FACTOR 1.5 - -/*! - * wxRichTextRange class declaration - * This stores beginning and end positions for a range of data. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextRange -{ -public: -// Constructors - - wxRichTextRange() { m_start = 0; m_end = 0; } - wxRichTextRange(long start, long end) { m_start = start; m_end = end; } - wxRichTextRange(const wxRichTextRange& range) { m_start = range.m_start; m_end = range.m_end; } - ~wxRichTextRange() {} - - void operator =(const wxRichTextRange& range) { m_start = range.m_start; m_end = range.m_end; } - bool operator ==(const wxRichTextRange& range) const { return (m_start == range.m_start && m_end == range.m_end); } - bool operator !=(const wxRichTextRange& range) const { return (m_start != range.m_start || m_end != range.m_end); } - wxRichTextRange operator -(const wxRichTextRange& range) const { return wxRichTextRange(m_start - range.m_start, m_end - range.m_end); } - wxRichTextRange operator +(const wxRichTextRange& range) const { return wxRichTextRange(m_start + range.m_start, m_end + range.m_end); } - - void SetRange(long start, long end) { m_start = start; m_end = end; } - - void SetStart(long start) { m_start = start; } - long GetStart() const { return m_start; } - - void SetEnd(long end) { m_end = end; } - long GetEnd() const { return m_end; } - - /// Returns true if this range is completely outside 'range' - bool IsOutside(const wxRichTextRange& range) const { return range.m_start > m_end || range.m_end < m_start; } - - /// Returns true if this range is completely within 'range' - bool IsWithin(const wxRichTextRange& range) const { return m_start >= range.m_start && m_end <= range.m_end; } - - /// Returns true if the given position is within this range. Allow - /// for the possibility of an empty range - assume the position - /// is within this empty range. NO, I think we should not match with an empty range. - // bool Contains(long pos) const { return pos >= m_start && (pos <= m_end || GetLength() == 0); } - bool Contains(long pos) const { return pos >= m_start && pos <= m_end ; } - - /// Limit this range to be within 'range' - bool LimitTo(const wxRichTextRange& range) ; - - /// Gets the length of the range - long GetLength() const { return m_end - m_start + 1; } - - /// Swaps the start and end - void Swap() { long tmp = m_start; m_start = m_end; m_end = tmp; } - - /// Convert to internal form: (n, n) is the range of a single character. - wxRichTextRange ToInternal() const { return wxRichTextRange(m_start, m_end-1); } - - /// Convert from internal to public API form: (n, n+1) is the range of a single character. - wxRichTextRange FromInternal() const { return wxRichTextRange(m_start, m_end+1); } - -protected: - long m_start; - long m_end; -}; - -#define wxRICHTEXT_ALL wxRichTextRange(-2, -2) -#define wxRICHTEXT_NONE wxRichTextRange(-1, -1) - -/*! - * wxTextAttrEx is an extended version of wxTextAttr with more paragraph attributes. - */ - -class WXDLLIMPEXP_RICHTEXT wxTextAttrEx: public wxTextAttr -{ -public: - // ctors - wxTextAttrEx(const wxTextAttrEx& attr); - wxTextAttrEx(const wxTextAttr& attr) { Init(); (*this) = attr; } - wxTextAttrEx() { Init(); } - - // Initialise this object - void Init(); - - // Copy - void Copy(const wxTextAttrEx& attr); - - // Assignment from a wxTextAttrEx object - void operator= (const wxTextAttrEx& attr); - - // Assignment from a wxTextAttr object - void operator= (const wxTextAttr& attr); - - // Equality test - bool operator== (const wxTextAttrEx& attr) const; - - // setters - void SetCharacterStyleName(const wxString& name) { m_characterStyleName = name; SetFlags(GetFlags() | wxTEXT_ATTR_CHARACTER_STYLE_NAME); } - void SetParagraphStyleName(const wxString& name) { m_paragraphStyleName = name; SetFlags(GetFlags() | wxTEXT_ATTR_PARAGRAPH_STYLE_NAME); } - void SetListStyleName(const wxString& name) { m_listStyleName = name; SetFlags(GetFlags() | wxTEXT_ATTR_LIST_STYLE_NAME); } - void SetParagraphSpacingAfter(int spacing) { m_paragraphSpacingAfter = spacing; SetFlags(GetFlags() | wxTEXT_ATTR_PARA_SPACING_AFTER); } - void SetParagraphSpacingBefore(int spacing) { m_paragraphSpacingBefore = spacing; SetFlags(GetFlags() | wxTEXT_ATTR_PARA_SPACING_BEFORE); } - void SetLineSpacing(int spacing) { m_lineSpacing = spacing; SetFlags(GetFlags() | wxTEXT_ATTR_LINE_SPACING); } - void SetBulletStyle(int style) { m_bulletStyle = style; SetFlags(GetFlags() | wxTEXT_ATTR_BULLET_STYLE); } - void SetBulletNumber(int n) { m_bulletNumber = n; SetFlags(GetFlags() | wxTEXT_ATTR_BULLET_NUMBER); } - void SetBulletText(const wxString& text) { m_bulletText = text; SetFlags(GetFlags() | wxTEXT_ATTR_BULLET_TEXT); } - void SetBulletName(const wxString& name) { m_bulletName = name; SetFlags(GetFlags() | wxTEXT_ATTR_BULLET_NAME); } - void SetBulletFont(const wxString& bulletFont) { m_bulletFont = bulletFont; } - void SetURL(const wxString& url) { m_urlTarget = url; SetFlags(GetFlags() | wxTEXT_ATTR_URL); } - void SetPageBreak(bool pageBreak = true) { SetFlags(pageBreak ? (GetFlags() | wxTEXT_ATTR_PAGE_BREAK) : (GetFlags() & ~wxTEXT_ATTR_PAGE_BREAK)); } - void SetTextEffects(int effects) { m_textEffects = effects; SetFlags(GetFlags() | wxTEXT_ATTR_EFFECTS); } - void SetTextEffectFlags(int effects) { m_textEffectFlags = effects; } - void SetOutlineLevel(int level) { m_outlineLevel = level; SetFlags(GetFlags() | wxTEXT_ATTR_OUTLINE_LEVEL); } - - const wxString& GetCharacterStyleName() const { return m_characterStyleName; } - const wxString& GetParagraphStyleName() const { return m_paragraphStyleName; } - const wxString& GetListStyleName() const { return m_listStyleName; } - int GetParagraphSpacingAfter() const { return m_paragraphSpacingAfter; } - int GetParagraphSpacingBefore() const { return m_paragraphSpacingBefore; } - int GetLineSpacing() const { return m_lineSpacing; } - int GetBulletStyle() const { return m_bulletStyle; } - int GetBulletNumber() const { return m_bulletNumber; } - const wxString& GetBulletText() const { return m_bulletText; } - const wxString& GetBulletName() const { return m_bulletName; } - const wxString& GetBulletFont() const { return m_bulletFont; } - const wxString& GetURL() const { return m_urlTarget; } - int GetTextEffects() const { return m_textEffects; } - int GetTextEffectFlags() const { return m_textEffectFlags; } - int GetOutlineLevel() const { return m_outlineLevel; } - - bool HasFontWeight() const { return (GetFlags() & wxTEXT_ATTR_FONT_WEIGHT) != 0; } - bool HasFontSize() const { return (GetFlags() & wxTEXT_ATTR_FONT_SIZE) != 0; } - bool HasFontItalic() const { return (GetFlags() & wxTEXT_ATTR_FONT_ITALIC) != 0; } - bool HasFontUnderlined() const { return (GetFlags() & wxTEXT_ATTR_FONT_UNDERLINE) != 0; } - bool HasFontFaceName() const { return (GetFlags() & wxTEXT_ATTR_FONT_FACE) != 0; } - - bool HasParagraphSpacingAfter() const { return HasFlag(wxTEXT_ATTR_PARA_SPACING_AFTER); } - bool HasParagraphSpacingBefore() const { return HasFlag(wxTEXT_ATTR_PARA_SPACING_BEFORE); } - bool HasLineSpacing() const { return HasFlag(wxTEXT_ATTR_LINE_SPACING); } - bool HasCharacterStyleName() const { return HasFlag(wxTEXT_ATTR_CHARACTER_STYLE_NAME) && !m_characterStyleName.IsEmpty(); } - bool HasParagraphStyleName() const { return HasFlag(wxTEXT_ATTR_PARAGRAPH_STYLE_NAME) && !m_paragraphStyleName.IsEmpty(); } - bool HasListStyleName() const { return HasFlag(wxTEXT_ATTR_LIST_STYLE_NAME) || !m_listStyleName.IsEmpty(); } - bool HasBulletStyle() const { return HasFlag(wxTEXT_ATTR_BULLET_STYLE); } - bool HasBulletNumber() const { return HasFlag(wxTEXT_ATTR_BULLET_NUMBER); } - bool HasBulletText() const { return HasFlag(wxTEXT_ATTR_BULLET_TEXT); } - bool HasBulletName() const { return HasFlag(wxTEXT_ATTR_BULLET_NAME); } - bool HasURL() const { return HasFlag(wxTEXT_ATTR_URL); } - bool HasPageBreak() const { return HasFlag(wxTEXT_ATTR_PAGE_BREAK); } - bool HasTextEffects() const { return HasFlag(wxTEXT_ATTR_EFFECTS); } - bool HasTextEffect(int effect) const { return HasFlag(wxTEXT_ATTR_EFFECTS) && ((GetTextEffectFlags() & effect) != 0); } - bool HasOutlineLevel() const { return HasFlag(wxTEXT_ATTR_OUTLINE_LEVEL); } - - // Is this a character style? - bool IsCharacterStyle() const { return (0 != (GetFlags() & wxTEXT_ATTR_CHARACTER)); } - bool IsParagraphStyle() const { return (0 != (GetFlags() & wxTEXT_ATTR_PARAGRAPH)); } - - // returns false if we have any attributes set, true otherwise - bool IsDefault() const - { - return (GetFlags() == 0); - } - - // return the attribute having the valid font and colours: it uses the - // attributes set in attr and falls back first to attrDefault and then to - // the text control font/colours for those attributes which are not set - static wxTextAttrEx CombineEx(const wxTextAttrEx& attr, - const wxTextAttrEx& attrDef, - const wxTextCtrlBase *text); - -private: - // Paragraph styles - int m_paragraphSpacingAfter; - int m_paragraphSpacingBefore; - int m_lineSpacing; - int m_bulletStyle; - int m_bulletNumber; - int m_textEffects; - int m_textEffectFlags; - int m_outlineLevel; - wxString m_bulletText; - wxString m_bulletFont; - wxString m_bulletName; - wxString m_urlTarget; - - // Character style - wxString m_characterStyleName; - - // Paragraph style - wxString m_paragraphStyleName; - - // List style - wxString m_listStyleName; -}; - -/*! - * wxRichTextAttr stores attributes without a wxFont object, so is a much more - * efficient way to query styles. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextAttr -{ -public: - // ctors - wxRichTextAttr(const wxTextAttrEx& attr); - wxRichTextAttr(const wxRichTextAttr& attr); - wxRichTextAttr() { Init(); } - wxRichTextAttr(const wxColour& colText, - const wxColour& colBack = wxNullColour, - wxTextAttrAlignment alignment = wxTEXT_ALIGNMENT_DEFAULT); - - // Initialise this object. - void Init(); - - // Copy - void Copy(const wxRichTextAttr& attr); - - // Assignment from a wxRichTextAttr object. - void operator= (const wxRichTextAttr& attr); - - // Assignment from a wxTextAttrEx object. - void operator= (const wxTextAttrEx& attr); - - // Equality test - bool operator== (const wxRichTextAttr& attr) const; - - // Making a wxTextAttrEx object. - operator wxTextAttrEx () const ; - - // Create font from font attributes. - wxFont CreateFont() const; - - // Get attributes from font. - bool GetFontAttributes(const wxFont& font); - - // setters - void SetTextColour(const wxColour& colText) { m_colText = colText; m_flags |= wxTEXT_ATTR_TEXT_COLOUR; } - void SetBackgroundColour(const wxColour& colBack) { m_colBack = colBack; m_flags |= wxTEXT_ATTR_BACKGROUND_COLOUR; } - void SetAlignment(wxTextAttrAlignment alignment) { m_textAlignment = alignment; m_flags |= wxTEXT_ATTR_ALIGNMENT; } - void SetTabs(const wxArrayInt& tabs) { m_tabs = tabs; m_flags |= wxTEXT_ATTR_TABS; } - void SetLeftIndent(int indent, int subIndent = 0) { m_leftIndent = indent; m_leftSubIndent = subIndent; m_flags |= wxTEXT_ATTR_LEFT_INDENT; } - void SetRightIndent(int indent) { m_rightIndent = indent; m_flags |= wxTEXT_ATTR_RIGHT_INDENT; } - - void SetFontSize(int pointSize) { m_fontSize = pointSize; m_flags |= wxTEXT_ATTR_FONT_SIZE; } - void SetFontStyle(int fontStyle) { m_fontStyle = fontStyle; m_flags |= wxTEXT_ATTR_FONT_ITALIC; } - void SetFontWeight(int 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 SetFlags(long flags) { m_flags = flags; } - - void SetCharacterStyleName(const wxString& name) { m_characterStyleName = name; m_flags |= wxTEXT_ATTR_CHARACTER_STYLE_NAME; } - void SetParagraphStyleName(const wxString& name) { m_paragraphStyleName = name; m_flags |= wxTEXT_ATTR_PARAGRAPH_STYLE_NAME; } - void SetListStyleName(const wxString& name) { m_listStyleName = name; SetFlags(GetFlags() | wxTEXT_ATTR_LIST_STYLE_NAME); } - void SetParagraphSpacingAfter(int spacing) { m_paragraphSpacingAfter = spacing; m_flags |= wxTEXT_ATTR_PARA_SPACING_AFTER; } - void SetParagraphSpacingBefore(int spacing) { m_paragraphSpacingBefore = spacing; m_flags |= wxTEXT_ATTR_PARA_SPACING_BEFORE; } - void SetLineSpacing(int spacing) { m_lineSpacing = spacing; m_flags |= wxTEXT_ATTR_LINE_SPACING; } - void SetBulletStyle(int style) { m_bulletStyle = style; m_flags |= wxTEXT_ATTR_BULLET_STYLE; } - void SetBulletNumber(int n) { m_bulletNumber = n; m_flags |= wxTEXT_ATTR_BULLET_NUMBER; } - void SetBulletText(const wxString& text) { m_bulletText = text; m_flags |= wxTEXT_ATTR_BULLET_TEXT; } - void SetBulletFont(const wxString& bulletFont) { m_bulletFont = bulletFont; } - void SetBulletName(const wxString& name) { m_bulletName = name; m_flags |= wxTEXT_ATTR_BULLET_NAME; } - void SetURL(const wxString& url) { m_urlTarget = url; m_flags |= wxTEXT_ATTR_URL; } - void SetPageBreak(bool pageBreak = true) { SetFlags(pageBreak ? (GetFlags() | wxTEXT_ATTR_PAGE_BREAK) : (GetFlags() & ~wxTEXT_ATTR_PAGE_BREAK)); } - void SetTextEffects(int effects) { m_textEffects = effects; SetFlags(GetFlags() | wxTEXT_ATTR_EFFECTS); } - void SetTextEffectFlags(int effects) { m_textEffectFlags = effects; } - void SetOutlineLevel(int level) { m_outlineLevel = level; SetFlags(GetFlags() | wxTEXT_ATTR_OUTLINE_LEVEL); } - - const wxColour& GetTextColour() const { return m_colText; } - const wxColour& GetBackgroundColour() const { return m_colBack; } - wxTextAttrAlignment GetAlignment() const { return m_textAlignment; } - const wxArrayInt& GetTabs() const { return m_tabs; } - long GetLeftIndent() const { return m_leftIndent; } - long GetLeftSubIndent() const { return m_leftSubIndent; } - long GetRightIndent() const { return m_rightIndent; } - long GetFlags() const { return m_flags; } - - int GetFontSize() const { return m_fontSize; } - int GetFontStyle() const { return m_fontStyle; } - int GetFontWeight() const { return m_fontWeight; } - bool GetFontUnderlined() const { return m_fontUnderlined; } - const wxString& GetFontFaceName() const { return m_fontFaceName; } - - const wxString& GetCharacterStyleName() const { return m_characterStyleName; } - const wxString& GetParagraphStyleName() const { return m_paragraphStyleName; } - const wxString& GetListStyleName() const { return m_listStyleName; } - int GetParagraphSpacingAfter() const { return m_paragraphSpacingAfter; } - int GetParagraphSpacingBefore() const { return m_paragraphSpacingBefore; } - int GetLineSpacing() const { return m_lineSpacing; } - int GetBulletStyle() const { return m_bulletStyle; } - int GetBulletNumber() const { return m_bulletNumber; } - const wxString& GetBulletText() const { return m_bulletText; } - const wxString& GetBulletFont() const { return m_bulletFont; } - const wxString& GetBulletName() const { return m_bulletName; } - const wxString& GetURL() const { return m_urlTarget; } - int GetTextEffects() const { return m_textEffects; } - int GetTextEffectFlags() const { return m_textEffectFlags; } - 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 HasAlignment() const { return (m_textAlignment != wxTEXT_ALIGNMENT_DEFAULT) && ((m_flags & wxTEXT_ATTR_ALIGNMENT) != 0) ; } - bool HasTabs() const { return (m_flags & wxTEXT_ATTR_TABS) != 0 ; } - bool HasLeftIndent() const { return (m_flags & wxTEXT_ATTR_LEFT_INDENT) != 0 ; } - bool HasRightIndent() const { return (m_flags & wxTEXT_ATTR_RIGHT_INDENT) != 0 ; } - bool HasFontWeight() const { return (m_flags & wxTEXT_ATTR_FONT_WEIGHT) != 0; } - bool HasFontSize() const { return (m_flags & wxTEXT_ATTR_FONT_SIZE) != 0; } - bool HasFontItalic() const { return (m_flags & wxTEXT_ATTR_FONT_ITALIC) != 0; } - bool HasFontUnderlined() const { return (m_flags & wxTEXT_ATTR_FONT_UNDERLINE) != 0; } - bool HasFontFaceName() const { return (m_flags & wxTEXT_ATTR_FONT_FACE) != 0; } - bool HasFont() const { return (m_flags & (wxTEXT_ATTR_FONT)) != 0; } - - bool HasParagraphSpacingAfter() const { return (m_flags & wxTEXT_ATTR_PARA_SPACING_AFTER) != 0; } - bool HasParagraphSpacingBefore() const { return (m_flags & wxTEXT_ATTR_PARA_SPACING_BEFORE) != 0; } - bool HasLineSpacing() const { return (m_flags & wxTEXT_ATTR_LINE_SPACING) != 0; } - bool HasCharacterStyleName() const { return (m_flags & wxTEXT_ATTR_CHARACTER_STYLE_NAME) != 0 && !m_characterStyleName.IsEmpty(); } - bool HasParagraphStyleName() const { return (m_flags & wxTEXT_ATTR_PARAGRAPH_STYLE_NAME) != 0 && !m_paragraphStyleName.IsEmpty(); } - bool HasListStyleName() const { return HasFlag(wxTEXT_ATTR_LIST_STYLE_NAME) || !m_listStyleName.IsEmpty(); } - bool HasBulletStyle() const { return (m_flags & wxTEXT_ATTR_BULLET_STYLE) != 0; } - bool HasBulletNumber() const { return (m_flags & wxTEXT_ATTR_BULLET_NUMBER) != 0; } - bool HasBulletText() const { return (m_flags & wxTEXT_ATTR_BULLET_TEXT) != 0; } - bool HasBulletName() const { return (m_flags & wxTEXT_ATTR_BULLET_NAME) != 0; } - bool HasURL() const { return HasFlag(wxTEXT_ATTR_URL); } - bool HasPageBreak() const { return HasFlag(wxTEXT_ATTR_PAGE_BREAK); } - bool HasTextEffects() const { return HasFlag(wxTEXT_ATTR_EFFECTS); } - bool HasTextEffect(int effect) const { return HasFlag(wxTEXT_ATTR_EFFECTS) && ((GetTextEffectFlags() & effect) != 0); } - bool HasOutlineLevel() const { return HasFlag(wxTEXT_ATTR_OUTLINE_LEVEL); } - - bool HasFlag(long flag) const { return (m_flags & flag) != 0; } - - // Is this a character style? - bool IsCharacterStyle() const { return (0 != (GetFlags() & wxTEXT_ATTR_CHARACTER)); } - bool IsParagraphStyle() const { return (0 != (GetFlags() & wxTEXT_ATTR_PARAGRAPH)); } - - // returns false if we have any attributes set, true otherwise - bool IsDefault() const - { - return GetFlags() == 0; - } - - // Merges the given attributes. Does not affect 'this'. If compareWith - // is non-NULL, then it will be used to mask out those attributes that are the same in style - // and compareWith, for situations where we don't want to explicitly set inherited attributes. - bool Apply(const wxRichTextAttr& style, const wxRichTextAttr* compareWith = NULL); - - // Merges the given attributes and returns the result. Does not affect 'this'. If compareWith - // is non-NULL, then it will be used to mask out those attributes that are the same in style - // and compareWith, for situations where we don't want to explicitly set inherited attributes. - wxRichTextAttr Combine(const wxRichTextAttr& style, const wxRichTextAttr* compareWith = NULL) const; - -private: - long m_flags; - - // Paragraph styles - wxArrayInt m_tabs; // array of int: tab stops in 1/10 mm - int m_leftIndent; // left indent in 1/10 mm - int m_leftSubIndent; // left indent for all but the first - // line in a paragraph relative to the - // first line, in 1/10 mm - int m_rightIndent; // right indent in 1/10 mm - wxTextAttrAlignment m_textAlignment; - - int m_paragraphSpacingAfter; - int m_paragraphSpacingBefore; - int m_lineSpacing; - int m_bulletStyle; - int m_bulletNumber; - int m_textEffects; - int m_textEffectFlags; - int m_outlineLevel; - wxString m_bulletText; - wxString m_bulletFont; - wxString m_bulletName; - wxString m_urlTarget; - - // Character styles - wxColour m_colText, - m_colBack; - int m_fontSize; - int m_fontStyle; - int m_fontWeight; - bool m_fontUnderlined; - wxString m_fontFaceName; - - // Character style - wxString m_characterStyleName; - - // Paragraph style - wxString m_paragraphStyleName; - - // List style - wxString m_listStyleName; -}; - -/*! - * wxRichTextObject class declaration - * This is the base for drawable objects. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextObject: public wxObject -{ - DECLARE_CLASS(wxRichTextObject) -public: -// Constructors - - wxRichTextObject(wxRichTextObject* parent = NULL); - virtual ~wxRichTextObject(); - -// Overrideables - - /// Draw the item, within the given range. Some objects may ignore the range (for - /// example paragraphs) while others must obey it (lines, to implement wrapping) - virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextRange& selectionRange, const wxRect& rect, int descent, int style) = 0; - - /// Lay the item out at the specified position with the given size constraint. - /// Layout must set the cached size. - virtual bool Layout(wxDC& dc, const wxRect& rect, int style) = 0; - - /// Hit-testing: returns a flag indicating hit test details, plus - /// information about position - virtual int HitTest(wxDC& WXUNUSED(dc), const wxPoint& WXUNUSED(pt), long& WXUNUSED(textPosition)) { return false; } - - /// Finds the absolute position and row height for the given character position - virtual bool FindPosition(wxDC& WXUNUSED(dc), long WXUNUSED(index), wxPoint& WXUNUSED(pt), int* WXUNUSED(height), bool WXUNUSED(forceLineStart)) { return false; } - - /// Get the best size, i.e. the ideal starting size for this object irrespective - /// of available space. For a short text string, it will be the size that exactly encloses - /// the text. For a longer string, it might use the parent width for example. - virtual wxSize GetBestSize() const { return m_size; } - - /// Get the object size for the given range. Returns false if the range - /// is invalid for this object. - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0)) const = 0; - - /// Do a split, returning an object containing the second part, and setting - /// the first part in 'this'. - virtual wxRichTextObject* DoSplit(long WXUNUSED(pos)) { return NULL; } - - /// Calculate range. By default, guess that the object is 1 unit long. - virtual void CalculateRange(long start, long& end) { end = start ; m_range.SetRange(start, end); } - - /// Delete range - virtual bool DeleteRange(const wxRichTextRange& WXUNUSED(range)) { return false; } - - /// Returns true if the object is empty - virtual bool IsEmpty() const { return false; } - - /// Get any text in this object for the given range - virtual wxString GetTextForRange(const wxRichTextRange& WXUNUSED(range)) const { return wxEmptyString; } - - /// Returns true if this object can merge itself with the given one. - virtual bool CanMerge(wxRichTextObject* WXUNUSED(object)) const { return false; } - - /// Returns true if this object merged itself with the given one. - /// The calling code will then delete the given object. - virtual bool Merge(wxRichTextObject* WXUNUSED(object)) { return false; } - - /// Dump to output stream for debugging - virtual void Dump(wxTextOutputStream& stream); - -// Accessors - - /// Get/set the cached object size as calculated by Layout. - virtual wxSize GetCachedSize() const { return m_size; } - virtual void SetCachedSize(const wxSize& sz) { m_size = sz; } - - /// Get/set the object position - virtual wxPoint GetPosition() const { return m_pos; } - virtual void SetPosition(const wxPoint& pos) { m_pos = pos; } - - /// Get the rectangle enclosing the object - virtual wxRect GetRect() const { return wxRect(GetPosition(), GetCachedSize()); } - - /// Set the range - void SetRange(const wxRichTextRange& range) { m_range = range; } - - /// Get the range - const wxRichTextRange& GetRange() const { return m_range; } - wxRichTextRange& GetRange() { return m_range; } - - /// Get/set dirty flag (whether the object needs Layout to be called) - virtual bool GetDirty() const { return m_dirty; } - virtual void SetDirty(bool dirty) { m_dirty = dirty; } - - /// Is this composite? - virtual bool IsComposite() const { return false; } - - /// Get/set the parent. - virtual wxRichTextObject* GetParent() const { return m_parent; } - virtual void SetParent(wxRichTextObject* parent) { m_parent = parent; } - - /// Set the margin around the object - virtual void SetMargins(int margin); - virtual void SetMargins(int leftMargin, int rightMargin, int topMargin, int bottomMargin); - virtual int GetLeftMargin() const { return m_leftMargin; } - virtual int GetRightMargin() const { return m_rightMargin; } - virtual int GetTopMargin() const { return m_topMargin; } - virtual int GetBottomMargin() const { return m_bottomMargin; } - - /// Set attributes object - void SetAttributes(const wxTextAttrEx& attr) { m_attributes = attr; } - const wxTextAttrEx& GetAttributes() const { return m_attributes; } - wxTextAttrEx& GetAttributes() { return m_attributes; } - - /// Set/get stored descent - void SetDescent(int descent) { m_descent = descent; } - int GetDescent() const { return m_descent; } - - /// Gets the containing buffer - wxRichTextBuffer* GetBuffer() const; - -// Operations - - /// Clone the object - virtual wxRichTextObject* Clone() const { return NULL; } - - /// Copy - void Copy(const wxRichTextObject& obj); - - /// Reference-counting allows us to use the same object in multiple - /// lists (not yet used) - void Reference() { m_refCount ++; } - void Dereference(); - - /// Convert units in tenths of a millimetre to device units - int ConvertTenthsMMToPixels(wxDC& dc, int units); - static int ConvertTenthsMMToPixels(int ppi, int units); - -protected: - wxSize m_size; - wxPoint m_pos; - int m_descent; // Descent for this object (if any) - bool m_dirty; - int m_refCount; - wxRichTextObject* m_parent; - - /// The range of this object (start position to end position) - wxRichTextRange m_range; - - /// Margins - int m_leftMargin; - int m_rightMargin; - int m_topMargin; - int m_bottomMargin; - - /// Attributes - wxTextAttrEx m_attributes; -}; - -WX_DECLARE_LIST_WITH_DECL( wxRichTextObject, wxRichTextObjectList, class WXDLLIMPEXP_RICHTEXT ); - -/*! - * wxRichTextCompositeObject class declaration - * Objects of this class can contain other objects. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextCompositeObject: public wxRichTextObject -{ - DECLARE_CLASS(wxRichTextCompositeObject) -public: -// Constructors - - wxRichTextCompositeObject(wxRichTextObject* parent = NULL); - virtual ~wxRichTextCompositeObject(); - -// Overrideables - - /// Hit-testing: returns a flag indicating hit test details, plus - /// information about position - virtual int HitTest(wxDC& dc, const wxPoint& pt, long& textPosition); - - /// Finds the absolute position and row height for the given character position - virtual bool FindPosition(wxDC& dc, long index, wxPoint& pt, int* height, bool forceLineStart); - - /// Calculate range - virtual void CalculateRange(long start, long& end); - - /// Delete range - virtual bool DeleteRange(const wxRichTextRange& range); - - /// Get any text in this object for the given range - virtual wxString GetTextForRange(const wxRichTextRange& range) const; - - /// Dump to output stream for debugging - virtual void Dump(wxTextOutputStream& stream); - -// Accessors - - /// Get the children - wxRichTextObjectList& GetChildren() { return m_children; } - const wxRichTextObjectList& GetChildren() const { return m_children; } - - /// Get the child count - size_t GetChildCount() const ; - - /// Get the nth child - wxRichTextObject* GetChild(size_t n) const ; - - /// Get/set dirty flag - virtual bool GetDirty() const { return m_dirty; } - virtual void SetDirty(bool dirty) { m_dirty = dirty; } - - /// Is this composite? - virtual bool IsComposite() const { return true; } - - /// Returns true if the buffer is empty - virtual bool IsEmpty() const { return GetChildCount() == 0; } - -// Operations - - /// Copy - void Copy(const wxRichTextCompositeObject& obj); - - /// Assignment - void operator= (const wxRichTextCompositeObject& obj) { Copy(obj); } - - /// Append a child, returning the position - size_t AppendChild(wxRichTextObject* child) ; - - /// Insert the child in front of the given object, or at the beginning - bool InsertChild(wxRichTextObject* child, wxRichTextObject* inFrontOf) ; - - /// Delete the child - bool RemoveChild(wxRichTextObject* child, bool deleteChild = false) ; - - /// Delete all children - bool DeleteChildren() ; - - /// Recursively merge all pieces that can be merged. - bool Defragment(); - -protected: - wxRichTextObjectList m_children; -}; - -/*! - * wxRichTextBox class declaration - * This defines a 2D space to lay out objects - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextBox: public wxRichTextCompositeObject -{ - DECLARE_DYNAMIC_CLASS(wxRichTextBox) -public: -// Constructors - - wxRichTextBox(wxRichTextObject* parent = NULL); - wxRichTextBox(const wxRichTextBox& obj): wxRichTextCompositeObject() { Copy(obj); } - -// Overrideables - - /// Draw the item - virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextRange& selectionRange, const wxRect& rect, int descent, int style); - - /// Lay the item out - virtual bool Layout(wxDC& dc, const wxRect& rect, int style); - - /// Get/set the object size for the given range. Returns false if the range - /// is invalid for this object. - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0)) const; - -// Accessors - -// Operations - - /// Clone - virtual wxRichTextObject* Clone() const { return new wxRichTextBox(*this); } - - /// Copy - void Copy(const wxRichTextBox& obj); - -protected: -}; - -/*! - * wxRichTextParagraphBox class declaration - * This box knows how to lay out paragraphs. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextParagraphLayoutBox: public wxRichTextBox -{ - DECLARE_DYNAMIC_CLASS(wxRichTextParagraphLayoutBox) -public: -// Constructors - - wxRichTextParagraphLayoutBox(wxRichTextObject* parent = NULL); - wxRichTextParagraphLayoutBox(const wxRichTextParagraphLayoutBox& obj): wxRichTextBox() { Init(); Copy(obj); } - -// Overrideables - - /// Draw the item - virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextRange& selectionRange, const wxRect& rect, int descent, int style); - - /// Lay the item out - virtual bool Layout(wxDC& dc, const wxRect& rect, int style); - - /// Get/set the object size for the given range. Returns false if the range - /// is invalid for this object. - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0)) const; - - /// Delete range - virtual bool DeleteRange(const wxRichTextRange& range); - - /// Get any text in this object for the given range - virtual wxString GetTextForRange(const wxRichTextRange& range) const; - -// Accessors - - /// Associate a control with the buffer, for operations that for example require refreshing the window. - void SetRichTextCtrl(wxRichTextCtrl* ctrl) { m_ctrl = ctrl; } - - /// Get the associated control. - wxRichTextCtrl* GetRichTextCtrl() const { return m_ctrl; } - - /// Get/set whether the last paragraph is partial or complete - void SetPartialParagraph(bool partialPara) { m_partialParagraph = partialPara; } - bool GetPartialParagraph() const { return m_partialParagraph; } - - /// If this is a buffer, returns the current style sheet. The base layout box - /// class doesn't have an associated style sheet. - virtual wxRichTextStyleSheet* GetStyleSheet() const { return NULL; } - -// Operations - - /// Initialize the object. - void Init(); - - /// Clear all children - virtual void Clear(); - - /// Clear and initialize with one blank paragraph - virtual void Reset(); - - /// Convenience function to add a paragraph of text - virtual wxRichTextRange AddParagraph(const wxString& text, wxTextAttrEx* paraStyle = NULL); - - /// Convenience function to add an image - virtual wxRichTextRange AddImage(const wxImage& image, wxTextAttrEx* paraStyle = NULL); - - /// Adds multiple paragraphs, based on newlines. - virtual wxRichTextRange AddParagraphs(const wxString& text, wxTextAttrEx* paraStyle = NULL); - - /// Get the line at the given position. If caretPosition is true, the position is - /// a caret position, which is normally a smaller number. - virtual wxRichTextLine* GetLineAtPosition(long pos, bool caretPosition = false) const; - - /// Get the line at the given y pixel position, or the last line. - virtual wxRichTextLine* GetLineAtYPosition(int y) const; - - /// Get the paragraph at the given character or caret position - virtual wxRichTextParagraph* GetParagraphAtPosition(long pos, bool caretPosition = false) const; - - /// Get the line size at the given position - virtual wxSize GetLineSizeAtPosition(long pos, bool caretPosition = false) const; - - /// Given a position, get the number of the visible line (potentially many to a paragraph), - /// starting from zero at the start of the buffer. We also have to pass a bool (startOfLine) - /// that indicates whether the caret is being shown at the end of the previous line or at the start - /// of the next, since the caret can be shown at 2 visible positions for the same underlying - /// position. - virtual long GetVisibleLineNumber(long pos, bool caretPosition = false, bool startOfLine = false) const; - - /// Given a line number, get the corresponding wxRichTextLine object. - virtual wxRichTextLine* GetLineForVisibleLineNumber(long lineNumber) const; - - /// Get the leaf object in a paragraph at this position. - /// Given a line number, get the corresponding wxRichTextLine object. - virtual wxRichTextObject* GetLeafObjectAtPosition(long position) const; - - /// Get the paragraph by number - virtual wxRichTextParagraph* GetParagraphAtLine(long paragraphNumber) const; - - /// Get the paragraph for a given line - virtual wxRichTextParagraph* GetParagraphForLine(wxRichTextLine* line) const; - - /// Get the length of the paragraph - virtual int GetParagraphLength(long paragraphNumber) const; - - /// Get the number of paragraphs - virtual int GetParagraphCount() const { return wx_static_cast(int, GetChildCount()); } - - /// Get the number of visible lines - virtual int GetLineCount() const; - - /// Get the text of the paragraph - virtual wxString GetParagraphText(long paragraphNumber) const; - - /// Convert zero-based line column and paragraph number to a position. - virtual long XYToPosition(long x, long y) const; - - /// Convert zero-based position to line column and paragraph number - virtual bool PositionToXY(long pos, long* x, long* y) const; - - /// Set text attributes: character and/or paragraph styles. - virtual bool SetStyle(const wxRichTextRange& range, const wxRichTextAttr& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO); - virtual bool SetStyle(const wxRichTextRange& range, const wxTextAttrEx& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO); - - /// Get the conbined text attributes for this position. - virtual bool GetStyle(long position, wxTextAttrEx& style); - virtual bool GetStyle(long position, wxRichTextAttr& style); - - /// Get the content (uncombined) attributes for this position. - virtual bool GetUncombinedStyle(long position, wxTextAttrEx& style); - virtual bool GetUncombinedStyle(long position, wxRichTextAttr& style); - - /// Implementation helper for GetStyle. If combineStyles is true, combine base, paragraph and - /// context attributes. - virtual bool DoGetStyle(long position, wxTextAttrEx& style, bool combineStyles = true); - - /// Get the combined style for a range - if any attribute is different within the range, - /// that attribute is not present within the flags - virtual bool GetStyleForRange(const wxRichTextRange& range, wxTextAttrEx& style); - - /// Combines 'style' with 'currentStyle' for the purpose of summarising the attributes of a range of - /// content. - bool CollectStyle(wxTextAttrEx& currentStyle, const wxTextAttrEx& style, long& multipleStyleAttributes, int& multipleTextEffectAttributes); - - /// Set list style - virtual bool SetListStyle(const wxRichTextRange& range, wxRichTextListStyleDefinition* def, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1); - virtual bool SetListStyle(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1); - - /// Clear list for given range - virtual bool ClearListStyle(const wxRichTextRange& range, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO); - - /// Number/renumber any list elements in the given range. - /// def/defName can be NULL/empty to indicate that the existing list style should be used. - virtual bool NumberList(const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1); - virtual bool NumberList(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1); - - /// Promote the list items within the given range. promoteBy can be a positive or negative number, e.g. 1 or -1 - /// def/defName can be NULL/empty to indicate that the existing list style should be used. - virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1); - virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1); - - /// Helper for NumberList and PromoteList, that does renumbering and promotion simultaneously - /// def/defName can be NULL/empty to indicate that the existing list style should be used. - virtual bool DoNumberList(const wxRichTextRange& range, const wxRichTextRange& promotionRange, int promoteBy, wxRichTextListStyleDefinition* def, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1); - - /// Fills in the attributes for numbering a paragraph after previousParagraph. - virtual bool FindNextParagraphNumber(wxRichTextParagraph* previousParagraph, wxRichTextAttr& attr) const; - - /// Test if this whole range has character attributes of the specified kind. If any - /// of the attributes are different within the range, the test fails. You - /// can use this to implement, for example, bold button updating. style must have - /// flags indicating which attributes are of interest. - virtual bool HasCharacterAttributes(const wxRichTextRange& range, const wxTextAttrEx& style) const; - virtual bool HasCharacterAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const; - - /// Test if this whole range has paragraph attributes of the specified kind. If any - /// of the attributes are different within the range, the test fails. You - /// can use this to implement, for example, centering button updating. style must have - /// flags indicating which attributes are of interest. - virtual bool HasParagraphAttributes(const wxRichTextRange& range, const wxTextAttrEx& style) const; - virtual bool HasParagraphAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const; - - /// Clone - virtual wxRichTextObject* Clone() const { return new wxRichTextParagraphLayoutBox(*this); } - - /// Insert fragment into this box at the given position. If partialParagraph is true, - /// it is assumed that the last (or only) paragraph is just a piece of data with no paragraph - /// marker. - virtual bool InsertFragment(long position, wxRichTextParagraphLayoutBox& fragment); - - /// Make a copy of the fragment corresponding to the given range, putting it in 'fragment'. - virtual bool CopyFragment(const wxRichTextRange& range, wxRichTextParagraphLayoutBox& fragment); - - /// Apply the style sheet to the buffer, for example if the styles have changed. - virtual bool ApplyStyleSheet(wxRichTextStyleSheet* styleSheet); - - /// Copy - void Copy(const wxRichTextParagraphLayoutBox& obj); - - /// Assignment - void operator= (const wxRichTextParagraphLayoutBox& obj) { Copy(obj); } - - /// Calculate ranges - virtual void UpdateRanges() { long end; CalculateRange(0, end); } - - /// Get all the text - virtual wxString GetText() const; - - /// Set default style for new content. Setting it to a default attribute - /// makes new content take on the 'basic' style. - virtual bool SetDefaultStyle(const wxTextAttrEx& style); - - /// Get default style - virtual const wxTextAttrEx& GetDefaultStyle() const { return m_defaultAttributes; } - - /// Set basic (overall) style - virtual void SetBasicStyle(const wxTextAttrEx& style) { m_attributes = style; } - virtual void SetBasicStyle(const wxRichTextAttr& style) { m_attributes = style; } - - /// Get basic (overall) style - virtual const wxTextAttrEx& GetBasicStyle() const { return m_attributes; } - - /// Invalidate the buffer. With no argument, invalidates whole buffer. - void Invalidate(const wxRichTextRange& invalidRange = wxRICHTEXT_ALL); - - /// Get invalid range, rounding to entire paragraphs if argument is true. - wxRichTextRange GetInvalidRange(bool wholeParagraphs = false) const; - -protected: - wxRichTextCtrl* m_ctrl; - wxTextAttrEx m_defaultAttributes; - - /// The invalidated range that will need full layout - wxRichTextRange m_invalidRange; - - // Is the last paragraph partial or complete? - bool m_partialParagraph; -}; - -/*! - * wxRichTextLine class declaration - * This object represents a line in a paragraph, and stores - * offsets from the start of the paragraph representing the - * start and end positions of the line. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextLine -{ -public: -// Constructors - - wxRichTextLine(wxRichTextParagraph* parent); - wxRichTextLine(const wxRichTextLine& obj) { Init( NULL); Copy(obj); } - virtual ~wxRichTextLine() {} - -// Overrideables - -// Accessors - - /// Set the range - void SetRange(const wxRichTextRange& range) { m_range = range; } - void SetRange(long from, long to) { m_range = wxRichTextRange(from, to); } - - /// Get the parent paragraph - wxRichTextParagraph* GetParent() { return m_parent; } - - /// Get the range - const wxRichTextRange& GetRange() const { return m_range; } - wxRichTextRange& GetRange() { return m_range; } - - /// Get the absolute range - wxRichTextRange GetAbsoluteRange() const; - - /// Get/set the line size as calculated by Layout. - virtual wxSize GetSize() const { return m_size; } - virtual void SetSize(const wxSize& sz) { m_size = sz; } - - /// Get/set the object position relative to the parent - virtual wxPoint GetPosition() const { return m_pos; } - virtual void SetPosition(const wxPoint& pos) { m_pos = pos; } - - /// Get the absolute object position - virtual wxPoint GetAbsolutePosition() const; - - /// Get the rectangle enclosing the line - virtual wxRect GetRect() const { return wxRect(GetAbsolutePosition(), GetSize()); } - - /// Set/get stored descent - void SetDescent(int descent) { m_descent = descent; } - int GetDescent() const { return m_descent; } - -#if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING - wxArrayInt& GetObjectSizes() { return m_objectSizes; } - const wxArrayInt& GetObjectSizes() const { return m_objectSizes; } -#endif - -// Operations - - /// Initialisation - void Init(wxRichTextParagraph* parent); - - /// Copy - void Copy(const wxRichTextLine& obj); - - /// Clone - virtual wxRichTextLine* Clone() const { return new wxRichTextLine(*this); } - -protected: - - /// The range of the line (start position to end position) - /// This is relative to the parent paragraph. - wxRichTextRange m_range; - - /// Size and position measured relative to top of paragraph - wxPoint m_pos; - wxSize m_size; - - /// Maximum descent for this line (location of text baseline) - int m_descent; - - // The parent object - wxRichTextParagraph* m_parent; - - // Sizes of the objects within a line so we don't have to get text extents -#if wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING - wxArrayInt m_objectSizes; -#endif -}; - -WX_DECLARE_LIST_WITH_DECL( wxRichTextLine, wxRichTextLineList , class WXDLLIMPEXP_RICHTEXT ); - -/*! - * wxRichTextParagraph class declaration - * This object represents a single paragraph (or in a straight text editor, a line). - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextParagraph: public wxRichTextBox -{ - DECLARE_DYNAMIC_CLASS(wxRichTextParagraph) -public: -// Constructors - - wxRichTextParagraph(wxRichTextObject* parent = NULL, wxTextAttrEx* style = NULL); - wxRichTextParagraph(const wxString& text, wxRichTextObject* parent = NULL, wxTextAttrEx* paraStyle = NULL, wxTextAttrEx* charStyle = NULL); - virtual ~wxRichTextParagraph(); - wxRichTextParagraph(const wxRichTextParagraph& obj): wxRichTextBox() { Copy(obj); } - -// Overrideables - - /// Draw the item - virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextRange& selectionRange, const wxRect& rect, int descent, int style); - - /// Lay the item out - virtual bool Layout(wxDC& dc, const wxRect& rect, int style); - - /// Get/set the object size for the given range. Returns false if the range - /// is invalid for this object. - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0)) const; - - /// Finds the absolute position and row height for the given character position - virtual bool FindPosition(wxDC& dc, long index, wxPoint& pt, int* height, bool forceLineStart); - - /// Hit-testing: returns a flag indicating hit test details, plus - /// information about position - virtual int HitTest(wxDC& dc, const wxPoint& pt, long& textPosition); - - /// Calculate range - virtual void CalculateRange(long start, long& end); - -// Accessors - - /// Get the cached lines - wxRichTextLineList& GetLines() { return m_cachedLines; } - -// Operations - - /// Copy - void Copy(const wxRichTextParagraph& obj); - - /// Clone - virtual wxRichTextObject* Clone() const { return new wxRichTextParagraph(*this); } - - /// Clear the cached lines - void ClearLines(); - -// Implementation - - /// Apply paragraph styles such as centering to the wrapped lines - virtual void ApplyParagraphStyle(const wxTextAttrEx& attr, const wxRect& rect); - - /// Insert text at the given position - virtual bool InsertText(long pos, const wxString& text); - - /// Split an object at this position if necessary, and return - /// the previous object, or NULL if inserting at beginning. - virtual wxRichTextObject* SplitAt(long pos, wxRichTextObject** previousObject = NULL); - - /// Move content to a list from this point - virtual void MoveToList(wxRichTextObject* obj, wxList& list); - - /// Add content back from list - virtual void MoveFromList(wxList& list); - - /// Get the plain text searching from the start or end of the range. - /// The resulting string may be shorter than the range given. - bool GetContiguousPlainText(wxString& text, const wxRichTextRange& range, bool fromStart = true); - - /// Find a suitable wrap position. wrapPosition is the last position in the line to the left - /// of the split. - bool FindWrapPosition(const wxRichTextRange& range, wxDC& dc, int availableSpace, long& wrapPosition); - - /// Find the object at the given position - wxRichTextObject* FindObjectAtPosition(long position); - - /// Get the bullet text for this paragraph. - wxString GetBulletText(); - - /// Allocate or reuse a line object - wxRichTextLine* AllocateLine(int pos); - - /// Clear remaining unused line objects, if any - bool ClearUnusedLines(int lineCount); - - /// Get combined attributes of the base style, paragraph style and character style. We use this to dynamically - /// retrieve the actual style. - wxTextAttrEx GetCombinedAttributes(const wxTextAttrEx& contentStyle) const; - - /// Get combined attributes of the base style and paragraph style. - wxTextAttrEx GetCombinedAttributes() const; - - /// Get the first position from pos that has a line break character. - long GetFirstLineBreakPosition(long pos); - - /// Create default tabstop array - static void InitDefaultTabs(); - - /// Clear default tabstop array - static void ClearDefaultTabs(); - - /// Get default tabstop array - static const wxArrayInt& GetDefaultTabs() { return sm_defaultTabs; } - -protected: - /// The lines that make up the wrapped paragraph - wxRichTextLineList m_cachedLines; - - /// Default tabstops - static wxArrayInt sm_defaultTabs; -}; - -/*! - * wxRichTextPlainText class declaration - * This object represents a single piece of text. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextPlainText: public wxRichTextObject -{ - DECLARE_DYNAMIC_CLASS(wxRichTextPlainText) -public: -// Constructors - - wxRichTextPlainText(const wxString& text = wxEmptyString, wxRichTextObject* parent = NULL, wxTextAttrEx* style = NULL); - wxRichTextPlainText(const wxRichTextPlainText& obj): wxRichTextObject() { Copy(obj); } - -// Overrideables - - /// Draw the item - virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextRange& selectionRange, const wxRect& rect, int descent, int style); - - /// Lay the item out - virtual bool Layout(wxDC& dc, const wxRect& rect, int style); - - /// Get/set the object size for the given range. Returns false if the range - /// is invalid for this object. - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position/* = wxPoint(0,0)*/) const; - - /// Get any text in this object for the given range - virtual wxString GetTextForRange(const wxRichTextRange& range) const; - - /// Do a split, returning an object containing the second part, and setting - /// the first part in 'this'. - virtual wxRichTextObject* DoSplit(long pos); - - /// Calculate range - virtual void CalculateRange(long start, long& end); - - /// Delete range - virtual bool DeleteRange(const wxRichTextRange& range); - - /// Returns true if the object is empty - virtual bool IsEmpty() const { return m_text.empty(); } - - /// Returns true if this object can merge itself with the given one. - virtual bool CanMerge(wxRichTextObject* object) const; - - /// Returns true if this object merged itself with the given one. - /// The calling code will then delete the given object. - virtual bool Merge(wxRichTextObject* object); - - /// Dump to output stream for debugging - virtual void Dump(wxTextOutputStream& stream); - - /// Get the first position from pos that has a line break character. - long GetFirstLineBreakPosition(long pos); - -// Accessors - - /// Get the text - const wxString& GetText() const { return m_text; } - - /// Set the text - void SetText(const wxString& text) { m_text = text; } - -// Operations - - /// Copy - void Copy(const wxRichTextPlainText& obj); - - /// Clone - virtual wxRichTextObject* Clone() const { return new wxRichTextPlainText(*this); } -private: - bool DrawTabbedString(wxDC& dc, const wxTextAttrEx& attr, const wxRect& rect, wxString& str, wxCoord& x, wxCoord& y, bool selected); - -protected: - wxString m_text; -}; - -/*! - * wxRichTextImageBlock stores information about an image, in binary in-memory form - */ - -class WXDLLIMPEXP_FWD_BASE wxDataInputStream; -class WXDLLIMPEXP_FWD_BASE wxDataOutputStream; - -class WXDLLIMPEXP_RICHTEXT wxRichTextImageBlock: public wxObject -{ -public: - wxRichTextImageBlock(); - wxRichTextImageBlock(const wxRichTextImageBlock& block); - virtual ~wxRichTextImageBlock(); - - void Init(); - void Clear(); - - // Load the original image into a memory block. - // If the image is not a JPEG, we must convert it into a JPEG - // to conserve space. - // If it's not a JPEG we can make use of 'image', already scaled, so we don't have to - // load the image a 2nd time. - virtual bool MakeImageBlock(const wxString& filename, int imageType, wxImage& image, bool convertToJPEG = true); - - // Make an image block from the wxImage in the given - // format. - virtual bool MakeImageBlock(wxImage& image, int imageType, int quality = 80); - - // Write to a file - bool Write(const wxString& filename); - - // Write data in hex to a stream - bool WriteHex(wxOutputStream& stream); - - // Read data in hex from a stream - bool ReadHex(wxInputStream& stream, int length, int imageType); - - // Copy from 'block' - void Copy(const wxRichTextImageBlock& block); - - // Load a wxImage from the block - bool Load(wxImage& image); - -//// Operators - void operator=(const wxRichTextImageBlock& block); - -//// Accessors - - unsigned char* GetData() const { return m_data; } - size_t GetDataSize() const { return m_dataSize; } - int GetImageType() const { return m_imageType; } - - void SetData(unsigned char* image) { m_data = image; } - void SetDataSize(size_t size) { m_dataSize = size; } - void SetImageType(int imageType) { m_imageType = imageType; } - - bool Ok() const { return IsOk(); } - bool IsOk() const { return GetData() != NULL; } - - // Gets the extension for the block's type - wxString GetExtension() const; - -/// Implementation - - // Allocate and read from stream as a block of memory - static unsigned char* ReadBlock(wxInputStream& stream, size_t size); - static unsigned char* ReadBlock(const wxString& filename, size_t size); - - // Write memory block to stream - static bool WriteBlock(wxOutputStream& stream, unsigned char* block, size_t size); - - // Write memory block to file - static bool WriteBlock(const wxString& filename, unsigned char* block, size_t size); - -protected: - // Size in bytes of the image stored. - // This is in the raw, original form such as a JPEG file. - unsigned char* m_data; - size_t m_dataSize; - int m_imageType; // wxWin type id -}; - - -/*! - * wxRichTextImage class declaration - * This object represents an image. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextImage: public wxRichTextObject -{ - DECLARE_DYNAMIC_CLASS(wxRichTextImage) -public: -// Constructors - - wxRichTextImage(wxRichTextObject* parent = NULL): wxRichTextObject(parent) { } - wxRichTextImage(const wxImage& image, wxRichTextObject* parent = NULL, wxTextAttrEx* charStyle = NULL); - wxRichTextImage(const wxRichTextImageBlock& imageBlock, wxRichTextObject* parent = NULL, wxTextAttrEx* charStyle = NULL); - wxRichTextImage(const wxRichTextImage& obj): wxRichTextObject() { Copy(obj); } - -// Overrideables - - /// Draw the item - virtual bool Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextRange& selectionRange, const wxRect& rect, int descent, int style); - - /// Lay the item out - virtual bool Layout(wxDC& dc, const wxRect& rect, int style); - - /// Get the object size for the given range. Returns false if the range - /// is invalid for this object. - virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0)) const; - - /// Returns true if the object is empty - virtual bool IsEmpty() const { return !m_image.Ok(); } - -// Accessors - - /// Get the image - const wxImage& GetImage() const { return m_image; } - - /// Set the image - void SetImage(const wxImage& image) { m_image = image; } - - /// Get the image block containing the raw data - wxRichTextImageBlock& GetImageBlock() { return m_imageBlock; } - -// Operations - - /// Copy - void Copy(const wxRichTextImage& obj); - - /// Clone - virtual wxRichTextObject* Clone() const { return new wxRichTextImage(*this); } - - /// Load wxImage from the block - virtual bool LoadFromBlock(); - - /// Make block from the wxImage - virtual bool MakeBlock(); - -protected: - // TODO: reduce the multiple representations of data - wxImage m_image; - wxBitmap m_bitmap; - wxRichTextImageBlock m_imageBlock; -}; - - -/*! - * wxRichTextBuffer class declaration - * This is a kind of box, used to represent the whole buffer - */ - -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCommand; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction; - -class WXDLLIMPEXP_RICHTEXT wxRichTextBuffer: public wxRichTextParagraphLayoutBox -{ - DECLARE_DYNAMIC_CLASS(wxRichTextBuffer) -public: -// Constructors - - wxRichTextBuffer() { Init(); } - wxRichTextBuffer(const wxRichTextBuffer& obj): wxRichTextParagraphLayoutBox() { Init(); Copy(obj); } - virtual ~wxRichTextBuffer() ; - -// Accessors - - /// Gets the command processor - wxCommandProcessor* GetCommandProcessor() const { return m_commandProcessor; } - - /// Set style sheet, if any. - void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { m_styleSheet = styleSheet; } - virtual wxRichTextStyleSheet* GetStyleSheet() const { return m_styleSheet; } - - /// Set style sheet and notify of the change - bool SetStyleSheetAndNotify(wxRichTextStyleSheet* sheet); - - /// Push style sheet to top of stack - bool PushStyleSheet(wxRichTextStyleSheet* styleSheet); - - /// Pop style sheet from top of stack - wxRichTextStyleSheet* PopStyleSheet(); - -// Operations - - /// Initialisation - void Init(); - - /// Clears the buffer, adds an empty paragraph, and clears the command processor. - virtual void ResetAndClearCommands(); - - /// Load a file - virtual bool LoadFile(const wxString& filename, int type = wxRICHTEXT_TYPE_ANY); - - /// Save a file - virtual bool SaveFile(const wxString& filename, int type = wxRICHTEXT_TYPE_ANY); - - /// Load from a stream - virtual bool LoadFile(wxInputStream& stream, int type = wxRICHTEXT_TYPE_ANY); - - /// Save to a stream - virtual bool SaveFile(wxOutputStream& stream, int type = wxRICHTEXT_TYPE_ANY); - - /// Set the handler flags, controlling loading and saving - void SetHandlerFlags(int flags) { m_handlerFlags = flags; } - - /// Get the handler flags, controlling loading and saving - int GetHandlerFlags() const { return m_handlerFlags; } - - /// Convenience function to add a paragraph of text - virtual wxRichTextRange AddParagraph(const wxString& text, wxTextAttrEx* paraStyle = NULL) { Modify(); return wxRichTextParagraphLayoutBox::AddParagraph(text, paraStyle); } - - /// Begin collapsing undo/redo commands. Note that this may not work properly - /// if combining commands that delete or insert content, changing ranges for - /// subsequent actions. - virtual bool BeginBatchUndo(const wxString& cmdName); - - /// End collapsing undo/redo commands - virtual bool EndBatchUndo(); - - /// Collapsing commands? - virtual bool BatchingUndo() const { return m_batchedCommandDepth > 0; } - - /// Submit immediately, or delay according to whether collapsing is on - virtual bool SubmitAction(wxRichTextAction* action); - - /// Get collapsed command - virtual wxRichTextCommand* GetBatchedCommand() const { return m_batchedCommand; } - - /// Begin suppressing undo/redo commands. The way undo is suppressed may be implemented - /// differently by each command. If not dealt with by a command implementation, then - /// it will be implemented automatically by not storing the command in the undo history - /// when the action is submitted to the command processor. - virtual bool BeginSuppressUndo(); - - /// End suppressing undo/redo commands. - virtual bool EndSuppressUndo(); - - /// Collapsing commands? - virtual bool SuppressingUndo() const { return m_suppressUndo > 0; } - - /// Copy the range to the clipboard - virtual bool CopyToClipboard(const wxRichTextRange& range); - - /// Paste the clipboard content to the buffer - virtual bool PasteFromClipboard(long position); - - /// Can we paste from the clipboard? - virtual bool CanPasteFromClipboard() const; - - /// Begin using a style - virtual bool BeginStyle(const wxTextAttrEx& style); - - /// End the style - virtual bool EndStyle(); - - /// End all styles - virtual bool EndAllStyles(); - - /// Clear the style stack - virtual void ClearStyleStack(); - - /// Get the size of the style stack, for example to check correct nesting - virtual size_t GetStyleStackSize() const { return m_attributeStack.GetCount(); } - - /// Begin using bold - bool BeginBold(); - - /// End using bold - bool EndBold() { return EndStyle(); } - - /// Begin using italic - bool BeginItalic(); - - /// End using italic - bool EndItalic() { return EndStyle(); } - - /// Begin using underline - bool BeginUnderline(); - - /// End using underline - bool EndUnderline() { return EndStyle(); } - - /// Begin using point size - bool BeginFontSize(int pointSize); - - /// End using point size - bool EndFontSize() { return EndStyle(); } - - /// Begin using this font - bool BeginFont(const wxFont& font); - - /// End using a font - bool EndFont() { return EndStyle(); } - - /// Begin using this colour - bool BeginTextColour(const wxColour& colour); - - /// End using a colour - bool EndTextColour() { return EndStyle(); } - - /// Begin using alignment - bool BeginAlignment(wxTextAttrAlignment alignment); - - /// End alignment - bool EndAlignment() { return EndStyle(); } - - /// Begin left indent - bool BeginLeftIndent(int leftIndent, int leftSubIndent = 0); - - /// End left indent - bool EndLeftIndent() { return EndStyle(); } - - /// Begin right indent - bool BeginRightIndent(int rightIndent); - - /// End right indent - bool EndRightIndent() { return EndStyle(); } - - /// Begin paragraph spacing - bool BeginParagraphSpacing(int before, int after); - - /// End paragraph spacing - bool EndParagraphSpacing() { return EndStyle(); } - - /// Begin line spacing - bool BeginLineSpacing(int lineSpacing); - - /// End line spacing - bool EndLineSpacing() { return EndStyle(); } - - /// Begin numbered bullet - bool BeginNumberedBullet(int bulletNumber, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_ARABIC|wxTEXT_ATTR_BULLET_STYLE_PERIOD); - - /// End numbered bullet - bool EndNumberedBullet() { return EndStyle(); } - - /// Begin symbol bullet - bool BeginSymbolBullet(const wxString& symbol, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL); - - /// End symbol bullet - bool EndSymbolBullet() { return EndStyle(); } - - /// Begin standard bullet - bool BeginStandardBullet(const wxString& bulletName, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD); - - /// End standard bullet - bool EndStandardBullet() { return EndStyle(); } - - /// Begin named character style - bool BeginCharacterStyle(const wxString& characterStyle); - - /// End named character style - bool EndCharacterStyle() { return EndStyle(); } - - /// Begin named paragraph style - bool BeginParagraphStyle(const wxString& paragraphStyle); - - /// End named character style - bool EndParagraphStyle() { return EndStyle(); } - - /// Begin named list style - bool BeginListStyle(const wxString& listStyle, int level = 1, int number = 1); - - /// End named character style - bool EndListStyle() { return EndStyle(); } - - /// Begin URL - bool BeginURL(const wxString& url, const wxString& characterStyle = wxEmptyString); - - /// End URL - bool EndURL() { return EndStyle(); } - -// Event handling - - /// Add an event handler - bool AddEventHandler(wxEvtHandler* handler); - - /// Remove an event handler - bool RemoveEventHandler(wxEvtHandler* handler, bool deleteHandler = false); - - /// Clear event handlers - void ClearEventHandlers(); - - /// Send event to event handlers. If sendToAll is true, will send to all event handlers, - /// otherwise will stop at the first successful one. - bool SendEvent(wxEvent& event, bool sendToAll = true); - -// Implementation - - /// Copy - void Copy(const wxRichTextBuffer& obj); - - /// Clone - virtual wxRichTextObject* Clone() const { return new wxRichTextBuffer(*this); } - - /// Submit command to insert paragraphs - bool InsertParagraphsWithUndo(long pos, const wxRichTextParagraphLayoutBox& paragraphs, wxRichTextCtrl* ctrl, int flags = 0); - - /// Submit command to insert the given text - bool InsertTextWithUndo(long pos, const wxString& text, wxRichTextCtrl* ctrl, int flags = 0); - - /// Submit command to insert a newline - bool InsertNewlineWithUndo(long pos, wxRichTextCtrl* ctrl, int flags = 0); - - /// Submit command to insert the given image - bool InsertImageWithUndo(long pos, const wxRichTextImageBlock& imageBlock, wxRichTextCtrl* ctrl, int flags = 0); - - /// Submit command to delete this range - bool DeleteRangeWithUndo(const wxRichTextRange& range, wxRichTextCtrl* ctrl); - - /// Mark modified - void Modify(bool modify = true) { m_modified = modify; } - bool IsModified() const { return m_modified; } - - /// Get the style that is appropriate for a new paragraph at this position. - /// If the previous paragraph has a paragraph style name, look up the next-paragraph - /// style. - wxRichTextAttr GetStyleForNewParagraph(long pos, bool caretPosition = false, bool lookUpNewParaStyle=false) const; - - /// Dumps contents of buffer for debugging purposes - virtual void Dump(); - virtual void Dump(wxTextOutputStream& stream) { wxRichTextParagraphLayoutBox::Dump(stream); } - - /// Returns the file handlers - static wxList& GetHandlers() { return sm_handlers; } - - /// Adds a handler to the end - static void AddHandler(wxRichTextFileHandler *handler); - - /// Inserts a handler at the front - static void InsertHandler(wxRichTextFileHandler *handler); - - /// Removes a handler - static bool RemoveHandler(const wxString& name); - - /// Finds a handler by name - static wxRichTextFileHandler *FindHandler(const wxString& name); - - /// Finds a handler by extension and type - static wxRichTextFileHandler *FindHandler(const wxString& extension, int imageType); - - /// Finds a handler by filename or, if supplied, type - static wxRichTextFileHandler *FindHandlerFilenameOrType(const wxString& filename, int imageType); - - /// Finds a handler by type - static wxRichTextFileHandler *FindHandler(int imageType); - - /// Gets a wildcard incorporating all visible handlers. If 'types' is present, - /// will be filled with the file type corresponding to each filter. This can be - /// used to determine the type to pass to LoadFile given a selected filter. - static wxString GetExtWildcard(bool combine = false, bool save = false, wxArrayInt* types = NULL); - - /// Clean up handlers - static void CleanUpHandlers(); - - /// Initialise the standard handlers - static void InitStandardHandlers(); - - /// Get renderer - static wxRichTextRenderer* GetRenderer() { return sm_renderer; } - - /// Set renderer, deleting old one - static void SetRenderer(wxRichTextRenderer* renderer); - - /// Minimum margin between bullet and paragraph in 10ths of a mm - static int GetBulletRightMargin() { return sm_bulletRightMargin; } - static void SetBulletRightMargin(int margin) { sm_bulletRightMargin = margin; } - - /// Factor to multiply by character height to get a reasonable bullet size - static float GetBulletProportion() { return sm_bulletProportion; } - static void SetBulletProportion(float prop) { sm_bulletProportion = prop; } - - /// Scale factor for calculating dimensions - double GetScale() const { return m_scale; } - void SetScale(double scale) { m_scale = scale; } - -protected: - - /// Command processor - wxCommandProcessor* m_commandProcessor; - - /// Has been modified? - bool m_modified; - - /// Collapsed command stack - int m_batchedCommandDepth; - - /// Name for collapsed command - wxString m_batchedCommandsName; - - /// Current collapsed command accumulating actions - wxRichTextCommand* m_batchedCommand; - - /// Whether to suppress undo - int m_suppressUndo; - - /// Style sheet, if any - wxRichTextStyleSheet* m_styleSheet; - - /// List of event handlers that will be notified of events - wxList m_eventHandlers; - - /// Stack of attributes for convenience functions - wxList m_attributeStack; - - /// Flags to be passed to handlers - int m_handlerFlags; - - /// File handlers - static wxList sm_handlers; - - /// Renderer - static wxRichTextRenderer* sm_renderer; - - /// Minimum margin between bullet and paragraph in 10ths of a mm - static int sm_bulletRightMargin; - - /// Factor to multiply by character height to get a reasonable bullet size - static float sm_bulletProportion; - - /// Scaling factor in use: needed to calculate correct dimensions when printing - double m_scale; -}; - -/*! - * The command identifiers - * - */ - -enum wxRichTextCommandId -{ - wxRICHTEXT_INSERT, - wxRICHTEXT_DELETE, - wxRICHTEXT_CHANGE_STYLE -}; - -/*! - * Command classes for undo/redo - * - */ - -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextAction; -class WXDLLIMPEXP_RICHTEXT wxRichTextCommand: public wxCommand -{ -public: - // Ctor for one action - wxRichTextCommand(const wxString& name, wxRichTextCommandId id, wxRichTextBuffer* buffer, - wxRichTextCtrl* ctrl, bool ignoreFirstTime = false); - - // Ctor for multiple actions - wxRichTextCommand(const wxString& name); - - virtual ~wxRichTextCommand(); - - bool Do(); - bool Undo(); - - void AddAction(wxRichTextAction* action); - void ClearActions(); - - wxList& GetActions() { return m_actions; } - -protected: - - wxList m_actions; -}; - -/*! - * wxRichTextAction class declaration - * There can be more than one action in a command. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextAction: public wxObject -{ -public: - wxRichTextAction(wxRichTextCommand* cmd, const wxString& name, wxRichTextCommandId id, wxRichTextBuffer* buffer, - wxRichTextCtrl* ctrl, bool ignoreFirstTime = false); - - virtual ~wxRichTextAction(); - - bool Do(); - bool Undo(); - - /// Update the control appearance - void UpdateAppearance(long caretPosition, bool sendUpdateEvent = false, - wxArrayInt* optimizationLineCharPositions = NULL, wxArrayInt* optimizationLineYPositions = NULL); - - /// Replace the buffer paragraphs with the given fragment. - void ApplyParagraphs(const wxRichTextParagraphLayoutBox& fragment); - -#if wxABI_VERSION >= 20808 - // Create arrays to be used in refresh optimization - void CalculateRefreshOptimizations(wxArrayInt& optimizationLineCharPositions, wxArrayInt& optimizationLineYPositions); -#endif - - /// Get the fragments - wxRichTextParagraphLayoutBox& GetNewParagraphs() { return m_newParagraphs; } - wxRichTextParagraphLayoutBox& GetOldParagraphs() { return m_oldParagraphs; } - - /// Set/get the position used for e.g. insertion - void SetPosition(long pos) { m_position = pos; } - long GetPosition() const { return m_position; } - - /// Set/get the range for e.g. deletion - void SetRange(const wxRichTextRange& range) { m_range = range; } - const wxRichTextRange& GetRange() const { return m_range; } - - /// Get name - const wxString& GetName() const { return m_name; } - -protected: - // Action name - wxString m_name; - - // Buffer - wxRichTextBuffer* m_buffer; - - // Control - wxRichTextCtrl* m_ctrl; - - // Stores the new paragraphs - wxRichTextParagraphLayoutBox m_newParagraphs; - - // Stores the old paragraphs - wxRichTextParagraphLayoutBox m_oldParagraphs; - - // The affected range - wxRichTextRange m_range; - - // The insertion point for this command - long m_position; - - // Ignore 1st 'Do' operation because we already did it - bool m_ignoreThis; - - // The command identifier - wxRichTextCommandId m_cmdId; -}; - -/*! - * Handler flags - */ - -// Include style sheet when loading and saving -#define wxRICHTEXT_HANDLER_INCLUDE_STYLESHEET 0x0001 - -// Save images to memory file system in HTML handler -#define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_MEMORY 0x0010 - -// Save images to files in HTML handler -#define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_FILES 0x0020 - -// Save images as inline base64 data in HTML handler -#define wxRICHTEXT_HANDLER_SAVE_IMAGES_TO_BASE64 0x0040 - -// Don't write header and footer (or BODY), so we can include the fragment -// in a larger document -#define wxRICHTEXT_HANDLER_NO_HEADER_FOOTER 0x0080 - -// Convert the more common face names to names that will work on the current platform -// in a larger document -#define wxRICHTEXT_HANDLER_CONVERT_FACENAMES 0x0100 - -/*! - * wxRichTextFileHandler - * Base class for file handlers - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextFileHandler: public wxObject -{ - DECLARE_CLASS(wxRichTextFileHandler) -public: - wxRichTextFileHandler(const wxString& name = wxEmptyString, const wxString& ext = wxEmptyString, int type = 0) - : m_name(name), m_extension(ext), m_type(type), m_flags(0), m_visible(true) - { } - -#if wxUSE_STREAMS - bool LoadFile(wxRichTextBuffer *buffer, wxInputStream& stream) - { return DoLoadFile(buffer, stream); } - bool SaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream) - { return DoSaveFile(buffer, stream); } -#endif - - bool LoadFile(wxRichTextBuffer *buffer, const wxString& filename); - bool SaveFile(wxRichTextBuffer *buffer, const wxString& filename); - - /// Can we handle this filename (if using files)? By default, checks the extension. - virtual bool CanHandle(const wxString& filename) const; - - /// Can we save using this handler? - virtual bool CanSave() const { return false; } - - /// Can we load using this handler? - virtual bool CanLoad() const { return false; } - - /// Should this handler be visible to the user? - virtual bool IsVisible() const { return m_visible; } - virtual void SetVisible(bool visible) { m_visible = visible; } - - /// The name of the nandler - void SetName(const wxString& name) { m_name = name; } - wxString GetName() const { return m_name; } - - /// The default extension to recognise - void SetExtension(const wxString& ext) { m_extension = ext; } - wxString GetExtension() const { return m_extension; } - - /// The handler type - void SetType(int type) { m_type = type; } - int GetType() const { return m_type; } - - /// Flags controlling how loading and saving is done - void SetFlags(int flags) { m_flags = flags; } - int GetFlags() const { return m_flags; } - - /// Encoding to use when saving a file. If empty, a suitable encoding is chosen - void SetEncoding(const wxString& encoding) { m_encoding = encoding; } - const wxString& GetEncoding() const { return m_encoding; } - -protected: - -#if wxUSE_STREAMS - virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream) = 0; - virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream) = 0; -#endif - - wxString m_name; - wxString m_encoding; - wxString m_extension; - int m_type; - int m_flags; - bool m_visible; -}; - -/*! - * wxRichTextPlainTextHandler - * Plain text handler - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextPlainTextHandler: public wxRichTextFileHandler -{ - DECLARE_CLASS(wxRichTextPlainTextHandler) -public: - wxRichTextPlainTextHandler(const wxString& name = wxT("Text"), const wxString& ext = wxT("txt"), int type = wxRICHTEXT_TYPE_TEXT) - : wxRichTextFileHandler(name, ext, type) - { } - - /// Can we save using this handler? - virtual bool CanSave() const { return true; } - - /// Can we load using this handler? - virtual bool CanLoad() const { return true; } - -protected: - -#if wxUSE_STREAMS - virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream); - virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream); -#endif - -}; - -#if wxUSE_DATAOBJ - -/*! - * The data object for a wxRichTextBuffer - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextBufferDataObject: public wxDataObjectSimple -{ -public: - // ctor doesn't copy the pointer, so it shouldn't go away while this object - // is alive - wxRichTextBufferDataObject(wxRichTextBuffer* richTextBuffer = (wxRichTextBuffer*) NULL); - virtual ~wxRichTextBufferDataObject(); - - // after a call to this function, the buffer is owned by the caller and it - // is responsible for deleting it - wxRichTextBuffer* GetRichTextBuffer(); - - // Returns the id for the new data format - static const wxChar* GetRichTextBufferFormatId() { return ms_richTextBufferFormatId; } - - // base class pure virtuals - - virtual wxDataFormat GetPreferredFormat(Direction dir) const; - virtual size_t GetDataSize() const; - virtual bool GetDataHere(void *pBuf) const; - virtual bool SetData(size_t len, const void *buf); - - // prevent warnings - - virtual size_t GetDataSize(const wxDataFormat&) const { return GetDataSize(); } - virtual bool GetDataHere(const wxDataFormat&, void *buf) const { return GetDataHere(buf); } - virtual bool SetData(const wxDataFormat&, size_t len, const void *buf) { return SetData(len, buf); } - -private: - wxDataFormat m_formatRichTextBuffer; // our custom format - wxRichTextBuffer* m_richTextBuffer; // our data - static const wxChar* ms_richTextBufferFormatId; // our format id -}; - -#endif - -/*! - * wxRichTextRenderer isolates common drawing functionality - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextRenderer: public wxObject -{ -public: - wxRichTextRenderer() {} - virtual ~wxRichTextRenderer() {} - - /// Draw a standard bullet, as specified by the value of GetBulletName - virtual bool DrawStandardBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxTextAttrEx& attr, const wxRect& rect) = 0; - - /// Draw a bullet that can be described by text, such as numbered or symbol bullets - virtual bool DrawTextBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxTextAttrEx& attr, const wxRect& rect, const wxString& text) = 0; - - /// Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName - virtual bool DrawBitmapBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxTextAttrEx& attr, const wxRect& rect) = 0; - - /// Enumerate the standard bullet names currently supported - virtual bool EnumerateStandardBulletNames(wxArrayString& bulletNames) = 0; -}; - -/*! - * wxRichTextStdRenderer: standard renderer - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextStdRenderer: public wxRichTextRenderer -{ -public: - wxRichTextStdRenderer() {} - - /// Draw a standard bullet, as specified by the value of GetBulletName - virtual bool DrawStandardBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxTextAttrEx& attr, const wxRect& rect); - - /// Draw a bullet that can be described by text, such as numbered or symbol bullets - virtual bool DrawTextBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxTextAttrEx& attr, const wxRect& rect, const wxString& text); - - /// Draw a bitmap bullet, where the bullet bitmap is specified by the value of GetBulletName - virtual bool DrawBitmapBullet(wxRichTextParagraph* paragraph, wxDC& dc, const wxTextAttrEx& attr, const wxRect& rect); - - /// Enumerate the standard bullet names currently supported - virtual bool EnumerateStandardBulletNames(wxArrayString& bulletNames); -}; - -/*! - * Utilities - * - */ - -inline bool wxRichTextHasStyle(int flags, int style) -{ - return ((flags & style) == style); -} - -/// Compare two attribute objects -WXDLLIMPEXP_RICHTEXT bool wxTextAttrEq(const wxTextAttrEx& attr1, const wxTextAttrEx& attr2); -WXDLLIMPEXP_RICHTEXT bool wxTextAttrEq(const wxTextAttr& attr1, const wxRichTextAttr& attr2); - -/// Compare two attribute objects, but take into account the flags -/// specifying attributes of interest. -WXDLLIMPEXP_RICHTEXT bool wxTextAttrEqPartial(const wxTextAttrEx& attr1, const wxTextAttrEx& attr2, int flags); -WXDLLIMPEXP_RICHTEXT bool wxTextAttrEqPartial(const wxTextAttrEx& attr1, const wxRichTextAttr& attr2, int flags); - -/// Apply one style to another -WXDLLIMPEXP_RICHTEXT bool wxRichTextApplyStyle(wxTextAttrEx& destStyle, const wxTextAttrEx& style); -WXDLLIMPEXP_RICHTEXT bool wxRichTextApplyStyle(wxRichTextAttr& destStyle, const wxTextAttrEx& style); -WXDLLIMPEXP_RICHTEXT bool wxRichTextApplyStyle(wxTextAttrEx& destStyle, const wxRichTextAttr& style, wxRichTextAttr* compareWith = NULL); -WXDLLIMPEXP_RICHTEXT bool wxRichTextApplyStyle(wxRichTextAttr& destStyle, const wxRichTextAttr& style, wxRichTextAttr* compareWith = NULL); - -// Remove attributes -WXDLLIMPEXP_RICHTEXT bool wxRichTextRemoveStyle(wxTextAttrEx& destStyle, const wxRichTextAttr& style); - -/// Combine two bitlists -WXDLLIMPEXP_RICHTEXT bool wxRichTextCombineBitlists(int& valueA, int valueB, int& flagsA, int flagsB); - -/// Compare two bitlists -WXDLLIMPEXP_RICHTEXT bool wxRichTextBitlistsEqPartial(int valueA, int valueB, int flags); - -/// Split into paragraph and character styles -WXDLLIMPEXP_RICHTEXT bool wxRichTextSplitParaCharStyles(const wxTextAttrEx& style, wxTextAttrEx& parStyle, wxTextAttrEx& charStyle); - -/// Compare tabs -WXDLLIMPEXP_RICHTEXT bool wxRichTextTabsEq(const wxArrayInt& tabs1, const wxArrayInt& tabs2); - -/// Set the font without changing the font attributes -WXDLLIMPEXP_RICHTEXT void wxSetFontPreservingStyles(wxTextAttr& attr, const wxFont& font); - -/// Convert a decimal to Roman numerals -WXDLLIMPEXP_RICHTEXT wxString wxRichTextDecimalToRoman(long n); - -WXDLLIMPEXP_RICHTEXT void wxRichTextModuleInit(); - -#endif - // wxUSE_RICHTEXT - -#endif - // _WX_RICHTEXTBUFFER_H_ - diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextbulletspage.h b/desmume/src/windows/wx/include/wx/richtext/richtextbulletspage.h deleted file mode 100644 index 0df4eb6b5..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextbulletspage.h +++ /dev/null @@ -1,217 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtextbulletspage.h -// Purpose: -// Author: Julian Smart -// Modified by: -// Created: 10/4/2006 10:32:31 AM -// RCS-ID: $Id: richtextbulletspage.h 50950 2007-12-30 16:11:12Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _RICHTEXTBULLETSPAGE_H_ -#define _RICHTEXTBULLETSPAGE_H_ - -/*! - * Includes - */ - -/*! - * Forward declarations - */ - -////@begin forward declarations -class wxSpinCtrl; -class wxRichTextCtrl; -////@end forward declarations - -/*! - * Control identifiers - */ - -////@begin control identifiers -#define SYMBOL_WXRICHTEXTBULLETSPAGE_STYLE wxRESIZE_BORDER|wxTAB_TRAVERSAL -#define SYMBOL_WXRICHTEXTBULLETSPAGE_TITLE _("wxRichTextBulletsPage") -#define SYMBOL_WXRICHTEXTBULLETSPAGE_IDNAME ID_RICHTEXTBULLETSPAGE -#define SYMBOL_WXRICHTEXTBULLETSPAGE_SIZE wxSize(400, 300) -#define SYMBOL_WXRICHTEXTBULLETSPAGE_POSITION wxDefaultPosition -////@end control identifiers - -/*! - * wxRichTextBulletsPage class declaration - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextBulletsPage: public wxPanel -{ - DECLARE_DYNAMIC_CLASS( wxRichTextBulletsPage ) - DECLARE_EVENT_TABLE() - -public: - /// Constructors - wxRichTextBulletsPage( ); - wxRichTextBulletsPage( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTBULLETSPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTBULLETSPAGE_SIZE, long style = SYMBOL_WXRICHTEXTBULLETSPAGE_STYLE ); - - /// Creation - bool Create( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTBULLETSPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTBULLETSPAGE_SIZE, long style = SYMBOL_WXRICHTEXTBULLETSPAGE_STYLE ); - - /// Initialise members - void Init(); - - /// Creates the controls and sizers - void CreateControls(); - - /// Updates the bullets preview - void UpdatePreview(); - - /// Transfer data from/to window - virtual bool TransferDataFromWindow(); - virtual bool TransferDataToWindow(); - - /// Gets the attributes associated with the main formatting dialog - wxTextAttrEx* GetAttributes(); - - /// Update for symbol-related controls - void OnSymbolUpdate( wxUpdateUIEvent& event ); - - /// Update for number-related controls - void OnNumberUpdate( wxUpdateUIEvent& event ); - - /// Update for standard bullet-related controls - void OnStandardBulletUpdate( wxUpdateUIEvent& event ); - -////@begin wxRichTextBulletsPage event handler declarations - - /// wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_STYLELISTBOX - void OnStylelistboxSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_PERIODCTRL - void OnPeriodctrlClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_PERIODCTRL - void OnPeriodctrlUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL - void OnParenthesesctrlClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL - void OnParenthesesctrlUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_RIGHTPARENTHESISCTRL - void OnRightParenthesisCtrlClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_RIGHTPARENTHESISCTRL - void OnRightParenthesisCtrlUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_BULLETALIGNMENTCTRL - void OnBulletAlignmentCtrlSelected( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC - void OnSymbolstaticUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL - void OnSymbolctrlSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL - void OnSymbolctrlUpdated( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL - void OnSymbolctrlUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL - void OnChooseSymbolClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL - void OnChooseSymbolUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL - void OnSymbolfontctrlSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL - void OnSymbolfontctrlUpdated( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL - void OnSymbolfontctrlUIUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NAMESTATIC - void OnNamestaticUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL - void OnNamectrlSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL - void OnNamectrlUpdated( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NAMECTRL - void OnNamectrlUIUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC - void OnNumberstaticUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL - void OnNumberctrlUpdated( wxSpinEvent& event ); - - /// wxEVT_SCROLL_LINEUP event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL - void OnNumberctrlUp( wxSpinEvent& event ); - - /// wxEVT_SCROLL_LINEDOWN event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL - void OnNumberctrlDown( wxSpinEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL - void OnNumberctrlTextUpdated( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTBULLETSPAGE_NUMBERCTRL - void OnNumberctrlUpdate( wxUpdateUIEvent& event ); - -////@end wxRichTextBulletsPage event handler declarations - -////@begin wxRichTextBulletsPage member function declarations - - /// Retrieves bitmap resources - wxBitmap GetBitmapResource( const wxString& name ); - - /// Retrieves icon resources - wxIcon GetIconResource( const wxString& name ); -////@end wxRichTextBulletsPage member function declarations - - /// Should we show tooltips? - static bool ShowToolTips(); - -////@begin wxRichTextBulletsPage member variables - wxListBox* m_styleListBox; - wxCheckBox* m_periodCtrl; - wxCheckBox* m_parenthesesCtrl; - wxCheckBox* m_rightParenthesisCtrl; - wxComboBox* m_bulletAlignmentCtrl; - wxComboBox* m_symbolCtrl; - wxComboBox* m_symbolFontCtrl; - wxComboBox* m_bulletNameCtrl; - wxSpinCtrl* m_numberCtrl; - wxRichTextCtrl* m_previewCtrl; - /// Control identifiers - enum { - ID_RICHTEXTBULLETSPAGE = 10300, - ID_RICHTEXTBULLETSPAGE_STYLELISTBOX = 10305, - ID_RICHTEXTBULLETSPAGE_PERIODCTRL = 10313, - ID_RICHTEXTBULLETSPAGE_PARENTHESESCTRL = 10311, - ID_RICHTEXTBULLETSPAGE_RIGHTPARENTHESISCTRL = 10306, - ID_RICHTEXTBULLETSPAGE_BULLETALIGNMENTCTRL = 10315, - ID_RICHTEXTBULLETSPAGE_SYMBOLSTATIC = 10301, - ID_RICHTEXTBULLETSPAGE_SYMBOLCTRL = 10307, - ID_RICHTEXTBULLETSPAGE_CHOOSE_SYMBOL = 10308, - ID_RICHTEXTBULLETSPAGE_SYMBOLFONTCTRL = 10309, - ID_RICHTEXTBULLETSPAGE_NAMESTATIC = 10303, - ID_RICHTEXTBULLETSPAGE_NAMECTRL = 10304, - ID_RICHTEXTBULLETSPAGE_NUMBERSTATIC = 10302, - ID_RICHTEXTBULLETSPAGE_NUMBERCTRL = 10310, - ID_RICHTEXTBULLETSPAGE_PREVIEW_CTRL = 10314 - }; -////@end wxRichTextBulletsPage member variables - - bool m_hasBulletStyle; - bool m_hasBulletNumber; - bool m_hasBulletSymbol; - bool m_dontUpdate; -}; - -#endif - // _RICHTEXTBULLETSPAGE_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextctrl.h b/desmume/src/windows/wx/include/wx/richtext/richtextctrl.h deleted file mode 100644 index d73f34c00..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextctrl.h +++ /dev/null @@ -1,978 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtextctrl.h -// Purpose: A rich edit control -// Author: Julian Smart -// Modified by: -// Created: 2005-09-30 -// RCS-ID: $Id: richtextctrl.h 58256 2009-01-21 12:05:11Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RICHTEXTCTRL_H_ -#define _WX_RICHTEXTCTRL_H_ - -#include "wx/richtext/richtextbuffer.h" - -#if wxUSE_RICHTEXT - -#include "wx/scrolwin.h" -#include "wx/caret.h" - -#include "wx/textctrl.h" - -#if !defined(__WXGTK__) && !defined(__WXMAC__) -#define wxRICHTEXT_BUFFERED_PAINTING 1 -#else -#define wxRICHTEXT_BUFFERED_PAINTING 0 -#endif - -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextStyleDefinition; - -/*! - * Styles and flags - */ - -/* Styles - */ - -#define wxRE_READONLY 0x0010 -#define wxRE_MULTILINE 0x0020 -#define wxRE_CENTRE_CARET 0x8000 -#define wxRE_CENTER_CARET wxRE_CENTRE_CARET - -/* Flags - */ - -#define wxRICHTEXT_SHIFT_DOWN 0x01 -#define wxRICHTEXT_CTRL_DOWN 0x02 -#define wxRICHTEXT_ALT_DOWN 0x04 - -/* Defaults - */ - -#define wxRICHTEXT_DEFAULT_OVERALL_SIZE wxSize(-1, -1) -#define wxRICHTEXT_DEFAULT_IMAGE_SIZE wxSize(80, 80) -#define wxRICHTEXT_DEFAULT_SPACING 3 -#define wxRICHTEXT_DEFAULT_MARGIN 3 -#define wxRICHTEXT_DEFAULT_UNFOCUSSED_BACKGROUND wxColour(175, 175, 175) -#define wxRICHTEXT_DEFAULT_FOCUSSED_BACKGROUND wxColour(140, 140, 140) -#define wxRICHTEXT_DEFAULT_UNSELECTED_BACKGROUND wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE) -#define wxRICHTEXT_DEFAULT_TYPE_COLOUR wxColour(0, 0, 200) -#define wxRICHTEXT_DEFAULT_FOCUS_RECT_COLOUR wxColour(100, 80, 80) -#define wxRICHTEXT_DEFAULT_CARET_WIDTH 2 -// Minimum buffer size before delayed layout kicks in -#define wxRICHTEXT_DEFAULT_DELAYED_LAYOUT_THRESHOLD 20000 -// Milliseconds before layout occurs after resize -#define wxRICHTEXT_DEFAULT_LAYOUT_INTERVAL 50 - -/*! - * Forward declarations - */ - -/*! - * wxRichTextItem class declaration - */ - -// Drawing styles/states -#define wxRICHTEXT_SELECTED 0x01 -#define wxRICHTEXT_TAGGED 0x02 -// The control is focussed -#define wxRICHTEXT_FOCUSSED 0x04 -// The item itself has the focus -#define wxRICHTEXT_IS_FOCUS 0x08 - -/*! - * wxRichTextCtrl class declaration - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextCtrl : public wxTextCtrlBase, - public wxScrollHelper -{ - DECLARE_CLASS( wxRichTextCtrl ) - DECLARE_EVENT_TABLE() - -public: -// Constructors - - wxRichTextCtrl( ); - wxRichTextCtrl( wxWindow* parent, wxWindowID id = -1, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxRE_MULTILINE, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr); - - virtual ~wxRichTextCtrl( ); - -// Operations - - /// Creation - bool Create( wxWindow* parent, wxWindowID id = -1, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxRE_MULTILINE, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr ); - - /// Member initialisation - void Init(); - -///// wxTextCtrl compatibility - -// Accessors - - virtual wxString GetValue() const; - - virtual wxString GetRange(long from, long to) const; - - virtual int GetLineLength(long lineNo) const ; - virtual wxString GetLineText(long lineNo) const ; - virtual int GetNumberOfLines() const ; - - virtual bool IsModified() const ; - virtual bool IsEditable() const ; - - // more readable flag testing methods - bool IsSingleLine() const { return !HasFlag(wxRE_MULTILINE); } - bool IsMultiLine() const { return !IsSingleLine(); } - - // If the return values from and to are the same, there is no selection. - virtual void GetSelection(long* from, long* to) const; - - virtual wxString GetStringSelection() const; - - /// Get filename - wxString GetFilename() const { return m_filename; } - - /// Set filename - void SetFilename(const wxString& filename) { m_filename = filename; } - - /// Set the threshold in character positions for doing layout optimization during sizing - void SetDelayedLayoutThreshold(long threshold) { m_delayedLayoutThreshold = threshold; } - - /// Get the threshold in character positions for doing layout optimization during sizing - long GetDelayedLayoutThreshold() const { return m_delayedLayoutThreshold; } - -#if wxABI_VERSION >= 20808 - /// Set text cursor - void SetTextCursor(const wxCursor& cursor ) { m_textCursor = cursor; } - - /// Get text cursor - wxCursor GetTextCursor() const { return m_textCursor; } - - /// Set URL cursor - void SetURLCursor(const wxCursor& cursor ) { m_urlCursor = cursor; } - - /// Get URL cursor - wxCursor GetURLCursor() const { return m_urlCursor; } -#endif - -// Operations - - // editing - virtual void Clear(); - virtual void Replace(long from, long to, const wxString& value); - virtual void Remove(long from, long to); - - // load/save the controls contents from/to the file - virtual bool DoLoadFile(const wxString& file, int fileType); - virtual bool DoSaveFile(const wxString& file = wxEmptyString, int fileType = wxRICHTEXT_TYPE_ANY); - - /// Set the handler flags, controlling loading and saving - void SetHandlerFlags(int flags) { GetBuffer().SetHandlerFlags(flags); } - - /// Get the handler flags, controlling loading and saving - int GetHandlerFlags() const { return GetBuffer().GetHandlerFlags(); } - - // sets/clears the dirty flag - 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 WXUNUSED(len)) { } - - // writing text inserts it at the current position, appending always - // inserts it at the end - virtual void WriteText(const wxString& text); - virtual void AppendText(const wxString& text); - - // text control under some platforms supports the text styles: these - // methods allow to apply the given text style to the given selection or to - // set/get the style which will be used for all appended text - virtual bool SetStyle(long start, long end, const wxTextAttr& style); - virtual bool SetStyle(long start, long end, const wxTextAttrEx& style); - virtual bool SetStyle(const wxRichTextRange& range, const wxRichTextAttr& style); - virtual bool GetStyle(long position, wxTextAttr& style); - virtual bool GetStyle(long position, wxTextAttrEx& style); - virtual bool GetStyle(long position, wxRichTextAttr& style); - - // get the common set of styles for the range - virtual bool GetStyleForRange(const wxRichTextRange& range, wxRichTextAttr& style); - virtual bool GetStyleForRange(const wxRichTextRange& range, wxTextAttrEx& style); - - // extended style setting operation with flags including: - // wxRICHTEXT_SETSTYLE_WITH_UNDO, wxRICHTEXT_SETSTYLE_OPTIMIZE, wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY, wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY - // see richtextbuffer.h for more details. - virtual bool SetStyleEx(long start, long end, const wxTextAttrEx& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO); - virtual bool SetStyleEx(const wxRichTextRange& range, const wxTextAttrEx& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO); - virtual bool SetStyleEx(const wxRichTextRange& range, const wxRichTextAttr& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO); - - /// Get the content (uncombined) attributes for this position. - virtual bool GetUncombinedStyle(long position, wxTextAttr& style); - virtual bool GetUncombinedStyle(long position, wxTextAttrEx& style); - virtual bool GetUncombinedStyle(long position, wxRichTextAttr& style); - - virtual bool SetDefaultStyle(const wxTextAttrEx& style); - virtual bool SetDefaultStyle(const wxTextAttr& style); - - // TODO: change to GetDefaultStyle if we merge wxTextAttr and wxTextAttrEx - virtual const wxTextAttrEx& GetDefaultStyleEx() const; - virtual const wxTextAttr& GetDefaultStyle() const; - - /// Set list style - virtual bool SetListStyle(const wxRichTextRange& range, wxRichTextListStyleDefinition* def, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1); - virtual bool SetListStyle(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1); - - /// Clear list for given range - virtual bool ClearListStyle(const wxRichTextRange& range, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO); - - /// Number/renumber any list elements in the given range - /// def/defName can be NULL/empty to indicate that the existing list style should be used. - virtual bool NumberList(const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1); - virtual bool NumberList(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1); - - /// Promote the list items within the given range. promoteBy can be a positive or negative number, e.g. 1 or -1 - /// def/defName can be NULL/empty to indicate that the existing list style should be used. - virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1); - virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1); - - /// Deletes the content in the given range - virtual bool Delete(const wxRichTextRange& range); - - // translate between the position (which is just an index in the text ctrl - // considering all its contents as a single strings) and (x, y) coordinates - // which represent column and line. - virtual long XYToPosition(long x, long y) const; - virtual bool PositionToXY(long pos, long *x, long *y) const; - - virtual void ShowPosition(long pos); - - // find the character at position given in pixels - // - // NB: pt is in device coords (not adjusted for the client area origin nor - // scrolling) - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const; - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, - wxTextCoord *col, - wxTextCoord *row) const; - - // Clipboard operations - virtual void Copy(); - virtual void Cut(); - virtual void Paste(); - virtual void DeleteSelection(); - - virtual bool CanCopy() const; - virtual bool CanCut() const; - virtual bool CanPaste() const; - virtual bool CanDeleteSelection() const; - - // Undo/redo - virtual void Undo(); - virtual void Redo(); - - virtual bool CanUndo() const; - virtual bool CanRedo() const; - - // Insertion point - virtual void SetInsertionPoint(long pos); - virtual void SetInsertionPointEnd(); - virtual long GetInsertionPoint() const; - virtual wxTextPos GetLastPosition() const; - - virtual void SetSelection(long from, long to); - virtual void SelectAll(); - virtual void SetEditable(bool editable); - - /// Call Freeze to prevent refresh - virtual void Freeze(); - - /// Call Thaw to refresh - virtual void Thaw(); - - /// Call Thaw to refresh - virtual bool IsFrozen() const { return m_freezeCount > 0; } - - virtual bool HasSelection() const; - -///// Functionality specific to wxRichTextCtrl - - /// Write an image at the current insertion point. Supply optional type to use - /// for internal and file storage of the raw data. - virtual bool WriteImage(const wxImage& image, int bitmapType = wxBITMAP_TYPE_PNG); - - /// Write a bitmap at the current insertion point. Supply optional type to use - /// for internal and file storage of the raw data. - virtual bool WriteImage(const wxBitmap& bitmap, int bitmapType = wxBITMAP_TYPE_PNG); - - /// Load an image from file and write at the current insertion point. - virtual bool WriteImage(const wxString& filename, int bitmapType); - - /// Write an image block at the current insertion point. - virtual bool WriteImage(const wxRichTextImageBlock& imageBlock); - - /// Insert a newline (actually paragraph) at the current insertion point. - virtual bool Newline(); - - /// Insert a line break at the current insertion point. - virtual bool LineBreak(); - - /// Set basic (overall) style - virtual void SetBasicStyle(const wxTextAttrEx& style) { GetBuffer().SetBasicStyle(style); } - virtual void SetBasicStyle(const wxRichTextAttr& style) { GetBuffer().SetBasicStyle(style); } - - /// Get basic (overall) style - virtual const wxTextAttrEx& GetBasicStyle() const { return GetBuffer().GetBasicStyle(); } - - /// Begin using a style - virtual bool BeginStyle(const wxTextAttrEx& style) { return GetBuffer().BeginStyle(style); } - - /// End the style - virtual bool EndStyle() { return GetBuffer().EndStyle(); } - - /// End all styles - virtual bool EndAllStyles() { return GetBuffer().EndAllStyles(); } - - /// Begin using bold - bool BeginBold() { return GetBuffer().BeginBold(); } - - /// End using bold - bool EndBold() { return GetBuffer().EndBold(); } - - /// Begin using italic - bool BeginItalic() { return GetBuffer().BeginItalic(); } - - /// End using italic - bool EndItalic() { return GetBuffer().EndItalic(); } - - /// Begin using underline - bool BeginUnderline() { return GetBuffer().BeginUnderline(); } - - /// End using underline - bool EndUnderline() { return GetBuffer().EndUnderline(); } - - /// Begin using point size - bool BeginFontSize(int pointSize) { return GetBuffer().BeginFontSize(pointSize); } - - /// End using point size - bool EndFontSize() { return GetBuffer().EndFontSize(); } - - /// Begin using this font - bool BeginFont(const wxFont& font) { return GetBuffer().BeginFont(font); } - - /// End using a font - bool EndFont() { return GetBuffer().EndFont(); } - - /// Begin using this colour - bool BeginTextColour(const wxColour& colour) { return GetBuffer().BeginTextColour(colour); } - - /// End using a colour - bool EndTextColour() { return GetBuffer().EndTextColour(); } - - /// Begin using alignment - bool BeginAlignment(wxTextAttrAlignment alignment) { return GetBuffer().BeginAlignment(alignment); } - - /// End alignment - bool EndAlignment() { return GetBuffer().EndAlignment(); } - - /// Begin left indent - bool BeginLeftIndent(int leftIndent, int leftSubIndent = 0) { return GetBuffer().BeginLeftIndent(leftIndent, leftSubIndent); } - - /// End left indent - bool EndLeftIndent() { return GetBuffer().EndLeftIndent(); } - - /// Begin right indent - bool BeginRightIndent(int rightIndent) { return GetBuffer().BeginRightIndent(rightIndent); } - - /// End right indent - bool EndRightIndent() { return GetBuffer().EndRightIndent(); } - - /// Begin paragraph spacing - bool BeginParagraphSpacing(int before, int after) { return GetBuffer().BeginParagraphSpacing(before, after); } - - /// End paragraph spacing - bool EndParagraphSpacing() { return GetBuffer().EndParagraphSpacing(); } - - /// Begin line spacing - bool BeginLineSpacing(int lineSpacing) { return GetBuffer().BeginLineSpacing(lineSpacing); } - - /// End line spacing - bool EndLineSpacing() { return GetBuffer().EndLineSpacing(); } - - /// Begin numbered bullet - bool BeginNumberedBullet(int bulletNumber, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_ARABIC|wxTEXT_ATTR_BULLET_STYLE_PERIOD) - { return GetBuffer().BeginNumberedBullet(bulletNumber, leftIndent, leftSubIndent, bulletStyle); } - - /// End numbered bullet - bool EndNumberedBullet() { return GetBuffer().EndNumberedBullet(); } - - /// Begin symbol bullet - bool BeginSymbolBullet(const wxString& symbol, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL) - { return GetBuffer().BeginSymbolBullet(symbol, leftIndent, leftSubIndent, bulletStyle); } - - /// End symbol bullet - bool EndSymbolBullet() { return GetBuffer().EndSymbolBullet(); } - - /// Begin standard bullet - bool BeginStandardBullet(const wxString& bulletName, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD) - { return GetBuffer().BeginStandardBullet(bulletName, leftIndent, leftSubIndent, bulletStyle); } - - /// End standard bullet - bool EndStandardBullet() { return GetBuffer().EndStandardBullet(); } - - /// Begin named character style - bool BeginCharacterStyle(const wxString& characterStyle) { return GetBuffer().BeginCharacterStyle(characterStyle); } - - /// End named character style - bool EndCharacterStyle() { return GetBuffer().EndCharacterStyle(); } - - /// Begin named paragraph style - bool BeginParagraphStyle(const wxString& paragraphStyle) { return GetBuffer().BeginParagraphStyle(paragraphStyle); } - - /// End named character style - bool EndParagraphStyle() { return GetBuffer().EndParagraphStyle(); } - - /// Begin named list style - bool BeginListStyle(const wxString& listStyle, int level = 1, int number = 1) { return GetBuffer().BeginListStyle(listStyle, level, number); } - - /// End named character style - bool EndListStyle() { return GetBuffer().EndListStyle(); } - - /// Begin URL - bool BeginURL(const wxString& url, const wxString& characterStyle = wxEmptyString) { return GetBuffer().BeginURL(url, characterStyle); } - - /// End URL - bool EndURL() { return GetBuffer().EndURL(); } - - /// Sets the default style to the style under the cursor - bool SetDefaultStyleToCursorStyle(); - - /// Clear the selection - virtual void SelectNone(); - - /// Select the word at the given character position - virtual bool SelectWord(long position); - - /// Get/set the selection range in character positions. -1, -1 means no selection. - /// The range is in API convention, i.e. a single character selection is denoted - /// by (n, n+1) - wxRichTextRange GetSelectionRange() const; - void SetSelectionRange(const wxRichTextRange& range); - - /// Get/set the selection range in character positions. -1, -1 means no selection. - /// The range is in internal format, i.e. a single character selection is denoted - /// by (n, n) - const wxRichTextRange& GetInternalSelectionRange() const { return m_selectionRange; } - void SetInternalSelectionRange(const wxRichTextRange& range) { m_selectionRange = range; } - - /// Add a new paragraph of text to the end of the buffer - virtual wxRichTextRange AddParagraph(const wxString& text); - - /// Add an image - virtual wxRichTextRange AddImage(const wxImage& image); - - /// Layout the buffer: which we must do before certain operations, such as - /// setting the caret position. - virtual bool LayoutContent(bool onlyVisibleRect = false); - - /// Move the caret to the given character position - virtual bool MoveCaret(long pos, bool showAtLineStart = false); - - /// Move right - virtual bool MoveRight(int noPositions = 1, int flags = 0); - - /// Move left - virtual bool MoveLeft(int noPositions = 1, int flags = 0); - - /// Move up - virtual bool MoveUp(int noLines = 1, int flags = 0); - - /// Move up - virtual bool MoveDown(int noLines = 1, int flags = 0); - - /// Move to the end of the line - virtual bool MoveToLineEnd(int flags = 0); - - /// Move to the start of the line - virtual bool MoveToLineStart(int flags = 0); - - /// Move to the end of the paragraph - virtual bool MoveToParagraphEnd(int flags = 0); - - /// Move to the start of the paragraph - virtual bool MoveToParagraphStart(int flags = 0); - - /// Move to the start of the buffer - virtual bool MoveHome(int flags = 0); - - /// Move to the end of the buffer - virtual bool MoveEnd(int flags = 0); - - /// Move n pages up - virtual bool PageUp(int noPages = 1, int flags = 0); - - /// Move n pages down - virtual bool PageDown(int noPages = 1, int flags = 0); - - /// Move n words left - virtual bool WordLeft(int noPages = 1, int flags = 0); - - /// Move n words right - virtual bool WordRight(int noPages = 1, int flags = 0); - - /// Returns the buffer associated with the control. - wxRichTextBuffer& GetBuffer() { return m_buffer; } - const wxRichTextBuffer& GetBuffer() const { return m_buffer; } - - /// Start batching undo history for commands. - virtual bool BeginBatchUndo(const wxString& cmdName) { return m_buffer.BeginBatchUndo(cmdName); } - - /// End batching undo history for commands. - virtual bool EndBatchUndo() { return m_buffer.EndBatchUndo(); } - - /// Are we batching undo history for commands? - virtual bool BatchingUndo() const { return m_buffer.BatchingUndo(); } - - /// Start suppressing undo history for commands. - virtual bool BeginSuppressUndo() { return m_buffer.BeginSuppressUndo(); } - - /// End suppressing undo history for commands. - virtual bool EndSuppressUndo() { return m_buffer.EndSuppressUndo(); } - - /// Are we suppressing undo history for commands? - virtual bool SuppressingUndo() const { return m_buffer.SuppressingUndo(); } - - /// Test if this whole range has character attributes of the specified kind. If any - /// of the attributes are different within the range, the test fails. You - /// can use this to implement, for example, bold button updating. style must have - /// flags indicating which attributes are of interest. - virtual bool HasCharacterAttributes(const wxRichTextRange& range, const wxTextAttrEx& style) const - { - return GetBuffer().HasCharacterAttributes(range.ToInternal(), style); - } - virtual bool HasCharacterAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const - { - return GetBuffer().HasCharacterAttributes(range.ToInternal(), style); - } - - /// Test if this whole range has paragraph attributes of the specified kind. If any - /// of the attributes are different within the range, the test fails. You - /// can use this to implement, for example, centering button updating. style must have - /// flags indicating which attributes are of interest. - virtual bool HasParagraphAttributes(const wxRichTextRange& range, const wxTextAttrEx& style) const - { - return GetBuffer().HasParagraphAttributes(range.ToInternal(), style); - } - virtual bool HasParagraphAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const - { - return GetBuffer().HasParagraphAttributes(range.ToInternal(), style); - } - - /// Is all of the selection bold? - virtual bool IsSelectionBold(); - - /// Is all of the selection italics? - virtual bool IsSelectionItalics(); - - /// Is all of the selection underlined? - virtual bool IsSelectionUnderlined(); - - /// Is all of the selection aligned according to the specified flag? - virtual bool IsSelectionAligned(wxTextAttrAlignment alignment); - - /// Apply bold to the selection - virtual bool ApplyBoldToSelection(); - - /// Apply italic to the selection - virtual bool ApplyItalicToSelection(); - - /// Apply underline to the selection - virtual bool ApplyUnderlineToSelection(); - - /// Apply alignment to the selection - virtual bool ApplyAlignmentToSelection(wxTextAttrAlignment alignment); - - /// Apply a named style to the selection - virtual bool ApplyStyle(wxRichTextStyleDefinition* def); - - /// Set style sheet, if any - void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { GetBuffer().SetStyleSheet(styleSheet); } - wxRichTextStyleSheet* GetStyleSheet() const { return GetBuffer().GetStyleSheet(); } - - /// Push style sheet to top of stack - bool PushStyleSheet(wxRichTextStyleSheet* styleSheet) { return GetBuffer().PushStyleSheet(styleSheet); } - - /// Pop style sheet from top of stack - wxRichTextStyleSheet* PopStyleSheet() { return GetBuffer().PopStyleSheet(); } - - /// Apply the style sheet to the buffer, for example if the styles have changed. - bool ApplyStyleSheet(wxRichTextStyleSheet* styleSheet = NULL); - -// Command handlers - - void Command(wxCommandEvent& event); - void OnDropFiles(wxDropFilesEvent& event); - void OnCaptureLost(wxMouseCaptureLostEvent& event); - - void OnCut(wxCommandEvent& event); - void OnCopy(wxCommandEvent& event); - void OnPaste(wxCommandEvent& event); - void OnUndo(wxCommandEvent& event); - void OnRedo(wxCommandEvent& event); - void OnSelectAll(wxCommandEvent& event); - void OnClear(wxCommandEvent& event); - - void OnUpdateCut(wxUpdateUIEvent& event); - void OnUpdateCopy(wxUpdateUIEvent& event); - void OnUpdatePaste(wxUpdateUIEvent& event); - void OnUpdateUndo(wxUpdateUIEvent& event); - void OnUpdateRedo(wxUpdateUIEvent& event); - void OnUpdateSelectAll(wxUpdateUIEvent& event); - void OnUpdateClear(wxUpdateUIEvent& event); - - // Show a context menu for Rich Edit controls (the standard - // EDIT control has one already) - void OnContextMenu(wxContextMenuEvent& event); - -// Event handlers - - /// Painting - void OnPaint(wxPaintEvent& event); - void OnEraseBackground(wxEraseEvent& event); - - /// Left-click - void OnLeftClick(wxMouseEvent& event); - - /// Left-up - void OnLeftUp(wxMouseEvent& event); - - /// Motion - void OnMoveMouse(wxMouseEvent& event); - - /// Left-double-click - void OnLeftDClick(wxMouseEvent& event); - - /// Middle-click - void OnMiddleClick(wxMouseEvent& event); - - /// Right-click - void OnRightClick(wxMouseEvent& event); - - /// Key press - void OnChar(wxKeyEvent& event); - - /// Sizing - void OnSize(wxSizeEvent& event); - - /// Setting/losing focus - void OnSetFocus(wxFocusEvent& event); - void OnKillFocus(wxFocusEvent& event); - - /// Idle-time processing - void OnIdle(wxIdleEvent& event); - - /// Scrolling - void OnScroll(wxScrollWinEvent& event); - - /// Set font, and also default attributes - virtual bool SetFont(const wxFont& font); - - /// Set up scrollbars, e.g. after a resize - virtual void SetupScrollbars(bool atTop = false); - - /// Keyboard navigation - virtual bool KeyboardNavigate(int keyCode, int flags); - - /// Paint the background - virtual void PaintBackground(wxDC& dc); - -#if wxRICHTEXT_BUFFERED_PAINTING - /// Recreate buffer bitmap if necessary - virtual bool RecreateBuffer(const wxSize& size = wxDefaultSize); -#endif - - /// Set the selection - virtual void DoSetSelection(long from, long to, bool scrollCaret = true); - - /// Write text - virtual void DoWriteText(const wxString& value, int flags = 0); - - /// Should we inherit colours? - virtual bool ShouldInheritColours() const { return false; } - - /// Position the caret - virtual void PositionCaret(); - - /// Extend the selection, returning true if the selection was - /// changed. Selections are in caret positions. - virtual bool ExtendSelection(long oldPosition, long newPosition, int flags); - - /// Scroll into view. This takes a _caret_ position. - virtual bool ScrollIntoView(long position, int keyCode); - - /// The caret position is the character position just before the caret. - /// A value of -1 means the caret is at the start of the buffer. - void SetCaretPosition(long position, bool showAtLineStart = false) ; - long GetCaretPosition() const { return m_caretPosition; } - - /// The adjusted caret position is the character position adjusted to take - /// into account whether we're at the start of a paragraph, in which case - /// style information should be taken from the next position, not current one. - long GetAdjustedCaretPosition(long caretPos) const; - - /// Move caret one visual step forward: this may mean setting a flag - /// and keeping the same position if we're going from the end of one line - /// to the start of the next, which may be the exact same caret position. - void MoveCaretForward(long oldPosition) ; - - /// Move caret one visual step forward: this may mean setting a flag - /// and keeping the same position if we're going from the end of one line - /// to the start of the next, which may be the exact same caret position. - void MoveCaretBack(long oldPosition) ; - - /// Get the caret height and position for the given character position - bool GetCaretPositionForIndex(long position, wxRect& rect); - - /// Gets the line for the visible caret position. If the caret is - /// shown at the very end of the line, it means the next character is actually - /// on the following line. So let's get the line we're expecting to find - /// if this is the case. - wxRichTextLine* GetVisibleLineForCaretPosition(long caretPosition) const; - - /// Gets the command processor - wxCommandProcessor* GetCommandProcessor() const { return GetBuffer().GetCommandProcessor(); } - - /// Delete content if there is a selection, e.g. when pressing a key. - /// Returns the new caret position in newPos, or leaves it if there - /// was no action. - bool DeleteSelectedContent(long* newPos= NULL); - - /// Transform logical to physical - wxPoint GetPhysicalPoint(const wxPoint& ptLogical) const; - - /// Transform physical to logical - wxPoint GetLogicalPoint(const wxPoint& ptPhysical) const; - - /// Finds the caret position for the next word. Direction - /// is 1 (forward) or -1 (backwards). - virtual long FindNextWordPosition(int direction = 1) const; - - /// Is the given position visible on the screen? - bool IsPositionVisible(long pos) const; - - /// Returns the first visible position in the current view - long GetFirstVisiblePosition() const; - - /// Returns the caret position since the default formatting was changed. As - /// soon as this position changes, we no longer reflect the default style - /// in the UI. A value of -2 means that we should only reflect the style of the - /// content under the caret. - long GetCaretPositionForDefaultStyle() const { return m_caretPositionForDefaultStyle; } - - /// Set the caret position for the default style that the user is selecting. - void SetCaretPositionForDefaultStyle(long pos) { m_caretPositionForDefaultStyle = pos; } - - /// Should the UI reflect the default style chosen by the user, rather than the style under - /// the caret? - bool IsDefaultStyleShowing() const { return m_caretPositionForDefaultStyle != -2; } - - /// Convenience function that tells the control to start reflecting the default - /// style, since the user is changing it. - void SetAndShowDefaultStyle(const wxRichTextAttr& attr) - { - SetDefaultStyle(attr); - SetCaretPositionForDefaultStyle(GetCaretPosition()); - } - - /// Get the first visible point in the window - wxPoint GetFirstVisiblePoint() const; - -// Implementation - - /// Font names take a long time to retrieve, so cache them (on demand) - static const wxArrayString& GetAvailableFontNames(); - static void ClearAvailableFontNames(); - - WX_FORWARD_TO_SCROLL_HELPER() - -// Overrides -protected: - - virtual wxSize DoGetBestSize() const ; - - virtual void DoSetValue(const wxString& value, int flags = 0); - - -// Data members -private: - - /// Allows nested Freeze/Thaw - int m_freezeCount; - -#if wxRICHTEXT_BUFFERED_PAINTING - /// Buffer bitmap - wxBitmap m_bufferBitmap; -#endif - - /// Text buffer - wxRichTextBuffer m_buffer; - - wxMenu* m_contextMenu; - - /// Caret position (1 less than the character position, so -1 is the - /// first caret position). - long m_caretPosition; - - /// Caret position when the default formatting has been changed. As - /// soon as this position changes, we no longer reflect the default style - /// in the UI. - long m_caretPositionForDefaultStyle; - - /// Selection range in character positions. -2, -2 means no selection. - wxRichTextRange m_selectionRange; - - /// Anchor so we know how to extend the selection - /// It's a caret position since it's between two characters. - long m_selectionAnchor; - - /// Are we editable? - bool m_editable; - - /// Are we showing the caret position at the start of a line - /// instead of at the end of the previous one? - bool m_caretAtLineStart; - - /// Are we dragging a selection? - bool m_dragging; - - /// Start position for drag - wxPoint m_dragStart; - - /// Do we need full layout in idle? - bool m_fullLayoutRequired; - wxLongLong m_fullLayoutTime; - long m_fullLayoutSavedPosition; - - /// Threshold for doing delayed layout - long m_delayedLayoutThreshold; - - /// Cursors - wxCursor m_textCursor; - wxCursor m_urlCursor; - - static wxArrayString sm_availableFontNames; -}; - -/*! - * wxRichTextEvent - the event class for wxRichTextCtrl notifications - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextEvent : public wxNotifyEvent -{ -public: - wxRichTextEvent(wxEventType commandType = wxEVT_NULL, int winid = 0) - : wxNotifyEvent(commandType, winid), - m_flags(0), m_position(-1), m_oldStyleSheet(NULL), m_newStyleSheet(NULL), - m_char((wxChar) 0) - { } - - wxRichTextEvent(const wxRichTextEvent& event) - : wxNotifyEvent(event), - m_flags(event.m_flags), m_position(-1), - m_oldStyleSheet(event.m_oldStyleSheet), m_newStyleSheet(event.m_newStyleSheet), - m_char((wxChar) 0) - { } - - long GetPosition() const { return m_position; } - void SetPosition(long pos) { m_position = pos; } - - int GetFlags() const { return m_flags; } - void SetFlags(int flags) { m_flags = flags; } - - wxRichTextStyleSheet* GetOldStyleSheet() const { return m_oldStyleSheet; } - void SetOldStyleSheet(wxRichTextStyleSheet* sheet) { m_oldStyleSheet = sheet; } - - wxRichTextStyleSheet* GetNewStyleSheet() const { return m_newStyleSheet; } - void SetNewStyleSheet(wxRichTextStyleSheet* sheet) { m_newStyleSheet = sheet; } - - const wxRichTextRange& GetRange() const { return m_range; } - void SetRange(const wxRichTextRange& range) { m_range = range; } - - wxChar GetCharacter() const { return m_char; } - void SetCharacter(wxChar ch) { m_char = ch; } - - virtual wxEvent *Clone() const { return new wxRichTextEvent(*this); } - -protected: - int m_flags; - long m_position; - wxRichTextStyleSheet* m_oldStyleSheet; - wxRichTextStyleSheet* m_newStyleSheet; - wxRichTextRange m_range; - wxChar m_char; - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxRichTextEvent) -}; - -/*! - * wxRichTextCtrl event macros - */ - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_LEFT_CLICK, 2602) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK, 2603) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK, 2604) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_LEFT_DCLICK, 2605) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_RETURN, 2606) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_CHARACTER, 2607) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_DELETE, 2608) - - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING, 2609) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED, 2610) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING, 2611) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED, 2612) - - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED, 2613) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED, 2614) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED, 2615) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_SELECTION_CHANGED, 2616) - -#if wxABI_VERSION >= 20808 - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_BUFFER_RESET, 2617) -#endif -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxRichTextEventFunction)(wxRichTextEvent&); - -#define wxRichTextEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxRichTextEventFunction, &func) - -#define EVT_RICHTEXT_LEFT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_LEFT_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_RIGHT_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_MIDDLE_CLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_LEFT_DCLICK(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_LEFT_DCLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_RETURN(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_RETURN, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_CHARACTER(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_CHARACTER, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_DELETE(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_DELETE, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), - -#define EVT_RICHTEXT_STYLESHEET_CHANGING(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_STYLESHEET_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_STYLESHEET_REPLACING(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_STYLESHEET_REPLACED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), - -#define EVT_RICHTEXT_CONTENT_INSERTED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_CONTENT_DELETED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_STYLE_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_SELECTION_CHANGED(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_SELECTION_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), -#define EVT_RICHTEXT_BUFFER_RESET(id, fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_BUFFER_RESET, id, -1, (wxObjectEventFunction) (wxEventFunction) wxStaticCastEvent( wxRichTextEventFunction, & fn ), NULL ), - -#endif - // wxUSE_RICHTEXT - -#endif - // _WX_RICHTEXTCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextfontpage.h b/desmume/src/windows/wx/include/wx/richtext/richtextfontpage.h deleted file mode 100644 index 6c4f7dfde..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextfontpage.h +++ /dev/null @@ -1,164 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richeditfontpage.h -// Purpose: Font page for wxRichTextFormattingDialog -// Author: Julian Smart -// Modified by: -// Created: 2006-10-02 -// RCS-ID: $Id: richtextfontpage.h 53105 2008-04-10 14:05:25Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _RICHTEXTFONTPAGE_H_ -#define _RICHTEXTFONTPAGE_H_ - -/*! - * Includes - */ - -////@begin includes -////@end includes - -/*! - * Forward declarations - */ - -////@begin forward declarations -class wxRichTextFontListBox; -class wxRichTextColourSwatchCtrl; -class wxRichTextFontPreviewCtrl; -////@end forward declarations - -/*! - * Control identifiers - */ - -////@begin control identifiers -#define SYMBOL_WXRICHTEXTFONTPAGE_STYLE wxRESIZE_BORDER|wxTAB_TRAVERSAL -#define SYMBOL_WXRICHTEXTFONTPAGE_TITLE _("wxRichTextFontPage") -#define SYMBOL_WXRICHTEXTFONTPAGE_IDNAME ID_RICHTEXTFONTPAGE -#define SYMBOL_WXRICHTEXTFONTPAGE_SIZE wxSize(400, 300) -#define SYMBOL_WXRICHTEXTFONTPAGE_POSITION wxDefaultPosition -////@end control identifiers - -/*! - * wxRichTextFontPage class declaration - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextFontPage: public wxPanel -{ - DECLARE_DYNAMIC_CLASS( wxRichTextFontPage ) - DECLARE_EVENT_TABLE() - -public: - /// Constructors - wxRichTextFontPage( ); - wxRichTextFontPage( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTFONTPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTFONTPAGE_SIZE, long style = SYMBOL_WXRICHTEXTFONTPAGE_STYLE ); - - /// Initialise members - void Init(); - - /// Creation - bool Create( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTFONTPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTFONTPAGE_SIZE, long style = SYMBOL_WXRICHTEXTFONTPAGE_STYLE ); - - /// Creates the controls and sizers - void CreateControls(); - - /// Transfer data from/to window - virtual bool TransferDataFromWindow(); - virtual bool TransferDataToWindow(); - - /// Updates the font preview - void UpdatePreview(); - - void OnFaceListBoxSelected( wxCommandEvent& event ); - void OnColourClicked( wxCommandEvent& event ); - - /// Gets the attributes associated with the main formatting dialog - wxTextAttrEx* GetAttributes(); - -////@begin wxRichTextFontPage event handler declarations - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTFONTPAGE_FACETEXTCTRL - void OnFaceTextCtrlUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTFONTPAGE_SIZETEXTCTRL - void OnSizeTextCtrlUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_SIZELISTBOX - void OnSizeListBoxSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_STYLECTRL - void OnStyleCtrlSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_WEIGHTCTRL - void OnWeightCtrlSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL - void OnUnderliningCtrlSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL - void OnStrikethroughctrlClick( wxCommandEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_CAPSCTRL - void OnCapsctrlClick( wxCommandEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_SUPERSCRIPT - void OnRichtextfontpageSuperscriptClick( wxCommandEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTFONTPAGE_SUBSCRIPT - void OnRichtextfontpageSubscriptClick( wxCommandEvent& event ); - -////@end wxRichTextFontPage event handler declarations - -////@begin wxRichTextFontPage member function declarations - - /// Retrieves bitmap resources - wxBitmap GetBitmapResource( const wxString& name ); - - /// Retrieves icon resources - wxIcon GetIconResource( const wxString& name ); -////@end wxRichTextFontPage member function declarations - - /// Should we show tooltips? - static bool ShowToolTips(); - -////@begin wxRichTextFontPage member variables - wxTextCtrl* m_faceTextCtrl; - wxRichTextFontListBox* m_faceListBox; - wxTextCtrl* m_sizeTextCtrl; - wxListBox* m_sizeListBox; - wxComboBox* m_styleCtrl; - wxComboBox* m_weightCtrl; - wxComboBox* m_underliningCtrl; - wxRichTextColourSwatchCtrl* m_colourCtrl; - wxCheckBox* m_strikethroughCtrl; - wxCheckBox* m_capitalsCtrl; - wxCheckBox* m_superscriptCtrl; - wxCheckBox* m_subscriptCtrl; - wxRichTextFontPreviewCtrl* m_previewCtrl; - /// Control identifiers - enum { - ID_RICHTEXTFONTPAGE = 10000, - ID_RICHTEXTFONTPAGE_FACETEXTCTRL = 10001, - ID_RICHTEXTFONTPAGE_FACELISTBOX = 10002, - ID_RICHTEXTFONTPAGE_SIZETEXTCTRL = 10005, - ID_RICHTEXTFONTPAGE_SIZELISTBOX = 10006, - ID_RICHTEXTFONTPAGE_STYLECTRL = 10007, - ID_RICHTEXTFONTPAGE_WEIGHTCTRL = 10004, - ID_RICHTEXTFONTPAGE_UNDERLINING_CTRL = 10008, - ID_RICHTEXTFONTPAGE_COLOURCTRL = 10009, - ID_RICHTEXTFONTPAGE_STRIKETHROUGHCTRL = 10010, - ID_RICHTEXTFONTPAGE_CAPSCTRL = 10011, - ID_RICHTEXTFONTPAGE_SUPERSCRIPT = 10012, - ID_RICHTEXTFONTPAGE_SUBSCRIPT = 10013, - ID_RICHTEXTFONTPAGE_PREVIEWCTRL = 10003 - }; -////@end wxRichTextFontPage member variables - - bool m_dontUpdate; - bool m_colourPresent; -}; - -#endif - // _RICHTEXTFONTPAGE_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextformatdlg.h b/desmume/src/windows/wx/include/wx/richtext/richtextformatdlg.h deleted file mode 100644 index e3bbf6145..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextformatdlg.h +++ /dev/null @@ -1,327 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtextformatdlg.h -// Purpose: Formatting dialog for wxRichTextCtrl -// Author: Julian Smart -// Modified by: -// Created: 2006-10-01 -// RCS-ID: $Id: richtextformatdlg.h 49946 2007-11-14 14:22:56Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RICHTEXTFORMATDLG_H_ -#define _WX_RICHTEXTFORMATDLG_H_ - -/*! - * Includes - */ - -#include "wx/defs.h" - -#if wxUSE_RICHTEXT - -#include "wx/propdlg.h" -#include "wx/bookctrl.h" - -#if wxUSE_HTML -#include "wx/htmllbox.h" -#endif - -#include "wx/richtext/richtextbuffer.h" -#include "wx/richtext/richtextstyles.h" - -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextFormattingDialog; -class WXDLLIMPEXP_FWD_CORE wxImageList; - -/*! - * Flags determining the pages and buttons to be created in the dialog - */ - -#define wxRICHTEXT_FORMAT_STYLE_EDITOR 0x0001 -#define wxRICHTEXT_FORMAT_FONT 0x0002 -#define wxRICHTEXT_FORMAT_TABS 0x0004 -#define wxRICHTEXT_FORMAT_BULLETS 0x0008 -#define wxRICHTEXT_FORMAT_INDENTS_SPACING 0x0010 -#define wxRICHTEXT_FORMAT_LIST_STYLE 0x0020 - -#define wxRICHTEXT_FORMAT_HELP_BUTTON 0x0100 - -/*! - * Indices for bullet styles in list control - */ - -enum { - wxRICHTEXT_BULLETINDEX_NONE = 0, - wxRICHTEXT_BULLETINDEX_ARABIC, - wxRICHTEXT_BULLETINDEX_UPPER_CASE, - wxRICHTEXT_BULLETINDEX_LOWER_CASE, - wxRICHTEXT_BULLETINDEX_UPPER_CASE_ROMAN, - wxRICHTEXT_BULLETINDEX_LOWER_CASE_ROMAN, - wxRICHTEXT_BULLETINDEX_OUTLINE, - wxRICHTEXT_BULLETINDEX_SYMBOL, - wxRICHTEXT_BULLETINDEX_BITMAP, - wxRICHTEXT_BULLETINDEX_STANDARD -}; - -/*! - * Shorthand for common combinations of pages - */ - -#define wxRICHTEXT_FORMAT_PARAGRAPH (wxRICHTEXT_FORMAT_INDENTS_SPACING | wxRICHTEXT_FORMAT_BULLETS | wxRICHTEXT_FORMAT_TABS | wxRICHTEXT_FORMAT_FONT) -#define wxRICHTEXT_FORMAT_CHARACTER (wxRICHTEXT_FORMAT_FONT) -#define wxRICHTEXT_FORMAT_STYLE (wxRICHTEXT_FORMAT_PARAGRAPH | wxRICHTEXT_FORMAT_STYLE_EDITOR) - -/*! - * Factory for formatting dialog - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextFormattingDialogFactory: public wxObject -{ -public: - wxRichTextFormattingDialogFactory() {} - virtual ~wxRichTextFormattingDialogFactory() {} - -// Overrideables - - /// Create all pages, under the dialog's book control, also calling AddPage - virtual bool CreatePages(long pages, wxRichTextFormattingDialog* dialog); - - /// Create a page, given a page identifier - virtual wxPanel* CreatePage(int page, wxString& title, wxRichTextFormattingDialog* dialog); - - /// Enumerate all available page identifiers - virtual int GetPageId(int i) const; - - /// Get the number of available page identifiers - virtual int GetPageIdCount() const; - - /// Get the image index for the given page identifier - virtual int GetPageImage(int WXUNUSED(id)) const { return -1; } - - /// Invoke help for the dialog - virtual bool ShowHelp(int WXUNUSED(page), wxRichTextFormattingDialog* WXUNUSED(dialog)) { return false; } - - /// Set the sheet style, called at the start of wxRichTextFormattingDialog::Create - virtual bool SetSheetStyle(wxRichTextFormattingDialog* dialog); - - /// Create the main dialog buttons - virtual bool CreateButtons(wxRichTextFormattingDialog* dialog); -}; - -/*! - * Formatting dialog for a wxRichTextCtrl - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextFormattingDialog: public wxPropertySheetDialog -{ -DECLARE_CLASS(wxRichTextFormattingDialog) -public: - wxRichTextFormattingDialog() { Init(); } - - wxRichTextFormattingDialog(long flags, wxWindow* parent, const wxString& title = wxGetTranslation(wxT("Formatting")), wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, const wxSize& sz = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE) - { - Init(); - Create(flags, parent, title, id, pos, sz, style); - } - - ~wxRichTextFormattingDialog(); - - void Init(); - - bool Create(long flags, wxWindow* parent, const wxString& title = wxGetTranslation(wxT("Formatting")), wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, const wxSize& sz = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE); - - /// Get attributes from the given range - virtual bool GetStyle(wxRichTextCtrl* ctrl, const wxRichTextRange& range); - - /// Set the attributes and optionally update the display - virtual bool SetStyle(const wxTextAttrEx& style, bool update = true); - - /// Set the style definition and optionally update the display - virtual bool SetStyleDefinition(const wxRichTextStyleDefinition& styleDef, wxRichTextStyleSheet* sheet, bool update = true); - - /// Get the style definition, if any - virtual wxRichTextStyleDefinition* GetStyleDefinition() const { return m_styleDefinition; } - - /// Get the style sheet, if any - virtual wxRichTextStyleSheet* GetStyleSheet() const { return m_styleSheet; } - - /// Update the display - virtual bool UpdateDisplay(); - - /// Apply attributes to the given range - virtual bool ApplyStyle(wxRichTextCtrl* ctrl, const wxRichTextRange& range, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_OPTIMIZE); - - /// Gets and sets the attributes - const wxTextAttrEx& GetAttributes() const { return m_attributes; } - wxTextAttrEx& GetAttributes() { return m_attributes; } - void SetAttributes(const wxTextAttrEx& attr) { m_attributes = attr; } - - /// Transfers the data and from to the window - virtual bool TransferDataToWindow(); - virtual bool TransferDataFromWindow(); - - /// Apply the styles when a different tab is selected, so the previews are - /// up to date - void OnTabChanged(wxBookCtrlEvent& event); - - /// Respond to help command - void OnHelp(wxCommandEvent& event); - - /// Set/get image list - void SetImageList(wxImageList* imageList) { m_imageList = imageList; } - wxImageList* GetImageList() const { return m_imageList; } - - /// Get/set formatting factory object - static void SetFormattingDialogFactory(wxRichTextFormattingDialogFactory* factory); - static wxRichTextFormattingDialogFactory* GetFormattingDialogFactory() { return ms_FormattingDialogFactory; } - - /// Helper for pages to get the top-level dialog - static wxRichTextFormattingDialog* GetDialog(wxWindow* win); - - /// Helper for pages to get the attributes - static wxTextAttrEx* GetDialogAttributes(wxWindow* win); - - /// Helper for pages to get the style - static wxRichTextStyleDefinition* GetDialogStyleDefinition(wxWindow* win); - - /// Should we show tooltips? - static bool ShowToolTips() { return sm_showToolTips; } - - /// Determines whether tooltips will be shown - static void SetShowToolTips(bool show) { sm_showToolTips = show; } - - /// Map book control page index to our page id - void AddPageId(int id) { m_pageIds.Add(id); } - -protected: - - wxImageList* m_imageList; - wxTextAttrEx m_attributes; - wxRichTextStyleDefinition* m_styleDefinition; - wxRichTextStyleSheet* m_styleSheet; - wxArrayInt m_pageIds; // mapping of book control indexes to page ids - - static wxRichTextFormattingDialogFactory* ms_FormattingDialogFactory; - static bool sm_showToolTips; - -DECLARE_EVENT_TABLE() -}; - -//----------------------------------------------------------------------------- -// helper class - wxRichTextFontPreviewCtrl -//----------------------------------------------------------------------------- - -class WXDLLIMPEXP_RICHTEXT wxRichTextFontPreviewCtrl : public wxWindow -{ -public: - wxRichTextFontPreviewCtrl(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& sz = wxDefaultSize, long style = 0) - { - if ((style & wxBORDER_MASK) == wxBORDER_DEFAULT) -#ifdef __WXMSW__ - style |= GetThemedBorderStyle(); -#else - style |= wxBORDER_SUNKEN; -#endif - wxWindow::Create(parent, id, pos, sz, style); - - SetBackgroundColour(*wxWHITE); - m_textEffects = 0; - } - - void SetTextEffects(int effects) { m_textEffects = effects; } - int GetTextEffects() const { return m_textEffects; } - -private: - int m_textEffects; - - void OnPaint(wxPaintEvent& event); - DECLARE_EVENT_TABLE() -}; - -/* - * A control for displaying a small preview of a colour or bitmap - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextColourSwatchCtrl: public wxControl -{ - DECLARE_CLASS(wxRichTextColourSwatchCtrl) -public: - wxRichTextColourSwatchCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); - ~wxRichTextColourSwatchCtrl(); - - void OnMouseEvent(wxMouseEvent& event); - - void SetColour(const wxColour& colour) { m_colour = colour; SetBackgroundColour(m_colour); } - - wxColour& GetColour() { return m_colour; } - - virtual wxSize DoGetBestSize() const { return GetSize(); } - -protected: - wxColour m_colour; - -DECLARE_EVENT_TABLE() -}; - -/*! - * wxRichTextFontListBox class declaration - * A listbox to display fonts. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextFontListBox: public wxHtmlListBox -{ - DECLARE_CLASS(wxRichTextFontListBox) - DECLARE_EVENT_TABLE() - -public: - wxRichTextFontListBox() - { - Init(); - } - wxRichTextFontListBox(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0); - virtual ~wxRichTextFontListBox(); - - void Init() - { - } - - bool Create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0); - - /// Creates a suitable HTML fragment for a font - wxString CreateHTML(const wxString& facename) const; - - /// Get font name for index - wxString GetFaceName(size_t i) const ; - - /// Set selection for string, returning the index. - int SetFaceNameSelection(const wxString& name); - - /// Updates the font list - void UpdateFonts(); - - /// Does this face name exist? - bool HasFaceName(const wxString& faceName) const { return m_faceNames.Index(faceName) != wxNOT_FOUND; } - - /// Returns the array of face names - const wxArrayString& GetFaceNames() const { return m_faceNames; } - -protected: - /// Returns the HTML for this item - virtual wxString OnGetItem(size_t n) const; - -private: - - wxArrayString m_faceNames; -}; - -#endif - // wxUSE_RICHTEXT - -#endif - // _WX_RICHTEXTFORMATDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtexthtml.h b/desmume/src/windows/wx/include/wx/richtext/richtexthtml.h deleted file mode 100644 index 45412485c..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtexthtml.h +++ /dev/null @@ -1,145 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtexthtml.h -// Purpose: HTML I/O for wxRichTextCtrl -// Author: Julian Smart -// Modified by: -// Created: 2005-09-30 -// RCS-ID: $Id: richtexthtml.h 43599 2006-07-25 06:50:19Z ABX $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RICHTEXTHTML_H_ -#define _WX_RICHTEXTHTML_H_ - -/*! - * Includes - */ - -#include "wx/richtext/richtextbuffer.h" - -/*! - * wxRichTextHTMLHandler - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextHTMLHandler: public wxRichTextFileHandler -{ - DECLARE_CLASS(wxRichTextHTMLHandler) -public: - wxRichTextHTMLHandler(const wxString& name = wxT("HTML"), const wxString& ext = wxT("html"), int type = wxRICHTEXT_TYPE_HTML); - - /// Can we save using this handler? - virtual bool CanSave() const { return true; } - - /// Can we load using this handler? - virtual bool CanLoad() const { return false; } - - /// Can we handle this filename (if using files)? By default, checks the extension. - virtual bool CanHandle(const wxString& filename) const; - -// Accessors and operations unique to this handler - - /// Set and get the list of image locations generated by the last operation - void SetTemporaryImageLocations(const wxArrayString& locations) { m_imageLocations = locations; } - const wxArrayString& GetTemporaryImageLocations() const { return m_imageLocations; } - - /// Clear the image locations generated by the last operation - void ClearTemporaryImageLocations() { m_imageLocations.Clear(); } - - /// Delete the in-memory or temporary files generated by the last operation - bool DeleteTemporaryImages(); - - /// Delete the in-memory or temporary files generated by the last operation. This is a static - /// function that can be used to delete the saved locations from an earlier operation, - /// for example after the user has viewed the HTML file. - static bool DeleteTemporaryImages(int flags, const wxArrayString& imageLocations); - - /// Reset the file counter, in case, for example, the same names are required each time - static void SetFileCounter(int counter) { sm_fileCounter = counter; } - - /// Set and get the directory for storing temporary files. If empty, the system - /// temporary directory will be used. - void SetTempDir(const wxString& tempDir) { m_tempDir = tempDir; } - const wxString& GetTempDir() const { return m_tempDir; } - - /// Set and get mapping from point size to HTML font size. There should be 7 elements, - /// one for each HTML font size, each element specifying the maximum point size for that - /// HTML font size. E.g. 8, 10, 13, 17, 22, 29, 100 - void SetFontSizeMapping(const wxArrayInt& fontSizeMapping) { m_fontSizeMapping = fontSizeMapping; } - wxArrayInt GetFontSizeMapping() const { return m_fontSizeMapping; } - -protected: - -// Implementation - -#if wxUSE_STREAMS - virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream); - virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream); - - /// Output character formatting - void BeginCharacterFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, const wxTextAttrEx& paraStyle, wxTextOutputStream& stream ); - void EndCharacterFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, const wxTextAttrEx& paraStyle, wxTextOutputStream& stream ); - - /// Output paragraph formatting - void BeginParagraphFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, wxTextOutputStream& stream); - void EndParagraphFormatting(const wxTextAttrEx& currentStyle, const wxTextAttrEx& thisStyle, wxTextOutputStream& stream); - - /// Output font tag - void OutputFont(const wxTextAttrEx& style, wxTextOutputStream& stream); - - /// Closes lists to level (-1 means close all) - void CloseLists(int level, wxTextOutputStream& str); - - /// Writes an image to its base64 equivalent, or to the memory filesystem, or to a file - void WriteImage(wxRichTextImage* image, wxOutputStream& stream); - - /// Converts from pt to size property compatible height - long PtToSize(long size); - - /// Typical base64 encoder - wxChar* b64enc(unsigned char* input, size_t in_len); - - /// Gets the mime type of the given wxBITMAP_TYPE - const wxChar* GetMimeType(int imageType); - - /// Gets the html equivalent of the specified value - wxString GetAlignment(const wxTextAttrEx& thisStyle); - - /// Generates   array for indentations - wxString SymbolicIndent(long indent); - - /// Finds the html equivalent of the specified bullet - int TypeOfList(const wxTextAttrEx& thisStyle, wxString& tag); -#endif - -// Data members - - wxRichTextBuffer* m_buffer; - - /// Indentation values of the table tags - wxArrayInt m_indents; - - /// Stack of list types: 0 = ol, 1 = ul - wxArrayInt m_listTypes; - - /// Is there any opened font tag? - bool m_font; - - /// Are we in a table? - bool m_inTable; - - /// A list of the image files or in-memory images created by the last operation. - wxArrayString m_imageLocations; - - /// A location for the temporary files - wxString m_tempDir; - - /// A mapping from point size to HTML font size - wxArrayInt m_fontSizeMapping; - - /// A counter for generating filenames - static int sm_fileCounter; -}; - -#endif - // _WX_RICHTEXTXML_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextindentspage.h b/desmume/src/windows/wx/include/wx/richtext/richtextindentspage.h deleted file mode 100644 index fad8c30de..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextindentspage.h +++ /dev/null @@ -1,165 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtextindentspage.h -// Purpose: -// Author: Julian Smart -// Modified by: -// Created: 10/3/2006 2:28:21 PM -// RCS-ID: $Id: richtextindentspage.h 43277 2006-11-10 15:48:46Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _RICHTEXTINDENTSPAGE_H_ -#define _RICHTEXTINDENTSPAGE_H_ - -/*! - * Includes - */ - -////@begin includes -#include "wx/statline.h" -////@end includes - -/*! - * Forward declarations - */ - -////@begin forward declarations -class wxRichTextCtrl; -////@end forward declarations - -/*! - * Control identifiers - */ - -////@begin control identifiers -#define SYMBOL_WXRICHTEXTINDENTSSPACINGPAGE_STYLE wxRESIZE_BORDER|wxTAB_TRAVERSAL -#define SYMBOL_WXRICHTEXTINDENTSSPACINGPAGE_TITLE _("wxRichTextFontPage") -#define SYMBOL_WXRICHTEXTINDENTSSPACINGPAGE_IDNAME ID_RICHTEXTINDENTSSPACINGPAGE -#define SYMBOL_WXRICHTEXTINDENTSSPACINGPAGE_SIZE wxSize(400, 300) -#define SYMBOL_WXRICHTEXTINDENTSSPACINGPAGE_POSITION wxDefaultPosition -////@end control identifiers - -/*! - * wxRichTextIndentsSpacingPage class declaration - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextIndentsSpacingPage: public wxPanel -{ - DECLARE_DYNAMIC_CLASS( wxRichTextIndentsSpacingPage ) - DECLARE_EVENT_TABLE() - -public: - /// Constructors - wxRichTextIndentsSpacingPage( ); - wxRichTextIndentsSpacingPage( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTINDENTSSPACINGPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTINDENTSSPACINGPAGE_SIZE, long style = SYMBOL_WXRICHTEXTINDENTSSPACINGPAGE_STYLE ); - - /// Creation - bool Create( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTINDENTSSPACINGPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTINDENTSSPACINGPAGE_SIZE, long style = SYMBOL_WXRICHTEXTINDENTSSPACINGPAGE_STYLE ); - - /// Initialise members - void Init(); - - /// Creates the controls and sizers - void CreateControls(); - - /// Transfer data from/to window - virtual bool TransferDataFromWindow(); - virtual bool TransferDataToWindow(); - - /// Updates the paragraph preview - void UpdatePreview(); - - /// Gets the attributes associated with the main formatting dialog - wxTextAttrEx* GetAttributes(); - -////@begin wxRichTextIndentsSpacingPage event handler declarations - - /// wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_ALIGNMENT_LEFT - void OnAlignmentLeftSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_ALIGNMENT_RIGHT - void OnAlignmentRightSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_ALIGNMENT_JUSTIFIED - void OnAlignmentJustifiedSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_ALIGNMENT_CENTRED - void OnAlignmentCentredSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_ALIGNMENT_INDETERMINATE - void OnAlignmentIndeterminateSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_INDENT_LEFT - void OnIndentLeftUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_INDENT_LEFT_FIRST - void OnIndentLeftFirstUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_INDENT_RIGHT - void OnIndentRightUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_OUTLINELEVEL - void OnRichtextOutlinelevelSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_SPACING_BEFORE - void OnSpacingBeforeUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_SPACING_AFTER - void OnSpacingAfterUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTINDENTSSPACINGPAGE_SPACING_LINE - void OnSpacingLineSelected( wxCommandEvent& event ); - -////@end wxRichTextIndentsSpacingPage event handler declarations - -////@begin wxRichTextIndentsSpacingPage member function declarations - - /// Retrieves bitmap resources - wxBitmap GetBitmapResource( const wxString& name ); - - /// Retrieves icon resources - wxIcon GetIconResource( const wxString& name ); -////@end wxRichTextIndentsSpacingPage member function declarations - - /// Should we show tooltips? - static bool ShowToolTips(); - -////@begin wxRichTextIndentsSpacingPage member variables - wxRadioButton* m_alignmentLeft; - wxRadioButton* m_alignmentRight; - wxRadioButton* m_alignmentJustified; - wxRadioButton* m_alignmentCentred; - wxRadioButton* m_alignmentIndeterminate; - wxTextCtrl* m_indentLeft; - wxTextCtrl* m_indentLeftFirst; - wxTextCtrl* m_indentRight; - wxComboBox* m_outlineLevelCtrl; - wxTextCtrl* m_spacingBefore; - wxTextCtrl* m_spacingAfter; - wxComboBox* m_spacingLine; - wxRichTextCtrl* m_previewCtrl; - /// Control identifiers - enum { - ID_RICHTEXTINDENTSSPACINGPAGE = 10100, - ID_RICHTEXTINDENTSSPACINGPAGE_ALIGNMENT_LEFT = 10102, - ID_RICHTEXTINDENTSSPACINGPAGE_ALIGNMENT_RIGHT = 10110, - ID_RICHTEXTINDENTSSPACINGPAGE_ALIGNMENT_JUSTIFIED = 10111, - ID_RICHTEXTINDENTSSPACINGPAGE_ALIGNMENT_CENTRED = 10112, - ID_RICHTEXTINDENTSSPACINGPAGE_ALIGNMENT_INDETERMINATE = 10101, - ID_RICHTEXTINDENTSSPACINGPAGE_INDENT_LEFT = 10103, - ID_RICHTEXTINDENTSSPACINGPAGE_INDENT_LEFT_FIRST = 10104, - ID_RICHTEXTINDENTSSPACINGPAGE_INDENT_RIGHT = 10113, - ID_RICHTEXTINDENTSSPACINGPAGE_OUTLINELEVEL = 10105, - ID_RICHTEXTINDENTSSPACINGPAGE_SPACING_BEFORE = 10114, - ID_RICHTEXTINDENTSSPACINGPAGE_SPACING_AFTER = 10116, - ID_RICHTEXTINDENTSSPACINGPAGE_SPACING_LINE = 10115, - ID_RICHTEXTINDENTSSPACINGPAGE_PREVIEW_CTRL = 10109 - }; -////@end wxRichTextIndentsSpacingPage member variables - - bool m_dontUpdate; -}; - -#endif - // _RICHTEXTINDENTSPAGE_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextliststylepage.h b/desmume/src/windows/wx/include/wx/richtext/richtextliststylepage.h deleted file mode 100644 index 324c9fe97..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextliststylepage.h +++ /dev/null @@ -1,276 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtextliststylepage.h -// Purpose: -// Author: Julian Smart -// Modified by: -// Created: 10/18/2006 11:36:37 AM -// RCS-ID: $Id: richtextliststylepage.h 42678 2006-10-29 22:01:06Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _RICHTEXTLISTSTYLEPAGE_H_ -#define _RICHTEXTLISTSTYLEPAGE_H_ - -/*! - * Includes - */ - -////@begin includes -#include "wx/spinctrl.h" -#include "wx/notebook.h" -#include "wx/statline.h" -////@end includes - -/*! - * Control identifiers - */ - -////@begin control identifiers -#define SYMBOL_WXRICHTEXTLISTSTYLEPAGE_STYLE wxRESIZE_BORDER|wxTAB_TRAVERSAL -#define SYMBOL_WXRICHTEXTLISTSTYLEPAGE_TITLE _("wxRichTextListStylePage") -#define SYMBOL_WXRICHTEXTLISTSTYLEPAGE_IDNAME ID_RICHTEXTLISTSTYLEPAGE -#define SYMBOL_WXRICHTEXTLISTSTYLEPAGE_SIZE wxSize(400, 300) -#define SYMBOL_WXRICHTEXTLISTSTYLEPAGE_POSITION wxDefaultPosition -////@end control identifiers - -/*! - * wxRichTextListStylePage class declaration - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextListStylePage: public wxPanel -{ - DECLARE_DYNAMIC_CLASS( wxRichTextListStylePage ) - DECLARE_EVENT_TABLE() - -public: - /// Constructors - wxRichTextListStylePage( ); - wxRichTextListStylePage( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTLISTSTYLEPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTLISTSTYLEPAGE_SIZE, long style = SYMBOL_WXRICHTEXTLISTSTYLEPAGE_STYLE ); - - /// Creation - bool Create( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTLISTSTYLEPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTLISTSTYLEPAGE_SIZE, long style = SYMBOL_WXRICHTEXTLISTSTYLEPAGE_STYLE ); - - /// Initialises member variables - void Init(); - - /// Creates the controls and sizers - void CreateControls(); - - /// Updates the bullets preview - void UpdatePreview(); - - /// Transfer data from/to window - virtual bool TransferDataFromWindow(); - virtual bool TransferDataToWindow(); - - /// Get attributes for selected level - wxRichTextAttr* GetAttributesForSelection(); - - /// Update for symbol-related controls - void OnSymbolUpdate( wxUpdateUIEvent& event ); - - /// Update for number-related controls - void OnNumberUpdate( wxUpdateUIEvent& event ); - - /// Update for standard bullet-related controls - void OnStandardBulletUpdate( wxUpdateUIEvent& event ); - - /// Just transfer to the window - void DoTransferDataToWindow(); - - /// Transfer from the window and preview - void TransferAndPreview(); - -////@begin wxRichTextListStylePage event handler declarations - - /// wxEVT_COMMAND_SPINCTRL_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_LEVEL - void OnLevelUpdated( wxSpinEvent& event ); - - /// wxEVT_SCROLL_LINEUP event handler for ID_RICHTEXTLISTSTYLEPAGE_LEVEL - void OnLevelUp( wxSpinEvent& event ); - - /// wxEVT_SCROLL_LINEDOWN event handler for ID_RICHTEXTLISTSTYLEPAGE_LEVEL - void OnLevelDown( wxSpinEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_LEVEL - void OnLevelTextUpdated( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_LEVEL - void OnLevelUIUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTLISTSTYLEPAGE_CHOOSE_FONT - void OnChooseFontClick( wxCommandEvent& event ); - - /// wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_STYLELISTBOX - void OnStylelistboxSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL - void OnPeriodctrlClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL - void OnPeriodctrlUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL - void OnParenthesesctrlClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL - void OnParenthesesctrlUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_CHECKBOX_CLICKED event handler for ID_RICHTEXTLISTSTYLEPAGE_RIGHTPARENTHESISCTRL - void OnRightParenthesisCtrlClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_RIGHTPARENTHESISCTRL - void OnRightParenthesisCtrlUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_BULLETALIGNMENTCTRL - void OnBulletAlignmentCtrlSelected( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_SYMBOLSTATIC - void OnSymbolstaticUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_SYMBOLCTRL - void OnSymbolctrlSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_SYMBOLCTRL - void OnSymbolctrlUpdated( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_SYMBOLCTRL - void OnSymbolctrlUIUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTLISTSTYLEPAGE_CHOOSE_SYMBOL - void OnChooseSymbolClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_CHOOSE_SYMBOL - void OnChooseSymbolUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_SYMBOLFONTCTRL - void OnSymbolfontctrlSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_SYMBOLFONTCTRL - void OnSymbolfontctrlUpdated( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_SYMBOLFONTCTRL - void OnSymbolfontctrlUIUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMESTATIC - void OnNamestaticUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL - void OnNamectrlSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL - void OnNamectrlUpdated( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL - void OnNamectrlUIUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_ALIGNLEFT - void OnRichtextliststylepageAlignleftSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_ALIGNRIGHT - void OnRichtextliststylepageAlignrightSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_JUSTIFIED - void OnRichtextliststylepageJustifiedSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_CENTERED - void OnRichtextliststylepageCenteredSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_ALIGNINDETERMINATE - void OnRichtextliststylepageAlignindeterminateSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_INDENTLEFT - void OnIndentLeftUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_INDENTFIRSTLINE - void OnIndentFirstLineUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_INDENTRIGHT - void OnIndentRightUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_SPACINGBEFORE - void OnSpacingBeforeUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_TEXT_UPDATED event handler for ID_RICHTEXTLISTSTYLEPAGE_SPACINGAFTER - void OnSpacingAfterUpdated( wxCommandEvent& event ); - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_RICHTEXTLISTSTYLEPAGE_LINESPACING - void OnLineSpacingSelected( wxCommandEvent& event ); - -////@end wxRichTextListStylePage event handler declarations - -////@begin wxRichTextListStylePage member function declarations - - /// Retrieves bitmap resources - wxBitmap GetBitmapResource( const wxString& name ); - - /// Retrieves icon resources - wxIcon GetIconResource( const wxString& name ); -////@end wxRichTextListStylePage member function declarations - - /// Should we show tooltips? - static bool ShowToolTips(); - -////@begin wxRichTextListStylePage member variables - wxSpinCtrl* m_levelCtrl; - wxListBox* m_styleListBox; - wxCheckBox* m_periodCtrl; - wxCheckBox* m_parenthesesCtrl; - wxCheckBox* m_rightParenthesisCtrl; - wxComboBox* m_bulletAlignmentCtrl; - wxComboBox* m_symbolCtrl; - wxComboBox* m_symbolFontCtrl; - wxComboBox* m_bulletNameCtrl; - wxRadioButton* m_alignmentLeft; - wxRadioButton* m_alignmentRight; - wxRadioButton* m_alignmentJustified; - wxRadioButton* m_alignmentCentred; - wxRadioButton* m_alignmentIndeterminate; - wxTextCtrl* m_indentLeft; - wxTextCtrl* m_indentLeftFirst; - wxTextCtrl* m_indentRight; - wxTextCtrl* m_spacingBefore; - wxTextCtrl* m_spacingAfter; - wxComboBox* m_spacingLine; - wxRichTextCtrl* m_previewCtrl; - /// Control identifiers - enum { - ID_RICHTEXTLISTSTYLEPAGE = 10616, - ID_RICHTEXTLISTSTYLEPAGE_LEVEL = 10617, - ID_RICHTEXTLISTSTYLEPAGE_CHOOSE_FONT = 10604, - ID_RICHTEXTLISTSTYLEPAGE_NOTEBOOK = 10618, - ID_RICHTEXTLISTSTYLEPAGE_BULLETS = 10619, - ID_RICHTEXTLISTSTYLEPAGE_STYLELISTBOX = 10620, - ID_RICHTEXTLISTSTYLEPAGE_PERIODCTRL = 10627, - ID_RICHTEXTLISTSTYLEPAGE_PARENTHESESCTRL = 10626, - ID_RICHTEXTLISTSTYLEPAGE_RIGHTPARENTHESISCTRL = 10602, - ID_RICHTEXTLISTSTYLEPAGE_BULLETALIGNMENTCTRL = 10603, - ID_RICHTEXTLISTSTYLEPAGE_SYMBOLSTATIC = 10621, - ID_RICHTEXTLISTSTYLEPAGE_SYMBOLCTRL = 10622, - ID_RICHTEXTLISTSTYLEPAGE_CHOOSE_SYMBOL = 10623, - ID_RICHTEXTLISTSTYLEPAGE_SYMBOLFONTCTRL = 10625, - ID_RICHTEXTLISTSTYLEPAGE_NAMESTATIC = 10600, - ID_RICHTEXTLISTSTYLEPAGE_NAMECTRL = 10601, - ID_RICHTEXTLISTSTYLEPAGE_SPACING = 10628, - ID_RICHTEXTLISTSTYLEPAGE_ALIGNLEFT = 10629, - ID_RICHTEXTLISTSTYLEPAGE_ALIGNRIGHT = 10630, - ID_RICHTEXTLISTSTYLEPAGE_JUSTIFIED = 10631, - ID_RICHTEXTLISTSTYLEPAGE_CENTERED = 10632, - ID_RICHTEXTLISTSTYLEPAGE_ALIGNINDETERMINATE = 10633, - ID_RICHTEXTLISTSTYLEPAGE_INDENTLEFT = 10634, - ID_RICHTEXTLISTSTYLEPAGE_INDENTFIRSTLINE = 10635, - ID_RICHTEXTLISTSTYLEPAGE_INDENTRIGHT = 10636, - ID_RICHTEXTLISTSTYLEPAGE_SPACINGBEFORE = 10637, - ID_RICHTEXTLISTSTYLEPAGE_SPACINGAFTER = 10638, - ID_RICHTEXTLISTSTYLEPAGE_LINESPACING = 10639, - ID_RICHTEXTLISTSTYLEPAGE_RICHTEXTCTRL = 10640 - }; -////@end wxRichTextListStylePage member variables - - bool m_dontUpdate; - int m_currentLevel; -}; - -#endif - // _RICHTEXTLISTSTYLEPAGE_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextprint.h b/desmume/src/windows/wx/include/wx/richtext/richtextprint.h deleted file mode 100644 index c0185bbbc..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextprint.h +++ /dev/null @@ -1,247 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtextprint.h -// Purpose: Rich text printing classes -// Author: Julian Smart -// Created: 2006-10-23 -// RCS-ID: $Id: richtextprint.h 55146 2008-08-21 16:07:54Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RICHTEXTPRINT_H_ -#define _WX_RICHTEXTPRINT_H_ - -#include "wx/defs.h" - -#if wxUSE_RICHTEXT & wxUSE_PRINTING_ARCHITECTURE - -#include "wx/richtext/richtextbuffer.h" - -#include "wx/print.h" -#include "wx/printdlg.h" - -#define wxRICHTEXT_PRINT_MAX_PAGES 99999 - -// Header/footer page identifiers -enum wxRichTextOddEvenPage { - wxRICHTEXT_PAGE_ODD, - wxRICHTEXT_PAGE_EVEN, - wxRICHTEXT_PAGE_ALL -}; - -// Header/footer text locations -enum wxRichTextPageLocation { - wxRICHTEXT_PAGE_LEFT, - wxRICHTEXT_PAGE_CENTRE, - wxRICHTEXT_PAGE_RIGHT -}; - -/*! - * Header/footer data - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextHeaderFooterData: public wxObject -{ -public: - wxRichTextHeaderFooterData() { Init(); } - wxRichTextHeaderFooterData(const wxRichTextHeaderFooterData& data): wxObject() { Copy(data); } - - /// Initialise - void Init() { m_headerMargin = 20; m_footerMargin = 20; m_showOnFirstPage = true; } - - /// Copy - void Copy(const wxRichTextHeaderFooterData& data); - - /// Assignment - void operator= (const wxRichTextHeaderFooterData& data) { Copy(data); } - - /// Set/get header text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT - void SetHeaderText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE); - wxString GetHeaderText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const; - - /// Set/get footer text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT - void SetFooterText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE); - wxString GetFooterText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const; - - /// Set/get text - void SetText(const wxString& text, int headerFooter, wxRichTextOddEvenPage page, wxRichTextPageLocation location); - wxString GetText(int headerFooter, wxRichTextOddEvenPage page, wxRichTextPageLocation location) const; - - /// Set/get margins between text and header or footer, in tenths of a millimeter - void SetMargins(int headerMargin, int footerMargin) { m_headerMargin = headerMargin; m_footerMargin = footerMargin; } - int GetHeaderMargin() const { return m_headerMargin; } - int GetFooterMargin() const { return m_footerMargin; } - - /// Set/get whether to show header or footer on first page - void SetShowOnFirstPage(bool showOnFirstPage) { m_showOnFirstPage = showOnFirstPage; } - bool GetShowOnFirstPage() const { return m_showOnFirstPage; } - - /// Clear all text - void Clear(); - - /// Set/get font - void SetFont(const wxFont& font) { m_font = font; } - const wxFont& GetFont() const { return m_font; } - - /// Set/get colour - void SetTextColour(const wxColour& col) { m_colour = col; } - const wxColour& GetTextColour() const { return m_colour; } - - DECLARE_CLASS(wxRichTextHeaderFooterData) - -private: - - // Strings for left, centre, right, top, bottom, odd, even - wxString m_text[12]; - wxFont m_font; - wxColour m_colour; - int m_headerMargin; - int m_footerMargin; - bool m_showOnFirstPage; -}; - -/*! - * wxRichTextPrintout - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextPrintout : public wxPrintout -{ -public: - wxRichTextPrintout(const wxString& title = wxT("Printout")); - virtual ~wxRichTextPrintout(); - - /// The buffer to print - void SetRichTextBuffer(wxRichTextBuffer* buffer) { m_richTextBuffer = buffer; } - wxRichTextBuffer* GetRichTextBuffer() const { return m_richTextBuffer; } - - /// Set/get header/footer data - void SetHeaderFooterData(const wxRichTextHeaderFooterData& data) { m_headerFooterData = data; } - const wxRichTextHeaderFooterData& GetHeaderFooterData() const { return m_headerFooterData; } - - /// Sets margins in 10ths of millimetre. Defaults to 1 inch for margins. - void SetMargins(int top = 254, int bottom = 254, int left = 254, int right = 254); - - /// Calculate scaling and rectangles, setting the device context scaling - void CalculateScaling(wxDC* dc, wxRect& textRect, wxRect& headerRect, wxRect& footerRect); - - // wxPrintout virtual functions - virtual bool OnPrintPage(int page); - virtual bool HasPage(int page); - virtual void GetPageInfo(int *minPage, int *maxPage, int *selPageFrom, int *selPageTo); - virtual bool OnBeginDocument(int startPage, int endPage); - virtual void OnPreparePrinting(); - -private: - - /// Renders one page into dc - void RenderPage(wxDC *dc, int page); - - /// Substitute keywords - static bool SubstituteKeywords(wxString& str, const wxString& title, int pageNum, int pageCount); - -private: - - wxRichTextBuffer* m_richTextBuffer; - int m_numPages; - wxArrayInt m_pageBreaksStart; - wxArrayInt m_pageBreaksEnd; - int m_marginLeft, m_marginTop, m_marginRight, m_marginBottom; - - wxRichTextHeaderFooterData m_headerFooterData; - - DECLARE_NO_COPY_CLASS(wxRichTextPrintout) -}; - -/* - *! wxRichTextPrinting - * A simple interface to perform wxRichTextBuffer printing. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextPrinting : public wxObject -{ -public: - wxRichTextPrinting(const wxString& name = wxT("Printing"), wxWindow *parentWindow = NULL); - virtual ~wxRichTextPrinting(); - - /// Preview the file or buffer - bool PreviewFile(const wxString& richTextFile); - bool PreviewBuffer(const wxRichTextBuffer& buffer); - - /// Print the file or buffer - bool PrintFile(const wxString& richTextFile); - bool PrintBuffer(const wxRichTextBuffer& buffer); - - /// Shows page setup dialog - void PageSetup(); - - /// Set/get header/footer data - void SetHeaderFooterData(const wxRichTextHeaderFooterData& data) { m_headerFooterData = data; } - const wxRichTextHeaderFooterData& GetHeaderFooterData() const { return m_headerFooterData; } - - /// Set/get header text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT - void SetHeaderText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE); - wxString GetHeaderText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const; - - /// Set/get footer text, e.g. wxRICHTEXT_PAGE_ODD, wxRICHTEXT_PAGE_LEFT - void SetFooterText(const wxString& text, wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_ALL, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE); - wxString GetFooterText(wxRichTextOddEvenPage page = wxRICHTEXT_PAGE_EVEN, wxRichTextPageLocation location = wxRICHTEXT_PAGE_CENTRE) const; - - /// Show header/footer on first page, or not - void SetShowOnFirstPage(bool show) { m_headerFooterData.SetShowOnFirstPage(show); } - - /// Set the font - void SetHeaderFooterFont(const wxFont& font) { m_headerFooterData.SetFont(font); } - - /// Set the colour - void SetHeaderFooterTextColour(const wxColour& font) { m_headerFooterData.SetTextColour(font); } - - /// Get print and page setup data - wxPrintData *GetPrintData(); - wxPageSetupDialogData *GetPageSetupData() { return m_pageSetupData; } - - /// Set print and page setup data - void SetPrintData(const wxPrintData& printData); - void SetPageSetupData(const wxPageSetupData& pageSetupData); - - /// Set the rich text buffer pointer, deleting the existing object if present - void SetRichTextBufferPreview(wxRichTextBuffer* buf); - wxRichTextBuffer* GetRichTextBufferPreview() const { return m_richTextBufferPreview; } - - void SetRichTextBufferPrinting(wxRichTextBuffer* buf); - wxRichTextBuffer* GetRichTextBufferPrinting() const { return m_richTextBufferPrinting; } - - /// Set/get the parent window - void SetParentWindow(wxWindow* parent) { m_parentWindow = parent; } - wxWindow* GetParentWindow() const { return m_parentWindow; } - - /// Set/get the title - void SetTitle(const wxString& title) { m_title = title; } - const wxString& GetTitle() const { return m_title; } - - /// Set/get the preview rect - void SetPreviewRect(const wxRect& rect) { m_previewRect = rect; } - const wxRect& GetPreviewRect() const { return m_previewRect; } - -protected: - virtual wxRichTextPrintout *CreatePrintout(); - virtual bool DoPreview(wxRichTextPrintout *printout1, wxRichTextPrintout *printout2); - virtual bool DoPrint(wxRichTextPrintout *printout); - -private: - wxPrintData* m_printData; - wxPageSetupDialogData* m_pageSetupData; - - wxRichTextHeaderFooterData m_headerFooterData; - wxString m_title; - wxWindow* m_parentWindow; - wxRichTextBuffer* m_richTextBufferPreview; - wxRichTextBuffer* m_richTextBufferPrinting; - wxRect m_previewRect; - - DECLARE_NO_COPY_CLASS(wxRichTextPrinting) -}; - -#endif // wxUSE_RICHTEXT & wxUSE_PRINTING_ARCHITECTURE - -#endif // _WX_RICHTEXTPRINT_H_ - diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextstyledlg.h b/desmume/src/windows/wx/include/wx/richtext/richtextstyledlg.h deleted file mode 100644 index 5b5bcff76..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextstyledlg.h +++ /dev/null @@ -1,241 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtextstyledlg.h -// Purpose: -// Author: Julian Smart -// Modified by: -// Created: 10/5/2006 12:05:31 PM -// RCS-ID: $Id: richtextstyledlg.h 52117 2008-02-26 15:04:54Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _RICHTEXTSTYLEDLG_H_ -#define _RICHTEXTSTYLEDLG_H_ - -/*! - * Includes - */ - -////@begin includes -////@end includes - -#include "wx/richtext/richtextbuffer.h" -#include "wx/richtext/richtextstyles.h" -#include "wx/richtext/richtextctrl.h" - -/*! - * Forward declarations - */ - -////@begin forward declarations -class wxBoxSizer; -class wxRichTextStyleListCtrl; -class wxRichTextCtrl; -////@end forward declarations - -class WXDLLIMPEXP_FWD_CORE wxButton; -class WXDLLIMPEXP_FWD_CORE wxCheckBox; - -/*! - * Control identifiers - */ - -////@begin control identifiers -#define SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_STYLE wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX -#define SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_TITLE _("Style Organiser") -#define SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_IDNAME ID_RICHTEXTSTYLEORGANISERDIALOG -#define SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_SIZE wxSize(400, 300) -#define SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_POSITION wxDefaultPosition -////@end control identifiers - -/*! - * Flags for specifying permitted operations - */ - -#define wxRICHTEXT_ORGANISER_DELETE_STYLES 0x0001 -#define wxRICHTEXT_ORGANISER_CREATE_STYLES 0x0002 -#define wxRICHTEXT_ORGANISER_APPLY_STYLES 0x0004 -#define wxRICHTEXT_ORGANISER_EDIT_STYLES 0x0008 -#define wxRICHTEXT_ORGANISER_RENAME_STYLES 0x0010 -#define wxRICHTEXT_ORGANISER_OK_CANCEL 0x0020 -#define wxRICHTEXT_ORGANISER_RENUMBER 0x0040 - -// The permitted style types to show -#define wxRICHTEXT_ORGANISER_SHOW_CHARACTER 0x0100 -#define wxRICHTEXT_ORGANISER_SHOW_PARAGRAPH 0x0200 -#define wxRICHTEXT_ORGANISER_SHOW_LIST 0x0400 -#define wxRICHTEXT_ORGANISER_SHOW_ALL 0x0800 - -// Common combinations -#define wxRICHTEXT_ORGANISER_ORGANISE (wxRICHTEXT_ORGANISER_SHOW_ALL|wxRICHTEXT_ORGANISER_DELETE_STYLES|wxRICHTEXT_ORGANISER_CREATE_STYLES|wxRICHTEXT_ORGANISER_APPLY_STYLES|wxRICHTEXT_ORGANISER_EDIT_STYLES|wxRICHTEXT_ORGANISER_RENAME_STYLES) -#define wxRICHTEXT_ORGANISER_BROWSE (wxRICHTEXT_ORGANISER_SHOW_ALL|wxRICHTEXT_ORGANISER_OK_CANCEL) -#define wxRICHTEXT_ORGANISER_BROWSE_NUMBERING (wxRICHTEXT_ORGANISER_SHOW_LIST|wxRICHTEXT_ORGANISER_OK_CANCEL|wxRICHTEXT_ORGANISER_RENUMBER) - -/*! - * wxRichTextStyleOrganiserDialog class declaration - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextStyleOrganiserDialog: public wxDialog -{ - DECLARE_DYNAMIC_CLASS( wxRichTextStyleOrganiserDialog ) - DECLARE_EVENT_TABLE() - -public: - /// Constructors - wxRichTextStyleOrganiserDialog( ); - wxRichTextStyleOrganiserDialog( int flags, wxRichTextStyleSheet* sheet, wxRichTextCtrl* ctrl, wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& caption = SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_TITLE, const wxPoint& pos = SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_SIZE, long style = SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_STYLE ); - - /// Creation - bool Create( int flags, wxRichTextStyleSheet* sheet, wxRichTextCtrl* ctrl, wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& caption = SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_TITLE, const wxPoint& pos = SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_SIZE, long style = SYMBOL_WXRICHTEXTSTYLEORGANISERDIALOG_STYLE ); - - /// Creates the controls and sizers - void CreateControls(); - - /// Initialise member variables - void Init(); - - /// Transfer data from/to window - virtual bool TransferDataFromWindow(); - virtual bool TransferDataToWindow(); - - /// Set/get style sheet - void SetStyleSheet(wxRichTextStyleSheet* sheet) { m_richTextStyleSheet = sheet; } - wxRichTextStyleSheet* GetStyleSheet() const { return m_richTextStyleSheet; } - - /// Set/get control - void SetRichTextCtrl(wxRichTextCtrl* ctrl) { m_richTextCtrl = ctrl; } - wxRichTextCtrl* GetRichTextCtrl() const { return m_richTextCtrl; } - - /// Set/get flags - void SetFlags(int flags) { m_flags = flags; } - int GetFlags() const { return m_flags; } - - /// Show preview for given or selected preview - void ShowPreview(int sel = -1); - - /// Clears the preview - void ClearPreview(); - - /// List selection - void OnListSelection(wxCommandEvent& event); - - /// Get/set restart numbering boolean - bool GetRestartNumbering() const { return m_restartNumbering; } - void SetRestartNumbering(bool restartNumbering) { m_restartNumbering = restartNumbering; } - - /// Get selected style name or definition - wxString GetSelectedStyle() const; - wxRichTextStyleDefinition* GetSelectedStyleDefinition() const; - - /// Apply the style - bool ApplyStyle(wxRichTextCtrl* ctrl = NULL); - - /// Should we show tooltips? - static bool ShowToolTips() { return sm_showToolTips; } - - /// Determines whether tooltips will be shown - static void SetShowToolTips(bool show) { sm_showToolTips = show; } - -////@begin wxRichTextStyleOrganiserDialog event handler declarations - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR - void OnNewCharClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR - void OnNewCharUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA - void OnNewParaClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA - void OnNewParaUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST - void OnNewListClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST - void OnNewListUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY - void OnApplyClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY - void OnApplyUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME - void OnRenameClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME - void OnRenameUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT - void OnEditClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT - void OnEditUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE - void OnDeleteClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE - void OnDeleteUpdate( wxUpdateUIEvent& event ); - -////@end wxRichTextStyleOrganiserDialog event handler declarations - -////@begin wxRichTextStyleOrganiserDialog member function declarations - - /// Retrieves bitmap resources - wxBitmap GetBitmapResource( const wxString& name ); - - /// Retrieves icon resources - wxIcon GetIconResource( const wxString& name ); -////@end wxRichTextStyleOrganiserDialog member function declarations - -////@begin wxRichTextStyleOrganiserDialog member variables - wxBoxSizer* m_innerSizer; - wxBoxSizer* m_buttonSizerParent; - wxRichTextStyleListCtrl* m_stylesListBox; - wxRichTextCtrl* m_previewCtrl; - wxBoxSizer* m_buttonSizer; - wxButton* m_newCharacter; - wxButton* m_newParagraph; - wxButton* m_newList; - wxButton* m_applyStyle; - wxButton* m_renameStyle; - wxButton* m_editStyle; - wxButton* m_deleteStyle; - wxButton* m_closeButton; - wxBoxSizer* m_bottomButtonSizer; - wxCheckBox* m_restartNumberingCtrl; - wxButton* m_okButton; - wxButton* m_cancelButton; - /// Control identifiers - enum { - ID_RICHTEXTSTYLEORGANISERDIALOG = 10500, - ID_RICHTEXTSTYLEORGANISERDIALOG_STYLES = 10501, - ID_RICHTEXTSTYLEORGANISERDIALOG_CURRENT_STYLE = 10510, - ID_RICHTEXTSTYLEORGANISERDIALOG_PREVIEW = 10509, - ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_CHAR = 10504, - ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_PARA = 10505, - ID_RICHTEXTSTYLEORGANISERDIALOG_NEW_LIST = 10508, - ID_RICHTEXTSTYLEORGANISERDIALOG_APPLY = 10503, - ID_RICHTEXTSTYLEORGANISERDIALOG_RENAME = 10502, - ID_RICHTEXTSTYLEORGANISERDIALOG_EDIT = 10506, - ID_RICHTEXTSTYLEORGANISERDIALOG_DELETE = 10507, - ID_RICHTEXTSTYLEORGANISERDIALOG_RESTART_NUMBERING = 10511 - }; -////@end wxRichTextStyleOrganiserDialog member variables - -private: - - wxRichTextCtrl* m_richTextCtrl; - wxRichTextStyleSheet* m_richTextStyleSheet; - - bool m_dontUpdate; - int m_flags; - static bool sm_showToolTips; - bool m_restartNumbering; -}; - -#endif - // _RICHTEXTSTYLEDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextstylepage.h b/desmume/src/windows/wx/include/wx/richtext/richtextstylepage.h deleted file mode 100644 index 73b018499..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextstylepage.h +++ /dev/null @@ -1,91 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtextstylepage.h -// Purpose: -// Author: Julian Smart -// Modified by: -// Created: 10/5/2006 11:34:55 AM -// RCS-ID: $Id: richtextstylepage.h 42678 2006-10-29 22:01:06Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _RICHTEXTSTYLEPAGE_H_ -#define _RICHTEXTSTYLEPAGE_H_ - -/*! - * Control identifiers - */ - -////@begin control identifiers -#define SYMBOL_WXRICHTEXTSTYLEPAGE_STYLE wxRESIZE_BORDER|wxTAB_TRAVERSAL -#define SYMBOL_WXRICHTEXTSTYLEPAGE_TITLE _("wxRichTextStylePage") -#define SYMBOL_WXRICHTEXTSTYLEPAGE_IDNAME ID_RICHTEXTSTYLEPAGE -#define SYMBOL_WXRICHTEXTSTYLEPAGE_SIZE wxSize(400, 300) -#define SYMBOL_WXRICHTEXTSTYLEPAGE_POSITION wxDefaultPosition -////@end control identifiers - -/*! - * wxRichTextStylePage class declaration - */ - -class wxRichTextStylePage: public wxPanel -{ - DECLARE_DYNAMIC_CLASS( wxRichTextStylePage ) - DECLARE_EVENT_TABLE() - -public: - /// Constructors - wxRichTextStylePage( ); - wxRichTextStylePage( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTSTYLEPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTSTYLEPAGE_SIZE, long style = SYMBOL_WXRICHTEXTSTYLEPAGE_STYLE ); - - /// Creation - bool Create( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTSTYLEPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTSTYLEPAGE_SIZE, long style = SYMBOL_WXRICHTEXTSTYLEPAGE_STYLE ); - - /// Initialise members - void Init(); - - /// Creates the controls and sizers - void CreateControls(); - - /// Transfer data from/to window - virtual bool TransferDataFromWindow(); - virtual bool TransferDataToWindow(); - - /// Gets the attributes associated with the main formatting dialog - wxTextAttrEx* GetAttributes(); - -////@begin wxRichTextStylePage event handler declarations - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTSTYLEPAGE_NEXT_STYLE - void OnNextStyleUpdate( wxUpdateUIEvent& event ); - -////@end wxRichTextStylePage event handler declarations - -////@begin wxRichTextStylePage member function declarations - - /// Retrieves bitmap resources - wxBitmap GetBitmapResource( const wxString& name ); - - /// Retrieves icon resources - wxIcon GetIconResource( const wxString& name ); -////@end wxRichTextStylePage member function declarations - - /// Should we show tooltips? - static bool ShowToolTips(); - -////@begin wxRichTextStylePage member variables - wxTextCtrl* m_styleName; - wxComboBox* m_basedOn; - wxComboBox* m_nextStyle; - /// Control identifiers - enum { - ID_RICHTEXTSTYLEPAGE = 10403, - ID_RICHTEXTSTYLEPAGE_STYLE_NAME = 10404, - ID_RICHTEXTSTYLEPAGE_BASED_ON = 10405, - ID_RICHTEXTSTYLEPAGE_NEXT_STYLE = 10406 - }; -////@end wxRichTextStylePage member variables -}; - -#endif - // _RICHTEXTSTYLEPAGE_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextstyles.h b/desmume/src/windows/wx/include/wx/richtext/richtextstyles.h deleted file mode 100644 index 158e8a585..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextstyles.h +++ /dev/null @@ -1,683 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtextstyles.h -// Purpose: Style management for wxRichTextCtrl -// Author: Julian Smart -// Modified by: -// Created: 2005-09-30 -// RCS-ID: $Id: richtextstyles.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RICHTEXTSTYLES_H_ -#define _WX_RICHTEXTSTYLES_H_ - -/*! - * Includes - */ - -#include "wx/defs.h" - -#if wxUSE_RICHTEXT - -#include "wx/richtext/richtextbuffer.h" - -#if wxUSE_HTML -#include "wx/htmllbox.h" -#endif - -#if wxUSE_COMBOCTRL -#include "wx/combo.h" -#endif - -#include "wx/choice.h" - -/*! - * Forward declarations - */ - -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextCtrl; -class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextBuffer; - -/*! - * wxRichTextStyleDefinition class declaration - * A base class for paragraph and character styles. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextStyleDefinition: public wxObject -{ - DECLARE_CLASS(wxRichTextStyleDefinition) -public: - - /// Copy constructors - wxRichTextStyleDefinition(const wxRichTextStyleDefinition& def) - : wxObject() - { - Init(); - Copy(def); - } - - /// Default constructor - wxRichTextStyleDefinition(const wxString& name = wxEmptyString) { Init(); m_name = name; } - - /// Destructor - virtual ~wxRichTextStyleDefinition() {} - - /// Initialises members - void Init() {} - - /// Copies from def - void Copy(const wxRichTextStyleDefinition& def); - - /// Equality test - bool Eq(const wxRichTextStyleDefinition& def) const; - - /// Assignment operator - void operator =(const wxRichTextStyleDefinition& def) { Copy(def); } - - /// Equality operator - bool operator ==(const wxRichTextStyleDefinition& def) const { return Eq(def); } - - /// Override to clone the object - virtual wxRichTextStyleDefinition* Clone() const = 0; - - /// Sets and gets the name of the style - void SetName(const wxString& name) { m_name = name; } - const wxString& GetName() const { return m_name; } - - /// Sets and gets the style description - void SetDescription(const wxString& descr) { m_description = descr; } - const wxString& GetDescription() const { return m_description; } - - /// Sets and gets the name of the style that this style is based on - void SetBaseStyle(const wxString& name) { m_baseStyle = name; } - const wxString& GetBaseStyle() const { return m_baseStyle; } - - /// Sets and gets the style - void SetStyle(const wxRichTextAttr& style) { m_style = style; } - const wxRichTextAttr& GetStyle() const { return m_style; } - wxRichTextAttr& GetStyle() { return m_style; } - - /// Gets the style combined with the base style - virtual wxRichTextAttr GetStyleMergedWithBase(const wxRichTextStyleSheet* sheet) const; - -protected: - wxString m_name; - wxString m_baseStyle; - wxString m_description; - wxRichTextAttr m_style; -}; - -/*! - * wxRichTextCharacterStyleDefinition class declaration - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextCharacterStyleDefinition: public wxRichTextStyleDefinition -{ - DECLARE_DYNAMIC_CLASS(wxRichTextCharacterStyleDefinition) -public: - - /// Copy constructor - wxRichTextCharacterStyleDefinition(const wxRichTextCharacterStyleDefinition& def): wxRichTextStyleDefinition(def) {} - - /// Default constructor - wxRichTextCharacterStyleDefinition(const wxString& name = wxEmptyString): - wxRichTextStyleDefinition(name) {} - - /// Destructor - virtual ~wxRichTextCharacterStyleDefinition() {} - - /// Clones the object - virtual wxRichTextStyleDefinition* Clone() const { return new wxRichTextCharacterStyleDefinition(*this); } - -protected: -}; - -/*! - * wxRichTextParagraphStyleDefinition class declaration - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextParagraphStyleDefinition: public wxRichTextStyleDefinition -{ - DECLARE_DYNAMIC_CLASS(wxRichTextParagraphStyleDefinition) -public: - - /// Copy constructor - wxRichTextParagraphStyleDefinition(const wxRichTextParagraphStyleDefinition& def): wxRichTextStyleDefinition(def) { m_nextStyle = def.m_nextStyle; } - - /// Default constructor - wxRichTextParagraphStyleDefinition(const wxString& name = wxEmptyString): - wxRichTextStyleDefinition(name) {} - - // Destructor - virtual ~wxRichTextParagraphStyleDefinition() {} - - /// Sets and gets the next style - void SetNextStyle(const wxString& name) { m_nextStyle = name; } - const wxString& GetNextStyle() const { return m_nextStyle; } - - /// Copies from def - void Copy(const wxRichTextParagraphStyleDefinition& def); - - /// Assignment operator - void operator =(const wxRichTextParagraphStyleDefinition& def) { Copy(def); } - - /// Equality operator - bool operator ==(const wxRichTextParagraphStyleDefinition& def) const; - - /// Clones the object - virtual wxRichTextStyleDefinition* Clone() const { return new wxRichTextParagraphStyleDefinition(*this); } - -protected: - - /// The next style to use when adding a paragraph after this style. - wxString m_nextStyle; -}; - -/*! - * wxRichTextListStyleDefinition class declaration - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextListStyleDefinition: public wxRichTextParagraphStyleDefinition -{ - DECLARE_DYNAMIC_CLASS(wxRichTextListStyleDefinition) -public: - - /// Copy constructor - wxRichTextListStyleDefinition(const wxRichTextListStyleDefinition& def): wxRichTextParagraphStyleDefinition(def) { Init(); Copy(def); } - - /// Default constructor - wxRichTextListStyleDefinition(const wxString& name = wxEmptyString): - wxRichTextParagraphStyleDefinition(name) { Init(); } - - /// Destructor - virtual ~wxRichTextListStyleDefinition() {} - - /// Copies from def - void Copy(const wxRichTextListStyleDefinition& def); - - /// Assignment operator - void operator =(const wxRichTextListStyleDefinition& def) { Copy(def); } - - /// Equality operator - bool operator ==(const wxRichTextListStyleDefinition& def) const; - - /// Clones the object - virtual wxRichTextStyleDefinition* Clone() const { return new wxRichTextListStyleDefinition(*this); } - - /// Sets/gets the attributes for the given level - void SetLevelAttributes(int i, const wxRichTextAttr& attr); - wxRichTextAttr* GetLevelAttributes(int i); - const wxRichTextAttr* GetLevelAttributes(int i) const; - - /// Convenience function for setting the major attributes for a list level specification - void SetAttributes(int i, int leftIndent, int leftSubIndent, int bulletStyle, const wxString& bulletSymbol = wxEmptyString); - - /// Finds the level corresponding to the given indentation - int FindLevelForIndent(int indent) const; - - /// Combine the base and list style with a paragraph style, using the given indent (from which - /// an appropriate level is found) - wxRichTextAttr CombineWithParagraphStyle(int indent, const wxRichTextAttr& paraStyle, wxRichTextStyleSheet* styleSheet = NULL); - - /// Combine the base and list style, using the given indent (from which - /// an appropriate level is found) - wxRichTextAttr GetCombinedStyle(int indent, wxRichTextStyleSheet* styleSheet = NULL); - - /// Combine the base and list style, using the given level from which - /// an appropriate level is found) - wxRichTextAttr GetCombinedStyleForLevel(int level, wxRichTextStyleSheet* styleSheet = NULL); - - /// Gets the number of available levels - int GetLevelCount() const { return 10; } - - /// Is this a numbered list? - bool IsNumbered(int i) const; - -protected: - - /// The styles for each level (up to 10) - wxRichTextAttr m_levelStyles[10]; -}; - -/*! - * The style sheet - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextStyleSheet: public wxObject -{ - DECLARE_CLASS( wxRichTextStyleSheet ) - -public: - /// Constructors - wxRichTextStyleSheet(const wxRichTextStyleSheet& sheet) - : wxObject() - { - Init(); - Copy(sheet); - } - wxRichTextStyleSheet() { Init(); } - virtual ~wxRichTextStyleSheet(); - - /// Initialisation - void Init(); - - /// Copy - void Copy(const wxRichTextStyleSheet& sheet); - - /// Assignment - void operator=(const wxRichTextStyleSheet& sheet) { Copy(sheet); } - - /// Equality - bool operator==(const wxRichTextStyleSheet& sheet) const; - - /// Add a definition to the character style list - bool AddCharacterStyle(wxRichTextCharacterStyleDefinition* def); - - /// Add a definition to the paragraph style list - bool AddParagraphStyle(wxRichTextParagraphStyleDefinition* def); - - /// Add a definition to the list style list - bool AddListStyle(wxRichTextListStyleDefinition* def); - - /// Add a definition to the appropriate style list - bool AddStyle(wxRichTextStyleDefinition* def); - - /// Remove a character style - bool RemoveCharacterStyle(wxRichTextStyleDefinition* def, bool deleteStyle = false) { return RemoveStyle(m_characterStyleDefinitions, def, deleteStyle); } - - /// Remove a paragraph style - bool RemoveParagraphStyle(wxRichTextStyleDefinition* def, bool deleteStyle = false) { return RemoveStyle(m_paragraphStyleDefinitions, def, deleteStyle); } - - /// Remove a list style - bool RemoveListStyle(wxRichTextStyleDefinition* def, bool deleteStyle = false) { return RemoveStyle(m_listStyleDefinitions, def, deleteStyle); } - - /// Remove a style - bool RemoveStyle(wxRichTextStyleDefinition* def, bool deleteStyle = false); - - /// Find a character definition by name - wxRichTextCharacterStyleDefinition* FindCharacterStyle(const wxString& name, bool recurse = true) const { return (wxRichTextCharacterStyleDefinition*) FindStyle(m_characterStyleDefinitions, name, recurse); } - - /// Find a paragraph definition by name - wxRichTextParagraphStyleDefinition* FindParagraphStyle(const wxString& name, bool recurse = true) const { return (wxRichTextParagraphStyleDefinition*) FindStyle(m_paragraphStyleDefinitions, name, recurse); } - - /// Find a list definition by name - wxRichTextListStyleDefinition* FindListStyle(const wxString& name, bool recurse = true) const { return (wxRichTextListStyleDefinition*) FindStyle(m_listStyleDefinitions, name, recurse); } - - /// Find any definition by name - wxRichTextStyleDefinition* FindStyle(const wxString& name, bool recurse = true) const; - - /// Return the number of character styles - size_t GetCharacterStyleCount() const { return m_characterStyleDefinitions.GetCount(); } - - /// Return the number of paragraph styles - size_t GetParagraphStyleCount() const { return m_paragraphStyleDefinitions.GetCount(); } - - /// Return the number of list styles - size_t GetListStyleCount() const { return m_listStyleDefinitions.GetCount(); } - - /// Return the nth character style - wxRichTextCharacterStyleDefinition* GetCharacterStyle(size_t n) const { return (wxRichTextCharacterStyleDefinition*) m_characterStyleDefinitions.Item(n)->GetData(); } - - /// Return the nth paragraph style - wxRichTextParagraphStyleDefinition* GetParagraphStyle(size_t n) const { return (wxRichTextParagraphStyleDefinition*) m_paragraphStyleDefinitions.Item(n)->GetData(); } - - /// Return the nth list style - wxRichTextListStyleDefinition* GetListStyle(size_t n) const { return (wxRichTextListStyleDefinition*) m_listStyleDefinitions.Item(n)->GetData(); } - - /// Delete all styles - void DeleteStyles(); - - /// Insert into list of style sheets - bool InsertSheet(wxRichTextStyleSheet* before); - - /// Append to list of style sheets - bool AppendSheet(wxRichTextStyleSheet* after); - - /// Unlink from the list of style sheets - void Unlink(); - - /// Get/set next sheet - wxRichTextStyleSheet* GetNextSheet() const { return m_nextSheet; } - void SetNextSheet(wxRichTextStyleSheet* sheet) { m_nextSheet = sheet; } - - /// Get/set previous sheet - wxRichTextStyleSheet* GetPreviousSheet() const { return m_previousSheet; } - void SetPreviousSheet(wxRichTextStyleSheet* sheet) { m_previousSheet = sheet; } - - /// Sets and gets the name of the style sheet - void SetName(const wxString& name) { m_name = name; } - const wxString& GetName() const { return m_name; } - - /// Sets and gets the style description - void SetDescription(const wxString& descr) { m_description = descr; } - const wxString& GetDescription() const { return m_description; } - -/// Implementation - - /// Add a definition to one of the style lists - bool AddStyle(wxList& list, wxRichTextStyleDefinition* def); - - /// Remove a style - bool RemoveStyle(wxList& list, wxRichTextStyleDefinition* def, bool deleteStyle); - - /// Find a definition by name - wxRichTextStyleDefinition* FindStyle(const wxList& list, const wxString& name, bool recurse = true) const; - -protected: - - wxString m_description; - wxString m_name; - - wxList m_characterStyleDefinitions; - wxList m_paragraphStyleDefinitions; - wxList m_listStyleDefinitions; - - wxRichTextStyleSheet* m_previousSheet; - wxRichTextStyleSheet* m_nextSheet; -}; - -#if wxUSE_HTML -/*! - * wxRichTextStyleListBox class declaration - * A listbox to display styles. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextStyleListBox: public wxHtmlListBox -{ - DECLARE_CLASS(wxRichTextStyleListBox) - DECLARE_EVENT_TABLE() - -public: - /// Which type of style definition is currently showing? - enum wxRichTextStyleType - { - wxRICHTEXT_STYLE_ALL, - wxRICHTEXT_STYLE_PARAGRAPH, - wxRICHTEXT_STYLE_CHARACTER, - wxRICHTEXT_STYLE_LIST - }; - - wxRichTextStyleListBox() - { - Init(); - } - wxRichTextStyleListBox(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0); - virtual ~wxRichTextStyleListBox(); - - void Init() - { - m_styleSheet = NULL; - m_richTextCtrl = NULL; - m_applyOnSelection = false; - m_styleType = wxRICHTEXT_STYLE_PARAGRAPH; - m_autoSetSelection = true; - } - - bool Create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0); - - /// Creates a suitable HTML fragment for a definition - wxString CreateHTML(wxRichTextStyleDefinition* def) const; - - /// Associates the control with a style sheet - void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { m_styleSheet = styleSheet; } - wxRichTextStyleSheet* GetStyleSheet() const { return m_styleSheet; } - - /// Associates the control with a wxRichTextCtrl - void SetRichTextCtrl(wxRichTextCtrl* ctrl) { m_richTextCtrl = ctrl; } - wxRichTextCtrl* GetRichTextCtrl() const { return m_richTextCtrl; } - - /// Get style for index - wxRichTextStyleDefinition* GetStyle(size_t i) const ; - - /// Get index for style name - int GetIndexForStyle(const wxString& name) const ; - - /// Set selection for string, returning the index. - int SetStyleSelection(const wxString& name); - - /// Updates the list - void UpdateStyles(); - - /// Apply the style - void ApplyStyle(int i); - - /// Left click - void OnLeftDown(wxMouseEvent& event); - - /// Left double-click - void OnLeftDoubleClick(wxMouseEvent& event); - - /// Auto-select from style under caret in idle time - void OnIdle(wxIdleEvent& event); - - /// Convert units in tends of a millimetre to device units - int ConvertTenthsMMToPixels(wxDC& dc, int units) const; - - /// Can we set the selection based on the editor caret position? - /// Need to override this if being used in a combobox popup - virtual bool CanAutoSetSelection() { return m_autoSetSelection; } - virtual void SetAutoSetSelection(bool autoSet) { m_autoSetSelection = autoSet; } - - /// Set whether the style should be applied as soon as the item is selected (the default) - void SetApplyOnSelection(bool applyOnSel) { m_applyOnSelection = applyOnSel; } - bool GetApplyOnSelection() const { return m_applyOnSelection; } - - /// Set the style type to display - void SetStyleType(wxRichTextStyleType styleType) { m_styleType = styleType; UpdateStyles(); } - wxRichTextStyleType GetStyleType() const { return m_styleType; } - - /// Helper for listbox and combo control - static wxString GetStyleToShowInIdleTime(wxRichTextCtrl* ctrl, wxRichTextStyleType styleType); - -protected: - /// Returns the HTML for this item - virtual wxString OnGetItem(size_t n) const; - -private: - - wxRichTextStyleSheet* m_styleSheet; - wxRichTextCtrl* m_richTextCtrl; - bool m_applyOnSelection; // if true, applies style on selection - wxRichTextStyleType m_styleType; // style type to display - bool m_autoSetSelection; - wxArrayString m_styleNames; -}; - -/*! - * wxRichTextStyleListCtrl class declaration - * This is a container for the list control plus a combobox to switch between - * style types. - */ - -#define wxRICHTEXTSTYLELIST_HIDE_TYPE_SELECTOR 0x1000 - -class WXDLLIMPEXP_RICHTEXT wxRichTextStyleListCtrl: public wxControl -{ - DECLARE_CLASS(wxRichTextStyleListCtrl) - DECLARE_EVENT_TABLE() - -public: - - /// Constructors - wxRichTextStyleListCtrl() - { - Init(); - } - - wxRichTextStyleListCtrl(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0); - - /// Constructors - virtual ~wxRichTextStyleListCtrl(); - - /// Member initialisation - void Init() - { - m_styleListBox = NULL; - m_styleChoice = NULL; - m_dontUpdate = false; - } - - /// Creates the windows - bool Create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0); - - /// Updates the style list box - void UpdateStyles(); - - /// Associates the control with a style sheet - void SetStyleSheet(wxRichTextStyleSheet* styleSheet); - wxRichTextStyleSheet* GetStyleSheet() const; - - /// Associates the control with a wxRichTextCtrl - void SetRichTextCtrl(wxRichTextCtrl* ctrl); - wxRichTextCtrl* GetRichTextCtrl() const; - - /// Set/get the style type to display - void SetStyleType(wxRichTextStyleListBox::wxRichTextStyleType styleType); - wxRichTextStyleListBox::wxRichTextStyleType GetStyleType() const; - - /// Get the choice index for style type - int StyleTypeToIndex(wxRichTextStyleListBox::wxRichTextStyleType styleType); - - /// Get the style type for choice index - wxRichTextStyleListBox::wxRichTextStyleType StyleIndexToType(int i); - - /// Get the listbox - wxRichTextStyleListBox* GetStyleListBox() const { return m_styleListBox; } - - /// Get the choice - wxChoice* GetStyleChoice() const { return m_styleChoice; } - - /// React to style type choice - void OnChooseType(wxCommandEvent& event); - - /// Lay out the controls - void OnSize(wxSizeEvent& event); - -private: - - wxRichTextStyleListBox* m_styleListBox; - wxChoice* m_styleChoice; - bool m_dontUpdate; -}; - -#if wxUSE_COMBOCTRL - -/*! - * Style drop-down for a wxComboCtrl - */ - -class wxRichTextStyleComboPopup : public wxRichTextStyleListBox, public wxComboPopup -{ -public: - virtual void Init() - { - m_itemHere = -1; // hot item in list - m_value = -1; - } - - virtual bool Create( wxWindow* parent ) - { - return wxRichTextStyleListBox::Create(parent, wxID_ANY, - wxPoint(0,0), wxDefaultSize, - wxSIMPLE_BORDER); - } - - virtual wxWindow *GetControl() { return this; } - - virtual void SetStringValue( const wxString& s ); - - virtual wxString GetStringValue() const; - - /// Can we set the selection based on the editor caret position? - // virtual bool CanAutoSetSelection() { return ((m_combo == NULL) || !m_combo->IsPopupShown()); } - virtual bool CanAutoSetSelection() { return false; } - - // - // Popup event handlers - // - - // Mouse hot-tracking - void OnMouseMove(wxMouseEvent& event); - - // On mouse left, set the value and close the popup - void OnMouseClick(wxMouseEvent& WXUNUSED(event)); - -protected: - - int m_itemHere; // hot item in popup - int m_value; - -private: - DECLARE_EVENT_TABLE() -}; - -/*! - * wxRichTextStyleComboCtrl - * A combo for applying styles. - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextStyleComboCtrl: public wxComboCtrl -{ - DECLARE_CLASS(wxRichTextStyleComboCtrl) - DECLARE_EVENT_TABLE() - -public: - wxRichTextStyleComboCtrl() - { - Init(); - } - - wxRichTextStyleComboCtrl(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxCB_READONLY) - { - Init(); - Create(parent, id, pos, size, style); - } - - virtual ~wxRichTextStyleComboCtrl() {} - - void Init() - { - m_stylePopup = NULL; - } - - bool Create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0); - - /// Updates the list - void UpdateStyles() { m_stylePopup->UpdateStyles(); } - - /// Associates the control with a style sheet - void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { m_stylePopup->SetStyleSheet(styleSheet); } - wxRichTextStyleSheet* GetStyleSheet() const { return m_stylePopup->GetStyleSheet(); } - - /// Associates the control with a wxRichTextCtrl - void SetRichTextCtrl(wxRichTextCtrl* ctrl) { m_stylePopup->SetRichTextCtrl(ctrl); } - wxRichTextCtrl* GetRichTextCtrl() const { return m_stylePopup->GetRichTextCtrl(); } - - /// Gets the style popup - wxRichTextStyleComboPopup* GetStylePopup() const { return m_stylePopup; } - - /// Auto-select from style under caret in idle time - void OnIdle(wxIdleEvent& event); - -protected: - wxRichTextStyleComboPopup* m_stylePopup; -}; - -#endif - // wxUSE_COMBOCTRL - -#endif - // wxUSE_HTML - -#endif - // wxUSE_RICHTEXT - -#endif - // _WX_RICHTEXTSTYLES_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextsymboldlg.h b/desmume/src/windows/wx/include/wx/richtext/richtextsymboldlg.h deleted file mode 100644 index 47bf7d2bc..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextsymboldlg.h +++ /dev/null @@ -1,370 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtextsymboldlg.h -// Purpose: -// Author: Julian Smart -// Modified by: -// Created: 10/5/2006 3:11:58 PM -// RCS-ID: $Id: richtextsymboldlg.h 58466 2009-01-27 19:19:40Z BP $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _RICHTEXTSYMBOLDLG_H_ -#define _RICHTEXTSYMBOLDLG_H_ - -/*! - * Includes - */ - -#include "wx/dialog.h" -#include "wx/vscroll.h" - -/*! - * Forward declarations - */ - -class WXDLLIMPEXP_FWD_CORE wxStaticText; -class WXDLLIMPEXP_FWD_CORE wxComboBox; -class WXDLLIMPEXP_FWD_CORE wxTextCtrl; - -////@begin forward declarations -class wxSymbolListCtrl; -////@end forward declarations - -// __UNICODE__ is a symbol used by DialogBlocks-generated code. -#ifndef __UNICODE__ -#if wxUSE_UNICODE -#define __UNICODE__ -#endif -#endif - -/*! - * Symbols - */ - -#define SYMBOL_WXSYMBOLPICKERDIALOG_STYLE (wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxCLOSE_BOX) -#define SYMBOL_WXSYMBOLPICKERDIALOG_TITLE wxGetTranslation(wxT("Symbols")) -#define SYMBOL_WXSYMBOLPICKERDIALOG_IDNAME ID_SYMBOLPICKERDIALOG -#define SYMBOL_WXSYMBOLPICKERDIALOG_SIZE wxSize(400, 300) -#define SYMBOL_WXSYMBOLPICKERDIALOG_POSITION wxDefaultPosition - -/*! - * wxSymbolPickerDialog class declaration - */ - -class WXDLLIMPEXP_RICHTEXT wxSymbolPickerDialog: public wxDialog -{ - DECLARE_DYNAMIC_CLASS( wxSymbolPickerDialog ) - DECLARE_EVENT_TABLE() - -public: - /// Constructors - wxSymbolPickerDialog( ); - wxSymbolPickerDialog( const wxString& symbol, const wxString& fontName, const wxString& normalTextFont, - wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& caption = SYMBOL_WXSYMBOLPICKERDIALOG_TITLE, const wxPoint& pos = SYMBOL_WXSYMBOLPICKERDIALOG_POSITION, const wxSize& size = SYMBOL_WXSYMBOLPICKERDIALOG_SIZE, long style = SYMBOL_WXSYMBOLPICKERDIALOG_STYLE ); - - /// Creation - bool Create( const wxString& symbol, const wxString& fontName, const wxString& normalTextFont, - wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& caption = SYMBOL_WXSYMBOLPICKERDIALOG_TITLE, const wxPoint& pos = SYMBOL_WXSYMBOLPICKERDIALOG_POSITION, const wxSize& size = SYMBOL_WXSYMBOLPICKERDIALOG_SIZE, long style = SYMBOL_WXSYMBOLPICKERDIALOG_STYLE ); - - /// Initialises members variables - void Init(); - - /// Creates the controls and sizers - void CreateControls(); - - /// Update the display - void UpdateSymbolDisplay(bool updateSymbolList = true, bool showAtSubset = true); - - /// Respond to symbol selection - void OnSymbolSelected( wxCommandEvent& event ); - - /// Set Unicode mode - void SetUnicodeMode(bool unicodeMode); - - /// Show at the current subset selection - void ShowAtSubset(); - - /// Get the selected symbol character - int GetSymbolChar() const; - - /// Is there a selection? - bool HasSelection() const { return !m_symbol.IsEmpty(); } - - /// Specifying normal text? - bool UseNormalFont() const { return m_fontName.IsEmpty(); } - - /// Should we show tooltips? - static bool ShowToolTips() { return sm_showToolTips; } - - /// Determines whether tooltips will be shown - static void SetShowToolTips(bool show) { sm_showToolTips = show; } - - /// Data transfer - virtual bool TransferDataToWindow(); - -////@begin wxSymbolPickerDialog event handler declarations - - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_SYMBOLPICKERDIALOG_FONT - void OnFontCtrlSelected( wxCommandEvent& event ); - -#if defined(__UNICODE__) - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_SYMBOLPICKERDIALOG_SUBSET - void OnSubsetSelected( wxCommandEvent& event ); - -#endif -#if defined(__UNICODE__) - /// wxEVT_COMMAND_COMBOBOX_SELECTED event handler for ID_SYMBOLPICKERDIALOG_FROM - void OnFromUnicodeSelected( wxCommandEvent& event ); - -#endif -#if defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXPM__) || defined(__WXMGL__) || defined(__WXMOTIF__) || defined(__WXCOCOA__) || defined(__WXX11__) || defined(__WXPALMOS__) - /// wxEVT_UPDATE_UI event handler for wxID_OK - void OnOkUpdate( wxUpdateUIEvent& event ); - -#endif -#if defined(__WXMAC__) - /// wxEVT_UPDATE_UI event handler for wxID_OK - void OnOkUpdate( wxUpdateUIEvent& event ); - -#endif -////@end wxSymbolPickerDialog event handler declarations - -////@begin wxSymbolPickerDialog member function declarations - - wxString GetFontName() const { return m_fontName ; } - void SetFontName(wxString value) { m_fontName = value ; } - - wxString GetSymbol() const { return m_symbol ; } - void SetSymbol(wxString value) { m_symbol = value ; } - - bool GetFromUnicode() const { return m_fromUnicode ; } - void SetFromUnicode(bool value) { m_fromUnicode = value ; } - - wxString GetNormalTextFontName() const { return m_normalTextFontName ; } - void SetNormalTextFontName(wxString value) { m_normalTextFontName = value ; } - - /// Retrieves bitmap resources - wxBitmap GetBitmapResource( const wxString& name ); - - /// Retrieves icon resources - wxIcon GetIconResource( const wxString& name ); -////@end wxSymbolPickerDialog member function declarations - -////@begin wxSymbolPickerDialog member variables - wxComboBox* m_fontCtrl; -#if defined(__UNICODE__) - wxComboBox* m_subsetCtrl; -#endif - wxSymbolListCtrl* m_symbolsCtrl; - wxStaticText* m_symbolStaticCtrl; - wxTextCtrl* m_characterCodeCtrl; -#if defined(__UNICODE__) - wxComboBox* m_fromUnicodeCtrl; -#endif - wxString m_fontName; - wxString m_symbol; - bool m_fromUnicode; - wxString m_normalTextFontName; - /// Control identifiers - enum { - ID_SYMBOLPICKERDIALOG = 10600, - ID_SYMBOLPICKERDIALOG_FONT = 10602, - ID_SYMBOLPICKERDIALOG_SUBSET = 10605, - ID_SYMBOLPICKERDIALOG_LISTCTRL = 10608, - ID_SYMBOLPICKERDIALOG_CHARACTERCODE = 10601, - ID_SYMBOLPICKERDIALOG_FROM = 10603 - }; -////@end wxSymbolPickerDialog member variables - - bool m_dontUpdate; - static bool sm_showToolTips; -}; - -/*! - * The scrolling symbol list. - */ - -class WXDLLIMPEXP_RICHTEXT wxSymbolListCtrl : public wxVScrolledWindow -{ -public: - // constructors and such - // --------------------- - - // default constructor, you must call Create() later - wxSymbolListCtrl() { Init(); } - - // normal constructor which calls Create() internally - wxSymbolListCtrl(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxPanelNameStr) - { - Init(); - - (void)Create(parent, id, pos, size, style, name); - } - - // really creates the control and sets the initial number of items in it - // (which may be changed later with SetItemCount()) - // - // returns true on success or false if the control couldn't be created - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxPanelNameStr); - - // dtor does some internal cleanup - virtual ~wxSymbolListCtrl(); - - - // accessors - // --------- - - // set the current font - virtual bool SetFont(const wxFont& font); - - // set Unicode/ASCII mode - void SetUnicodeMode(bool unicodeMode); - - // get the index of the currently selected item or wxNOT_FOUND if there is no selection - int GetSelection() const; - - // is this item selected? - bool IsSelected(int item) const; - - // is this item the current one? - bool IsCurrentItem(int item) const { return item == m_current; } - - // get the margins around each cell - wxPoint GetMargins() const { return m_ptMargins; } - - // get the background colour of selected cells - const wxColour& GetSelectionBackground() const { return m_colBgSel; } - - // operations - // ---------- - - // set the selection to the specified item, if it is wxNOT_FOUND the - // selection is unset - void SetSelection(int selection); - - // make this item visible - void EnsureVisible(int item); - - // set the margins: horizontal margin is the distance between the window - // border and the item contents while vertical margin is half of the - // distance between items - // - // by default both margins are 0 - void SetMargins(const wxPoint& pt); - void SetMargins(wxCoord x, wxCoord y) { SetMargins(wxPoint(x, y)); } - - // set the cell size - void SetCellSize(const wxSize& sz) { m_cellSize = sz; } - const wxSize& GetCellSize() const { return m_cellSize; } - - // change the background colour of the selected cells - void SetSelectionBackground(const wxColour& col); - - virtual wxVisualAttributes GetDefaultAttributes() const - { - return GetClassDefaultAttributes(GetWindowVariant()); - } - - static wxVisualAttributes - GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); - - // Get min/max symbol values - int GetMinSymbolValue() const { return m_minSymbolValue; } - int GetMaxSymbolValue() const { return m_maxSymbolValue; } - - // Respond to size change - void OnSize(wxSizeEvent& event); - -protected: - - // draws a line of symbols - virtual void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const; - - // gets the line height - virtual wxCoord OnGetLineHeight(size_t line) const; - - // event handlers - void OnPaint(wxPaintEvent& event); - void OnKeyDown(wxKeyEvent& event); - void OnLeftDown(wxMouseEvent& event); - void OnLeftDClick(wxMouseEvent& event); - - // common part of all ctors - void Init(); - - // send the wxEVT_COMMAND_LISTBOX_SELECTED event - void SendSelectedEvent(); - - // change the current item (in single selection listbox it also implicitly - // changes the selection); current may be wxNOT_FOUND in which case there - // will be no current item any more - // - // return true if the current item changed, false otherwise - bool DoSetCurrent(int current); - - // flags for DoHandleItemClick - enum - { - ItemClick_Shift = 1, // item shift-clicked - ItemClick_Ctrl = 2, // ctrl - ItemClick_Kbd = 4 // item selected from keyboard - }; - - // common part of keyboard and mouse handling processing code - void DoHandleItemClick(int item, int flags); - - // calculate line number from symbol value - int SymbolValueToLineNumber(int item); - - // initialise control from current min/max values - void SetupCtrl(bool scrollToSelection = true); - - // hit testing - int HitTest(const wxPoint& pt); - -private: - // the current item or wxNOT_FOUND - int m_current; - - // margins - wxPoint m_ptMargins; - - // the selection bg colour - wxColour m_colBgSel; - - // double buffer - wxBitmap* m_doubleBuffer; - - // cell size - wxSize m_cellSize; - - // minimum and maximum symbol value - int m_minSymbolValue; - - // minimum and maximum symbol value - int m_maxSymbolValue; - - // number of items per line - int m_symbolsPerLine; - - // Unicode/ASCII mode - bool m_unicodeMode; - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxSymbolListCtrl) - DECLARE_ABSTRACT_CLASS(wxSymbolListCtrl) -}; - -#endif - // _RICHTEXTSYMBOLDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtexttabspage.h b/desmume/src/windows/wx/include/wx/richtext/richtexttabspage.h deleted file mode 100644 index f067e04c7..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtexttabspage.h +++ /dev/null @@ -1,129 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richtexttabspage.h -// Purpose: -// Author: Julian Smart -// Modified by: -// Created: 10/4/2006 8:03:20 AM -// RCS-ID: $Id: richtexttabspage.h 42678 2006-10-29 22:01:06Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _RICHTEXTTABSPAGE_H_ -#define _RICHTEXTTABSPAGE_H_ - -/*! - * Includes - */ - -////@begin includes -////@end includes - -/*! - * Forward declarations - */ - -////@begin forward declarations -////@end forward declarations - -/*! - * Control identifiers - */ - -////@begin control identifiers -#define SYMBOL_WXRICHTEXTTABSPAGE_STYLE wxRESIZE_BORDER|wxTAB_TRAVERSAL -#define SYMBOL_WXRICHTEXTTABSPAGE_TITLE _("wxRichTextFontPage") -#define SYMBOL_WXRICHTEXTTABSPAGE_IDNAME ID_RICHTEXTTABSPAGE -#define SYMBOL_WXRICHTEXTTABSPAGE_SIZE wxSize(400, 300) -#define SYMBOL_WXRICHTEXTTABSPAGE_POSITION wxDefaultPosition -////@end control identifiers - -/*! - * wxRichTextTabsPage class declaration - */ - -class WXDLLIMPEXP_RICHTEXT wxRichTextTabsPage: public wxPanel -{ - DECLARE_DYNAMIC_CLASS( wxRichTextTabsPage ) - DECLARE_EVENT_TABLE() - -public: - /// Constructors - wxRichTextTabsPage( ); - wxRichTextTabsPage( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTTABSPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTTABSPAGE_SIZE, long style = SYMBOL_WXRICHTEXTTABSPAGE_STYLE ); - - /// Creation - bool Create( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTTABSPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTTABSPAGE_SIZE, long style = SYMBOL_WXRICHTEXTTABSPAGE_STYLE ); - - /// Creates the controls and sizers - void CreateControls(); - - /// Initialise members - void Init(); - - /// Transfer data from/to window - virtual bool TransferDataFromWindow(); - virtual bool TransferDataToWindow(); - - /// Sorts the tab array - virtual void SortTabs(); - - /// Gets the attributes associated with the main formatting dialog - wxTextAttrEx* GetAttributes(); - -////@begin wxRichTextTabsPage event handler declarations - - /// wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTTABSPAGE_TABLIST - void OnTablistSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_NEW_TAB - void OnNewTabClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_NEW_TAB - void OnNewTabUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_DELETE_TAB - void OnDeleteTabClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_DELETE_TAB - void OnDeleteTabUpdate( wxUpdateUIEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS - void OnDeleteAllTabsClick( wxCommandEvent& event ); - - /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS - void OnDeleteAllTabsUpdate( wxUpdateUIEvent& event ); - -////@end wxRichTextTabsPage event handler declarations - -////@begin wxRichTextTabsPage member function declarations - - /// Retrieves bitmap resources - wxBitmap GetBitmapResource( const wxString& name ); - - /// Retrieves icon resources - wxIcon GetIconResource( const wxString& name ); -////@end wxRichTextTabsPage member function declarations - - /// Should we show tooltips? - static bool ShowToolTips(); - -////@begin wxRichTextTabsPage member variables - wxTextCtrl* m_tabEditCtrl; - wxListBox* m_tabListCtrl; - /// Control identifiers - enum { - ID_RICHTEXTTABSPAGE = 10200, - ID_RICHTEXTTABSPAGE_TABEDIT = 10213, - ID_RICHTEXTTABSPAGE_TABLIST = 10214, - ID_RICHTEXTTABSPAGE_NEW_TAB = 10201, - ID_RICHTEXTTABSPAGE_DELETE_TAB = 10202, - ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS = 10203 - }; -////@end wxRichTextTabsPage member variables - - bool m_tabsPresent; -}; - -#endif - // _RICHTEXTTABSPAGE_H_ diff --git a/desmume/src/windows/wx/include/wx/richtext/richtextxml.h b/desmume/src/windows/wx/include/wx/richtext/richtextxml.h deleted file mode 100644 index 0b9ff91bc..000000000 --- a/desmume/src/windows/wx/include/wx/richtext/richtextxml.h +++ /dev/null @@ -1,79 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/richtext/richeditxml.h -// Purpose: XML and HTML I/O for wxRichTextCtrl -// Author: Julian Smart -// Modified by: -// Created: 2005-09-30 -// RCS-ID: $Id: richtextxml.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_RICHTEXTXML_H_ -#define _WX_RICHTEXTXML_H_ - -/*! - * Includes - */ - -#include "wx/richtext/richtextbuffer.h" -#include "wx/richtext/richtextstyles.h" - -#if wxUSE_RICHTEXT && wxUSE_XML - -/*! - * wxRichTextXMLHandler - */ - -class WXDLLIMPEXP_FWD_XML wxXmlNode; - -class WXDLLIMPEXP_RICHTEXT wxRichTextXMLHandler: public wxRichTextFileHandler -{ - DECLARE_CLASS(wxRichTextXMLHandler) -public: - wxRichTextXMLHandler(const wxString& name = wxT("XML"), const wxString& ext = wxT("xml"), int type = wxRICHTEXT_TYPE_XML) - : wxRichTextFileHandler(name, ext, type) - { } - -#if wxUSE_STREAMS - /// Recursively export an object - bool ExportXML(wxOutputStream& stream, wxMBConv* convMem, wxMBConv* convFile, wxRichTextObject& obj, int level); - bool ExportStyleDefinition(wxOutputStream& stream, wxMBConv* convMem, wxMBConv* convFile, wxRichTextStyleDefinition* def, int level); - - /// Recursively import an object - bool ImportXML(wxRichTextBuffer* buffer, wxXmlNode* node); - bool ImportStyleDefinition(wxRichTextStyleSheet* sheet, wxXmlNode* node); - - /// Create style parameters - wxString CreateStyle(const wxTextAttrEx& attr, bool isPara = false); - - /// Get style parameters - bool GetStyle(wxTextAttrEx& attr, wxXmlNode* node, bool isPara = false); -#endif - - /// Can we save using this handler? - virtual bool CanSave() const { return true; } - - /// Can we load using this handler? - virtual bool CanLoad() const { return true; } - -// Implementation - - bool HasParam(wxXmlNode* node, const wxString& param); - wxXmlNode *GetParamNode(wxXmlNode* node, const wxString& param); - wxString GetNodeContent(wxXmlNode *node); - wxString GetParamValue(wxXmlNode *node, const wxString& param); - wxString GetText(wxXmlNode *node, const wxString& param = wxEmptyString, bool translate = false); - -protected: -#if wxUSE_STREAMS - virtual bool DoLoadFile(wxRichTextBuffer *buffer, wxInputStream& stream); - virtual bool DoSaveFile(wxRichTextBuffer *buffer, wxOutputStream& stream); -#endif -}; - -#endif - // wxUSE_RICHTEXT && wxUSE_XML - -#endif - // _WX_RICHTEXTXML_H_ diff --git a/desmume/src/windows/wx/include/wx/sashwin.h b/desmume/src/windows/wx/include/wx/sashwin.h deleted file mode 100644 index c99a94b4a..000000000 --- a/desmume/src/windows/wx/include/wx/sashwin.h +++ /dev/null @@ -1,18 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/sashwin.h -// Purpose: Base header for wxSashWindow -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: sashwin.h 33948 2005-05-04 18:57:50Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SASHWIN_H_BASE_ -#define _WX_SASHWIN_H_BASE_ - -#include "wx/generic/sashwin.h" - -#endif - // _WX_SASHWIN_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/sckaddr.h b/desmume/src/windows/wx/include/wx/sckaddr.h deleted file mode 100644 index 696ee4699..000000000 --- a/desmume/src/windows/wx/include/wx/sckaddr.h +++ /dev/null @@ -1,193 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: sckaddr.h -// Purpose: Network address classes -// Author: Guilhem Lavaux -// Modified by: -// Created: 26/04/1997 -// RCS-ID: $Id: sckaddr.h 35665 2005-09-24 21:43:15Z VZ $ -// Copyright: (c) 1997, 1998 Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_NETWORK_ADDRESS_H -#define _WX_NETWORK_ADDRESS_H - -#include "wx/defs.h" - -#if wxUSE_SOCKETS - -#include "wx/string.h" -#include "wx/gsocket.h" - - -class WXDLLIMPEXP_NET wxSockAddress : public wxObject { - DECLARE_ABSTRACT_CLASS(wxSockAddress) -public: - typedef enum { IPV4=1, IPV6=2, UNIX=3 } Addr; - - wxSockAddress(); - wxSockAddress(const wxSockAddress& other); - virtual ~wxSockAddress(); - - wxSockAddress& operator=(const wxSockAddress& other); - - virtual void Clear(); - virtual int Type() = 0; - - GAddress *GetAddress() const { return m_address; } - void SetAddress(GAddress *address); - - // we need to be able to create copies of the addresses polymorphically (i.e. - // without knowing the exact address class) - virtual wxSockAddress *Clone() const = 0; - -protected: - GAddress *m_address; - -private: - void Init(); -}; - -// Interface to an IP address (either IPV4 or IPV6) -class WXDLLIMPEXP_NET wxIPaddress : public wxSockAddress { - DECLARE_ABSTRACT_CLASS(wxIPaddress) -public: - wxIPaddress(); - wxIPaddress(const wxIPaddress& other); - virtual ~wxIPaddress(); - - virtual bool Hostname(const wxString& name) = 0; - virtual bool Service(const wxString& name) = 0; - virtual bool Service(unsigned short port) = 0; - - virtual bool LocalHost() = 0; - virtual bool IsLocalHost() const = 0; - - virtual bool AnyAddress() = 0; - - virtual wxString IPAddress() const = 0; - - virtual wxString Hostname() const = 0; - virtual unsigned short Service() const = 0; -}; - -class WXDLLIMPEXP_NET wxIPV4address : public wxIPaddress { - DECLARE_DYNAMIC_CLASS(wxIPV4address) -public: - wxIPV4address(); - wxIPV4address(const wxIPV4address& other); - virtual ~wxIPV4address(); - - // IPV4 name formats - // - // hostname - // dot format a.b.c.d - virtual bool Hostname(const wxString& name); - bool Hostname(unsigned long addr); - virtual bool Service(const wxString& name); - virtual bool Service(unsigned short port); - - // localhost (127.0.0.1) - virtual bool LocalHost(); - virtual bool IsLocalHost() const; - - // any (0.0.0.0) - virtual bool AnyAddress(); - - virtual wxString Hostname() const; - wxString OrigHostname() { return m_origHostname; } - virtual unsigned short Service() const; - - // a.b.c.d - virtual wxString IPAddress() const; - - virtual int Type() { return wxSockAddress::IPV4; } - virtual wxSockAddress *Clone() const; - - bool operator==(const wxIPV4address& addr) const; - -private: - wxString m_origHostname; -}; - - -// the IPv6 code probably doesn't work, untested -- set to 1 at your own risk -#ifndef wxUSE_IPV6 - #define wxUSE_IPV6 0 -#endif - -#if wxUSE_IPV6 - -// Experimental Only: -// -// IPV6 has not yet been implemented in socket layer -class WXDLLIMPEXP_NET wxIPV6address : public wxIPaddress { - DECLARE_DYNAMIC_CLASS(wxIPV6address) -private: - struct sockaddr_in6 *m_addr; -public: - wxIPV6address(); - wxIPV6address(const wxIPV6address& other); - virtual ~wxIPV6address(); - - // IPV6 name formats - // - // hostname - // 3ffe:ffff:0100:f101:0210:a4ff:fee3:9566 - // compact (base85) Itu&-ZQ82s>J%s99FJXT - // compressed format ::1 - // ipv4 mapped ::ffff:1.2.3.4 - virtual bool Hostname(const wxString& name); - - bool Hostname(unsigned char addr[16]); - virtual bool Service(const wxString& name); - virtual bool Service(unsigned short port); - - // localhost (0000:0000:0000:0000:0000:0000:0000:0001 (::1)) - virtual bool LocalHost(); - virtual bool IsLocalHost() const; - - // any (0000:0000:0000:0000:0000:0000:0000:0000 (::)) - virtual bool AnyAddress(); - - // 3ffe:ffff:0100:f101:0210:a4ff:fee3:9566 - virtual wxString IPAddress() const; - - virtual wxString Hostname() const; - virtual unsigned short Service() const; - - virtual int Type() { return wxSockAddress::IPV6; } - virtual wxSockAddress *Clone() const { return new wxIPV6address(*this); } -}; - -#endif // wxUSE_IPV6 - -#if defined(__UNIX__) && !defined(__WINE__) && (!defined(__WXMAC__) || defined(__DARWIN__)) && !defined(__WXMSW__) -#include <sys/socket.h> -#ifndef __VMS__ -# include <sys/un.h> -#endif - -class WXDLLIMPEXP_NET wxUNIXaddress : public wxSockAddress { - DECLARE_DYNAMIC_CLASS(wxUNIXaddress) -private: - struct sockaddr_un *m_addr; -public: - wxUNIXaddress(); - wxUNIXaddress(const wxUNIXaddress& other); - virtual ~wxUNIXaddress(); - - void Filename(const wxString& name); - wxString Filename(); - - virtual int Type() { return wxSockAddress::UNIX; } - virtual wxSockAddress *Clone() const { return new wxUNIXaddress(*this); } -}; -#endif - // __UNIX__ - -#endif - // wxUSE_SOCKETS - -#endif - // _WX_NETWORK_ADDRESS_H diff --git a/desmume/src/windows/wx/include/wx/sckipc.h b/desmume/src/windows/wx/include/wx/sckipc.h deleted file mode 100644 index 0a24bddba..000000000 --- a/desmume/src/windows/wx/include/wx/sckipc.h +++ /dev/null @@ -1,150 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: sckipc.h -// Purpose: Interprocess communication implementation (wxSocket version) -// Author: Julian Smart -// Modified by: Guilhem Lavaux (big rewrite) May 1997, 1998 -// Guillermo Rodriguez (updated for wxSocket v2) Jan 2000 -// (callbacks deprecated) Mar 2000 -// Created: 1993 -// RCS-ID: $Id: sckipc.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Julian Smart 1993 -// (c) Guilhem Lavaux 1997, 1998 -// (c) 2000 Guillermo Rodriguez <guille@iies.es> -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SCKIPC_H -#define _WX_SCKIPC_H - -#include "wx/defs.h" - -#if wxUSE_SOCKETS && wxUSE_IPC - -#include "wx/ipcbase.h" -#include "wx/socket.h" -#include "wx/sckstrm.h" -#include "wx/datstrm.h" - -/* - * Mini-DDE implementation - - Most transactions involve a topic name and an item name (choose these - as befits your application). - - A client can: - - - ask the server to execute commands (data) associated with a topic - - request data from server by topic and item - - poke data into the server - - ask the server to start an advice loop on topic/item - - ask the server to stop an advice loop - - A server can: - - - respond to execute, request, poke and advice start/stop - - send advise data to client - - Note that this limits the server in the ways it can send data to the - client, i.e. it can't send unsolicited information. - * - */ - -class WXDLLIMPEXP_FWD_NET wxTCPServer; -class WXDLLIMPEXP_FWD_NET wxTCPClient; - -class WXDLLIMPEXP_NET wxTCPConnection: public wxConnectionBase -{ - DECLARE_DYNAMIC_CLASS(wxTCPConnection) - -public: - wxTCPConnection(wxChar *buffer, int size); - wxTCPConnection(); - virtual ~wxTCPConnection(); - - // Calls that CLIENT can make - virtual bool Execute(const wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT); - virtual wxChar *Request(const wxString& item, int *size = NULL, wxIPCFormat format = wxIPC_TEXT); - virtual bool Poke(const wxString& item, wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT); - virtual bool StartAdvise(const wxString& item); - virtual bool StopAdvise(const wxString& item); - - // Calls that SERVER can make - virtual bool Advise(const wxString& item, wxChar *data, int size = -1, wxIPCFormat format = wxIPC_TEXT); - - // Calls that both can make - virtual bool Disconnect(void); - - // Callbacks to BOTH - override at will - // Default behaviour is to delete connection and return true - virtual bool OnDisconnect(void) { delete this; return true; } - - // To enable the compressor (NOTE: not implemented!) - void Compress(bool on); - - // unhide the Execute overload from wxConnectionBase - virtual bool Execute(const wxString& str) - { return Execute(str, -1, wxIPC_TEXT); } - -protected: - wxSocketBase *m_sock; - wxSocketStream *m_sockstrm; - wxDataInputStream *m_codeci; - wxDataOutputStream *m_codeco; - wxString m_topic; - - friend class wxTCPServer; - friend class wxTCPClient; - friend class wxTCPEventHandler; - - DECLARE_NO_COPY_CLASS(wxTCPConnection) -}; - -class WXDLLIMPEXP_NET wxTCPServer: public wxServerBase -{ -public: - wxTCPConnection *topLevelConnection; - - wxTCPServer(); - virtual ~wxTCPServer(); - - // Returns false on error (e.g. port number is already in use) - virtual bool Create(const wxString& serverName); - - // Callbacks to SERVER - override at will - virtual wxConnectionBase *OnAcceptConnection(const wxString& topic); - -protected: - wxSocketServer *m_server; - -#ifdef __UNIX_LIKE__ - // the name of the file associated to the Unix domain socket, may be empty - wxString m_filename; -#endif // __UNIX_LIKE__ - - DECLARE_NO_COPY_CLASS(wxTCPServer) - DECLARE_DYNAMIC_CLASS(wxTCPServer) -}; - -class WXDLLIMPEXP_NET wxTCPClient: public wxClientBase -{ -public: - wxTCPClient(); - virtual ~wxTCPClient(); - - virtual bool ValidHost(const wxString& host); - - // Call this to make a connection. Returns NULL if cannot. - virtual wxConnectionBase *MakeConnection(const wxString& host, - const wxString& server, - const wxString& topic); - - // Callbacks to CLIENT - override at will - virtual wxConnectionBase *OnMakeConnection(); - -private: - DECLARE_DYNAMIC_CLASS(wxTCPClient) -}; - -#endif // wxUSE_SOCKETS && wxUSE_IPC - -#endif // _WX_SCKIPC_H diff --git a/desmume/src/windows/wx/include/wx/sckstrm.h b/desmume/src/windows/wx/include/wx/sckstrm.h deleted file mode 100644 index 30d09604e..000000000 --- a/desmume/src/windows/wx/include/wx/sckstrm.h +++ /dev/null @@ -1,72 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: sckstrm.h -// Purpose: wxSocket*Stream -// Author: Guilhem Lavaux -// Modified by: -// Created: 17/07/97 -// RCS-ID: $Id: sckstrm.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// -#ifndef __SCK_STREAM_H__ -#define __SCK_STREAM_H__ - -#include "wx/stream.h" - -#if wxUSE_SOCKETS && wxUSE_STREAMS - -#include "wx/socket.h" - -class WXDLLIMPEXP_NET wxSocketOutputStream : public wxOutputStream -{ - public: - wxSocketOutputStream(wxSocketBase& s); - virtual ~wxSocketOutputStream(); - - wxFileOffset SeekO( wxFileOffset WXUNUSED(pos), wxSeekMode WXUNUSED(mode) ) - { return -1; } - wxFileOffset TellO() const - { return -1; } - - protected: - wxSocketBase *m_o_socket; - - size_t OnSysWrite(const void *buffer, size_t bufsize); - - DECLARE_NO_COPY_CLASS(wxSocketOutputStream) -}; - -class WXDLLIMPEXP_NET wxSocketInputStream : public wxInputStream -{ - public: - wxSocketInputStream(wxSocketBase& s); - virtual ~wxSocketInputStream(); - - wxFileOffset SeekI( wxFileOffset WXUNUSED(pos), wxSeekMode WXUNUSED(mode) ) - { return -1; } - wxFileOffset TellI() const - { return -1; } - - protected: - wxSocketBase *m_i_socket; - - size_t OnSysRead(void *buffer, size_t bufsize); - - DECLARE_NO_COPY_CLASS(wxSocketInputStream) -}; - -class WXDLLIMPEXP_NET wxSocketStream : public wxSocketInputStream, - public wxSocketOutputStream -{ - public: - wxSocketStream(wxSocketBase& s); - virtual ~wxSocketStream(); - - DECLARE_NO_COPY_CLASS(wxSocketStream) -}; - -#endif - // wxUSE_SOCKETS && wxUSE_STREAMS - -#endif - // __SCK_STREAM_H__ diff --git a/desmume/src/windows/wx/include/wx/scopeguard.h b/desmume/src/windows/wx/include/wx/scopeguard.h deleted file mode 100644 index 155a4f549..000000000 --- a/desmume/src/windows/wx/include/wx/scopeguard.h +++ /dev/null @@ -1,373 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/scopeguard.h -// Purpose: declares wxwxScopeGuard and related macros -// Author: Vadim Zeitlin -// Modified by: -// Created: 03.07.2003 -// RCS-ID: $Id: scopeguard.h 44111 2007-01-07 13:28:16Z SN $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -/* - Acknowledgements: this header is heavily based on (well, almost the exact - copy of) ScopeGuard.h by Andrei Alexandrescu and Petru Marginean published - in December 2000 issue of C/C++ Users Journal. - http://www.cuj.com/documents/cujcexp1812alexandr/ - */ - -#ifndef _WX_SCOPEGUARD_H_ -#define _WX_SCOPEGUARD_H_ - -#include "wx/defs.h" - -#include "wx/except.h" - -// ---------------------------------------------------------------------------- -// helpers -// ---------------------------------------------------------------------------- - -#ifdef __WATCOMC__ - -// WATCOM-FIXME: C++ of Open Watcom 1.3 doesn't like OnScopeExit() created -// through template so it must be workarounded with dedicated inlined macro. -// For compatibility with Watcom compilers wxPrivate::OnScopeExit must be -// replaced with wxPrivateOnScopeExit but in user code (for everyone who -// doesn't care about OW compatibility) wxPrivate::OnScopeExit still works. - -#define wxPrivateOnScopeExit(guard) \ - { \ - if ( !(guard).WasDismissed() ) \ - { \ - wxTRY \ - { \ - (guard).Execute(); \ - } \ - wxCATCH_ALL(;) \ - } \ - } - -#define wxPrivateUse(n) wxUnusedVar(n) - -#else - -#if !defined(__GNUC__) || wxCHECK_GCC_VERSION(2, 95) -// namespace support was first implemented in gcc-2.95, -// so avoid using it for older versions. -namespace wxPrivate -{ -#else -#define wxPrivate -#endif - // in the original implementation this was a member template function of - // ScopeGuardImplBase but gcc 2.8 which is still used for OS/2 doesn't - // support member templates and so we must make it global - template <class ScopeGuardImpl> - void OnScopeExit(ScopeGuardImpl& guard) - { - if ( !guard.WasDismissed() ) - { - // we're called from ScopeGuardImpl dtor and so we must not throw - wxTRY - { - guard.Execute(); - } - wxCATCH_ALL(;) // do nothing, just eat the exception - } - } - - // just to avoid the warning about unused variables - template <class T> - void Use(const T& WXUNUSED(t)) - { - } -#if !defined(__GNUC__) || wxCHECK_GCC_VERSION(2, 95) -} // namespace wxPrivate -#endif - -#define wxPrivateOnScopeExit(n) wxPrivate::OnScopeExit(n) -#define wxPrivateUse(n) wxPrivate::Use(n) - -#endif - -// ============================================================================ -// wxScopeGuard for functions and functors -// ============================================================================ - -// ---------------------------------------------------------------------------- -// wxScopeGuardImplBase: used by wxScopeGuardImpl[0..N] below -// ---------------------------------------------------------------------------- - -class wxScopeGuardImplBase -{ -public: - wxScopeGuardImplBase() : m_wasDismissed(false) { } - - void Dismiss() const { m_wasDismissed = true; } - - // for OnScopeExit() only (we can't make it friend, unfortunately)! - bool WasDismissed() const { return m_wasDismissed; } - -protected: - ~wxScopeGuardImplBase() { } - - wxScopeGuardImplBase(const wxScopeGuardImplBase& other) - : m_wasDismissed(other.m_wasDismissed) - { - other.Dismiss(); - } - - // must be mutable for copy ctor to work - mutable bool m_wasDismissed; - -private: - wxScopeGuardImplBase& operator=(const wxScopeGuardImplBase&); -}; - -// ---------------------------------------------------------------------------- -// wxScopeGuardImpl0: scope guard for actions without parameters -// ---------------------------------------------------------------------------- - -template <class F> -class wxScopeGuardImpl0 : public wxScopeGuardImplBase -{ -public: - static wxScopeGuardImpl0<F> MakeGuard(F fun) - { - return wxScopeGuardImpl0<F>(fun); - } - - ~wxScopeGuardImpl0() { wxPrivateOnScopeExit(*this); } - - void Execute() { m_fun(); } - -protected: - wxScopeGuardImpl0(F fun) : m_fun(fun) { } - - F m_fun; - - wxScopeGuardImpl0& operator=(const wxScopeGuardImpl0&); -}; - -template <class F> -inline wxScopeGuardImpl0<F> wxMakeGuard(F fun) -{ - return wxScopeGuardImpl0<F>::MakeGuard(fun); -} - -// ---------------------------------------------------------------------------- -// wxScopeGuardImpl1: scope guard for actions with 1 parameter -// ---------------------------------------------------------------------------- - -template <class F, class P1> -class wxScopeGuardImpl1 : public wxScopeGuardImplBase -{ -public: - static wxScopeGuardImpl1<F, P1> MakeGuard(F fun, P1 p1) - { - return wxScopeGuardImpl1<F, P1>(fun, p1); - } - - ~wxScopeGuardImpl1() { wxPrivateOnScopeExit(* this); } - - void Execute() { m_fun(m_p1); } - -protected: - wxScopeGuardImpl1(F fun, P1 p1) : m_fun(fun), m_p1(p1) { } - - F m_fun; - const P1 m_p1; - - wxScopeGuardImpl1& operator=(const wxScopeGuardImpl1&); -}; - -template <class F, class P1> -inline wxScopeGuardImpl1<F, P1> wxMakeGuard(F fun, P1 p1) -{ - return wxScopeGuardImpl1<F, P1>::MakeGuard(fun, p1); -} - -// ---------------------------------------------------------------------------- -// wxScopeGuardImpl2: scope guard for actions with 2 parameters -// ---------------------------------------------------------------------------- - -template <class F, class P1, class P2> -class wxScopeGuardImpl2 : public wxScopeGuardImplBase -{ -public: - static wxScopeGuardImpl2<F, P1, P2> MakeGuard(F fun, P1 p1, P2 p2) - { - return wxScopeGuardImpl2<F, P1, P2>(fun, p1, p2); - } - - ~wxScopeGuardImpl2() { wxPrivateOnScopeExit(*this); } - - void Execute() { m_fun(m_p1, m_p2); } - -protected: - wxScopeGuardImpl2(F fun, P1 p1, P2 p2) : m_fun(fun), m_p1(p1), m_p2(p2) { } - - F m_fun; - const P1 m_p1; - const P2 m_p2; - - wxScopeGuardImpl2& operator=(const wxScopeGuardImpl2&); -}; - -template <class F, class P1, class P2> -inline wxScopeGuardImpl2<F, P1, P2> wxMakeGuard(F fun, P1 p1, P2 p2) -{ - return wxScopeGuardImpl2<F, P1, P2>::MakeGuard(fun, p1, p2); -} - -// ============================================================================ -// wxScopeGuards for object methods -// ============================================================================ - -// ---------------------------------------------------------------------------- -// wxObjScopeGuardImpl0 -// ---------------------------------------------------------------------------- - -template <class Obj, class MemFun> -class wxObjScopeGuardImpl0 : public wxScopeGuardImplBase -{ -public: - static wxObjScopeGuardImpl0<Obj, MemFun> - MakeObjGuard(Obj& obj, MemFun memFun) - { - return wxObjScopeGuardImpl0<Obj, MemFun>(obj, memFun); - } - - ~wxObjScopeGuardImpl0() { wxPrivateOnScopeExit(*this); } - - void Execute() { (m_obj.*m_memfun)(); } - -protected: - wxObjScopeGuardImpl0(Obj& obj, MemFun memFun) - : m_obj(obj), m_memfun(memFun) { } - - Obj& m_obj; - MemFun m_memfun; -}; - -template <class Obj, class MemFun> -inline wxObjScopeGuardImpl0<Obj, MemFun> wxMakeObjGuard(Obj& obj, MemFun memFun) -{ - return wxObjScopeGuardImpl0<Obj, MemFun>::MakeObjGuard(obj, memFun); -} - -template <class Obj, class MemFun, class P1> -class wxObjScopeGuardImpl1 : public wxScopeGuardImplBase -{ -public: - static wxObjScopeGuardImpl1<Obj, MemFun, P1> - MakeObjGuard(Obj& obj, MemFun memFun, P1 p1) - { - return wxObjScopeGuardImpl1<Obj, MemFun, P1>(obj, memFun, p1); - } - - ~wxObjScopeGuardImpl1() { wxPrivateOnScopeExit(*this); } - - void Execute() { (m_obj.*m_memfun)(m_p1); } - -protected: - wxObjScopeGuardImpl1(Obj& obj, MemFun memFun, P1 p1) - : m_obj(obj), m_memfun(memFun), m_p1(p1) { } - - Obj& m_obj; - MemFun m_memfun; - const P1 m_p1; -}; - -template <class Obj, class MemFun, class P1> -inline wxObjScopeGuardImpl1<Obj, MemFun, P1> -wxMakeObjGuard(Obj& obj, MemFun memFun, P1 p1) -{ - return wxObjScopeGuardImpl1<Obj, MemFun, P1>::MakeObjGuard(obj, memFun, p1); -} - -template <class Obj, class MemFun, class P1, class P2> -class wxObjScopeGuardImpl2 : public wxScopeGuardImplBase -{ -public: - static wxObjScopeGuardImpl2<Obj, MemFun, P1, P2> - MakeObjGuard(Obj& obj, MemFun memFun, P1 p1, P2 p2) - { - return wxObjScopeGuardImpl2<Obj, MemFun, P1, P2>(obj, memFun, p1, p2); - } - - ~wxObjScopeGuardImpl2() { wxPrivateOnScopeExit(*this); } - - void Execute() { (m_obj.*m_memfun)(m_p1, m_p2); } - -protected: - wxObjScopeGuardImpl2(Obj& obj, MemFun memFun, P1 p1, P2 p2) - : m_obj(obj), m_memfun(memFun), m_p1(p1), m_p2(p2) { } - - Obj& m_obj; - MemFun m_memfun; - const P1 m_p1; - const P2 m_p2; -}; - -template <class Obj, class MemFun, class P1, class P2> -inline wxObjScopeGuardImpl2<Obj, MemFun, P1, P2> -wxMakeObjGuard(Obj& obj, MemFun memFun, P1 p1, P2 p2) -{ - return wxObjScopeGuardImpl2<Obj, MemFun, P1, P2>:: - MakeObjGuard(obj, memFun, p1, p2); -} - -// ============================================================================ -// public stuff -// ============================================================================ - -// wxScopeGuard is just a reference, see the explanation in CUJ article -typedef const wxScopeGuardImplBase& wxScopeGuard; - -// when an unnamed scope guard is needed, the macros below may be used -// -// NB: the original code has a single (and much nicer) ON_BLOCK_EXIT macro -// but this results in compiler warnings about unused variables and I -// didn't find a way to work around this other than by having different -// macros with different names - -#define wxGuardName wxMAKE_UNIQUE_NAME(scopeGuard) - -#define wxON_BLOCK_EXIT0_IMPL(n, f) \ - wxScopeGuard n = wxMakeGuard(f); \ - wxPrivateUse(n) -#define wxON_BLOCK_EXIT0(f) \ - wxON_BLOCK_EXIT0_IMPL(wxGuardName, f) - -#define wxON_BLOCK_EXIT_OBJ0_IMPL(n, o, m) \ - wxScopeGuard n = wxMakeObjGuard(o, m); \ - wxPrivateUse(n) -#define wxON_BLOCK_EXIT_OBJ0(o, m) \ - wxON_BLOCK_EXIT_OBJ0_IMPL(wxGuardName, o, &m) - -#define wxON_BLOCK_EXIT1_IMPL(n, f, p1) \ - wxScopeGuard n = wxMakeGuard(f, p1); \ - wxPrivateUse(n) -#define wxON_BLOCK_EXIT1(f, p1) \ - wxON_BLOCK_EXIT1_IMPL(wxGuardName, f, p1) - -#define wxON_BLOCK_EXIT_OBJ1_IMPL(n, o, m, p1) \ - wxScopeGuard n = wxMakeObjGuard(o, m, p1); \ - wxPrivateUse(n) -#define wxON_BLOCK_EXIT_OBJ1(o, m, p1) \ - wxON_BLOCK_EXIT_OBJ1_IMPL(wxGuardName, o, &m, p1) - -#define wxON_BLOCK_EXIT2_IMPL(n, f, p1, p2) \ - wxScopeGuard n = wxMakeGuard(f, p1, p2); \ - wxPrivateUse(n) -#define wxON_BLOCK_EXIT2(f, p1, p2) \ - wxON_BLOCK_EXIT2_IMPL(wxGuardName, f, p1, p2) - -#define wxON_BLOCK_EXIT_OBJ2_IMPL(n, o, m, p1, p2) \ - wxScopeGuard n = wxMakeObjGuard(o, m, p1, p2); \ - wxPrivateUse(n) -#define wxON_BLOCK_EXIT_OBJ2(o, m, p1, p2) \ - wxON_BLOCK_EXIT_OBJ2_IMPL(wxGuardName, o, &m, p1, p2) - -#endif // _WX_SCOPEGUARD_H_ diff --git a/desmume/src/windows/wx/include/wx/scrolbar.h b/desmume/src/windows/wx/include/wx/scrolbar.h deleted file mode 100644 index 1a243b5e0..000000000 --- a/desmume/src/windows/wx/include/wx/scrolbar.h +++ /dev/null @@ -1,80 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: scrolbar.h -// Purpose: wxScrollBar base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: scrolbar.h 37066 2006-01-23 03:27:34Z MR $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SCROLBAR_H_BASE_ -#define _WX_SCROLBAR_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_SCROLLBAR - -#include "wx/control.h" - -extern WXDLLEXPORT_DATA(const wxChar) wxScrollBarNameStr[]; - -// ---------------------------------------------------------------------------- -// wxScrollBar: a scroll bar control -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxScrollBarBase : public wxControl -{ -public: - wxScrollBarBase() { } - - // scrollbar construction - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSB_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxScrollBarNameStr); - - // accessors - virtual int GetThumbPosition() const = 0; - virtual int GetThumbSize() const = 0; - virtual int GetPageSize() const = 0; - virtual int GetRange() const = 0; - - bool IsVertical() const { return (m_windowStyle & wxVERTICAL) != 0; } - - // operations - virtual void SetThumbPosition(int viewStart) = 0; - virtual void SetScrollbar(int position, int thumbSize, - int range, int pageSize, - bool refresh = true) = 0; - -private: - DECLARE_NO_COPY_CLASS(wxScrollBarBase) -}; - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/scrolbar.h" -#elif defined(__WXMSW__) - #include "wx/msw/scrolbar.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/scrolbar.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/scrolbar.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/scrolbar.h" -#elif defined(__WXMAC__) - #include "wx/mac/scrolbar.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/scrolbar.h" -#elif defined(__WXPM__) - #include "wx/os2/scrolbar.h" -#endif - -#endif // wxUSE_SCROLLBAR - -#endif - // _WX_SCROLBAR_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/scrolwin.h b/desmume/src/windows/wx/include/wx/scrolwin.h deleted file mode 100644 index 95827f8c7..000000000 --- a/desmume/src/windows/wx/include/wx/scrolwin.h +++ /dev/null @@ -1,314 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: include/wx/scrolwin.h -// Purpose: wxScrolledWindow, wxScrolledControl and wxScrollHelper -// Author: Vadim Zeitlin -// Modified by: -// Created: 30.08.00 -// RCS-ID: $Id: scrolwin.h 50864 2007-12-20 18:36:19Z VS $ -// Copyright: (c) 2000 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SCROLWIN_H_BASE_ -#define _WX_SCROLWIN_H_BASE_ - -#include "wx/panel.h" - -class WXDLLIMPEXP_FWD_CORE wxScrollHelperEvtHandler; -class WXDLLIMPEXP_FWD_CORE wxTimer; - -// default scrolled window style: scroll in both directions -#define wxScrolledWindowStyle (wxHSCROLL | wxVSCROLL) - -// ---------------------------------------------------------------------------- -// The hierarchy of scrolling classes is a bit complicated because we want to -// put as much functionality as possible in a mix-in class not deriving from -// wxWindow so that other classes could derive from the same base class on all -// platforms irrespectively of whether they are native controls (and hence -// don't use our scrolling) or not. -// -// So we have -// -// wxScrollHelper -// | -// | -// \|/ -// wxWindow wxScrollHelperNative -// | \ / / -// | \ / / -// | _| |_ / -// | wxScrolledWindow / -// | / -// \|/ / -// wxControl / -// \ / -// \ / -// _| |_ -// wxScrolledControl -// -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxScrollHelper -{ -public: - // ctor must be given the associated window - wxScrollHelper(wxWindow *winToScroll); - virtual ~wxScrollHelper(); - - // configure the scrolling - virtual void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY, - int noUnitsX, int noUnitsY, - int xPos = 0, int yPos = 0, - bool noRefresh = false ); - - // scroll to the given (in logical coords) position - virtual void Scroll(int x, int y); - - // get/set the page size for this orientation (wxVERTICAL/wxHORIZONTAL) - int GetScrollPageSize(int orient) const; - void SetScrollPageSize(int orient, int pageSize); - - // get the number of lines the window can scroll, - // returns 0 if no scrollbars are there. - int GetScrollLines( int orient ) const; - - // Set the x, y scrolling increments. - void SetScrollRate( int xstep, int ystep ); - - // get the size of one logical unit in physical ones - virtual void GetScrollPixelsPerUnit(int *pixelsPerUnitX, - int *pixelsPerUnitY) const; - - // Enable/disable Windows scrolling in either direction. If true, wxWidgets - // scrolls the canvas and only a bit of the canvas is invalidated; no - // Clear() is necessary. If false, the whole canvas is invalidated and a - // Clear() is necessary. Disable for when the scroll increment is used to - // actually scroll a non-constant distance - virtual void EnableScrolling(bool x_scrolling, bool y_scrolling); - - // Get the view start - virtual void GetViewStart(int *x, int *y) const; - - // Set the scale factor, used in PrepareDC - void SetScale(double xs, double ys) { m_scaleX = xs; m_scaleY = ys; } - double GetScaleX() const { return m_scaleX; } - double GetScaleY() const { return m_scaleY; } - - // translate between scrolled and unscrolled coordinates - void CalcScrolledPosition(int x, int y, int *xx, int *yy) const - { DoCalcScrolledPosition(x, y, xx, yy); } - wxPoint CalcScrolledPosition(const wxPoint& pt) const - { - wxPoint p2; - DoCalcScrolledPosition(pt.x, pt.y, &p2.x, &p2.y); - return p2; - } - - void CalcUnscrolledPosition(int x, int y, int *xx, int *yy) const - { DoCalcUnscrolledPosition(x, y, xx, yy); } - wxPoint CalcUnscrolledPosition(const wxPoint& pt) const - { - wxPoint p2; - DoCalcUnscrolledPosition(pt.x, pt.y, &p2.x, &p2.y); - return p2; - } - - virtual void DoCalcScrolledPosition(int x, int y, int *xx, int *yy) const; - virtual void DoCalcUnscrolledPosition(int x, int y, int *xx, int *yy) const; - - // Adjust the scrollbars - virtual void AdjustScrollbars(void); - - // Calculate scroll increment - virtual int CalcScrollInc(wxScrollWinEvent& event); - - // Normally the wxScrolledWindow will scroll itself, but in some rare - // occasions you might want it to scroll [part of] another window (e.g. a - // child of it in order to scroll only a portion the area between the - // scrollbars (spreadsheet: only cell area will move). - virtual void SetTargetWindow(wxWindow *target); - virtual wxWindow *GetTargetWindow() const; - - void SetTargetRect(const wxRect& rect) { m_rectToScroll = rect; } - wxRect GetTargetRect() const { return m_rectToScroll; } - - // Override this function to draw the graphic (or just process EVT_PAINT) - virtual void OnDraw(wxDC& WXUNUSED(dc)) { } - - // change the DC origin according to the scroll position. - virtual void DoPrepareDC(wxDC& dc); - - // are we generating the autoscroll events? - bool IsAutoScrolling() const { return m_timerAutoScroll != NULL; } - - // stop generating the scroll events when mouse is held outside the window - void StopAutoScrolling(); - - // this method can be overridden in a derived class to forbid sending the - // auto scroll events - note that unlike StopAutoScrolling() it doesn't - // stop the timer, so it will be called repeatedly and will typically - // return different values depending on the current mouse position - // - // the base class version just returns true - virtual bool SendAutoScrollEvents(wxScrollWinEvent& event) const; - - // the methods to be called from the window event handlers - void HandleOnScroll(wxScrollWinEvent& event); - void HandleOnSize(wxSizeEvent& event); - void HandleOnPaint(wxPaintEvent& event); - void HandleOnChar(wxKeyEvent& event); - void HandleOnMouseEnter(wxMouseEvent& event); - void HandleOnMouseLeave(wxMouseEvent& event); -#if wxUSE_MOUSEWHEEL - void HandleOnMouseWheel(wxMouseEvent& event); -#endif // wxUSE_MOUSEWHEEL - -#if wxABI_VERSION >= 20808 - void HandleOnChildFocus(wxChildFocusEvent& event); -#endif - - // FIXME: this is needed for now for wxPlot compilation, should be removed - // once it is fixed! - void OnScroll(wxScrollWinEvent& event) { HandleOnScroll(event); } - -protected: - // get pointer to our scroll rect if we use it or NULL - const wxRect *GetScrollRect() const - { - return m_rectToScroll.width != 0 ? &m_rectToScroll : NULL; - } - - // get the size of the target window - wxSize GetTargetSize() const - { - return m_rectToScroll.width != 0 ? m_rectToScroll.GetSize() - : m_targetWindow->GetClientSize(); - } - - void GetTargetSize(int *w, int *h) const - { - wxSize size = GetTargetSize(); - if ( w ) - *w = size.x; - if ( h ) - *h = size.y; - } - - // implementations of various wxWindow virtual methods which should be - // forwarded to us (this can be done by WX_FORWARD_TO_SCROLL_HELPER()) - bool ScrollLayout(); - void ScrollDoSetVirtualSize(int x, int y); - wxSize ScrollGetBestVirtualSize() const; - wxSize ScrollGetWindowSizeForVirtualSize(const wxSize& size) const; - - // change just the target window (unlike SetWindow which changes m_win as - // well) - void DoSetTargetWindow(wxWindow *target); - - // delete the event handler we installed - void DeleteEvtHandler(); - - - double m_scaleX; - double m_scaleY; - - wxWindow *m_win, - *m_targetWindow; - - wxRect m_rectToScroll; - - wxTimer *m_timerAutoScroll; - - int m_xScrollPixelsPerLine; - int m_yScrollPixelsPerLine; - int m_xScrollPosition; - int m_yScrollPosition; - int m_xScrollLines; - int m_yScrollLines; - int m_xScrollLinesPerPage; - int m_yScrollLinesPerPage; - - bool m_xScrollingEnabled; - bool m_yScrollingEnabled; - -#if wxUSE_MOUSEWHEEL - int m_wheelRotation; -#endif // wxUSE_MOUSEWHEEL - - wxScrollHelperEvtHandler *m_handler; - - DECLARE_NO_COPY_CLASS(wxScrollHelper) -}; - -// this macro can be used in a wxScrollHelper-derived class to forward wxWindow -// methods to corresponding wxScrollHelper methods -#define WX_FORWARD_TO_SCROLL_HELPER() \ -public: \ - virtual void PrepareDC(wxDC& dc) { DoPrepareDC(dc); } \ - virtual bool Layout() { return ScrollLayout(); } \ - virtual void DoSetVirtualSize(int x, int y) \ - { ScrollDoSetVirtualSize(x, y); } \ - virtual wxSize GetBestVirtualSize() const \ - { return ScrollGetBestVirtualSize(); } \ -protected: \ - virtual wxSize GetWindowSizeForVirtualSize(const wxSize& size) const \ - { return ScrollGetWindowSizeForVirtualSize(size); } - -// include the declaration of wxScrollHelperNative if needed -#if defined(__WXGTK20__) && !defined(__WXUNIVERSAL__) - #include "wx/gtk/scrolwin.h" -#elif defined(__WXGTK__) && !defined(__WXUNIVERSAL__) - #include "wx/gtk1/scrolwin.h" -#else - typedef wxScrollHelper wxScrollHelperNative; -#endif - -// ---------------------------------------------------------------------------- -// wxScrolledWindow: a wxWindow which knows how to scroll -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxScrolledWindow : public wxPanel, - public wxScrollHelperNative -{ -public: - wxScrolledWindow() : wxScrollHelperNative(this) { } - wxScrolledWindow(wxWindow *parent, - wxWindowID winid = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxScrolledWindowStyle, - const wxString& name = wxPanelNameStr) - : wxScrollHelperNative(this) - { - Create(parent, winid, pos, size, style, name); - } - - virtual ~wxScrolledWindow(); - - bool Create(wxWindow *parent, - wxWindowID winid, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxScrolledWindowStyle, - const wxString& name = wxPanelNameStr); - - // we need to return a special WM_GETDLGCODE value to process just the - // arrows but let the other navigation characters through -#ifdef __WXMSW__ - virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); -#endif // __WXMSW__ - - WX_FORWARD_TO_SCROLL_HELPER() - -protected: - // this is needed for wxEVT_PAINT processing hack described in - // wxScrollHelperEvtHandler::ProcessEvent() - void OnPaint(wxPaintEvent& event); - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxScrolledWindow) - DECLARE_EVENT_TABLE() -}; - -#endif // _WX_SCROLWIN_H_BASE_ - diff --git a/desmume/src/windows/wx/include/wx/selstore.h b/desmume/src/windows/wx/include/wx/selstore.h deleted file mode 100644 index 7df7e7986..000000000 --- a/desmume/src/windows/wx/include/wx/selstore.h +++ /dev/null @@ -1,104 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/selstore.h -// Purpose: wxSelectionStore stores selected items in a control -// Author: Vadim Zeitlin -// Modified by: -// Created: 08.06.03 (extracted from src/generic/listctrl.cpp) -// RCS-ID: $Id: selstore.h 29257 2004-09-22 14:38:52Z ABX $ -// Copyright: (c) 2000-2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SELSTORE_H_ -#define _WX_SELSTORE_H_ - -#include "wx/dynarray.h" - -// ---------------------------------------------------------------------------- -// wxSelectedIndices is just a sorted array of indices -// ---------------------------------------------------------------------------- - -inline int CMPFUNC_CONV wxSizeTCmpFn(size_t n1, size_t n2) -{ - return (int)(n1 - n2); -} - -WX_DEFINE_SORTED_EXPORTED_ARRAY_CMP_SIZE_T(size_t, - wxSizeTCmpFn, - wxSelectedIndices); - -// ---------------------------------------------------------------------------- -// wxSelectionStore is used to store the selected items in the virtual -// controls, i.e. it is well suited for storing even when the control contains -// a huge (practically infinite) number of items. -// -// Of course, internally it still has to store the selected items somehow (as -// an array currently) but the advantage is that it can handle the selection -// of all items (common operation) efficiently and that it could be made even -// smarter in the future (e.g. store the selections as an array of ranges + -// individual items) without changing its API. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSelectionStore -{ -public: - wxSelectionStore() : m_itemsSel(wxSizeTCmpFn) { Init(); } - - // set the total number of items we handle - void SetItemCount(size_t count) { m_count = count; } - - // special case of SetItemCount(0) - void Clear() { m_itemsSel.Clear(); m_count = 0; m_defaultState = false; } - - // must be called when a new item is inserted/added - void OnItemAdd(size_t WXUNUSED(item)) { wxFAIL_MSG( _T("TODO") ); } - - // must be called when an item is deleted - void OnItemDelete(size_t item); - - // select one item, use SelectRange() insted if possible! - // - // returns true if the items selection really changed - bool SelectItem(size_t item, bool select = true); - - // select the range of items - // - // return true and fill the itemsChanged array with the indices of items - // which have changed state if "few" of them did, otherwise return false - // (meaning that too many items changed state to bother counting them - // individually) - bool SelectRange(size_t itemFrom, size_t itemTo, - bool select = true, - wxArrayInt *itemsChanged = NULL); - - // return true if the given item is selected - bool IsSelected(size_t item) const; - - // return the total number of selected items - size_t GetSelectedCount() const - { - return m_defaultState ? m_count - m_itemsSel.GetCount() - : m_itemsSel.GetCount(); - } - -private: - // (re)init - void Init() { m_defaultState = false; } - - // the total number of items we handle - size_t m_count; - - // the default state: normally, false (i.e. off) but maybe set to true if - // there are more selected items than non selected ones - this allows to - // handle selection of all items efficiently - bool m_defaultState; - - // the array of items whose selection state is different from default - wxSelectedIndices m_itemsSel; - - DECLARE_NO_COPY_CLASS(wxSelectionStore) -}; - - -#endif // _WX_SELSTORE_H_ - diff --git a/desmume/src/windows/wx/include/wx/settings.h b/desmume/src/windows/wx/include/wx/settings.h deleted file mode 100644 index 471ab6125..000000000 --- a/desmume/src/windows/wx/include/wx/settings.h +++ /dev/null @@ -1,213 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/settings.h -// Purpose: wxSystemSettings class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: settings.h 57542 2008-12-25 13:03:24Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SETTINGS_H_BASE_ -#define _WX_SETTINGS_H_BASE_ - -#include "wx/colour.h" -#include "wx/font.h" - -class WXDLLIMPEXP_FWD_CORE wxWindow; - -// possible values for wxSystemSettings::GetFont() parameter -// -// NB: wxMSW assumes that they have the same values as the parameters of -// Windows GetStockObject() API, don't change the values! -enum wxSystemFont -{ - wxSYS_OEM_FIXED_FONT = 10, - wxSYS_ANSI_FIXED_FONT, - wxSYS_ANSI_VAR_FONT, - wxSYS_SYSTEM_FONT, - wxSYS_DEVICE_DEFAULT_FONT, - wxSYS_DEFAULT_PALETTE, - wxSYS_SYSTEM_FIXED_FONT, - wxSYS_DEFAULT_GUI_FONT, - - // this was just a temporary aberration, do not use it any more - wxSYS_ICONTITLE_FONT = wxSYS_DEFAULT_GUI_FONT -}; - -// possible values for wxSystemSettings::GetColour() parameter -// -// NB: wxMSW assumes that they have the same values as the parameters of -// Windows GetSysColor() API, don't change the values! -enum wxSystemColour -{ - wxSYS_COLOUR_SCROLLBAR, - wxSYS_COLOUR_BACKGROUND, - wxSYS_COLOUR_DESKTOP = wxSYS_COLOUR_BACKGROUND, - wxSYS_COLOUR_ACTIVECAPTION, - wxSYS_COLOUR_INACTIVECAPTION, - wxSYS_COLOUR_MENU, - wxSYS_COLOUR_WINDOW, - wxSYS_COLOUR_WINDOWFRAME, - wxSYS_COLOUR_MENUTEXT, - wxSYS_COLOUR_WINDOWTEXT, - wxSYS_COLOUR_CAPTIONTEXT, - wxSYS_COLOUR_ACTIVEBORDER, - wxSYS_COLOUR_INACTIVEBORDER, - wxSYS_COLOUR_APPWORKSPACE, - wxSYS_COLOUR_HIGHLIGHT, - wxSYS_COLOUR_HIGHLIGHTTEXT, - wxSYS_COLOUR_BTNFACE, - wxSYS_COLOUR_3DFACE = wxSYS_COLOUR_BTNFACE, - wxSYS_COLOUR_BTNSHADOW, - wxSYS_COLOUR_3DSHADOW = wxSYS_COLOUR_BTNSHADOW, - wxSYS_COLOUR_GRAYTEXT, - wxSYS_COLOUR_BTNTEXT, - wxSYS_COLOUR_INACTIVECAPTIONTEXT, - wxSYS_COLOUR_BTNHIGHLIGHT, - wxSYS_COLOUR_BTNHILIGHT = wxSYS_COLOUR_BTNHIGHLIGHT, - wxSYS_COLOUR_3DHIGHLIGHT = wxSYS_COLOUR_BTNHIGHLIGHT, - wxSYS_COLOUR_3DHILIGHT = wxSYS_COLOUR_BTNHIGHLIGHT, - wxSYS_COLOUR_3DDKSHADOW, - wxSYS_COLOUR_3DLIGHT, - wxSYS_COLOUR_INFOTEXT, - wxSYS_COLOUR_INFOBK, - wxSYS_COLOUR_LISTBOX, - wxSYS_COLOUR_HOTLIGHT, - wxSYS_COLOUR_GRADIENTACTIVECAPTION, - wxSYS_COLOUR_GRADIENTINACTIVECAPTION, - wxSYS_COLOUR_MENUHILIGHT, - wxSYS_COLOUR_MENUBAR, - wxSYS_COLOUR_LISTBOXTEXT, - - wxSYS_COLOUR_MAX -}; - -// possible values for wxSystemSettings::GetMetric() index parameter -// -// NB: update the conversion table in msw/settings.cpp if you change the values -// of the elements of this enum -enum wxSystemMetric -{ - wxSYS_MOUSE_BUTTONS = 1, - wxSYS_BORDER_X, - wxSYS_BORDER_Y, - wxSYS_CURSOR_X, - wxSYS_CURSOR_Y, - wxSYS_DCLICK_X, - wxSYS_DCLICK_Y, - wxSYS_DRAG_X, - wxSYS_DRAG_Y, - wxSYS_EDGE_X, - wxSYS_EDGE_Y, - wxSYS_HSCROLL_ARROW_X, - wxSYS_HSCROLL_ARROW_Y, - wxSYS_HTHUMB_X, - wxSYS_ICON_X, - wxSYS_ICON_Y, - wxSYS_ICONSPACING_X, - wxSYS_ICONSPACING_Y, - wxSYS_WINDOWMIN_X, - wxSYS_WINDOWMIN_Y, - wxSYS_SCREEN_X, - wxSYS_SCREEN_Y, - wxSYS_FRAMESIZE_X, - wxSYS_FRAMESIZE_Y, - wxSYS_SMALLICON_X, - wxSYS_SMALLICON_Y, - wxSYS_HSCROLL_Y, - wxSYS_VSCROLL_X, - wxSYS_VSCROLL_ARROW_X, - wxSYS_VSCROLL_ARROW_Y, - wxSYS_VTHUMB_Y, - wxSYS_CAPTION_Y, - wxSYS_MENU_Y, - wxSYS_NETWORK_PRESENT, - wxSYS_PENWINDOWS_PRESENT, - wxSYS_SHOW_SOUNDS, - wxSYS_SWAP_BUTTONS -}; - -// possible values for wxSystemSettings::HasFeature() parameter -enum wxSystemFeature -{ - wxSYS_CAN_DRAW_FRAME_DECORATIONS = 1, - wxSYS_CAN_ICONIZE_FRAME, - wxSYS_TABLET_PRESENT -}; - -// values for different screen designs -enum wxSystemScreenType -{ - wxSYS_SCREEN_NONE = 0, // not yet defined - - wxSYS_SCREEN_TINY, // < - wxSYS_SCREEN_PDA, // >= 320x240 - wxSYS_SCREEN_SMALL, // >= 640x480 - wxSYS_SCREEN_DESKTOP // >= 800x600 -}; - -// ---------------------------------------------------------------------------- -// wxSystemSettingsNative: defines the API for wxSystemSettings class -// ---------------------------------------------------------------------------- - -// this is a namespace rather than a class: it has only non virtual static -// functions -// -// also note that the methods are implemented in the platform-specific source -// files (i.e. this is not a real base class as we can't override its virtual -// functions because it doesn't have any) - -class WXDLLEXPORT wxSystemSettingsNative -{ -public: - // get a standard system colour - static wxColour GetColour(wxSystemColour index); - - // get a standard system font - static wxFont GetFont(wxSystemFont index); - - // get a system-dependent metric - static int GetMetric(wxSystemMetric index, wxWindow * win = NULL); - - // return true if the port has certain feature - static bool HasFeature(wxSystemFeature index); -}; - -// ---------------------------------------------------------------------------- -// include the declaration of the real platform-dependent class -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSystemSettings : public wxSystemSettingsNative -{ -public: -#ifdef __WXUNIVERSAL__ - // in wxUniversal we want to use the theme standard colours instead of the - // system ones, otherwise wxSystemSettings is just the same as - // wxSystemSettingsNative - static wxColour GetColour(wxSystemColour index); -#endif // __WXUNIVERSAL__ - - // Get system screen design (desktop, pda, ..) used for - // laying out various dialogs. - static wxSystemScreenType GetScreenType(); - - // Override default. - static void SetScreenType( wxSystemScreenType screen ); - - // Value - static wxSystemScreenType ms_screen; - -#if WXWIN_COMPATIBILITY_2_4 - // the backwards compatible versions of wxSystemSettingsNative functions, - // don't use these methods in the new code! - wxDEPRECATED(static wxColour GetSystemColour(int index)); - wxDEPRECATED(static wxFont GetSystemFont(int index)); - wxDEPRECATED(static int GetSystemMetric(int index)); -#endif -}; - -#endif - // _WX_SETTINGS_H_BASE_ - diff --git a/desmume/src/windows/wx/include/wx/setup.h b/desmume/src/windows/wx/include/wx/setup.h deleted file mode 100644 index dc996d9f8..000000000 --- a/desmume/src/windows/wx/include/wx/setup.h +++ /dev/null @@ -1,1349 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/msw/setup.h -// Purpose: Configuration for the library -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: setup0.h 51451 2008-01-29 23:11:55Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SETUP_H_ -#define _WX_SETUP_H_ - -/* --- start common options --- */ -// ---------------------------------------------------------------------------- -// global settings -// ---------------------------------------------------------------------------- - -// define this to 0 when building wxBase library - this can also be done from -// makefile/project file overriding the value here -#ifndef wxUSE_GUI - #define wxUSE_GUI 1 -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// compatibility settings -// ---------------------------------------------------------------------------- - -// This setting determines the compatibility with 2.4 API: set it to 1 to -// enable it but please consider updating your code instead. -// -// Default is 0 -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_4 0 - -// This setting determines the compatibility with 2.6 API: set it to 0 to -// flag all cases of using deprecated functions. -// -// Default is 1 but please try building your code with 0 as the default will -// change to 0 in the next version and the deprecated functions will disappear -// in the version after it completely. -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_6 1 - -// MSW-only: Set to 0 for accurate dialog units, else 1 for old behaviour when -// default system font is used for wxWindow::GetCharWidth/Height() instead of -// the current font. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxDIALOG_UNIT_COMPATIBILITY 0 - -// ---------------------------------------------------------------------------- -// debugging settings -// ---------------------------------------------------------------------------- - -// Generic comment about debugging settings: they are very useful if you don't -// use any other memory leak detection tools such as Purify/BoundsChecker, but -// are probably redundant otherwise. Also, Visual C++ CRT has the same features -// as wxWidgets memory debugging subsystem built in since version 5.0 and you -// may prefer to use it instead of built in memory debugging code because it is -// faster and more fool proof. -// -// Using VC++ CRT memory debugging is enabled by default in debug mode -// (__WXDEBUG__) if wxUSE_GLOBAL_MEMORY_OPERATORS is *not* enabled (i.e. is 0) -// and if __NO_VC_CRTDBG__ is not defined. - -// If 1, enables wxDebugContext, for writing error messages to file, etc. If -// __WXDEBUG__ is not defined, will still use the normal memory operators. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_CONTEXT 0 - -// If 1, enables debugging versions of wxObject::new and wxObject::delete *IF* -// __WXDEBUG__ is also defined. -// -// WARNING: this code may not work with all architectures, especially if -// alignment is an issue. This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 1 if you are not using a memory debugging tool, else 0 -#define wxUSE_MEMORY_TRACING 0 - -// In debug mode, cause new and delete to be redefined globally. -// If this causes problems (e.g. link errors which is a common problem -// especially if you use another library which also redefines the global new -// and delete), set this to 0. -// This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -// In debug mode, causes new to be defined to be WXDEBUG_NEW (see object.h). If -// this causes problems (e.g. link errors), set this to 0. You may need to set -// this to 0 if using templates (at least for VC++). This switch is currently -// ignored for mingw / cygwin / CodeWarrior -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_NEW_ALWAYS 0 - -// wxHandleFatalExceptions() may be used to catch the program faults at run -// time and, instead of terminating the program with a usual GPF message box, -// call the user-defined wxApp::OnFatalException() function. If you set -// wxUSE_ON_FATAL_EXCEPTION to 0, wxHandleFatalExceptions() will not work. -// -// This setting is for Win32 only and can only be enabled if your compiler -// supports Win32 structured exception handling (currently only VC++ does) -// -// Default is 1 -// -// Recommended setting: 1 if your compiler supports it. -#define wxUSE_ON_FATAL_EXCEPTION 0 //zero 10-dec-2009 - -// Set this to 1 to be able to generate a human-readable (unlike -// machine-readable minidump created by wxCrashReport::Generate()) stack back -// trace when your program crashes using wxStackWalker -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_STACKWALKER 0 //zero 10-dec-2009 - -// Set this to 1 to compile in wxDebugReport class which allows you to create -// and optionally upload to your web site a debug report consisting of back -// trace of the crash (if wxUSE_STACKWALKER == 1) and other information. -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, it is compiled into a separate library so there -// is no overhead if you don't use it -#define wxUSE_DEBUGREPORT 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// Unicode support -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE to 1 to compile wxWidgets in Unicode mode: wxChar will be -// defined as wchar_t, wxString will use Unicode internally. If you set this -// to 1, you must use wxT() macro for all literal strings in the program. -// -// Unicode is currently only fully supported under Windows NT/2000/XP -// (Windows 9x doesn't support it and the programs compiled in Unicode mode -// will not run under 9x -- but see wxUSE_UNICODE_MSLU below). -// -// Default is 0 -// -// Recommended setting: 0 (unless you only plan to use Windows NT/2000/XP) -#ifndef wxUSE_UNICODE - #define wxUSE_UNICODE 0 -#endif - -// Setting wxUSE_WCHAR_T to 1 gives you some degree of Unicode support without -// compiling the program in Unicode mode. More precisely, it will be possible -// to construct wxString from a wide (Unicode) string and convert any wxString -// to Unicode. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_WCHAR_T 1 - -// ---------------------------------------------------------------------------- -// global features -// ---------------------------------------------------------------------------- - -// Compile library in exception-safe mode? If set to 1, the library will try to -// behave correctly in presence of exceptions (even though it still will not -// use the exceptions itself) and notify the user code about any unhandled -// exceptions. If set to 0, propagation of the exceptions through the library -// code will lead to undefined behaviour -- but the code itself will be -// slightly smaller and faster. -// -// Note that like wxUSE_THREADS this option is automatically set to 0 if -// wxNO_EXCEPTIONS is defined. -// -// Default is 1 -// -// Recommended setting: depends on whether you intend to use C++ exceptions -// in your own code (1 if you do, 0 if you don't) -#define wxUSE_EXCEPTIONS 1 - -// Set wxUSE_EXTENDED_RTTI to 1 to use extended RTTI -// -// Default is 0 -// -// 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<Foo*> and std::vector<Foo*>, 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. -// -// Default is 1 -// -// Recommended setting: 1 (always) -#define wxUSE_LOG 1 - -// Recommended setting: 1 -#define wxUSE_LOGWINDOW 0 //zero 10-dec-2009 - -// Recommended setting: 1 -#define wxUSE_LOGGUI 0 //zero 10-dec-2009 - -// Recommended setting: 1 -#define wxUSE_LOG_DIALOG 0 //zero 10-dec-2009 - -// Support for command line parsing using wxCmdLineParser class. -// -// Default is 1 -// -// Recommended setting: 1 (can be set to 0 if you don't use the cmd line) -#define wxUSE_CMDLINE_PARSER 0 //zero 10-dec-2009 - -// Support for multithreaded applications: if 1, compile in thread classes -// (thread.h) and make the library a bit more thread safe. Although thread -// support is quite stable by now, you may still consider recompiling the -// library without it if you have no use for it - this will result in a -// somewhat smaller and faster operation. -// -// Notice that if wxNO_THREADS is defined, wxUSE_THREADS is automatically reset -// to 0 in wx/chkconf.h, so, for example, if you set USE_THREADS to 0 in -// build/msw/config.* file this value will have no effect. -// -// Default is 1 -// -// Recommended setting: 0 unless you do plan to develop MT applications -#define wxUSE_THREADS 0 //zero 10-dec-2009 - -// If enabled, compiles wxWidgets streams classes -// -// wx stream classes are used for image IO, process IO redirection, network -// protocols implementation and much more and so disabling this results in a -// lot of other functionality being lost. -// -// Default is 1 -// -// Recommended setting: 1 as setting it to 0 disables many other things -#define wxUSE_STREAMS 0 //zero 10-dec-2009 - -// 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 1 //zero 10-dec-2009 - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// 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 header, 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_STRING 0 -#else - #define wxUSE_STD_STRING 1 -#endif - -// 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 -// of wxVsnprintf. The standard vsnprintf() supports positional parameters on -// many Unix systems but usually doesn't under Windows. -// -// Positional parameters are very useful when translating a program since using -// them in formatting strings allow translators to correctly reorder the -// translated sentences. -// -// Default is 1 -// -// Recommended setting: 1 if you want to support multiple languages -#define wxUSE_PRINTF_POS_PARAMS 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// non GUI features selection -// ---------------------------------------------------------------------------- - -// Set wxUSE_LONGLONG to 1 to compile the wxLongLong class. This is a 64 bit -// integer which is implemented in terms of native 64 bit integers if any or -// uses emulation otherwise. -// -// This class is required by wxDateTime and so you should enable it if you want -// to use wxDateTime. For most modern platforms, it will use the native 64 bit -// integers in which case (almost) all of its functions are inline and it -// almost does not take any space, so there should be no reason to switch it -// off. -// -// Recommended setting: 1 -#define wxUSE_LONGLONG 1 - -// Set wxUSE_(F)FILE to 1 to compile wx(F)File classes. wxFile uses low level -// POSIX functions for file access, wxFFile uses ANSI C stdio.h functions. -// -// Default is 1 -// -// Recommended setting: 1 (wxFile is highly recommended as it is required by -// i18n code, wxFileConfig and others) -#define wxUSE_FILE 1 -#define wxUSE_FFILE 1 - -// Use wxFSVolume class providing access to the configured/active mount points -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely disabled if you don't use it) -#define wxUSE_FSVOLUME 1 - -// Use wxStandardPaths class which allows to retrieve some standard locations -// in the file system -// -// Default is 1 -// -// Recommended setting: 1 (may be disabled to save space, but not much) -#define wxUSE_STDPATHS 1 - -// use wxTextBuffer class: required by wxTextFile -#define wxUSE_TEXTBUFFER 1 - -// use wxTextFile class: requires wxFile and wxTextBuffer, required by -// wxFileConfig -#define wxUSE_TEXTFILE 1 - -// i18n support: _() macro, wxLocale class. Requires wxTextFile. -#define wxUSE_INTL 0 //zero 10-dec-2009 - -// Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which -// allow to manipulate dates, times and time intervals. wxDateTime replaces the -// old wxTime and wxDate classes which are still provided for backwards -// compatibility (and implemented in terms of wxDateTime). -// -// Note that this class is relatively new and is still officially in alpha -// stage because some features are not yet (fully) implemented. It is already -// quite useful though and should only be disabled if you are aiming at -// absolutely minimal version of the library. -// -// Requires: wxUSE_LONGLONG -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_DATETIME 1 - -// Set wxUSE_TIMER to 1 to compile wxTimer class -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_TIMER 1 - -// Use wxStopWatch clas. -// -// Default is 1 -// -// Recommended setting: 1 (needed by wxSocket) -#define wxUSE_STOPWATCH 1 - -// Setting wxUSE_CONFIG to 1 enables the use of wxConfig and related classes -// which allow the application to store its settings in the persistent -// storage. Setting this to 1 will also enable on-demand creation of the -// global config object in wxApp. -// -// See also wxUSE_CONFIG_NATIVE below. -// -// Recommended setting: 1 -#define wxUSE_CONFIG 0 //zero 10-dec-2009 (might want this though) - -// If wxUSE_CONFIG is 1, you may choose to use either the native config -// classes under Windows (using .INI files under Win16 and the registry under -// Win32) or the portable text file format used by the config classes under -// Unix. -// -// Default is 1 to use native classes. Note that you may still use -// wxFileConfig even if you set this to 1 - just the config object created by -// default for the applications needs will be a wxRegConfig or wxIniConfig and -// not wxFileConfig. -// -// Recommended setting: 1 -#define wxUSE_CONFIG_NATIVE 0 //zero 10-dec-2009 - -// If wxUSE_DIALUP_MANAGER is 1, compile in wxDialUpManager class which allows -// to connect/disconnect from the network and be notified whenever the dial-up -// network connection is established/terminated. Requires wxUSE_DYNAMIC_LOADER. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DIALUP_MANAGER 0 //zero 10-dec-2009 - -// Compile in classes for run-time DLL loading and function calling. -// Required by wxUSE_DIALUP_MANAGER. -// -// This setting is for Win32 only -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DYNLIB_CLASS 1 //zero 10-dec-2009 - I would like to disable it, but 64bit windows detection needs it - -// experimental, don't use for now -#define wxUSE_DYNAMIC_LOADER 1 //zero 10-dec-2009 - -// Set to 1 to use socket classes -#define wxUSE_SOCKETS 0 //zero 10-dec-2009 - -// Set to 1 to enable virtual file systems (required by wxHTML) -#define wxUSE_FILESYSTEM 0 //zero 10-dec-2009 - -// Set to 1 to enable virtual ZIP filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ZIP 0 //zero 10-dec-2009 - -// Set to 1 to enable virtual archive filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ARCHIVE 0 //zero 10-dec-2009 - -// Set to 1 to enable virtual Internet filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_INET 0 //zero 10-dec-2009 - -// wxArchive classes for accessing archives such as zip and tar -#define wxUSE_ARCHIVE_STREAMS 0 //zero 10-dec-2009 - -// Set to 1 to compile wxZipInput/OutputStream classes. -#define wxUSE_ZIPSTREAM 0 //zero 10-dec-2009 - -// Set to 1 to compile wxTarInput/OutputStream classes. -#define wxUSE_TARSTREAM 0 //zero 10-dec-2009 - -// Set to 1 to compile wxZlibInput/OutputStream classes. Also required by -// wxUSE_LIBPNG -#define wxUSE_ZLIB 0 //zero 10-dec-2009 - -// If enabled, the code written by Apple will be used to write, in a portable -// way, float on the disk. See extended.c for the license which is different -// from wxWidgets one. -// -// Default is 1. -// -// Recommended setting: 1 unless you don't like the license terms (unlikely) -#define wxUSE_APPLE_IEEE 0 //zero 10-dec-2009 - -// Joystick support class -#define wxUSE_JOYSTICK 0 //zero 10-dec-2009 - -// wxFontMapper class -#define wxUSE_FONTMAP 1 //zero 10-dec-2009 - -// wxMimeTypesManager class -#define wxUSE_MIMETYPE 0 //zero 10-dec-2009 - -// wxProtocol and related classes: if you want to use either of wxFTP, wxHTTP -// or wxURL you need to set this to 1. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_PROTOCOL 0 //zero 10-dec-2009 - -// The settings for the individual URL schemes -#define wxUSE_PROTOCOL_FILE 0 //zero 10-dec-2009 -#define wxUSE_PROTOCOL_FTP 0 //zero 10-dec-2009 -#define wxUSE_PROTOCOL_HTTP 0 //zero 10-dec-2009 - -// Define this to use wxURL class. -#define wxUSE_URL 0 //zero 10-dec-2009 - -// Define this to use native platform url and protocol support. -// Currently valid only for MS-Windows. -// Note: if you set this to 1, you can open ftp/http/gopher sites -// and obtain a valid input stream for these sites -// even when you set wxUSE_PROTOCOL_FTP/HTTP to 0. -// Doing so reduces the code size. -// -// This code is experimental and subject to change. -#define wxUSE_URL_NATIVE 0 - -// Support for wxVariant class used in several places throughout the library, -// notably in wxDataViewCtrl API. -// -// Default is 1. -// -// Recommended setting: 1 unless you want to reduce the library size as much as -// possible in which case setting this to 0 can gain up to 100KB. -#define wxUSE_VARIANT 0 //zero 10-dec-2009 - -// Support for regular expression matching via wxRegEx class: enable this to -// use POSIX regular expressions in your code. You need to compile regex -// library from src/regex to use it under Windows. -// -// Default is 0 -// -// Recommended setting: 1 if your compiler supports it, if it doesn't please -// contribute us a makefile for src/regex for it -#define wxUSE_REGEX 0 //zero 10-dec-2009 - -// wxSystemOptions class -#define wxUSE_SYSTEM_OPTIONS 1 - -// wxSound class -#define wxUSE_SOUND 0 //zero 10-dec-2009 - -// Use wxMediaCtrl -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_MEDIACTRL 0 //zero 10-dec-2009 - -// Use GStreamer for Unix (req a lot of dependancies) -// -// Default is 0 -// -// Recommended setting: 1 (wxMediaCtrl won't work by default without it) -#define wxUSE_GSTREAMER 0 - -// Use wxWidget's XRC XML-based resource system. Recommended. -// -// Default is 1 -// -// Recommended setting: 1 (requires wxUSE_XML) -#define wxUSE_XRC 1 - -// XML parsing classes. Note that their API will change in the future, so -// using wxXmlDocument and wxXmlNode in your app is not recommended. -// -// Default is the same as wxUSE_XRC, i.e. 1 by default. -// -// Recommended setting: 1 (required by XRC) -#define wxUSE_XML wxUSE_XRC - -// Use wxWidget's AUI docking system -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_AUI 1 - - -// Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced -// 2D drawing API. (Still somewhat experimental) -// -// Please note that on Windows you will need to link with gdiplus.lib (use -// USE_GDIPLUS=1 for makefile builds) and distribute gdiplus.dll with your -// application if you want it to be runnable on pre-XP systems. -// -// Default is 0 -// -// Recommended setting: 1 -#ifndef wxUSE_GRAPHICS_CONTEXT -#define wxUSE_GRAPHICS_CONTEXT 0 -#endif - -// ---------------------------------------------------------------------------- -// Individual GUI controls -// ---------------------------------------------------------------------------- - -// You must set wxUSE_CONTROLS to 1 if you are using any controls at all -// (without it, wxControl class is not compiled) -// -// Default is 1 -// -// Recommended setting: 1 (don't change except for very special programs) -#define wxUSE_CONTROLS 1 - -// wxPopupWindow class is a top level transient window. It is currently used -// to implement wxTipWindow -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0 if you don't wxUSE_TIPWINDOW) -#define wxUSE_POPUPWIN 1 - -// wxTipWindow allows to implement the custom tooltips, it is used by the -// context help classes. Requires wxUSE_POPUPWIN. -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0) -#define wxUSE_TIPWINDOW 1 - -// Each of the settings below corresponds to one wxWidgets control. They are -// all switched on by default but may be disabled if you are sure that your -// program (including any standard dialogs it can show!) doesn't need them and -// if you desperately want to save some space. If you use any of these you must -// set wxUSE_CONTROLS as well. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl -#define wxUSE_BUTTON 1 // wxButton -#define wxUSE_BMPBUTTON 1 // wxBitmapButton -#define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl -#define wxUSE_CHECKBOX 1 // wxCheckBox -#define wxUSE_CHECKLISTBOX 1 // wxCheckListBox (requires wxUSE_OWNER_DRAWN) -#define wxUSE_CHOICE 1 // wxChoice -#define wxUSE_COLLPANE 1 // wxCollapsiblePane -#define wxUSE_COLOURPICKERCTRL 1 // wxColourPickerCtrl -#define wxUSE_COMBOBOX 1 // wxComboBox -#define wxUSE_DATAVIEWCTRL 0 // wxDataViewCtrl //zero 10-dec-2009 -#define wxUSE_DATEPICKCTRL 1 // wxDatePickerCtrl -#define wxUSE_DIRPICKERCTRL 1 // wxDirPickerCtrl -#define wxUSE_FILEPICKERCTRL 1 // wxFilePickerCtrl -#define wxUSE_FONTPICKERCTRL 1 // wxFontPickerCtrl -#define wxUSE_GAUGE 1 // wxGauge -#define wxUSE_HYPERLINKCTRL 1 // wxHyperlinkCtrl -#define wxUSE_LISTBOX 1 // wxListBox -#define wxUSE_LISTCTRL 1 // wxListCtrl -#define wxUSE_RADIOBOX 1 // wxRadioBox -#define wxUSE_RADIOBTN 1 // wxRadioButton -#define wxUSE_SCROLLBAR 1 // wxScrollBar -#define wxUSE_SEARCHCTRL 1 // wxSearchCtrl -#define wxUSE_SLIDER 1 // wxSlider -#define wxUSE_SPINBTN 1 // wxSpinButton -#define wxUSE_SPINCTRL 1 // wxSpinCtrl -#define wxUSE_STATBOX 1 // wxStaticBox -#define wxUSE_STATLINE 1 // wxStaticLine -#define wxUSE_STATTEXT 1 // wxStaticText -#define wxUSE_STATBMP 1 // wxStaticBitmap -#define wxUSE_TEXTCTRL 1 // wxTextCtrl -#define wxUSE_TOGGLEBTN 1 // requires wxButton -#define wxUSE_TREECTRL 1 // wxTreeCtrl - -// Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR -// below either wxStatusBar95 or a generic wxStatusBar will be used. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_STATUSBAR 1 - -// Two status bar implementations are available under Win32: the generic one -// or the wrapper around native control. For native look and feel the native -// version should be used. -// -// Default is 1 for the platforms where native status bar is supported. -// -// Recommended setting: 1 (there is no advantage in using the generic one) -#define wxUSE_NATIVE_STATUSBAR 1 - -// wxToolBar related settings: if wxUSE_TOOLBAR is 0, don't compile any toolbar -// classes at all. Otherwise, use the native toolbar class unless -// wxUSE_TOOLBAR_NATIVE is 0. -// -// Default is 1 for all settings. -// -// Recommended setting: 1 for wxUSE_TOOLBAR and wxUSE_TOOLBAR_NATIVE. -#define wxUSE_TOOLBAR 1 -#define wxUSE_TOOLBAR_NATIVE 1 - -// wxNotebook is a control with several "tabs" located on one of its sides. It -// may be used to logically organise the data presented to the user instead of -// putting everything in one huge dialog. It replaces wxTabControl and related -// classes of wxWin 1.6x. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_NOTEBOOK 1 - -// wxListbook control is similar to wxNotebook but uses wxListCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_LISTBOOK 1 - -// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CHOICEBOOK 1 - -// wxTreebook control is similar to wxNotebook but uses wxTreeCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TREEBOOK 1 - -// wxToolbook control is similar to wxNotebook but uses wxToolBar instead of -// tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLBOOK 1 - -// wxTabDialog is a generic version of wxNotebook but it is incompatible with -// the new class. It shouldn't be used in new code. -// -// Default is 0. -// -// Recommended setting: 0 (use wxNotebook) -#define wxUSE_TAB_DIALOG 0 - -// wxGrid class -// -// Default is 1, set to 0 to cut down compilation time and binaries size if you -// don't use it. -// -// Recommended setting: 1 -// -#define wxUSE_GRID 1 - -// wxMiniFrame class: a frame with narrow title bar -// -// Default is 1. -// -// Recommended setting: 1 (it doesn't cost almost anything) -#define wxUSE_MINIFRAME 1 - -// wxComboCtrl and related classes: combobox with custom popup window and -// not necessarily a listbox. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 except for wxUniv where it -// it used by wxComboBox -#define wxUSE_COMBOCTRL 1 - -// wxOwnerDrawnComboBox is a custom combobox allowing to paint the combobox -// items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0, except where it is -// needed as a base class for generic wxBitmapComboBox. -#define wxUSE_ODCOMBOBOX 1 - -// wxBitmapComboBox is a combobox that can have images in front of text items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 -#define wxUSE_BITMAPCOMBOBOX 1 - -// ---------------------------------------------------------------------------- -// Miscellaneous GUI stuff -// ---------------------------------------------------------------------------- - -// wxAcceleratorTable/Entry classes and support for them in wxMenu(Bar) -#define wxUSE_ACCEL 1 - -// Hotkey support (currently Windows only) -#define wxUSE_HOTKEY 0 //zero 10-dec-2009 - -// Use wxCaret: a class implementing a "cursor" in a text control (called caret -// under Windows). -// -// Default is 1. -// -// Recommended setting: 1 (can be safely set to 0, not used by the library) -#define wxUSE_CARET 1 - -// Use wxDisplay class: it allows enumerating all displays on a system and -// their geometries as well as finding the display on which the given point or -// window lies. -// -// Default is 1. -// -// Recommended setting: 1 if you need it, can be safely set to 0 otherwise -#define wxUSE_DISPLAY 0 //zero 10-dec-2009 - -// Miscellaneous geometry code: needed for Canvas library -#define wxUSE_GEOMETRY 1 - -// Use wxImageList. This class is needed by wxNotebook, wxTreeCtrl and -// wxListCtrl. -// -// Default is 1. -// -// Recommended setting: 1 (set it to 0 if you don't use any of the controls -// enumerated above, then this class is mostly useless too) -#define wxUSE_IMAGLIST 1 - -// Use wxMenu, wxMenuBar, wxMenuItem. -// -// Default is 1. -// -// Recommended setting: 1 (can't be disabled under MSW) -#define wxUSE_MENUS 1 - -// Use wxSashWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SASH 1 - -// Use wxSplitterWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SPLITTER 1 - -// Use wxToolTip and wxWindow::Set/GetToolTip() methods. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLTIPS 1 - -// wxValidator class and related methods -#define wxUSE_VALIDATORS 1 - -// ---------------------------------------------------------------------------- -// common dialogs -// ---------------------------------------------------------------------------- - -// On rare occasions (e.g. using DJGPP) may want to omit common dialogs (e.g. -// file selector, printer dialog). Switching this off also switches off the -// printing architecture and interactive wxPrinterDC. -// -// Default is 1 -// -// Recommended setting: 1 (unless it really doesn't work) -#define wxUSE_COMMON_DIALOGS 1 - -// wxBusyInfo displays window with message when app is busy. Works in same way -// as wxBusyCursor -#define wxUSE_BUSYINFO 1 - -// Use single/multiple choice dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_CHOICEDLG 1 - -// Use colour picker dialog -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_COLOURDLG 1 - -// wxDirDlg class for getting a directory name from user -#define wxUSE_DIRDLG 1 - -// TODO: setting to choose the generic or native one - -// Use file open/save dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in many places in the library itself) -#define wxUSE_FILEDLG 1 - -// Use find/replace dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely set to 0) -#define wxUSE_FINDREPLDLG 1 - -// Use font picker dialog -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_FONTDLG 1 - -// Use wxMessageDialog and wxMessageBox. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_MSGDLG 1 - -// progress dialog class for lengthy operations -#define wxUSE_PROGRESSDLG 1 - -// support for startup tips (wxShowTip &c) -#define wxUSE_STARTUP_TIPS 1 - -// text entry dialog and wxGetTextFromUser function -#define wxUSE_TEXTDLG 1 - -// number entry dialog -#define wxUSE_NUMBERDLG 1 - -// splash screen class -#define wxUSE_SPLASH 0 //zero 10-dec-2009 - -// wizards -#define wxUSE_WIZARDDLG 1 - -// Compile in wxAboutBox() function showing the standard "About" dialog. -// -// Default is 1 -// -// Recommended setting: 1 but can be set to 0 to save some space if you don't -// use this function -#define wxUSE_ABOUTDLG 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// Metafiles support -// ---------------------------------------------------------------------------- - -// Windows supports the graphics format known as metafile which is, though not -// portable, is widely used under Windows and so is supported by wxWin (under -// Windows only, of course). Win16 (Win3.1) used the so-called "Window -// MetaFiles" or WMFs which were replaced with "Enhanced MetaFiles" or EMFs in -// Win32 (Win9x, NT, 2000). Both of these are supported in wxWin and, by -// default, WMFs will be used under Win16 and EMFs under Win32. This may be -// changed by setting wxUSE_WIN_METAFILES_ALWAYS to 1 and/or setting -// wxUSE_ENH_METAFILE to 0. You may also set wxUSE_METAFILE to 0 to not compile -// in any metafile related classes at all. -// -// Default is 1 for wxUSE_ENH_METAFILE and 0 for wxUSE_WIN_METAFILES_ALWAYS. -// -// Recommended setting: default or 0 for everything for portable programs. -#define wxUSE_METAFILE 0 //zero 10-dec-2009 -#define wxUSE_ENH_METAFILE 0 //zero 10-dec-2009 -#define wxUSE_WIN_METAFILES_ALWAYS 0 - -// ---------------------------------------------------------------------------- -// Big GUI components -// ---------------------------------------------------------------------------- - -// Set to 0 to disable MDI support. -// -// Requires wxUSE_NOTEBOOK under platforms other than MSW. -// -// Default is 1. -// -// Recommended setting: 1, can be safely set to 0. -#define wxUSE_MDI 1 - -// Set to 0 to disable document/view architecture -#define wxUSE_DOC_VIEW_ARCHITECTURE 1 - -// Set to 0 to disable MDI document/view architecture -// -// Requires wxUSE_MDI && wxUSE_DOC_VIEW_ARCHITECTURE -#define wxUSE_MDI_ARCHITECTURE 1 - -// Set to 0 to disable print/preview architecture code -#define wxUSE_PRINTING_ARCHITECTURE 0 //zero 10-dec-2009 - -// wxHTML sublibrary allows to display HTML in wxWindow programs and much, -// much more. -// -// Default is 1. -// -// Recommended setting: 1 (wxHTML is great!), set to 0 if you want compile a -// smaller library. -#define wxUSE_HTML 0 //zero 10-dec-2009 - -// Setting wxUSE_GLCANVAS to 1 enables OpenGL support. You need to have OpenGL -// headers and libraries to be able to compile the library with wxUSE_GLCANVAS -// set to 1. Note that for some compilers (notably Microsoft Visual C++) you -// will need to manually add opengl32.lib and glu32.lib to the list of -// libraries linked with your program if you use OpenGL. -// -// Default is 0. -// -// Recommended setting: 1 if you intend to use OpenGL, 0 otherwise -#define wxUSE_GLCANVAS 0 - -// wxRichTextCtrl allows editing of styled text. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 if you want compile a -// smaller library. -#define wxUSE_RICHTEXT 1 - -// ---------------------------------------------------------------------------- -// Data transfer -// ---------------------------------------------------------------------------- - -// Use wxClipboard class for clipboard copy/paste. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CLIPBOARD 1 - -// Use wxDataObject and related classes. Needed for clipboard and OLE drag and -// drop -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DATAOBJ 1 - -// Use wxDropTarget and wxDropSource classes for drag and drop (this is -// different from "built in" drag and drop in wxTreeCtrl which is always -// available). Requires wxUSE_DATAOBJ. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DRAG_AND_DROP 1 - -// Use wxAccessible for enhanced and customisable accessibility. -// Depends on wxUSE_OLE. -// -// Default is 0. -// -// Recommended setting (at present): 0 -#define wxUSE_ACCESSIBILITY 0 - -// ---------------------------------------------------------------------------- -// miscellaneous settings -// ---------------------------------------------------------------------------- - -// wxSingleInstanceChecker class allows to verify at startup if another program -// instance is running. -// -// Default is 1 -// -// Recommended setting: 1 (the class is tiny, disabling it won't save much -// space) -#define wxUSE_SNGLINST_CHECKER 1 - -#define wxUSE_DRAGIMAGE 1 - -#define wxUSE_IPC 0 //zero 10-dec-2009 - // 0 for no interprocess comms -#define wxUSE_HELP 0 //zero 10-dec-2009 - // 0 for no help facility - -// Should we use MS HTML help for wxHelpController? If disabled, neither -// wxCHMHelpController nor wxBestHelpController are available. -// -// Default is 1 under MSW, 0 is always used for the other platforms. -// -// Recommended setting: 1, only set to 0 if you have trouble compiling -// wxCHMHelpController (could be a problem with really ancient compilers) -#define wxUSE_MS_HTML_HELP 0 //zero 10-dec-2009 - - -// Use wxHTML-based help controller? -#define wxUSE_WXHTML_HELP 0 //zero 10-dec-2009 - -#define wxUSE_RESOURCES 0 - // 0 for no wxGetResource/wxWriteResource -#define wxUSE_CONSTRAINTS 1 - // 0 for no window layout constraint system - -#define wxUSE_SPLINES 1 - // 0 for no splines - -#define wxUSE_MOUSEWHEEL 1 - // Include mouse wheel support - -// ---------------------------------------------------------------------------- -// postscript support settings -// ---------------------------------------------------------------------------- - -// Set to 1 for PostScript device context. -#define wxUSE_POSTSCRIPT 0 - -// Set to 1 to use font metric files in GetTextExtent -#define wxUSE_AFM_FOR_POSTSCRIPT 1 - -// ---------------------------------------------------------------------------- -// database classes -// ---------------------------------------------------------------------------- - -// Define 1 to use ODBC classes -#define wxUSE_ODBC 0 - -// For backward compatibility reasons, this parameter now only controls the -// default scrolling method used by cursors. This default behavior can be -// overriden by setting the second param of wxDB::wxDbGetConnection() or -// wxDb() constructor to indicate whether the connection (and any wxDbTable()s -// that use the connection) should support forward only scrolling of cursors, -// or both forward and backward support for backward scrolling cursors is -// dependent on the data source as well as the ODBC driver being used. -#define wxODBC_FWD_ONLY_CURSORS 1 - -// Default is 0. Set to 1 to use the deprecated classes, enum types, function, -// member variables. With a setting of 1, full backward compatibility with the -// 2.0.x release is possible. It is STRONGLY recommended that this be set to 0, -// as future development will be done only on the non-deprecated -// functions/classes/member variables/etc. -#define wxODBC_BACKWARD_COMPATABILITY 0 - -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. -// -// Default is 1. -// -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows <iostream> and <iostream.h> but you can't mix -// them. Set to 1 for <iostream.h>, 0 for <iostream>. Note that VC++ 7.1 -// and later doesn't support wxUSE_IOSTREAMH == 1 and so <iostream> will be -// used anyhow. -// -// Default is 1. -// -// Recommended setting: whatever your compiler likes more -#define wxUSE_IOSTREAMH 1 - -// ---------------------------------------------------------------------------- -// image format support -// ---------------------------------------------------------------------------- - -// wxImage supports many different image formats which can be configured at -// compile-time. BMP is always supported, others are optional and can be safely -// disabled if you don't plan to use images in such format sometimes saving -// substantial amount of code in the final library. -// -// Some formats require an extra library which is included in wxWin sources -// which is mentioned if it is the case. - -// Set to 1 for wxImage support (recommended). -#define wxUSE_IMAGE 1 //zero 10-dec-2009 - -// Set to 1 for PNG format support (requires libpng). Also requires wxUSE_ZLIB. -#define wxUSE_LIBPNG 0 //zero 10-dec-2009 - -// Set to 1 for JPEG format support (requires libjpeg) -#define wxUSE_LIBJPEG 0 //zero 10-dec-2009 - -// Set to 1 for TIFF format support (requires libtiff) -#define wxUSE_LIBTIFF 0 //zero 10-dec-2009 - -// Set to 1 for TGA format support (loading only) -#define wxUSE_TGA 0 //zero 10-dec-2009 - -// Set to 1 for GIF format support -#define wxUSE_GIF 0 //zero 10-dec-2009 - -// Set to 1 for PNM format support -#define wxUSE_PNM 0 //zero 10-dec-2009 - -// Set to 1 for PCX format support -#define wxUSE_PCX 0 //zero 10-dec-2009 - -// Set to 1 for IFF format support (Amiga format) -#define wxUSE_IFF 0 - -// Set to 1 for XPM format support -#define wxUSE_XPM 0 //zero 10-dec-2009 - -// Set to 1 for MS Icons and Cursors format support -#define wxUSE_ICO_CUR 1 - -// Set to 1 to compile in wxPalette class -#define wxUSE_PALETTE 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// wxUniversal-only options -// ---------------------------------------------------------------------------- - -// Set to 1 to enable compilation of all themes, this is the default -#define wxUSE_ALL_THEMES 1 - -// Set to 1 to enable the compilation of individual theme if wxUSE_ALL_THEMES -// is unset, if it is set these options are not used; notice that metal theme -// uses Win32 one -#define wxUSE_THEME_GTK 0 -#define wxUSE_THEME_METAL 0 -#define wxUSE_THEME_MONO 0 -#define wxUSE_THEME_WIN32 0 - - -/* --- end common options --- */ - -// ---------------------------------------------------------------------------- -// Windows-only settings -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE_MSLU to 1 if you're compiling wxWidgets in Unicode mode -// and want to run your programs under Windows 9x and not only NT/2000/XP. -// This setting enables use of unicows.dll from MSLU (MS Layer for Unicode, see -// http://www.microsoft.com/globaldev/handson/dev/mslu_announce.mspx). Note -// that you will have to modify the makefiles to include unicows.lib import -// library as the first library (see installation instructions in install.txt -// to learn how to do it when building the library or samples). -// -// If your compiler doesn't have unicows.lib, you can get a version of it at -// http://libunicows.sourceforge.net -// -// Default is 0 -// -// Recommended setting: 0 (1 if you want to deploy Unicode apps on 9x systems) -#ifndef wxUSE_UNICODE_MSLU - #define wxUSE_UNICODE_MSLU 0 -#endif - -// Set this to 1 if you want to use wxWidgets and MFC in the same program. This -// will override some other settings (see below) -// -// Default is 0. -// -// Recommended setting: 0 unless you really have to use MFC -#define wxUSE_MFC 0 - -// Set this to 1 for generic OLE support: this is required for drag-and-drop, -// clipboard, OLE Automation. Only set it to 0 if your compiler is very old and -// can't compile/doesn't have the OLE headers. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_OLE 1 - -// Set this to 1 to enable wxAutomationObject class. -// -// Default is 1. -// -// Recommended setting: 1 if you need to control other applications via OLE -// Automation, can be safely set to 0 otherwise -#define wxUSE_OLE_AUTOMATION 1 - -// Set this to 1 to enable wxActiveXContainer class allowing to embed OLE -// controls in wx. -// -// Default is 1. -// -// Recommended setting: 1, required by wxMediaCtrl -#define wxUSE_ACTIVEX 1 - -// wxDC cacheing implementation -#define wxUSE_DC_CACHEING 1 - -// Set this to 1 to enable the use of DIB's for wxBitmap to support -// bitmaps > 16MB on Win95/98/Me. Set to 0 to use DDB's only. -#define wxUSE_DIB_FOR_BITMAP 0 - -// Set this to 1 to enable wxDIB class used internally for manipulating -// wxBitmao data. -// -// Default is 1, set it to 0 only if you don't use wxImage neither -// -// Recommended setting: 1 (without it conversion to/from wxImage won't work) -#define wxUSE_WXDIB 1 - -// Set to 0 to disable PostScript print/preview architecture code under Windows -// (just use Windows printing). -#define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 1 - -// Set this to 1 to use RICHEDIT controls for wxTextCtrl with style wxTE_RICH -// which allows to put more than ~32Kb of text in it even under Win9x (NT -// doesn't have such limitation). -// -// Default is 1 for compilers which support it -// -// Recommended setting: 1, only set it to 0 if your compiler doesn't have -// or can't compile <richedit.h> -#define wxUSE_RICHEDIT 1 - -// Set this to 1 to use extra features of richedit v2 and later controls -// -// Default is 1 for compilers which support it -// -// Recommended setting: 1 -#define wxUSE_RICHEDIT2 1 - -// Set this to 1 to enable support for the owner-drawn menu and listboxes. This -// is required by wxUSE_CHECKLISTBOX. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 for a small library size reduction -#define wxUSE_OWNER_DRAWN 1 - -// Set to 1 to compile MS Windows XP theme engine support -#define wxUSE_UXTHEME 0 //zero 10-dec-2009 - -// Set to 1 to auto-adapt to MS Windows XP themes where possible -// (notably, wxNotebook pages) -#define wxUSE_UXTHEME_AUTO 0 //zero 10-dec-2009 - -// Set to 1 to use InkEdit control (Tablet PC), if available -#define wxUSE_INKEDIT 0 - -// ---------------------------------------------------------------------------- -// Generic versions of native controls -// ---------------------------------------------------------------------------- - -// Set this to 1 to be able to use wxDatePickerCtrlGeneric in addition to the -// native wxDatePickerCtrl -// -// Default is 0. -// -// Recommended setting: 0, this is mainly used for testing -#define wxUSE_DATEPICKCTRL_GENERIC 0 - -// ---------------------------------------------------------------------------- -// Crash debugging helpers -// ---------------------------------------------------------------------------- - -// Set this to 1 to be able to use wxCrashReport::Generate() to create mini -// dumps of your program when it crashes (or at any other moment) -// -// Default is 1 if supported by the compiler (VC++ and recent BC++ only). -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_CRASHREPORT 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// obsolete settings -// ---------------------------------------------------------------------------- - -// NB: all settings in this section are obsolete and should not be used/changed -// at all, they will disappear - -// Define 1 to use bitmap messages. -#define wxUSE_BITMAP_MESSAGE 1 - -#endif // _WX_SETUP_H_ - diff --git a/desmume/src/windows/wx/include/wx/setup_inc.h b/desmume/src/windows/wx/include/wx/setup_inc.h deleted file mode 100644 index 45cc4e55d..000000000 --- a/desmume/src/windows/wx/include/wx/setup_inc.h +++ /dev/null @@ -1,1198 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/setup_inc.h -// Purpose: setup.h settings -// Author: Vadim Zeitlin -// Modified by: -// Created: -// RCS-ID: $Id: setup_inc.h 51451 2008-01-29 23:11:55Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -// ---------------------------------------------------------------------------- -// global settings -// ---------------------------------------------------------------------------- - -// define this to 0 when building wxBase library - this can also be done from -// makefile/project file overriding the value here -#ifndef wxUSE_GUI - #define wxUSE_GUI 1 -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// compatibility settings -// ---------------------------------------------------------------------------- - -// This setting determines the compatibility with 2.4 API: set it to 1 to -// enable it but please consider updating your code instead. -// -// Default is 0 -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_4 0 - -// This setting determines the compatibility with 2.6 API: set it to 0 to -// flag all cases of using deprecated functions. -// -// Default is 1 but please try building your code with 0 as the default will -// change to 0 in the next version and the deprecated functions will disappear -// in the version after it completely. -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_6 1 - -// MSW-only: Set to 0 for accurate dialog units, else 1 for old behaviour when -// default system font is used for wxWindow::GetCharWidth/Height() instead of -// the current font. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxDIALOG_UNIT_COMPATIBILITY 0 - -// ---------------------------------------------------------------------------- -// debugging settings -// ---------------------------------------------------------------------------- - -// Generic comment about debugging settings: they are very useful if you don't -// use any other memory leak detection tools such as Purify/BoundsChecker, but -// are probably redundant otherwise. Also, Visual C++ CRT has the same features -// as wxWidgets memory debugging subsystem built in since version 5.0 and you -// may prefer to use it instead of built in memory debugging code because it is -// faster and more fool proof. -// -// Using VC++ CRT memory debugging is enabled by default in debug mode -// (__WXDEBUG__) if wxUSE_GLOBAL_MEMORY_OPERATORS is *not* enabled (i.e. is 0) -// and if __NO_VC_CRTDBG__ is not defined. - -// If 1, enables wxDebugContext, for writing error messages to file, etc. If -// __WXDEBUG__ is not defined, will still use the normal memory operators. -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_CONTEXT 0 - -// If 1, enables debugging versions of wxObject::new and wxObject::delete *IF* -// __WXDEBUG__ is also defined. -// -// WARNING: this code may not work with all architectures, especially if -// alignment is an issue. This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 1 if you are not using a memory debugging tool, else 0 -#define wxUSE_MEMORY_TRACING 0 - -// In debug mode, cause new and delete to be redefined globally. -// If this causes problems (e.g. link errors which is a common problem -// especially if you use another library which also redefines the global new -// and delete), set this to 0. -// This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -// In debug mode, causes new to be defined to be WXDEBUG_NEW (see object.h). If -// this causes problems (e.g. link errors), set this to 0. You may need to set -// this to 0 if using templates (at least for VC++). This switch is currently -// ignored for mingw / cygwin / CodeWarrior -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_NEW_ALWAYS 0 - -// wxHandleFatalExceptions() may be used to catch the program faults at run -// time and, instead of terminating the program with a usual GPF message box, -// call the user-defined wxApp::OnFatalException() function. If you set -// wxUSE_ON_FATAL_EXCEPTION to 0, wxHandleFatalExceptions() will not work. -// -// This setting is for Win32 only and can only be enabled if your compiler -// supports Win32 structured exception handling (currently only VC++ does) -// -// Default is 1 -// -// Recommended setting: 1 if your compiler supports it. -#define wxUSE_ON_FATAL_EXCEPTION 1 - -// Set this to 1 to be able to generate a human-readable (unlike -// machine-readable minidump created by wxCrashReport::Generate()) stack back -// trace when your program crashes using wxStackWalker -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_STACKWALKER 1 - -// Set this to 1 to compile in wxDebugReport class which allows you to create -// and optionally upload to your web site a debug report consisting of back -// trace of the crash (if wxUSE_STACKWALKER == 1) and other information. -// -// Default is 1 if supported by the compiler. -// -// Recommended setting: 1, it is compiled into a separate library so there -// is no overhead if you don't use it -#define wxUSE_DEBUGREPORT 1 - -// ---------------------------------------------------------------------------- -// Unicode support -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE to 1 to compile wxWidgets in Unicode mode: wxChar will be -// defined as wchar_t, wxString will use Unicode internally. If you set this -// to 1, you must use wxT() macro for all literal strings in the program. -// -// Unicode is currently only fully supported under Windows NT/2000/XP -// (Windows 9x doesn't support it and the programs compiled in Unicode mode -// will not run under 9x -- but see wxUSE_UNICODE_MSLU below). -// -// Default is 0 -// -// Recommended setting: 0 (unless you only plan to use Windows NT/2000/XP) -#ifndef wxUSE_UNICODE - #define wxUSE_UNICODE 0 -#endif - -// Setting wxUSE_WCHAR_T to 1 gives you some degree of Unicode support without -// compiling the program in Unicode mode. More precisely, it will be possible -// to construct wxString from a wide (Unicode) string and convert any wxString -// to Unicode. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_WCHAR_T 1 - -// ---------------------------------------------------------------------------- -// global features -// ---------------------------------------------------------------------------- - -// Compile library in exception-safe mode? If set to 1, the library will try to -// behave correctly in presence of exceptions (even though it still will not -// use the exceptions itself) and notify the user code about any unhandled -// exceptions. If set to 0, propagation of the exceptions through the library -// code will lead to undefined behaviour -- but the code itself will be -// slightly smaller and faster. -// -// Note that like wxUSE_THREADS this option is automatically set to 0 if -// wxNO_EXCEPTIONS is defined. -// -// Default is 1 -// -// Recommended setting: depends on whether you intend to use C++ exceptions -// in your own code (1 if you do, 0 if you don't) -#define wxUSE_EXCEPTIONS 1 - -// Set wxUSE_EXTENDED_RTTI to 1 to use extended RTTI -// -// Default is 0 -// -// 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<Foo*> and std::vector<Foo*>, 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. -// -// Default is 1 -// -// Recommended setting: 1 (always) -#define wxUSE_LOG 1 - -// Recommended setting: 1 -#define wxUSE_LOGWINDOW 1 - -// Recommended setting: 1 -#define wxUSE_LOGGUI 1 - -// Recommended setting: 1 -#define wxUSE_LOG_DIALOG 1 - -// Support for command line parsing using wxCmdLineParser class. -// -// Default is 1 -// -// Recommended setting: 1 (can be set to 0 if you don't use the cmd line) -#define wxUSE_CMDLINE_PARSER 1 - -// Support for multithreaded applications: if 1, compile in thread classes -// (thread.h) and make the library a bit more thread safe. Although thread -// support is quite stable by now, you may still consider recompiling the -// library without it if you have no use for it - this will result in a -// somewhat smaller and faster operation. -// -// Notice that if wxNO_THREADS is defined, wxUSE_THREADS is automatically reset -// to 0 in wx/chkconf.h, so, for example, if you set USE_THREADS to 0 in -// build/msw/config.* file this value will have no effect. -// -// Default is 1 -// -// Recommended setting: 0 unless you do plan to develop MT applications -#define wxUSE_THREADS 1 - -// If enabled, compiles wxWidgets streams classes -// -// wx stream classes are used for image IO, process IO redirection, network -// protocols implementation and much more and so disabling this results in a -// lot of other functionality being lost. -// -// Default is 1 -// -// Recommended setting: 1 as setting it to 0 disables many other things -#define wxUSE_STREAMS 1 - -// 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 0 - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// 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 header, 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_STRING 0 -#else - #define wxUSE_STD_STRING 1 -#endif - -// 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 -// of wxVsnprintf. The standard vsnprintf() supports positional parameters on -// many Unix systems but usually doesn't under Windows. -// -// Positional parameters are very useful when translating a program since using -// them in formatting strings allow translators to correctly reorder the -// translated sentences. -// -// Default is 1 -// -// Recommended setting: 1 if you want to support multiple languages -#define wxUSE_PRINTF_POS_PARAMS 1 - -// ---------------------------------------------------------------------------- -// non GUI features selection -// ---------------------------------------------------------------------------- - -// Set wxUSE_LONGLONG to 1 to compile the wxLongLong class. This is a 64 bit -// integer which is implemented in terms of native 64 bit integers if any or -// uses emulation otherwise. -// -// This class is required by wxDateTime and so you should enable it if you want -// to use wxDateTime. For most modern platforms, it will use the native 64 bit -// integers in which case (almost) all of its functions are inline and it -// almost does not take any space, so there should be no reason to switch it -// off. -// -// Recommended setting: 1 -#define wxUSE_LONGLONG 1 - -// Set wxUSE_(F)FILE to 1 to compile wx(F)File classes. wxFile uses low level -// POSIX functions for file access, wxFFile uses ANSI C stdio.h functions. -// -// Default is 1 -// -// Recommended setting: 1 (wxFile is highly recommended as it is required by -// i18n code, wxFileConfig and others) -#define wxUSE_FILE 1 -#define wxUSE_FFILE 1 - -// Use wxFSVolume class providing access to the configured/active mount points -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely disabled if you don't use it) -#define wxUSE_FSVOLUME 1 - -// Use wxStandardPaths class which allows to retrieve some standard locations -// in the file system -// -// Default is 1 -// -// Recommended setting: 1 (may be disabled to save space, but not much) -#define wxUSE_STDPATHS 1 - -// use wxTextBuffer class: required by wxTextFile -#define wxUSE_TEXTBUFFER 1 - -// use wxTextFile class: requires wxFile and wxTextBuffer, required by -// wxFileConfig -#define wxUSE_TEXTFILE 1 - -// i18n support: _() macro, wxLocale class. Requires wxTextFile. -#define wxUSE_INTL 1 - -// Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which -// allow to manipulate dates, times and time intervals. wxDateTime replaces the -// old wxTime and wxDate classes which are still provided for backwards -// compatibility (and implemented in terms of wxDateTime). -// -// Note that this class is relatively new and is still officially in alpha -// stage because some features are not yet (fully) implemented. It is already -// quite useful though and should only be disabled if you are aiming at -// absolutely minimal version of the library. -// -// Requires: wxUSE_LONGLONG -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_DATETIME 1 - -// Set wxUSE_TIMER to 1 to compile wxTimer class -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_TIMER 1 - -// Use wxStopWatch clas. -// -// Default is 1 -// -// Recommended setting: 1 (needed by wxSocket) -#define wxUSE_STOPWATCH 1 - -// Setting wxUSE_CONFIG to 1 enables the use of wxConfig and related classes -// which allow the application to store its settings in the persistent -// storage. Setting this to 1 will also enable on-demand creation of the -// global config object in wxApp. -// -// See also wxUSE_CONFIG_NATIVE below. -// -// Recommended setting: 1 -#define wxUSE_CONFIG 1 - -// If wxUSE_CONFIG is 1, you may choose to use either the native config -// classes under Windows (using .INI files under Win16 and the registry under -// Win32) or the portable text file format used by the config classes under -// Unix. -// -// Default is 1 to use native classes. Note that you may still use -// wxFileConfig even if you set this to 1 - just the config object created by -// default for the applications needs will be a wxRegConfig or wxIniConfig and -// not wxFileConfig. -// -// Recommended setting: 1 -#define wxUSE_CONFIG_NATIVE 1 - -// If wxUSE_DIALUP_MANAGER is 1, compile in wxDialUpManager class which allows -// to connect/disconnect from the network and be notified whenever the dial-up -// network connection is established/terminated. Requires wxUSE_DYNAMIC_LOADER. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DIALUP_MANAGER 1 - -// Compile in classes for run-time DLL loading and function calling. -// Required by wxUSE_DIALUP_MANAGER. -// -// This setting is for Win32 only -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DYNLIB_CLASS 1 - -// experimental, don't use for now -#define wxUSE_DYNAMIC_LOADER 1 - -// Set to 1 to use socket classes -#define wxUSE_SOCKETS 1 - -// Set to 1 to enable virtual file systems (required by wxHTML) -#define wxUSE_FILESYSTEM 1 - -// Set to 1 to enable virtual ZIP filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ZIP 1 - -// Set to 1 to enable virtual archive filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ARCHIVE 1 - -// Set to 1 to enable virtual Internet filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_INET 1 - -// wxArchive classes for accessing archives such as zip and tar -#define wxUSE_ARCHIVE_STREAMS 1 - -// Set to 1 to compile wxZipInput/OutputStream classes. -#define wxUSE_ZIPSTREAM 1 - -// Set to 1 to compile wxTarInput/OutputStream classes. -#define wxUSE_TARSTREAM 1 - -// Set to 1 to compile wxZlibInput/OutputStream classes. Also required by -// wxUSE_LIBPNG -#define wxUSE_ZLIB 1 - -// If enabled, the code written by Apple will be used to write, in a portable -// way, float on the disk. See extended.c for the license which is different -// from wxWidgets one. -// -// Default is 1. -// -// Recommended setting: 1 unless you don't like the license terms (unlikely) -#define wxUSE_APPLE_IEEE 1 - -// Joystick support class -#define wxUSE_JOYSTICK 1 - -// wxFontMapper class -#define wxUSE_FONTMAP 1 - -// wxMimeTypesManager class -#define wxUSE_MIMETYPE 1 - -// wxProtocol and related classes: if you want to use either of wxFTP, wxHTTP -// or wxURL you need to set this to 1. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_PROTOCOL 1 - -// The settings for the individual URL schemes -#define wxUSE_PROTOCOL_FILE 1 -#define wxUSE_PROTOCOL_FTP 1 -#define wxUSE_PROTOCOL_HTTP 1 - -// Define this to use wxURL class. -#define wxUSE_URL 1 - -// Define this to use native platform url and protocol support. -// Currently valid only for MS-Windows. -// Note: if you set this to 1, you can open ftp/http/gopher sites -// and obtain a valid input stream for these sites -// even when you set wxUSE_PROTOCOL_FTP/HTTP to 0. -// Doing so reduces the code size. -// -// This code is experimental and subject to change. -#define wxUSE_URL_NATIVE 0 - -// Support for wxVariant class used in several places throughout the library, -// notably in wxDataViewCtrl API. -// -// Default is 1. -// -// Recommended setting: 1 unless you want to reduce the library size as much as -// possible in which case setting this to 0 can gain up to 100KB. -#define wxUSE_VARIANT 1 - -// Support for regular expression matching via wxRegEx class: enable this to -// use POSIX regular expressions in your code. You need to compile regex -// library from src/regex to use it under Windows. -// -// Default is 0 -// -// Recommended setting: 1 if your compiler supports it, if it doesn't please -// contribute us a makefile for src/regex for it -#define wxUSE_REGEX 1 - -// wxSystemOptions class -#define wxUSE_SYSTEM_OPTIONS 1 - -// wxSound class -#define wxUSE_SOUND 1 - -// Use wxMediaCtrl -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_MEDIACTRL 1 - -// Use GStreamer for Unix (req a lot of dependancies) -// -// Default is 0 -// -// Recommended setting: 1 (wxMediaCtrl won't work by default without it) -#define wxUSE_GSTREAMER 0 - -// Use wxWidget's XRC XML-based resource system. Recommended. -// -// Default is 1 -// -// Recommended setting: 1 (requires wxUSE_XML) -#define wxUSE_XRC 1 - -// XML parsing classes. Note that their API will change in the future, so -// using wxXmlDocument and wxXmlNode in your app is not recommended. -// -// Default is the same as wxUSE_XRC, i.e. 1 by default. -// -// Recommended setting: 1 (required by XRC) -#define wxUSE_XML wxUSE_XRC - -// Use wxWidget's AUI docking system -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_AUI 1 - - -// Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced -// 2D drawing API. (Still somewhat experimental) -// -// Please note that on Windows you will need to link with gdiplus.lib (use -// USE_GDIPLUS=1 for makefile builds) and distribute gdiplus.dll with your -// application if you want it to be runnable on pre-XP systems. -// -// Default is 0 -// -// Recommended setting: 1 -#ifndef wxUSE_GRAPHICS_CONTEXT -#define wxUSE_GRAPHICS_CONTEXT 0 -#endif - -// ---------------------------------------------------------------------------- -// Individual GUI controls -// ---------------------------------------------------------------------------- - -// You must set wxUSE_CONTROLS to 1 if you are using any controls at all -// (without it, wxControl class is not compiled) -// -// Default is 1 -// -// Recommended setting: 1 (don't change except for very special programs) -#define wxUSE_CONTROLS 1 - -// wxPopupWindow class is a top level transient window. It is currently used -// to implement wxTipWindow -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0 if you don't wxUSE_TIPWINDOW) -#define wxUSE_POPUPWIN 1 - -// wxTipWindow allows to implement the custom tooltips, it is used by the -// context help classes. Requires wxUSE_POPUPWIN. -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0) -#define wxUSE_TIPWINDOW 1 - -// Each of the settings below corresponds to one wxWidgets control. They are -// all switched on by default but may be disabled if you are sure that your -// program (including any standard dialogs it can show!) doesn't need them and -// if you desperately want to save some space. If you use any of these you must -// set wxUSE_CONTROLS as well. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl -#define wxUSE_BUTTON 1 // wxButton -#define wxUSE_BMPBUTTON 1 // wxBitmapButton -#define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl -#define wxUSE_CHECKBOX 1 // wxCheckBox -#define wxUSE_CHECKLISTBOX 1 // wxCheckListBox (requires wxUSE_OWNER_DRAWN) -#define wxUSE_CHOICE 1 // wxChoice -#define wxUSE_COLLPANE 1 // wxCollapsiblePane -#define wxUSE_COLOURPICKERCTRL 1 // wxColourPickerCtrl -#define wxUSE_COMBOBOX 1 // wxComboBox -#define wxUSE_DATAVIEWCTRL 1 // wxDataViewCtrl -#define wxUSE_DATEPICKCTRL 1 // wxDatePickerCtrl -#define wxUSE_DIRPICKERCTRL 1 // wxDirPickerCtrl -#define wxUSE_FILEPICKERCTRL 1 // wxFilePickerCtrl -#define wxUSE_FONTPICKERCTRL 1 // wxFontPickerCtrl -#define wxUSE_GAUGE 1 // wxGauge -#define wxUSE_HYPERLINKCTRL 1 // wxHyperlinkCtrl -#define wxUSE_LISTBOX 1 // wxListBox -#define wxUSE_LISTCTRL 1 // wxListCtrl -#define wxUSE_RADIOBOX 1 // wxRadioBox -#define wxUSE_RADIOBTN 1 // wxRadioButton -#define wxUSE_SCROLLBAR 1 // wxScrollBar -#define wxUSE_SEARCHCTRL 1 // wxSearchCtrl -#define wxUSE_SLIDER 1 // wxSlider -#define wxUSE_SPINBTN 1 // wxSpinButton -#define wxUSE_SPINCTRL 1 // wxSpinCtrl -#define wxUSE_STATBOX 1 // wxStaticBox -#define wxUSE_STATLINE 1 // wxStaticLine -#define wxUSE_STATTEXT 1 // wxStaticText -#define wxUSE_STATBMP 1 // wxStaticBitmap -#define wxUSE_TEXTCTRL 1 // wxTextCtrl -#define wxUSE_TOGGLEBTN 1 // requires wxButton -#define wxUSE_TREECTRL 1 // wxTreeCtrl - -// Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR -// below either wxStatusBar95 or a generic wxStatusBar will be used. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_STATUSBAR 1 - -// Two status bar implementations are available under Win32: the generic one -// or the wrapper around native control. For native look and feel the native -// version should be used. -// -// Default is 1 for the platforms where native status bar is supported. -// -// Recommended setting: 1 (there is no advantage in using the generic one) -#define wxUSE_NATIVE_STATUSBAR 1 - -// wxToolBar related settings: if wxUSE_TOOLBAR is 0, don't compile any toolbar -// classes at all. Otherwise, use the native toolbar class unless -// wxUSE_TOOLBAR_NATIVE is 0. -// -// Default is 1 for all settings. -// -// Recommended setting: 1 for wxUSE_TOOLBAR and wxUSE_TOOLBAR_NATIVE. -#define wxUSE_TOOLBAR 1 -#define wxUSE_TOOLBAR_NATIVE 1 - -// wxNotebook is a control with several "tabs" located on one of its sides. It -// may be used to logically organise the data presented to the user instead of -// putting everything in one huge dialog. It replaces wxTabControl and related -// classes of wxWin 1.6x. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_NOTEBOOK 1 - -// wxListbook control is similar to wxNotebook but uses wxListCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_LISTBOOK 1 - -// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CHOICEBOOK 1 - -// wxTreebook control is similar to wxNotebook but uses wxTreeCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TREEBOOK 1 - -// wxToolbook control is similar to wxNotebook but uses wxToolBar instead of -// tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLBOOK 1 - -// wxTabDialog is a generic version of wxNotebook but it is incompatible with -// the new class. It shouldn't be used in new code. -// -// Default is 0. -// -// Recommended setting: 0 (use wxNotebook) -#define wxUSE_TAB_DIALOG 0 - -// wxGrid class -// -// Default is 1, set to 0 to cut down compilation time and binaries size if you -// don't use it. -// -// Recommended setting: 1 -// -#define wxUSE_GRID 1 - -// wxMiniFrame class: a frame with narrow title bar -// -// Default is 1. -// -// Recommended setting: 1 (it doesn't cost almost anything) -#define wxUSE_MINIFRAME 1 - -// wxComboCtrl and related classes: combobox with custom popup window and -// not necessarily a listbox. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 except for wxUniv where it -// it used by wxComboBox -#define wxUSE_COMBOCTRL 1 - -// wxOwnerDrawnComboBox is a custom combobox allowing to paint the combobox -// items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0, except where it is -// needed as a base class for generic wxBitmapComboBox. -#define wxUSE_ODCOMBOBOX 1 - -// wxBitmapComboBox is a combobox that can have images in front of text items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 -#define wxUSE_BITMAPCOMBOBOX 1 - -// ---------------------------------------------------------------------------- -// Miscellaneous GUI stuff -// ---------------------------------------------------------------------------- - -// wxAcceleratorTable/Entry classes and support for them in wxMenu(Bar) -#define wxUSE_ACCEL 1 - -// Hotkey support (currently Windows only) -#define wxUSE_HOTKEY 1 - -// Use wxCaret: a class implementing a "cursor" in a text control (called caret -// under Windows). -// -// Default is 1. -// -// Recommended setting: 1 (can be safely set to 0, not used by the library) -#define wxUSE_CARET 1 - -// Use wxDisplay class: it allows enumerating all displays on a system and -// their geometries as well as finding the display on which the given point or -// window lies. -// -// Default is 1. -// -// Recommended setting: 1 if you need it, can be safely set to 0 otherwise -#define wxUSE_DISPLAY 1 - -// Miscellaneous geometry code: needed for Canvas library -#define wxUSE_GEOMETRY 1 - -// Use wxImageList. This class is needed by wxNotebook, wxTreeCtrl and -// wxListCtrl. -// -// Default is 1. -// -// Recommended setting: 1 (set it to 0 if you don't use any of the controls -// enumerated above, then this class is mostly useless too) -#define wxUSE_IMAGLIST 1 - -// Use wxMenu, wxMenuBar, wxMenuItem. -// -// Default is 1. -// -// Recommended setting: 1 (can't be disabled under MSW) -#define wxUSE_MENUS 1 - -// Use wxSashWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SASH 1 - -// Use wxSplitterWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SPLITTER 1 - -// Use wxToolTip and wxWindow::Set/GetToolTip() methods. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLTIPS 1 - -// wxValidator class and related methods -#define wxUSE_VALIDATORS 1 - -// ---------------------------------------------------------------------------- -// common dialogs -// ---------------------------------------------------------------------------- - -// On rare occasions (e.g. using DJGPP) may want to omit common dialogs (e.g. -// file selector, printer dialog). Switching this off also switches off the -// printing architecture and interactive wxPrinterDC. -// -// Default is 1 -// -// Recommended setting: 1 (unless it really doesn't work) -#define wxUSE_COMMON_DIALOGS 1 - -// wxBusyInfo displays window with message when app is busy. Works in same way -// as wxBusyCursor -#define wxUSE_BUSYINFO 1 - -// Use single/multiple choice dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_CHOICEDLG 1 - -// Use colour picker dialog -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_COLOURDLG 1 - -// wxDirDlg class for getting a directory name from user -#define wxUSE_DIRDLG 1 - -// TODO: setting to choose the generic or native one - -// Use file open/save dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in many places in the library itself) -#define wxUSE_FILEDLG 1 - -// Use find/replace dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely set to 0) -#define wxUSE_FINDREPLDLG 1 - -// Use font picker dialog -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_FONTDLG 1 - -// Use wxMessageDialog and wxMessageBox. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_MSGDLG 1 - -// progress dialog class for lengthy operations -#define wxUSE_PROGRESSDLG 1 - -// support for startup tips (wxShowTip &c) -#define wxUSE_STARTUP_TIPS 1 - -// text entry dialog and wxGetTextFromUser function -#define wxUSE_TEXTDLG 1 - -// number entry dialog -#define wxUSE_NUMBERDLG 1 - -// splash screen class -#define wxUSE_SPLASH 1 - -// wizards -#define wxUSE_WIZARDDLG 1 - -// Compile in wxAboutBox() function showing the standard "About" dialog. -// -// Default is 1 -// -// Recommended setting: 1 but can be set to 0 to save some space if you don't -// use this function -#define wxUSE_ABOUTDLG 1 - -// ---------------------------------------------------------------------------- -// Metafiles support -// ---------------------------------------------------------------------------- - -// Windows supports the graphics format known as metafile which is, though not -// portable, is widely used under Windows and so is supported by wxWin (under -// Windows only, of course). Win16 (Win3.1) used the so-called "Window -// MetaFiles" or WMFs which were replaced with "Enhanced MetaFiles" or EMFs in -// Win32 (Win9x, NT, 2000). Both of these are supported in wxWin and, by -// default, WMFs will be used under Win16 and EMFs under Win32. This may be -// changed by setting wxUSE_WIN_METAFILES_ALWAYS to 1 and/or setting -// wxUSE_ENH_METAFILE to 0. You may also set wxUSE_METAFILE to 0 to not compile -// in any metafile related classes at all. -// -// Default is 1 for wxUSE_ENH_METAFILE and 0 for wxUSE_WIN_METAFILES_ALWAYS. -// -// Recommended setting: default or 0 for everything for portable programs. -#define wxUSE_METAFILE 1 -#define wxUSE_ENH_METAFILE 1 -#define wxUSE_WIN_METAFILES_ALWAYS 0 - -// ---------------------------------------------------------------------------- -// Big GUI components -// ---------------------------------------------------------------------------- - -// Set to 0 to disable MDI support. -// -// Requires wxUSE_NOTEBOOK under platforms other than MSW. -// -// Default is 1. -// -// Recommended setting: 1, can be safely set to 0. -#define wxUSE_MDI 1 - -// Set to 0 to disable document/view architecture -#define wxUSE_DOC_VIEW_ARCHITECTURE 1 - -// Set to 0 to disable MDI document/view architecture -// -// Requires wxUSE_MDI && wxUSE_DOC_VIEW_ARCHITECTURE -#define wxUSE_MDI_ARCHITECTURE 1 - -// Set to 0 to disable print/preview architecture code -#define wxUSE_PRINTING_ARCHITECTURE 1 - -// wxHTML sublibrary allows to display HTML in wxWindow programs and much, -// much more. -// -// Default is 1. -// -// Recommended setting: 1 (wxHTML is great!), set to 0 if you want compile a -// smaller library. -#define wxUSE_HTML 1 - -// Setting wxUSE_GLCANVAS to 1 enables OpenGL support. You need to have OpenGL -// headers and libraries to be able to compile the library with wxUSE_GLCANVAS -// set to 1. Note that for some compilers (notably Microsoft Visual C++) you -// will need to manually add opengl32.lib and glu32.lib to the list of -// libraries linked with your program if you use OpenGL. -// -// Default is 0. -// -// Recommended setting: 1 if you intend to use OpenGL, 0 otherwise -#define wxUSE_GLCANVAS 0 - -// wxRichTextCtrl allows editing of styled text. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 if you want compile a -// smaller library. -#define wxUSE_RICHTEXT 1 - -// ---------------------------------------------------------------------------- -// Data transfer -// ---------------------------------------------------------------------------- - -// Use wxClipboard class for clipboard copy/paste. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CLIPBOARD 1 - -// Use wxDataObject and related classes. Needed for clipboard and OLE drag and -// drop -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DATAOBJ 1 - -// Use wxDropTarget and wxDropSource classes for drag and drop (this is -// different from "built in" drag and drop in wxTreeCtrl which is always -// available). Requires wxUSE_DATAOBJ. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_DRAG_AND_DROP 1 - -// Use wxAccessible for enhanced and customisable accessibility. -// Depends on wxUSE_OLE. -// -// Default is 0. -// -// Recommended setting (at present): 0 -#define wxUSE_ACCESSIBILITY 0 - -// ---------------------------------------------------------------------------- -// miscellaneous settings -// ---------------------------------------------------------------------------- - -// wxSingleInstanceChecker class allows to verify at startup if another program -// instance is running. -// -// Default is 1 -// -// Recommended setting: 1 (the class is tiny, disabling it won't save much -// space) -#define wxUSE_SNGLINST_CHECKER 1 - -#define wxUSE_DRAGIMAGE 1 - -#define wxUSE_IPC 1 - // 0 for no interprocess comms -#define wxUSE_HELP 1 - // 0 for no help facility - -// Should we use MS HTML help for wxHelpController? If disabled, neither -// wxCHMHelpController nor wxBestHelpController are available. -// -// Default is 1 under MSW, 0 is always used for the other platforms. -// -// Recommended setting: 1, only set to 0 if you have trouble compiling -// wxCHMHelpController (could be a problem with really ancient compilers) -#define wxUSE_MS_HTML_HELP 1 - - -// Use wxHTML-based help controller? -#define wxUSE_WXHTML_HELP 1 - -#define wxUSE_RESOURCES 0 - // 0 for no wxGetResource/wxWriteResource -#define wxUSE_CONSTRAINTS 1 - // 0 for no window layout constraint system - -#define wxUSE_SPLINES 1 - // 0 for no splines - -#define wxUSE_MOUSEWHEEL 1 - // Include mouse wheel support - -// ---------------------------------------------------------------------------- -// postscript support settings -// ---------------------------------------------------------------------------- - -// Set to 1 for PostScript device context. -#define wxUSE_POSTSCRIPT 0 - -// Set to 1 to use font metric files in GetTextExtent -#define wxUSE_AFM_FOR_POSTSCRIPT 1 - -// ---------------------------------------------------------------------------- -// database classes -// ---------------------------------------------------------------------------- - -// Define 1 to use ODBC classes -#define wxUSE_ODBC 0 - -// For backward compatibility reasons, this parameter now only controls the -// default scrolling method used by cursors. This default behavior can be -// overriden by setting the second param of wxDB::wxDbGetConnection() or -// wxDb() constructor to indicate whether the connection (and any wxDbTable()s -// that use the connection) should support forward only scrolling of cursors, -// or both forward and backward support for backward scrolling cursors is -// dependent on the data source as well as the ODBC driver being used. -#define wxODBC_FWD_ONLY_CURSORS 1 - -// Default is 0. Set to 1 to use the deprecated classes, enum types, function, -// member variables. With a setting of 1, full backward compatibility with the -// 2.0.x release is possible. It is STRONGLY recommended that this be set to 0, -// as future development will be done only on the non-deprecated -// functions/classes/member variables/etc. -#define wxODBC_BACKWARD_COMPATABILITY 0 - -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. -// -// Default is 1. -// -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows <iostream> and <iostream.h> but you can't mix -// them. Set to 1 for <iostream.h>, 0 for <iostream>. Note that VC++ 7.1 -// and later doesn't support wxUSE_IOSTREAMH == 1 and so <iostream> will be -// used anyhow. -// -// Default is 1. -// -// Recommended setting: whatever your compiler likes more -#define wxUSE_IOSTREAMH 1 - -// ---------------------------------------------------------------------------- -// image format support -// ---------------------------------------------------------------------------- - -// wxImage supports many different image formats which can be configured at -// compile-time. BMP is always supported, others are optional and can be safely -// disabled if you don't plan to use images in such format sometimes saving -// substantial amount of code in the final library. -// -// Some formats require an extra library which is included in wxWin sources -// which is mentioned if it is the case. - -// Set to 1 for wxImage support (recommended). -#define wxUSE_IMAGE 1 - -// Set to 1 for PNG format support (requires libpng). Also requires wxUSE_ZLIB. -#define wxUSE_LIBPNG 1 - -// Set to 1 for JPEG format support (requires libjpeg) -#define wxUSE_LIBJPEG 1 - -// Set to 1 for TIFF format support (requires libtiff) -#define wxUSE_LIBTIFF 1 - -// Set to 1 for TGA format support (loading only) -#define wxUSE_TGA 1 - -// Set to 1 for GIF format support -#define wxUSE_GIF 1 - -// Set to 1 for PNM format support -#define wxUSE_PNM 1 - -// Set to 1 for PCX format support -#define wxUSE_PCX 1 - -// Set to 1 for IFF format support (Amiga format) -#define wxUSE_IFF 0 - -// Set to 1 for XPM format support -#define wxUSE_XPM 1 - -// Set to 1 for MS Icons and Cursors format support -#define wxUSE_ICO_CUR 1 - -// Set to 1 to compile in wxPalette class -#define wxUSE_PALETTE 1 - -// ---------------------------------------------------------------------------- -// wxUniversal-only options -// ---------------------------------------------------------------------------- - -// Set to 1 to enable compilation of all themes, this is the default -#define wxUSE_ALL_THEMES 1 - -// Set to 1 to enable the compilation of individual theme if wxUSE_ALL_THEMES -// is unset, if it is set these options are not used; notice that metal theme -// uses Win32 one -#define wxUSE_THEME_GTK 0 -#define wxUSE_THEME_METAL 0 -#define wxUSE_THEME_MONO 0 -#define wxUSE_THEME_WIN32 0 - - diff --git a/desmume/src/windows/wx/include/wx/setup_redirect.h b/desmume/src/windows/wx/include/wx/setup_redirect.h deleted file mode 100644 index 87a9c3d85..000000000 --- a/desmume/src/windows/wx/include/wx/setup_redirect.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * wx/setup.h - * - * This file should not normally be used, except where makefiles - * have not yet been adjusted to take into account of the new scheme - * whereby a setup.h is created under the lib directory. - * - * Copyright: (c) Vadim Zeitlin - * RCS-ID: $Id: setup_redirect.h 33948 2005-05-04 18:57:50Z JS $ - * Licence: wxWindows Licence - */ - -#ifdef __WXMSW__ -#include "wx/msw/setup.h" -#else -#error Please adjust your include path to pick up the wx/setup.h file under lib first. -#endif - diff --git a/desmume/src/windows/wx/include/wx/sizer.h b/desmume/src/windows/wx/include/wx/sizer.h deleted file mode 100644 index f1f503677..000000000 --- a/desmume/src/windows/wx/include/wx/sizer.h +++ /dev/null @@ -1,1092 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/sizer.h -// Purpose: provide wxSizer class for layout -// Author: Robert Roebling and Robin Dunn -// Modified by: Ron Lee, Vadim Zeitlin (wxSizerFlags) -// Created: -// RCS-ID: $Id: sizer.h 52331 2008-03-05 15:02:22Z VS $ -// Copyright: (c) Robin Dunn, Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __WXSIZER_H__ -#define __WXSIZER_H__ - -#include "wx/defs.h" - -#include "wx/window.h" - -//--------------------------------------------------------------------------- -// classes -//--------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxButton; -class WXDLLIMPEXP_FWD_CORE wxBoxSizer; -class WXDLLIMPEXP_FWD_CORE wxSizerItem; -class WXDLLIMPEXP_FWD_CORE wxSizer; -class WXDLLIMPEXP_FWD_CORE wxFlexGridSizer; -class WXDLLIMPEXP_FWD_CORE wxGridBagSizer; - -#ifndef wxUSE_BORDER_BY_DEFAULT - #ifdef __SMARTPHONE__ - // no borders by default on limited size screen - #define wxUSE_BORDER_BY_DEFAULT 0 - #else - #define wxUSE_BORDER_BY_DEFAULT 1 - #endif -#endif - -// ---------------------------------------------------------------------------- -// wxSizerFlags: flags used for an item in the sizer -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSizerFlags -{ -public: - // construct the flags object initialized with the given proportion (0 by - // default) - wxSizerFlags(int proportion = 0) : m_proportion(proportion) - { - m_flags = 0; - m_borderInPixels = 0; - } - - // setters for all sizer flags, they all return the object itself so that - // calls to them can be chained - - wxSizerFlags& Proportion(int proportion) - { - m_proportion = proportion; - return *this; - } - - wxSizerFlags& Align(int alignment) // combination of wxAlignment values - { - m_flags &= ~wxALIGN_MASK; - m_flags |= alignment; - - return *this; - } - - wxSizerFlags& Expand() - { - m_flags |= wxEXPAND; - return *this; - } - - // some shortcuts for Align() - wxSizerFlags& Centre() { return Align(wxCENTRE); } - wxSizerFlags& Center() { return Centre(); } - wxSizerFlags& Left() { return Align(wxALIGN_LEFT); } - wxSizerFlags& Right() { return Align(wxALIGN_RIGHT); } - -#if wxABI_VERSION >= 20802 - wxSizerFlags& Top() { return Align(wxALIGN_TOP); } - wxSizerFlags& Bottom() { return Align(wxALIGN_BOTTOM); } -#endif // wxABI 2.8.2+ - - // default border size used by Border() below - static int GetDefaultBorder() - { -#if wxUSE_BORDER_BY_DEFAULT - // FIXME: default border size shouldn't be hardcoded and at the very - // least they should depend on the current font size - return 5; -#else - return 0; -#endif - } - - - wxSizerFlags& Border(int direction, int borderInPixels) - { - m_flags &= ~wxALL; - m_flags |= direction; - - m_borderInPixels = borderInPixels; - - return *this; - } - - wxSizerFlags& Border(int direction = wxALL) - { -#if wxUSE_BORDER_BY_DEFAULT - return Border(direction, GetDefaultBorder()); -#else - // no borders by default on limited size screen - wxUnusedVar(direction); - - return *this; -#endif - } - - wxSizerFlags& DoubleBorder(int direction = wxALL) - { -#if wxUSE_BORDER_BY_DEFAULT - return Border(direction, 2*GetDefaultBorder()); -#else - wxUnusedVar(direction); - - return *this; -#endif - } - - wxSizerFlags& TripleBorder(int direction = wxALL) - { -#if wxUSE_BORDER_BY_DEFAULT - return Border(direction, 3*GetDefaultBorder()); -#else - wxUnusedVar(direction); - - return *this; -#endif - } - - wxSizerFlags& HorzBorder() - { -#if wxUSE_BORDER_BY_DEFAULT - return Border(wxLEFT | wxRIGHT, GetDefaultBorder()); -#else - return *this; -#endif - } - - wxSizerFlags& DoubleHorzBorder() - { -#if wxUSE_BORDER_BY_DEFAULT - return Border(wxLEFT | wxRIGHT, 2*GetDefaultBorder()); -#else - return *this; -#endif - } - -#if wxABI_VERSION >= 20802 - // setters for the others flags - wxSizerFlags& Shaped() - { - m_flags |= wxSHAPED; - - return *this; - } - - wxSizerFlags& FixedMinSize() - { - m_flags |= wxFIXED_MINSIZE; - - return *this; - } -#endif // wx 2.8.2+ - -#if wxABI_VERSION >= 20808 - // makes the item ignore window's visibility status - wxSizerFlags& ReserveSpaceEvenIfHidden(); -#endif - - // accessors for wxSizer only - int GetProportion() const { return m_proportion; } - int GetFlags() const { return m_flags; } - int GetBorderInPixels() const { return m_borderInPixels; } - -private: - int m_proportion; - int m_flags; - int m_borderInPixels; -}; - - -// ---------------------------------------------------------------------------- -// wxSizerSpacer: used by wxSizerItem to represent a spacer -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSizerSpacer -{ -public: - wxSizerSpacer(const wxSize& size) : m_size(size), m_isShown(true) { } - - void SetSize(const wxSize& size) { m_size = size; } - const wxSize& GetSize() const { return m_size; } - - void Show(bool show) { m_isShown = show; } - bool IsShown() const { return m_isShown; } - -private: - // the size, in pixel - wxSize m_size; - - // is the spacer currently shown? - bool m_isShown; -}; - -// ---------------------------------------------------------------------------- -// wxSizerItem -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSizerItem : public wxObject -{ -public: - // window - wxSizerItem( wxWindow *window, - int proportion, - int flag, - int border, - wxObject* userData ); - - // window with flags - wxSizerItem(wxWindow *window, const wxSizerFlags& flags) - { - Init(flags); - - SetWindow(window); - } - - // subsizer - wxSizerItem( wxSizer *sizer, - int proportion, - int flag, - int border, - wxObject* userData ); - - // sizer with flags - wxSizerItem(wxSizer *sizer, const wxSizerFlags& flags) - { - Init(flags); - - SetSizer(sizer); - } - - // spacer - wxSizerItem( int width, - int height, - int proportion, - int flag, - int border, - wxObject* userData); - - // spacer with flags - wxSizerItem(int width, int height, const wxSizerFlags& flags) - { - Init(flags); - - SetSpacer(width, height); - } - - wxSizerItem(); - virtual ~wxSizerItem(); - - virtual void DeleteWindows(); - - // Enable deleting the SizerItem without destroying the contained sizer. - void DetachSizer() { m_sizer = NULL; } - - virtual wxSize GetSize() const; - virtual wxSize CalcMin(); - virtual void SetDimension( const wxPoint& pos, const wxSize& size ); - - wxSize GetMinSize() const - { return m_minSize; } - wxSize GetMinSizeWithBorder() const; - - void SetMinSize(const wxSize& size) - { - if ( IsWindow() ) - m_window->SetMinSize(size); - m_minSize = size; - } - void SetMinSize( int x, int y ) - { SetMinSize(wxSize(x, y)); } - void SetInitSize( int x, int y ) - { SetMinSize(wxSize(x, y)); } - - // if either of dimensions is zero, ratio is assumed to be 1 - // to avoid "divide by zero" errors - void SetRatio(int width, int height) - { m_ratio = (width && height) ? ((float) width / (float) height) : 1; } - void SetRatio(const wxSize& size) - { SetRatio(size.x, size.y); } - void SetRatio(float ratio) - { m_ratio = ratio; } - float GetRatio() const - { return m_ratio; } - - virtual wxRect GetRect() { return m_rect; } - - bool IsWindow() const { return m_kind == Item_Window; } - bool IsSizer() const { return m_kind == Item_Sizer; } - bool IsSpacer() const { return m_kind == Item_Spacer; } - -#if WXWIN_COMPATIBILITY_2_6 - // Deprecated in 2.6, use {G,S}etProportion instead. - wxDEPRECATED( void SetOption( int option ) ); - wxDEPRECATED( int GetOption() const ); -#endif // WXWIN_COMPATIBILITY_2_6 - - void SetProportion( int proportion ) - { m_proportion = proportion; } - int GetProportion() const - { return m_proportion; } - void SetFlag( int flag ) - { m_flag = flag; } - int GetFlag() const - { return m_flag; } - void SetBorder( int border ) - { m_border = border; } - int GetBorder() const - { return m_border; } - - wxWindow *GetWindow() const - { return m_kind == Item_Window ? m_window : NULL; } - wxSizer *GetSizer() const - { return m_kind == Item_Sizer ? m_sizer : NULL; } - wxSize GetSpacer() const; - - // this function behaves obviously for the windows and spacers but for the - // sizers it returns true if any sizer element is shown and only returns - // false if all of them are hidden - bool IsShown() const; - void Show(bool show); - - void SetUserData(wxObject* userData) - { delete m_userData; m_userData = userData; } - wxObject* GetUserData() const - { return m_userData; } - wxPoint GetPosition() const - { return m_pos; } - - - // these functions do not free old sizer/spacer - void SetWindow(wxWindow *window); - void SetSizer(wxSizer *sizer); - void SetSpacer(const wxSize& size); - void SetSpacer(int width, int height) { SetSpacer(wxSize(width, height)); } - -protected: - // common part of several ctors - void Init() { m_userData = NULL; } - - // common part of ctors taking wxSizerFlags - void Init(const wxSizerFlags& flags); - - - // discriminated union: depending on m_kind one of the fields is valid - enum - { - Item_None, - Item_Window, - Item_Sizer, - Item_Spacer, - Item_Max - } m_kind; - union - { - wxWindow *m_window; - wxSizer *m_sizer; - wxSizerSpacer *m_spacer; - }; - - wxPoint m_pos; - wxSize m_minSize; - int m_proportion; - int m_border; - int m_flag; - - // on screen rectangle of this item (not including borders) - wxRect m_rect; - - // Aspect ratio can always be calculated from m_size, - // but this would cause precision loss when the window - // is shrunk. It is safer to preserve the initial value. - float m_ratio; - - wxObject *m_userData; - -private: - // 2.8-only implementation detail for wxRESERVE_SPACE_EVEN_IF_HIDDEN - bool ShouldAccountFor() const; - - DECLARE_CLASS(wxSizerItem) - DECLARE_NO_COPY_CLASS(wxSizerItem) - - friend class wxBoxSizer; - friend class wxFlexGridSizer; - friend class wxGridBagSizer; -}; - -WX_DECLARE_EXPORTED_LIST( wxSizerItem, wxSizerItemList ); - - -//--------------------------------------------------------------------------- -// wxSizer -//--------------------------------------------------------------------------- - -class WXDLLEXPORT wxSizer: public wxObject, public wxClientDataContainer -{ -public: - wxSizer() { m_containingWindow = NULL; } - virtual ~wxSizer(); - - // methods for adding elements to the sizer: there are Add/Insert/Prepend - // overloads for each of window/sizer/spacer/wxSizerItem - wxSizerItem* Add(wxWindow *window, - int proportion = 0, - int flag = 0, - int border = 0, - wxObject* userData = NULL); - wxSizerItem* Add(wxSizer *sizer, - int proportion = 0, - int flag = 0, - int border = 0, - wxObject* userData = NULL); - wxSizerItem* Add(int width, - int height, - int proportion = 0, - int flag = 0, - int border = 0, - wxObject* userData = NULL); - wxSizerItem* Add( wxWindow *window, const wxSizerFlags& flags); - wxSizerItem* Add( wxSizer *sizer, const wxSizerFlags& flags); - wxSizerItem* Add( wxSizerItem *item); - - wxSizerItem* AddSpacer(int size); - wxSizerItem* AddStretchSpacer(int prop = 1); - - wxSizerItem* Insert(size_t index, - wxWindow *window, - int proportion = 0, - int flag = 0, - int border = 0, - wxObject* userData = NULL); - wxSizerItem* Insert(size_t index, - wxSizer *sizer, - int proportion = 0, - int flag = 0, - int border = 0, - wxObject* userData = NULL); - wxSizerItem* Insert(size_t index, - int width, - int height, - int proportion = 0, - int flag = 0, - int border = 0, - wxObject* userData = NULL); - wxSizerItem* Insert(size_t index, - wxWindow *window, - const wxSizerFlags& flags); - wxSizerItem* Insert(size_t index, - wxSizer *sizer, - const wxSizerFlags& flags); - virtual wxSizerItem* Insert( size_t index, wxSizerItem *item); - - wxSizerItem* InsertSpacer(size_t index, int size); - wxSizerItem* InsertStretchSpacer(size_t index, int prop = 1); - - wxSizerItem* Prepend(wxWindow *window, - int proportion = 0, - int flag = 0, - int border = 0, - wxObject* userData = NULL); - wxSizerItem* Prepend(wxSizer *sizer, - int proportion = 0, - int flag = 0, - int border = 0, - wxObject* userData = NULL); - wxSizerItem* Prepend(int width, - int height, - int proportion = 0, - int flag = 0, - int border = 0, - wxObject* userData = NULL); - wxSizerItem* Prepend(wxWindow *window, const wxSizerFlags& flags); - wxSizerItem* Prepend(wxSizer *sizer, const wxSizerFlags& flags); - wxSizerItem* Prepend(wxSizerItem *item); - - wxSizerItem* PrependSpacer(int size); - wxSizerItem* PrependStretchSpacer(int prop = 1); - - // set (or possibly unset if window is NULL) or get the window this sizer - // is used in - void SetContainingWindow(wxWindow *window); - wxWindow *GetContainingWindow() const { return m_containingWindow; } - -#if WXWIN_COMPATIBILITY_2_6 - // Deprecated in 2.6 since historically it does not delete the window, - // use Detach instead. - wxDEPRECATED( virtual bool Remove( wxWindow *window ) ); -#endif // WXWIN_COMPATIBILITY_2_6 - - virtual bool Remove( wxSizer *sizer ); - virtual bool Remove( int index ); - - virtual bool Detach( wxWindow *window ); - virtual bool Detach( wxSizer *sizer ); - virtual bool Detach( int index ); - - virtual bool Replace( wxWindow *oldwin, wxWindow *newwin, bool recursive = false ); - virtual bool Replace( wxSizer *oldsz, wxSizer *newsz, bool recursive = false ); - virtual bool Replace( size_t index, wxSizerItem *newitem ); - - virtual void Clear( bool delete_windows = false ); - virtual void DeleteWindows(); - - void SetMinSize( int width, int height ) - { DoSetMinSize( width, height ); } - void SetMinSize( const wxSize& size ) - { DoSetMinSize( size.x, size.y ); } - - // Searches recursively - bool SetItemMinSize( wxWindow *window, int width, int height ) - { return DoSetItemMinSize( window, width, height ); } - bool SetItemMinSize( wxWindow *window, const wxSize& size ) - { return DoSetItemMinSize( window, size.x, size.y ); } - - // Searches recursively - bool SetItemMinSize( wxSizer *sizer, int width, int height ) - { return DoSetItemMinSize( sizer, width, height ); } - bool SetItemMinSize( wxSizer *sizer, const wxSize& size ) - { return DoSetItemMinSize( sizer, size.x, size.y ); } - - bool SetItemMinSize( size_t index, int width, int height ) - { return DoSetItemMinSize( index, width, height ); } - bool SetItemMinSize( size_t index, const wxSize& size ) - { return DoSetItemMinSize( index, size.x, size.y ); } - - wxSize GetSize() const - { return m_size; } - wxPoint GetPosition() const - { return m_position; } - - // Calculate the minimal size or return m_minSize if bigger. - wxSize GetMinSize(); - - virtual void RecalcSizes() = 0; - virtual wxSize CalcMin() = 0; - - virtual void Layout(); - -#if wxABI_VERSION >= 20808 - wxSize ComputeFittingClientSize(wxWindow *window); - wxSize ComputeFittingWindowSize(wxWindow *window); -#endif - - wxSize Fit( wxWindow *window ); - void FitInside( wxWindow *window ); - void SetSizeHints( wxWindow *window ); - void SetVirtualSizeHints( wxWindow *window ); - - wxSizerItemList& GetChildren() - { return m_children; } - - void SetDimension( int x, int y, int width, int height ); - - wxSizerItem* GetItem( wxWindow *window, bool recursive = false ); - wxSizerItem* GetItem( wxSizer *sizer, bool recursive = false ); - wxSizerItem* GetItem( size_t index ); - - // Manage whether individual scene items are considered - // in the layout calculations or not. - bool Show( wxWindow *window, bool show = true, bool recursive = false ); - bool Show( wxSizer *sizer, bool show = true, bool recursive = false ); - bool Show( size_t index, bool show = true ); - - bool Hide( wxSizer *sizer, bool recursive = false ) - { return Show( sizer, false, recursive ); } - bool Hide( wxWindow *window, bool recursive = false ) - { return Show( window, false, recursive ); } - bool Hide( size_t index ) - { return Show( index, false ); } - - bool IsShown( wxWindow *window ) const; - bool IsShown( wxSizer *sizer ) const; - bool IsShown( size_t index ) const; - - // Recursively call wxWindow::Show () on all sizer items. - virtual void ShowItems (bool show); - - void Show(bool show) { ShowItems(show); } - -protected: - wxSize m_size; - wxSize m_minSize; - wxPoint m_position; - wxSizerItemList m_children; - - // the window this sizer is used in, can be NULL - wxWindow *m_containingWindow; - - wxSize GetMaxWindowSize( wxWindow *window ) const; - wxSize GetMinWindowSize( wxWindow *window ); - wxSize GetMaxClientSize( wxWindow *window ) const; - wxSize GetMinClientSize( wxWindow *window ); - wxSize VirtualFitSize( wxWindow *window ); - - virtual void DoSetMinSize( int width, int height ); - virtual bool DoSetItemMinSize( wxWindow *window, int width, int height ); - virtual bool DoSetItemMinSize( wxSizer *sizer, int width, int height ); - virtual bool DoSetItemMinSize( size_t index, int width, int height ); - -private: - DECLARE_CLASS(wxSizer) -}; - -//--------------------------------------------------------------------------- -// wxGridSizer -//--------------------------------------------------------------------------- - -class WXDLLEXPORT wxGridSizer: public wxSizer -{ -public: - wxGridSizer( int rows, int cols, int vgap, int hgap ); - wxGridSizer( int cols, int vgap = 0, int hgap = 0 ); - - virtual void RecalcSizes(); - virtual wxSize CalcMin(); - - void SetCols( int cols ) { m_cols = cols; } - void SetRows( int rows ) { m_rows = rows; } - void SetVGap( int gap ) { m_vgap = gap; } - void SetHGap( int gap ) { m_hgap = gap; } - int GetCols() const { return m_cols; } - int GetRows() const { return m_rows; } - int GetVGap() const { return m_vgap; } - int GetHGap() const { return m_hgap; } - -protected: - int m_rows; - int m_cols; - int m_vgap; - int m_hgap; - - // return the number of total items and the number of columns and rows - int CalcRowsCols(int& rows, int& cols) const; - - void SetItemBounds( wxSizerItem *item, int x, int y, int w, int h ); - -private: - DECLARE_CLASS(wxGridSizer) -}; - -//--------------------------------------------------------------------------- -// wxFlexGridSizer -//--------------------------------------------------------------------------- - -// the bevaiour for resizing wxFlexGridSizer cells in the "non-flexible" -// direction -enum wxFlexSizerGrowMode -{ - // don't resize the cells in non-flexible direction at all - wxFLEX_GROWMODE_NONE, - - // uniformly resize only the specified ones (default) - wxFLEX_GROWMODE_SPECIFIED, - - // uniformly resize all cells - wxFLEX_GROWMODE_ALL -}; - -class WXDLLEXPORT wxFlexGridSizer: public wxGridSizer -{ -public: - // ctors/dtor - wxFlexGridSizer( int rows, int cols, int vgap, int hgap ); - wxFlexGridSizer( int cols, int vgap = 0, int hgap = 0 ); - virtual ~wxFlexGridSizer(); - - - // set the rows/columns which will grow (the others will remain of the - // constant initial size) - void AddGrowableRow( size_t idx, int proportion = 0 ); - void RemoveGrowableRow( size_t idx ); - void AddGrowableCol( size_t idx, int proportion = 0 ); - void RemoveGrowableCol( size_t idx ); - - - // the sizer cells may grow in both directions, not grow at all or only - // grow in one direction but not the other - - // the direction may be wxVERTICAL, wxHORIZONTAL or wxBOTH (default) - void SetFlexibleDirection(int direction) { m_flexDirection = direction; } - int GetFlexibleDirection() const { return m_flexDirection; } - - // note that the grow mode only applies to the direction which is not - // flexible - void SetNonFlexibleGrowMode(wxFlexSizerGrowMode mode) { m_growMode = mode; } - wxFlexSizerGrowMode GetNonFlexibleGrowMode() const { return m_growMode; } - - // Read-only access to the row heights and col widths arrays - const wxArrayInt& GetRowHeights() const { return m_rowHeights; } - const wxArrayInt& GetColWidths() const { return m_colWidths; } - - // implementation - virtual void RecalcSizes(); - virtual wxSize CalcMin(); - -protected: - void AdjustForFlexDirection(); - void AdjustForGrowables(const wxSize& sz, const wxSize& minsz, - int nrows, int ncols); - - // the heights/widths of all rows/columns - wxArrayInt m_rowHeights, - m_colWidths; - - // indices of the growable columns and rows - wxArrayInt m_growableRows, - m_growableCols; - - // proportion values of the corresponding growable rows and columns - wxArrayInt m_growableRowsProportions, - m_growableColsProportions; - - // parameters describing whether the growable cells should be resized in - // both directions or only one - int m_flexDirection; - wxFlexSizerGrowMode m_growMode; - - // saves CalcMin result to optimize RecalcSizes - wxSize m_calculatedMinSize; - -private: - DECLARE_CLASS(wxFlexGridSizer) - DECLARE_NO_COPY_CLASS(wxFlexGridSizer) -}; - -//--------------------------------------------------------------------------- -// wxBoxSizer -//--------------------------------------------------------------------------- - -class WXDLLEXPORT wxBoxSizer: public wxSizer -{ -public: - wxBoxSizer( int orient ); - - void RecalcSizes(); - wxSize CalcMin(); - - int GetOrientation() const - { return m_orient; } - - void SetOrientation(int orient) - { m_orient = orient; } - -protected: - int m_orient; - int m_stretchable; - int m_minWidth; - int m_minHeight; - int m_fixedWidth; - int m_fixedHeight; - -private: - DECLARE_CLASS(wxBoxSizer) -}; - -//--------------------------------------------------------------------------- -// wxStaticBoxSizer -//--------------------------------------------------------------------------- - -#if wxUSE_STATBOX - -class WXDLLIMPEXP_FWD_CORE wxStaticBox; - -class WXDLLEXPORT wxStaticBoxSizer: public wxBoxSizer -{ -public: - wxStaticBoxSizer(wxStaticBox *box, int orient); - wxStaticBoxSizer(int orient, wxWindow *win, const wxString& label = wxEmptyString); - virtual ~wxStaticBoxSizer(); - - void RecalcSizes(); - wxSize CalcMin(); - - wxStaticBox *GetStaticBox() const - { return m_staticBox; } - - // override to hide/show the static box as well - virtual void ShowItems (bool show); - - virtual bool Detach( wxWindow *window ); - virtual bool Detach( wxSizer *sizer ) { return wxBoxSizer::Detach(sizer); } - virtual bool Detach( int index ) { return wxBoxSizer::Detach(index); } - -protected: - wxStaticBox *m_staticBox; - -private: - DECLARE_CLASS(wxStaticBoxSizer) - DECLARE_NO_COPY_CLASS(wxStaticBoxSizer) -}; - -#endif // wxUSE_STATBOX - -#if wxUSE_BUTTON - -class WXDLLEXPORT wxStdDialogButtonSizer: public wxBoxSizer -{ -public: - // Constructor just creates a new wxBoxSizer, not much else. - // Box sizer orientation is automatically determined here: - // vertical for PDAs, horizontal for everything else? - wxStdDialogButtonSizer(); - - // Checks button ID against system IDs and sets one of the pointers below - // to this button. Does not do any sizer-related things here. - void AddButton(wxButton *button); - - // Use these if no standard ID can/should be used - void SetAffirmativeButton( wxButton *button ); - void SetNegativeButton( wxButton *button ); - void SetCancelButton( wxButton *button ); - - // All platform-specific code here, checks which buttons exist and add - // them to the sizer accordingly. - // Note - one potential hack on Mac we could use here, - // if m_buttonAffirmative is wxID_SAVE then ensure wxID_SAVE - // is set to _("Save") and m_buttonNegative is set to _("Don't Save") - // I wouldn't add any other hacks like that into here, - // but this one I can see being useful. - void Realize(); - - wxButton *GetAffirmativeButton() const { return m_buttonAffirmative; } - wxButton *GetApplyButton() const { return m_buttonApply; } - wxButton *GetNegativeButton() const { return m_buttonNegative; } - wxButton *GetCancelButton() const { return m_buttonCancel; } - wxButton *GetHelpButton() const { return m_buttonHelp; } - -protected: - wxButton *m_buttonAffirmative; // wxID_OK, wxID_YES, wxID_SAVE go here - wxButton *m_buttonApply; - wxButton *m_buttonNegative; // wxID_NO - wxButton *m_buttonCancel; - wxButton *m_buttonHelp; - -private: - DECLARE_CLASS(wxStdDialogButtonSizer) - DECLARE_NO_COPY_CLASS(wxStdDialogButtonSizer) -}; - -#endif // wxUSE_BUTTON - -#if WXWIN_COMPATIBILITY_2_4 -// NB: wxBookCtrlSizer and wxNotebookSizer are deprecated, they -// don't do anything. wxBookCtrlBase::DoGetBestSize does the job now. - -// ---------------------------------------------------------------------------- -// wxBookCtrlSizer -// ---------------------------------------------------------------------------- - -#if wxUSE_BOOKCTRL - -// this sizer works with wxNotebook/wxListbook/... and sizes the control to -// fit its pages -class WXDLLIMPEXP_FWD_CORE wxBookCtrlBase; - -class WXDLLEXPORT wxBookCtrlSizer : public wxSizer -{ -public: -#if WXWIN_COMPATIBILITY_2_6 - wxDEPRECATED( wxBookCtrlSizer(wxBookCtrlBase *bookctrl) ); -#endif // WXWIN_COMPATIBILITY_2_6 - - wxBookCtrlBase *GetControl() const { return m_bookctrl; } - - virtual void RecalcSizes(); - virtual wxSize CalcMin(); - -protected: - // this protected ctor lets us mark the real one above as deprecated - // and still have warning-free build of the library itself: - wxBookCtrlSizer() {} - - wxBookCtrlBase *m_bookctrl; - -private: - DECLARE_CLASS(wxBookCtrlSizer) - DECLARE_NO_COPY_CLASS(wxBookCtrlSizer) -}; - - -#if wxUSE_NOTEBOOK - -// before wxBookCtrlBase we only had wxNotebookSizer, keep it for backwards -// compatibility -class WXDLLIMPEXP_FWD_CORE wxNotebook; - -class WXDLLEXPORT wxNotebookSizer : public wxBookCtrlSizer -{ -public: -#if WXWIN_COMPATIBILITY_2_6 - wxDEPRECATED( wxNotebookSizer(wxNotebook *nb) ); -#endif // WXWIN_COMPATIBILITY_2_6 - - wxNotebook *GetNotebook() const { return (wxNotebook *)m_bookctrl; } - -private: - DECLARE_CLASS(wxNotebookSizer) - DECLARE_NO_COPY_CLASS(wxNotebookSizer) -}; - -#endif // wxUSE_NOTEBOOK - -#endif // wxUSE_BOOKCTRL - -#endif // WXWIN_COMPATIBILITY_2_4 - -// ---------------------------------------------------------------------------- -// inline functions implementation -// ---------------------------------------------------------------------------- - -inline wxSizerItem* -wxSizer::Add( wxSizerItem *item ) -{ - return Insert( m_children.GetCount(), item ); -} - -inline wxSizerItem* -wxSizer::Add( wxWindow *window, int proportion, int flag, int border, wxObject* userData ) -{ - return Add( new wxSizerItem( window, proportion, flag, border, userData ) ); -} - -inline wxSizerItem* -wxSizer::Add( wxSizer *sizer, int proportion, int flag, int border, wxObject* userData ) -{ - return Add( new wxSizerItem( sizer, proportion, flag, border, userData ) ); -} - -inline wxSizerItem* -wxSizer::Add( int width, int height, int proportion, int flag, int border, wxObject* userData ) -{ - return Add( new wxSizerItem( width, height, proportion, flag, border, userData ) ); -} - -inline wxSizerItem* -wxSizer::Add( wxWindow *window, const wxSizerFlags& flags ) -{ - return Add( new wxSizerItem(window, flags) ); -} - -inline wxSizerItem* -wxSizer::Add( wxSizer *sizer, const wxSizerFlags& flags ) -{ - return Add( new wxSizerItem(sizer, flags) ); -} - -inline wxSizerItem* -wxSizer::AddSpacer(int size) -{ - return Add(size, size); -} - -inline wxSizerItem* -wxSizer::AddStretchSpacer(int prop) -{ - return Add(0, 0, prop); -} - -inline wxSizerItem* -wxSizer::Prepend( wxSizerItem *item ) -{ - return Insert( 0, item ); -} - -inline wxSizerItem* -wxSizer::Prepend( wxWindow *window, int proportion, int flag, int border, wxObject* userData ) -{ - return Prepend( new wxSizerItem( window, proportion, flag, border, userData ) ); -} - -inline wxSizerItem* -wxSizer::Prepend( wxSizer *sizer, int proportion, int flag, int border, wxObject* userData ) -{ - return Prepend( new wxSizerItem( sizer, proportion, flag, border, userData ) ); -} - -inline wxSizerItem* -wxSizer::Prepend( int width, int height, int proportion, int flag, int border, wxObject* userData ) -{ - return Prepend( new wxSizerItem( width, height, proportion, flag, border, userData ) ); -} - -inline wxSizerItem* -wxSizer::PrependSpacer(int size) -{ - return Prepend(size, size); -} - -inline wxSizerItem* -wxSizer::PrependStretchSpacer(int prop) -{ - return Prepend(0, 0, prop); -} - -inline wxSizerItem* -wxSizer::Prepend( wxWindow *window, const wxSizerFlags& flags ) -{ - return Prepend( new wxSizerItem(window, flags) ); -} - -inline wxSizerItem* -wxSizer::Prepend( wxSizer *sizer, const wxSizerFlags& flags ) -{ - return Prepend( new wxSizerItem(sizer, flags) ); -} - -inline wxSizerItem* -wxSizer::Insert( size_t index, - wxWindow *window, - int proportion, - int flag, - int border, - wxObject* userData ) -{ - return Insert( index, new wxSizerItem( window, proportion, flag, border, userData ) ); -} - -inline wxSizerItem* -wxSizer::Insert( size_t index, - wxSizer *sizer, - int proportion, - int flag, - int border, - wxObject* userData ) -{ - return Insert( index, new wxSizerItem( sizer, proportion, flag, border, userData ) ); -} - -inline wxSizerItem* -wxSizer::Insert( size_t index, - int width, - int height, - int proportion, - int flag, - int border, - wxObject* userData ) -{ - return Insert( index, new wxSizerItem( width, height, proportion, flag, border, userData ) ); -} - -inline wxSizerItem* -wxSizer::Insert( size_t index, wxWindow *window, const wxSizerFlags& flags ) -{ - return Insert( index, new wxSizerItem(window, flags) ); -} - -inline wxSizerItem* -wxSizer::Insert( size_t index, wxSizer *sizer, const wxSizerFlags& flags ) -{ - return Insert( index, new wxSizerItem(sizer, flags) ); -} - -inline wxSizerItem* -wxSizer::InsertSpacer(size_t index, int size) -{ - return Insert(index, size, size); -} - -inline wxSizerItem* -wxSizer::InsertStretchSpacer(size_t index, int prop) -{ - return Insert(index, 0, 0, prop); -} - - -#endif // __WXSIZER_H__ diff --git a/desmume/src/windows/wx/include/wx/slider.h b/desmume/src/windows/wx/include/wx/slider.h deleted file mode 100644 index 195b9f8a3..000000000 --- a/desmume/src/windows/wx/include/wx/slider.h +++ /dev/null @@ -1,151 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/slider.h -// Purpose: wxSlider interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 09.02.01 -// RCS-ID: $Id: slider.h 38717 2006-04-14 17:01:16Z ABX $ -// Copyright: (c) 1996-2001 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SLIDER_H_BASE_ -#define _WX_SLIDER_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_SLIDER - -#include "wx/control.h" - -// ---------------------------------------------------------------------------- -// wxSlider flags -// ---------------------------------------------------------------------------- - -#define wxSL_HORIZONTAL wxHORIZONTAL /* 0x0004 */ -#define wxSL_VERTICAL wxVERTICAL /* 0x0008 */ - -#define wxSL_TICKS 0x0010 -#define wxSL_AUTOTICKS wxSL_TICKS // we don't support manual ticks -#define wxSL_LABELS 0x0020 -#define wxSL_LEFT 0x0040 -#define wxSL_TOP 0x0080 -#define wxSL_RIGHT 0x0100 -#define wxSL_BOTTOM 0x0200 -#define wxSL_BOTH 0x0400 -#define wxSL_SELRANGE 0x0800 -#define wxSL_INVERSE 0x1000 - -#if WXWIN_COMPATIBILITY_2_6 - // obsolete - #define wxSL_NOTIFY_DRAG 0x0000 -#endif // WXWIN_COMPATIBILITY_2_6 - -extern WXDLLEXPORT_DATA(const wxChar) wxSliderNameStr[]; - -// ---------------------------------------------------------------------------- -// wxSliderBase: define wxSlider interface -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSliderBase : public wxControl -{ -public: - /* the ctor of the derived class should have the following form: - - wxSlider(wxWindow *parent, - wxWindowID id, - int value, int minValue, int maxValue, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSL_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSliderNameStr); - */ - wxSliderBase() { } - - // get/set the current slider value (should be in range) - virtual int GetValue() const = 0; - virtual void SetValue(int value) = 0; - - // retrieve/change the range - virtual void SetRange(int minValue, int maxValue) = 0; - virtual int GetMin() const = 0; - virtual int GetMax() const = 0; - void SetMin( int minValue ) { SetRange( minValue , GetMax() ) ; } - void SetMax( int maxValue ) { SetRange( GetMin() , maxValue ) ; } - - // the line/page size is the increment by which the slider moves when - // cursor arrow key/page up or down are pressed (clicking the mouse is like - // pressing PageUp/Down) and are by default set to 1 and 1/10 of the range - virtual void SetLineSize(int lineSize) = 0; - virtual void SetPageSize(int pageSize) = 0; - virtual int GetLineSize() const = 0; - virtual int GetPageSize() const = 0; - - // these methods get/set the length of the slider pointer in pixels - virtual void SetThumbLength(int lenPixels) = 0; - virtual int GetThumbLength() const = 0; - - // warning: most of subsequent methods are currently only implemented in - // wxMSW under Win95 and are silently ignored on other platforms - - virtual void SetTickFreq(int WXUNUSED(n), int WXUNUSED(pos)) { } - virtual int GetTickFreq() const { return 0; } - virtual void ClearTicks() { } - virtual void SetTick(int WXUNUSED(tickPos)) { } - - virtual void ClearSel() { } - virtual int GetSelEnd() const { return GetMin(); } - virtual int GetSelStart() const { return GetMax(); } - virtual void SetSelection(int WXUNUSED(min), int WXUNUSED(max)) { } - -protected: - - // adjust value according to wxSL_INVERSE style - virtual int ValueInvertOrNot(int value) const - { - if (HasFlag(wxSL_INVERSE)) - return (GetMax() + GetMin()) - value; - else - return value; - } - -private: - DECLARE_NO_COPY_CLASS(wxSliderBase) -}; - -// ---------------------------------------------------------------------------- -// include the real class declaration -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/slider.h" -#elif defined(__WXMSW__) - #include "wx/msw/slider95.h" - #if WXWIN_COMPATIBILITY_2_4 - #define wxSlider95 wxSlider - #endif -#elif defined(__WXMOTIF__) - #include "wx/motif/slider.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/slider.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/slider.h" -#elif defined(__WXMAC__) - #include "wx/mac/slider.h" -#elif defined(__WXCOCOA__) - #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 - -#endif - // _WX_SLIDER_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/snglinst.h b/desmume/src/windows/wx/include/wx/snglinst.h deleted file mode 100644 index 1755f8969..000000000 --- a/desmume/src/windows/wx/include/wx/snglinst.h +++ /dev/null @@ -1,65 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/snglinst.h -// Purpose: wxSingleInstanceChecker can be used to restrict the number of -// simultaneously running copies of a program to one -// Author: Vadim Zeitlin -// Modified by: -// Created: 08.06.01 -// RCS-ID: $Id: snglinst.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SNGLINST_H_ -#define _WX_SNGLINST_H_ - -#if wxUSE_SNGLINST_CHECKER - -// ---------------------------------------------------------------------------- -// wxSingleInstanceChecker -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxSingleInstanceChecker -{ -public: - // default ctor, use Create() after it - wxSingleInstanceChecker() { Init(); } - - // like Create() but no error checking (dangerous!) - wxSingleInstanceChecker(const wxString& name, - const wxString& path = wxEmptyString) - { - Init(); - Create(name, path); - } - - // name must be given and be as unique as possible, it is used as the mutex - // name under Win32 and the lock file name under Unix - - // wxTheApp->GetAppName() may be a good value for this parameter - // - // path is optional and is ignored under Win32 and used as the directory to - // create the lock file in under Unix (default is wxGetHomeDir()) - // - // returns false if initialization failed, it doesn't mean that another - // instance is running - use IsAnotherRunning() to check it - bool Create(const wxString& name, const wxString& path = wxEmptyString); - - // is another copy of this program already running? - bool IsAnotherRunning() const; - - // dtor is not virtual, this class is not meant to be used polymorphically - ~wxSingleInstanceChecker(); - -private: - // common part of all ctors - void Init() { m_impl = NULL; } - - // the implementation details (platform specific) - class WXDLLIMPEXP_FWD_BASE wxSingleInstanceCheckerImpl *m_impl; - - DECLARE_NO_COPY_CLASS(wxSingleInstanceChecker) -}; - -#endif // wxUSE_SNGLINST_CHECKER - -#endif // _WX_SNGLINST_H_ diff --git a/desmume/src/windows/wx/include/wx/socket.h b/desmume/src/windows/wx/include/wx/socket.h deleted file mode 100644 index 07cd4cbaf..000000000 --- a/desmume/src/windows/wx/include/wx/socket.h +++ /dev/null @@ -1,335 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: socket.h -// Purpose: Socket handling classes -// Authors: Guilhem Lavaux, Guillermo Rodriguez Garcia -// Modified by: -// Created: April 1997 -// RCS-ID: $Id: socket.h 45498 2007-04-16 13:03:05Z VZ $ -// Copyright: (c) Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SOCKET_H_ -#define _WX_SOCKET_H_ - -#include "wx/defs.h" - -#if wxUSE_SOCKETS - -// --------------------------------------------------------------------------- -// wxSocket headers -// --------------------------------------------------------------------------- - -#include "wx/event.h" -#include "wx/sckaddr.h" -#include "wx/gsocket.h" -#include "wx/list.h" - -// ------------------------------------------------------------------------ -// Types and constants -// ------------------------------------------------------------------------ - -enum wxSocketNotify -{ - wxSOCKET_INPUT = GSOCK_INPUT, - wxSOCKET_OUTPUT = GSOCK_OUTPUT, - wxSOCKET_CONNECTION = GSOCK_CONNECTION, - wxSOCKET_LOST = GSOCK_LOST -}; - -enum -{ - wxSOCKET_INPUT_FLAG = GSOCK_INPUT_FLAG, - wxSOCKET_OUTPUT_FLAG = GSOCK_OUTPUT_FLAG, - wxSOCKET_CONNECTION_FLAG = GSOCK_CONNECTION_FLAG, - wxSOCKET_LOST_FLAG = GSOCK_LOST_FLAG -}; - -typedef GSocketEventFlags wxSocketEventFlags; - -enum wxSocketError -{ - // from GSocket - wxSOCKET_NOERROR = GSOCK_NOERROR, - wxSOCKET_INVOP = GSOCK_INVOP, - wxSOCKET_IOERR = GSOCK_IOERR, - wxSOCKET_INVADDR = GSOCK_INVADDR, - wxSOCKET_INVSOCK = GSOCK_INVSOCK, - wxSOCKET_NOHOST = GSOCK_NOHOST, - wxSOCKET_INVPORT = GSOCK_INVPORT, - wxSOCKET_WOULDBLOCK = GSOCK_WOULDBLOCK, - wxSOCKET_TIMEDOUT = GSOCK_TIMEDOUT, - wxSOCKET_MEMERR = GSOCK_MEMERR, - - // wxSocket-specific (not yet implemented) - wxSOCKET_DUMMY -}; - -enum -{ - wxSOCKET_NONE = 0, - wxSOCKET_NOWAIT = 1, - wxSOCKET_WAITALL = 2, - wxSOCKET_BLOCK = 4, - wxSOCKET_REUSEADDR = 8 -}; - -enum wxSocketType -{ - wxSOCKET_UNINIT, - wxSOCKET_CLIENT, - wxSOCKET_SERVER, - wxSOCKET_BASE, - wxSOCKET_DATAGRAM -}; - -typedef int wxSocketFlags; - - - -// -------------------------------------------------------------------------- -// wxSocketBase -// -------------------------------------------------------------------------- - -class WXDLLIMPEXP_NET wxSocketBase : public wxObject -{ - DECLARE_CLASS(wxSocketBase) - -public: - - // Public interface - // ---------------- - - // ctors and dtors - wxSocketBase(); - wxSocketBase(wxSocketFlags flags, wxSocketType type); - virtual ~wxSocketBase(); - void Init(); - bool Destroy(); - - // state - inline bool Ok() const { return IsOk(); } - inline bool IsOk() const { return (m_socket != NULL); } - inline bool Error() const { return m_error; } - inline bool IsConnected() const { return m_connected; } - inline bool IsData() { return WaitForRead(0, 0); } - inline bool IsDisconnected() const { return !IsConnected(); } - inline wxUint32 LastCount() const { return m_lcount; } - inline wxSocketError LastError() const { return (wxSocketError)m_socket->GetError(); } - void SaveState(); - void RestoreState(); - - // addresses - virtual bool GetLocal(wxSockAddress& addr_man) const; - virtual bool GetPeer(wxSockAddress& addr_man) const; - virtual bool SetLocal(wxIPV4address& local); - - // base IO - virtual bool Close(); - wxSocketBase& Discard(); - wxSocketBase& Peek(void* buffer, wxUint32 nbytes); - wxSocketBase& Read(void* buffer, wxUint32 nbytes); - wxSocketBase& ReadMsg(void *buffer, wxUint32 nbytes); - wxSocketBase& Unread(const void *buffer, wxUint32 nbytes); - wxSocketBase& Write(const void *buffer, wxUint32 nbytes); - wxSocketBase& WriteMsg(const void *buffer, wxUint32 nbytes); - - void InterruptWait() { m_interrupt = true; } - bool Wait(long seconds = -1, long milliseconds = 0); - bool WaitForRead(long seconds = -1, long milliseconds = 0); - bool WaitForWrite(long seconds = -1, long milliseconds = 0); - bool WaitForLost(long seconds = -1, long milliseconds = 0); - - inline wxSocketFlags GetFlags() const { return m_flags; } - void SetFlags(wxSocketFlags flags); - void SetTimeout(long seconds); - - bool GetOption(int level, int optname, void *optval, int *optlen); - bool SetOption(int level, int optname, const void *optval, int optlen); - inline wxUint32 GetLastIOSize() const { return m_lcount; } - - // event handling - void *GetClientData() const { return m_clientData; } - void SetClientData(void *data) { m_clientData = data; } - void SetEventHandler(wxEvtHandler& handler, int id = wxID_ANY); - void SetNotify(wxSocketEventFlags flags); - void Notify(bool notify); - - // initialize/shutdown the sockets (usually called automatically) - static bool IsInitialized(); - static bool Initialize(); - static void Shutdown(); - - - // Implementation from now on - // -------------------------- - - // do not use, should be private (called from GSocket) - void OnRequest(wxSocketNotify notify); - - // do not use, not documented nor supported - inline bool IsNoWait() const { return ((m_flags & wxSOCKET_NOWAIT) != 0); } - inline wxSocketType GetType() const { return m_type; } - -private: - friend class wxSocketClient; - friend class wxSocketServer; - friend class wxDatagramSocket; - - // low level IO - wxUint32 _Read(void* buffer, wxUint32 nbytes); - wxUint32 _Write(const void *buffer, wxUint32 nbytes); - bool _Wait(long seconds, long milliseconds, wxSocketEventFlags flags); - - // pushback buffer - void Pushback(const void *buffer, wxUint32 size); - wxUint32 GetPushback(void *buffer, wxUint32 size, bool peek); - -private: - // socket - GSocket *m_socket; // GSocket - wxSocketType m_type; // wxSocket type - - // state - wxSocketFlags m_flags; // wxSocket flags - bool m_connected; // connected? - bool m_establishing; // establishing connection? - bool m_reading; // busy reading? - bool m_writing; // busy writing? - bool m_error; // did last IO call fail? - wxSocketError m_lasterror; // last error (not cleared on success) - wxUint32 m_lcount; // last IO transaction size - unsigned long m_timeout; // IO timeout value - wxList m_states; // stack of states - bool m_interrupt; // interrupt ongoing wait operations? - bool m_beingDeleted; // marked for delayed deletion? - wxIPV4address m_localAddress; // bind to local address? - - // pushback buffer - void *m_unread; // pushback buffer - wxUint32 m_unrd_size; // pushback buffer size - wxUint32 m_unrd_cur; // pushback pointer (index into buffer) - - // events - int m_id; // socket id - wxEvtHandler *m_handler; // event handler - void *m_clientData; // client data for events - bool m_notify; // notify events to users? - wxSocketEventFlags m_eventmask; // which events to notify? - - // the initialization count, GSocket is initialized if > 0 - static size_t m_countInit; - - DECLARE_NO_COPY_CLASS(wxSocketBase) -}; - - -// -------------------------------------------------------------------------- -// wxSocketServer -// -------------------------------------------------------------------------- - -class WXDLLIMPEXP_NET wxSocketServer : public wxSocketBase -{ - DECLARE_CLASS(wxSocketServer) - -public: - wxSocketServer(const wxSockAddress& addr, wxSocketFlags flags = wxSOCKET_NONE); - - wxSocketBase* Accept(bool wait = true); - bool AcceptWith(wxSocketBase& socket, bool wait = true); - - bool WaitForAccept(long seconds = -1, long milliseconds = 0); - - DECLARE_NO_COPY_CLASS(wxSocketServer) -}; - - -// -------------------------------------------------------------------------- -// wxSocketClient -// -------------------------------------------------------------------------- - -class WXDLLIMPEXP_NET wxSocketClient : public wxSocketBase -{ - DECLARE_CLASS(wxSocketClient) - -public: - wxSocketClient(wxSocketFlags flags = wxSOCKET_NONE); - virtual ~wxSocketClient(); - - virtual bool Connect(wxSockAddress& addr, bool wait = true); - bool Connect(wxSockAddress& addr, wxSockAddress& local, bool wait = true); - - bool WaitOnConnect(long seconds = -1, long milliseconds = 0); - -private: - virtual bool DoConnect(wxSockAddress& addr, wxSockAddress* local, bool wait = true); - - DECLARE_NO_COPY_CLASS(wxSocketClient) -}; - - -// -------------------------------------------------------------------------- -// wxDatagramSocket -// -------------------------------------------------------------------------- - -// WARNING: still in alpha stage - -class WXDLLIMPEXP_NET wxDatagramSocket : public wxSocketBase -{ - DECLARE_CLASS(wxDatagramSocket) - -public: - wxDatagramSocket(const wxSockAddress& addr, wxSocketFlags flags = wxSOCKET_NONE); - - wxDatagramSocket& RecvFrom( wxSockAddress& addr, - void* buf, - wxUint32 nBytes ); - wxDatagramSocket& SendTo( const wxSockAddress& addr, - const void* buf, - wxUint32 nBytes ); - -/* TODO: - bool Connect(wxSockAddress& addr); -*/ - DECLARE_NO_COPY_CLASS(wxDatagramSocket) -}; - - -// -------------------------------------------------------------------------- -// wxSocketEvent -// -------------------------------------------------------------------------- - -class WXDLLIMPEXP_NET wxSocketEvent : public wxEvent -{ -public: - wxSocketEvent(int id = 0) - : wxEvent(id, wxEVT_SOCKET) - { - } - - wxSocketNotify GetSocketEvent() const { return m_event; } - wxSocketBase *GetSocket() const { return (wxSocketBase *) GetEventObject(); } - void *GetClientData() const { return m_clientData; } - - virtual wxEvent *Clone() const { return new wxSocketEvent(*this); } - -public: - wxSocketNotify m_event; - void *m_clientData; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxSocketEvent) -}; - - -typedef void (wxEvtHandler::*wxSocketEventFunction)(wxSocketEvent&); - -#define wxSocketEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSocketEventFunction, &func) - -#define EVT_SOCKET(id, func) \ - wx__DECLARE_EVT1(wxEVT_SOCKET, id, wxSocketEventHandler(func)) - -#endif // wxUSE_SOCKETS - -#endif // _WX_SOCKET_H_ - diff --git a/desmume/src/windows/wx/include/wx/sound.h b/desmume/src/windows/wx/include/wx/sound.h deleted file mode 100644 index 765f818a7..000000000 --- a/desmume/src/windows/wx/include/wx/sound.h +++ /dev/null @@ -1,98 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/sound.h -// Purpose: wxSoundBase class -// Author: Vaclav Slavik -// Modified by: -// Created: 2004/02/01 -// RCS-ID: $Id: sound.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 2004, Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SOUND_H_BASE_ -#define _WX_SOUND_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_SOUND - -#include "wx/object.h" - -// ---------------------------------------------------------------------------- -// wxSoundBase: common wxSound code and interface -// ---------------------------------------------------------------------------- - -// Flags for wxSound::Play - -// NB: We can't use enum because there would be ambiguity between the -// two Play() prototypes when called without explicit parameters -// if WXWIN_COMPATIBILITY_2_4. -// We can't use enum with some compilers either, because they -// keep reporting nonexistent ambiguities between -// Play(unsigned) and static Play(const wxString&, unsigned). -#define wxSOUND_SYNC ((unsigned)0) -#define wxSOUND_ASYNC ((unsigned)1) -#define wxSOUND_LOOP ((unsigned)2) - -// Base class for wxSound implementations -class WXDLLIMPEXP_ADV wxSoundBase : public wxObject -{ -public: - // Play the sound: - bool Play(unsigned flags = wxSOUND_ASYNC) const - { - wxASSERT_MSG( (flags & wxSOUND_LOOP) == 0 || - (flags & wxSOUND_ASYNC) != 0, - _T("sound can only be looped asynchronously") ); - return DoPlay(flags); - } -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( bool Play(bool async, bool looped = false) const ); -#endif - - // Plays sound from filename: - static bool Play(const wxString& filename, unsigned flags = wxSOUND_ASYNC); - -protected: - virtual bool DoPlay(unsigned flags) const = 0; -}; - -// ---------------------------------------------------------------------------- -// wxSound class implementation -// ---------------------------------------------------------------------------- - -#if defined(__WXMSW__) - #include "wx/msw/sound.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/sound.h" -#elif defined(__WXMAC__) - #include "wx/mac/sound.h" -#elif defined(__WXPM__) - #include "wx/os2/sound.h" -#elif defined(__UNIX__) - #include "wx/unix/sound.h" -#endif - -// ---------------------------------------------------------------------------- -// wxSoundBase methods -// ---------------------------------------------------------------------------- - -inline bool wxSoundBase::Play(const wxString& filename, unsigned flags) -{ - wxSound snd(filename); - return snd.IsOk() ? snd.Play(flags) : false; -} - -#if WXWIN_COMPATIBILITY_2_4 -inline bool wxSoundBase::Play(bool async, bool looped) const -{ - unsigned flags = 0; - if (async) flags |= wxSOUND_ASYNC; - if (looped) flags |= wxSOUND_LOOP | wxSOUND_ASYNC; - return DoPlay(flags); -} -#endif - -#endif // wxUSE_SOUND - -#endif // _WX_SOUND_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/spinbutt.h b/desmume/src/windows/wx/include/wx/spinbutt.h deleted file mode 100644 index 72e250bbf..000000000 --- a/desmume/src/windows/wx/include/wx/spinbutt.h +++ /dev/null @@ -1,129 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/spinbutt.h -// Purpose: wxSpinButtonBase class -// Author: Julian Smart, Vadim Zeitlin -// Modified by: -// Created: 23.07.99 -// RCS-ID: $Id: spinbutt.h 37066 2006-01-23 03:27:34Z MR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SPINBUTT_H_BASE_ -#define _WX_SPINBUTT_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_SPINBTN - -#include "wx/control.h" -#include "wx/event.h" - -#define wxSPIN_BUTTON_NAME _T("wxSpinButton") - -// ---------------------------------------------------------------------------- -// The wxSpinButton is like a small scrollbar than is often placed next -// to a text control. -// -// Styles: -// wxSP_HORIZONTAL: horizontal spin button -// wxSP_VERTICAL: vertical spin button (the default) -// wxSP_ARROW_KEYS: arrow keys increment/decrement value -// wxSP_WRAP: value wraps at either end -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSpinButtonBase : public wxControl -{ -public: - // ctor initializes the range with the default (0..100) values - wxSpinButtonBase() { m_min = 0; m_max = 100; } - - // accessors - virtual int GetValue() const = 0; - virtual int GetMin() const { return m_min; } - virtual int GetMax() const { return m_max; } - - // operations - virtual void SetValue(int val) = 0; - virtual void SetMin(int minVal) { SetRange ( minVal , m_max ) ; } - virtual void SetMax(int maxVal) { SetRange ( m_min , maxVal ) ; } - virtual void SetRange(int minVal, int maxVal) - { - m_min = minVal; - m_max = maxVal; - } - - // is this spin button vertically oriented? - bool IsVertical() const { return (m_windowStyle & wxSP_VERTICAL) != 0; } - -protected: - // the range value - int m_min; - int m_max; - - DECLARE_NO_COPY_CLASS(wxSpinButtonBase) -}; - -// ---------------------------------------------------------------------------- -// include the declaration of the real class -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/spinbutt.h" -#elif defined(__WXMSW__) - #include "wx/msw/spinbutt.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/spinbutt.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/spinbutt.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/spinbutt.h" -#elif defined(__WXMAC__) - #include "wx/mac/spinbutt.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/spinbutt.h" -#elif defined(__WXPM__) - #include "wx/os2/spinbutt.h" -#endif - -// ---------------------------------------------------------------------------- -// the wxSpinButton event -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSpinEvent : public wxNotifyEvent -{ -public: - wxSpinEvent(wxEventType commandType = wxEVT_NULL, int winid = 0) - : wxNotifyEvent(commandType, winid) - { - } - - // get the current value of the control - int GetPosition() const { return m_commandInt; } - void SetPosition(int pos) { m_commandInt = pos; } - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxSpinEvent) -}; - -typedef void (wxEvtHandler::*wxSpinEventFunction)(wxSpinEvent&); - -#define wxSpinEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxSpinEventFunction, &func) - -// macros for handling spin events -#define EVT_SPIN_UP(winid, func) \ - wx__DECLARE_EVT1(wxEVT_SCROLL_LINEUP, winid, wxSpinEventHandler(func)) -#define EVT_SPIN_DOWN(winid, func) \ - wx__DECLARE_EVT1(wxEVT_SCROLL_LINEDOWN, winid, wxSpinEventHandler(func)) -#define EVT_SPIN(winid, func) \ - wx__DECLARE_EVT1(wxEVT_SCROLL_THUMBTRACK, winid, wxSpinEventHandler(func)) - -#endif // wxUSE_SPINBTN - -#endif - // _WX_SPINBUTT_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/spinctrl.h b/desmume/src/windows/wx/include/wx/spinctrl.h deleted file mode 100644 index 24e302aa7..000000000 --- a/desmume/src/windows/wx/include/wx/spinctrl.h +++ /dev/null @@ -1,83 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: spinctrl.h -// Purpose: wxSpinCtrlBase class -// Author: Vadim Zeitlin -// Modified by: -// Created: 22.07.99 -// RCS-ID: $Id: spinctrl.h 37066 2006-01-23 03:27:34Z MR $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SPINCTRL_H_ -#define _WX_SPINCTRL_H_ - -#include "wx/defs.h" - -#if wxUSE_SPINCTRL - -#include "wx/spinbutt.h" // should make wxSpinEvent visible to the app - -// ---------------------------------------------------------------------------- -// a spin ctrl is a text control with a spin button which is usually used to -// prompt the user for a numeric input -// ---------------------------------------------------------------------------- - -/* there is no generic base class for this control because it's imlpemented - very differently under MSW and other platforms - -class WXDLLEXPORT wxSpinCtrlBase : public wxControl -{ -public: - wxSpinCtrlBase() { Init(); } - - // accessors - virtual int GetValue() const = 0; - virtual int GetMin() const { return m_min; } - virtual int GetMax() const { return m_max; } - - // operations - virtual void SetValue(const wxString& value) = 0; - virtual void SetValue(int val) = 0; - virtual void SetRange(int minVal, int maxVal) = 0; - - // as the wxTextCtrl method - virtual void SetSelection(long from, long to) = 0; - -protected: - // initialize m_min/max with the default values - void Init() { m_min = 0; m_max = 100; } - - int m_min; - int m_max; -}; -*/ - -// ---------------------------------------------------------------------------- -// include the platform-dependent class implementation -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - #include "wx/generic/spinctlg.h" -#elif defined(__WXMSW__) - #include "wx/msw/spinctrl.h" -#elif defined(__WXPM__) - #include "wx/os2/spinctrl.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/spinctrl.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/spinctrl.h" -#elif defined(__WXMOTIF__) - #include "wx/generic/spinctlg.h" -#elif defined(__WXMAC__) - #include "wx/mac/spinctrl.h" -#elif defined(__WXCOCOA__) - #include "wx/generic/spinctlg.h" -#endif // platform - -#define EVT_SPINCTRL(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_SPINCTRL_UPDATED, id, wxSpinEventHandler(fn)) - -#endif // wxUSE_SPINCTRL - -#endif // _WX_SPINCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/splash.h b/desmume/src/windows/wx/include/wx/splash.h deleted file mode 100644 index acd87fc13..000000000 --- a/desmume/src/windows/wx/include/wx/splash.h +++ /dev/null @@ -1,18 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/splash.h -// Purpose: Base header for wxSplashScreen -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: splash.h 33948 2005-05-04 18:57:50Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SPLASH_H_BASE_ -#define _WX_SPLASH_H_BASE_ - -#include "wx/generic/splash.h" - -#endif - // _WX_SPLASH_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/splitter.h b/desmume/src/windows/wx/include/wx/splitter.h deleted file mode 100644 index 04405264b..000000000 --- a/desmume/src/windows/wx/include/wx/splitter.h +++ /dev/null @@ -1,47 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/splitter.h -// Purpose: Base header for wxSplitterWindow -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: splitter.h 38717 2006-04-14 17:01:16Z ABX $ -// Copyright: (c) Julian Smart -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SPLITTER_H_BASE_ -#define _WX_SPLITTER_H_BASE_ - -#include "wx/event.h" - -// ---------------------------------------------------------------------------- -// wxSplitterWindow flags -// ---------------------------------------------------------------------------- - -#define wxSP_NOBORDER 0x0000 -#define wxSP_NOSASH 0x0010 -#define wxSP_PERMIT_UNSPLIT 0x0040 -#define wxSP_LIVE_UPDATE 0x0080 -#define wxSP_3DSASH 0x0100 -#define wxSP_3DBORDER 0x0200 -#define wxSP_NO_XP_THEME 0x0400 -#define wxSP_BORDER wxSP_3DBORDER -#define wxSP_3D (wxSP_3DBORDER | wxSP_3DSASH) - -#if WXWIN_COMPATIBILITY_2_6 - // obsolete styles, don't do anything - #define wxSP_SASH_AQUA 0 - #define wxSP_FULLSASH 0 -#endif // WXWIN_COMPATIBILITY_2_6 - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, 850) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING, 851) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, 852) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_SPLITTER_UNSPLIT, 853) -END_DECLARE_EVENT_TYPES() - -#include "wx/generic/splitter.h" - -#endif - // _WX_SPLITTER_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/srchctrl.h b/desmume/src/windows/wx/include/wx/srchctrl.h deleted file mode 100644 index 5a56fca91..000000000 --- a/desmume/src/windows/wx/include/wx/srchctrl.h +++ /dev/null @@ -1,91 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: srchctrl.h -// Purpose: wxSearchCtrlBase class -// Author: Vince Harron -// Created: 2006-02-18 -// RCS-ID: $Id: srchctrl.h 45828 2007-05-05 14:51:51Z VZ $ -// Copyright: (c) Vince Harron -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SEARCHCTRL_H_BASE_ -#define _WX_SEARCHCTRL_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_SEARCHCTRL - -#include "wx/textctrl.h" - -#if !defined(__WXUNIVERSAL__) && defined(__WXMAC__) && defined(__WXMAC_OSX__) \ - && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3) - // search control was introduced in Mac OS X 10.3 Panther - #define wxUSE_NATIVE_SEARCH_CONTROL 1 - - #define wxSearchCtrlBaseBaseClass wxTextCtrl -#else - // no native version, use the generic one - #define wxUSE_NATIVE_SEARCH_CONTROL 0 - - #define wxSearchCtrlBaseBaseClass wxTextCtrlBase -#endif - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -extern WXDLLEXPORT_DATA(const wxChar) wxSearchCtrlNameStr[]; - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_COMMAND_SEARCHCTRL_CANCEL_BTN, 1119) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_SEARCHCTRL_SEARCH_BTN, 1120) -END_DECLARE_EVENT_TYPES() - -// ---------------------------------------------------------------------------- -// a search ctrl is a text control with a search button and a cancel button -// it is based on the MacOSX 10.3 control HISearchFieldCreate -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSearchCtrlBase : public wxSearchCtrlBaseBaseClass -{ -public: - wxSearchCtrlBase() { } - virtual ~wxSearchCtrlBase() { } - - // search control -#if wxUSE_MENUS - virtual void SetMenu(wxMenu *menu) = 0; - virtual wxMenu *GetMenu() = 0; -#endif // wxUSE_MENUS - - // get/set options - virtual void ShowSearchButton( bool show ) = 0; - virtual bool IsSearchButtonVisible() const = 0; - - virtual void ShowCancelButton( bool show ) = 0; - virtual bool IsCancelButtonVisible() const = 0; -}; - - -// include the platform-dependent class implementation -#if wxUSE_NATIVE_SEARCH_CONTROL - #if defined(__WXMAC__) - #include "wx/mac/srchctrl.h" - #endif -#else - #include "wx/generic/srchctlg.h" -#endif - -// ---------------------------------------------------------------------------- -// macros for handling search events -// ---------------------------------------------------------------------------- - -#define EVT_SEARCHCTRL_CANCEL_BTN(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_SEARCHCTRL_CANCEL_BTN, id, wxCommandEventHandler(fn)) - -#define EVT_SEARCHCTRL_SEARCH_BTN(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_SEARCHCTRL_SEARCH_BTN, id, wxCommandEventHandler(fn)) - -#endif // wxUSE_SEARCHCTRL - -#endif // _WX_SEARCHCTRL_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/sstream.h b/desmume/src/windows/wx/include/wx/sstream.h deleted file mode 100644 index 7724ab44e..000000000 --- a/desmume/src/windows/wx/include/wx/sstream.h +++ /dev/null @@ -1,103 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/sstream.h -// Purpose: string-based streams -// Author: Vadim Zeitlin -// Modified by: -// Created: 2004-09-19 -// RCS-ID: $Id: sstream.h 45732 2007-05-01 13:52:19Z VZ $ -// Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SSTREAM_H_ -#define _WX_SSTREAM_H_ - -#include "wx/stream.h" - -#if wxUSE_STREAMS - -// ---------------------------------------------------------------------------- -// wxStringInputStream is a stream reading from the given (fixed size) string -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStringInputStream : public wxInputStream -{ -public: - // ctor associates the stream with the given string which makes a copy of - // it - wxStringInputStream(const wxString& s); - virtual ~wxStringInputStream(); - - virtual wxFileOffset GetLength() const; - -protected: - virtual wxFileOffset OnSysSeek(wxFileOffset ofs, wxSeekMode mode); - virtual wxFileOffset OnSysTell() const; - virtual size_t OnSysRead(void *buffer, size_t size); - -private: - // the string that was passed in the ctor - wxString m_str; - - // the buffer we're reading from - char* m_buf; - - // length of the buffer we're reading from - size_t m_len; - - // position in the stream in bytes, *not* in chars - size_t m_pos; - - DECLARE_NO_COPY_CLASS(wxStringInputStream) -}; - -// ---------------------------------------------------------------------------- -// wxStringOutputStream writes data to the given string, expanding it as needed -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStringOutputStream : public wxOutputStream -{ -public: - // The stream will write data either to the provided string or to an - // internal string which can be retrieved using GetString() - wxStringOutputStream(wxString *pString = NULL) - { - m_str = pString ? pString : &m_strInternal; - m_pos = m_str->length() / sizeof(wxChar); - } - -#if wxABI_VERSION >= 20804 && wxUSE_UNICODE - virtual ~wxStringOutputStream(); -#endif // wx 2.8.4+ - - // get the string containing current output - const wxString& GetString() const { return *m_str; } - -protected: - virtual wxFileOffset OnSysTell() const; - virtual size_t OnSysWrite(const void *buffer, size_t size); - -private: - // internal string, not used if caller provided his own string - wxString m_strInternal; - - // pointer given by the caller or just pointer to m_strInternal - wxString *m_str; - - // position in the stream in bytes, *not* in chars - size_t m_pos; - -#if wxUSE_WCHAR_T - // string encoding converter (UTF8 is the standard) - wxMBConvUTF8 m_conv; -#else - wxMBConv m_conv; -#endif - - DECLARE_NO_COPY_CLASS(wxStringOutputStream) -}; - -#endif // wxUSE_STREAMS - -#endif // _WX_SSTREAM_H_ - diff --git a/desmume/src/windows/wx/include/wx/stack.h b/desmume/src/windows/wx/include/wx/stack.h deleted file mode 100644 index 2500a114c..000000000 --- a/desmume/src/windows/wx/include/wx/stack.h +++ /dev/null @@ -1,44 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/stack.h -// Purpose: STL stack clone -// Author: Lindsay Mathieson -// Modified by: -// Created: 30.07.2001 -// Copyright: (c) 2001 Lindsay Mathieson <lindsay@mathieson.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STACK_H_ -#define _WX_STACK_H_ - -#include "wx/vector.h" - -#define WX_DECLARE_STACK(obj, cls)\ -class cls : public wxVectorBase\ -{\ - WX_DECLARE_VECTORBASE(obj, cls);\ -public:\ - void push(const obj& o)\ - {\ - bool rc = Alloc(size() + 1);\ - wxASSERT(rc);\ - Append(new obj(o));\ - };\ -\ - void pop()\ - {\ - RemoveAt(size() - 1);\ - };\ -\ - obj& top()\ - {\ - return *(obj *) GetItem(size() - 1);\ - };\ - const obj& top() const\ - {\ - return *(obj *) GetItem(size() - 1);\ - };\ -} - -#endif // _WX_STACK_H_ - diff --git a/desmume/src/windows/wx/include/wx/stackwalk.h b/desmume/src/windows/wx/include/wx/stackwalk.h deleted file mode 100644 index e0dceae7c..000000000 --- a/desmume/src/windows/wx/include/wx/stackwalk.h +++ /dev/null @@ -1,156 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/wx/stackwalk.h -// Purpose: wxStackWalker and related classes, common part -// Author: Vadim Zeitlin -// Modified by: -// Created: 2005-01-07 -// RCS-ID: $Id: stackwalk.h 43346 2006-11-12 14:33:03Z RR $ -// Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STACKWALK_H_ -#define _WX_STACKWALK_H_ - -#include "wx/defs.h" - -#if wxUSE_STACKWALKER - -class WXDLLIMPEXP_BASE wxStackFrame; - -// ---------------------------------------------------------------------------- -// wxStackFrame: a single stack level -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStackFrameBase -{ -private: - // put this inline function here so that it is defined before use - wxStackFrameBase *ConstCast() const - { return wx_const_cast(wxStackFrameBase *, this); } - -public: - wxStackFrameBase(size_t level, void *address = NULL) - { - m_level = level; - - m_line = - m_offset = 0; - - m_address = address; - } - - // get the level of this frame (deepest/innermost one is 0) - size_t GetLevel() const { return m_level; } - - // return the address of this frame - void *GetAddress() const { return m_address; } - - - // return the unmangled (if possible) name of the function containing this - // frame - wxString GetName() const { ConstCast()->OnGetName(); return m_name; } - - // return the instruction pointer offset from the start of the function - size_t GetOffset() const { ConstCast()->OnGetName(); return m_offset; } - - // get the module this function belongs to (not always available) - wxString GetModule() const { ConstCast()->OnGetName(); return m_module; } - - - // return true if we have the filename and line number for this frame - bool HasSourceLocation() const { return !GetFileName().empty(); } - - // return the name of the file containing this frame, empty if - // unavailable (typically because debug info is missing) - wxString GetFileName() const - { ConstCast()->OnGetLocation(); return m_filename; } - - // return the line number of this frame, 0 if unavailable - size_t GetLine() const { ConstCast()->OnGetLocation(); return m_line; } - - - // return the number of parameters of this function (may return 0 if we - // can't retrieve the parameters info even although the function does have - // parameters) - virtual size_t GetParamCount() const { return 0; } - - // get the name, type and value (in text form) of the given parameter - // - // any pointer may be NULL - // - // return true if at least some values could be retrieved - virtual bool GetParam(size_t WXUNUSED(n), - wxString * WXUNUSED(type), - wxString * WXUNUSED(name), - wxString * WXUNUSED(value)) const - { - return false; - } - - - // although this class is not supposed to be used polymorphically, give it - // a virtual dtor to silence compiler warnings - virtual ~wxStackFrameBase() { } - -protected: - // hooks for derived classes to initialize some fields on demand - virtual void OnGetName() { } - virtual void OnGetLocation() { } - - - // fields are protected, not private, so that OnGetXXX() could modify them - // directly - size_t m_level; - - wxString m_name, - m_module, - m_filename; - - size_t m_line; - - void *m_address; - size_t m_offset; -}; - -// ---------------------------------------------------------------------------- -// wxStackWalker: class for enumerating stack frames -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStackWalkerBase -{ -public: - // ctor does nothing, use Walk() to walk the stack - wxStackWalkerBase() { } - - // dtor does nothing neither but should be virtual - virtual ~wxStackWalkerBase() { } - - // enumerate stack frames from the current location, skipping the initial - // number of them (this can be useful when Walk() is called from some known - // location and you don't want to see the first few frames anyhow; also - // notice that Walk() frame itself is not included if skip >= 1) - virtual void Walk(size_t skip = 1, size_t maxDepth = 200) = 0; - - // enumerate stack frames from the location of uncaught exception - // - // this version can only be called from wxApp::OnFatalException() - virtual void WalkFromException() = 0; - -protected: - // this function must be overrided to process the given frame - virtual void OnStackFrame(const wxStackFrame& frame) = 0; -}; - -#ifdef __WXMSW__ - #include "wx/msw/stackwalk.h" -#elif defined(__UNIX__) - #include "wx/unix/stackwalk.h" -#else - #error "wxStackWalker is not supported, set wxUSE_STACKWALKER to 0" -#endif - -#endif // wxUSE_STACKWALKER - -#endif // _WX_STACKWALK_H_ - diff --git a/desmume/src/windows/wx/include/wx/statbmp.h b/desmume/src/windows/wx/include/wx/statbmp.h deleted file mode 100644 index 35a5dc50c..000000000 --- a/desmume/src/windows/wx/include/wx/statbmp.h +++ /dev/null @@ -1,74 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/statbmp.h -// Purpose: wxStaticBitmap class interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 25.08.00 -// RCS-ID: $Id: statbmp.h 37066 2006-01-23 03:27:34Z MR $ -// Copyright: (c) 2000 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STATBMP_H_BASE_ -#define _WX_STATBMP_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_STATBMP - -#include "wx/control.h" -#include "wx/bitmap.h" -#include "wx/icon.h" - -extern WXDLLEXPORT_DATA(const wxChar) wxStaticBitmapNameStr[]; - -// a control showing an icon or a bitmap -class WXDLLEXPORT wxStaticBitmapBase : public wxControl -{ -public: - wxStaticBitmapBase() { } - virtual ~wxStaticBitmapBase(); - - // our interface - virtual void SetIcon(const wxIcon& icon) = 0; - virtual void SetBitmap(const wxBitmap& bitmap) = 0; - virtual wxBitmap GetBitmap() const = 0; - virtual wxIcon GetIcon() const /* = 0 -- should be pure virtual */ - { - // stub it out here for now as not all ports implement it (but they - // should) - return wxIcon(); - } - - // overriden base class virtuals - virtual bool AcceptsFocus() const { return false; } - virtual bool HasTransparentBackground() { return true; } - -protected: - virtual wxSize DoGetBestSize() const; - - DECLARE_NO_COPY_CLASS(wxStaticBitmapBase) -}; - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/statbmp.h" -#elif defined(__WXMSW__) - #include "wx/msw/statbmp.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/statbmp.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/statbmp.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/statbmp.h" -#elif defined(__WXMAC__) - #include "wx/mac/statbmp.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/statbmp.h" -#elif defined(__WXPM__) - #include "wx/os2/statbmp.h" -#endif - -#endif // wxUSE_STATBMP - -#endif - // _WX_STATBMP_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/statbox.h b/desmume/src/windows/wx/include/wx/statbox.h deleted file mode 100644 index ddeba3526..000000000 --- a/desmume/src/windows/wx/include/wx/statbox.h +++ /dev/null @@ -1,74 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: statbox.h -// Purpose: wxStaticBox base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: statbox.h 37066 2006-01-23 03:27:34Z MR $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STATBOX_H_BASE_ -#define _WX_STATBOX_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_STATBOX - -#include "wx/control.h" - -extern WXDLLEXPORT_DATA(const wxChar) wxStaticBoxNameStr[]; - -// ---------------------------------------------------------------------------- -// wxStaticBox: a grouping box with a label -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStaticBoxBase : public wxControl -{ -public: - wxStaticBoxBase() { } - - // overriden base class virtuals - virtual bool AcceptsFocus() const { return false; } - virtual bool HasTransparentBackground() { return true; } - - // implementation only: this is used by wxStaticBoxSizer to account for the - // need for extra space taken by the static box - // - // the top border is the margin at the top (where the title is), - // borderOther is the margin on all other sides - virtual void GetBordersForSizer(int *borderTop, int *borderOther) const - { - const int BORDER = 5; // FIXME: hardcoded value - - *borderTop = GetLabel().empty() ? BORDER : GetCharHeight(); - *borderOther = BORDER; - } - -private: - DECLARE_NO_COPY_CLASS(wxStaticBoxBase) -}; - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/statbox.h" -#elif defined(__WXMSW__) - #include "wx/msw/statbox.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/statbox.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/statbox.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/statbox.h" -#elif defined(__WXMAC__) - #include "wx/mac/statbox.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/statbox.h" -#elif defined(__WXPM__) - #include "wx/os2/statbox.h" -#endif - -#endif // wxUSE_STATBOX - -#endif - // _WX_STATBOX_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/statline.h b/desmume/src/windows/wx/include/wx/statline.h deleted file mode 100644 index 2156a71b2..000000000 --- a/desmume/src/windows/wx/include/wx/statline.h +++ /dev/null @@ -1,103 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/statline.h -// Purpose: wxStaticLine class interface -// Author: Vadim Zeitlin -// Created: 28.06.99 -// Version: $Id: statline.h 43874 2006-12-09 14:52:59Z VZ $ -// Copyright: (c) 1999 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STATLINE_H_BASE_ -#define _WX_STATLINE_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -// this defines wxUSE_STATLINE -#include "wx/defs.h" - -#if wxUSE_STATLINE - -// the base class declaration -#include "wx/control.h" - -// ---------------------------------------------------------------------------- -// global variables -// ---------------------------------------------------------------------------- - -// the default name for objects of class wxStaticLine -extern WXDLLEXPORT_DATA(const wxChar) wxStaticLineNameStr[]; - -// ---------------------------------------------------------------------------- -// wxStaticLine - a line in a dialog -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStaticLineBase : public wxControl -{ -public: - // constructor - wxStaticLineBase() { } - - // is the line vertical? - bool IsVertical() const { return (GetWindowStyle() & wxLI_VERTICAL) != 0; } - - // get the default size for the "lesser" dimension of the static line - static int GetDefaultSize() { return 2; } - - // overriden base class virtuals - virtual bool AcceptsFocus() const { return false; } - -protected: - // set the right size for the right dimension - wxSize AdjustSize(const wxSize& size) const - { - wxSize sizeReal(size); - if ( IsVertical() ) - { - if ( size.x == wxDefaultCoord ) - sizeReal.x = GetDefaultSize(); - } - else - { - if ( size.y == wxDefaultCoord ) - sizeReal.y = GetDefaultSize(); - } - - return sizeReal; - } - - virtual wxSize DoGetBestSize() const - { - return AdjustSize(wxDefaultSize); - } - - DECLARE_NO_COPY_CLASS(wxStaticLineBase) -}; - -// ---------------------------------------------------------------------------- -// now include the actual class declaration -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/statline.h" -#elif defined(__WXMSW__) - #include "wx/msw/statline.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/statline.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/statline.h" -#elif defined(__WXPM__) - #include "wx/os2/statline.h" -#elif defined(__WXMAC__) - #include "wx/mac/statline.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/statline.h" -#else // use generic implementation for all other platforms - #include "wx/generic/statline.h" -#endif - -#endif // wxUSE_STATLINE - -#endif // _WX_STATLINE_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/stattext.h b/desmume/src/windows/wx/include/wx/stattext.h deleted file mode 100644 index f2ad35425..000000000 --- a/desmume/src/windows/wx/include/wx/stattext.h +++ /dev/null @@ -1,69 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: stattext.h -// Purpose: wxStaticText base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: stattext.h 37066 2006-01-23 03:27:34Z MR $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STATTEXT_H_BASE_ -#define _WX_STATTEXT_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_STATTEXT - -#include "wx/control.h" - -extern WXDLLEXPORT_DATA(const wxChar) wxStaticTextNameStr[]; - -class WXDLLEXPORT wxStaticTextBase : public wxControl -{ -public: - wxStaticTextBase() { } - - // in wxGTK wxStaticText doesn't derive from wxStaticTextBase so we have to - // declare this function directly in gtk header -#if !defined(__WXGTK__) || defined(__WXUNIVERSAL__) - // wrap the text of the control so that no line is longer than the given - // width (if possible: this function won't break words) - // - // NB: implemented in dlgcmn.cpp for now - void Wrap(int width); -#endif // ! native __WXGTK__ - - // overriden base virtuals - virtual bool AcceptsFocus() const { return false; } - virtual bool HasTransparentBackground() { return true; } - -private: - DECLARE_NO_COPY_CLASS(wxStaticTextBase) -}; - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/stattext.h" -#elif defined(__WXMSW__) - #include "wx/msw/stattext.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/stattext.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/stattext.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/stattext.h" -#elif defined(__WXMAC__) - #include "wx/mac/stattext.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/stattext.h" -#elif defined(__WXPM__) - #include "wx/os2/stattext.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/stattext.h" -#endif - -#endif // wxUSE_STATTEXT - -#endif - // _WX_STATTEXT_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/statusbr.h b/desmume/src/windows/wx/include/wx/statusbr.h deleted file mode 100644 index b1ab7d10e..000000000 --- a/desmume/src/windows/wx/include/wx/statusbr.h +++ /dev/null @@ -1,174 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/statusbr.h -// Purpose: wxStatusBar class interface -// Author: Vadim Zeitlin -// Modified by: -// Created: 05.02.00 -// RCS-ID: $Id: statusbr.h 41035 2006-09-06 17:36:22Z PC $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STATUSBR_H_BASE_ -#define _WX_STATUSBR_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_STATUSBAR - -#include "wx/window.h" -#include "wx/list.h" -#include "wx/dynarray.h" - -extern WXDLLIMPEXP_DATA_CORE(const wxChar) wxStatusBarNameStr[]; - -WX_DECLARE_LIST(wxString, wxListString); - -// ---------------------------------------------------------------------------- -// wxStatusBar constants -// ---------------------------------------------------------------------------- - -// style flags for fields -#define wxSB_NORMAL 0x0000 -#define wxSB_FLAT 0x0001 -#define wxSB_RAISED 0x0002 - -// ---------------------------------------------------------------------------- -// wxStatusBar: a window near the bottom of the frame used for status info -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStatusBarBase : public wxWindow -{ -public: - wxStatusBarBase(); - - virtual ~wxStatusBarBase(); - - // field count - // ----------- - - // set the number of fields and call SetStatusWidths(widths) if widths are - // given - virtual void SetFieldsCount(int number = 1, const int *widths = NULL); - int GetFieldsCount() const { return m_nFields; } - - // field text - // ---------- - - virtual void SetStatusText(const wxString& text, int number = 0) = 0; - virtual wxString GetStatusText(int number = 0) const = 0; - - void PushStatusText(const wxString& text, int number = 0); - void PopStatusText(int number = 0); - - // fields widths - // ------------- - - // set status field widths as absolute numbers: positive widths mean that - // the field has the specified absolute width, negative widths are - // interpreted as the sizer options, i.e. the extra space (total space - // minus the sum of fixed width fields) is divided between the fields with - // negative width according to the abs value of the width (field with width - // -2 grows twice as much as one with width -1 &c) - virtual void SetStatusWidths(int n, const int widths[]); - - // field styles - // ------------ - - // Set the field style. Use either wxSB_NORMAL (default) for a standard 3D - // border around a field, wxSB_FLAT for no border around a field, so that it - // appears flat or wxSB_POPOUT to make the field appear raised. - // Setting field styles only works on wxMSW - virtual void SetStatusStyles(int n, const int styles[]); - - // geometry - // -------- - - // Get the position and size of the field's internal bounding rectangle - virtual bool GetFieldRect(int i, wxRect& rect) const = 0; - - // sets the minimal vertical size of the status bar - virtual void SetMinHeight(int height) = 0; - - // get the dimensions of the horizontal and vertical borders - virtual int GetBorderX() const = 0; - virtual int GetBorderY() const = 0; - - // don't want status bars to accept the focus at all - virtual bool AcceptsFocus() const { return false; } - -protected: - // set the widths array to NULL - void InitWidths(); - - // free the status widths arrays - void FreeWidths(); - - // reset the widths - void ReinitWidths() { FreeWidths(); InitWidths(); } - - // same, for field styles - void InitStyles(); - void FreeStyles(); - void ReinitStyles() { FreeStyles(); InitStyles(); } - - // same, for text stacks - void InitStacks(); - void FreeStacks(); - void ReinitStacks() { FreeStacks(); InitStacks(); } - - // calculate the real field widths for the given total available size - wxArrayInt CalculateAbsWidths(wxCoord widthTotal) const; - - // use these functions to access the stacks of field strings - wxListString *GetStatusStack(int i) const; - wxListString *GetOrCreateStatusStack(int i); - - // the current number of fields - int m_nFields; - - // the widths of the fields in pixels if !NULL, all fields have the same - // width otherwise - int *m_statusWidths; - - // the styles of the fields - int *m_statusStyles; - - // stacks of previous values for PushStatusText/PopStatusText - // this is created on demand, use GetStatusStack/GetOrCreateStatusStack - wxListString **m_statusTextStacks; - - DECLARE_NO_COPY_CLASS(wxStatusBarBase) -}; - -// ---------------------------------------------------------------------------- -// include the actual wxStatusBar class declaration -// ---------------------------------------------------------------------------- - -#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 - #define wxStatusBar95 wxStatusBar - - #include "wx/msw/statbr95.h" -#elif defined(__WXMAC__) - #define wxStatusBarMac wxStatusBar - - #include "wx/generic/statusbr.h" - #include "wx/mac/statusbr.h" -#else - #define wxStatusBarGeneric wxStatusBar - - #include "wx/generic/statusbr.h" -#endif - -#endif // wxUSE_STATUSBAR - -#endif - // _WX_STATUSBR_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/stdpaths.h b/desmume/src/windows/wx/include/wx/stdpaths.h deleted file mode 100644 index b9647c8c6..000000000 --- a/desmume/src/windows/wx/include/wx/stdpaths.h +++ /dev/null @@ -1,179 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/stdpaths.h -// Purpose: declaration of wxStandardPaths class -// Author: Vadim Zeitlin -// Modified by: -// Created: 2004-10-17 -// RCS-ID: $Id: stdpaths.h 43340 2006-11-12 12:58:10Z RR $ -// Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STDPATHS_H_ -#define _WX_STDPATHS_H_ - -#include "wx/defs.h" - -#if wxUSE_STDPATHS - -#include "wx/string.h" -#include "wx/filefn.h" - -// ---------------------------------------------------------------------------- -// wxStandardPaths returns the standard locations in the file system -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStandardPathsBase -{ -public: - // possible resources categorires - enum ResourceCat - { - // no special category - ResourceCat_None, - - // message catalog resources - ResourceCat_Messages, - - // end of enum marker - ResourceCat_Max - }; - - - // return the global standard paths object - static wxStandardPathsBase& Get(); - - // return the path (directory+filename) of the running executable or - // wxEmptyString if it couldn't be determined. - // The path is returned as an absolute path whenever possible. - // Default implementation only try to use wxApp->argv[0]. - virtual wxString GetExecutablePath() const; - - // return the directory with system config files: - // /etc under Unix, c:\Documents and Settings\All Users\Application Data - // under Windows, /Library/Preferences for Mac - virtual wxString GetConfigDir() const = 0; - - // return the directory for the user config files: - // $HOME under Unix, c:\Documents and Settings\username under Windows, - // ~/Library/Preferences under Mac - // - // only use this if you have a single file to put there, otherwise - // GetUserDataDir() is more appropriate - virtual wxString GetUserConfigDir() const = 0; - - // return the location of the applications global, i.e. not user-specific, - // data files - // - // prefix/share/appname under Unix, c:\Program Files\appname under Windows, - // appname.app/Contents/SharedSupport app bundle directory under Mac - virtual wxString GetDataDir() const = 0; - - // return the location for application data files which are host-specific - // - // same as GetDataDir() except under Unix where it is /etc/appname - virtual wxString GetLocalDataDir() const; - - // return the directory for the user-dependent application data files - // - // $HOME/.appname under Unix, - // c:\Documents and Settings\username\Application Data\appname under Windows - // and ~/Library/Application Support/appname under Mac - virtual wxString GetUserDataDir() const = 0; - - // return the directory for user data files which shouldn't be shared with - // the other machines - // - // same as GetUserDataDir() for all platforms except Windows where it is - // the "Local Settings\Application Data\appname" directory - virtual wxString GetUserLocalDataDir() const; - - // return the directory where the loadable modules (plugins) live - // - // prefix/lib/appname under Unix, program directory under Windows and - // Contents/Plugins app bundle subdirectory under Mac - virtual wxString GetPluginsDir() const = 0; - - // get resources directory: resources are auxiliary files used by the - // application and include things like image and sound files - // - // same as GetDataDir() for all platforms except Mac where it returns - // Contents/Resources subdirectory of the app bundle - virtual wxString GetResourcesDir() const { return GetDataDir(); } - - // get localized resources directory containing the resource files of the - // specified category for the given language - // - // in general this is just GetResourcesDir()/lang under Windows and Unix - // and GetResourcesDir()/lang.lproj under Mac but is something quite - // different under Unix for message catalog category (namely the standard - // prefix/share/locale/lang/LC_MESSAGES) - virtual wxString - GetLocalizedResourcesDir(const wxChar *lang, - ResourceCat WXUNUSED(category) - = ResourceCat_None) const - { - return GetResourcesDir() + wxFILE_SEP_PATH + lang; - } - - // return the "Documents" directory for the current user - // - // C:\Documents and Settings\username\Documents under Windows, - // $HOME under Unix and ~/Documents under Mac - virtual wxString GetDocumentsDir() const; - - // return the temporary directory for the current user - virtual wxString GetTempDir() const; - - - // virtual dtor for the base class - virtual ~wxStandardPathsBase(); - -protected: - // append "/appname" suffix if the app name is set (doesn't append the - // slash if dir already ends with a slash or dot) - static wxString AppendAppName(const wxString& dir); -}; - -#if defined(__WXMSW__) - #include "wx/msw/stdpaths.h" -// We want CoreFoundation paths on both CarbonLib and Darwin (for all ports) -#elif defined(__WXMAC__) || defined(__DARWIN__) - #include "wx/mac/corefoundation/stdpaths.h" -#elif defined(__OS2__) - #include "wx/os2/stdpaths.h" -#elif defined(__UNIX__) - #include "wx/unix/stdpaths.h" -#elif defined(__PALMOS__) - #include "wx/palmos/stdpaths.h" -#else - -// ---------------------------------------------------------------------------- -// Minimal generic implementation -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStandardPaths : public wxStandardPathsBase -{ -public: - void SetInstallPrefix(const wxString& prefix) { m_prefix = prefix; } - wxString GetInstallPrefix() const { return m_prefix; } - - virtual wxString GetExecutablePath() const { return m_prefix; } - virtual wxString GetConfigDir() const { return m_prefix; } - virtual wxString GetUserConfigDir() const { return m_prefix; } - virtual wxString GetDataDir() const { return m_prefix; } - virtual wxString GetLocalDataDir() const { return m_prefix; } - virtual wxString GetUserDataDir() const { return m_prefix; } - virtual wxString GetPluginsDir() const { return m_prefix; } - virtual wxString GetDocumentsDir() const { return m_prefix; } - -private: - wxString m_prefix; -}; - -#endif - -#endif // wxUSE_STDPATHS - -#endif // _WX_STDPATHS_H_ - diff --git a/desmume/src/windows/wx/include/wx/stockitem.h b/desmume/src/windows/wx/include/wx/stockitem.h deleted file mode 100644 index 55695077d..000000000 --- a/desmume/src/windows/wx/include/wx/stockitem.h +++ /dev/null @@ -1,73 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/stockitem.h -// Purpose: stock items helpers (privateh header) -// Author: Vaclav Slavik -// Modified by: -// Created: 2004-08-15 -// RCS-ID: $Id: stockitem.h 42935 2006-11-02 09:51:49Z JS $ -// Copyright: (c) Vaclav Slavik, 2004 -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STOCKITEM_H_ -#define _WX_STOCKITEM_H_ - -#include "wx/defs.h" -#include "wx/wxchar.h" -#include "wx/string.h" -#include "wx/accel.h" - -// ---------------------------------------------------------------------------- -// Helper functions for stock items handling: -// ---------------------------------------------------------------------------- - -// Returns true if the ID is in the list of recognized stock actions -WXDLLEXPORT bool wxIsStockID(wxWindowID id); - -// Returns true of the label is empty or label of a stock button with -// given ID -WXDLLEXPORT bool wxIsStockLabel(wxWindowID id, const wxString& label); - -enum wxStockLabelQueryFlag -{ - wxSTOCK_NOFLAGS = 0, - - wxSTOCK_WITH_MNEMONIC = 1, - wxSTOCK_WITH_ACCELERATOR = 2 -}; - -// Returns label that should be used for given stock UI element (e.g. "&OK" -// for wxSTOCK_OK); if wxSTOCK_WITH_MNEMONIC is given, the & character -// is included; if wxSTOCK_WITH_ACCELERATOR is given, the stock accelerator -// for given ID is concatenated to the label using \t as separator -WXDLLEXPORT wxString wxGetStockLabel(wxWindowID id, - long flags = wxSTOCK_WITH_MNEMONIC); - -#if wxUSE_ACCEL - - // Returns the accelerator that should be used for given stock UI element - // (e.g. "Ctrl+x" for wxSTOCK_EXIT) - WXDLLEXPORT wxAcceleratorEntry wxGetStockAccelerator(wxWindowID id); - -#endif - -// wxStockHelpStringClient conceptually works like wxArtClient: it gives a hint to -// wxGetStockHelpString() about the context where the help string is to be used -enum wxStockHelpStringClient -{ - wxSTOCK_MENU // help string to use for menu items -}; - -// Returns an help string for the given stock UI element and for the given "context". -WXDLLEXPORT wxString wxGetStockHelpString(wxWindowID id, - wxStockHelpStringClient client = wxSTOCK_MENU); - - -#ifdef __WXGTK20__ - -// Translates stock ID to GTK+'s stock item string indentifier: -WXDLLEXPORT const char *wxGetStockGtkID(wxWindowID id); - -#endif - -#endif // _WX_STOCKITEM_H_ diff --git a/desmume/src/windows/wx/include/wx/stopwatch.h b/desmume/src/windows/wx/include/wx/stopwatch.h deleted file mode 100644 index 9f1d1889b..000000000 --- a/desmume/src/windows/wx/include/wx/stopwatch.h +++ /dev/null @@ -1,102 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/stopwatch.h -// Purpose: wxStopWatch and global time-related functions -// Author: Julian Smart (wxTimer), Sylvain Bougnoux (wxStopWatch) -// Created: 26.06.03 (extracted from wx/timer.h) -// RCS-ID: $Id: stopwatch.h 40624 2006-08-16 12:17:05Z MW $ -// Copyright: (c) 1998-2003 Julian Smart, Sylvain Bougnoux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STOPWATCH_H_ -#define _WX_STOPWATCH_H_ - -#include "wx/defs.h" -#include "wx/longlong.h" - -// ---------------------------------------------------------------------------- -// wxStopWatch: measure time intervals with up to 1ms resolution -// ---------------------------------------------------------------------------- - -#if wxUSE_STOPWATCH - -class WXDLLIMPEXP_BASE wxStopWatch -{ -public: - // ctor starts the stop watch - wxStopWatch() { m_pauseCount = 0; Start(); } - - // start the stop watch at the moment t0 - void Start(long t0 = 0); - - // pause the stop watch - void Pause() - { - if ( m_pauseCount++ == 0 ) - m_pause = GetElapsedTime(); - } - - // resume it - void Resume() - { - wxASSERT_MSG( m_pauseCount > 0, - _T("Resuming stop watch which is not paused") ); - - if ( --m_pauseCount == 0 ) - Start(m_pause); - } - - // get elapsed time since the last Start() in milliseconds - long Time() const; - -protected: - // returns the elapsed time since t0 - long GetElapsedTime() const; - -private: - // the time of the last Start() - wxLongLong m_t0; - - // the time of the last Pause() (only valid if m_pauseCount > 0) - long m_pause; - - // if > 0, the stop watch is paused, otherwise it is running - int m_pauseCount; -}; - -#endif // wxUSE_STOPWATCH - -#if wxUSE_LONGLONG && WXWIN_COMPATIBILITY_2_6 - - // Starts a global timer - // -- DEPRECATED: use wxStopWatch instead - wxDEPRECATED( void WXDLLIMPEXP_BASE wxStartTimer() ); - - // Gets elapsed milliseconds since last wxStartTimer or wxGetElapsedTime - // -- DEPRECATED: use wxStopWatch instead - wxDEPRECATED( long WXDLLIMPEXP_BASE wxGetElapsedTime(bool resetTimer = true) ); - -#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; -#else - typedef double wxMilliClock_t; -#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() - -#endif // _WX_STOPWATCH_H_ diff --git a/desmume/src/windows/wx/include/wx/strconv.h b/desmume/src/windows/wx/include/wx/strconv.h deleted file mode 100644 index 1a760cb65..000000000 --- a/desmume/src/windows/wx/include/wx/strconv.h +++ /dev/null @@ -1,553 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: strconv.h -// Purpose: conversion routines for char sets any Unicode -// Author: Ove Kaaven, Robert Roebling, Vadim Zeitlin -// Modified by: -// Created: 29/01/98 -// RCS-ID: $Id: strconv.h 45893 2007-05-08 20:05:16Z VZ $ -// Copyright: (c) 1998 Ove Kaaven, Robert Roebling -// (c) 1998-2006 Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_STRCONV_H_ -#define _WX_STRCONV_H_ - -#include "wx/defs.h" -#include "wx/wxchar.h" -#include "wx/buffer.h" - -#ifdef __DIGITALMARS__ -#include "typeinfo.h" -#endif - -#if defined(__VISAGECPP__) && __IBMCPP__ >= 400 -# undef __BSEXCPT__ -#endif - -#include <stdlib.h> - -#if wxUSE_WCHAR_T - -// the error value returned by wxMBConv methods -#define wxCONV_FAILED ((size_t)-1) - -// the default value for some length parameters meaning that the string is -// NUL-terminated -#define wxNO_LEN ((size_t)-1) - -// ---------------------------------------------------------------------------- -// wxMBConv (abstract base class for conversions) -// ---------------------------------------------------------------------------- - -// When deriving a new class from wxMBConv you must reimplement ToWChar() and -// FromWChar() methods which are not pure virtual only for historical reasons, -// don't let the fact that the existing classes implement MB2WC/WC2MB() instead -// confuse you. -// -// You also have to implement Clone() to allow copying the conversions -// polymorphically. -// -// And you might need to override GetMBNulLen() as well. -class WXDLLIMPEXP_BASE wxMBConv -{ -public: - // The functions doing actual conversion from/to narrow to/from wide - // character strings. - // - // On success, the return value is the length (i.e. the number of - // characters, not bytes) of the converted string including any trailing - // L'\0' or (possibly multiple) '\0'(s). If the conversion fails or if - // there is not enough space for everything, including the trailing NUL - // character(s), in the output buffer, wxCONV_FAILED is returned. - // - // In the special case when dstLen is 0 (outputBuf may be NULL then) the - // return value is the length of the needed buffer but nothing happens - // otherwise. If srcLen is wxNO_LEN, the entire string, up to and - // including the trailing NUL(s), is converted, otherwise exactly srcLen - // bytes are. - // - // Typical usage: - // - // size_t dstLen = conv.ToWChar(NULL, 0, src); - // if ( dstLen != wxCONV_FAILED ) - // ... handle error ... - // wchar_t *wbuf = new wchar_t[dstLen]; - // conv.ToWChar(wbuf, dstLen, src); - // - virtual size_t ToWChar(wchar_t *dst, size_t dstLen, - const char *src, size_t srcLen = wxNO_LEN) const; - - virtual size_t FromWChar(char *dst, size_t dstLen, - const wchar_t *src, size_t srcLen = wxNO_LEN) const; - - - // Convenience functions for translating NUL-terminated strings: returns - // the buffer containing the converted string or NULL pointer if the - // conversion failed. - const wxWCharBuffer cMB2WC(const char *in) const; - const wxCharBuffer cWC2MB(const wchar_t *in) const; - - // Convenience functions for converting strings which may contain embedded - // NULs and don't have to be NUL-terminated. - // - // inLen is the length of the buffer including trailing NUL if any: if the - // last 4 bytes of the buffer are all NULs, these functions are more - // efficient as they avoid copying the string, but otherwise a copy is made - // internally which could be quite bad for (very) long strings. - // - // outLen receives, if not NULL, the length of the converted string or 0 if - // the conversion failed (returning 0 and not -1 in this case makes it - // difficult to distinguish between failed conversion and empty input but - // this is done for backwards compatibility) - const wxWCharBuffer - cMB2WC(const char *in, size_t inLen, size_t *outLen) const; - const wxCharBuffer - cWC2MB(const wchar_t *in, size_t inLen, size_t *outLen) const; - - // convenience functions for converting MB or WC to/from wxWin default -#if wxUSE_UNICODE - const wxWCharBuffer cMB2WX(const char *psz) const { return cMB2WC(psz); } - const wxCharBuffer cWX2MB(const wchar_t *psz) const { return cWC2MB(psz); } - const wchar_t* cWC2WX(const wchar_t *psz) const { return psz; } - const wchar_t* cWX2WC(const wchar_t *psz) const { return psz; } -#else // ANSI - const char* cMB2WX(const char *psz) const { return psz; } - const char* cWX2MB(const char *psz) const { return psz; } - const wxCharBuffer cWC2WX(const wchar_t *psz) const { return cWC2MB(psz); } - const wxWCharBuffer cWX2WC(const char *psz) const { return cMB2WC(psz); } -#endif // Unicode/ANSI - - // this function is used in the implementation of cMB2WC() to distinguish - // between the following cases: - // - // a) var width encoding with strings terminated by a single NUL - // (usual multibyte encodings): return 1 in this case - // b) fixed width encoding with 2 bytes/char and so terminated by - // 2 NULs (UTF-16/UCS-2 and variants): return 2 in this case - // c) fixed width encoding with 4 bytes/char and so terminated by - // 4 NULs (UTF-32/UCS-4 and variants): return 4 in this case - // - // anything else is not supported currently and -1 should be returned - virtual size_t GetMBNulLen() const { return 1; } - - // return the maximal value currently returned by GetMBNulLen() for any - // encoding - static size_t GetMaxMBNulLen() { return 4 /* for UTF-32 */; } - - - // The old conversion functions. The existing classes currently mostly - // implement these ones but we're in transition to using To/FromWChar() - // instead and any new classes should implement just the new functions. - // For now, however, we provide default implementation of To/FromWChar() in - // this base class in terms of MB2WC/WC2MB() to avoid having to rewrite all - // the conversions at once. - // - // On success, the return value is the length (i.e. the number of - // characters, not bytes) not counting the trailing NUL(s) of the converted - // string. On failure, (size_t)-1 is returned. In the special case when - // outputBuf is NULL the return value is the same one but nothing is - // written to the buffer. - // - // Note that outLen is the length of the output buffer, not the length of - // the input (which is always supposed to be terminated by one or more - // NULs, as appropriate for the encoding)! - virtual size_t MB2WC(wchar_t *out, const char *in, size_t outLen) const; - virtual size_t WC2MB(char *out, const wchar_t *in, size_t outLen) const; - - - // make a heap-allocated copy of this object - virtual wxMBConv *Clone() const = 0; - - // virtual dtor for any base class - virtual ~wxMBConv(); -}; - -// ---------------------------------------------------------------------------- -// wxMBConvLibc uses standard mbstowcs() and wcstombs() functions for -// conversion (hence it depends on the current locale) -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMBConvLibc : public wxMBConv -{ -public: - virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const; - virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const; - - virtual wxMBConv *Clone() const { return new wxMBConvLibc; } -}; - -#ifdef __UNIX__ - -// ---------------------------------------------------------------------------- -// wxConvBrokenFileNames is made for Unix in Unicode mode when -// files are accidentally written in an encoding which is not -// the system encoding. Typically, the system encoding will be -// UTF8 but there might be files stored in ISO8859-1 on disk. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxConvBrokenFileNames : public wxMBConv -{ -public: - wxConvBrokenFileNames(const wxChar *charset); - wxConvBrokenFileNames(const wxConvBrokenFileNames& conv) - : wxMBConv(), - m_conv(conv.m_conv ? conv.m_conv->Clone() : NULL) - { - } - virtual ~wxConvBrokenFileNames() { delete m_conv; } - - virtual size_t MB2WC(wchar_t *out, const char *in, size_t outLen) const - { - return m_conv->MB2WC(out, in, outLen); - } - - virtual size_t WC2MB(char *out, const wchar_t *in, size_t outLen) const - { - return m_conv->WC2MB(out, in, outLen); - } - - virtual size_t GetMBNulLen() const - { - // cast needed to call a private function - return m_conv->GetMBNulLen(); - } - - virtual wxMBConv *Clone() const { return new wxConvBrokenFileNames(*this); } - -private: - // the conversion object we forward to - wxMBConv *m_conv; - - DECLARE_NO_ASSIGN_CLASS(wxConvBrokenFileNames) -}; - -#endif // __UNIX__ - -// ---------------------------------------------------------------------------- -// wxMBConvUTF7 (for conversion using UTF7 encoding) -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMBConvUTF7 : public wxMBConv -{ -public: - virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const; - virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const; - - virtual wxMBConv *Clone() const { return new wxMBConvUTF7; } -}; - -// ---------------------------------------------------------------------------- -// wxMBConvUTF8 (for conversion using UTF8 encoding) -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMBConvUTF8 : public wxMBConv -{ -public: - enum - { - MAP_INVALID_UTF8_NOT = 0, - MAP_INVALID_UTF8_TO_PUA = 1, - MAP_INVALID_UTF8_TO_OCTAL = 2 - }; - - wxMBConvUTF8(int options = MAP_INVALID_UTF8_NOT) : m_options(options) { } - virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const; - virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const; - - virtual wxMBConv *Clone() const { return new wxMBConvUTF8(m_options); } - -private: - int m_options; -}; - -// ---------------------------------------------------------------------------- -// wxMBConvUTF16Base: for both LE and BE variants -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMBConvUTF16Base : public wxMBConv -{ -public: - enum { BYTES_PER_CHAR = 2 }; - - virtual size_t GetMBNulLen() const { return BYTES_PER_CHAR; } - -protected: - // return the length of the buffer using srcLen if it's not wxNO_LEN and - // computing the length ourselves if it is; also checks that the length is - // even if specified as we need an entire number of UTF-16 characters and - // returns wxNO_LEN which indicates error if it is odd - static size_t GetLength(const char *src, size_t srcLen); -}; - -// ---------------------------------------------------------------------------- -// wxMBConvUTF16LE (for conversion using UTF16 Little Endian encoding) -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMBConvUTF16LE : public wxMBConvUTF16Base -{ -public: - virtual size_t ToWChar(wchar_t *dst, size_t dstLen, - const char *src, size_t srcLen = wxNO_LEN) const; - virtual size_t FromWChar(char *dst, size_t dstLen, - const wchar_t *src, size_t srcLen = wxNO_LEN) const; - virtual wxMBConv *Clone() const { return new wxMBConvUTF16LE; } -}; - -// ---------------------------------------------------------------------------- -// wxMBConvUTF16BE (for conversion using UTF16 Big Endian encoding) -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMBConvUTF16BE : public wxMBConvUTF16Base -{ -public: - virtual size_t ToWChar(wchar_t *dst, size_t dstLen, - const char *src, size_t srcLen = wxNO_LEN) const; - virtual size_t FromWChar(char *dst, size_t dstLen, - const wchar_t *src, size_t srcLen = wxNO_LEN) const; - virtual wxMBConv *Clone() const { return new wxMBConvUTF16BE; } -}; - -// ---------------------------------------------------------------------------- -// wxMBConvUTF32Base: base class for both LE and BE variants -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMBConvUTF32Base : public wxMBConv -{ -public: - enum { BYTES_PER_CHAR = 4 }; - - virtual size_t GetMBNulLen() const { return BYTES_PER_CHAR; } - -protected: - // this is similar to wxMBConvUTF16Base method with the same name except - // that, of course, it verifies that length is divisible by 4 if given and - // not by 2 - static size_t GetLength(const char *src, size_t srcLen); -}; - -// ---------------------------------------------------------------------------- -// wxMBConvUTF32LE (for conversion using UTF32 Little Endian encoding) -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMBConvUTF32LE : public wxMBConvUTF32Base -{ -public: - virtual size_t ToWChar(wchar_t *dst, size_t dstLen, - const char *src, size_t srcLen = wxNO_LEN) const; - virtual size_t FromWChar(char *dst, size_t dstLen, - const wchar_t *src, size_t srcLen = wxNO_LEN) const; - virtual wxMBConv *Clone() const { return new wxMBConvUTF32LE; } -}; - -// ---------------------------------------------------------------------------- -// wxMBConvUTF32BE (for conversion using UTF32 Big Endian encoding) -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMBConvUTF32BE : public wxMBConvUTF32Base -{ -public: - virtual size_t ToWChar(wchar_t *dst, size_t dstLen, - const char *src, size_t srcLen = wxNO_LEN) const; - virtual size_t FromWChar(char *dst, size_t dstLen, - const wchar_t *src, size_t srcLen = wxNO_LEN) const; - virtual wxMBConv *Clone() const { return new wxMBConvUTF32BE; } -}; - -// ---------------------------------------------------------------------------- -// wxCSConv (for conversion based on loadable char sets) -// ---------------------------------------------------------------------------- - -#include "wx/fontenc.h" - -class WXDLLIMPEXP_BASE wxCSConv : public wxMBConv -{ -public: - // we can be created either from charset name or from an encoding constant - // but we can't have both at once - wxCSConv(const wxChar *charset); - wxCSConv(wxFontEncoding encoding); - - wxCSConv(const wxCSConv& conv); - virtual ~wxCSConv(); - - wxCSConv& operator=(const wxCSConv& conv); - - virtual size_t ToWChar(wchar_t *dst, size_t dstLen, - const char *src, size_t srcLen = wxNO_LEN) const; - virtual size_t FromWChar(char *dst, size_t dstLen, - const wchar_t *src, size_t srcLen = wxNO_LEN) const; - virtual size_t MB2WC(wchar_t *outputBuf, const char *psz, size_t outputSize) const; - virtual size_t WC2MB(char *outputBuf, const wchar_t *psz, size_t outputSize) const; - virtual size_t GetMBNulLen() const; - - virtual wxMBConv *Clone() const { return new wxCSConv(*this); } - - void Clear(); - -#if wxABI_VERSION >= 20802 - // return true if the conversion could be initilized successfully - bool IsOk() const; -#endif // wx 2.8.2+ - -private: - // common part of all ctors - void Init(); - - // creates m_convReal if necessary - void CreateConvIfNeeded() const; - - // do create m_convReal (unconditionally) - wxMBConv *DoCreate() const; - - // set the name (may be only called when m_name == NULL), makes copy of - // charset string - void SetName(const wxChar *charset); - - - // note that we can't use wxString here because of compilation - // dependencies: we're included from wx/string.h - wxChar *m_name; - wxFontEncoding m_encoding; - - // use CreateConvIfNeeded() before accessing m_convReal! - wxMBConv *m_convReal; - bool m_deferred; -}; - - -// ---------------------------------------------------------------------------- -// declare predefined conversion objects -// ---------------------------------------------------------------------------- - -// conversion to be used with all standard functions affected by locale, e.g. -// strtol(), strftime(), ... -extern WXDLLIMPEXP_DATA_BASE(wxMBConv&) wxConvLibc; - -// conversion ISO-8859-1/UTF-7/UTF-8 <-> wchar_t -extern WXDLLIMPEXP_DATA_BASE(wxCSConv&) wxConvISO8859_1; -extern WXDLLIMPEXP_DATA_BASE(wxMBConvUTF7&) wxConvUTF7; -extern WXDLLIMPEXP_DATA_BASE(wxMBConvUTF8&) wxConvUTF8; - -// conversion used for the file names on the systems where they're not Unicode -// (basically anything except Windows) -// -// this is used by all file functions, can be changed by the application -// -// by default UTF-8 under Mac OS X and wxConvLibc elsewhere (but it's not used -// under Windows normally) -extern WXDLLIMPEXP_DATA_BASE(wxMBConv *) wxConvFileName; - -// backwards compatible define -#define wxConvFile (*wxConvFileName) - -// the current conversion object, may be set to any conversion, is used by -// default in a couple of places inside wx (initially same as wxConvLibc) -extern WXDLLIMPEXP_DATA_BASE(wxMBConv *) wxConvCurrent; - -// the conversion corresponding to the current locale -extern WXDLLIMPEXP_DATA_BASE(wxCSConv&) wxConvLocal; - -// the conversion corresponding to the encoding of the standard UI elements -// -// by default this is the same as wxConvLocal but may be changed if the program -// needs to use a fixed encoding -extern WXDLLIMPEXP_DATA_BASE(wxMBConv *) wxConvUI; - -// ---------------------------------------------------------------------------- -// endianness-dependent conversions -// ---------------------------------------------------------------------------- - -#ifdef WORDS_BIGENDIAN - typedef wxMBConvUTF16BE wxMBConvUTF16; - typedef wxMBConvUTF32BE wxMBConvUTF32; -#else - typedef wxMBConvUTF16LE wxMBConvUTF16; - typedef wxMBConvUTF32LE wxMBConvUTF32; -#endif - -// ---------------------------------------------------------------------------- -// filename conversion macros -// ---------------------------------------------------------------------------- - -// filenames are multibyte on Unix and widechar on Windows -#if defined(__UNIX__) || defined(__WXMAC__) - #define wxMBFILES 1 -#else - #define wxMBFILES 0 -#endif - -#if wxMBFILES && wxUSE_UNICODE - #define wxFNCONV(name) wxConvFileName->cWX2MB(name) - #define wxFNSTRINGCAST wxMBSTRINGCAST -#else -#if defined( __WXOSX__ ) && wxMBFILES - #define wxFNCONV(name) wxConvFileName->cWC2MB( wxConvLocal.cWX2WC(name) ) -#else - #define wxFNCONV(name) name -#endif - #define wxFNSTRINGCAST WXSTRINGCAST -#endif - -#else // !wxUSE_WCHAR_T - -// ---------------------------------------------------------------------------- -// stand-ins in absence of wchar_t -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxMBConv -{ -public: - const char* cMB2WX(const char *psz) const { return psz; } - const char* cWX2MB(const char *psz) const { return psz; } - wxMBConv *Clone() const { return NULL; } -}; - -#define wxConvFile wxConvLocal -#define wxConvUI wxConvCurrent - -typedef wxMBConv wxCSConv; - -extern WXDLLIMPEXP_DATA_BASE(wxMBConv) wxConvLibc, - wxConvLocal, - wxConvISO8859_1, - wxConvUTF8; -extern WXDLLIMPEXP_DATA_BASE(wxMBConv *) wxConvCurrent; - -#define wxFNCONV(name) name -#define wxFNSTRINGCAST WXSTRINGCAST - -#endif // wxUSE_WCHAR_T/!wxUSE_WCHAR_T - -// ---------------------------------------------------------------------------- -// macros for the most common conversions -// ---------------------------------------------------------------------------- - -#if wxUSE_UNICODE - #define wxConvertWX2MB(s) wxConvCurrent->cWX2MB(s) - #define wxConvertMB2WX(s) wxConvCurrent->cMB2WX(s) - -#if wxABI_VERSION >= 20802 - // these functions should be used when the conversions really, really have - // to succeed (usually because we pass their results to a standard C - // function which would crash if we passed NULL to it), so these functions - // always return a valid pointer if their argument is non-NULL - - // this function safety is achieved by trying wxConvLibc first, wxConvUTF8 - // next if it fails and, finally, wxConvISO8859_1 which always succeeds - extern WXDLLIMPEXP_BASE wxWCharBuffer wxSafeConvertMB2WX(const char *s); - - // this function uses wxConvLibc and wxConvUTF8(MAP_INVALID_UTF8_TO_OCTAL) - // if it fails - extern WXDLLIMPEXP_BASE wxCharBuffer wxSafeConvertWX2MB(const wchar_t *ws); -#endif // wxABI 2.8.2+ -#else // ANSI - // no conversions to do - #define wxConvertWX2MB(s) (s) - #define wxConvertMB2WX(s) (s) - #define wxSafeConvertMB2WX(s) (s) - #define wxSafeConvertWX2MB(s) (s) -#endif // Unicode/ANSI - -#endif // _WX_STRCONV_H_ - diff --git a/desmume/src/windows/wx/include/wx/stream.h b/desmume/src/windows/wx/include/wx/stream.h deleted file mode 100644 index e61bc70cd..000000000 --- a/desmume/src/windows/wx/include/wx/stream.h +++ /dev/null @@ -1,609 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/stream.h -// Purpose: stream classes -// Author: Guilhem Lavaux, Guillermo Rodriguez Garcia, Vadim Zeitlin -// Modified by: -// Created: 11/07/98 -// RCS-ID: $Id: stream.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WXSTREAM_H__ -#define _WX_WXSTREAM_H__ - -#include "wx/defs.h" - -#if wxUSE_STREAMS - -#include <stdio.h> -#include "wx/object.h" -#include "wx/string.h" -#include "wx/filefn.h" // for wxFileOffset, wxInvalidOffset and wxSeekMode - -class WXDLLIMPEXP_FWD_BASE wxStreamBase; -class WXDLLIMPEXP_FWD_BASE wxInputStream; -class WXDLLIMPEXP_FWD_BASE wxOutputStream; - -typedef wxInputStream& (*__wxInputManip)(wxInputStream&); -typedef wxOutputStream& (*__wxOutputManip)(wxOutputStream&); - -WXDLLIMPEXP_BASE wxOutputStream& wxEndL(wxOutputStream& o_stream); - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -enum wxStreamError -{ - wxSTREAM_NO_ERROR = 0, // stream is in good state - wxSTREAM_EOF, // EOF reached in Read() or similar - wxSTREAM_WRITE_ERROR, // generic write error - wxSTREAM_READ_ERROR // generic read error -}; - -const int wxEOF = -1; - -// ============================================================================ -// base stream classes: wxInputStream and wxOutputStream -// ============================================================================ - -// --------------------------------------------------------------------------- -// wxStreamBase: common (but non virtual!) base for all stream classes -// --------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStreamBase -{ -public: - wxStreamBase(); - virtual ~wxStreamBase(); - - // error testing - wxStreamError GetLastError() const { return m_lasterror; } - virtual bool IsOk() const { return GetLastError() == wxSTREAM_NO_ERROR; } - bool operator!() const { return !IsOk(); } - - // reset the stream state - void Reset() { m_lasterror = wxSTREAM_NO_ERROR; } - - // this doesn't make sense for all streams, always test its return value - virtual size_t GetSize() const; - virtual wxFileOffset GetLength() const { return wxInvalidOffset; } - - // returns true if the streams supports seeking to arbitrary offsets - virtual bool IsSeekable() const { return false; } - -protected: - virtual wxFileOffset OnSysSeek(wxFileOffset seek, wxSeekMode mode); - virtual wxFileOffset OnSysTell() const; - - size_t m_lastcount; - wxStreamError m_lasterror; - - friend class wxStreamBuffer; - - DECLARE_NO_COPY_CLASS(wxStreamBase) -}; - -// ---------------------------------------------------------------------------- -// wxInputStream: base class for the input streams -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxInputStream : public wxStreamBase -{ -public: - // ctor and dtor, nothing exciting - wxInputStream(); - virtual ~wxInputStream(); - - - // IO functions - // ------------ - - // return a character from the stream without removing it, i.e. it will - // still be returned by the next call to GetC() - // - // blocks until something appears in the stream if necessary, if nothing - // ever does (i.e. EOF) LastRead() will return 0 (and the return value is - // undefined), otherwise 1 - virtual char Peek(); - - // return one byte from the stream, blocking until it appears if - // necessary - // - // on success returns a value between 0 - 255, or wxEOF on EOF or error. - int GetC(); - - // read at most the given number of bytes from the stream - // - // there are 2 possible situations here: either there is nothing at all in - // the stream right now in which case Read() blocks until something appears - // (use CanRead() to avoid this) or there is already some data available in - // the stream and then Read() doesn't block but returns just the data it - // can read without waiting for more - // - // in any case, if there are not enough bytes in the stream right now, - // LastRead() value will be less than size but greater than 0. If it is 0, - // it means that EOF has been reached. - virtual wxInputStream& Read(void *buffer, size_t size); - - // copy the entire contents of this stream into streamOut, stopping only - // when EOF is reached or an error occurs - wxInputStream& Read(wxOutputStream& streamOut); - - - // status functions - // ---------------- - - // returns the number of bytes read by the last call to Read(), GetC() or - // Peek() - // - // this should be used to discover whether that call succeeded in reading - // all the requested data or not - virtual size_t LastRead() const { return wxStreamBase::m_lastcount; } - - // returns true if some data is available in the stream right now, so that - // calling Read() wouldn't block - virtual bool CanRead() const; - - // is the stream at EOF? - // - // note that this cannot be really implemented for all streams and - // CanRead() is more reliable than Eof() - virtual bool Eof() const; - - - // write back buffer - // ----------------- - - // put back the specified number of bytes into the stream, they will be - // fetched by the next call to the read functions - // - // returns the number of bytes really stuffed back - size_t Ungetch(const void *buffer, size_t size); - - // put back the specified character in the stream - // - // returns true if ok, false on error - bool Ungetch(char c); - - - // position functions - // ------------------ - - // move the stream pointer to the given position (if the stream supports - // it) - // - // returns wxInvalidOffset on error - virtual wxFileOffset SeekI(wxFileOffset pos, wxSeekMode mode = wxFromStart); - - // return the current position of the stream pointer or wxInvalidOffset - virtual wxFileOffset TellI() const; - - - // stream-like operators - // --------------------- - - wxInputStream& operator>>(wxOutputStream& out) { return Read(out); } - wxInputStream& operator>>(__wxInputManip func) { return func(*this); } - -protected: - // do read up to size bytes of data into the provided buffer - // - // this method should return 0 if EOF has been reached or an error occurred - // (m_lasterror should be set accordingly as well) or the number of bytes - // read - virtual size_t OnSysRead(void *buffer, size_t size) = 0; - - // write-back buffer support - // ------------------------- - - // return the pointer to a buffer big enough to hold sizeNeeded bytes - char *AllocSpaceWBack(size_t sizeNeeded); - - // read up to size data from the write back buffer, return the number of - // bytes read - size_t GetWBack(void *buf, size_t size); - - // write back buffer or NULL if none - char *m_wback; - - // the size of the buffer - size_t m_wbacksize; - - // the current position in the buffer - size_t m_wbackcur; - - friend class wxStreamBuffer; - - DECLARE_NO_COPY_CLASS(wxInputStream) -}; - -// ---------------------------------------------------------------------------- -// wxOutputStream: base for the output streams -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxOutputStream : public wxStreamBase -{ -public: - wxOutputStream(); - virtual ~wxOutputStream(); - - void PutC(char c); - virtual wxOutputStream& Write(const void *buffer, size_t size); - wxOutputStream& Write(wxInputStream& stream_in); - - virtual wxFileOffset SeekO(wxFileOffset pos, wxSeekMode mode = wxFromStart); - virtual wxFileOffset TellO() const; - - virtual size_t LastWrite() const { return wxStreamBase::m_lastcount; } - - virtual void Sync(); - virtual bool Close() { return true; } - - wxOutputStream& operator<<(wxInputStream& out) { return Write(out); } - wxOutputStream& operator<<( __wxOutputManip func) { return func(*this); } - -protected: - // to be implemented in the derived classes (it should have been pure - // virtual) - virtual size_t OnSysWrite(const void *buffer, size_t bufsize); - - friend class wxStreamBuffer; - - DECLARE_NO_COPY_CLASS(wxOutputStream) -}; - -// ============================================================================ -// helper stream classes -// ============================================================================ - -// --------------------------------------------------------------------------- -// A stream for measuring streamed output -// --------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxCountingOutputStream : public wxOutputStream -{ -public: - wxCountingOutputStream(); - - wxFileOffset GetLength() const; - bool Ok() const { return IsOk(); } - bool IsOk() const { return true; } - -protected: - virtual size_t OnSysWrite(const void *buffer, size_t size); - virtual wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); - virtual wxFileOffset OnSysTell() const; - - size_t m_currentPos; - - DECLARE_NO_COPY_CLASS(wxCountingOutputStream) -}; - -// --------------------------------------------------------------------------- -// "Filter" streams -// --------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFilterInputStream : public wxInputStream -{ -public: - wxFilterInputStream(); - wxFilterInputStream(wxInputStream& stream); - wxFilterInputStream(wxInputStream *stream); - virtual ~wxFilterInputStream(); - - char Peek() { return m_parent_i_stream->Peek(); } - - wxFileOffset GetLength() const { return m_parent_i_stream->GetLength(); } - - wxInputStream *GetFilterInputStream() const { return m_parent_i_stream; } - -protected: - wxInputStream *m_parent_i_stream; - bool m_owns; - - DECLARE_NO_COPY_CLASS(wxFilterInputStream) -}; - -class WXDLLIMPEXP_BASE wxFilterOutputStream : public wxOutputStream -{ -public: - wxFilterOutputStream(); - wxFilterOutputStream(wxOutputStream& stream); - wxFilterOutputStream(wxOutputStream *stream); - virtual ~wxFilterOutputStream(); - - wxFileOffset GetLength() const { return m_parent_o_stream->GetLength(); } - - wxOutputStream *GetFilterOutputStream() const { return m_parent_o_stream; } - - bool Close(); - -protected: - wxOutputStream *m_parent_o_stream; - bool m_owns; - - DECLARE_NO_COPY_CLASS(wxFilterOutputStream) -}; - -enum wxStreamProtocolType -{ - wxSTREAM_PROTOCOL, // wxFileSystem protocol (should be only one) - wxSTREAM_MIMETYPE, // MIME types the stream handles - wxSTREAM_ENCODING, // The HTTP Content-Encodings the stream handles - wxSTREAM_FILEEXT // File extensions the stream handles -}; - -void WXDLLIMPEXP_BASE wxUseFilterClasses(); - -class WXDLLIMPEXP_BASE wxFilterClassFactoryBase : public wxObject -{ -public: - virtual ~wxFilterClassFactoryBase() { } - - wxString GetProtocol() const { return wxString(*GetProtocols()); } - wxString PopExtension(const wxString& location) const; - - virtual const wxChar * const *GetProtocols(wxStreamProtocolType type - = wxSTREAM_PROTOCOL) const = 0; - - bool CanHandle(const wxChar *protocol, - wxStreamProtocolType type - = wxSTREAM_PROTOCOL) const; - -protected: - wxString::size_type FindExtension(const wxChar *location) const; - - DECLARE_ABSTRACT_CLASS(wxFilterClassFactoryBase) -}; - -class WXDLLIMPEXP_BASE wxFilterClassFactory : public wxFilterClassFactoryBase -{ -public: - virtual ~wxFilterClassFactory() { } - - virtual wxFilterInputStream *NewStream(wxInputStream& stream) const = 0; - virtual wxFilterOutputStream *NewStream(wxOutputStream& stream) const = 0; - virtual wxFilterInputStream *NewStream(wxInputStream *stream) const = 0; - virtual wxFilterOutputStream *NewStream(wxOutputStream *stream) const = 0; - - static const wxFilterClassFactory *Find(const wxChar *protocol, - wxStreamProtocolType type - = wxSTREAM_PROTOCOL); - - static const wxFilterClassFactory *GetFirst(); - const wxFilterClassFactory *GetNext() const { return m_next; } - - void PushFront() { Remove(); m_next = sm_first; sm_first = this; } - void Remove(); - -protected: - wxFilterClassFactory() : m_next(this) { } - - wxFilterClassFactory& operator=(const wxFilterClassFactory&) - { return *this; } - -private: - static wxFilterClassFactory *sm_first; - wxFilterClassFactory *m_next; - - DECLARE_ABSTRACT_CLASS(wxFilterClassFactory) -}; - -// ============================================================================ -// buffered streams -// ============================================================================ - -// --------------------------------------------------------------------------- -// Stream buffer: this class can be derived from and passed to -// wxBufferedStreams to implement custom buffering -// --------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStreamBuffer -{ -public: - enum BufMode - { - read, - write, - read_write - }; - - wxStreamBuffer(wxStreamBase& stream, BufMode mode); - wxStreamBuffer(const wxStreamBuffer& buf); - virtual ~wxStreamBuffer(); - - // Filtered IO - virtual size_t Read(void *buffer, size_t size); - size_t Read(wxStreamBuffer *buf); - virtual size_t Write(const void *buffer, size_t size); - size_t Write(wxStreamBuffer *buf); - - virtual char Peek(); - virtual char GetChar(); - virtual void PutChar(char c); - virtual wxFileOffset Tell() const; - virtual wxFileOffset Seek(wxFileOffset pos, wxSeekMode mode); - - // Buffer control - void ResetBuffer(); - - // NB: the buffer must always be allocated with malloc() if takeOwn is - // true as it will be deallocated by free() - void SetBufferIO(void *start, void *end, bool takeOwnership = false); - void SetBufferIO(void *start, size_t len, bool takeOwnership = false); - void SetBufferIO(size_t bufsize); - void *GetBufferStart() const { return m_buffer_start; } - void *GetBufferEnd() const { return m_buffer_end; } - void *GetBufferPos() const { return m_buffer_pos; } - size_t GetBufferSize() const { return m_buffer_size; } - size_t GetIntPosition() const { return m_buffer_pos - m_buffer_start; } - void SetIntPosition(size_t pos) { m_buffer_pos = m_buffer_start + pos; } - size_t GetLastAccess() const { return m_buffer_end - m_buffer_start; } - size_t GetBytesLeft() const { return m_buffer_end - m_buffer_pos; } - - void Fixed(bool fixed) { m_fixed = fixed; } - void Flushable(bool f) { m_flushable = f; } - - bool FlushBuffer(); - bool FillBuffer(); - size_t GetDataLeft(); - - // misc accessors - wxStreamBase *GetStream() const { return m_stream; } - bool HasBuffer() const { return m_buffer_size != 0; } - - bool IsFixed() const { return m_fixed; } - bool IsFlushable() const { return m_flushable; } - - // only for input/output buffers respectively, returns NULL otherwise - wxInputStream *GetInputStream() const; - wxOutputStream *GetOutputStream() const; - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, for compatibility only - wxDEPRECATED( wxStreamBase *Stream() ); -#endif // WXWIN_COMPATIBILITY_2_6 - - // this constructs a dummy wxStreamBuffer, used by (and exists for) - // wxMemoryStreams only, don't use! - wxStreamBuffer(BufMode mode); - -protected: - void GetFromBuffer(void *buffer, size_t size); - void PutToBuffer(const void *buffer, size_t size); - - // set the last error to the specified value if we didn't have it before - void SetError(wxStreamError err); - - // common part of several ctors - void Init(); - - // init buffer variables to be empty - void InitBuffer(); - - // free the buffer (always safe to call) - void FreeBuffer(); - - // the buffer itself: the pointers to its start and end and the current - // position in the buffer - char *m_buffer_start, - *m_buffer_end, - *m_buffer_pos; - - // the buffer size - // FIXME: isn't it the same as m_buffer_end - m_buffer_start? (VZ) - size_t m_buffer_size; - - // the stream we're associated with - wxStreamBase *m_stream; - - // its mode - BufMode m_mode; - - // flags - bool m_destroybuf, // deallocate buffer? - m_fixed, - m_flushable; - -private: -// Cannot use -// DECLARE_NO_COPY_CLASS(wxStreamBuffer) -// because copy constructor is explicitly declared above; -// but no copy assignment operator is defined, so declare -// it private to prevent the compiler from defining it: - wxStreamBuffer& operator=(const wxStreamBuffer&); -}; - -// --------------------------------------------------------------------------- -// wxBufferedInputStream -// --------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxBufferedInputStream : public wxFilterInputStream -{ -public: - // if a non NULL buffer is given to the stream, it will be deleted by it - wxBufferedInputStream(wxInputStream& stream, - wxStreamBuffer *buffer = NULL); - virtual ~wxBufferedInputStream(); - - char Peek(); - wxInputStream& Read(void *buffer, size_t size); - - // Position functions - wxFileOffset SeekI(wxFileOffset pos, wxSeekMode mode = wxFromStart); - wxFileOffset TellI() const; - bool IsSeekable() const { return m_parent_i_stream->IsSeekable(); } - - // the buffer given to the stream will be deleted by it - void SetInputStreamBuffer(wxStreamBuffer *buffer); - wxStreamBuffer *GetInputStreamBuffer() const { return m_i_streambuf; } - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, for compatibility only - wxDEPRECATED( wxStreamBuffer *InputStreamBuffer() const ); -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - virtual size_t OnSysRead(void *buffer, size_t bufsize); - virtual wxFileOffset OnSysSeek(wxFileOffset seek, wxSeekMode mode); - virtual wxFileOffset OnSysTell() const; - - wxStreamBuffer *m_i_streambuf; - - DECLARE_NO_COPY_CLASS(wxBufferedInputStream) -}; - -// ---------------------------------------------------------------------------- -// wxBufferedOutputStream -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxBufferedOutputStream : public wxFilterOutputStream -{ -public: - // if a non NULL buffer is given to the stream, it will be deleted by it - wxBufferedOutputStream(wxOutputStream& stream, - wxStreamBuffer *buffer = NULL); - virtual ~wxBufferedOutputStream(); - - wxOutputStream& Write(const void *buffer, size_t size); - - // Position functions - wxFileOffset SeekO(wxFileOffset pos, wxSeekMode mode = wxFromStart); - wxFileOffset TellO() const; - bool IsSeekable() const { return m_parent_o_stream->IsSeekable(); } - - void Sync(); - bool Close(); - - wxFileOffset GetLength() const; - - // the buffer given to the stream will be deleted by it - void SetOutputStreamBuffer(wxStreamBuffer *buffer); - wxStreamBuffer *GetOutputStreamBuffer() const { return m_o_streambuf; } - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated, for compatibility only - wxDEPRECATED( wxStreamBuffer *OutputStreamBuffer() const ); -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - virtual size_t OnSysWrite(const void *buffer, size_t bufsize); - virtual wxFileOffset OnSysSeek(wxFileOffset seek, wxSeekMode mode); - virtual wxFileOffset OnSysTell() const; - - wxStreamBuffer *m_o_streambuf; - - DECLARE_NO_COPY_CLASS(wxBufferedOutputStream) -}; - -#if WXWIN_COMPATIBILITY_2_6 - inline wxStreamBase *wxStreamBuffer::Stream() { return m_stream; } - inline wxStreamBuffer *wxBufferedInputStream::InputStreamBuffer() const { return m_i_streambuf; } - inline wxStreamBuffer *wxBufferedOutputStream::OutputStreamBuffer() const { return m_o_streambuf; } -#endif // WXWIN_COMPATIBILITY_2_6 - -#endif // wxUSE_STREAMS - -#endif // _WX_WXSTREAM_H__ diff --git a/desmume/src/windows/wx/include/wx/string.h b/desmume/src/windows/wx/include/wx/string.h deleted file mode 100644 index 7a57f24a8..000000000 --- a/desmume/src/windows/wx/include/wx/string.h +++ /dev/null @@ -1,1653 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/string.h -// Purpose: wxString and wxArrayString classes -// Author: Vadim Zeitlin -// Modified by: -// Created: 29/01/98 -// RCS-ID: $Id: string.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -/* - Efficient string class [more or less] compatible with MFC CString, - wxWidgets version 1 wxString and std::string and some handy functions - missing from string.h. -*/ - -#ifndef _WX_WXSTRINGH__ -#define _WX_WXSTRINGH__ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" // everybody should include this - -#if defined(__WXMAC__) || defined(__VISAGECPP__) - #include <ctype.h> -#endif - -#if defined(__VISAGECPP__) && __IBMCPP__ >= 400 - // problem in VACPP V4 with including stdlib.h multiple times - // strconv includes it anyway -# include <stdio.h> -# include <string.h> -# include <stdarg.h> -# include <limits.h> -#else -# include <string.h> -# include <stdio.h> -# include <stdarg.h> -# include <limits.h> -# include <stdlib.h> -#endif - -#ifdef HAVE_STRCASECMP_IN_STRINGS_H - #include <strings.h> // for strcasecmp() -#endif // HAVE_STRCASECMP_IN_STRINGS_H - -#ifdef __WXPALMOS__ - #include <StringMgr.h> -#endif - -#include "wx/wxchar.h" // for wxChar -#include "wx/buffer.h" // for wxCharBuffer -#include "wx/strconv.h" // for wxConvertXXX() macros and wxMBConv classes - -class WXDLLIMPEXP_FWD_BASE wxString; - -// --------------------------------------------------------------------------- -// macros -// --------------------------------------------------------------------------- - -// casts [unfortunately!] needed to call some broken functions which require -// "char *" instead of "const char *" -#define WXSTRINGCAST (wxChar *)(const wxChar *) -#define wxCSTRINGCAST (wxChar *)(const wxChar *) -#define wxMBSTRINGCAST (char *)(const char *) -#define wxWCSTRINGCAST (wchar_t *)(const wchar_t *) - -// implementation only -#define wxASSERT_VALID_INDEX(i) \ - wxASSERT_MSG( (size_t)(i) <= length(), _T("invalid index in wxString") ) - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -#if WXWIN_COMPATIBILITY_2_6 - -// deprecated in favour of wxString::npos, don't use in new code -// -// maximum possible length for a string means "take all string" everywhere -#define wxSTRING_MAXLEN wxStringBase::npos - -#endif // WXWIN_COMPATIBILITY_2_6 - -// ---------------------------------------------------------------------------- -// global data -// ---------------------------------------------------------------------------- - -// global pointer to empty string -extern WXDLLIMPEXP_DATA_BASE(const wxChar*) wxEmptyString; - -// --------------------------------------------------------------------------- -// global functions complementing standard C string library replacements for -// strlen() and portable strcasecmp() -//--------------------------------------------------------------------------- - -// Use wxXXX() functions from wxchar.h instead! These functions are for -// backwards compatibility only. - -// checks whether the passed in pointer is NULL and if the string is empty -inline bool IsEmpty(const char *p) { return (!p || !*p); } - -// safe version of strlen() (returns 0 if passed NULL pointer) -inline size_t Strlen(const char *psz) - { return psz ? strlen(psz) : 0; } - -// portable strcasecmp/_stricmp -inline int Stricmp(const char *psz1, const char *psz2) -{ -#if defined(__VISUALC__) && defined(__WXWINCE__) - register char c1, c2; - do { - c1 = tolower(*psz1++); - c2 = tolower(*psz2++); - } while ( c1 && (c1 == c2) ); - - return c1 - c2; -#elif defined(__VISUALC__) || ( defined(__MWERKS__) && defined(__INTEL__) ) - return _stricmp(psz1, psz2); -#elif defined(__SC__) - return _stricmp(psz1, psz2); -#elif defined(__SALFORDC__) - return stricmp(psz1, psz2); -#elif defined(__BORLANDC__) - return stricmp(psz1, psz2); -#elif defined(__WATCOMC__) - return stricmp(psz1, psz2); -#elif defined(__DJGPP__) - return stricmp(psz1, psz2); -#elif defined(__EMX__) - return stricmp(psz1, psz2); -#elif defined(__WXPM__) - return stricmp(psz1, psz2); -#elif defined(__WXPALMOS__) || \ - defined(HAVE_STRCASECMP_IN_STRING_H) || \ - defined(HAVE_STRCASECMP_IN_STRINGS_H) || \ - defined(__GNUWIN32__) - return strcasecmp(psz1, psz2); -#elif defined(__MWERKS__) && !defined(__INTEL__) - register char c1, c2; - do { - c1 = tolower(*psz1++); - c2 = tolower(*psz2++); - } while ( c1 && (c1 == c2) ); - - return c1 - c2; -#else - // almost all compilers/libraries provide this function (unfortunately under - // different names), that's why we don't implement our own which will surely - // be more efficient than this code (uncomment to use): - /* - register char c1, c2; - do { - c1 = tolower(*psz1++); - c2 = tolower(*psz2++); - } while ( c1 && (c1 == c2) ); - - return c1 - c2; - */ - - #error "Please define string case-insensitive compare for your OS/compiler" -#endif // OS/compiler -} - -// ---------------------------------------------------------------------------- -// deal with STL/non-STL/non-STL-but-wxUSE_STD_STRING -// ---------------------------------------------------------------------------- - -// in both cases we need to define wxStdString -#if wxUSE_STL || wxUSE_STD_STRING - -#include "wx/beforestd.h" -#include <string> -#include "wx/afterstd.h" - -#if wxUSE_UNICODE - #ifdef HAVE_STD_WSTRING - typedef std::wstring wxStdString; - #else - typedef std::basic_string<wxChar> wxStdString; - #endif -#else - typedef std::string wxStdString; -#endif - -#endif // need <string> - -#if wxUSE_STL - - // we don't need an extra ctor from std::string when copy ctor already does - // the work - #undef wxUSE_STD_STRING - #define wxUSE_STD_STRING 0 - - #if (defined(__GNUG__) && (__GNUG__ < 3)) || \ - (defined(_MSC_VER) && (_MSC_VER <= 1200)) - #define wxSTRING_BASE_HASNT_CLEAR - #endif - - typedef wxStdString wxStringBase; -#else // if !wxUSE_STL - -#if !defined(HAVE_STD_STRING_COMPARE) && \ - (!defined(__WX_SETUP_H__) || wxUSE_STL == 0) - #define HAVE_STD_STRING_COMPARE -#endif - -// --------------------------------------------------------------------------- -// string data prepended with some housekeeping info (used by wxString class), -// is never used directly (but had to be put here to allow inlining) -// --------------------------------------------------------------------------- - -struct WXDLLIMPEXP_BASE wxStringData -{ - int nRefs; // reference count - size_t nDataLength, // actual string length - nAllocLength; // allocated memory size - - // mimics declaration 'wxChar data[nAllocLength]' - wxChar* data() const { return (wxChar*)(this + 1); } - - // empty string has a special ref count so it's never deleted - bool IsEmpty() const { return (nRefs == -1); } - bool IsShared() const { return (nRefs > 1); } - - // lock/unlock - void Lock() { if ( !IsEmpty() ) nRefs++; } - - // VC++ will refuse to inline Unlock but profiling shows that it is wrong -#if defined(__VISUALC__) && (__VISUALC__ >= 1200) - __forceinline -#endif - // VC++ free must take place in same DLL as allocation when using non dll - // run-time library (e.g. Multithreaded instead of Multithreaded DLL) -#if defined(__VISUALC__) && defined(_MT) && !defined(_DLL) - void Unlock() { if ( !IsEmpty() && --nRefs == 0) Free(); } - // we must not inline deallocation since allocation is not inlined - void Free(); -#else - void Unlock() { if ( !IsEmpty() && --nRefs == 0) free(this); } -#endif - - // if we had taken control over string memory (GetWriteBuf), it's - // intentionally put in invalid state - void Validate(bool b) { nRefs = (b ? 1 : 0); } - bool IsValid() const { return (nRefs != 0); } -}; - -class WXDLLIMPEXP_BASE wxStringBase -{ -#if !wxUSE_STL -friend class WXDLLIMPEXP_FWD_BASE wxArrayString; -#endif -public : - // an 'invalid' value for string index, moved to this place due to a CW bug - static const size_t npos; -protected: - // points to data preceded by wxStringData structure with ref count info - wxChar *m_pchData; - - // accessor to string data - wxStringData* GetStringData() const { return (wxStringData*)m_pchData - 1; } - - // string (re)initialization functions - // initializes the string to the empty value (must be called only from - // ctors, use Reinit() otherwise) - void Init() { m_pchData = (wxChar *)wxEmptyString; } - // initializes the string with (a part of) C-string - void InitWith(const wxChar *psz, size_t nPos = 0, size_t nLen = npos); - // as Init, but also frees old data - void Reinit() { GetStringData()->Unlock(); Init(); } - - // memory allocation - // allocates memory for string of length nLen - bool AllocBuffer(size_t nLen); - // copies data to another string - bool AllocCopy(wxString&, int, int) const; - // effectively copies data to string - bool AssignCopy(size_t, const wxChar *); - - // append a (sub)string - bool ConcatSelf(size_t nLen, const wxChar *src, size_t nMaxLen); - bool ConcatSelf(size_t nLen, const wxChar *src) - { return ConcatSelf(nLen, src, nLen); } - - // functions called before writing to the string: they copy it if there - // are other references to our data (should be the only owner when writing) - bool CopyBeforeWrite(); - bool AllocBeforeWrite(size_t); - - // compatibility with wxString - bool Alloc(size_t nLen); -public: - // standard types - typedef wxChar value_type; - typedef wxChar char_type; - typedef size_t size_type; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type *iterator; - typedef const value_type *const_iterator; - -#define wxSTRING_REVERSE_ITERATOR(name, const_or_not) \ - class name \ - { \ - public: \ - typedef wxChar value_type; \ - typedef const_or_not value_type& reference; \ - typedef const_or_not value_type *pointer; \ - typedef const_or_not value_type *iterator_type; \ - \ - name(iterator_type i) : m_cur(i) { } \ - name(const name& ri) : m_cur(ri.m_cur) { } \ - \ - iterator_type base() const { return m_cur; } \ - \ - reference operator*() const { return *(m_cur - 1); } \ - \ - name& operator++() { --m_cur; return *this; } \ - name operator++(int) { name tmp = *this; --m_cur; return tmp; } \ - name& operator--() { ++m_cur; return *this; } \ - name operator--(int) { name tmp = *this; ++m_cur; return tmp; } \ - \ - bool operator==(name ri) const { return m_cur == ri.m_cur; } \ - bool operator!=(name ri) const { return !(*this == ri); } \ - \ - private: \ - iterator_type m_cur; \ - } - - wxSTRING_REVERSE_ITERATOR(const_reverse_iterator, const); - - #define wxSTRING_CONST - wxSTRING_REVERSE_ITERATOR(reverse_iterator, wxSTRING_CONST); - #undef wxSTRING_CONST - - #undef wxSTRING_REVERSE_ITERATOR - - - // constructors and destructor - // ctor for an empty string - wxStringBase() { Init(); } - // copy ctor - wxStringBase(const wxStringBase& stringSrc) - { - wxASSERT_MSG( stringSrc.GetStringData()->IsValid(), - _T("did you forget to call UngetWriteBuf()?") ); - - if ( stringSrc.empty() ) { - // nothing to do for an empty string - Init(); - } - else { - m_pchData = stringSrc.m_pchData; // share same data - GetStringData()->Lock(); // => one more copy - } - } - // string containing nRepeat copies of ch - wxStringBase(size_type nRepeat, wxChar ch); - // ctor takes first nLength characters from C string - // (default value of npos means take all the string) - wxStringBase(const wxChar *psz) - { InitWith(psz, 0, npos); } - wxStringBase(const wxChar *psz, size_t nLength) - { InitWith(psz, 0, nLength); } - wxStringBase(const wxChar *psz, - const wxMBConv& WXUNUSED(conv), - size_t nLength = npos) - { InitWith(psz, 0, nLength); } - // take nLen chars starting at nPos - wxStringBase(const wxStringBase& str, size_t nPos, size_t nLen) - { - wxASSERT_MSG( str.GetStringData()->IsValid(), - _T("did you forget to call UngetWriteBuf()?") ); - Init(); - size_t strLen = str.length() - nPos; nLen = strLen < nLen ? strLen : nLen; - InitWith(str.c_str(), nPos, nLen); - } - // take all characters from pStart to pEnd - wxStringBase(const void *pStart, const void *pEnd); - - // dtor is not virtual, this class must not be inherited from! - ~wxStringBase() - { -#if defined(__VISUALC__) && (__VISUALC__ >= 1200) - //RN - according to the above VC++ does indeed inline this, - //even though it spits out two warnings - #pragma warning (disable:4714) -#endif - - GetStringData()->Unlock(); - } - -#if defined(__VISUALC__) && (__VISUALC__ >= 1200) - //re-enable inlining warning - #pragma warning (default:4714) -#endif - // overloaded assignment - // from another wxString - wxStringBase& operator=(const wxStringBase& stringSrc); - // from a character - wxStringBase& operator=(wxChar ch); - // from a C string - wxStringBase& operator=(const wxChar *psz); - - // return the length of the string - size_type length() const { return GetStringData()->nDataLength; } - // return the length of the string - size_type size() const { return length(); } - // return the maximum size of the string - size_type max_size() const { return npos; } - // resize the string, filling the space with c if c != 0 - void resize(size_t nSize, wxChar ch = wxT('\0')); - // delete the contents of the string - void clear() { erase(0, npos); } - // returns true if the string is empty - bool empty() const { return length() == 0; } - // inform string about planned change in size - void reserve(size_t sz) { Alloc(sz); } - size_type capacity() const { return GetStringData()->nAllocLength; } - - // lib.string.access - // return the character at position n - value_type at(size_type n) const - { wxASSERT_VALID_INDEX( n ); return m_pchData[n]; } - // returns the writable character at position n - reference at(size_type n) - { wxASSERT_VALID_INDEX( n ); CopyBeforeWrite(); return m_pchData[n]; } - - // lib.string.modifiers - // append elements str[pos], ..., str[pos+n] - wxStringBase& append(const wxStringBase& str, size_t pos, size_t n) - { - wxASSERT(pos <= str.length()); - ConcatSelf(n, str.c_str() + pos, str.length() - pos); - return *this; - } - // append a string - wxStringBase& append(const wxStringBase& str) - { ConcatSelf(str.length(), str.c_str()); return *this; } - // append first n (or all if n == npos) characters of sz - wxStringBase& append(const wxChar *sz) - { ConcatSelf(wxStrlen(sz), sz); return *this; } - wxStringBase& append(const wxChar *sz, size_t n) - { ConcatSelf(n, sz); return *this; } - // append n copies of ch - wxStringBase& append(size_t n, wxChar ch); - // append from first to last - wxStringBase& append(const_iterator first, const_iterator last) - { ConcatSelf(last - first, first); return *this; } - - // same as `this_string = str' - wxStringBase& assign(const wxStringBase& str) - { return *this = str; } - // same as ` = str[pos..pos + n] - wxStringBase& assign(const wxStringBase& str, size_t pos, size_t n) - { clear(); return append(str, pos, n); } - // same as `= first n (or all if n == npos) characters of sz' - wxStringBase& assign(const wxChar *sz) - { clear(); return append(sz, wxStrlen(sz)); } - wxStringBase& assign(const wxChar *sz, size_t n) - { clear(); return append(sz, n); } - // same as `= n copies of ch' - wxStringBase& assign(size_t n, wxChar ch) - { clear(); return append(n, ch); } - // assign from first to last - wxStringBase& assign(const_iterator first, const_iterator last) - { clear(); return append(first, last); } - - // first valid index position - const_iterator begin() const { return m_pchData; } - iterator begin(); - // position one after the last valid one - const_iterator end() const { return m_pchData + length(); } - iterator end(); - - // first element of the reversed string - const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } - reverse_iterator rbegin() { return reverse_iterator(end()); } - // one beyond the end of the reversed string - const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } - reverse_iterator rend() { return reverse_iterator(begin()); } - - // insert another string - wxStringBase& insert(size_t nPos, const wxStringBase& str) - { - wxASSERT( str.GetStringData()->IsValid() ); - return insert(nPos, str.c_str(), str.length()); - } - // insert n chars of str starting at nStart (in str) - wxStringBase& insert(size_t nPos, const wxStringBase& str, size_t nStart, size_t n) - { - wxASSERT( str.GetStringData()->IsValid() ); - wxASSERT( nStart < str.length() ); - size_t strLen = str.length() - nStart; - n = strLen < n ? strLen : n; - return insert(nPos, str.c_str() + nStart, n); - } - // insert first n (or all if n == npos) characters of sz - wxStringBase& insert(size_t nPos, const wxChar *sz, size_t n = npos); - // insert n copies of ch - wxStringBase& insert(size_t nPos, size_t n, wxChar ch) - { return insert(nPos, wxStringBase(n, ch)); } - iterator insert(iterator it, wxChar ch) - { size_t idx = it - begin(); insert(idx, 1, ch); return begin() + idx; } - void insert(iterator it, const_iterator first, const_iterator last) - { insert(it - begin(), first, last - first); } - void insert(iterator it, size_type n, wxChar ch) - { insert(it - begin(), n, ch); } - - // delete characters from nStart to nStart + nLen - wxStringBase& erase(size_type pos = 0, size_type n = npos); - iterator erase(iterator first, iterator last) - { - size_t idx = first - begin(); - erase(idx, last - first); - return begin() + idx; - } - iterator erase(iterator first); - - // explicit conversion to C string (use this with printf()!) - const wxChar* c_str() const { return m_pchData; } - const wxChar* data() const { return m_pchData; } - - // replaces the substring of length nLen starting at nStart - wxStringBase& replace(size_t nStart, size_t nLen, const wxChar* sz); - // replaces the substring of length nLen starting at nStart - wxStringBase& replace(size_t nStart, size_t nLen, const wxStringBase& str) - { return replace(nStart, nLen, str.c_str()); } - // replaces the substring with nCount copies of ch - wxStringBase& replace(size_t nStart, size_t nLen, size_t nCount, wxChar ch); - // replaces a substring with another substring - wxStringBase& replace(size_t nStart, size_t nLen, - const wxStringBase& str, size_t nStart2, size_t nLen2); - // replaces the substring with first nCount chars of sz - wxStringBase& replace(size_t nStart, size_t nLen, - const wxChar* sz, size_t nCount); - wxStringBase& replace(iterator first, iterator last, const_pointer s) - { return replace(first - begin(), last - first, s); } - wxStringBase& replace(iterator first, iterator last, const_pointer s, - size_type n) - { return replace(first - begin(), last - first, s, n); } - wxStringBase& replace(iterator first, iterator last, const wxStringBase& s) - { return replace(first - begin(), last - first, s); } - wxStringBase& replace(iterator first, iterator last, size_type n, wxChar c) - { return replace(first - begin(), last - first, n, c); } - wxStringBase& replace(iterator first, iterator last, - const_iterator first1, const_iterator last1) - { return replace(first - begin(), last - first, first1, last1 - first1); } - - // swap two strings - void swap(wxStringBase& str); - - // All find() functions take the nStart argument which specifies the - // position to start the search on, the default value is 0. All functions - // return npos if there were no match. - - // find a substring - size_t find(const wxStringBase& str, size_t nStart = 0) const; - - // find first n characters of sz - size_t find(const wxChar* sz, size_t nStart = 0, size_t n = npos) const; - - // find the first occurence of character ch after nStart - size_t find(wxChar ch, size_t nStart = 0) const; - - // rfind() family is exactly like find() but works right to left - - // as find, but from the end - size_t rfind(const wxStringBase& str, size_t nStart = npos) const; - - // as find, but from the end - size_t rfind(const wxChar* sz, size_t nStart = npos, - size_t n = npos) const; - // as find, but from the end - size_t rfind(wxChar ch, size_t nStart = npos) const; - - // find first/last occurence of any character in the set - - // as strpbrk() but starts at nStart, returns npos if not found - size_t find_first_of(const wxStringBase& str, size_t nStart = 0) const - { return find_first_of(str.c_str(), nStart); } - // same as above - size_t find_first_of(const wxChar* sz, size_t nStart = 0) const; - size_t find_first_of(const wxChar* sz, size_t nStart, size_t n) const; - // same as find(char, size_t) - size_t find_first_of(wxChar c, size_t nStart = 0) const - { return find(c, nStart); } - // find the last (starting from nStart) char from str in this string - size_t find_last_of (const wxStringBase& str, size_t nStart = npos) const - { return find_last_of(str.c_str(), nStart); } - // same as above - size_t find_last_of (const wxChar* sz, size_t nStart = npos) const; - size_t find_last_of(const wxChar* sz, size_t nStart, size_t n) const; - // same as above - size_t find_last_of(wxChar c, size_t nStart = npos) const - { return rfind(c, nStart); } - - // find first/last occurence of any character not in the set - - // as strspn() (starting from nStart), returns npos on failure - size_t find_first_not_of(const wxStringBase& str, size_t nStart = 0) const - { return find_first_not_of(str.c_str(), nStart); } - // same as above - size_t find_first_not_of(const wxChar* sz, size_t nStart = 0) const; - size_t find_first_not_of(const wxChar* sz, size_t nStart, size_t n) const; - // same as above - size_t find_first_not_of(wxChar ch, size_t nStart = 0) const; - // as strcspn() - size_t find_last_not_of(const wxStringBase& str, size_t nStart = npos) const - { return find_last_not_of(str.c_str(), nStart); } - // same as above - size_t find_last_not_of(const wxChar* sz, size_t nStart = npos) const; - size_t find_last_not_of(const wxChar* sz, size_t nStart, size_t n) const; - // same as above - size_t find_last_not_of(wxChar ch, size_t nStart = npos) const; - - // All compare functions return -1, 0 or 1 if the [sub]string is less, - // equal or greater than the compare() argument. - - // comparison with another string - int compare(const wxStringBase& str) const; - // comparison with a substring - int compare(size_t nStart, size_t nLen, const wxStringBase& str) const; - // comparison of 2 substrings - int compare(size_t nStart, size_t nLen, - const wxStringBase& str, size_t nStart2, size_t nLen2) const; - // comparison with a c string - int compare(const wxChar* sz) const; - // substring comparison with first nCount characters of sz - int compare(size_t nStart, size_t nLen, - const wxChar* sz, size_t nCount = npos) const; - - size_type copy(wxChar* s, size_type n, size_type pos = 0); - - // substring extraction - wxStringBase substr(size_t nStart = 0, size_t nLen = npos) const; - - // string += string - wxStringBase& operator+=(const wxStringBase& s) { return append(s); } - // string += C string - wxStringBase& operator+=(const wxChar *psz) { return append(psz); } - // string += char - wxStringBase& operator+=(wxChar ch) { return append(1, ch); } -}; - -#endif // !wxUSE_STL - -// ---------------------------------------------------------------------------- -// wxString: string class trying to be compatible with std::string, MFC -// CString and wxWindows 1.x wxString all at once -// --------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxString : public wxStringBase -{ -#if !wxUSE_STL -friend class WXDLLIMPEXP_FWD_BASE wxArrayString; -#endif - - // NB: special care was taken in arranging the member functions in such order - // that all inline functions can be effectively inlined, verify that all - // performance critical functions are still inlined if you change order! -private: - // if we hadn't made these operators private, it would be possible to - // compile "wxString s; s = 17;" without any warnings as 17 is implicitly - // converted to char in C and we do have operator=(char) - // - // NB: we don't need other versions (short/long and unsigned) as attempt - // to assign another numeric type to wxString will now result in - // ambiguity between operator=(char) and operator=(int) - wxString& operator=(int); - - // these methods are not implemented - there is _no_ conversion from int to - // string, you're doing something wrong if the compiler wants to call it! - // - // try `s << i' or `s.Printf("%d", i)' instead - wxString(int); - -public: - // constructors and destructor - // ctor for an empty string - wxString() : wxStringBase() { } - // copy ctor - wxString(const wxStringBase& stringSrc) : wxStringBase(stringSrc) { } - wxString(const wxString& stringSrc) : wxStringBase(stringSrc) { } - // string containing nRepeat copies of ch - wxString(wxChar ch, size_t nRepeat = 1) - : wxStringBase(nRepeat, ch) { } - wxString(size_t nRepeat, wxChar ch) - : wxStringBase(nRepeat, ch) { } - // ctor takes first nLength characters from C string - // (default value of npos means take all the string) - wxString(const wxChar *psz) - : wxStringBase(psz ? psz : wxT("")) { } - wxString(const wxChar *psz, size_t nLength) - : wxStringBase(psz, nLength) { } - wxString(const wxChar *psz, - const wxMBConv& WXUNUSED(conv), - size_t nLength = npos) - : wxStringBase(psz, nLength == npos ? wxStrlen(psz) : nLength) { } - - // even if we're not built with wxUSE_STL == 1 it is very convenient to allow - // implicit conversions from std::string to wxString 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 - wxString(const wxStdString& s) - : wxStringBase(s.c_str()) { } -#endif // wxUSE_STD_STRING - -#if wxUSE_UNICODE - // from multibyte string - wxString(const char *psz, const wxMBConv& conv, size_t nLength = npos); - // from wxWCharBuffer (i.e. return from wxGetString) - wxString(const wxWCharBuffer& psz) : wxStringBase(psz.data()) { } -#else // ANSI - // from C string (for compilers using unsigned char) - wxString(const unsigned char* psz) - : wxStringBase((const char*)psz) { } - // from part of C string (for compilers using unsigned char) - wxString(const unsigned char* psz, size_t nLength) - : wxStringBase((const char*)psz, nLength) { } - -#if wxUSE_WCHAR_T - // from wide (Unicode) string - wxString(const wchar_t *pwz, - const wxMBConv& conv = wxConvLibc, - size_t nLength = npos); -#endif // !wxUSE_WCHAR_T - - // from wxCharBuffer - wxString(const wxCharBuffer& psz) - : wxStringBase(psz) { } -#endif // Unicode/ANSI - - // generic attributes & operations - // as standard strlen() - size_t Len() const { return length(); } - // string contains any characters? - bool IsEmpty() const { return empty(); } - // empty string is "false", so !str will return true - bool operator!() const { return empty(); } - // truncate the string to given length - wxString& Truncate(size_t uiLen); - // empty string contents - void Empty() - { - Truncate(0); - - wxASSERT_MSG( empty(), _T("string not empty after call to Empty()?") ); - } - // empty the string and free memory - void Clear() - { - wxString tmp(wxEmptyString); - swap(tmp); - } - - // contents test - // Is an ascii value - bool IsAscii() const; - // Is a number - bool IsNumber() const; - // Is a word - bool IsWord() const; - - // data access (all indexes are 0 based) - // read access - wxChar GetChar(size_t n) const - { return at(n); } - // read/write access - wxChar& GetWritableChar(size_t n) - { return at(n); } - // write access - void SetChar(size_t n, wxChar ch) - { at(n) = ch; } - - // get last character - wxChar Last() const - { - wxASSERT_MSG( !empty(), _T("wxString: index out of bounds") ); - - return at(length() - 1); - } - - // get writable last character - wxChar& Last() - { - wxASSERT_MSG( !empty(), _T("wxString: index out of bounds") ); - return at(length() - 1); - } - - /* - Note that we we must define all of the overloads below to avoid - ambiguity when using str[0]. Also note that for a conforming compiler we - don't need const version of operatorp[] at all as indexed access to - const string is provided by implicit conversion to "const wxChar *" - below and defining them would only result in ambiguities, but some other - compilers refuse to compile "str[0]" without them. - */ - -#if defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__MWERKS__) - wxChar operator[](int n) const - { return wxStringBase::at(n); } - wxChar operator[](size_type n) const - { return wxStringBase::at(n); } -#ifndef wxSIZE_T_IS_UINT - wxChar operator[](unsigned int n) const - { return wxStringBase::at(n); } -#endif // size_t != unsigned int -#endif // broken compiler - - - // operator versions of GetWriteableChar() - wxChar& operator[](int n) - { return wxStringBase::at(n); } - wxChar& operator[](size_type n) - { return wxStringBase::at(n); } -#ifndef wxSIZE_T_IS_UINT - wxChar& operator[](unsigned int n) - { return wxStringBase::at(n); } -#endif // size_t != unsigned int - - // implicit conversion to C string - operator const wxChar*() const { return c_str(); } - - // identical to c_str(), for wxWin 1.6x compatibility - const wxChar* wx_str() const { return c_str(); } - // identical to c_str(), for MFC compatibility - const wxChar* GetData() const { return c_str(); } - -#if wxABI_VERSION >= 20804 - // conversion to *non-const* multibyte or widestring buffer; modifying - // returned buffer won't affect the string, these methods are only useful - // for passing values to const-incorrect functions - wxWritableCharBuffer char_str(const wxMBConv& conv = wxConvLibc) const - { return mb_str(conv); } -#if wxUSE_WCHAR_T - wxWritableWCharBuffer wchar_str() const { return wc_str(wxConvLibc); } -#endif -#endif // wxABI_VERSION >= 20804 - - // conversion to/from plain (i.e. 7 bit) ASCII: this is useful for - // converting numbers or strings which are certain not to contain special - // chars (typically system functions, X atoms, environment variables etc.) - // - // the behaviour of these functions with the strings containing anything - // else than 7 bit ASCII characters is undefined, use at your own risk. -#if wxUSE_UNICODE - static wxString FromAscii(const char *ascii); // string - static wxString FromAscii(const char ascii); // char - const wxCharBuffer ToAscii() const; -#else // ANSI - static wxString FromAscii(const char *ascii) { return wxString( ascii ); } - static wxString FromAscii(const char ascii) { return wxString( ascii ); } - const char *ToAscii() const { return c_str(); } -#endif // Unicode/!Unicode - -#if wxABI_VERSION >= 20804 - // conversion to/from UTF-8: -#if wxUSE_UNICODE - static wxString FromUTF8(const char *utf8) - { return wxString(utf8, wxConvUTF8); } - static wxString FromUTF8(const char *utf8, size_t len) - { return wxString(utf8, wxConvUTF8, len); } - const wxCharBuffer utf8_str() const { return mb_str(wxConvUTF8); } - const wxCharBuffer ToUTF8() const { return utf8_str(); } -#elif wxUSE_WCHAR_T // ANSI - static wxString FromUTF8(const char *utf8) - { return wxString(wxConvUTF8.cMB2WC(utf8)); } - static wxString FromUTF8(const char *utf8, size_t len) - { - size_t wlen; - wxWCharBuffer buf(wxConvUTF8.cMB2WC(utf8, len == npos ? wxNO_LEN : len, &wlen)); - return wxString(buf.data(), wxConvLibc, wlen); - } - const wxCharBuffer utf8_str() const - { return wxConvUTF8.cWC2MB(wc_str(wxConvLibc)); } - const wxCharBuffer ToUTF8() const { return utf8_str(); } -#endif // Unicode/ANSI -#endif // wxABI_VERSION >= 20804 - -#if wxABI_VERSION >= 20804 - // functions for storing binary data in wxString: -#if wxUSE_UNICODE - static wxString From8BitData(const char *data, size_t len) - { return wxString(data, wxConvISO8859_1, len); } - // version for NUL-terminated data: - static wxString From8BitData(const char *data) - { return wxString(data, wxConvISO8859_1); } - const wxCharBuffer To8BitData() const { return mb_str(wxConvISO8859_1); } -#else // ANSI - static wxString From8BitData(const char *data, size_t len) - { return wxString(data, len); } - // version for NUL-terminated data: - static wxString From8BitData(const char *data) - { return wxString(data); } - const char *To8BitData() const { return c_str(); } -#endif // Unicode/ANSI -#endif // wxABI_VERSION >= 20804 - - // conversions with (possible) format conversions: have to return a - // buffer with temporary data - // - // the functions defined (in either Unicode or ANSI) mode are mb_str() to - // return an ANSI (multibyte) string, wc_str() to return a wide string and - // fn_str() to return a string which should be used with the OS APIs - // accepting the file names. The return value is always the same, but the - // type differs because a function may either return pointer to the buffer - // directly or have to use intermediate buffer for translation. -#if wxUSE_UNICODE - const wxCharBuffer mb_str(const wxMBConv& conv = wxConvLibc) const; - - const wxWX2MBbuf mbc_str() const { return mb_str(*wxConvCurrent); } - - const wxChar* wc_str() const { return c_str(); } - - // for compatibility with !wxUSE_UNICODE version - const wxChar* wc_str(const wxMBConv& WXUNUSED(conv)) const { return c_str(); } - -#if wxMBFILES - const wxCharBuffer fn_str() const { return mb_str(wxConvFile); } -#else // !wxMBFILES - const wxChar* fn_str() const { return c_str(); } -#endif // wxMBFILES/!wxMBFILES -#else // ANSI - const wxChar* mb_str() const { return c_str(); } - - // for compatibility with wxUSE_UNICODE version - const wxChar* mb_str(const wxMBConv& WXUNUSED(conv)) const { return c_str(); } - - const wxWX2MBbuf mbc_str() const { return mb_str(); } - -#if wxUSE_WCHAR_T - const wxWCharBuffer wc_str(const wxMBConv& conv) const; -#endif // wxUSE_WCHAR_T -#ifdef __WXOSX__ - const wxCharBuffer fn_str() const { return wxConvFile.cWC2WX( wc_str( wxConvLocal ) ); } -#else - const wxChar* fn_str() const { return c_str(); } -#endif -#endif // Unicode/ANSI - - // overloaded assignment - // from another wxString - wxString& operator=(const wxStringBase& stringSrc) - { return (wxString&)wxStringBase::operator=(stringSrc); } - // from a character - wxString& operator=(wxChar ch) - { return (wxString&)wxStringBase::operator=(ch); } - // from a C string - STL probably will crash on NULL, - // so we need to compensate in that case -#if wxUSE_STL - wxString& operator=(const wxChar *psz) - { if(psz) wxStringBase::operator=(psz); else Clear(); return *this; } -#else - wxString& operator=(const wxChar *psz) - { return (wxString&)wxStringBase::operator=(psz); } -#endif - -#if wxUSE_UNICODE - // from wxWCharBuffer - wxString& operator=(const wxWCharBuffer& psz) - { (void) operator=((const wchar_t *)psz); return *this; } -#else // ANSI - // from another kind of C string - wxString& operator=(const unsigned char* psz); -#if wxUSE_WCHAR_T - // from a wide string - wxString& operator=(const wchar_t *pwz); -#endif - // from wxCharBuffer - wxString& operator=(const wxCharBuffer& psz) - { (void) operator=((const char *)psz); return *this; } -#endif // Unicode/ANSI - - // string concatenation - // in place concatenation - /* - Concatenate and return the result. Note that the left to right - associativity of << allows to write things like "str << str1 << str2 - << ..." (unlike with +=) - */ - // string += string - wxString& operator<<(const wxString& s) - { -#if !wxUSE_STL - wxASSERT_MSG( s.GetStringData()->IsValid(), - _T("did you forget to call UngetWriteBuf()?") ); -#endif - - append(s); - return *this; - } - // string += C string - wxString& operator<<(const wxChar *psz) - { append(psz); return *this; } - // string += char - wxString& operator<<(wxChar ch) { append(1, ch); return *this; } - - // string += buffer (i.e. from wxGetString) -#if wxUSE_UNICODE - wxString& operator<<(const wxWCharBuffer& s) - { (void)operator<<((const wchar_t *)s); return *this; } - void operator+=(const wxWCharBuffer& s) - { (void)operator<<((const wchar_t *)s); } -#else // !wxUSE_UNICODE - wxString& operator<<(const wxCharBuffer& s) - { (void)operator<<((const char *)s); return *this; } - void operator+=(const wxCharBuffer& s) - { (void)operator<<((const char *)s); } -#endif // wxUSE_UNICODE/!wxUSE_UNICODE - - // string += C string - wxString& Append(const wxString& s) - { - // test for empty() to share the string if possible - if ( empty() ) - *this = s; - else - append(s); - return *this; - } - wxString& Append(const wxChar* psz) - { append(psz); return *this; } - // append count copies of given character - wxString& Append(wxChar ch, size_t count = 1u) - { append(count, ch); return *this; } - wxString& Append(const wxChar* psz, size_t nLen) - { append(psz, nLen); return *this; } - - // prepend a string, return the string itself - wxString& Prepend(const wxString& str) - { *this = str + *this; return *this; } - - // non-destructive concatenation - // two strings - friend wxString WXDLLIMPEXP_BASE operator+(const wxString& string1, - const wxString& string2); - // string with a single char - friend wxString WXDLLIMPEXP_BASE operator+(const wxString& string, wxChar ch); - // char with a string - friend wxString WXDLLIMPEXP_BASE operator+(wxChar ch, const wxString& string); - // string with C string - friend wxString WXDLLIMPEXP_BASE operator+(const wxString& string, - const wxChar *psz); - // C string with string - friend wxString WXDLLIMPEXP_BASE operator+(const wxChar *psz, - const wxString& string); - - // stream-like functions - // insert an int into string - wxString& operator<<(int i) - { return (*this) << Format(_T("%d"), i); } - // insert an unsigned int into string - wxString& operator<<(unsigned int ui) - { return (*this) << Format(_T("%u"), ui); } - // insert a long into string - wxString& operator<<(long l) - { return (*this) << Format(_T("%ld"), l); } - // insert an unsigned long into string - wxString& operator<<(unsigned long ul) - { return (*this) << Format(_T("%lu"), ul); } -#if defined wxLongLong_t && !defined wxLongLongIsLong - // insert a long long if they exist and aren't longs - wxString& operator<<(wxLongLong_t ll) - { - const wxChar *fmt = _T("%") wxLongLongFmtSpec _T("d"); - return (*this) << Format(fmt, ll); - } - // insert an unsigned long long - wxString& operator<<(wxULongLong_t ull) - { - const wxChar *fmt = _T("%") wxLongLongFmtSpec _T("u"); - return (*this) << Format(fmt , ull); - } -#endif - // insert a float into string - wxString& operator<<(float f) - { return (*this) << Format(_T("%f"), f); } - // insert a double into string - wxString& operator<<(double d) - { return (*this) << Format(_T("%g"), d); } - - // string comparison - // case-sensitive comparison (returns a value < 0, = 0 or > 0) - int Cmp(const wxChar *psz) const; - int Cmp(const wxString& s) const; - // same as Cmp() but not case-sensitive - int CmpNoCase(const wxChar *psz) const; - int CmpNoCase(const wxString& s) const; - // test for the string equality, either considering case or not - // (if compareWithCase then the case matters) - bool IsSameAs(const wxChar *psz, bool compareWithCase = true) const - { return (compareWithCase ? Cmp(psz) : CmpNoCase(psz)) == 0; } - // comparison with a single character: returns true if equal - bool IsSameAs(wxChar c, bool compareWithCase = true) const - { - return (length() == 1) && (compareWithCase ? GetChar(0u) == c - : wxToupper(GetChar(0u)) == wxToupper(c)); - } - - // simple sub-string extraction - // return substring starting at nFirst of length nCount (or till the end - // if nCount = default value) - wxString Mid(size_t nFirst, size_t nCount = npos) const; - - // operator version of Mid() - wxString operator()(size_t start, size_t len) const - { return Mid(start, len); } - - // check if the string starts with the given prefix and return the rest - // of the string in the provided pointer if it is not NULL; otherwise - // return false - bool StartsWith(const wxChar *prefix, wxString *rest = NULL) const; - // check if the string ends with the given suffix and return the - // beginning of the string before the suffix in the provided pointer if - // it is not NULL; otherwise return false - bool EndsWith(const wxChar *suffix, wxString *rest = NULL) const; - - // get first nCount characters - wxString Left(size_t nCount) const; - // get last nCount characters - wxString Right(size_t nCount) const; - // get all characters before the first occurance of ch - // (returns the whole string if ch not found) - wxString BeforeFirst(wxChar ch) const; - // get all characters before the last occurence of ch - // (returns empty string if ch not found) - wxString BeforeLast(wxChar ch) const; - // get all characters after the first occurence of ch - // (returns empty string if ch not found) - wxString AfterFirst(wxChar ch) const; - // get all characters after the last occurence of ch - // (returns the whole string if ch not found) - wxString AfterLast(wxChar ch) const; - - // for compatibility only, use more explicitly named functions above - wxString Before(wxChar ch) const { return BeforeLast(ch); } - wxString After(wxChar ch) const { return AfterFirst(ch); } - - // case conversion - // convert to upper case in place, return the string itself - wxString& MakeUpper(); - // convert to upper case, return the copy of the string - // Here's something to remember: BC++ doesn't like returns in inlines. - wxString Upper() const ; - // convert to lower case in place, return the string itself - wxString& MakeLower(); - // convert to lower case, return the copy of the string - wxString Lower() const ; - - // trimming/padding whitespace (either side) and truncating - // remove spaces from left or from right (default) side - wxString& Trim(bool bFromRight = true); - // add nCount copies chPad in the beginning or at the end (default) - wxString& Pad(size_t nCount, wxChar chPad = wxT(' '), bool bFromRight = true); - - // searching and replacing - // searching (return starting index, or -1 if not found) - int Find(wxChar ch, bool bFromEnd = false) const; // like strchr/strrchr - // searching (return starting index, or -1 if not found) - int Find(const wxChar *pszSub) const; // like strstr - // replace first (or all of bReplaceAll) occurences of substring with - // another string, returns the number of replacements made - size_t Replace(const wxChar *szOld, - const wxChar *szNew, - bool bReplaceAll = true); - - // check if the string contents matches a mask containing '*' and '?' - bool Matches(const wxChar *szMask) const; - - // conversion to numbers: all functions return true only if the whole - // string is a number and put the value of this number into the pointer - // provided, the base is the numeric base in which the conversion should be - // done and must be comprised between 2 and 36 or be 0 in which case the - // standard C rules apply (leading '0' => octal, "0x" => hex) - // convert to a signed integer - bool ToLong(long *val, int base = 10) const; - // convert to an unsigned integer - bool ToULong(unsigned long *val, int base = 10) const; - // convert to wxLongLong -#if defined(wxLongLong_t) - bool ToLongLong(wxLongLong_t *val, int base = 10) const; - // convert to wxULongLong - bool ToULongLong(wxULongLong_t *val, int base = 10) const; -#endif // wxLongLong_t - // convert to a double - bool ToDouble(double *val) const; - - - - // formatted input/output - // as sprintf(), returns the number of characters written or < 0 on error - // (take 'this' into account in attribute parameter count) - int Printf(const wxChar *pszFormat, ...) ATTRIBUTE_PRINTF_2; - // as vprintf(), returns the number of characters written or < 0 on error - int PrintfV(const wxChar* pszFormat, va_list argptr); - - // returns the string containing the result of Printf() to it - static wxString Format(const wxChar *pszFormat, ...) ATTRIBUTE_PRINTF_1; - // the same as above, but takes a va_list - static wxString FormatV(const wxChar *pszFormat, va_list argptr); - - // raw access to string memory - // ensure that string has space for at least nLen characters - // only works if the data of this string is not shared - bool Alloc(size_t nLen) { reserve(nLen); /*return capacity() >= nLen;*/ return true; } - // minimize the string's memory - // only works if the data of this string is not shared - bool Shrink(); -#if !wxUSE_STL - // get writable buffer of at least nLen bytes. Unget() *must* be called - // a.s.a.p. to put string back in a reasonable state! - wxChar *GetWriteBuf(size_t nLen); - // call this immediately after GetWriteBuf() has been used - void UngetWriteBuf(); - void UngetWriteBuf(size_t nLen); -#endif - - // wxWidgets version 1 compatibility functions - - // use Mid() - wxString SubString(size_t from, size_t to) const - { return Mid(from, (to - from + 1)); } - // values for second parameter of CompareTo function - enum caseCompare {exact, ignoreCase}; - // values for first parameter of Strip function - enum stripType {leading = 0x1, trailing = 0x2, both = 0x3}; - - // use Printf() - // (take 'this' into account in attribute parameter count) - int sprintf(const wxChar *pszFormat, ...) ATTRIBUTE_PRINTF_2; - - // use Cmp() - inline int CompareTo(const wxChar* psz, caseCompare cmp = exact) const - { return cmp == exact ? Cmp(psz) : CmpNoCase(psz); } - - // use Len - size_t Length() const { return length(); } - // Count the number of characters - int Freq(wxChar ch) const; - // use MakeLower - void LowerCase() { MakeLower(); } - // use MakeUpper - void UpperCase() { MakeUpper(); } - // use Trim except that it doesn't change this string - wxString Strip(stripType w = trailing) const; - - // use Find (more general variants not yet supported) - size_t Index(const wxChar* psz) const { return Find(psz); } - size_t Index(wxChar ch) const { return Find(ch); } - // use Truncate - wxString& Remove(size_t pos) { return Truncate(pos); } - wxString& RemoveLast(size_t n = 1) { return Truncate(length() - n); } - - wxString& Remove(size_t nStart, size_t nLen) - { return (wxString&)erase( nStart, nLen ); } - - // use Find() - int First( const wxChar ch ) const { return Find(ch); } - int First( const wxChar* psz ) const { return Find(psz); } - int First( const wxString &str ) const { return Find(str); } - int Last( const wxChar ch ) const { return Find(ch, true); } - bool Contains(const wxString& str) const { return Find(str) != wxNOT_FOUND; } - - // use empty() - bool IsNull() const { return empty(); } - - // std::string compatibility functions - - // take nLen chars starting at nPos - wxString(const wxString& str, size_t nPos, size_t nLen) - : wxStringBase(str, nPos, nLen) { } - // take all characters from pStart to pEnd - wxString(const void *pStart, const void *pEnd) - : wxStringBase((const wxChar*)pStart, (const wxChar*)pEnd) { } -#if wxUSE_STL - wxString(const_iterator first, const_iterator last) - : wxStringBase(first, last) { } -#endif - - // lib.string.modifiers - // append elements str[pos], ..., str[pos+n] - wxString& append(const wxString& str, size_t pos, size_t n) - { return (wxString&)wxStringBase::append(str, pos, n); } - // append a string - wxString& append(const wxString& str) - { return (wxString&)wxStringBase::append(str); } - // append first n (or all if n == npos) characters of sz - wxString& append(const wxChar *sz) - { return (wxString&)wxStringBase::append(sz); } - wxString& append(const wxChar *sz, size_t n) - { return (wxString&)wxStringBase::append(sz, n); } - // append n copies of ch - wxString& append(size_t n, wxChar ch) - { return (wxString&)wxStringBase::append(n, ch); } - // append from first to last - wxString& append(const_iterator first, const_iterator last) - { return (wxString&)wxStringBase::append(first, last); } - - // same as `this_string = str' - wxString& assign(const wxString& str) - { return (wxString&)wxStringBase::assign(str); } - // same as ` = str[pos..pos + n] - wxString& assign(const wxString& str, size_t pos, size_t n) - { return (wxString&)wxStringBase::assign(str, pos, n); } - // same as `= first n (or all if n == npos) characters of sz' - wxString& assign(const wxChar *sz) - { return (wxString&)wxStringBase::assign(sz); } - wxString& assign(const wxChar *sz, size_t n) - { return (wxString&)wxStringBase::assign(sz, n); } - // same as `= n copies of ch' - wxString& assign(size_t n, wxChar ch) - { return (wxString&)wxStringBase::assign(n, ch); } - // assign from first to last - wxString& assign(const_iterator first, const_iterator last) - { return (wxString&)wxStringBase::assign(first, last); } - - // string comparison -#if !defined(HAVE_STD_STRING_COMPARE) - int compare(const wxStringBase& str) const; - // comparison with a substring - int compare(size_t nStart, size_t nLen, const wxStringBase& str) const; - // comparison of 2 substrings - int compare(size_t nStart, size_t nLen, - const wxStringBase& str, size_t nStart2, size_t nLen2) const; - // just like strcmp() - int compare(const wxChar* sz) const; - // substring comparison with first nCount characters of sz - int compare(size_t nStart, size_t nLen, - const wxChar* sz, size_t nCount = npos) const; -#endif // !defined HAVE_STD_STRING_COMPARE - - // insert another string - wxString& insert(size_t nPos, const wxString& str) - { return (wxString&)wxStringBase::insert(nPos, str); } - // insert n chars of str starting at nStart (in str) - wxString& insert(size_t nPos, const wxString& str, size_t nStart, size_t n) - { return (wxString&)wxStringBase::insert(nPos, str, nStart, n); } - // insert first n (or all if n == npos) characters of sz - wxString& insert(size_t nPos, const wxChar *sz) - { return (wxString&)wxStringBase::insert(nPos, sz); } - wxString& insert(size_t nPos, const wxChar *sz, size_t n) - { return (wxString&)wxStringBase::insert(nPos, sz, n); } - // insert n copies of ch - wxString& insert(size_t nPos, size_t n, wxChar ch) - { return (wxString&)wxStringBase::insert(nPos, n, ch); } - iterator insert(iterator it, wxChar ch) - { return wxStringBase::insert(it, ch); } - void insert(iterator it, const_iterator first, const_iterator last) - { wxStringBase::insert(it, first, last); } - void insert(iterator it, size_type n, wxChar ch) - { wxStringBase::insert(it, n, ch); } - - // delete characters from nStart to nStart + nLen - wxString& erase(size_type pos = 0, size_type n = npos) - { return (wxString&)wxStringBase::erase(pos, n); } - iterator erase(iterator first, iterator last) - { return wxStringBase::erase(first, last); } - iterator erase(iterator first) - { return wxStringBase::erase(first); } - -#ifdef wxSTRING_BASE_HASNT_CLEAR - void clear() { erase(); } -#endif - - // replaces the substring of length nLen starting at nStart - wxString& replace(size_t nStart, size_t nLen, const wxChar* sz) - { return (wxString&)wxStringBase::replace(nStart, nLen, sz); } - // replaces the substring of length nLen starting at nStart - wxString& replace(size_t nStart, size_t nLen, const wxString& str) - { return (wxString&)wxStringBase::replace(nStart, nLen, str); } - // replaces the substring with nCount copies of ch - wxString& replace(size_t nStart, size_t nLen, size_t nCount, wxChar ch) - { return (wxString&)wxStringBase::replace(nStart, nLen, nCount, ch); } - // replaces a substring with another substring - wxString& replace(size_t nStart, size_t nLen, - const wxString& str, size_t nStart2, size_t nLen2) - { return (wxString&)wxStringBase::replace(nStart, nLen, str, - nStart2, nLen2); } - // replaces the substring with first nCount chars of sz - wxString& replace(size_t nStart, size_t nLen, - const wxChar* sz, size_t nCount) - { return (wxString&)wxStringBase::replace(nStart, nLen, sz, nCount); } - wxString& replace(iterator first, iterator last, const_pointer s) - { return (wxString&)wxStringBase::replace(first, last, s); } - wxString& replace(iterator first, iterator last, const_pointer s, - size_type n) - { return (wxString&)wxStringBase::replace(first, last, s, n); } - wxString& replace(iterator first, iterator last, const wxString& s) - { return (wxString&)wxStringBase::replace(first, last, s); } - wxString& replace(iterator first, iterator last, size_type n, wxChar c) - { return (wxString&)wxStringBase::replace(first, last, n, c); } - wxString& replace(iterator first, iterator last, - const_iterator first1, const_iterator last1) - { return (wxString&)wxStringBase::replace(first, last, first1, last1); } - - // string += string - wxString& operator+=(const wxString& s) - { return (wxString&)wxStringBase::operator+=(s); } - // string += C string - wxString& operator+=(const wxChar *psz) - { return (wxString&)wxStringBase::operator+=(psz); } - // string += char - wxString& operator+=(wxChar ch) - { return (wxString&)wxStringBase::operator+=(ch); } -}; - -// notice that even though for many compilers the friend declarations above are -// enough, from the point of view of C++ standard we must have the declarations -// here as friend ones are not injected in the enclosing namespace and without -// them the code fails to compile with conforming compilers such as xlC or g++4 -wxString WXDLLIMPEXP_BASE operator+(const wxString& string1, const wxString& string2); -wxString WXDLLIMPEXP_BASE operator+(const wxString& string, wxChar ch); -wxString WXDLLIMPEXP_BASE operator+(wxChar ch, const wxString& string); -wxString WXDLLIMPEXP_BASE operator+(const wxString& string, const wxChar *psz); -wxString WXDLLIMPEXP_BASE operator+(const wxChar *psz, const wxString& string); - - -// define wxArrayString, for compatibility -#if WXWIN_COMPATIBILITY_2_4 && !wxUSE_STL - #include "wx/arrstr.h" -#endif - -#if wxUSE_STL - // return an empty wxString (not very useful with wxUSE_STL == 1) - inline const wxString wxGetEmptyString() { return wxString(); } -#else // !wxUSE_STL - // return an empty wxString (more efficient than wxString() here) - inline const wxString& wxGetEmptyString() - { - return *(wxString *)&wxEmptyString; - } -#endif // wxUSE_STL/!wxUSE_STL - -// ---------------------------------------------------------------------------- -// wxStringBuffer: a tiny class allowing to get a writable pointer into string -// ---------------------------------------------------------------------------- - -#if wxUSE_STL - -class WXDLLIMPEXP_BASE wxStringBuffer -{ -public: - wxStringBuffer(wxString& str, size_t lenWanted = 1024) - : m_str(str), m_buf(lenWanted) - { } - - ~wxStringBuffer() { m_str.assign(m_buf.data(), wxStrlen(m_buf.data())); } - - operator wxChar*() { return m_buf.data(); } - -private: - wxString& m_str; -#if wxUSE_UNICODE - wxWCharBuffer m_buf; -#else - wxCharBuffer m_buf; -#endif - - DECLARE_NO_COPY_CLASS(wxStringBuffer) -}; - -class WXDLLIMPEXP_BASE wxStringBufferLength -{ -public: - wxStringBufferLength(wxString& str, size_t lenWanted = 1024) - : m_str(str), m_buf(lenWanted), m_len(0), m_lenSet(false) - { } - - ~wxStringBufferLength() - { - wxASSERT(m_lenSet); - m_str.assign(m_buf.data(), m_len); - } - - operator wxChar*() { return m_buf.data(); } - void SetLength(size_t length) { m_len = length; m_lenSet = true; } - -private: - wxString& m_str; -#if wxUSE_UNICODE - wxWCharBuffer m_buf; -#else - wxCharBuffer m_buf; -#endif - size_t m_len; - bool m_lenSet; - - DECLARE_NO_COPY_CLASS(wxStringBufferLength) -}; - -#else // if !wxUSE_STL - -class WXDLLIMPEXP_BASE wxStringBuffer -{ -public: - wxStringBuffer(wxString& str, size_t lenWanted = 1024) - : m_str(str), m_buf(NULL) - { m_buf = m_str.GetWriteBuf(lenWanted); } - - ~wxStringBuffer() { m_str.UngetWriteBuf(); } - - operator wxChar*() const { return m_buf; } - -private: - wxString& m_str; - wxChar *m_buf; - - DECLARE_NO_COPY_CLASS(wxStringBuffer) -}; - -class WXDLLIMPEXP_BASE wxStringBufferLength -{ -public: - wxStringBufferLength(wxString& str, size_t lenWanted = 1024) - : m_str(str), m_buf(NULL), m_len(0), m_lenSet(false) - { - m_buf = m_str.GetWriteBuf(lenWanted); - wxASSERT(m_buf != NULL); - } - - ~wxStringBufferLength() - { - wxASSERT(m_lenSet); - m_str.UngetWriteBuf(m_len); - } - - operator wxChar*() const { return m_buf; } - void SetLength(size_t length) { m_len = length; m_lenSet = true; } - -private: - wxString& m_str; - wxChar *m_buf; - size_t m_len; - bool m_lenSet; - - DECLARE_NO_COPY_CLASS(wxStringBufferLength) -}; - -#endif // !wxUSE_STL - -// --------------------------------------------------------------------------- -// wxString comparison functions: operator versions are always case sensitive -// --------------------------------------------------------------------------- - -// note that when wxUSE_STL == 1 the comparison operators taking std::string -// are used and defining them also for wxString would only result in -// compilation ambiguities when comparing std::string and wxString -#if !wxUSE_STL - -inline bool operator==(const wxString& s1, const wxString& s2) - { return (s1.Len() == s2.Len()) && (s1.Cmp(s2) == 0); } -inline bool operator==(const wxString& s1, const wxChar * s2) - { return s1.Cmp(s2) == 0; } -inline bool operator==(const wxChar * s1, const wxString& s2) - { return s2.Cmp(s1) == 0; } -inline bool operator!=(const wxString& s1, const wxString& s2) - { return (s1.Len() != s2.Len()) || (s1.Cmp(s2) != 0); } -inline bool operator!=(const wxString& s1, const wxChar * s2) - { return s1.Cmp(s2) != 0; } -inline bool operator!=(const wxChar * s1, const wxString& s2) - { return s2.Cmp(s1) != 0; } -inline bool operator< (const wxString& s1, const wxString& s2) - { return s1.Cmp(s2) < 0; } -inline bool operator< (const wxString& s1, const wxChar * s2) - { return s1.Cmp(s2) < 0; } -inline bool operator< (const wxChar * s1, const wxString& s2) - { return s2.Cmp(s1) > 0; } -inline bool operator> (const wxString& s1, const wxString& s2) - { return s1.Cmp(s2) > 0; } -inline bool operator> (const wxString& s1, const wxChar * s2) - { return s1.Cmp(s2) > 0; } -inline bool operator> (const wxChar * s1, const wxString& s2) - { return s2.Cmp(s1) < 0; } -inline bool operator<=(const wxString& s1, const wxString& s2) - { return s1.Cmp(s2) <= 0; } -inline bool operator<=(const wxString& s1, const wxChar * s2) - { return s1.Cmp(s2) <= 0; } -inline bool operator<=(const wxChar * s1, const wxString& s2) - { return s2.Cmp(s1) >= 0; } -inline bool operator>=(const wxString& s1, const wxString& s2) - { return s1.Cmp(s2) >= 0; } -inline bool operator>=(const wxString& s1, const wxChar * s2) - { return s1.Cmp(s2) >= 0; } -inline bool operator>=(const wxChar * s1, const wxString& s2) - { return s2.Cmp(s1) <= 0; } - -#if wxUSE_UNICODE -inline bool operator==(const wxString& s1, const wxWCharBuffer& s2) - { return (s1.Cmp((const wchar_t *)s2) == 0); } -inline bool operator==(const wxWCharBuffer& s1, const wxString& s2) - { return (s2.Cmp((const wchar_t *)s1) == 0); } -inline bool operator!=(const wxString& s1, const wxWCharBuffer& s2) - { return (s1.Cmp((const wchar_t *)s2) != 0); } -inline bool operator!=(const wxWCharBuffer& s1, const wxString& s2) - { return (s2.Cmp((const wchar_t *)s1) != 0); } -#else // !wxUSE_UNICODE -inline bool operator==(const wxString& s1, const wxCharBuffer& s2) - { return (s1.Cmp((const char *)s2) == 0); } -inline bool operator==(const wxCharBuffer& s1, const wxString& s2) - { return (s2.Cmp((const char *)s1) == 0); } -inline bool operator!=(const wxString& s1, const wxCharBuffer& s2) - { return (s1.Cmp((const char *)s2) != 0); } -inline bool operator!=(const wxCharBuffer& s1, const wxString& s2) - { return (s2.Cmp((const char *)s1) != 0); } -#endif // wxUSE_UNICODE/!wxUSE_UNICODE - -#if wxUSE_UNICODE -inline wxString operator+(const wxString& string, const wxWCharBuffer& buf) - { return string + (const wchar_t *)buf; } -inline wxString operator+(const wxWCharBuffer& buf, const wxString& string) - { return (const wchar_t *)buf + string; } -#else // !wxUSE_UNICODE -inline wxString operator+(const wxString& string, const wxCharBuffer& buf) - { return string + (const char *)buf; } -inline wxString operator+(const wxCharBuffer& buf, const wxString& string) - { return (const char *)buf + string; } -#endif // wxUSE_UNICODE/!wxUSE_UNICODE - -#endif // !wxUSE_STL - -// comparison with char (those are not defined by std::[w]string and so should -// be always available) -inline bool operator==(wxChar c, const wxString& s) { return s.IsSameAs(c); } -inline bool operator==(const wxString& s, wxChar c) { return s.IsSameAs(c); } -inline bool operator!=(wxChar c, const wxString& s) { return !s.IsSameAs(c); } -inline bool operator!=(const wxString& s, wxChar c) { return !s.IsSameAs(c); } - -// --------------------------------------------------------------------------- -// Implementation only from here until the end of file -// --------------------------------------------------------------------------- - -// don't pollute the library user's name space -#undef wxASSERT_VALID_INDEX - -#if wxUSE_STD_IOSTREAM - -#include "wx/iosfwrap.h" - -WXDLLIMPEXP_BASE wxSTD ostream& operator<<(wxSTD ostream&, const wxString&); - -#endif // wxSTD_STRING_COMPATIBILITY - -#endif // _WX_WXSTRINGH__ diff --git a/desmume/src/windows/wx/include/wx/sysopt.h b/desmume/src/windows/wx/include/wx/sysopt.h deleted file mode 100644 index cff3412ff..000000000 --- a/desmume/src/windows/wx/include/wx/sysopt.h +++ /dev/null @@ -1,71 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: sysopt.h -// Purpose: wxSystemOptions -// Author: Julian Smart -// Modified by: -// Created: 2001-07-10 -// RCS-ID: $Id: sysopt.h 33004 2005-03-23 20:48:50Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SYSOPT_H_ -#define _WX_SYSOPT_H_ - -#include "wx/object.h" - -// ---------------------------------------------------------------------------- -// Enables an application to influence the wxWidgets implementation -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxSystemOptions : public wxObject -{ -public: - wxSystemOptions() { } - - // User-customizable hints to wxWidgets or associated libraries - // These could also be used to influence GetSystem... calls, indeed - // to implement SetSystemColour/Font/Metric - -#if wxUSE_SYSTEM_OPTIONS - static void SetOption(const wxString& name, const wxString& value); - static void SetOption(const wxString& name, int value); -#endif // wxUSE_SYSTEM_OPTIONS - static wxString GetOption(const wxString& name); - static int GetOptionInt(const wxString& name); - static bool HasOption(const wxString& name); - - static bool IsFalse(const wxString& name) - { - return HasOption(name) && GetOptionInt(name) == 0; - } -}; - -#if !wxUSE_SYSTEM_OPTIONS - -// define inline stubs for accessors to make it possible to use wxSystemOptions -// in the library itself without checking for wxUSE_SYSTEM_OPTIONS all the time - -/* static */ inline -wxString wxSystemOptions::GetOption(const wxString& WXUNUSED(name)) -{ - return wxEmptyString; -} - -/* static */ inline -int wxSystemOptions::GetOptionInt(const wxString& WXUNUSED(name)) -{ - return 0; -} - -/* static */ inline -bool wxSystemOptions::HasOption(const wxString& WXUNUSED(name)) -{ - return false; -} - -#endif // !wxUSE_SYSTEM_OPTIONS - -#endif - // _WX_SYSOPT_H_ - diff --git a/desmume/src/windows/wx/include/wx/tab.h b/desmume/src/windows/wx/include/wx/tab.h deleted file mode 100644 index 01ff4ede4..000000000 --- a/desmume/src/windows/wx/include/wx/tab.h +++ /dev/null @@ -1,22 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/tab.h -// Purpose: Generic tab class base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: tab.h 37400 2006-02-09 00:28:34Z VZ $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TAB_H_BASE_ -#define _WX_TAB_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_TAB_DIALOG -#include "wx/generic/tabg.h" -#endif - -#endif - // _WX_TAB_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/tabctrl.h b/desmume/src/windows/wx/include/wx/tabctrl.h deleted file mode 100644 index bba2fdbc5..000000000 --- a/desmume/src/windows/wx/include/wx/tabctrl.h +++ /dev/null @@ -1,34 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/tabctrl.h -// Purpose: wxTabCtrl base header -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: tabctrl.h 38943 2006-04-28 10:14:27Z ABX $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TABCTRL_H_BASE_ -#define _WX_TABCTRL_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_TAB_DIALOG - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TAB_SEL_CHANGED, 800) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TAB_SEL_CHANGING, 801) -END_DECLARE_EVENT_TYPES() - -#if defined(__WXMSW__) - #include "wx/msw/tabctrl.h" -#elif defined(__WXMAC__) - #include "wx/mac/tabctrl.h" -#elif defined(__WXPM__) - #include "wx/os2/tabctrl.h" -#endif - -#endif // wxUSE_TAB_DIALOG -#endif - // _WX_TABCTRL_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/tarstrm.h b/desmume/src/windows/wx/include/wx/tarstrm.h deleted file mode 100644 index eb76bc340..000000000 --- a/desmume/src/windows/wx/include/wx/tarstrm.h +++ /dev/null @@ -1,352 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/tarstrm.h -// Purpose: Streams for Tar files -// Author: Mike Wetherell -// RCS-ID: $Id: tarstrm.h 43887 2006-12-09 22:28:11Z MW $ -// Copyright: (c) 2004 Mike Wetherell -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WXTARSTREAM_H__ -#define _WX_WXTARSTREAM_H__ - -#include "wx/defs.h" - -#if wxUSE_TARSTREAM - -#include "wx/archive.h" -#include "wx/hashmap.h" - - -///////////////////////////////////////////////////////////////////////////// -// Constants - -// TypeFlag values -enum { - wxTAR_REGTYPE = '0', // regular file - wxTAR_LNKTYPE = '1', // hard link - wxTAR_SYMTYPE = '2', // symbolic link - wxTAR_CHRTYPE = '3', // character special - wxTAR_BLKTYPE = '4', // block special - wxTAR_DIRTYPE = '5', // directory - wxTAR_FIFOTYPE = '6', // named pipe - wxTAR_CONTTYPE = '7' // contiguous file -}; - -// Archive Formats (use wxTAR_PAX, it's backward compatible) -enum wxTarFormat -{ - wxTAR_USTAR, // POSIX.1-1990 tar format - wxTAR_PAX // POSIX.1-2001 tar format -}; - - -///////////////////////////////////////////////////////////////////////////// -// wxTarNotifier - -class WXDLLIMPEXP_BASE wxTarNotifier -{ -public: - virtual ~wxTarNotifier() { } - - virtual void OnEntryUpdated(class wxTarEntry& entry) = 0; -}; - - -///////////////////////////////////////////////////////////////////////////// -// Tar Entry - hold the meta data for a file in the tar - -class WXDLLIMPEXP_BASE wxTarEntry : public wxArchiveEntry -{ -public: - wxTarEntry(const wxString& name = wxEmptyString, - const wxDateTime& dt = wxDateTime::Now(), - wxFileOffset size = wxInvalidOffset); - virtual ~wxTarEntry(); - - wxTarEntry(const wxTarEntry& entry); - wxTarEntry& operator=(const wxTarEntry& entry); - - // Get accessors - wxString GetName(wxPathFormat format = wxPATH_NATIVE) const; - wxString GetInternalName() const { return m_Name; } - wxPathFormat GetInternalFormat() const { return wxPATH_UNIX; } - int GetMode() const; - int GetUserId() const { return m_UserId; } - int GetGroupId() const { return m_GroupId; } - wxFileOffset GetSize() const { return m_Size; } - wxFileOffset GetOffset() const { return m_Offset; } - wxDateTime GetDateTime() const { return m_ModifyTime; } - wxDateTime GetAccessTime() const { return m_AccessTime; } - wxDateTime GetCreateTime() const { return m_CreateTime; } - int GetTypeFlag() const { return m_TypeFlag; } - wxString GetLinkName() const { return m_LinkName; } - wxString GetUserName() const { return m_UserName; } - wxString GetGroupName() const { return m_GroupName; } - int GetDevMajor() const { return m_DevMajor; } - int GetDevMinor() const { return m_DevMinor; } - - // is accessors - bool IsDir() const; - bool IsReadOnly() const { return !(m_Mode & 0222); } - - // set accessors - void SetName(const wxString& name, wxPathFormat format = wxPATH_NATIVE); - void SetUserId(int id) { m_UserId = id; } - void SetGroupId(int id) { m_GroupId = id; } - void SetMode(int mode); - void SetSize(wxFileOffset size) { m_Size = size; } - void SetDateTime(const wxDateTime& dt) { m_ModifyTime = dt; } - void SetAccessTime(const wxDateTime& dt) { m_AccessTime = dt; } - void SetCreateTime(const wxDateTime& dt) { m_CreateTime = dt; } - void SetTypeFlag(int type) { m_TypeFlag = type; } - void SetLinkName(const wxString& link) { m_LinkName = link; } - void SetUserName(const wxString& user) { m_UserName = user; } - void SetGroupName(const wxString& group) { m_GroupName = group; } - void SetDevMajor(int dev) { m_DevMajor = dev; } - void SetDevMinor(int dev) { m_DevMinor = dev; } - - // set is accessors - void SetIsDir(bool isDir = true); - void SetIsReadOnly(bool isReadOnly = true); - - static wxString GetInternalName(const wxString& name, - wxPathFormat format = wxPATH_NATIVE, - bool *pIsDir = NULL); - - wxTarEntry *Clone() const { return new wxTarEntry(*this); } - - void SetNotifier(wxTarNotifier& WXUNUSED(notifier)) { } - -private: - void SetOffset(wxFileOffset offset) { m_Offset = offset; } - - virtual wxArchiveEntry* DoClone() const { return Clone(); } - - wxString m_Name; - int m_Mode; - bool m_IsModeSet; - int m_UserId; - int m_GroupId; - wxFileOffset m_Size; - wxFileOffset m_Offset; - wxDateTime m_ModifyTime; - wxDateTime m_AccessTime; - wxDateTime m_CreateTime; - int m_TypeFlag; - wxString m_LinkName; - wxString m_UserName; - wxString m_GroupName; - int m_DevMajor; - int m_DevMinor; - - friend class wxTarInputStream; - - DECLARE_DYNAMIC_CLASS(wxTarEntry) -}; - - -///////////////////////////////////////////////////////////////////////////// -// wxTarInputStream - -WX_DECLARE_STRING_HASH_MAP(wxString, wxTarHeaderRecords); - -class WXDLLIMPEXP_BASE wxTarInputStream : public wxArchiveInputStream -{ -public: - typedef wxTarEntry entry_type; - - wxTarInputStream(wxInputStream& stream, wxMBConv& conv = wxConvLocal); - wxTarInputStream(wxInputStream *stream, wxMBConv& conv = wxConvLocal); - virtual ~wxTarInputStream(); - - bool OpenEntry(wxTarEntry& entry); - bool CloseEntry(); - - wxTarEntry *GetNextEntry(); - - wxFileOffset GetLength() const { return m_size; } - bool IsSeekable() const { return m_parent_i_stream->IsSeekable(); } - -protected: - size_t OnSysRead(void *buffer, size_t size); - wxFileOffset OnSysTell() const { return m_pos; } - wxFileOffset OnSysSeek(wxFileOffset seek, wxSeekMode mode); - -private: - void Init(); - - wxArchiveEntry *DoGetNextEntry() { return GetNextEntry(); } - bool OpenEntry(wxArchiveEntry& entry); - bool IsOpened() const { return m_pos != wxInvalidOffset; } - - wxStreamError ReadHeaders(); - bool ReadExtendedHeader(wxTarHeaderRecords*& recs); - - wxString GetExtendedHeader(const wxString& key) const; - wxString GetHeaderPath() const; - wxFileOffset GetHeaderNumber(int id) const; - wxString GetHeaderString(int id) const; - wxDateTime GetHeaderDate(const wxString& key) const; - - wxFileOffset m_pos; // position within the current entry - wxFileOffset m_offset; // offset to the start of the entry's data - wxFileOffset m_size; // size of the current entry's data - - int m_sumType; - int m_tarType; - class wxTarHeaderBlock *m_hdr; - wxTarHeaderRecords *m_HeaderRecs; - wxTarHeaderRecords *m_GlobalHeaderRecs; - - DECLARE_NO_COPY_CLASS(wxTarInputStream) -}; - - -///////////////////////////////////////////////////////////////////////////// -// wxTarOutputStream - -class WXDLLIMPEXP_BASE wxTarOutputStream : public wxArchiveOutputStream -{ -public: - wxTarOutputStream(wxOutputStream& stream, - wxTarFormat format = wxTAR_PAX, - wxMBConv& conv = wxConvLocal); - wxTarOutputStream(wxOutputStream *stream, - wxTarFormat format = wxTAR_PAX, - wxMBConv& conv = wxConvLocal); - virtual ~wxTarOutputStream(); - - bool PutNextEntry(wxTarEntry *entry); - - bool PutNextEntry(const wxString& name, - const wxDateTime& dt = wxDateTime::Now(), - wxFileOffset size = wxInvalidOffset); - - bool PutNextDirEntry(const wxString& name, - const wxDateTime& dt = wxDateTime::Now()); - - bool CopyEntry(wxTarEntry *entry, wxTarInputStream& inputStream); - bool CopyArchiveMetaData(wxTarInputStream& WXUNUSED(s)) { return true; } - - void Sync(); - bool CloseEntry(); - bool Close(); - - bool IsSeekable() const { return m_parent_o_stream->IsSeekable(); } - - void SetBlockingFactor(int factor) { m_BlockingFactor = factor; } - int GetBlockingFactor() const { return m_BlockingFactor; } - -protected: - size_t OnSysWrite(const void *buffer, size_t size); - wxFileOffset OnSysTell() const { return m_pos; } - wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); - -private: - void Init(wxTarFormat format); - - bool PutNextEntry(wxArchiveEntry *entry); - bool CopyEntry(wxArchiveEntry *entry, wxArchiveInputStream& stream); - bool CopyArchiveMetaData(wxArchiveInputStream& WXUNUSED(s)) { return true; } - bool IsOpened() const { return m_pos != wxInvalidOffset; } - - bool WriteHeaders(wxTarEntry& entry); - bool ModifyHeader(); - wxString PaxHeaderPath(const wxString& format, const wxString& path); - - void SetExtendedHeader(const wxString& key, const wxString& value); - void SetHeaderPath(const wxString& name); - bool SetHeaderNumber(int id, wxFileOffset n); - void SetHeaderString(int id, const wxString& str); - void SetHeaderDate(const wxString& key, const wxDateTime& datetime); - - wxFileOffset m_pos; // position within the current entry - wxFileOffset m_maxpos; // max pos written - wxFileOffset m_size; // expected entry size - - wxFileOffset m_headpos; // offset within the file to the entry's header - wxFileOffset m_datapos; // offset within the file to the entry's data - - wxFileOffset m_tarstart;// offset within the file to the tar - wxFileOffset m_tarsize; // size of tar so far - - bool m_pax; - int m_BlockingFactor; - wxUint32 m_chksum; - bool m_large; - class wxTarHeaderBlock *m_hdr; - class wxTarHeaderBlock *m_hdr2; - char *m_extendedHdr; - size_t m_extendedSize; - wxString m_badfit; - - DECLARE_NO_COPY_CLASS(wxTarOutputStream) -}; - - -///////////////////////////////////////////////////////////////////////////// -// Iterators - -#if wxUSE_STL || defined WX_TEST_ARCHIVE_ITERATOR -typedef wxArchiveIterator<wxTarInputStream> wxTarIter; -typedef wxArchiveIterator<wxTarInputStream, - std::pair<wxString, wxTarEntry*> > wxTarPairIter; -#endif - - -///////////////////////////////////////////////////////////////////////////// -// wxTarClassFactory - -class WXDLLIMPEXP_BASE wxTarClassFactory : public wxArchiveClassFactory -{ -public: - typedef wxTarEntry entry_type; - typedef wxTarInputStream instream_type; - typedef wxTarOutputStream outstream_type; - typedef wxTarNotifier notifier_type; -#if wxUSE_STL || defined WX_TEST_ARCHIVE_ITERATOR - typedef wxTarIter iter_type; - typedef wxTarPairIter pairiter_type; -#endif - - wxTarClassFactory(); - - wxTarEntry *NewEntry() const - { return new wxTarEntry; } - wxTarInputStream *NewStream(wxInputStream& stream) const - { return new wxTarInputStream(stream, GetConv()); } - wxTarOutputStream *NewStream(wxOutputStream& stream) const - { return new wxTarOutputStream(stream, wxTAR_PAX, GetConv()); } - wxTarInputStream *NewStream(wxInputStream *stream) const - { return new wxTarInputStream(stream, GetConv()); } - wxTarOutputStream *NewStream(wxOutputStream *stream) const - { return new wxTarOutputStream(stream, wxTAR_PAX, GetConv()); } - - wxString GetInternalName(const wxString& name, - wxPathFormat format = wxPATH_NATIVE) const - { return wxTarEntry::GetInternalName(name, format); } - - const wxChar * const *GetProtocols(wxStreamProtocolType type - = wxSTREAM_PROTOCOL) const; - -protected: - wxArchiveEntry *DoNewEntry() const - { return NewEntry(); } - wxArchiveInputStream *DoNewStream(wxInputStream& stream) const - { return NewStream(stream); } - wxArchiveOutputStream *DoNewStream(wxOutputStream& stream) const - { return NewStream(stream); } - wxArchiveInputStream *DoNewStream(wxInputStream *stream) const - { return NewStream(stream); } - wxArchiveOutputStream *DoNewStream(wxOutputStream *stream) const - { return NewStream(stream); } - -private: - DECLARE_DYNAMIC_CLASS(wxTarClassFactory) -}; - - -#endif // wxUSE_TARSTREAM - -#endif // _WX_WXTARSTREAM_H__ diff --git a/desmume/src/windows/wx/include/wx/taskbar.h b/desmume/src/windows/wx/include/wx/taskbar.h deleted file mode 100644 index 3a26e78a8..000000000 --- a/desmume/src/windows/wx/include/wx/taskbar.h +++ /dev/null @@ -1,124 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/taskbar.h -// Purpose: wxTaskBarIcon base header and class -// Author: Julian Smart -// Modified by: -// Created: -// Copyright: (c) Julian Smart -// RCS-ID: $Id: taskbar.h 53135 2008-04-12 02:31:04Z VZ $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TASKBAR_H_BASE_ -#define _WX_TASKBAR_H_BASE_ - -#include "wx/defs.h" - -#ifdef wxHAS_TASK_BAR_ICON - -#include "wx/event.h" - -class WXDLLIMPEXP_FWD_ADV wxTaskBarIconEvent; - -// ---------------------------------------------------------------------------- -// wxTaskBarIconBase: define wxTaskBarIcon interface -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxTaskBarIconBase : public wxEvtHandler -{ -public: - wxTaskBarIconBase() { } - - // Operations: - virtual bool SetIcon(const wxIcon& icon, - const wxString& tooltip = wxEmptyString) = 0; - virtual bool RemoveIcon() = 0; - virtual bool PopupMenu(wxMenu *menu) = 0; - -protected: - // creates menu to be displayed when user clicks on the icon - virtual wxMenu *CreatePopupMenu() { return NULL; } - -private: - // default events handling, calls CreatePopupMenu: - void OnRightButtonDown(wxTaskBarIconEvent& event); - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxTaskBarIconBase) -}; - - -// ---------------------------------------------------------------------------- -// now include the actual class declaration -// ---------------------------------------------------------------------------- - -#if defined(__WXPALMOS__) - #include "wx/palmos/taskbar.h" -#elif defined(__WXMSW__) - #include "wx/msw/taskbar.h" -#elif defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) - #include "wx/unix/taskbarx11.h" -#elif defined (__WXMAC__) && defined(__WXMAC_OSX__) - #include "wx/mac/taskbarosx.h" -#elif defined (__WXCOCOA__) - #include "wx/cocoa/taskbar.h" -#endif - -// ---------------------------------------------------------------------------- -// wxTaskBarIcon events -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxTaskBarIconEvent : public wxEvent -{ -public: - wxTaskBarIconEvent(wxEventType evtType, wxTaskBarIcon *tbIcon) - : wxEvent(wxID_ANY, evtType) - { - SetEventObject(tbIcon); - } - - virtual wxEvent *Clone() const { return new wxTaskBarIconEvent(*this); } - -private: - DECLARE_NO_ASSIGN_CLASS(wxTaskBarIconEvent) -}; - -typedef void (wxEvtHandler::*wxTaskBarIconEventFunction)(wxTaskBarIconEvent&); - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV,wxEVT_TASKBAR_MOVE,1550) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV,wxEVT_TASKBAR_LEFT_DOWN,1551) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV,wxEVT_TASKBAR_LEFT_UP,1552) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV,wxEVT_TASKBAR_RIGHT_DOWN,1553) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV,wxEVT_TASKBAR_RIGHT_UP,1554) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV,wxEVT_TASKBAR_LEFT_DCLICK,1555) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV,wxEVT_TASKBAR_RIGHT_DCLICK,1556) -END_DECLARE_EVENT_TYPES() - -#define wxTaskBarIconEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxTaskBarIconEventFunction, &func) - -#define wx__DECLARE_TASKBAREVT(evt, fn) \ - wx__DECLARE_EVT0(wxEVT_TASKBAR_ ## evt, wxTaskBarIconEventHandler(fn)) - -#define EVT_TASKBAR_MOVE(fn) wx__DECLARE_TASKBAREVT(MOVE, fn) -#define EVT_TASKBAR_LEFT_DOWN(fn) wx__DECLARE_TASKBAREVT(LEFT_DOWN, fn) -#define EVT_TASKBAR_LEFT_UP(fn) wx__DECLARE_TASKBAREVT(LEFT_UP, fn) -#define EVT_TASKBAR_RIGHT_DOWN(fn) wx__DECLARE_TASKBAREVT(RIGHT_DOWN, fn) -#define EVT_TASKBAR_RIGHT_UP(fn) wx__DECLARE_TASKBAREVT(RIGHT_UP, fn) -#define EVT_TASKBAR_LEFT_DCLICK(fn) wx__DECLARE_TASKBAREVT(LEFT_DCLICK, fn) -#define EVT_TASKBAR_RIGHT_DCLICK(fn) wx__DECLARE_TASKBAREVT(RIGHT_DCLICK, fn) - -// taskbar menu is shown on right button press under all platforms except MSW -// where it's shown on right button release, using this event type and macro -// allows to write code which works correctly on all platforms -#ifdef __WXMSW__ - #define wxEVT_TASKBAR_CLICK wxEVT_TASKBAR_RIGHT_UP -#else - #define wxEVT_TASKBAR_CLICK wxEVT_TASKBAR_RIGHT_DOWN -#endif -#define EVT_TASKBAR_CLICK(fn) wx__DECLARE_TASKBAREVT(CLICK, fn) - -#endif // wxHAS_TASK_BAR_ICON - -#endif // _WX_TASKBAR_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/tbarbase.h b/desmume/src/windows/wx/include/wx/tbarbase.h deleted file mode 100644 index 05188e3f0..000000000 --- a/desmume/src/windows/wx/include/wx/tbarbase.h +++ /dev/null @@ -1,607 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/tbarbase.h -// Purpose: Base class for toolbar classes -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: tbarbase.h 49563 2007-10-31 20:46:21Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TBARBASE_H_ -#define _WX_TBARBASE_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_TOOLBAR - -#include "wx/bitmap.h" -#include "wx/list.h" -#include "wx/control.h" - -class WXDLLIMPEXP_FWD_CORE wxToolBarBase; -class WXDLLIMPEXP_FWD_CORE wxToolBarToolBase; -class WXDLLIMPEXP_FWD_CORE wxImage; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -extern WXDLLEXPORT_DATA(const wxChar) wxToolBarNameStr[]; -extern WXDLLEXPORT_DATA(const wxSize) wxDefaultSize; -extern WXDLLEXPORT_DATA(const wxPoint) wxDefaultPosition; - -enum wxToolBarToolStyle -{ - wxTOOL_STYLE_BUTTON = 1, - wxTOOL_STYLE_SEPARATOR = 2, - wxTOOL_STYLE_CONTROL -}; - -// ---------------------------------------------------------------------------- -// wxToolBarTool is a toolbar element. -// -// It has a unique id (except for the separators which always have id wxID_ANY), the -// style (telling whether it is a normal button, separator or a control), the -// state (toggled or not, enabled or not) and short and long help strings. The -// default implementations use the short help string for the tooltip text which -// is popped up when the mouse pointer enters the tool and the long help string -// for the applications status bar. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxToolBarToolBase : public wxObject -{ -public: - // ctors & dtor - // ------------ - - wxToolBarToolBase(wxToolBarBase *tbar = (wxToolBarBase *)NULL, - int toolid = wxID_SEPARATOR, - const wxString& label = wxEmptyString, - const wxBitmap& bmpNormal = wxNullBitmap, - const wxBitmap& bmpDisabled = wxNullBitmap, - wxItemKind kind = wxITEM_NORMAL, - wxObject *clientData = (wxObject *) NULL, - const wxString& shortHelpString = wxEmptyString, - const wxString& longHelpString = wxEmptyString) - : m_label(label), - m_shortHelpString(shortHelpString), - m_longHelpString(longHelpString) - { - m_tbar = tbar; - m_id = toolid; - if (m_id == wxID_ANY) - m_id = wxNewId(); - m_clientData = clientData; - - m_bmpNormal = bmpNormal; - m_bmpDisabled = bmpDisabled; - - m_kind = kind; - - m_enabled = true; - m_toggled = false; - - m_toolStyle = toolid == wxID_SEPARATOR ? wxTOOL_STYLE_SEPARATOR - : wxTOOL_STYLE_BUTTON; - } - - wxToolBarToolBase(wxToolBarBase *tbar, wxControl *control) - { - m_tbar = tbar; - m_control = control; - m_id = control->GetId(); - - m_kind = wxITEM_MAX; // invalid value - - m_enabled = true; - m_toggled = false; - - m_toolStyle = wxTOOL_STYLE_CONTROL; - } - - virtual ~wxToolBarToolBase(){} - - // accessors - // --------- - - // general - int GetId() const { return m_id; } - - wxControl *GetControl() const - { - wxASSERT_MSG( IsControl(), _T("this toolbar tool is not a control") ); - - return m_control; - } - - wxToolBarBase *GetToolBar() const { return m_tbar; } - - // style - bool IsButton() const { return m_toolStyle == wxTOOL_STYLE_BUTTON; } - bool IsControl() const { return m_toolStyle == wxTOOL_STYLE_CONTROL; } - bool IsSeparator() const { return m_toolStyle == wxTOOL_STYLE_SEPARATOR; } - int GetStyle() const { return m_toolStyle; } - wxItemKind GetKind() const - { - wxASSERT_MSG( IsButton(), _T("only makes sense for buttons") ); - - return m_kind; - } - - // state - bool IsEnabled() const { return m_enabled; } - bool IsToggled() const { return m_toggled; } - bool CanBeToggled() const - { return m_kind == wxITEM_CHECK || m_kind == wxITEM_RADIO; } - - // attributes - const wxBitmap& GetNormalBitmap() const { return m_bmpNormal; } - const wxBitmap& GetDisabledBitmap() const { return m_bmpDisabled; } - - const wxBitmap& GetBitmap() const - { return IsEnabled() ? GetNormalBitmap() : GetDisabledBitmap(); } - - const wxString& GetLabel() const { return m_label; } - - const wxString& GetShortHelp() const { return m_shortHelpString; } - const wxString& GetLongHelp() const { return m_longHelpString; } - - wxObject *GetClientData() const - { - if ( m_toolStyle == wxTOOL_STYLE_CONTROL ) - { - return (wxObject*)m_control->GetClientData(); - } - else - { - return m_clientData; - } - } - - // modifiers: return true if the state really changed - bool Enable(bool enable); - bool Toggle(bool toggle); - bool SetToggle(bool toggle); - bool SetShortHelp(const wxString& help); - bool SetLongHelp(const wxString& help); - - void Toggle() { Toggle(!IsToggled()); } - - void SetNormalBitmap(const wxBitmap& bmp) { m_bmpNormal = bmp; } - void SetDisabledBitmap(const wxBitmap& bmp) { m_bmpDisabled = bmp; } - - virtual void SetLabel(const wxString& label) { m_label = label; } - - void SetClientData(wxObject *clientData) - { - if ( m_toolStyle == wxTOOL_STYLE_CONTROL ) - { - m_control->SetClientData(clientData); - } - else - { - m_clientData = clientData; - } - } - - // add tool to/remove it from a toolbar - virtual void Detach() { m_tbar = (wxToolBarBase *)NULL; } - virtual void Attach(wxToolBarBase *tbar) { m_tbar = tbar; } - -protected: - wxToolBarBase *m_tbar; // the toolbar to which we belong (may be NULL) - - // tool parameters - int m_toolStyle; // see enum wxToolBarToolStyle - int m_id; // the tool id, wxID_SEPARATOR for separator - wxItemKind m_kind; // for normal buttons may be wxITEM_NORMAL/CHECK/RADIO - - // as controls have their own client data, no need to waste memory - union - { - wxObject *m_clientData; - wxControl *m_control; - }; - - // tool state - bool m_toggled; - bool m_enabled; - - // normal and disabled bitmaps for the tool, both can be invalid - wxBitmap m_bmpNormal; - wxBitmap m_bmpDisabled; - - // the button label - wxString m_label; - - // short and long help strings - wxString m_shortHelpString; - wxString m_longHelpString; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxToolBarToolBase) -}; - -// a list of toolbar tools -WX_DECLARE_EXPORTED_LIST(wxToolBarToolBase, wxToolBarToolsList); - -// ---------------------------------------------------------------------------- -// the base class for all toolbars -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxToolBarBase : public wxControl -{ -public: - wxToolBarBase(); - virtual ~wxToolBarBase(); - - // toolbar construction - // -------------------- - - // the full AddTool() function - // - // If bmpDisabled is wxNullBitmap, a shadowed version of the normal bitmap - // is created and used as the disabled image. - wxToolBarToolBase *AddTool(int toolid, - const wxString& label, - const wxBitmap& bitmap, - const wxBitmap& bmpDisabled, - wxItemKind kind = wxITEM_NORMAL, - const wxString& shortHelp = wxEmptyString, - const wxString& longHelp = wxEmptyString, - wxObject *data = NULL) - { - return DoAddTool(toolid, label, bitmap, bmpDisabled, kind, - shortHelp, longHelp, data); - } - - // the most common AddTool() version - wxToolBarToolBase *AddTool(int toolid, - const wxString& label, - const wxBitmap& bitmap, - const wxString& shortHelp = wxEmptyString, - wxItemKind kind = wxITEM_NORMAL) - { - return AddTool(toolid, label, bitmap, wxNullBitmap, kind, shortHelp); - } - - // add a check tool, i.e. a tool which can be toggled - wxToolBarToolBase *AddCheckTool(int toolid, - const wxString& label, - const wxBitmap& bitmap, - const wxBitmap& bmpDisabled = wxNullBitmap, - const wxString& shortHelp = wxEmptyString, - const wxString& longHelp = wxEmptyString, - wxObject *data = NULL) - { - return AddTool(toolid, label, bitmap, bmpDisabled, wxITEM_CHECK, - shortHelp, longHelp, data); - } - - // add a radio tool, i.e. a tool which can be toggled and releases any - // other toggled radio tools in the same group when it happens - wxToolBarToolBase *AddRadioTool(int toolid, - const wxString& label, - const wxBitmap& bitmap, - const wxBitmap& bmpDisabled = wxNullBitmap, - const wxString& shortHelp = wxEmptyString, - const wxString& longHelp = wxEmptyString, - wxObject *data = NULL) - { - return AddTool(toolid, label, bitmap, bmpDisabled, wxITEM_RADIO, - shortHelp, longHelp, data); - } - - - // insert the new tool at the given position, if pos == GetToolsCount(), it - // is equivalent to AddTool() - virtual wxToolBarToolBase *InsertTool - ( - size_t pos, - int toolid, - const wxString& label, - const wxBitmap& bitmap, - const wxBitmap& bmpDisabled = wxNullBitmap, - wxItemKind kind = wxITEM_NORMAL, - const wxString& shortHelp = wxEmptyString, - const wxString& longHelp = wxEmptyString, - wxObject *clientData = NULL - ); - - virtual wxToolBarToolBase *AddTool (wxToolBarToolBase *tool); - virtual wxToolBarToolBase *InsertTool (size_t pos, wxToolBarToolBase *tool); - - // add an arbitrary control to the toolbar (notice that - // the control will be deleted by the toolbar and that it will also adjust - // its position/size) - // - // NB: the control should have toolbar as its parent - virtual wxToolBarToolBase *AddControl(wxControl *control); - virtual wxToolBarToolBase *InsertControl(size_t pos, wxControl *control); - - // get the control with the given id or return NULL - virtual wxControl *FindControl( int toolid ); - - // add a separator to the toolbar - virtual wxToolBarToolBase *AddSeparator(); - virtual wxToolBarToolBase *InsertSeparator(size_t pos); - - // remove the tool from the toolbar: the caller is responsible for actually - // deleting the pointer - virtual wxToolBarToolBase *RemoveTool(int toolid); - - // delete tool either by index or by position - virtual bool DeleteToolByPos(size_t pos); - virtual bool DeleteTool(int toolid); - - // delete all tools - virtual void ClearTools(); - - // must be called after all buttons have been created to finish toolbar - // initialisation - virtual bool Realize(); - - // tools state - // ----------- - - virtual void EnableTool(int toolid, bool enable); - virtual void ToggleTool(int toolid, bool toggle); - - // Set this to be togglable (or not) - virtual void SetToggle(int toolid, bool toggle); - - // set/get tools client data (not for controls) - virtual wxObject *GetToolClientData(int toolid) const; - virtual void SetToolClientData(int toolid, wxObject *clientData); - - // returns tool pos, or wxNOT_FOUND if tool isn't found - virtual int GetToolPos(int id) const; - - // return true if the tool is toggled - virtual bool GetToolState(int toolid) const; - - virtual bool GetToolEnabled(int toolid) const; - - virtual void SetToolShortHelp(int toolid, const wxString& helpString); - virtual wxString GetToolShortHelp(int toolid) const; - virtual void SetToolLongHelp(int toolid, const wxString& helpString); - virtual wxString GetToolLongHelp(int toolid) const; - - // margins/packing/separation - // -------------------------- - - virtual void SetMargins(int x, int y); - void SetMargins(const wxSize& size) - { SetMargins((int) size.x, (int) size.y); } - virtual void SetToolPacking(int packing) - { m_toolPacking = packing; } - virtual void SetToolSeparation(int separation) - { m_toolSeparation = separation; } - - virtual wxSize GetToolMargins() const { return wxSize(m_xMargin, m_yMargin); } - virtual int GetToolPacking() const { return m_toolPacking; } - virtual int GetToolSeparation() const { return m_toolSeparation; } - - // toolbar geometry - // ---------------- - - // set the number of toolbar rows - virtual void SetRows(int nRows); - - // the toolbar can wrap - limit the number of columns or rows it may take - void SetMaxRowsCols(int rows, int cols) - { m_maxRows = rows; m_maxCols = cols; } - int GetMaxRows() const { return m_maxRows; } - int GetMaxCols() const { return m_maxCols; } - - // get/set the size of the bitmaps used by the toolbar: should be called - // before adding any tools to the toolbar - virtual void SetToolBitmapSize(const wxSize& size) - { m_defaultWidth = size.x; m_defaultHeight = size.y; } - virtual wxSize GetToolBitmapSize() const - { return wxSize(m_defaultWidth, m_defaultHeight); } - - // the button size in some implementations is bigger than the bitmap size: - // get the total button size (by default the same as bitmap size) - virtual wxSize GetToolSize() const - { 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) - virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, - wxCoord y) const = 0; - - // find the tool by id - wxToolBarToolBase *FindById(int toolid) const; - - // return true if this is a vertical toolbar, otherwise false - bool IsVertical() const { return HasFlag(wxTB_LEFT | wxTB_RIGHT); } - - - // the old versions of the various methods kept for compatibility - // don't use in the new code! - // -------------------------------------------------------------- - - wxToolBarToolBase *AddTool(int toolid, - const wxBitmap& bitmap, - const wxBitmap& bmpDisabled, - bool toggle = false, - wxObject *clientData = NULL, - const wxString& shortHelpString = wxEmptyString, - const wxString& longHelpString = wxEmptyString) - { - return AddTool(toolid, wxEmptyString, - bitmap, bmpDisabled, - toggle ? wxITEM_CHECK : wxITEM_NORMAL, - shortHelpString, longHelpString, clientData); - } - - wxToolBarToolBase *AddTool(int toolid, - const wxBitmap& bitmap, - const wxString& shortHelpString = wxEmptyString, - const wxString& longHelpString = wxEmptyString) - { - return AddTool(toolid, wxEmptyString, - bitmap, wxNullBitmap, wxITEM_NORMAL, - shortHelpString, longHelpString, NULL); - } - - wxToolBarToolBase *AddTool(int toolid, - const wxBitmap& bitmap, - const wxBitmap& bmpDisabled, - bool toggle, - wxCoord xPos, - wxCoord yPos = wxDefaultCoord, - wxObject *clientData = NULL, - const wxString& shortHelp = wxEmptyString, - const wxString& longHelp = wxEmptyString) - { - return DoAddTool(toolid, wxEmptyString, bitmap, bmpDisabled, - toggle ? wxITEM_CHECK : wxITEM_NORMAL, - shortHelp, longHelp, clientData, xPos, yPos); - } - - wxToolBarToolBase *InsertTool(size_t pos, - int toolid, - const wxBitmap& bitmap, - const wxBitmap& bmpDisabled = wxNullBitmap, - bool toggle = false, - wxObject *clientData = NULL, - const wxString& shortHelp = wxEmptyString, - const wxString& longHelp = wxEmptyString) - { - return InsertTool(pos, toolid, wxEmptyString, bitmap, bmpDisabled, - toggle ? wxITEM_CHECK : wxITEM_NORMAL, - shortHelp, longHelp, clientData); - } - - // event handlers - // -------------- - - // NB: these functions are deprecated, use EVT_TOOL_XXX() instead! - - // Only allow toggle if returns true. Call when left button up. - virtual bool OnLeftClick(int toolid, bool toggleDown); - - // Call when right button down. - virtual void OnRightClick(int toolid, long x, long y); - - // Called when the mouse cursor enters a tool bitmap. - // Argument is wxID_ANY if mouse is exiting the toolbar. - virtual void OnMouseEnter(int toolid); - - // more deprecated functions - // ------------------------- - - // use GetToolMargins() instead - wxSize GetMargins() const { return GetToolMargins(); } - - // implementation only from now on - // ------------------------------- - - size_t GetToolsCount() const { return m_tools.GetCount(); } - - // Do the toolbar button updates (check for EVT_UPDATE_UI handlers) - virtual void UpdateWindowUI(long flags = wxUPDATE_UI_NONE) ; - - // don't want toolbars to accept the focus - virtual bool AcceptsFocus() const { return false; } - -protected: - // to implement in derived classes - // ------------------------------- - - // create a new toolbar tool and add it to the toolbar, this is typically - // implemented by just calling InsertTool() - virtual wxToolBarToolBase *DoAddTool - ( - int toolid, - const wxString& label, - const wxBitmap& bitmap, - const wxBitmap& bmpDisabled, - wxItemKind kind, - const wxString& shortHelp = wxEmptyString, - const wxString& longHelp = wxEmptyString, - wxObject *clientData = NULL, - wxCoord xPos = wxDefaultCoord, - wxCoord yPos = wxDefaultCoord - ); - - // the tool is not yet inserted into m_tools list when this function is - // called and will only be added to it if this function succeeds - virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool) = 0; - - // the tool is still in m_tools list when this function is called, it will - // only be deleted from it if it succeeds - virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool) = 0; - - // called when the tools enabled flag changes - virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable) = 0; - - // called when the tool is toggled - virtual void DoToggleTool(wxToolBarToolBase *tool, bool toggle) = 0; - - // 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) = 0; - - // helper functions - // ---------------- - - // call this from derived class ctor/Create() to ensure that we have either - // wxTB_HORIZONTAL or wxTB_VERTICAL style, there is a lot of existing code - // which randomly checks either one or the other of them and gets confused - // if neither is set (and making one of them 0 is not an option neither as - // then the existing tests would break down) - void FixupStyle(); - - // un-toggle all buttons in the same radio group - void UnToggleRadioGroup(wxToolBarToolBase *tool); - - // the list of all our tools - wxToolBarToolsList m_tools; - - // the offset of the first tool - int m_xMargin; - int m_yMargin; - - // the maximum number of toolbar rows/columns - int m_maxRows; - int m_maxCols; - - // the tool packing and separation - int m_toolPacking, - m_toolSeparation; - - // the size of the toolbar bitmaps - wxCoord m_defaultWidth, m_defaultHeight; - -private: - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxToolBarBase) -}; - -// Helper function for creating the image for disabled buttons -bool wxCreateGreyedImage(const wxImage& in, wxImage& out) ; - -#endif // wxUSE_TOOLBAR - -#endif - // _WX_TBARBASE_H_ - diff --git a/desmume/src/windows/wx/include/wx/textbuf.h b/desmume/src/windows/wx/include/wx/textbuf.h deleted file mode 100644 index 569b1ac9e..000000000 --- a/desmume/src/windows/wx/include/wx/textbuf.h +++ /dev/null @@ -1,208 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/textbuf.h -// Purpose: class wxTextBuffer to work with text buffers of _small_ size -// (buffer is fully loaded in memory) and which understands CR/LF -// differences between platforms. -// Created: 14.11.01 -// Author: Morten Hanssen, Vadim Zeitlin -// Copyright: (c) 1998-2001 Morten Hanssen, Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TEXTBUFFER_H -#define _WX_TEXTBUFFER_H - -#include "wx/defs.h" -#include "wx/arrstr.h" -#include "wx/convauto.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// the line termination type (kept wxTextFileType name for compability) -enum wxTextFileType -{ - wxTextFileType_None, // incomplete (the last line of the file only) - wxTextFileType_Unix, // line is terminated with 'LF' = 0xA = 10 = '\n' - wxTextFileType_Dos, // 'CR' 'LF' - wxTextFileType_Mac, // 'CR' = 0xD = 13 = '\r' - wxTextFileType_Os2 // 'CR' 'LF' -}; - -#include "wx/string.h" - -#if wxUSE_TEXTBUFFER - -#include "wx/dynarray.h" - -// ---------------------------------------------------------------------------- -// wxTextBuffer -// ---------------------------------------------------------------------------- - -WX_DEFINE_USER_EXPORTED_ARRAY_INT(wxTextFileType, - wxArrayLinesType, - class WXDLLIMPEXP_BASE); - -#endif // wxUSE_TEXTBUFFER - -class WXDLLIMPEXP_BASE wxTextBuffer -{ -public: - // constants and static functions - // default type for current platform (determined at compile time) - static const wxTextFileType typeDefault; - - // this function returns a string which is identical to "text" passed in - // except that the line terminator characters are changed to correspond the - // given type. Called with the default argument, the function translates - // the string to the native format (Unix for Unix, DOS for Windows, ...). - static wxString Translate(const wxString& text, - wxTextFileType type = typeDefault); - - // get the buffer termination string - static const wxChar *GetEOL(wxTextFileType type = typeDefault); - - // the static methods of this class are compiled in even when - // !wxUSE_TEXTBUFFER because they are used by the library itself, but the - // rest can be left out -#if wxUSE_TEXTBUFFER - - // buffer operations - // ----------------- - - // buffer exists? - bool Exists() const; - - // create the buffer if it doesn't already exist - bool Create(); - - // same as Create() but with (another) buffer name - bool Create(const wxString& strBufferName); - - // Open() also loads buffer in memory on success - bool Open(const wxMBConv& conv = wxConvAuto()); - - // same as Open() but with (another) buffer name - bool Open(const wxString& strBufferName, const wxMBConv& conv = wxConvAuto()); - - // closes the buffer and frees memory, losing all changes - bool Close(); - - // is buffer currently opened? - bool IsOpened() const { return m_isOpened; } - - // accessors - // --------- - - // get the number of lines in the buffer - size_t GetLineCount() const { return m_aLines.size(); } - - // the returned line may be modified (but don't add CR/LF at the end!) - wxString& GetLine(size_t n) const { return (wxString&)m_aLines[n]; } - wxString& operator[](size_t n) const { return (wxString&)m_aLines[n]; } - - // the current line has meaning only when you're using - // GetFirstLine()/GetNextLine() functions, it doesn't get updated when - // you're using "direct access" i.e. GetLine() - size_t GetCurrentLine() const { return m_nCurLine; } - void GoToLine(size_t n) { m_nCurLine = n; } - bool Eof() const { return m_nCurLine == m_aLines.size(); } - - // these methods allow more "iterator-like" traversal of the list of - // lines, i.e. you may write something like: - // for ( str = GetFirstLine(); !Eof(); str = GetNextLine() ) { ... } - - // NB: const is commented out because not all compilers understand - // 'mutable' keyword yet (m_nCurLine should be mutable) - wxString& GetFirstLine() /* const */ - { return m_aLines.empty() ? ms_eof : m_aLines[m_nCurLine = 0]; } - wxString& GetNextLine() /* const */ - { return ++m_nCurLine == m_aLines.size() ? ms_eof - : m_aLines[m_nCurLine]; } - wxString& GetPrevLine() /* const */ - { wxASSERT(m_nCurLine > 0); return m_aLines[--m_nCurLine]; } - wxString& GetLastLine() /* const */ - { m_nCurLine = m_aLines.size() - 1; return m_aLines.Last(); } - - // get the type of the line (see also GetEOL) - wxTextFileType GetLineType(size_t n) const { return m_aTypes[n]; } - - // guess the type of buffer - wxTextFileType GuessType() const; - - // get the name of the buffer - const wxChar *GetName() const { return m_strBufferName.c_str(); } - - // add/remove lines - // ---------------- - - // add a line to the end - void AddLine(const wxString& str, wxTextFileType type = typeDefault) - { m_aLines.push_back(str); m_aTypes.push_back(type); } - // insert a line before the line number n - void InsertLine(const wxString& str, - size_t n, - wxTextFileType type = typeDefault) - { - m_aLines.insert(m_aLines.begin() + n, str); - m_aTypes.insert(m_aTypes.begin()+n, type); - } - - // delete one line - void RemoveLine(size_t n) - { - m_aLines.erase(m_aLines.begin() + n); - m_aTypes.erase(m_aTypes.begin() + n); - } - - // remove all lines - void Clear() { m_aLines.clear(); m_aTypes.clear(); m_nCurLine = 0; } - - // change the buffer (default argument means "don't change type") - // possibly in another format - bool Write(wxTextFileType typeNew = wxTextFileType_None, - const wxMBConv& conv = wxConvAuto()); - - // dtor - virtual ~wxTextBuffer(); - -protected: - // ctors - // ----- - - // default ctor, use Open(string) - wxTextBuffer() { m_nCurLine = 0; m_isOpened = false; } - - // ctor from filename - wxTextBuffer(const wxString& strBufferName); - - enum wxTextBufferOpenMode { ReadAccess, WriteAccess }; - - // Must implement these in derived classes. - virtual bool OnExists() const = 0; - virtual bool OnOpen(const wxString &strBufferName, - wxTextBufferOpenMode openmode) = 0; - virtual bool OnClose() = 0; - virtual bool OnRead(const wxMBConv& conv) = 0; - virtual bool OnWrite(wxTextFileType typeNew, const wxMBConv& conv) = 0; - - static wxString ms_eof; // dummy string returned at EOF - wxString m_strBufferName; // name of the buffer - -private: - wxArrayLinesType m_aTypes; // type of each line - wxArrayString m_aLines; // lines of file - - size_t m_nCurLine; // number of current line in the buffer - - bool m_isOpened; // was the buffer successfully opened the last time? -#endif // wxUSE_TEXTBUFFER - - // copy ctor/assignment operator not implemented - wxTextBuffer(const wxTextBuffer&); - wxTextBuffer& operator=(const wxTextBuffer&); -}; - -#endif // _WX_TEXTBUFFER_H - diff --git a/desmume/src/windows/wx/include/wx/textctrl.h b/desmume/src/windows/wx/include/wx/textctrl.h deleted file mode 100644 index c69c17274..000000000 --- a/desmume/src/windows/wx/include/wx/textctrl.h +++ /dev/null @@ -1,601 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/textctrl.h -// Purpose: wxTextCtrlBase class - the interface of wxTextCtrl -// Author: Vadim Zeitlin -// Modified by: -// Created: 13.07.99 -// RCS-ID: $Id: textctrl.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TEXTCTRL_H_BASE_ -#define _WX_TEXTCTRL_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_TEXTCTRL - -#include "wx/control.h" // the base class -#include "wx/dynarray.h" // wxArrayInt -#include "wx/gdicmn.h" // wxPoint - -// Open Watcom 1.3 does allow only ios::rdbuf() while -// we want something with streambuf parameter -// Also, can't use streambuf if making or using a DLL :-( - -#if defined(__WATCOMC__) || \ - defined(__MWERKS__) || \ - (defined(__WINDOWS__) && (defined(WXUSINGDLL) || defined(WXMAKINGDLL))) - #define wxHAS_TEXT_WINDOW_STREAM 0 -#elif wxUSE_STD_IOSTREAM - #include "wx/ioswrap.h" - #define wxHAS_TEXT_WINDOW_STREAM 1 -#else - #define wxHAS_TEXT_WINDOW_STREAM 0 -#endif - -#if WXWIN_COMPATIBILITY_2_4 && !wxHAS_TEXT_WINDOW_STREAM - // define old flag if one could use it somewhere - #define NO_TEXT_WINDOW_STREAM -#endif - -class WXDLLIMPEXP_FWD_CORE wxTextCtrl; -class WXDLLIMPEXP_FWD_CORE wxTextCtrlBase; - -// ---------------------------------------------------------------------------- -// wxTextCtrl types -// ---------------------------------------------------------------------------- - -// wxTextPos is the position in the text -typedef long wxTextPos; - -// wxTextCoord is the line or row number (which should have been unsigned but -// is long for backwards compatibility) -typedef long wxTextCoord; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -extern WXDLLEXPORT_DATA(const wxChar) wxTextCtrlNameStr[]; - -// this is intentionally not enum to avoid warning fixes with -// typecasting from enum type to wxTextCoord -const wxTextCoord wxOutOfRangeTextCoord = -1; -const wxTextCoord wxInvalidTextCoord = -2; - -// ---------------------------------------------------------------------------- -// wxTextCtrl style flags -// ---------------------------------------------------------------------------- - -#define wxTE_NO_VSCROLL 0x0002 -#define wxTE_AUTO_SCROLL 0x0008 - -#define wxTE_READONLY 0x0010 -#define wxTE_MULTILINE 0x0020 -#define wxTE_PROCESS_TAB 0x0040 - -// alignment flags -#define wxTE_LEFT 0x0000 // 0x0000 -#define wxTE_CENTER wxALIGN_CENTER_HORIZONTAL // 0x0100 -#define wxTE_RIGHT wxALIGN_RIGHT // 0x0200 -#define wxTE_CENTRE wxTE_CENTER - -// this style means to use RICHEDIT control and does something only under wxMSW -// and Win32 and is silently ignored under all other platforms -#define wxTE_RICH 0x0080 - -#define wxTE_PROCESS_ENTER 0x0400 -#define wxTE_PASSWORD 0x0800 - -// automatically detect the URLs and generate the events when mouse is -// moved/clicked over an URL -// -// this is for Win32 richedit and wxGTK2 multiline controls only so far -#define wxTE_AUTO_URL 0x1000 - -// by default, the Windows text control doesn't show the selection when it -// doesn't have focus - use this style to force it to always show it -#define wxTE_NOHIDESEL 0x2000 - -// use wxHSCROLL to not wrap text at all, wxTE_CHARWRAP to wrap it at any -// position and wxTE_WORDWRAP to wrap at words boundary -// -// if no wrapping style is given at all, the control wraps at word boundary -#define wxTE_DONTWRAP wxHSCROLL -#define wxTE_CHARWRAP 0x4000 // wrap at any position -#define wxTE_WORDWRAP 0x0001 // wrap only at words boundaries -#define wxTE_BESTWRAP 0x0000 // this is the default - -#if WXWIN_COMPATIBILITY_2_6 - // obsolete synonym - #define wxTE_LINEWRAP wxTE_CHARWRAP -#endif // WXWIN_COMPATIBILITY_2_6 - -// force using RichEdit version 2.0 or 3.0 instead of 1.0 (default) for -// wxTE_RICH controls - can be used together with or instead of wxTE_RICH -#define wxTE_RICH2 0x8000 - -// reuse wxTE_RICH2's value for CAPEDIT control on Windows CE -#if defined(__SMARTPHONE__) || defined(__POCKETPC__) -#define wxTE_CAPITALIZE wxTE_RICH2 -#else -#define wxTE_CAPITALIZE 0 -#endif - -// ---------------------------------------------------------------------------- -// wxTextCtrl file types -// ---------------------------------------------------------------------------- - -#define wxTEXT_TYPE_ANY 0 - -// ---------------------------------------------------------------------------- -// wxTextCtrl::HitTest return values -// ---------------------------------------------------------------------------- - -// the point asked is ... -enum wxTextCtrlHitTestResult -{ - wxTE_HT_UNKNOWN = -2, // this means HitTest() is simply not implemented - wxTE_HT_BEFORE, // either to the left or upper - wxTE_HT_ON_TEXT, // directly on - wxTE_HT_BELOW, // below [the last line] - wxTE_HT_BEYOND // after [the end of line] -}; -// ... the character returned - -// ---------------------------------------------------------------------------- -// Types for wxTextAttr -// ---------------------------------------------------------------------------- - -// Alignment - -enum wxTextAttrAlignment -{ - wxTEXT_ALIGNMENT_DEFAULT, - wxTEXT_ALIGNMENT_LEFT, - wxTEXT_ALIGNMENT_CENTRE, - wxTEXT_ALIGNMENT_CENTER = wxTEXT_ALIGNMENT_CENTRE, - wxTEXT_ALIGNMENT_RIGHT, - wxTEXT_ALIGNMENT_JUSTIFIED -}; - -// Flags to indicate which attributes are being applied - -#define wxTEXT_ATTR_TEXT_COLOUR 0x0001 -#define wxTEXT_ATTR_BACKGROUND_COLOUR 0x0002 -#define wxTEXT_ATTR_FONT_FACE 0x0004 -#define wxTEXT_ATTR_FONT_SIZE 0x0008 -#define wxTEXT_ATTR_FONT_WEIGHT 0x0010 -#define wxTEXT_ATTR_FONT_ITALIC 0x0020 -#define wxTEXT_ATTR_FONT_UNDERLINE 0x0040 -#define wxTEXT_ATTR_FONT \ - ( wxTEXT_ATTR_FONT_FACE | wxTEXT_ATTR_FONT_SIZE | wxTEXT_ATTR_FONT_WEIGHT | \ - wxTEXT_ATTR_FONT_ITALIC | wxTEXT_ATTR_FONT_UNDERLINE ) -#define wxTEXT_ATTR_ALIGNMENT 0x0080 -#define wxTEXT_ATTR_LEFT_INDENT 0x0100 -#define wxTEXT_ATTR_RIGHT_INDENT 0x0200 -#define wxTEXT_ATTR_TABS 0x0400 - -// ---------------------------------------------------------------------------- -// wxTextAttr: a structure containing the visual attributes of a text -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTextAttr -{ -public: - // ctors - wxTextAttr() { Init(); } - wxTextAttr(const wxColour& colText, - const wxColour& colBack = wxNullColour, - const wxFont& font = wxNullFont, - wxTextAttrAlignment alignment = wxTEXT_ALIGNMENT_DEFAULT); - - // operations - void Init(); - - // merges the attributes of the base and the overlay objects and returns - // the result; the parameter attributes take precedence - // - // WARNING: the order of arguments is the opposite of Combine() - static wxTextAttr Merge(const wxTextAttr& base, const wxTextAttr& overlay) - { - return Combine(overlay, base, NULL); - } - - // merges the attributes of this object and overlay - void Merge(const wxTextAttr& overlay) - { - *this = Merge(*this, overlay); - } - - - // operators - void operator= (const wxTextAttr& attr); - - // setters - void SetTextColour(const wxColour& colText) { m_colText = colText; m_flags |= wxTEXT_ATTR_TEXT_COLOUR; } - void SetBackgroundColour(const wxColour& colBack) { m_colBack = colBack; m_flags |= wxTEXT_ATTR_BACKGROUND_COLOUR; } - void SetFont(const wxFont& font, long flags = wxTEXT_ATTR_FONT) { m_font = font; m_flags |= flags; } - void SetAlignment(wxTextAttrAlignment alignment) { m_textAlignment = alignment; m_flags |= wxTEXT_ATTR_ALIGNMENT; } - void SetTabs(const wxArrayInt& tabs) { m_tabs = tabs; m_flags |= wxTEXT_ATTR_TABS; } - void SetLeftIndent(int indent, int subIndent = 0) { m_leftIndent = indent; m_leftSubIndent = subIndent; m_flags |= wxTEXT_ATTR_LEFT_INDENT; } - void SetRightIndent(int indent) { m_rightIndent = indent; m_flags |= wxTEXT_ATTR_RIGHT_INDENT; } - void SetFlags(long flags) { m_flags = flags; } - - // 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 HasFont() const { return m_font.Ok() && HasFlag(wxTEXT_ATTR_FONT) ; } - bool HasAlignment() const { return (m_textAlignment != wxTEXT_ALIGNMENT_DEFAULT) && ((m_flags & wxTEXT_ATTR_ALIGNMENT) != 0) ; } - bool HasTabs() const { return (m_flags & wxTEXT_ATTR_TABS) != 0 ; } - bool HasLeftIndent() const { return (m_flags & wxTEXT_ATTR_LEFT_INDENT) != 0 ; } - bool HasRightIndent() const { return (m_flags & wxTEXT_ATTR_RIGHT_INDENT) != 0 ; } - bool HasFlag(long flag) const { return (m_flags & flag) != 0; } - - const wxColour& GetTextColour() const { return m_colText; } - const wxColour& GetBackgroundColour() const { return m_colBack; } - const wxFont& GetFont() const { return m_font; } - wxTextAttrAlignment GetAlignment() const { return m_textAlignment; } - const wxArrayInt& GetTabs() const { return m_tabs; } - long GetLeftIndent() const { return m_leftIndent; } - long GetLeftSubIndent() const { return m_leftSubIndent; } - long GetRightIndent() const { return m_rightIndent; } - long GetFlags() const { return m_flags; } - - // returns false if we have any attributes set, true otherwise - bool IsDefault() const - { - return !HasTextColour() && !HasBackgroundColour() && !HasFont() && !HasAlignment() && - !HasTabs() && !HasLeftIndent() && !HasRightIndent() ; - } - - // return the attribute having the valid font and colours: it uses the - // attributes set in attr and falls back first to attrDefault and then to - // the text control font/colours for those attributes which are not set - static wxTextAttr Combine(const wxTextAttr& attr, - const wxTextAttr& attrDef, - const wxTextCtrlBase *text); - -private: - long m_flags; - wxColour m_colText, - m_colBack; - wxFont m_font; - wxTextAttrAlignment m_textAlignment; - wxArrayInt m_tabs; // array of int: tab stops in 1/10 mm - int m_leftIndent; // left indent in 1/10 mm - int m_leftSubIndent; // left indent for all but the first - // line in a paragraph relative to the - // first line, in 1/10 mm - int m_rightIndent; // right indent in 1/10 mm -}; - -// ---------------------------------------------------------------------------- -// wxTextCtrl: a single or multiple line text zone where user can enter and -// edit text -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTextCtrlBase : public wxControl -#if wxHAS_TEXT_WINDOW_STREAM - , public wxSTD streambuf -#endif - -{ -public: - // creation - // -------- - - wxTextCtrlBase(){} - virtual ~wxTextCtrlBase(){} - - // accessors - // --------- - - virtual wxString GetValue() const = 0; - virtual bool IsEmpty() const { return GetValue().empty(); } - - virtual void SetValue(const wxString& value) - { DoSetValue(value, SetValue_SendEvent); } - virtual void ChangeValue(const wxString& value) - { DoSetValue(value); } - - virtual wxString GetRange(long from, long to) const; - - virtual int GetLineLength(long lineNo) const = 0; - virtual wxString GetLineText(long lineNo) const = 0; - virtual int GetNumberOfLines() const = 0; - - virtual bool IsModified() const = 0; - virtual bool IsEditable() const = 0; - - // more readable flag testing methods - bool IsSingleLine() const { return !HasFlag(wxTE_MULTILINE); } - bool IsMultiLine() const { return !IsSingleLine(); } - - // If the return values from and to are the same, there is no selection. - virtual void GetSelection(long* from, long* to) const = 0; - - virtual wxString GetStringSelection() const; - - // operations - // ---------- - - // editing - virtual void Clear() = 0; - virtual void Replace(long from, long to, const wxString& value) = 0; - virtual void Remove(long from, long to) = 0; - - // load/save the control's contents from/to a file - bool LoadFile(const wxString& file, int fileType = wxTEXT_TYPE_ANY) { return DoLoadFile(file, fileType); } - bool SaveFile(const wxString& file = wxEmptyString, int fileType = wxTEXT_TYPE_ANY); - - // implementation for loading/saving - virtual bool DoLoadFile(const wxString& file, int fileType); - virtual bool DoSaveFile(const wxString& file, int fileType); - - // sets/clears the dirty flag - virtual void MarkDirty() = 0; - virtual void DiscardEdits() = 0; - void SetModified(bool modified) - { - if ( modified ) - MarkDirty(); - else - DiscardEdits(); - } - - // set the max number of characters which may be entered in a single line - // text control - virtual void SetMaxLength(unsigned long WXUNUSED(len)) { } - - // writing text inserts it at the current position, appending always - // inserts it at the end - virtual void WriteText(const wxString& text) = 0; - virtual void AppendText(const wxString& text) = 0; - - // insert the character which would have resulted from this key event, - // return true if anything has been inserted - virtual bool EmulateKeyPress(const wxKeyEvent& event); - - // text control under some platforms supports the text styles: these - // methods allow to apply the given text style to the given selection or to - // set/get the style which will be used for all appended text - virtual bool SetStyle(long start, long end, const wxTextAttr& style); - virtual bool GetStyle(long position, wxTextAttr& style); - virtual bool SetDefaultStyle(const wxTextAttr& style); - virtual const wxTextAttr& GetDefaultStyle() const; - - // translate between the position (which is just an index in the text ctrl - // considering all its contents as a single strings) and (x, y) coordinates - // which represent column and line. - virtual long XYToPosition(long x, long y) const = 0; - virtual bool PositionToXY(long pos, long *x, long *y) const = 0; - - virtual void ShowPosition(long pos) = 0; - - // find the character at position given in pixels - // - // NB: pt is in device coords (not adjusted for the client area origin nor - // scrolling) - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const; - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, - wxTextCoord *col, - wxTextCoord *row) const; - - // Clipboard operations - virtual void Copy() = 0; - virtual void Cut() = 0; - virtual void Paste() = 0; - - virtual bool CanCopy() const; - virtual bool CanCut() const; - virtual bool CanPaste() const; - - // Undo/redo - virtual void Undo() = 0; - virtual void Redo() = 0; - - virtual bool CanUndo() const = 0; - virtual bool CanRedo() const = 0; - - // Insertion point - virtual void SetInsertionPoint(long pos) = 0; - virtual void SetInsertionPointEnd() = 0; - virtual long GetInsertionPoint() const = 0; - virtual wxTextPos GetLastPosition() const = 0; - - virtual void SetSelection(long from, long to) = 0; - virtual void SelectAll(); - virtual void SetEditable(bool editable) = 0; - - // stream-like insertion operators: these are always available, whether we - // were, or not, compiled with streambuf support - wxTextCtrl& operator<<(const wxString& s); - wxTextCtrl& operator<<(int i); - wxTextCtrl& operator<<(long i); - wxTextCtrl& operator<<(float f); - wxTextCtrl& operator<<(double d); - wxTextCtrl& operator<<(const wxChar c); - - // generate the wxEVT_COMMAND_TEXT_UPDATED event, like SetValue() does - void SendTextUpdatedEvent(); - - // do the window-specific processing after processing the update event - virtual void DoUpdateWindowUI(wxUpdateUIEvent& event); - - virtual bool ShouldInheritColours() const { return false; } - -protected: - // override streambuf method -#if wxHAS_TEXT_WINDOW_STREAM - int overflow(int i); -#endif // wxHAS_TEXT_WINDOW_STREAM - - // flags for DoSetValue(): common part of SetValue() and ChangeValue() and - // also used to implement WriteText() in wxMSW - enum - { - SetValue_SendEvent = 1, - SetValue_SelectionOnly = 2 - }; - - virtual void DoSetValue(const wxString& value, int flags = 0) = 0; - - - // the name of the last file loaded with LoadFile() which will be used by - // SaveFile() by default - wxString m_filename; - - // the text style which will be used for any new text added to the control - wxTextAttr m_defaultStyle; - - DECLARE_NO_COPY_CLASS(wxTextCtrlBase) - DECLARE_ABSTRACT_CLASS(wxTextCtrlBase) -}; - -// ---------------------------------------------------------------------------- -// include the platform-dependent class definition -// ---------------------------------------------------------------------------- - -#if defined(__WXX11__) - #include "wx/x11/textctrl.h" -#elif defined(__WXUNIVERSAL__) - #include "wx/univ/textctrl.h" -#elif defined(__SMARTPHONE__) && defined(__WXWINCE__) - #include "wx/msw/wince/textctrlce.h" -#elif defined(__WXMSW__) - #include "wx/msw/textctrl.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/textctrl.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/textctrl.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/textctrl.h" -#elif defined(__WXMAC__) - #include "wx/mac/textctrl.h" -#elif defined(__WXCOCOA__) - #include "wx/cocoa/textctrl.h" -#elif defined(__WXPM__) - #include "wx/os2/textctrl.h" -#endif - -// ---------------------------------------------------------------------------- -// wxTextCtrl events -// ---------------------------------------------------------------------------- - -#if !WXWIN_COMPATIBILITY_EVENT_TYPES - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_UPDATED, 7) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_ENTER, 8) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_URL, 13) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TEXT_MAXLEN, 14) -END_DECLARE_EVENT_TYPES() - -#endif // !WXWIN_COMPATIBILITY_EVENT_TYPES - -class WXDLLEXPORT wxTextUrlEvent : public wxCommandEvent -{ -public: - wxTextUrlEvent(int winid, const wxMouseEvent& evtMouse, - long start, long end) - : wxCommandEvent(wxEVT_COMMAND_TEXT_URL, winid) - , m_evtMouse(evtMouse), m_start(start), m_end(end) - { } - - // get the mouse event which happend over the URL - const wxMouseEvent& GetMouseEvent() const { return m_evtMouse; } - - // get the start of the URL - long GetURLStart() const { return m_start; } - - // get the end of the URL - long GetURLEnd() const { return m_end; } - -protected: - // the corresponding mouse event - wxMouseEvent m_evtMouse; - - // the start and end indices of the URL in the text control - long m_start, - m_end; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxTextUrlEvent) - -public: - // for wxWin RTTI only, don't use - wxTextUrlEvent() : m_evtMouse(), m_start(0), m_end(0) { } -}; - -typedef void (wxEvtHandler::*wxTextUrlEventFunction)(wxTextUrlEvent&); - -#define wxTextEventHandler(func) wxCommandEventHandler(func) -#define wxTextUrlEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxTextUrlEventFunction, &func) - -#define wx__DECLARE_TEXTEVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_ ## evt, id, wxTextEventHandler(fn)) - -#define wx__DECLARE_TEXTURLEVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_TEXT_ ## evt, id, wxTextUrlEventHandler(fn)) - -#define EVT_TEXT(id, fn) wx__DECLARE_TEXTEVT(UPDATED, id, fn) -#define EVT_TEXT_ENTER(id, fn) wx__DECLARE_TEXTEVT(ENTER, id, fn) -#define EVT_TEXT_URL(id, fn) wx__DECLARE_TEXTURLEVT(URL, id, fn) -#define EVT_TEXT_MAXLEN(id, fn) wx__DECLARE_TEXTEVT(MAXLEN, id, fn) - -#if wxHAS_TEXT_WINDOW_STREAM - -// ---------------------------------------------------------------------------- -// wxStreamToTextRedirector: this class redirects all data sent to the given -// C++ stream to the wxTextCtrl given to its ctor during its lifetime. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStreamToTextRedirector -{ -private: - void Init(wxTextCtrl *text) - { - m_sbufOld = m_ostr.rdbuf(); - m_ostr.rdbuf(text); - } - -public: - wxStreamToTextRedirector(wxTextCtrl *text) - : m_ostr(wxSTD cout) - { - Init(text); - } - - wxStreamToTextRedirector(wxTextCtrl *text, wxSTD ostream *ostr) - : m_ostr(*ostr) - { - Init(text); - } - - ~wxStreamToTextRedirector() - { - m_ostr.rdbuf(m_sbufOld); - } - -private: - // the stream we're redirecting - wxSTD ostream& m_ostr; - - // the old streambuf (before we changed it) - wxSTD streambuf *m_sbufOld; -}; - -#endif // wxHAS_TEXT_WINDOW_STREAM - -#endif // wxUSE_TEXTCTRL - -#endif - // _WX_TEXTCTRL_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/textdlg.h b/desmume/src/windows/wx/include/wx/textdlg.h deleted file mode 100644 index 4db4e33fb..000000000 --- a/desmume/src/windows/wx/include/wx/textdlg.h +++ /dev/null @@ -1,23 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: textdlg.h -// Purpose: wxTextEntryDialog class -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: textdlg.h 27408 2004-05-23 20:53:33Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TEXTDLG_H_BASE_ -#define _WX_TEXTDLG_H_BASE_ - -#include "wx/generic/textdlgg.h" - -#if WXWIN_COMPATIBILITY_2_4 - // for wxGetNumberFromUser() - #include "wx/numdlg.h" -#endif // WXWIN_COMPATIBILITY_2_4 - -#endif // _WX_TEXTDLG_H_BASE_ - diff --git a/desmume/src/windows/wx/include/wx/textfile.h b/desmume/src/windows/wx/include/wx/textfile.h deleted file mode 100644 index bfbed0b96..000000000 --- a/desmume/src/windows/wx/include/wx/textfile.h +++ /dev/null @@ -1,62 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/textfile.h -// Purpose: class wxTextFile to work with text files of _small_ size -// (file is fully loaded in memory) and which understands CR/LF -// differences between platforms. -// Author: Vadim Zeitlin -// Modified by: -// Created: 03.04.98 -// RCS-ID: $Id: textfile.h 38570 2006-04-05 14:37:47Z VZ $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TEXTFILE_H -#define _WX_TEXTFILE_H - -#include "wx/defs.h" - -#include "wx/textbuf.h" - -#if wxUSE_TEXTFILE - -#include "wx/file.h" - -// ---------------------------------------------------------------------------- -// wxTextFile -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxTextFile : public wxTextBuffer -{ -public: - // constructors - wxTextFile() { } - wxTextFile(const wxString& strFileName); - -protected: - // implement the base class pure virtuals - virtual bool OnExists() const; - virtual bool OnOpen(const wxString &strBufferName, - wxTextBufferOpenMode OpenMode); - virtual bool OnClose(); - virtual bool OnRead(const wxMBConv& conv); - virtual bool OnWrite(wxTextFileType typeNew, const wxMBConv& conv); - -private: - - wxFile m_file; - - DECLARE_NO_COPY_CLASS(wxTextFile) -}; - -#else // !wxUSE_TEXTFILE - -// old code relies on the static methods of wxTextFile being always available -// and they still are available in wxTextBuffer (even if !wxUSE_TEXTBUFFER), so -// make it possible to use them in a backwards compatible way -typedef wxTextBuffer wxTextFile; - -#endif // wxUSE_TEXTFILE/!wxUSE_TEXTFILE - -#endif // _WX_TEXTFILE_H - diff --git a/desmume/src/windows/wx/include/wx/tglbtn.h b/desmume/src/windows/wx/include/wx/tglbtn.h deleted file mode 100644 index ebc83ddcf..000000000 --- a/desmume/src/windows/wx/include/wx/tglbtn.h +++ /dev/null @@ -1,51 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/tglbtn.h -// Purpose: This dummy header includes the proper header file for the -// system we're compiling under. -// Author: John Norris, minor changes by Axel Schlueter -// Modified by: -// Created: 08.02.01 -// RCS-ID: $Id: tglbtn.h 39293 2006-05-23 17:53:50Z JS $ -// Copyright: (c) 2000 Johnny C. Norris II -// License: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TOGGLEBUTTON_H_BASE_ -#define _WX_TOGGLEBUTTON_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_TOGGLEBTN - -#include "wx/event.h" -#include "wx/control.h" // base class - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, 19) -END_DECLARE_EVENT_TYPES() - -#define EVT_TOGGLEBUTTON(id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, id, wxCommandEventHandler(fn)) - -#if defined(__WXUNIVERSAL__) - #include "wx/univ/tglbtn.h" -#elif defined(__WXMSW__) - #include "wx/msw/tglbtn.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/tglbtn.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/tglbtn.h" -# elif defined(__WXMOTIF__) - #include "wx/motif/tglbtn.h" -#elif defined(__WXMAC__) - #include "wx/mac/tglbtn.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/tglbtn.h" -#elif defined(__WXPM__) - #include "wx/os2/tglbtn.h" -#endif - -#endif // wxUSE_TOGGLEBTN - -#endif // _WX_TOGGLEBUTTON_H_BASE_ - diff --git a/desmume/src/windows/wx/include/wx/thread.h b/desmume/src/windows/wx/include/wx/thread.h deleted file mode 100644 index f25e522c6..000000000 --- a/desmume/src/windows/wx/include/wx/thread.h +++ /dev/null @@ -1,762 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/thread.h -// Purpose: Thread API -// Author: Guilhem Lavaux -// Modified by: Vadim Zeitlin (modifications partly inspired by omnithreads -// package from Olivetti & Oracle Research Laboratory) -// Created: 04/13/98 -// RCS-ID: $Id: thread.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_THREAD_H_ -#define _WX_THREAD_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -// get the value of wxUSE_THREADS configuration flag -#include "wx/defs.h" - -#if wxUSE_THREADS - -// Windows headers define it -#ifdef Yield - #undef Yield -#endif - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -enum wxMutexError -{ - wxMUTEX_NO_ERROR = 0, // operation completed successfully - wxMUTEX_INVALID, // mutex hasn't been initialized - wxMUTEX_DEAD_LOCK, // mutex is already locked by the calling thread - wxMUTEX_BUSY, // mutex is already locked by another thread - wxMUTEX_UNLOCKED, // attempt to unlock a mutex which is not locked - wxMUTEX_MISC_ERROR // any other error -}; - -enum wxCondError -{ - wxCOND_NO_ERROR = 0, - wxCOND_INVALID, - wxCOND_TIMEOUT, // WaitTimeout() has timed out - wxCOND_MISC_ERROR -}; - -enum wxSemaError -{ - wxSEMA_NO_ERROR = 0, - wxSEMA_INVALID, // semaphore hasn't been initialized successfully - wxSEMA_BUSY, // returned by TryWait() if Wait() would block - wxSEMA_TIMEOUT, // returned by WaitTimeout() - wxSEMA_OVERFLOW, // Post() would increase counter past the max - wxSEMA_MISC_ERROR -}; - -enum wxThreadError -{ - wxTHREAD_NO_ERROR = 0, // No error - wxTHREAD_NO_RESOURCE, // No resource left to create a new thread - wxTHREAD_RUNNING, // The thread is already running - wxTHREAD_NOT_RUNNING, // The thread isn't running - wxTHREAD_KILLED, // Thread we waited for had to be killed - wxTHREAD_MISC_ERROR // Some other error -}; - -enum wxThreadKind -{ - wxTHREAD_DETACHED, - wxTHREAD_JOINABLE -}; - -// defines the interval of priority -enum -{ - WXTHREAD_MIN_PRIORITY = 0u, - WXTHREAD_DEFAULT_PRIORITY = 50u, - WXTHREAD_MAX_PRIORITY = 100u -}; - -// There are 2 types of mutexes: normal mutexes and recursive ones. The attempt -// to lock a normal mutex by a thread which already owns it results in -// undefined behaviour (it always works under Windows, it will almost always -// result in a deadlock under Unix). Locking a recursive mutex in such -// situation always succeeds and it must be unlocked as many times as it has -// been locked. -// -// However recursive mutexes have several important drawbacks: first, in the -// POSIX implementation, they're less efficient. Second, and more importantly, -// they CAN NOT BE USED WITH CONDITION VARIABLES under Unix! Using them with -// wxCondition will work under Windows and some Unices (notably Linux) but will -// deadlock under other Unix versions (e.g. Solaris). As it might be difficult -// to ensure that a recursive mutex is not used with wxCondition, it is a good -// idea to avoid using recursive mutexes at all. Also, the last problem with -// them is that some (older) Unix versions don't support this at all -- which -// results in a configure warning when building and a deadlock when using them. -enum wxMutexType -{ - // normal mutex: try to always use this one - wxMUTEX_DEFAULT, - - // recursive mutex: don't use these ones with wxCondition - wxMUTEX_RECURSIVE -}; - -// forward declarations -class WXDLLIMPEXP_FWD_BASE wxThreadHelper; -class WXDLLIMPEXP_FWD_BASE wxConditionInternal; -class WXDLLIMPEXP_FWD_BASE wxMutexInternal; -class WXDLLIMPEXP_FWD_BASE wxSemaphoreInternal; -class WXDLLIMPEXP_FWD_BASE wxThreadInternal; - -// ---------------------------------------------------------------------------- -// A mutex object is a synchronization object whose state is set to signaled -// when it is not owned by any thread, and nonsignaled when it is owned. Its -// name comes from its usefulness in coordinating mutually-exclusive access to -// a shared resource. Only one thread at a time can own a mutex object. -// ---------------------------------------------------------------------------- - -// you should consider wxMutexLocker whenever possible instead of directly -// working with wxMutex class - it is safer -class WXDLLIMPEXP_BASE wxMutex -{ -public: - // constructor & destructor - // ------------------------ - - // create either default (always safe) or recursive mutex - wxMutex(wxMutexType mutexType = wxMUTEX_DEFAULT); - - // destroys the mutex kernel object - ~wxMutex(); - - // test if the mutex has been created successfully - bool IsOk() const; - - // mutex operations - // ---------------- - - // Lock the mutex, blocking on it until it is unlocked by the other thread. - // The result of locking a mutex already locked by the current thread - // depend on the mutex type. - // - // The caller must call Unlock() later if Lock() returned wxMUTEX_NO_ERROR. - wxMutexError Lock(); - - // Try to lock the mutex: if it is currently locked, return immediately - // with an error. Otherwise the caller must call Unlock(). - wxMutexError TryLock(); - - // Unlock the mutex. It is an error to unlock an already unlocked mutex - wxMutexError Unlock(); - -protected: - wxMutexInternal *m_internal; - - friend class wxConditionInternal; - - DECLARE_NO_COPY_CLASS(wxMutex) -}; - -// a helper class which locks the mutex in the ctor and unlocks it in the dtor: -// this ensures that mutex is always unlocked, even if the function returns or -// throws an exception before it reaches the end -class WXDLLIMPEXP_BASE wxMutexLocker -{ -public: - // lock the mutex in the ctor - wxMutexLocker(wxMutex& mutex) - : m_isOk(false), m_mutex(mutex) - { m_isOk = ( m_mutex.Lock() == wxMUTEX_NO_ERROR ); } - - // returns true if mutex was successfully locked in ctor - bool IsOk() const - { return m_isOk; } - - // unlock the mutex in dtor - ~wxMutexLocker() - { if ( IsOk() ) m_mutex.Unlock(); } - -private: - // no assignment operator nor copy ctor - wxMutexLocker(const wxMutexLocker&); - wxMutexLocker& operator=(const wxMutexLocker&); - - bool m_isOk; - wxMutex& m_mutex; -}; - -// ---------------------------------------------------------------------------- -// Critical section: this is the same as mutex but is only visible to the -// threads of the same process. For the platforms which don't have native -// support for critical sections, they're implemented entirely in terms of -// mutexes. -// -// NB: wxCriticalSection object does not allocate any memory in its ctor -// which makes it possible to have static globals of this class -// ---------------------------------------------------------------------------- - -// in order to avoid any overhead under platforms where critical sections are -// just mutexes make all wxCriticalSection class functions inline -#if !defined(__WXMSW__) && !defined(__WXMAC__) - #define wxCRITSECT_IS_MUTEX 1 - - #define wxCRITSECT_INLINE inline -#else // MSW - #define wxCRITSECT_IS_MUTEX 0 - - #define wxCRITSECT_INLINE -#endif // MSW/!MSW - -// you should consider wxCriticalSectionLocker whenever possible instead of -// directly working with wxCriticalSection class - it is safer -class WXDLLIMPEXP_BASE wxCriticalSection -{ -public: - // ctor & dtor - wxCRITSECT_INLINE wxCriticalSection(); - wxCRITSECT_INLINE ~wxCriticalSection(); - - // enter the section (the same as locking a mutex) - wxCRITSECT_INLINE void Enter(); - - // leave the critical section (same as unlocking a mutex) - wxCRITSECT_INLINE void Leave(); - -private: -#if wxCRITSECT_IS_MUTEX - wxMutex m_mutex; -#elif defined(__WXMSW__) - // 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 - // union to force the correct (i.e. maximal) alignment - // - // if CRITICAL_SECTION size changes in Windows, you'll get an assert from - // thread.cpp and will need to increase the buffer size - // - // finally, we need this typedef instead of declaring m_buffer directly - // because otherwise the assert mentioned above wouldn't compile with some - // compilers (notably CodeWarrior 8) -#ifdef __WIN64__ - typedef char wxCritSectBuffer[40]; -#else // __WIN32__ - typedef char wxCritSectBuffer[24]; -#endif - union - { - unsigned long m_dummy1; - void *m_dummy2; - - wxCritSectBuffer m_buffer; - }; -#elif defined(__WXMAC__) - void *m_critRegion ; -#endif // Unix&OS2/Win32 - - DECLARE_NO_COPY_CLASS(wxCriticalSection) -}; - -#if wxCRITSECT_IS_MUTEX - // implement wxCriticalSection using mutexes - inline wxCriticalSection::wxCriticalSection() { } - inline wxCriticalSection::~wxCriticalSection() { } - - inline void wxCriticalSection::Enter() { (void)m_mutex.Lock(); } - inline void wxCriticalSection::Leave() { (void)m_mutex.Unlock(); } -#endif // wxCRITSECT_IS_MUTEX - -#undef wxCRITSECT_INLINE -#undef wxCRITSECT_IS_MUTEX - -// wxCriticalSectionLocker is the same to critical sections as wxMutexLocker is -// to mutexes -class WXDLLIMPEXP_BASE wxCriticalSectionLocker -{ -public: - wxCriticalSectionLocker(wxCriticalSection& cs) - : m_critsect(cs) - { - m_critsect.Enter(); - } - - ~wxCriticalSectionLocker() - { - m_critsect.Leave(); - } - -private: - wxCriticalSection& m_critsect; - - DECLARE_NO_COPY_CLASS(wxCriticalSectionLocker) -}; - -// ---------------------------------------------------------------------------- -// wxCondition models a POSIX condition variable which allows one (or more) -// thread(s) to wait until some condition is fulfilled -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxCondition -{ -public: - // Each wxCondition object is associated with a (single) wxMutex object. - // The mutex object MUST be locked before calling Wait() - wxCondition(wxMutex& mutex); - - // dtor is not virtual, don't use this class polymorphically - ~wxCondition(); - - // return true if the condition has been created successfully - bool IsOk() const; - - // NB: the associated mutex MUST be locked beforehand by the calling thread - // - // it atomically releases the lock on the associated mutex - // and starts waiting to be woken up by a Signal()/Broadcast() - // once its signaled, then it will wait until it can reacquire - // the lock on the associated mutex object, before returning. - wxCondError Wait(); - - // exactly as Wait() except that it may also return if the specified - // timeout elapses even if the condition hasn't been signalled: in this - // case, the return value is false, otherwise (i.e. in case of a normal - // return) it is true - // - // the timeout parameter specifies an interval that needs to be waited for - // in milliseconds - wxCondError WaitTimeout(unsigned long milliseconds); - - // NB: the associated mutex may or may not be locked by the calling thread - // - // this method unblocks one thread if any are blocking on the condition. - // if no thread is blocking in Wait(), then the signal is NOT remembered - // The thread which was blocking on Wait() will then reacquire the lock - // on the associated mutex object before returning - wxCondError Signal(); - - // NB: the associated mutex may or may not be locked by the calling thread - // - // this method unblocks all threads if any are blocking on the condition. - // if no thread is blocking in Wait(), then the signal is NOT remembered - // The threads which were blocking on Wait() will then reacquire the lock - // on the associated mutex object before returning. - wxCondError Broadcast(); - - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated version, don't use - wxDEPRECATED( bool Wait(unsigned long milliseconds) ); -#endif // WXWIN_COMPATIBILITY_2_6 - -private: - wxConditionInternal *m_internal; - - DECLARE_NO_COPY_CLASS(wxCondition) -}; - -#if WXWIN_COMPATIBILITY_2_6 - inline bool wxCondition::Wait(unsigned long milliseconds) - { return WaitTimeout(milliseconds) == wxCOND_NO_ERROR; } -#endif // WXWIN_COMPATIBILITY_2_6 - -// ---------------------------------------------------------------------------- -// wxSemaphore: a counter limiting the number of threads concurrently accessing -// a shared resource -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxSemaphore -{ -public: - // specifying a maxcount of 0 actually makes wxSemaphore behave as if there - // is no upper limit, if maxcount is 1 the semaphore behaves as a mutex - wxSemaphore( int initialcount = 0, int maxcount = 0 ); - - // dtor is not virtual, don't use this class polymorphically - ~wxSemaphore(); - - // return true if the semaphore has been created successfully - bool IsOk() const; - - // wait indefinitely, until the semaphore count goes beyond 0 - // and then decrement it and return (this method might have been called - // Acquire()) - wxSemaError Wait(); - - // same as Wait(), but does not block, returns wxSEMA_NO_ERROR if - // successful and wxSEMA_BUSY if the count is currently zero - wxSemaError TryWait(); - - // same as Wait(), but as a timeout limit, returns wxSEMA_NO_ERROR if the - // semaphore was acquired and wxSEMA_TIMEOUT if the timeout has elapsed - wxSemaError WaitTimeout(unsigned long milliseconds); - - // increments the semaphore count and signals one of the waiting threads - wxSemaError Post(); - -private: - wxSemaphoreInternal *m_internal; - - DECLARE_NO_COPY_CLASS(wxSemaphore) -}; - -// ---------------------------------------------------------------------------- -// wxThread: class encapsulating a thread of execution -// ---------------------------------------------------------------------------- - -// there are two different kinds of threads: joinable and detached (default) -// ones. Only joinable threads can return a return code and only detached -// threads auto-delete themselves - the user should delete the joinable -// threads manually. - -// NB: in the function descriptions the words "this thread" mean the thread -// created by the wxThread object while "main thread" is the thread created -// during the process initialization (a.k.a. the GUI thread) - -// On VMS thread pointers are 64 bits (also needed for other systems??? -#ifdef __VMS - typedef unsigned long long wxThreadIdType; -#else - typedef unsigned long wxThreadIdType; -#endif - -class WXDLLIMPEXP_BASE wxThread -{ -public: - // the return type for the thread function - typedef void *ExitCode; - - // static functions - // Returns the wxThread object for the calling thread. NULL is returned - // if the caller is the main thread (but it's recommended to use - // IsMain() and only call This() for threads other than the main one - // because NULL is also returned on error). If the thread wasn't - // created with wxThread class, the returned value is undefined. - static wxThread *This(); - - // Returns true if current thread is the main thread. - static bool IsMain(); - - // Release the rest of our time slice letting the other threads run - static void Yield(); - - // Sleep during the specified period of time in milliseconds - // - // NB: at least under MSW worker threads can not call ::wxSleep()! - static void Sleep(unsigned long milliseconds); - - // get the number of system CPUs - useful with SetConcurrency() - // (the "best" value for it is usually number of CPUs + 1) - // - // Returns -1 if unknown, number of CPUs otherwise - static int GetCPUCount(); - - // Get the platform specific thread ID and return as a long. This - // can be used to uniquely identify threads, even if they are not - // wxThreads. This is used by wxPython. - static wxThreadIdType GetCurrentId(); - - // sets the concurrency level: this is, roughly, the number of threads - // the system tries to schedule to run in parallel. 0 means the - // default value (usually acceptable, but may not yield the best - // performance for this process) - // - // Returns true on success, false otherwise (if not implemented, for - // example) - static bool SetConcurrency(size_t level); - - // constructor only creates the C++ thread object and doesn't create (or - // start) the real thread - wxThread(wxThreadKind kind = wxTHREAD_DETACHED); - - // functions that change the thread state: all these can only be called - // from _another_ thread (typically the thread that created this one, e.g. - // the main thread), not from the thread itself - - // create a new thread and optionally set the stack size on - // platforms that support that - call Run() to start it - // (special cased for watcom which won't accept 0 default) - - wxThreadError Create(unsigned int stackSize = 0); - - // starts execution of the thread - from the moment Run() is called - // the execution of wxThread::Entry() may start at any moment, caller - // shouldn't suppose that it starts after (or before) Run() returns. - wxThreadError Run(); - - // stops the thread if it's running and deletes the wxThread object if - // this is a detached thread freeing its memory - otherwise (for - // joinable threads) you still need to delete wxThread object - // yourself. - // - // this function only works if the thread calls TestDestroy() - // periodically - the thread will only be deleted the next time it - // does it! - // - // will fill the rc pointer with the thread exit code if it's !NULL - wxThreadError Delete(ExitCode *rc = (ExitCode *)NULL); - - // waits for a joinable thread to finish and returns its exit code - // - // Returns (ExitCode)-1 on error (for example, if the thread is not - // joinable) - ExitCode Wait(); - - // kills the thread without giving it any chance to clean up - should - // not be used under normal circumstances, use Delete() instead. - // It is a dangerous function that should only be used in the most - // extreme cases! - // - // The wxThread object is deleted by Kill() if the thread is - // detachable, but you still have to delete it manually for joinable - // threads. - wxThreadError Kill(); - - // pause a running thread: as Delete(), this only works if the thread - // calls TestDestroy() regularly - wxThreadError Pause(); - - // resume a paused thread - wxThreadError Resume(); - - // priority - // Sets the priority to "prio": see WXTHREAD_XXX_PRIORITY constants - // - // NB: the priority can only be set before the thread is created - void SetPriority(unsigned int prio); - - // Get the current priority. - unsigned int GetPriority() const; - - // thread status inquiries - // Returns true if the thread is alive: i.e. running or suspended - bool IsAlive() const; - // Returns true if the thread is running (not paused, not killed). - bool IsRunning() const; - // Returns true if the thread is suspended - bool IsPaused() const; - - // is the thread of detached kind? - bool IsDetached() const { return m_isDetached; } - - // Get the thread ID - a platform dependent number which uniquely - // identifies a thread inside a process - wxThreadIdType GetId() const; - - // called when the thread exits - in the context of this thread - // - // NB: this function will not be called if the thread is Kill()ed - virtual void OnExit() { } - - // Returns true if the thread was asked to terminate: this function should - // be called by the thread from time to time, otherwise the main thread - // will be left forever in Delete()! - virtual bool TestDestroy(); - - // dtor is public, but the detached threads should never be deleted - use - // Delete() instead (or leave the thread terminate by itself) - virtual ~wxThread(); - -protected: - // exits from the current thread - can be called only from this thread - void Exit(ExitCode exitcode = 0); - - // entry point for the thread - called by Run() and executes in the context - // of this thread. - virtual void *Entry() = 0; - -private: - // no copy ctor/assignment operator - wxThread(const wxThread&); - wxThread& operator=(const wxThread&); - - friend class wxThreadInternal; - - // the (platform-dependent) thread class implementation - wxThreadInternal *m_internal; - - // protects access to any methods of wxThreadInternal object - wxCriticalSection m_critsect; - - // true if the thread is detached, false if it is joinable - bool m_isDetached; -}; - -// wxThreadHelperThread class -// -------------------------- - -class WXDLLIMPEXP_BASE wxThreadHelperThread : public wxThread -{ -public: - // constructor only creates the C++ thread object and doesn't create (or - // start) the real thread - wxThreadHelperThread(wxThreadHelper& owner) - : wxThread(wxTHREAD_JOINABLE), m_owner(owner) - { } - -protected: - // entry point for the thread -- calls Entry() in owner. - virtual void *Entry(); - -private: - // the owner of the thread - wxThreadHelper& m_owner; - - // no copy ctor/assignment operator - wxThreadHelperThread(const wxThreadHelperThread&); - wxThreadHelperThread& operator=(const wxThreadHelperThread&); -}; - -// ---------------------------------------------------------------------------- -// wxThreadHelper: this class implements the threading logic to run a -// background task in another object (such as a window). It is a mix-in: just -// derive from it to implement a threading background task in your class. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxThreadHelper -{ -private: - void KillThread() - { - if ( m_thread ) - { - m_thread->Kill(); - delete m_thread; - } - } - -public: - // constructor only initializes m_thread to NULL - wxThreadHelper() : m_thread(NULL) { } - - // destructor deletes m_thread - virtual ~wxThreadHelper() { KillThread(); } - - // create a new thread (and optionally set the stack size on platforms that - // support/need that), call Run() to start it - wxThreadError Create(unsigned int stackSize = 0) - { - KillThread(); - - m_thread = new wxThreadHelperThread(*this); - - return m_thread->Create(stackSize); - } - - // entry point for the thread - called by Run() and executes in the context - // of this thread. - virtual void *Entry() = 0; - - // returns a pointer to the thread which can be used to call Run() - wxThread *GetThread() const { return m_thread; } - -protected: - wxThread *m_thread; -}; - -// call Entry() in owner, put it down here to avoid circular declarations -inline void *wxThreadHelperThread::Entry() -{ - return m_owner.Entry(); -} - -// ---------------------------------------------------------------------------- -// Automatic initialization -// ---------------------------------------------------------------------------- - -// GUI mutex handling. -void WXDLLIMPEXP_BASE wxMutexGuiEnter(); -void WXDLLIMPEXP_BASE wxMutexGuiLeave(); - -// macros for entering/leaving critical sections which may be used without -// having to take them inside "#if wxUSE_THREADS" -#define wxENTER_CRIT_SECT(cs) (cs).Enter() -#define wxLEAVE_CRIT_SECT(cs) (cs).Leave() -#define wxCRIT_SECT_DECLARE(cs) static wxCriticalSection cs -#define wxCRIT_SECT_DECLARE_MEMBER(cs) wxCriticalSection cs -#define wxCRIT_SECT_LOCKER(name, cs) wxCriticalSectionLocker name(cs) - -// function for checking if we're in the main thread which may be used whether -// wxUSE_THREADS is 0 or 1 -inline bool wxIsMainThread() { return wxThread::IsMain(); } - -#else // !wxUSE_THREADS - -// no thread support -inline void WXDLLIMPEXP_BASE wxMutexGuiEnter() { } -inline void WXDLLIMPEXP_BASE wxMutexGuiLeave() { } - -// macros for entering/leaving critical sections which may be used without -// having to take them inside "#if wxUSE_THREADS" -// (the implementation uses dummy structs to force semicolon after the macro) -#define wxENTER_CRIT_SECT(cs) do {} while (0) -#define wxLEAVE_CRIT_SECT(cs) do {} while (0) -#define wxCRIT_SECT_DECLARE(cs) struct wxDummyCS##cs -#define wxCRIT_SECT_DECLARE_MEMBER(cs) struct wxDummyCSMember##cs -#define wxCRIT_SECT_LOCKER(name, cs) struct wxDummyCSLocker##name - -// if there is only one thread, it is always the main one -inline bool wxIsMainThread() { return true; } - -#endif // wxUSE_THREADS/!wxUSE_THREADS - -// mark part of code as being a critical section: this macro declares a -// critical section with the given name and enters it immediately and leaves -// it at the end of the current scope -// -// example: -// -// int Count() -// { -// static int s_counter = 0; -// -// wxCRITICAL_SECTION(counter); -// -// return ++s_counter; -// } -// -// this function is MT-safe in presence of the threads but there is no -// overhead when the library is compiled without threads -#define wxCRITICAL_SECTION(name) \ - wxCRIT_SECT_DECLARE(s_cs##name); \ - wxCRIT_SECT_LOCKER(cs##name##Locker, s_cs##name) - -// automatically lock GUI mutex in ctor and unlock it in dtor -class WXDLLIMPEXP_BASE wxMutexGuiLocker -{ -public: - wxMutexGuiLocker() { wxMutexGuiEnter(); } - ~wxMutexGuiLocker() { wxMutexGuiLeave(); } -}; - -// ----------------------------------------------------------------------------- -// implementation only until the end of file -// ----------------------------------------------------------------------------- - -#if wxUSE_THREADS - -#if defined(__WXMSW__) || defined(__WXMAC__) || defined(__OS2__) || defined(__EMX__) - // 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 - extern void WXDLLIMPEXP_BASE wxMutexGuiLeaveOrEnter(); - - // returns true if the main thread has GUI lock - extern bool WXDLLIMPEXP_BASE wxGuiOwnedByMainThread(); - - // wakes up the main thread if it's sleeping inside ::GetMessage() - extern void WXDLLIMPEXP_BASE wxWakeUpMainThread(); - - // return true if the main thread is waiting for some other to terminate: - // wxApp then should block all "dangerous" messages - extern bool WXDLLIMPEXP_BASE wxIsWaitingForThread(); -#endif // MSW, Mac, OS/2 - -#endif // wxUSE_THREADS - -#endif // _WX_THREAD_H_ diff --git a/desmume/src/windows/wx/include/wx/thrimpl.cpp b/desmume/src/windows/wx/include/wx/thrimpl.cpp deleted file mode 100644 index d8226ecdd..000000000 --- a/desmume/src/windows/wx/include/wx/thrimpl.cpp +++ /dev/null @@ -1,330 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: include/wx/thrimpl.cpp -// Purpose: common part of wxThread Implementations -// Author: Vadim Zeitlin -// Modified by: -// Created: 04.06.02 (extracted from src/*/thread.cpp files) -// RCS-ID: $Id: thrimpl.cpp 42206 2006-10-21 16:06:11Z VZ $ -// Copyright: (c) Vadim Zeitlin (2002) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -// this file is supposed to be included only by the various thread.cpp - -// ---------------------------------------------------------------------------- -// wxMutex -// ---------------------------------------------------------------------------- - -wxMutex::wxMutex(wxMutexType mutexType) -{ - m_internal = new wxMutexInternal(mutexType); - - if ( !m_internal->IsOk() ) - { - delete m_internal; - m_internal = NULL; - } -} - -wxMutex::~wxMutex() -{ - delete m_internal; -} - -bool wxMutex::IsOk() const -{ - return m_internal != NULL; -} - -wxMutexError wxMutex::Lock() -{ - wxCHECK_MSG( m_internal, wxMUTEX_INVALID, - _T("wxMutex::Lock(): not initialized") ); - - return m_internal->Lock(); -} - -wxMutexError wxMutex::TryLock() -{ - wxCHECK_MSG( m_internal, wxMUTEX_INVALID, - _T("wxMutex::TryLock(): not initialized") ); - - return m_internal->TryLock(); -} - -wxMutexError wxMutex::Unlock() -{ - wxCHECK_MSG( m_internal, wxMUTEX_INVALID, - _T("wxMutex::Unlock(): not initialized") ); - - return m_internal->Unlock(); -} - -// -------------------------------------------------------------------------- -// wxConditionInternal -// -------------------------------------------------------------------------- - -// Win32 and OS/2 don't have explicit support for the POSIX condition -// 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__) - -class wxConditionInternal -{ -public: - wxConditionInternal(wxMutex& mutex); - - bool IsOk() const { return m_mutex.IsOk() && m_semaphore.IsOk(); } - - wxCondError Wait(); - wxCondError WaitTimeout(unsigned long milliseconds); - - wxCondError Signal(); - wxCondError Broadcast(); - -private: - // the number of threads currently waiting for this condition - LONG m_numWaiters; - - // the critical section protecting m_numWaiters - wxCriticalSection m_csWaiters; - - wxMutex& m_mutex; - wxSemaphore m_semaphore; - - DECLARE_NO_COPY_CLASS(wxConditionInternal) -}; - -wxConditionInternal::wxConditionInternal(wxMutex& mutex) - : m_mutex(mutex) -{ - // another thread can't access it until we return from ctor, so no need to - // protect access to m_numWaiters here - m_numWaiters = 0; -} - -wxCondError wxConditionInternal::Wait() -{ - // increment the number of waiters - { - wxCriticalSectionLocker lock(m_csWaiters); - m_numWaiters++; - } - - m_mutex.Unlock(); - - // a potential race condition can occur here - // - // after a thread increments m_numWaiters, and unlocks the mutex and before - // the semaphore.Wait() is called, if another thread can cause a signal to - // be generated - // - // this race condition is handled by using a semaphore and incrementing the - // semaphore only if m_numWaiters is greater that zero since the semaphore, - // can 'remember' signals the race condition will not occur - - // wait ( if necessary ) and decrement semaphore - wxSemaError err = m_semaphore.Wait(); - m_mutex.Lock(); - - if ( err == wxSEMA_NO_ERROR ) - return wxCOND_NO_ERROR; - else if ( err == wxSEMA_TIMEOUT ) - return wxCOND_TIMEOUT; - else - return wxCOND_MISC_ERROR; -} - -wxCondError wxConditionInternal::WaitTimeout(unsigned long milliseconds) -{ - { - wxCriticalSectionLocker lock(m_csWaiters); - m_numWaiters++; - } - - m_mutex.Unlock(); - - // a race condition can occur at this point in the code - // - // please see the comments in Wait(), for details - - wxSemaError err = m_semaphore.WaitTimeout(milliseconds); - - if ( err == wxSEMA_TIMEOUT ) - { - // another potential race condition exists here it is caused when a - // 'waiting' thread times out, and returns from WaitForSingleObject, - // but has not yet decremented m_numWaiters - // - // at this point if another thread calls signal() then the semaphore - // will be incremented, but the waiting thread will miss it. - // - // to handle this particular case, the waiting thread calls - // WaitForSingleObject again with a timeout of 0, after locking - // m_csWaiters. This call does not block because of the zero - // timeout, but will allow the waiting thread to catch the missed - // signals. - wxCriticalSectionLocker lock(m_csWaiters); - - wxSemaError err2 = m_semaphore.WaitTimeout(0); - - if ( err2 != wxSEMA_NO_ERROR ) - { - m_numWaiters--; - } - } - - m_mutex.Lock(); - - return err == wxSEMA_NO_ERROR ? wxCOND_NO_ERROR - : err == wxSEMA_TIMEOUT ? wxCOND_TIMEOUT - : wxCOND_MISC_ERROR; -} - -wxCondError wxConditionInternal::Signal() -{ - wxCriticalSectionLocker lock(m_csWaiters); - - if ( m_numWaiters > 0 ) - { - // increment the semaphore by 1 - if ( m_semaphore.Post() != wxSEMA_NO_ERROR ) - return wxCOND_MISC_ERROR; - - m_numWaiters--; - } - - return wxCOND_NO_ERROR; -} - -wxCondError wxConditionInternal::Broadcast() -{ - wxCriticalSectionLocker lock(m_csWaiters); - - while ( m_numWaiters > 0 ) - { - if ( m_semaphore.Post() != wxSEMA_NO_ERROR ) - return wxCOND_MISC_ERROR; - - m_numWaiters--; - } - - return wxCOND_NO_ERROR; -} - -#endif // MSW or OS2 - -// ---------------------------------------------------------------------------- -// wxCondition -// ---------------------------------------------------------------------------- - -wxCondition::wxCondition(wxMutex& mutex) -{ - m_internal = new wxConditionInternal(mutex); - - if ( !m_internal->IsOk() ) - { - delete m_internal; - m_internal = NULL; - } -} - -wxCondition::~wxCondition() -{ - delete m_internal; -} - -bool wxCondition::IsOk() const -{ - return m_internal != NULL; -} - -wxCondError wxCondition::Wait() -{ - wxCHECK_MSG( m_internal, wxCOND_INVALID, - _T("wxCondition::Wait(): not initialized") ); - - return m_internal->Wait(); -} - -wxCondError wxCondition::WaitTimeout(unsigned long milliseconds) -{ - wxCHECK_MSG( m_internal, wxCOND_INVALID, - _T("wxCondition::Wait(): not initialized") ); - - return m_internal->WaitTimeout(milliseconds); -} - -wxCondError wxCondition::Signal() -{ - wxCHECK_MSG( m_internal, wxCOND_INVALID, - _T("wxCondition::Signal(): not initialized") ); - - return m_internal->Signal(); -} - -wxCondError wxCondition::Broadcast() -{ - wxCHECK_MSG( m_internal, wxCOND_INVALID, - _T("wxCondition::Broadcast(): not initialized") ); - - return m_internal->Broadcast(); -} - -// -------------------------------------------------------------------------- -// wxSemaphore -// -------------------------------------------------------------------------- - -wxSemaphore::wxSemaphore(int initialcount, int maxcount) -{ - m_internal = new wxSemaphoreInternal( initialcount, maxcount ); - if ( !m_internal->IsOk() ) - { - delete m_internal; - m_internal = NULL; - } -} - -wxSemaphore::~wxSemaphore() -{ - delete m_internal; -} - -bool wxSemaphore::IsOk() const -{ - return m_internal != NULL; -} - -wxSemaError wxSemaphore::Wait() -{ - wxCHECK_MSG( m_internal, wxSEMA_INVALID, - _T("wxSemaphore::Wait(): not initialized") ); - - return m_internal->Wait(); -} - -wxSemaError wxSemaphore::TryWait() -{ - wxCHECK_MSG( m_internal, wxSEMA_INVALID, - _T("wxSemaphore::TryWait(): not initialized") ); - - return m_internal->TryWait(); -} - -wxSemaError wxSemaphore::WaitTimeout(unsigned long milliseconds) -{ - wxCHECK_MSG( m_internal, wxSEMA_INVALID, - _T("wxSemaphore::WaitTimeout(): not initialized") ); - - return m_internal->WaitTimeout(milliseconds); -} - -wxSemaError wxSemaphore::Post() -{ - wxCHECK_MSG( m_internal, wxSEMA_INVALID, - _T("wxSemaphore::Post(): not initialized") ); - - return m_internal->Post(); -} - diff --git a/desmume/src/windows/wx/include/wx/timer.h b/desmume/src/windows/wx/include/wx/timer.h deleted file mode 100644 index f8b8d1e87..000000000 --- a/desmume/src/windows/wx/include/wx/timer.h +++ /dev/null @@ -1,201 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/timer.h -// Purpose: wxTimer, wxStopWatch and global time-related functions -// Author: Julian Smart -// Modified by: Vadim Zeitlin (wxTimerBase) -// Guillermo Rodriguez (global clean up) -// Created: 04/01/98 -// RCS-ID: $Id: timer.h 44244 2007-01-18 17:00:52Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TIMER_H_BASE_ -#define _WX_TIMER_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_GUI && wxUSE_TIMER - -#include "wx/object.h" -#include "wx/longlong.h" -#include "wx/event.h" -#include "wx/stopwatch.h" // for backwards compatibility -#include "wx/window.h" // only for NewControlId() - - -// more readable flags for Start(): - -// generate notifications periodically until the timer is stopped (default) -#define wxTIMER_CONTINUOUS false - -// only send the notification once and then stop the timer -#define wxTIMER_ONE_SHOT true - -// the interface of wxTimer class -class WXDLLEXPORT wxTimerBase : public wxEvtHandler -{ -public: - // ctors and initializers - // ---------------------- - - // default: if you don't call SetOwner(), your only chance to get timer - // notifications is to override Notify() in the derived class - wxTimerBase() - { Init(); SetOwner(this); } - - // ctor which allows to avoid having to override Notify() in the derived - // class: the owner will get timer notifications which can be handled with - // EVT_TIMER - wxTimerBase(wxEvtHandler *owner, int timerid = wxID_ANY) - { Init(); SetOwner(owner, timerid); } - - // same as ctor above - void SetOwner(wxEvtHandler *owner, int timerid = wxID_ANY) - { - m_owner = owner; - m_idTimer = timerid == wxID_ANY ? wxWindow::NewControlId() : timerid; - } - - wxEvtHandler *GetOwner() const { return m_owner; } - - virtual ~wxTimerBase(); - - // working with the timer - // ---------------------- - - // start the timer: if milliseconds == -1, use the same value as for the - // last Start() - // - // it is now valid to call Start() multiple times: this just restarts the - // timer if it is already running - virtual bool Start(int milliseconds = -1, bool oneShot = false); - - // stop the timer - virtual void Stop() = 0; - - // override this in your wxTimer-derived class if you want to process timer - // messages in it, use non default ctor or SetOwner() otherwise - virtual void Notify(); - - // getting info - // ------------ - - // return true if the timer is running - virtual bool IsRunning() const = 0; - - // return the timer ID - int GetId() const { return m_idTimer; } - - // get the (last) timer interval in milliseconds - int GetInterval() const { return m_milli; } - - // return true if the timer is one shot - bool IsOneShot() const { return m_oneShot; } - -protected: - // common part of all ctors - void Init() - { m_owner = NULL; m_idTimer = wxID_ANY; m_milli = 0; m_oneShot = false; } - - wxEvtHandler *m_owner; - int m_idTimer; - int m_milli; // the timer interval - bool m_oneShot; // true if one shot - - DECLARE_NO_COPY_CLASS(wxTimerBase) -}; - -// ---------------------------------------------------------------------------- -// wxTimer itself -// ---------------------------------------------------------------------------- - -#if defined(__WXMSW__) - #include "wx/msw/timer.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/timer.h" -#elif defined(__WXGTK20__) - #include "wx/gtk/timer.h" -#elif defined(__WXGTK__) - #include "wx/gtk1/timer.h" -#elif defined(__WXX11__) || defined(__WXMGL__) || defined(__WXDFB__) - #include "wx/generic/timer.h" -#elif defined (__WXCOCOA__) - #include "wx/cocoa/timer.h" -#elif defined(__WXMAC__) - #include "wx/mac/timer.h" -#elif defined(__WXPM__) - #include "wx/os2/timer.h" -#endif - -// ---------------------------------------------------------------------------- -// wxTimerRunner: starts the timer in its ctor, stops in the dtor -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTimerRunner -{ -public: - wxTimerRunner(wxTimer& timer) : m_timer(timer) { } - wxTimerRunner(wxTimer& timer, int milli, bool oneShot = false) - : m_timer(timer) - { - m_timer.Start(milli, oneShot); - } - - void Start(int milli, bool oneShot = false) - { - m_timer.Start(milli, oneShot); - } - - ~wxTimerRunner() - { - if ( m_timer.IsRunning() ) - { - m_timer.Stop(); - } - } - -private: - wxTimer& m_timer; - - DECLARE_NO_COPY_CLASS(wxTimerRunner) -}; - -// ---------------------------------------------------------------------------- -// wxTimerEvent -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTimerEvent : public wxEvent -{ -public: - wxTimerEvent(int timerid = 0, int interval = 0) : wxEvent(timerid) - { - m_eventType = wxEVT_TIMER; - - m_interval = interval; - } - - // accessors - int GetInterval() const { return m_interval; } - - // implement the base class pure virtual - virtual wxEvent *Clone() const { return new wxTimerEvent(*this); } - -private: - int m_interval; - - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxTimerEvent) -}; - -typedef void (wxEvtHandler::*wxTimerEventFunction)(wxTimerEvent&); - -#define wxTimerEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxTimerEventFunction, &func) - -#define EVT_TIMER(timerid, func) \ - wx__DECLARE_EVT1(wxEVT_TIMER, timerid, wxTimerEventHandler(func)) - -#endif // wxUSE_GUI && wxUSE_TIMER - -#endif - // _WX_TIMER_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/tipdlg.h b/desmume/src/windows/wx/include/wx/tipdlg.h deleted file mode 100644 index 9a782e5be..000000000 --- a/desmume/src/windows/wx/include/wx/tipdlg.h +++ /dev/null @@ -1,84 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: tipdlg.h -// Purpose: declaration of wxTipDialog -// Author: Vadim Zeitlin -// Modified by: -// Created: 28.06.99 -// RCS-ID: $Id: tipdlg.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TIPDLG_H_ -#define _WX_TIPDLG_H_ - -// ---------------------------------------------------------------------------- -// headers which we must include here -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_STARTUP_TIPS - -#include "wx/textfile.h" - -// ---------------------------------------------------------------------------- -// wxTipProvider - a class which is used by wxTipDialog to get the text of the -// tips -// ---------------------------------------------------------------------------- - -// the abstract base class: it provides the tips, i.e. implements the GetTip() -// function which returns the new tip each time it's called. To support this, -// wxTipProvider evidently needs some internal state which is the tip "index" -// and which should be saved/restored by the program to not always show one and -// the same tip (of course, you may use random starting position as well...) -class WXDLLIMPEXP_ADV wxTipProvider -{ -public: - wxTipProvider(size_t currentTip) { m_currentTip = currentTip; } - - // get the current tip and update the internal state to return the next tip - // when called for the next time - virtual wxString GetTip() = 0; - - // get the current tip "index" (or whatever allows the tip provider to know - // from where to start the next time) - size_t GetCurrentTip() const { return m_currentTip; } - - // Allows any user-derived class to optionally override this function to - // modify the tip as soon as it is read. If return wxEmptyString, then - // the tip is skipped, and the next one is read. - virtual wxString PreprocessTip(const wxString& tip) { return tip; } - - // virtual dtor for the base class - virtual ~wxTipProvider() { } - -protected: - size_t m_currentTip; -}; - -// a function which returns an implementation of wxTipProvider using the -// specified text file as the source of tips (each line is a tip). -// -// NB: the caller is responsible for deleting the pointer! -WXDLLIMPEXP_ADV wxTipProvider *wxCreateFileTipProvider(const wxString& filename, - size_t currentTip); - -// ---------------------------------------------------------------------------- -// wxTipDialog -// ---------------------------------------------------------------------------- - -// A dialog which shows a "tip" - a short and helpful messages describing to -// the user some program characteristic. Many programs show the tips at -// startup, so the dialog has "Show tips on startup" checkbox which allows to -// the user to disable this (however, it's the program which should show, or -// not, the dialog on startup depending on its value, not this class). -// -// The function returns true if this checkbox is checked, false otherwise. -WXDLLIMPEXP_ADV bool wxShowTip(wxWindow *parent, - wxTipProvider *tipProvider, - bool showAtStartup = true); - -#endif // wxUSE_STARTUP_TIPS - -#endif // _WX_TIPDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/tipwin.h b/desmume/src/windows/wx/include/wx/tipwin.h deleted file mode 100644 index 944afb832..000000000 --- a/desmume/src/windows/wx/include/wx/tipwin.h +++ /dev/null @@ -1,98 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/tipwin.h -// Purpose: wxTipWindow is a window like the one typically used for -// showing the tooltips -// Author: Vadim Zeitlin -// Modified by: -// Created: 10.09.00 -// RCS-ID: $Id: tipwin.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 2000 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TIPWIN_H_ -#define _WX_TIPWIN_H_ - -#if wxUSE_TIPWINDOW - -#if wxUSE_POPUPWIN - #include "wx/popupwin.h" - - #define wxTipWindowBase wxPopupTransientWindow -#else - #include "wx/frame.h" - - #define wxTipWindowBase wxFrame -#endif -#include "wx/arrstr.h" - -class WXDLLIMPEXP_FWD_CORE wxTipWindowView; - -// ---------------------------------------------------------------------------- -// wxTipWindow -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTipWindow : public wxTipWindowBase -{ -public: - // the mandatory ctor parameters are: the parent window and the text to - // show - // - // optionally you may also specify the length at which the lines are going - // to be broken in rows (100 pixels by default) - // - // windowPtr and rectBound are just passed to SetTipWindowPtr() and - // SetBoundingRect() - see below - wxTipWindow(wxWindow *parent, - const wxString& text, - wxCoord maxLength = 100, - wxTipWindow** windowPtr = NULL, - wxRect *rectBound = NULL); - - virtual ~wxTipWindow(); - - // If windowPtr is not NULL the given address will be NULLed when the - // window has closed - void SetTipWindowPtr(wxTipWindow** windowPtr) { m_windowPtr = windowPtr; } - - // If rectBound is not NULL, the window will disappear automatically when - // the mouse leave the specified rect: note that rectBound should be in the - // screen coordinates! - void SetBoundingRect(const wxRect& rectBound); - - // Hide and destroy the window - void Close(); - -protected: - // called by wxTipWindowView only - bool CheckMouseInBounds(const wxPoint& pos); - - // event handlers - void OnMouseClick(wxMouseEvent& event); - -#if !wxUSE_POPUPWIN - void OnActivate(wxActivateEvent& event); - void OnKillFocus(wxFocusEvent& event); -#else // wxUSE_POPUPWIN - virtual void OnDismiss(); -#endif // wxUSE_POPUPWIN/!wxUSE_POPUPWIN - -private: - wxArrayString m_textLines; - wxCoord m_heightLine; - - wxTipWindowView *m_view; - - wxTipWindow** m_windowPtr; - wxRect m_rectBound; - - DECLARE_EVENT_TABLE() - - friend class wxTipWindowView; - - DECLARE_NO_COPY_CLASS(wxTipWindow) -}; - -#endif // wxUSE_TIPWINDOW - -#endif // _WX_TIPWIN_H_ diff --git a/desmume/src/windows/wx/include/wx/tokenzr.h b/desmume/src/windows/wx/include/wx/tokenzr.h deleted file mode 100644 index 8e643fd89..000000000 --- a/desmume/src/windows/wx/include/wx/tokenzr.h +++ /dev/null @@ -1,135 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/tokenzr.h -// Purpose: String tokenizer - a C++ replacement for strtok(3) -// Author: Guilhem Lavaux -// Modified by: (or rather rewritten by) Vadim Zeitlin -// Created: 04/22/98 -// RCS-ID: $Id: tokenzr.h 36741 2006-01-06 21:41:54Z VZ $ -// Copyright: (c) Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TOKENZRH -#define _WX_TOKENZRH - -#include "wx/object.h" -#include "wx/string.h" -#include "wx/arrstr.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// default: delimiters are usual white space characters -#define wxDEFAULT_DELIMITERS (_T(" \t\r\n")) - -// wxStringTokenizer mode flags which determine its behaviour -enum wxStringTokenizerMode -{ - wxTOKEN_INVALID = -1, // set by def ctor until SetString() is called - wxTOKEN_DEFAULT, // strtok() for whitespace delims, RET_EMPTY else - wxTOKEN_RET_EMPTY, // return empty token in the middle of the string - wxTOKEN_RET_EMPTY_ALL, // return trailing empty tokens too - wxTOKEN_RET_DELIMS, // return the delim with token (implies RET_EMPTY) - wxTOKEN_STRTOK // behave exactly like strtok(3) -}; - -// ---------------------------------------------------------------------------- -// wxStringTokenizer: replaces infamous strtok() and has some other features -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStringTokenizer : public wxObject -{ -public: - // ctors and initializers - // default ctor, call SetString() later - wxStringTokenizer() { m_mode = wxTOKEN_INVALID; } - // ctor which gives us the string - wxStringTokenizer(const wxString& str, - const wxString& delims = wxDEFAULT_DELIMITERS, - wxStringTokenizerMode mode = wxTOKEN_DEFAULT); - - // args are same as for the non default ctor above - void SetString(const wxString& str, - const wxString& delims = wxDEFAULT_DELIMITERS, - wxStringTokenizerMode mode = wxTOKEN_DEFAULT); - - // reinitialize the tokenizer with the same delimiters/mode - void Reinit(const wxString& str); - - // tokens access - // return the number of remaining tokens - size_t CountTokens() const; - // did we reach the end of the string? - bool HasMoreTokens() const; - // get the next token, will return empty string if !HasMoreTokens() - wxString GetNextToken(); - // get the delimiter which terminated the token last retrieved by - // GetNextToken() or NUL if there had been no tokens yet or the last - // one wasn't terminated (but ran to the end of the string) - wxChar GetLastDelimiter() const { return m_lastDelim; } - - // get current tokenizer state - // returns the part of the string which remains to tokenize (*not* the - // initial string) - wxString GetString() const { return m_string.substr(m_pos); } - - // returns the current position (i.e. one index after the last - // returned token or 0 if GetNextToken() has never been called) in the - // original string - size_t GetPosition() const { return m_pos; } - - // misc - // get the current mode - can be different from the one passed to the - // ctor if it was wxTOKEN_DEFAULT - wxStringTokenizerMode GetMode() const { return m_mode; } - // do we return empty tokens? - bool AllowEmpty() const { return m_mode != wxTOKEN_STRTOK; } - - - // backwards compatibility section from now on - // ------------------------------------------- - - // for compatibility only, use GetNextToken() instead - wxString NextToken() { return GetNextToken(); } - - // compatibility only, don't use - void SetString(const wxString& to_tokenize, - const wxString& delims, - bool WXUNUSED(ret_delim)) - { - SetString(to_tokenize, delims, wxTOKEN_RET_DELIMS); - } - - wxStringTokenizer(const wxString& to_tokenize, - const wxString& delims, - bool ret_delim) - { - SetString(to_tokenize, delims, ret_delim); - } - -protected: - bool IsOk() const { return m_mode != wxTOKEN_INVALID; } - - wxString m_string, // the string we tokenize - m_delims; // all possible delimiters - - size_t m_pos; // the current position in m_string - - wxStringTokenizerMode m_mode; // see wxTOKEN_XXX values - - wxChar m_lastDelim; // delimiter after last token or '\0' -}; - -// ---------------------------------------------------------------------------- -// convenience function which returns all tokens at once -// ---------------------------------------------------------------------------- - -// the function takes the same parameters as wxStringTokenizer ctor and returns -// the array containing all tokens -wxArrayString WXDLLIMPEXP_BASE -wxStringTokenize(const wxString& str, - const wxString& delims = wxDEFAULT_DELIMITERS, - wxStringTokenizerMode mode = wxTOKEN_DEFAULT); - -#endif // _WX_TOKENZRH diff --git a/desmume/src/windows/wx/include/wx/toolbar.h b/desmume/src/windows/wx/include/wx/toolbar.h deleted file mode 100644 index f70678e7c..000000000 --- a/desmume/src/windows/wx/include/wx/toolbar.h +++ /dev/null @@ -1,93 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/toolbar.h -// Purpose: wxToolBar interface declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 20.11.99 -// RCS-ID: $Id: toolbar.h 42645 2006-10-29 19:12:52Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TOOLBAR_H_BASE_ -#define _WX_TOOLBAR_H_BASE_ - -#include "wx/defs.h" - -// ---------------------------------------------------------------------------- -// wxToolBar style flags -// ---------------------------------------------------------------------------- - -enum -{ - // lay out the toolbar horizontally - wxTB_HORIZONTAL = wxHORIZONTAL, // == 0x0004 - wxTB_TOP = wxTB_HORIZONTAL, - - // lay out the toolbar vertically - wxTB_VERTICAL = wxVERTICAL, // == 0x0008 - wxTB_LEFT = wxTB_VERTICAL, - - // show 3D buttons (wxToolBarSimple only) - wxTB_3DBUTTONS = 0x0010, - - // "flat" buttons (Win32/GTK only) - wxTB_FLAT = 0x0020, - - // dockable toolbar (GTK only) - wxTB_DOCKABLE = 0x0040, - - // don't show the icons (they're shown by default) - wxTB_NOICONS = 0x0080, - - // show the text (not shown by default) - wxTB_TEXT = 0x0100, - - // don't show the divider between toolbar and the window (Win32 only) - wxTB_NODIVIDER = 0x0200, - - // no automatic alignment (Win32 only, useless) - wxTB_NOALIGN = 0x0400, - - // show the text and the icons alongside, not vertically stacked (Win32/GTK) - wxTB_HORZ_LAYOUT = 0x0800, - wxTB_HORZ_TEXT = wxTB_HORZ_LAYOUT | wxTB_TEXT, - - // don't show the toolbar short help tooltips - wxTB_NO_TOOLTIPS = 0x1000, - - // lay out toolbar at the bottom of the window - wxTB_BOTTOM = 0x2000, - - // lay out toolbar at the right edge of the window - wxTB_RIGHT = 0x4000 -}; - -#if wxUSE_TOOLBAR - #include "wx/tbarbase.h" // the base class for all toolbars - - #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/tbar95.h" - #elif defined(__WXWINCE__) - #include "wx/msw/wince/tbarwce.h" - #elif defined(__WXMOTIF__) - #include "wx/motif/toolbar.h" - #elif defined(__WXGTK20__) - #include "wx/gtk/tbargtk.h" - #elif defined(__WXGTK__) - #include "wx/gtk1/tbargtk.h" - #elif defined(__WXMAC__) - #include "wx/mac/toolbar.h" - #elif defined(__WXCOCOA__) - #include "wx/cocoa/toolbar.h" - #elif defined(__WXPM__) - #include "wx/os2/toolbar.h" - #endif -#endif // wxUSE_TOOLBAR - -#endif - // _WX_TOOLBAR_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/toolbook.h b/desmume/src/windows/wx/include/wx/toolbook.h deleted file mode 100644 index 752793ebf..000000000 --- a/desmume/src/windows/wx/include/wx/toolbook.h +++ /dev/null @@ -1,163 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/toolbook.h -// Purpose: wxToolbook: wxToolBar and wxNotebook combination -// Author: Julian Smart -// Modified by: -// Created: 2006-01-29 -// RCS-ID: $Id: toolbook.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 2006 Julian Smart -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TOOLBOOK_H_ -#define _WX_TOOLBOOK_H_ - -#include "wx/defs.h" - -#if wxUSE_TOOLBOOK - -#include "wx/bookctrl.h" - -class WXDLLIMPEXP_FWD_CORE wxToolBarBase; -class WXDLLIMPEXP_FWD_CORE wxCommandEvent; - -extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED; -extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING; - - -// Use wxButtonToolBar -#define wxBK_BUTTONBAR 0x0100 - -// ---------------------------------------------------------------------------- -// wxToolbook -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxToolbook : public wxBookCtrlBase -{ -public: - wxToolbook() - { - Init(); - } - - wxToolbook(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxEmptyString) - { - Init(); - - (void)Create(parent, id, pos, size, style, name); - } - - // quasi ctor - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxEmptyString); - - - // implement base class virtuals - virtual int GetSelection() const; - virtual bool SetPageText(size_t n, const wxString& strText); - virtual wxString GetPageText(size_t n) const; - virtual int GetPageImage(size_t n) const; - virtual bool SetPageImage(size_t n, int imageId); - virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; - virtual bool InsertPage(size_t n, - wxWindow *page, - const wxString& text, - bool bSelect = false, - int imageId = -1); - 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); - - virtual bool DeleteAllPages(); - virtual int HitTest(const wxPoint& pt, long *flags = NULL) const; - - - // methods which are not part of base wxBookctrl API - - // get the underlying toolbar - wxToolBarBase* GetToolBar() const { return (wxToolBarBase*)m_bookctrl; } - - // must be called in OnIdle or by application to realize the toolbar and - // select the initial page. - void Realize(); - -protected: - virtual wxWindow *DoRemovePage(size_t page); - - // get the size which the list control should have - virtual wxSize GetControllerSize() const; - - // event handlers - void OnToolSelected(wxCommandEvent& event); - void OnSize(wxSizeEvent& event); - void OnIdle(wxIdleEvent& event); - - void UpdateSelectedPage(size_t newsel); - - wxBookCtrlBaseEvent* CreatePageChangingEvent() const; - void MakeChangedEvent(wxBookCtrlBaseEvent &event); - - // the currently selected page or wxNOT_FOUND if none - int m_selection; - - // whether the toolbar needs to be realized - bool m_needsRealizing; - - // maximum bitmap size - wxSize m_maxBitmapSize; - -private: - // common part of all constructors - void Init(); - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxToolbook) -}; - -// ---------------------------------------------------------------------------- -// listbook event class and related stuff -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxToolbookEvent : public wxBookCtrlBaseEvent -{ -public: - wxToolbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0, - int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND) - : wxBookCtrlBaseEvent(commandType, id, nSel, nOldSel) - { - } - - wxToolbookEvent(const wxToolbookEvent& event) - : wxBookCtrlBaseEvent(event) - { - } - - virtual wxEvent *Clone() const { return new wxToolbookEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxToolbookEvent) -}; - -typedef void (wxEvtHandler::*wxToolbookEventFunction)(wxToolbookEvent&); - -#define wxToolbookEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxToolbookEventFunction, &func) - -#define EVT_TOOLBOOK_PAGE_CHANGED(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED, winid, wxToolbookEventHandler(fn)) - -#define EVT_TOOLBOOK_PAGE_CHANGING(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING, winid, wxToolbookEventHandler(fn)) - -#endif // wxUSE_TOOLBOOK - -#endif // _WX_TOOLBOOK_H_ diff --git a/desmume/src/windows/wx/include/wx/tooltip.h b/desmume/src/windows/wx/include/wx/tooltip.h deleted file mode 100644 index ac6219bab..000000000 --- a/desmume/src/windows/wx/include/wx/tooltip.h +++ /dev/null @@ -1,39 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: tooltip.h -// Purpose: wxToolTip base header -// Author: Robert Roebling -// Modified by: -// Created: -// Copyright: (c) Robert Roebling -// RCS-ID: $Id: tooltip.h 37066 2006-01-23 03:27:34Z MR $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TOOLTIP_H_BASE_ -#define _WX_TOOLTIP_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_TOOLTIPS - -#if defined(__WXMSW__) -#include "wx/msw/tooltip.h" -#elif defined(__WXMOTIF__) -// #include "wx/motif/tooltip.h" -#elif defined(__WXGTK20__) -#include "wx/gtk/tooltip.h" -#elif defined(__WXGTK__) -#include "wx/gtk1/tooltip.h" -#elif defined(__WXMAC__) -#include "wx/mac/tooltip.h" -#elif defined(__WXCOCOA__) -#include "wx/cocoa/tooltip.h" -#elif defined(__WXPM__) -#include "wx/os2/tooltip.h" -#endif - -#endif - // wxUSE_TOOLTIPS - -#endif - // _WX_TOOLTIP_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/toplevel.h b/desmume/src/windows/wx/include/wx/toplevel.h deleted file mode 100644 index 3ab0c9e70..000000000 --- a/desmume/src/windows/wx/include/wx/toplevel.h +++ /dev/null @@ -1,375 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/toplevel.h -// Purpose: declares wxTopLevelWindow class, the base class for all -// top level windows (such as frames and dialogs) -// Author: Vadim Zeitlin, Vaclav Slavik -// Modified by: -// Created: 06.08.01 -// RCS-ID: $Id: toplevel.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Vaclav Slavik <vaclav@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TOPLEVEL_BASE_H_ -#define _WX_TOPLEVEL_BASE_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/window.h" -#include "wx/iconbndl.h" - -// the default names for various classes -extern WXDLLEXPORT_DATA(const wxChar) wxFrameNameStr[]; - -class WXDLLIMPEXP_FWD_CORE wxTopLevelWindowBase; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// style common to both wxFrame and wxDialog -#define wxSTAY_ON_TOP 0x8000 -#define wxICONIZE 0x4000 -#define wxMINIMIZE wxICONIZE -#define wxMAXIMIZE 0x2000 -#define wxCLOSE_BOX 0x1000 - -#define wxSYSTEM_MENU 0x0800 -#define wxMINIMIZE_BOX 0x0400 -#define wxMAXIMIZE_BOX 0x0200 -#define wxTINY_CAPTION_HORIZ 0x0100 -#define wxTINY_CAPTION_VERT 0x0080 -#define wxRESIZE_BORDER 0x0040 - -#if WXWIN_COMPATIBILITY_2_6 - - // deprecated versions defined for compatibility reasons - #define wxRESIZE_BOX wxMAXIMIZE_BOX - #define wxTHICK_FRAME wxRESIZE_BORDER - - // obsolete styles, unused any more - #define wxDIALOG_MODAL 0 - #define wxDIALOG_MODELESS 0 - #define wxNO_3D 0 - #define wxUSER_COLOURS 0 - -#endif // WXWIN_COMPATIBILITY_2_6 - -// default style -// -// under Windows CE (at least when compiling with eVC 4) we should create -// top level windows without any styles at all for them to appear -// "correctly", i.e. as full screen windows with a "hide" button (same as -// "close" but round instead of squared and just hides the applications -// instead of closing it) in the title bar -#if defined(__WXWINCE__) - #if defined(__SMARTPHONE__) - #define wxDEFAULT_FRAME_STYLE (wxMAXIMIZE) - #elif defined(__WINCE_STANDARDSDK__) - #define wxDEFAULT_FRAME_STYLE (wxMAXIMIZE|wxCLOSE_BOX) - #else - #define wxDEFAULT_FRAME_STYLE (wxNO_BORDER) - #endif -#else // !__WXWINCE__ - #define wxDEFAULT_FRAME_STYLE \ - (wxSYSTEM_MENU | \ - wxRESIZE_BORDER | \ - wxMINIMIZE_BOX | \ - wxMAXIMIZE_BOX | \ - wxCLOSE_BOX | \ - wxCAPTION | \ - wxCLIP_CHILDREN) -#endif - - -// Dialogs are created in a special way -#define wxTOPLEVEL_EX_DIALOG 0x00000008 - -// Styles for ShowFullScreen -// (note that wxTopLevelWindow only handles wxFULLSCREEN_NOBORDER and -// wxFULLSCREEN_NOCAPTION; the rest is handled by wxTopLevelWindow) -enum -{ - wxFULLSCREEN_NOMENUBAR = 0x0001, - wxFULLSCREEN_NOTOOLBAR = 0x0002, - wxFULLSCREEN_NOSTATUSBAR = 0x0004, - wxFULLSCREEN_NOBORDER = 0x0008, - wxFULLSCREEN_NOCAPTION = 0x0010, - - wxFULLSCREEN_ALL = wxFULLSCREEN_NOMENUBAR | wxFULLSCREEN_NOTOOLBAR | - wxFULLSCREEN_NOSTATUSBAR | wxFULLSCREEN_NOBORDER | - wxFULLSCREEN_NOCAPTION -}; - -// Styles for RequestUserAttention -enum -{ - wxUSER_ATTENTION_INFO = 1, - wxUSER_ATTENTION_ERROR = 2 -}; - -// ---------------------------------------------------------------------------- -// wxTopLevelWindow: a top level (as opposed to child) window -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTopLevelWindowBase : public wxWindow -{ -public: - // construction - wxTopLevelWindowBase(); - virtual ~wxTopLevelWindowBase(); - - // top level wnd state - // -------------------- - - // maximize = true => maximize, otherwise - restore - virtual void Maximize(bool maximize = true) = 0; - - // undo Maximize() or Iconize() - virtual void Restore() = 0; - - // iconize = true => iconize, otherwise - restore - virtual void Iconize(bool iconize = true) = 0; - - // return true if the frame is maximized - virtual bool IsMaximized() const = 0; - - // return true if the frame is always maximized - // due to native guidelines or current policy - virtual bool IsAlwaysMaximized() const; - - // return true if the frame is iconized - virtual bool IsIconized() const = 0; - - // get the frame icon - const wxIcon& GetIcon() const { return m_icons.GetIcon( -1 ); } - - // get the frame icons - const wxIconBundle& GetIcons() const { return m_icons; } - - // set the frame icon - virtual void SetIcon(const wxIcon& icon) { m_icons = wxIconBundle( icon ); } - - // set the frame icons - virtual void SetIcons(const wxIconBundle& icons ) { m_icons = icons; } - - // maximize the window to cover entire screen - virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL) = 0; - - // return true if the frame is in fullscreen mode - virtual bool IsFullScreen() const = 0; - - // the title of the top level window: the text which the - // window shows usually at the top of the frame/dialog in dedicated bar - virtual void SetTitle(const wxString& title) = 0; - virtual wxString GetTitle() const = 0; - - // 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); - - // Is this the active frame (highlighted in the taskbar)? - virtual bool IsActive() { return wxGetTopLevelParent(FindFocus()) == this; } - - // this function may be overridden to return false to allow closing the - // application even when this top level window is still open - // - // notice that the window is still closed prior to the application exit and - // so it can still veto it even if it returns false from here - virtual bool ShouldPreventAppExit() const { return true; } - - -#if defined(__SMARTPHONE__) - virtual void SetLeftMenu(int id = wxID_ANY, const wxString& label = wxEmptyString, wxMenu *subMenu = NULL) = 0; - virtual void SetRightMenu(int id = wxID_ANY, const wxString& label = wxEmptyString, wxMenu *subMenu = NULL) = 0; -#endif // __SMARTPHONE__ - - // centre the window on screen: this is just a shortcut - void CentreOnScreen(int dir = wxBOTH) { DoCentre(dir | wxCENTRE_ON_SCREEN); } - void CenterOnScreen(int dir = wxBOTH) { CentreOnScreen(dir); } - - - // default item access: we have a permanent default item which is the one - // set by the user code but we may also have a temporary default item which - // would be chosen if the user pressed "Enter" now but the default action - // reverts to the "permanent" default as soon as this temporary default - // item loses focus - - // used to reset default if pointing to removed child - virtual void RemoveChild(wxWindowBase *child); - - // get the default item, temporary or permanent - wxWindow *GetDefaultItem() const - { return m_winTmpDefault ? m_winTmpDefault : m_winDefault; } - - // set the permanent default item, return the old default - wxWindow *SetDefaultItem(wxWindow *win) - { wxWindow *old = GetDefaultItem(); m_winDefault = win; return old; } - - // return the temporary default item, can be NULL - wxWindow *GetTmpDefaultItem() const { return m_winTmpDefault; } - - // set a temporary default item, SetTmpDefaultItem(NULL) should be called - // soon after a call to SetTmpDefaultItem(window), return the old default - wxWindow *SetTmpDefaultItem(wxWindow *win) - { wxWindow *old = GetDefaultItem(); m_winTmpDefault = win; return old; } - - - // implementation only from now on - // ------------------------------- - - // override some base class virtuals - virtual bool Destroy(); - virtual bool IsTopLevel() const { return true; } - virtual bool IsVisible() const { return IsShown(); } - - // event handlers - void OnCloseWindow(wxCloseEvent& event); - void OnSize(wxSizeEvent& WXUNUSED(event)) { DoLayout(); } - - // Get rect to be used to center top-level children - virtual void GetRectForTopLevelChildren(int *x, int *y, int *w, int *h); - - // this should go away, but for now it's called from docview.cpp, - // so should be there for all platforms - void OnActivate(wxActivateEvent &WXUNUSED(event)) { } - - // do the window-specific processing after processing the update event - virtual void DoUpdateWindowUI(wxUpdateUIEvent& event) ; - - // a different API for SetSizeHints - virtual void SetMinSize(const wxSize& minSize); - virtual void SetMaxSize(const wxSize& maxSize); - - // set size hints for "window manager" - virtual void DoSetSizeHints( int minW, int minH, - int maxW = wxDefaultCoord, int maxH = wxDefaultCoord, - int incW = wxDefaultCoord, int incH = wxDefaultCoord ); - -protected: - // the frame client to screen translation should take account of the - // toolbar which may shift the origin of the client area - virtual void DoClientToScreen(int *x, int *y) const; - virtual void DoScreenToClient(int *x, int *y) const; - - // add support for wxCENTRE_ON_SCREEN - virtual void DoCentre(int dir); - - // no need to do client to screen translation to get our position in screen - // coordinates: this is already the case - virtual void DoGetScreenPosition(int *x, int *y) const - { - DoGetPosition(x, y); - } - - // test whether this window makes part of the frame - // (menubar, toolbar and statusbar are excluded from automatic layout) - virtual bool IsOneOfBars(const wxWindow *WXUNUSED(win)) const - { return false; } - - // check if we should exit the program after deleting this window - bool IsLastBeforeExit() const; - - // send the iconize event, return true if processed - bool SendIconizeEvent(bool iconized = true); - - // do TLW-specific layout: we resize our unique child to fill the entire - // client area - void DoLayout(); - - // Get the default size for the new window if no explicit size given. If - // there are better default sizes then these can be changed, just as long - // as they are not too small for TLWs (and not larger than screen). - static wxSize GetDefaultSize(); - static int WidthDefault(int w) { return w == wxDefaultCoord ? GetDefaultSize().x : w; } - static int HeightDefault(int h) { return h == wxDefaultCoord ? GetDefaultSize().y : h; } - - // the frame icon - wxIconBundle m_icons; - - // a default window (usually a button) or NULL - wxWindow *m_winDefault; - - // a temporary override of m_winDefault, use the latter if NULL - wxWindow *m_winTmpDefault; - - DECLARE_NO_COPY_CLASS(wxTopLevelWindowBase) - DECLARE_EVENT_TABLE() -}; - - -// include the real class declaration -#if defined(__WXPALMOS__) - #include "wx/palmos/toplevel.h" - #define wxTopLevelWindowNative wxTopLevelWindowPalm -#elif defined(__WXMSW__) - #include "wx/msw/toplevel.h" - #define wxTopLevelWindowNative wxTopLevelWindowMSW -#elif defined(__WXGTK20__) - #include "wx/gtk/toplevel.h" - #define wxTopLevelWindowNative wxTopLevelWindowGTK -#elif defined(__WXGTK__) - #include "wx/gtk1/toplevel.h" - #define wxTopLevelWindowNative wxTopLevelWindowGTK -#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 -#elif defined(__WXMAC__) - #include "wx/mac/toplevel.h" - #define wxTopLevelWindowNative wxTopLevelWindowMac -#elif defined(__WXCOCOA__) - #include "wx/cocoa/toplevel.h" - #define wxTopLevelWindowNative wxTopLevelWindowCocoa -#elif defined(__WXPM__) - #include "wx/os2/toplevel.h" - #define wxTopLevelWindowNative wxTopLevelWindowOS2 -#elif defined(__WXMOTIF__) - #include "wx/motif/toplevel.h" - #define wxTopLevelWindowNative wxTopLevelWindowMotif -#endif - -#ifdef __WXUNIVERSAL__ - #include "wx/univ/toplevel.h" -#else // !__WXUNIVERSAL__ - #ifdef wxTopLevelWindowNative - class WXDLLEXPORT wxTopLevelWindow : public wxTopLevelWindowNative - { - public: - // construction - wxTopLevelWindow() { Init(); } - wxTopLevelWindow(wxWindow *parent, - wxWindowID winid, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr) - { - Init(); - Create(parent, winid, title, pos, size, style, name); - } - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxTopLevelWindow) - }; - #endif // wxTopLevelWindowNative -#endif // __WXUNIVERSAL__/!__WXUNIVERSAL__ - - -#endif // _WX_TOPLEVEL_BASE_H_ diff --git a/desmume/src/windows/wx/include/wx/treebase.h b/desmume/src/windows/wx/include/wx/treebase.h deleted file mode 100644 index 775a4492c..000000000 --- a/desmume/src/windows/wx/include/wx/treebase.h +++ /dev/null @@ -1,426 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/treebase.h -// Purpose: wxTreeCtrl base classes and types -// Author: Julian Smart et al -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: treebase.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1997,1998 Robert Roebling -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TREEBASE_H_ -#define _WX_TREEBASE_H_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_TREECTRL - -#include "wx/window.h" // for wxClientData -#include "wx/event.h" -#include "wx/dynarray.h" - -#if WXWIN_COMPATIBILITY_2_6 - -// flags for deprecated `Expand(int action)', will be removed in next versions -enum -{ - wxTREE_EXPAND_EXPAND, - wxTREE_EXPAND_COLLAPSE, - wxTREE_EXPAND_COLLAPSE_RESET, - wxTREE_EXPAND_TOGGLE -}; - -#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(). -// ---------------------------------------------------------------------------- - -// Using this typedef removes an ambiguity when calling Remove() -typedef void *wxTreeItemIdValue; - -class WXDLLEXPORT wxTreeItemId -{ - 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; } - -#if WXWIN_COMPATIBILITY_2_4 - // deprecated: only for compatibility, don't work on 64 bit archs - wxTreeItemId(long item) { m_pItem = wxUIntToPtr(item); } - operator long() const { return (long)wxPtrToUInt(m_pItem); } -#else // !WXWIN_COMPATIBILITY_2_4 - operator bool() const { return IsOk(); } -#endif // WXWIN_COMPATIBILITY_2_4/!WXWIN_COMPATIBILITY_2_4 - - wxTreeItemIdValue m_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 -// that wxTreeItemData's are destroyed automatically by the tree and, as this -// class has virtual dtor, it means that the memory will be automatically -// freed. OTOH, we don't just use wxObject instead of wxTreeItemData because -// the size of this class is critical: in any real application, each tree leaf -// will have wxTreeItemData associated with it and number of leaves may be -// quite big. -// -// Because the objects of this class are deleted by the tree, they should -// always be allocated on the heap! -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTreeItemData: public wxClientData -{ -friend class WXDLLIMPEXP_FWD_CORE wxTreeCtrl; -friend class WXDLLIMPEXP_FWD_CORE wxGenericTreeCtrl; -public: - // creation/destruction - // -------------------- - // default ctor - wxTreeItemData() { } - - // default copy ctor/assignment operator are ok - - // accessor: get the item associated with us - const wxTreeItemId& GetId() const { return m_pItem; } - void SetId(const wxTreeItemId& id) { m_pItem = id; } - -protected: - wxTreeItemId m_pItem; -}; - -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 -// and does it without any loss of efficiency -class WXDLLEXPORT wxArrayTreeItemIds : public wxArrayTreeItemIdsBase -{ -public: - void Add(const wxTreeItemId& id) - { wxArrayTreeItemIdsBase::Add(id.m_pItem); } - void Insert(const wxTreeItemId& id, size_t pos) - { wxArrayTreeItemIdsBase::Insert(id.m_pItem, pos); } - wxTreeItemId Item(size_t i) const - { return wxTreeItemId(wxArrayTreeItemIdsBase::Item(i)); } - wxTreeItemId operator[](size_t i) const { return Item(i); } -}; - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// enum for different images associated with a treectrl item -enum wxTreeItemIcon -{ - wxTreeItemIcon_Normal, // not selected, not expanded - wxTreeItemIcon_Selected, // selected, not expanded - wxTreeItemIcon_Expanded, // not selected, expanded - wxTreeItemIcon_SelectedExpanded, // selected, expanded - wxTreeItemIcon_Max -}; - -// ---------------------------------------------------------------------------- -// wxTreeCtrl flags -// ---------------------------------------------------------------------------- - -#define wxTR_NO_BUTTONS 0x0000 // for convenience -#define wxTR_HAS_BUTTONS 0x0001 // draw collapsed/expanded btns -#define wxTR_NO_LINES 0x0004 // don't draw lines at all -#define wxTR_LINES_AT_ROOT 0x0008 // connect top-level nodes -#define wxTR_TWIST_BUTTONS 0x0010 // still used by wxTreeListCtrl - -#define wxTR_SINGLE 0x0000 // for convenience -#define wxTR_MULTIPLE 0x0020 // can select multiple items -#define wxTR_EXTENDED 0x0040 // TODO: allow extended selection -#define wxTR_HAS_VARIABLE_ROW_HEIGHT 0x0080 // what it says - -#define wxTR_EDIT_LABELS 0x0200 // can edit item labels -#define wxTR_ROW_LINES 0x0400 // put border around items -#define wxTR_HIDE_ROOT 0x0800 // don't display root node - -#define wxTR_FULL_ROW_HIGHLIGHT 0x2000 // highlight full horz space - -#ifdef __WXGTK20__ -#define wxTR_DEFAULT_STYLE (wxTR_HAS_BUTTONS | wxTR_NO_LINES) -#else -#define wxTR_DEFAULT_STYLE (wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT) -#endif - -#if WXWIN_COMPATIBILITY_2_6 -// deprecated, don't use -#define wxTR_MAC_BUTTONS 0 -#define wxTR_AQUA_BUTTONS 0 -#endif // WXWIN_COMPATIBILITY_2_6 - - -// values for the `flags' parameter of wxTreeCtrl::HitTest() which determine -// where exactly the specified point is situated: - -static const int wxTREE_HITTEST_ABOVE = 0x0001; -static const int wxTREE_HITTEST_BELOW = 0x0002; -static const int wxTREE_HITTEST_NOWHERE = 0x0004; - // on the button associated with an item. -static const int wxTREE_HITTEST_ONITEMBUTTON = 0x0008; - // on the bitmap associated with an item. -static const int wxTREE_HITTEST_ONITEMICON = 0x0010; - // on the indent associated with an item. -static const int wxTREE_HITTEST_ONITEMINDENT = 0x0020; - // on the label (string) associated with an item. -static const int wxTREE_HITTEST_ONITEMLABEL = 0x0040; - // on the right of the label associated with an item. -static const int wxTREE_HITTEST_ONITEMRIGHT = 0x0080; - // on the label (string) associated with an item. -static const int wxTREE_HITTEST_ONITEMSTATEICON = 0x0100; - // on the left of the wxTreeCtrl. -static const int wxTREE_HITTEST_TOLEFT = 0x0200; - // on the right of the wxTreeCtrl. -static const int wxTREE_HITTEST_TORIGHT = 0x0400; - // on the upper part (first half) of the item. -static const int wxTREE_HITTEST_ONITEMUPPERPART = 0x0800; - // on the lower part (second half) of the item. -static const int wxTREE_HITTEST_ONITEMLOWERPART = 0x1000; - - // anywhere on the item -static const int wxTREE_HITTEST_ONITEM = wxTREE_HITTEST_ONITEMICON | - wxTREE_HITTEST_ONITEMLABEL; - -// tree ctrl default name -extern WXDLLEXPORT_DATA(const wxChar) wxTreeCtrlNameStr[]; - -// ---------------------------------------------------------------------------- -// wxTreeItemAttr: a structure containing the visual attributes of an item -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTreeItemAttr -{ -public: - // ctors - wxTreeItemAttr() { } - wxTreeItemAttr(const wxColour& colText, - const wxColour& colBack, - const wxFont& font) - : m_colText(colText), m_colBack(colBack), m_font(font) { } - - // setters - void SetTextColour(const wxColour& colText) { m_colText = colText; } - void SetBackgroundColour(const wxColour& colBack) { m_colBack = colBack; } - 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(); } - - const wxColour& GetTextColour() const { return m_colText; } - const wxColour& GetBackgroundColour() const { return m_colBack; } - const wxFont& GetFont() const { return m_font; } - -private: - wxColour m_colText, - m_colBack; - wxFont m_font; -}; - -// ---------------------------------------------------------------------------- -// wxTreeEvent is a special class for all events associated with tree controls -// -// NB: note that not all accessors make sense for all events, see the event -// descriptions below -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxTreeCtrlBase; - -class WXDLLEXPORT wxTreeEvent : public wxNotifyEvent -{ -public: - wxTreeEvent(wxEventType commandType, - wxTreeCtrlBase *tree, - const wxTreeItemId &item = wxTreeItemId()); - wxTreeEvent(wxEventType commandType = wxEVT_NULL, int id = 0); - wxTreeEvent(const wxTreeEvent& event); - - virtual wxEvent *Clone() const { return new wxTreeEvent(*this); } - - // accessors - // get the item on which the operation was performed or the newly - // selected item for wxEVT_COMMAND_TREE_SEL_CHANGED/ING events - wxTreeItemId GetItem() const { return m_item; } - void SetItem(const wxTreeItemId& item) { m_item = item; } - - // for wxEVT_COMMAND_TREE_SEL_CHANGED/ING events, get the previously - // selected item - wxTreeItemId GetOldItem() const { return m_itemOld; } - void SetOldItem(const wxTreeItemId& item) { m_itemOld = item; } - - // the point where the mouse was when the drag operation started (for - // wxEVT_COMMAND_TREE_BEGIN_(R)DRAG events only) or click position - wxPoint GetPoint() const { return m_pointDrag; } - void SetPoint(const wxPoint& pt) { m_pointDrag = pt; } - - // keyboard data (for wxEVT_COMMAND_TREE_KEY_DOWN only) - const wxKeyEvent& GetKeyEvent() const { return m_evtKey; } - int GetKeyCode() const { return m_evtKey.GetKeyCode(); } - void SetKeyEvent(const wxKeyEvent& evt) { m_evtKey = evt; } - - // label (for EVT_TREE_{BEGIN|END}_LABEL_EDIT only) - const wxString& GetLabel() const { return m_label; } - void SetLabel(const wxString& label) { m_label = label; } - - // edit cancel flag (for EVT_TREE_{BEGIN|END}_LABEL_EDIT only) - bool IsEditCancelled() const { return m_editCancelled; } - void SetEditCanceled(bool editCancelled) { m_editCancelled = editCancelled; } - - // Set the tooltip for the item (for EVT\_TREE\_ITEM\_GETTOOLTIP events) - void SetToolTip(const wxString& toolTip) { m_label = toolTip; } - wxString GetToolTip() { return m_label; } - -private: - // not all of the members are used (or initialized) for all events - wxKeyEvent m_evtKey; - wxTreeItemId m_item, - m_itemOld; - wxPoint m_pointDrag; - wxString m_label; - bool m_editCancelled; - - friend class WXDLLIMPEXP_FWD_CORE wxTreeCtrl; - friend class WXDLLIMPEXP_FWD_CORE wxGenericTreeCtrl; - - DECLARE_DYNAMIC_CLASS(wxTreeEvent) -}; - -typedef void (wxEvtHandler::*wxTreeEventFunction)(wxTreeEvent&); - -// ---------------------------------------------------------------------------- -// tree control events and macros for handling them -// ---------------------------------------------------------------------------- - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_BEGIN_DRAG, 600) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_BEGIN_RDRAG, 601) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_BEGIN_LABEL_EDIT, 602) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_END_LABEL_EDIT, 603) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_DELETE_ITEM, 604) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_GET_INFO, 605) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_SET_INFO, 606) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_EXPANDED, 607) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_EXPANDING, 608) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_COLLAPSED, 609) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_COLLAPSING, 610) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_SEL_CHANGED, 611) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_SEL_CHANGING, 612) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_KEY_DOWN, 613) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_ACTIVATED, 614) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_RIGHT_CLICK, 615) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_MIDDLE_CLICK, 616) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_END_DRAG, 617) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_STATE_IMAGE_CLICK, 618) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_GETTOOLTIP, 619) - DECLARE_EVENT_TYPE(wxEVT_COMMAND_TREE_ITEM_MENU, 620) -END_DECLARE_EVENT_TYPES() - -#define wxTreeEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxTreeEventFunction, &func) - -#define wx__DECLARE_TREEEVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_TREE_ ## evt, id, wxTreeEventHandler(fn)) - -// GetItem() returns the item being dragged, GetPoint() the mouse coords -// -// if you call event.Allow(), the drag operation will start and a -// EVT_TREE_END_DRAG event will be sent when the drag is over. -#define EVT_TREE_BEGIN_DRAG(id, fn) wx__DECLARE_TREEEVT(BEGIN_DRAG, id, fn) -#define EVT_TREE_BEGIN_RDRAG(id, fn) wx__DECLARE_TREEEVT(BEGIN_RDRAG, id, fn) - -// GetItem() is the item on which the drop occurred (if any) and GetPoint() the -// current mouse coords -#define EVT_TREE_END_DRAG(id, fn) wx__DECLARE_TREEEVT(END_DRAG, id, fn) - -// GetItem() returns the itme whose label is being edited, GetLabel() returns -// the current item label for BEGIN and the would be new one for END. -// -// Vetoing BEGIN event means that label editing won't happen at all, -// vetoing END means that the new value is discarded and the old one kept -#define EVT_TREE_BEGIN_LABEL_EDIT(id, fn) wx__DECLARE_TREEEVT(BEGIN_LABEL_EDIT, id, fn) -#define EVT_TREE_END_LABEL_EDIT(id, fn) wx__DECLARE_TREEEVT(END_LABEL_EDIT, id, fn) - -// provide/update information about GetItem() item -#define EVT_TREE_GET_INFO(id, fn) wx__DECLARE_TREEEVT(GET_INFO, id, fn) -#define EVT_TREE_SET_INFO(id, fn) wx__DECLARE_TREEEVT(SET_INFO, id, fn) - -// GetItem() is the item being expanded/collapsed, the "ING" versions can use -#define EVT_TREE_ITEM_EXPANDED(id, fn) wx__DECLARE_TREEEVT(ITEM_EXPANDED, id, fn) -#define EVT_TREE_ITEM_EXPANDING(id, fn) wx__DECLARE_TREEEVT(ITEM_EXPANDING, id, fn) -#define EVT_TREE_ITEM_COLLAPSED(id, fn) wx__DECLARE_TREEEVT(ITEM_COLLAPSED, id, fn) -#define EVT_TREE_ITEM_COLLAPSING(id, fn) wx__DECLARE_TREEEVT(ITEM_COLLAPSING, id, fn) - -// GetOldItem() is the item which had the selection previously, GetItem() is -// the item which acquires selection -#define EVT_TREE_SEL_CHANGED(id, fn) wx__DECLARE_TREEEVT(SEL_CHANGED, id, fn) -#define EVT_TREE_SEL_CHANGING(id, fn) wx__DECLARE_TREEEVT(SEL_CHANGING, id, fn) - -// GetKeyCode() returns the key code -// NB: this is the only message for which GetItem() is invalid (you may get the -// item from GetSelection()) -#define EVT_TREE_KEY_DOWN(id, fn) wx__DECLARE_TREEEVT(KEY_DOWN, id, fn) - -// GetItem() returns the item being deleted, the associated data (if any) will -// be deleted just after the return of this event handler (if any) -#define EVT_TREE_DELETE_ITEM(id, fn) wx__DECLARE_TREEEVT(DELETE_ITEM, id, fn) - -// GetItem() returns the item that was activated (double click, enter, space) -#define EVT_TREE_ITEM_ACTIVATED(id, fn) wx__DECLARE_TREEEVT(ITEM_ACTIVATED, id, fn) - -// GetItem() returns the item for which the context menu shall be shown -#define EVT_TREE_ITEM_MENU(id, fn) wx__DECLARE_TREEEVT(ITEM_MENU, id, fn) - -// GetItem() returns the item that was clicked on -#define EVT_TREE_ITEM_RIGHT_CLICK(id, fn) wx__DECLARE_TREEEVT(ITEM_RIGHT_CLICK, id, fn) -#define EVT_TREE_ITEM_MIDDLE_CLICK(id, fn) wx__DECLARE_TREEEVT(ITEM_MIDDLE_CLICK, id, fn) - -// GetItem() returns the item whose state image was clicked on -#define EVT_TREE_STATE_IMAGE_CLICK(id, fn) wx__DECLARE_TREEEVT(STATE_IMAGE_CLICK, id, fn) - -// GetItem() is the item for which the tooltip is being requested -#define EVT_TREE_ITEM_GETTOOLTIP(id, fn) wx__DECLARE_TREEEVT(ITEM_GETTOOLTIP, id, fn) - -#endif // wxUSE_TREECTRL - -#endif // _WX_TREEBASE_H_ diff --git a/desmume/src/windows/wx/include/wx/treebook.h b/desmume/src/windows/wx/include/wx/treebook.h deleted file mode 100644 index abc4ca7d2..000000000 --- a/desmume/src/windows/wx/include/wx/treebook.h +++ /dev/null @@ -1,283 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/treebook.h -// Purpose: wxTreebook: wxNotebook-like control presenting pages in a tree -// Author: Evgeniy Tarassov, Vadim Zeitlin -// Modified by: -// Created: 2005-09-15 -// RCS-ID: $Id: treebook.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TREEBOOK_H_ -#define _WX_TREEBOOK_H_ - -#include "wx/defs.h" - -#if wxUSE_TREEBOOK - -#include "wx/bookctrl.h" -#include "wx/treectrl.h" // for wxArrayTreeItemIds -#include "wx/containr.h" - -typedef wxWindow wxTreebookPage; - -class WXDLLIMPEXP_FWD_CORE wxTreeEvent; - -// ---------------------------------------------------------------------------- -// wxTreebook -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTreebook : public wxBookCtrlBase -{ -public: - // Constructors and such - // --------------------- - - // Default ctor doesn't create the control, use Create() afterwards - wxTreebook() - { - Init(); - } - - // This ctor creates the tree book control - wxTreebook(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxBK_DEFAULT, - const wxString& name = wxEmptyString) - { - Init(); - - (void)Create(parent, id, pos, size, style, name); - } - - // Really creates the control - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxBK_DEFAULT, - const wxString& name = wxEmptyString); - - - // Page insertion operations - // ------------------------- - - // Notice that page pointer may be NULL in which case the next non NULL - // page (usually the first child page of a node) is shown when this page is - // selected - - // Inserts a new page just before the page indicated by page. - // The new page is placed on the same level as page. - virtual bool InsertPage(size_t pos, - wxWindow *page, - const wxString& text, - bool bSelect = false, - int imageId = wxNOT_FOUND); - - // 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); - - // 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); - - // 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); - - // 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 - // is selected (or the next page if no parent). - virtual bool DeletePage(size_t pos); - - - // Tree operations - // --------------- - - // Gets the page node state -- node is expanded or collapsed - virtual bool IsNodeExpanded(size_t pos) const; - - // Expands or collapses the page node. Returns the previous state. - // May generate page changing events (if selected page - // is under the collapsed branch, then parent is autoselected). - virtual bool ExpandNode(size_t pos, bool expand = true); - - // shortcut for ExpandNode(pos, false) - bool CollapseNode(size_t pos) { return ExpandNode(pos, false); } - - // get the parent page or wxNOT_FOUND if this is a top level page - int GetPageParent(size_t pos) const; - - // the tree control we use for showing the pages index tree - wxTreeCtrl* GetTreeCtrl() const { return (wxTreeCtrl*)m_bookctrl; } - - - // Standard operations inherited from wxBookCtrlBase - // ------------------------------------------------- - - virtual int GetSelection() const; - virtual bool SetPageText(size_t n, const wxString& strText); - virtual wxString GetPageText(size_t n) const; - virtual int GetPageImage(size_t n) const; - virtual bool SetPageImage(size_t n, int imageId); - virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; - 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; - virtual void SetImageList(wxImageList *imageList); - virtual void AssignImageList(wxImageList *imageList); - virtual bool DeleteAllPages(); - -protected: - // Implementation of a page removal. See DeletPage for comments. - wxTreebookPage *DoRemovePage(size_t pos); - - // This subclass of wxBookCtrlBase accepts NULL page pointers (empty pages) - virtual bool AllowNullPage() const { return true; } - - // event handlers - void OnTreeSelectionChange(wxTreeEvent& event); - void OnTreeNodeExpandedCollapsed(wxTreeEvent& event); - - // array of page ids and page windows - wxArrayTreeItemIds m_treeIds; - - // the currently selected page or wxNOT_FOUND if none - int m_selection; - - // in the situation when m_selection page is not wxNOT_FOUND but page is - // NULL this is the first (sub)child that has a non-NULL page - int m_actualSelection; - -private: - // common part of all constructors - void Init(); - - // The real implementations of page insertion functions - // ------------------------------------------------------ - // All DoInsert/Add(Sub)Page functions add the page into : - // - the base class - // - the tree control - // - update the index/TreeItemId corespondance array - bool DoInsertPage(size_t pos, - wxWindow *page, - const wxString& text, - bool bSelect = false, - int imageId = wxNOT_FOUND); - bool DoInsertSubPage(size_t pos, - wxWindow *page, - const wxString& text, - bool bSelect = false, - int imageId = wxNOT_FOUND); - bool DoAddSubPage(wxWindow *page, - const wxString& text, - bool bSelect = false, - int imageId = wxNOT_FOUND); - - // Sets selection in the tree control and updates the page being shown. - int DoSetSelection(size_t pos, int flags = 0); - - // Returns currently shown page. In a case when selected the node - // has empty (NULL) page finds first (sub)child with not-empty page. - wxTreebookPage *DoGetCurrentPage() const; - - // Does the selection update. Called from page insertion functions - // to update selection if the selected page was pushed by the newly inserted - void DoUpdateSelection(bool bSelect, int page); - - - // Operations on the internal private members of the class - // ------------------------------------------------------- - // Returns the page TreeItemId for the page. - // Or, if the page index is incorrect, a fake one (fakePage.IsOk() == false) - wxTreeItemId DoInternalGetPage(size_t pos) const; - - // Linear search for a page with the id specified. If no page - // found wxNOT_FOUND is returned. The function is used when we catch an event - // from m_tree (wxTreeCtrl) component. - int DoInternalFindPageById(wxTreeItemId page) const; - - // Updates page and wxTreeItemId correspondance. - void DoInternalAddPage(size_t newPos, wxWindow *page, wxTreeItemId pageId); - - // Removes the page from internal structure. - void DoInternalRemovePage(size_t pos) - { DoInternalRemovePageRange(pos, 0); } - - // Removes the page and all its children designated by subCount - // from internal structures of the control. - void DoInternalRemovePageRange(size_t pos, size_t subCount); - - // Returns internal number of pages which can be different from - // GetPageCount() while performing a page insertion or removal. - size_t DoInternalGetPageCount() const { return m_treeIds.Count(); } - - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS_NO_COPY(wxTreebook) - WX_DECLARE_CONTROL_CONTAINER(); -}; - - -// ---------------------------------------------------------------------------- -// treebook event class and related stuff -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTreebookEvent : public wxBookCtrlBaseEvent -{ -public: - wxTreebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0, - int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND) - : wxBookCtrlBaseEvent(commandType, id, nSel, nOldSel) - { - } - - wxTreebookEvent(const wxTreebookEvent& event) - : wxBookCtrlBaseEvent(event) - { - } - - virtual wxEvent *Clone() const { return new wxTreebookEvent(*this); } - -private: - DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxTreebookEvent) -}; - -extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED; -extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING; -extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_TREEBOOK_NODE_COLLAPSED; -extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_TREEBOOK_NODE_EXPANDED; - -typedef void (wxEvtHandler::*wxTreebookEventFunction)(wxTreebookEvent&); - -#define wxTreebookEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxTreebookEventFunction, &func) - -#define EVT_TREEBOOK_PAGE_CHANGED(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED, winid, wxTreebookEventHandler(fn)) - -#define EVT_TREEBOOK_PAGE_CHANGING(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING, winid, wxTreebookEventHandler(fn)) - -#define EVT_TREEBOOK_NODE_COLLAPSED(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_TREEBOOK_NODE_COLLAPSED, winid, wxTreebookEventHandler(fn)) - -#define EVT_TREEBOOK_NODE_EXPANDED(winid, fn) \ - wx__DECLARE_EVT1(wxEVT_COMMAND_TREEBOOK_NODE_EXPANDED, winid, wxTreebookEventHandler(fn)) - - -#endif // wxUSE_TREEBOOK - -#endif // _WX_TREEBOOK_H_ diff --git a/desmume/src/windows/wx/include/wx/treectrl.h b/desmume/src/windows/wx/include/wx/treectrl.h deleted file mode 100644 index d45855eb4..000000000 --- a/desmume/src/windows/wx/include/wx/treectrl.h +++ /dev/null @@ -1,459 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/treectrl.h -// Purpose: wxTreeCtrl base header -// Author: Karsten Ballueder -// Modified by: -// Created: -// Copyright: (c) Karsten Ballueder -// RCS-ID: $Id: treectrl.h 49563 2007-10-31 20:46:21Z VZ $ -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TREECTRL_H_BASE_ -#define _WX_TREECTRL_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" - -#if wxUSE_TREECTRL - -#include "wx/control.h" -#include "wx/treebase.h" -#include "wx/textctrl.h" // wxTextCtrl::ms_classinfo used through CLASSINFO macro - -class WXDLLIMPEXP_FWD_CORE wxImageList; - -// ---------------------------------------------------------------------------- -// wxTreeCtrlBase -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT 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; - } - - virtual ~wxTreeCtrlBase(); - - // accessors - // --------- - - // get the total number of items in the control - virtual unsigned int GetCount() const = 0; - - // indent is the number of pixels the children are indented relative to - // the parents position. SetIndent() also redraws the control - // immediately. - virtual unsigned int GetIndent() const = 0; - virtual void SetIndent(unsigned int indent) = 0; - - // spacing is the number of pixels between the start and the Text - // (has no effect under wxMSW) - unsigned int GetSpacing() const { return m_spacing; } - void SetSpacing(unsigned int spacing) { m_spacing = spacing; } - - // image list: these functions allow to associate an image list with - // the control and retrieve it. Note that the control does _not_ delete - // the associated image list when it's deleted in order to allow image - // lists to be shared between different controls. - // - // The normal image list is for the icons which correspond to the - // normal tree item state (whether it is selected or not). - // Additionally, the application might choose to show a state icon - // which corresponds to an app-defined item state (for example, - // checked/unchecked) which are taken from the state image list. - wxImageList *GetImageList() const { return m_imageListNormal; } - wxImageList *GetStateImageList() const { return m_imageListState; } - - virtual void SetImageList(wxImageList *imageList) = 0; - virtual void SetStateImageList(wxImageList *imageList) = 0; - void AssignImageList(wxImageList *imageList) - { - SetImageList(imageList); - m_ownsImageListNormal = true; - } - void AssignStateImageList(wxImageList *imageList) - { - SetStateImageList(imageList); - m_ownsImageListState = true; - } - - - // Functions to work with tree ctrl items. Unfortunately, they can _not_ be - // member functions of wxTreeItem because they must know the tree the item - // belongs to for Windows implementation and storing the pointer to - // wxTreeCtrl in each wxTreeItem is just too much waste. - - // accessors - // --------- - - // retrieve items label - virtual wxString GetItemText(const wxTreeItemId& item) const = 0; - // get one of the images associated with the item (normal by default) - virtual int GetItemImage(const wxTreeItemId& item, - wxTreeItemIcon which = wxTreeItemIcon_Normal) const = 0; - // get the data associated with the item - virtual wxTreeItemData *GetItemData(const wxTreeItemId& item) const = 0; - - // get the item's text colour - virtual wxColour GetItemTextColour(const wxTreeItemId& item) const = 0; - - // get the item's background colour - virtual wxColour GetItemBackgroundColour(const wxTreeItemId& item) const = 0; - - // get the item's font - virtual wxFont GetItemFont(const wxTreeItemId& item) const = 0; - - // modifiers - // --------- - - // set items label - virtual void SetItemText(const wxTreeItemId& item, const wxString& text) = 0; - // get one of the images associated with the item (normal by default) - virtual void SetItemImage(const wxTreeItemId& item, - int image, - wxTreeItemIcon which = wxTreeItemIcon_Normal) = 0; - // associate some data with the item - virtual void SetItemData(const wxTreeItemId& item, wxTreeItemData *data) = 0; - - // force appearance of [+] button near the item. This is useful to - // allow the user to expand the items which don't have any children now - // - but instead add them only when needed, thus minimizing memory - // usage and loading time. - virtual void SetItemHasChildren(const wxTreeItemId& item, - bool has = true) = 0; - - // the item will be shown in bold - virtual void SetItemBold(const wxTreeItemId& item, bool bold = true) = 0; - - // the item will be shown with a drop highlight - virtual void SetItemDropHighlight(const wxTreeItemId& item, - bool highlight = true) = 0; - - // set the items text colour - virtual void SetItemTextColour(const wxTreeItemId& item, - const wxColour& col) = 0; - - // set the items background colour - virtual void SetItemBackgroundColour(const wxTreeItemId& item, - const wxColour& col) = 0; - - // set the items font (should be of the same height for all items) - virtual void SetItemFont(const wxTreeItemId& item, - const wxFont& font) = 0; - - // item status inquiries - // --------------------- - - // is the item visible (it might be outside the view or not expanded)? - virtual bool IsVisible(const wxTreeItemId& item) const = 0; - // does the item has any children? - virtual bool ItemHasChildren(const wxTreeItemId& item) const = 0; - // same as above - bool HasChildren(const wxTreeItemId& item) const - { return ItemHasChildren(item); } - // is the item expanded (only makes sense if HasChildren())? - virtual bool IsExpanded(const wxTreeItemId& item) const = 0; - // is this item currently selected (the same as has focus)? - virtual bool IsSelected(const wxTreeItemId& item) const = 0; - // is item text in bold font? - virtual bool IsBold(const wxTreeItemId& item) const = 0; -#if wxABI_VERSION >= 20801 - // is the control empty? - bool IsEmpty() const; -#endif // wxABI 2.8.1+ - - - // number of children - // ------------------ - - // if 'recursively' is false, only immediate children count, otherwise - // the returned number is the number of all items in this branch - virtual size_t GetChildrenCount(const wxTreeItemId& item, - bool recursively = true) const = 0; - - // navigation - // ---------- - - // wxTreeItemId.IsOk() will return false if there is no such item - - // get the root tree item - virtual wxTreeItemId GetRootItem() const = 0; - - // get the item currently selected (may return NULL if no selection) - virtual wxTreeItemId GetSelection() const = 0; - - // get the items currently selected, return the number of such item - // - // NB: this operation is expensive and can take a long time for a - // control with a lot of items (~ O(number of items)). - virtual size_t GetSelections(wxArrayTreeItemIds& selections) const = 0; - - // get the parent of this item (may return NULL if root) - virtual wxTreeItemId GetItemParent(const wxTreeItemId& item) const = 0; - - // for this enumeration function you must pass in a "cookie" parameter - // which is opaque for the application but is necessary for the library - // to make these functions reentrant (i.e. allow more than one - // enumeration on one and the same object simultaneously). Of course, - // the "cookie" passed to GetFirstChild() and GetNextChild() should be - // the same! - - // get the first child of this item - virtual wxTreeItemId GetFirstChild(const wxTreeItemId& item, - wxTreeItemIdValue& cookie) const = 0; - // get the next child - virtual wxTreeItemId GetNextChild(const wxTreeItemId& item, - wxTreeItemIdValue& cookie) const = 0; - // get the last child of this item - this method doesn't use cookies - virtual wxTreeItemId GetLastChild(const wxTreeItemId& item) const = 0; - - // get the next sibling of this item - virtual wxTreeItemId GetNextSibling(const wxTreeItemId& item) const = 0; - // get the previous sibling - virtual wxTreeItemId GetPrevSibling(const wxTreeItemId& item) const = 0; - - // get first visible item - virtual wxTreeItemId GetFirstVisibleItem() const = 0; - // get the next visible item: item must be visible itself! - // see IsVisible() and wxTreeCtrl::GetFirstVisibleItem() - virtual wxTreeItemId GetNextVisible(const wxTreeItemId& item) const = 0; - // get the previous visible item: item must be visible itself! - virtual wxTreeItemId GetPrevVisible(const wxTreeItemId& item) const = 0; - - // operations - // ---------- - - // add the root node to the tree - virtual wxTreeItemId AddRoot(const wxString& text, - int image = -1, int selImage = -1, - wxTreeItemData *data = NULL) = 0; - - // insert a new item in as the first child of the parent - wxTreeItemId PrependItem(const wxTreeItemId& parent, - const wxString& text, - int image = -1, int selImage = -1, - wxTreeItemData *data = NULL) - { - return DoInsertItem(parent, 0u, text, image, selImage, data); - } - - // insert a new item after a given one - wxTreeItemId InsertItem(const wxTreeItemId& parent, - const wxTreeItemId& idPrevious, - const wxString& text, - int image = -1, int selImage = -1, - wxTreeItemData *data = NULL) - { - return DoInsertAfter(parent, idPrevious, text, image, selImage, data); - } - - // insert a new item before the one with the given index - wxTreeItemId InsertItem(const wxTreeItemId& parent, - size_t pos, - const wxString& text, - int image = -1, int selImage = -1, - wxTreeItemData *data = NULL) - { - return DoInsertItem(parent, pos, text, image, selImage, data); - } - - // insert a new item in as the last child of the parent - wxTreeItemId AppendItem(const wxTreeItemId& parent, - const wxString& text, - int image = -1, int selImage = -1, - wxTreeItemData *data = NULL) - { - return DoInsertItem(parent, (size_t)-1, text, image, selImage, data); - } - - // delete this item and associated data if any - virtual void Delete(const wxTreeItemId& item) = 0; - // delete all children (but don't delete the item itself) - // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events - virtual void DeleteChildren(const wxTreeItemId& item) = 0; - // delete all items from the tree - // NB: this won't send wxEVT_COMMAND_TREE_ITEM_DELETED events - virtual void DeleteAllItems() = 0; - - // expand this item - virtual void Expand(const wxTreeItemId& item) = 0; - // expand the item and all its childs and thats childs - void ExpandAllChildren(const wxTreeItemId& item); - // expand all items - void ExpandAll(); - // collapse the item without removing its children - virtual void Collapse(const wxTreeItemId& item) = 0; -#if wxABI_VERSION >= 20801 - // collapse the item and all its childs and thats childs - void CollapseAllChildren(const wxTreeItemId& item); - // collapse all items - void CollapseAll(); -#endif // wxABI 2.8.1+ - // collapse the item and remove all children - virtual void CollapseAndReset(const wxTreeItemId& item) = 0; - // toggles the current state - virtual void Toggle(const wxTreeItemId& item) = 0; - - // remove the selection from currently selected item (if any) - virtual void Unselect() = 0; - // unselect all items (only makes sense for multiple selection control) - virtual void UnselectAll() = 0; - // select this item - virtual void SelectItem(const wxTreeItemId& item, bool select = true) = 0; - // unselect this item - void UnselectItem(const wxTreeItemId& item) { SelectItem(item, false); } - // toggle item selection - void ToggleItemSelection(const wxTreeItemId& item) - { - SelectItem(item, !IsSelected(item)); - } - - // make sure this item is visible (expanding the parent item and/or - // scrolling to this item if necessary) - virtual void EnsureVisible(const wxTreeItemId& item) = 0; - // scroll to this item (but don't expand its parent) - virtual void ScrollTo(const wxTreeItemId& item) = 0; - - // start editing the item label: this (temporarily) replaces the item - // with a one line edit control. The item will be selected if it hadn't - // been before. textCtrlClass parameter allows you to create an edit - // control of arbitrary user-defined class deriving from wxTextCtrl. - virtual wxTextCtrl *EditLabel(const wxTreeItemId& item, - wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)) = 0; - // returns the same pointer as StartEdit() if the item is being edited, - // NULL otherwise (it's assumed that no more than one item may be - // edited simultaneously) - virtual wxTextCtrl *GetEditControl() const = 0; - // end editing and accept or discard the changes to item label - virtual void EndEditLabel(const wxTreeItemId& item, - bool discardChanges = false) = 0; - - // sorting - // ------- - - // this function is called to compare 2 items and should return -1, 0 - // or +1 if the first item is less than, equal to or greater than the - // second one. The base class version performs alphabetic comparaison - // of item labels (GetText) - virtual int OnCompareItems(const wxTreeItemId& item1, - const wxTreeItemId& item2) - { - return wxStrcmp(GetItemText(item1), GetItemText(item2)); - } - - // sort the children of this item using OnCompareItems - // - // NB: this function is not reentrant and not MT-safe (FIXME)! - virtual void SortChildren(const wxTreeItemId& item) = 0; - - // items geometry - // -------------- - - // determine to which item (if any) belongs the given point (the - // coordinates specified are relative to the client area of tree ctrl) - // and, in the second variant, fill the flags parameter with a bitmask - // of wxTREE_HITTEST_xxx constants. - wxTreeItemId HitTest(const wxPoint& point) const - { int dummy; return DoTreeHitTest(point, dummy); } - wxTreeItemId HitTest(const wxPoint& point, int& flags) const - { return DoTreeHitTest(point, flags); } - - // get the bounding rectangle of the item (or of its label only) - virtual bool GetBoundingRect(const wxTreeItemId& item, - wxRect& rect, - bool textOnly = false) const = 0; - - - // implementation - // -------------- - - virtual bool ShouldInheritColours() const { return false; } - - // hint whether to calculate best size quickly or accurately - void SetQuickBestSize(bool q) { m_quickBestSize = q; } - bool GetQuickBestSize() const { return m_quickBestSize; } - -protected: - virtual wxSize DoGetBestSize() const; - - // common part of Append/Prepend/InsertItem() - // - // pos is the position at which to insert the item or (size_t)-1 to append - // it to the end - virtual wxTreeItemId DoInsertItem(const wxTreeItemId& parent, - size_t pos, - const wxString& text, - int image, int selImage, - wxTreeItemData *data) = 0; - - // and this function implements overloaded InsertItem() taking wxTreeItemId - // (it can't be called InsertItem() as we'd have virtual function hiding - // problem in derived classes then) - virtual wxTreeItemId DoInsertAfter(const wxTreeItemId& parent, - const wxTreeItemId& idPrevious, - const wxString& text, - int image = -1, int selImage = -1, - wxTreeItemData *data = NULL) = 0; - - // real HitTest() implementation: again, can't be called just HitTest() - // because it's overloaded and so the non-virtual overload would be hidden - // (and can't be called DoHitTest() because this is already in wxWindow) - virtual wxTreeItemId DoTreeHitTest(const wxPoint& point, - int& flags) const = 0; - - - wxImageList *m_imageListNormal, // images for tree elements - *m_imageListState; // special images for app defined states - bool m_ownsImageListNormal, - m_ownsImageListState; - - // spacing between left border and the text - unsigned int m_spacing; - - // whether full or quick calculation is done in DoGetBestSize - bool m_quickBestSize; - - - DECLARE_NO_COPY_CLASS(wxTreeCtrlBase) -}; - -// ---------------------------------------------------------------------------- -// include the platform-dependent wxTreeCtrl class -// ---------------------------------------------------------------------------- - -#if defined(__WXUNIVERSAL__) - #include "wx/generic/treectlg.h" -#elif defined(__WXPALMOS__) - #include "wx/palmos/treectrl.h" -#elif defined(__WXMSW__) - #include "wx/msw/treectrl.h" -#elif defined(__WXMOTIF__) - #include "wx/generic/treectlg.h" -#elif defined(__WXGTK__) - #include "wx/generic/treectlg.h" -#elif defined(__WXMAC__) - #include "wx/generic/treectlg.h" -#elif defined(__WXCOCOA__) - #include "wx/generic/treectlg.h" -#elif defined(__WXPM__) - #include "wx/generic/treectlg.h" -#endif - -#endif // wxUSE_TREECTRL - -#endif // _WX_TREECTRL_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/txtstrm.h b/desmume/src/windows/wx/include/wx/txtstrm.h deleted file mode 100644 index 969f6ddfa..000000000 --- a/desmume/src/windows/wx/include/wx/txtstrm.h +++ /dev/null @@ -1,160 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/txtstrm.h -// Purpose: Text stream classes -// Author: Guilhem Lavaux -// Modified by: -// Created: 28/06/1998 -// RCS-ID: $Id: txtstrm.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TXTSTREAM_H_ -#define _WX_TXTSTREAM_H_ - -#include "wx/stream.h" -#include "wx/convauto.h" - -#if wxUSE_STREAMS - -class WXDLLIMPEXP_FWD_BASE wxTextInputStream; -class WXDLLIMPEXP_FWD_BASE wxTextOutputStream; - -typedef wxTextInputStream& (*__wxTextInputManip)(wxTextInputStream&); -typedef wxTextOutputStream& (*__wxTextOutputManip)(wxTextOutputStream&); - -WXDLLIMPEXP_BASE wxTextOutputStream &endl( wxTextOutputStream &stream ); - - -#define wxEOT wxT('\4') // the End-Of-Text control code (used only inside wxTextInputStream) - -// If you're scanning through a file using wxTextInputStream, you should check for EOF _before_ -// reading the next item (word / number), because otherwise the last item may get lost. -// You should however be prepared to receive an empty item (empty string / zero number) at the -// end of file, especially on Windows systems. This is unavoidable because most (but not all) files end -// with whitespace (i.e. usually a newline). -class WXDLLIMPEXP_BASE wxTextInputStream -{ -public: -#if wxUSE_UNICODE - wxTextInputStream(wxInputStream& s, - const wxString &sep=wxT(" \t"), - const wxMBConv& conv = wxConvAuto()); -#else - wxTextInputStream(wxInputStream& s, const wxString &sep=wxT(" \t")); -#endif - ~wxTextInputStream(); - - wxUint32 Read32(int base = 10); // base may be between 2 and 36, inclusive, or the special 0 (= C format) - wxUint16 Read16(int base = 10); - wxUint8 Read8(int base = 10); - wxInt32 Read32S(int base = 10); - wxInt16 Read16S(int base = 10); - wxInt8 Read8S(int base = 10); - double ReadDouble(); - wxString ReadLine(); - wxString ReadWord(); - wxChar GetChar() { wxChar c = NextChar(); return (wxChar)(c != wxEOT ? c : 0); } - - wxString GetStringSeparators() const { return m_separators; } - void SetStringSeparators(const wxString &c) { m_separators = c; } - - // Operators - wxTextInputStream& operator>>(wxString& word); - wxTextInputStream& operator>>(char& c); -#if wxUSE_UNICODE && wxWCHAR_T_IS_REAL_TYPE - wxTextInputStream& operator>>(wchar_t& wc); -#endif // wxUSE_UNICODE - wxTextInputStream& operator>>(wxInt16& i); - wxTextInputStream& operator>>(wxInt32& i); - wxTextInputStream& operator>>(wxUint16& i); - wxTextInputStream& operator>>(wxUint32& i); - wxTextInputStream& operator>>(double& i); - wxTextInputStream& operator>>(float& f); - - wxTextInputStream& operator>>( __wxTextInputManip func) { return func(*this); } - -#if WXWIN_COMPATIBILITY_2_6 - wxDEPRECATED( wxString ReadString() ); // use ReadLine or ReadWord instead -#endif // WXWIN_COMPATIBILITY_2_6 - -protected: - wxInputStream &m_input; - wxString m_separators; - char m_lastBytes[10]; // stores the bytes that were read for the last character - -#if wxUSE_UNICODE - wxMBConv *m_conv; -#endif - - bool EatEOL(const wxChar &c); - void UngetLast(); // should be used instead of wxInputStream::Ungetch() because of Unicode issues - // returns EOT (\4) if there is a stream error, or end of file - wxChar NextChar(); // this should be used instead of GetC() because of Unicode issues - wxChar NextNonSeparators(); - - DECLARE_NO_COPY_CLASS(wxTextInputStream) -}; - -typedef enum -{ - wxEOL_NATIVE, - wxEOL_UNIX, - wxEOL_MAC, - wxEOL_DOS -} wxEOL; - -class WXDLLIMPEXP_BASE wxTextOutputStream -{ -public: -#if wxUSE_UNICODE - wxTextOutputStream(wxOutputStream& s, - wxEOL mode = wxEOL_NATIVE, - const wxMBConv& conv = wxConvAuto()); -#else - wxTextOutputStream(wxOutputStream& s, wxEOL mode = wxEOL_NATIVE); -#endif - virtual ~wxTextOutputStream(); - - void SetMode( wxEOL mode = wxEOL_NATIVE ); - wxEOL GetMode() { return m_mode; } - - void Write32(wxUint32 i); - void Write16(wxUint16 i); - void Write8(wxUint8 i); - virtual void WriteDouble(double d); - virtual void WriteString(const wxString& string); - - wxTextOutputStream& PutChar(wxChar c); - - wxTextOutputStream& operator<<(const wxChar *string); - wxTextOutputStream& operator<<(const wxString& string); - wxTextOutputStream& operator<<(char c); -#if wxUSE_UNICODE && wxWCHAR_T_IS_REAL_TYPE - wxTextOutputStream& operator<<(wchar_t wc); -#endif // wxUSE_UNICODE - wxTextOutputStream& operator<<(wxInt16 c); - wxTextOutputStream& operator<<(wxInt32 c); - wxTextOutputStream& operator<<(wxUint16 c); - wxTextOutputStream& operator<<(wxUint32 c); - wxTextOutputStream& operator<<(double f); - wxTextOutputStream& operator<<(float f); - - wxTextOutputStream& operator<<( __wxTextOutputManip func) { return func(*this); } - -protected: - wxOutputStream &m_output; - wxEOL m_mode; - -#if wxUSE_UNICODE - wxMBConv *m_conv; -#endif - - DECLARE_NO_COPY_CLASS(wxTextOutputStream) -}; - -#endif - // wxUSE_STREAMS - -#endif - // _WX_DATSTREAM_H_ diff --git a/desmume/src/windows/wx/include/wx/types.h b/desmume/src/windows/wx/include/wx/types.h deleted file mode 100644 index d9eafa268..000000000 --- a/desmume/src/windows/wx/include/wx/types.h +++ /dev/null @@ -1,93 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: types.h -// Purpose: Type identifiers, used by resource system -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: types.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_TYPESH__ -#define _WX_TYPESH__ - -// Types of objects -#define wxTYPE_ANY 0 -#define wxTYPE_OBJECT wxTYPE_ANY -#define wxTYPE_WINDOW 1 -#define wxTYPE_DIALOG_BOX 2 -#define wxTYPE_ITEM 3 -#define wxTYPE_PANEL 4 -#define wxTYPE_CANVAS 5 -#define wxTYPE_TEXT_WINDOW 6 -#define wxTYPE_FRAME 7 - -#define wxTYPE_BUTTON 8 -#define wxTYPE_TEXT 9 -#define wxTYPE_MESSAGE 10 -#define wxTYPE_CHOICE 11 -#define wxTYPE_LIST_BOX 12 -#define wxTYPE_SLIDER 13 -#define wxTYPE_CHECK_BOX 14 -#define wxTYPE_MENU 15 -#define wxTYPE_MENU_BAR 16 -#define wxTYPE_MULTI_TEXT 17 -#define wxTYPE_RADIO_BOX 18 -#define wxTYPE_GROUP_BOX 19 -#define wxTYPE_GAUGE 20 -#define wxTYPE_SCROLL_BAR 21 -#define wxTYPE_VIRT_LIST_BOX 22 -#define wxTYPE_COMBO_BOX 23 -#define wxTYPE_RADIO_BUTTON 24 - -#define wxTYPE_EVENT 25 -#define wxTYPE_DC 26 -#define wxTYPE_DC_CANVAS 27 -#define wxTYPE_DC_POSTSCRIPT 28 -#define wxTYPE_DC_PRINTER 29 -#define wxTYPE_DC_METAFILE 30 -#define wxTYPE_DC_MEMORY 31 -#define wxTYPE_MOUSE_EVENT 32 -#define wxTYPE_KEY_EVENT 33 -#define wxTYPE_COMMAND_EVENT 34 -#define wxTYPE_DC_PANEL 35 - -#define wxTYPE_PEN 40 -#define wxTYPE_BRUSH 41 -#define wxTYPE_FONT 42 -#define wxTYPE_ICON 42 -#define wxTYPE_BITMAP 43 -#define wxTYPE_METAFILE 44 -#define wxTYPE_TIMER 45 -#define wxTYPE_COLOUR 46 -#define wxTYPE_COLOURMAP 47 -#define wxTYPE_CURSOR 48 - -#define wxTYPE_DDE_CLIENT 60 -#define wxTYPE_DDE_SERVER 61 -#define wxTYPE_DDE_CONNECTION 62 - -#define wxTYPE_HELP_INSTANCE 63 - -#define wxTYPE_LIST 70 -#define wxTYPE_STRING_LIST 71 -#define wxTYPE_HASH_TABLE 72 -#define wxTYPE_NODE 73 -#define wxTYPE_APP 74 -#define wxTYPE_DATE 75 - -#define wxTYPE_ENHANCED_DIALOG 80 -#define wxTYPE_TOOLBAR 81 -#define wxTYPE_BUTTONBAR 82 - -#define wxTYPE_DATABASE 90 -#define wxTYPE_QUERY_FIELD 91 -#define wxTYPE_QUERY_COL 92 -#define wxTYPE_RECORDSET 93 - -#define wxTYPE_USER 500 - -#endif - // _WX_TYPESH__ - diff --git a/desmume/src/windows/wx/include/wx/univ/app.h b/desmume/src/windows/wx/include/wx/univ/app.h deleted file mode 100644 index 26f14538e..000000000 --- a/desmume/src/windows/wx/include/wx/univ/app.h +++ /dev/null @@ -1,21 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/app.h -// Purpose: wxUniversalApp class extends wxApp for wxUniv port -// Author: Vadim Zeitlin -// Modified by: -// Created: 06.08.00 -// RCS-ID: $Id: app.h 27408 2004-05-23 20:53:33Z JS $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIX_APP_H_ -#define _WX_UNIX_APP_H_ - -class WXDLLEXPORT wxUniversalApp : public wxApp -{ -public: -}; - -#endif // _WX_UNIX_APP_H_ - diff --git a/desmume/src/windows/wx/include/wx/univ/bmpbuttn.h b/desmume/src/windows/wx/include/wx/univ/bmpbuttn.h deleted file mode 100644 index 9c380e60a..000000000 --- a/desmume/src/windows/wx/include/wx/univ/bmpbuttn.h +++ /dev/null @@ -1,72 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/bmpbuttn.h -// Purpose: wxBitmapButton class for wxUniversal -// Author: Vadim Zeitlin -// Modified by: -// Created: 25.08.00 -// RCS-ID: $Id: bmpbuttn.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_BMPBUTTN_H_ -#define _WX_UNIV_BMPBUTTN_H_ - -class WXDLLEXPORT wxBitmapButton : public wxBitmapButtonBase -{ -public: - wxBitmapButton() { } - - wxBitmapButton(wxWindow *parent, - wxWindowID id, - const wxBitmap& bitmap, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr) - { - Create(parent, id, bitmap, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxBitmap& bitmap, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr); - - virtual void SetMargins(int x, int y) - { - SetImageMargins(x, y); - - wxBitmapButtonBase::SetMargins(x, y); - } - - virtual bool Enable(bool enable = true); - - virtual bool SetCurrent(bool doit = true); - - virtual void Press(); - virtual void Release(); - -protected: - void OnSetFocus(wxFocusEvent& event); - void OnKillFocus(wxFocusEvent& event); - - // called when one of the bitmap is changed by user - virtual void OnSetBitmap(); - - // set bitmap to the given one if it's ok or to m_bmpNormal and return - // true if the bitmap really changed - bool ChangeBitmap(const wxBitmap& bmp); - -private: - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxBitmapButton) -}; - -#endif // _WX_UNIV_BMPBUTTN_H_ - diff --git a/desmume/src/windows/wx/include/wx/univ/button.h b/desmume/src/windows/wx/include/wx/univ/button.h deleted file mode 100644 index 48d0c9eda..000000000 --- a/desmume/src/windows/wx/include/wx/univ/button.h +++ /dev/null @@ -1,139 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/button.h -// Purpose: wxButton for wxUniversal -// Author: Vadim Zeitlin -// Modified by: -// Created: 15.08.00 -// RCS-ID: $Id: button.h 41227 2006-09-14 19:36:47Z VZ $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_BUTTON_H_ -#define _WX_UNIV_BUTTON_H_ - -class WXDLLEXPORT wxInputHandler; - -#include "wx/bitmap.h" - -// ---------------------------------------------------------------------------- -// the actions supported by this control -// ---------------------------------------------------------------------------- - -#define wxACTION_BUTTON_TOGGLE _T("toggle") // press/release the button -#define wxACTION_BUTTON_PRESS _T("press") // press the button -#define wxACTION_BUTTON_RELEASE _T("release") // release the button -#define wxACTION_BUTTON_CLICK _T("click") // generate button click event - -// ---------------------------------------------------------------------------- -// wxButton: a push button -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxButton : public wxButtonBase -{ -public: - wxButton() { Init(); } - wxButton(wxWindow *parent, - wxWindowID id, - const wxBitmap& bitmap, - const wxString& label = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr) - { - Init(); - - Create(parent, id, bitmap, label, pos, size, style, validator, name); - } - - wxButton(wxWindow *parent, - wxWindowID id, - const wxString& label = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr) - { - Init(); - - Create(parent, id, label, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& label = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr) - { - return Create(parent, id, wxNullBitmap, label, - pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxBitmap& bitmap, - const wxString& label = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr); - - virtual ~wxButton(); - - virtual void SetImageLabel(const wxBitmap& bitmap); - virtual void SetImageMargins(wxCoord x, wxCoord y); - virtual void SetDefault(); - - virtual bool IsPressed() const { return m_isPressed; } - virtual bool IsDefault() const { return m_isDefault; } - - // wxButton actions - virtual void Toggle(); - virtual void Press(); - virtual void Release(); - virtual void Click(); - - virtual bool PerformAction(const wxControlAction& action, - long numArg = -1, - const wxString& strArg = wxEmptyString); - - virtual bool CanBeHighlighted() const { return true; } - - static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return GetStdInputHandler(handlerDef); - } - - -protected: - virtual wxSize DoGetBestClientSize() const; - - virtual bool DoDrawBackground(wxDC& dc); - virtual void DoDraw(wxControlRenderer *renderer); - - // common part of all ctors - void Init(); - - // current state - bool m_isPressed, - m_isDefault; - - // the (optional) image to show and the margins around it - wxBitmap m_bitmap; - wxCoord m_marginBmpX, - m_marginBmpY; - -private: - DECLARE_DYNAMIC_CLASS(wxButton) -}; - -#endif // _WX_UNIV_BUTTON_H_ - diff --git a/desmume/src/windows/wx/include/wx/univ/checkbox.h b/desmume/src/windows/wx/include/wx/univ/checkbox.h deleted file mode 100644 index cd5a52968..000000000 --- a/desmume/src/windows/wx/include/wx/univ/checkbox.h +++ /dev/null @@ -1,150 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/checkbox.h -// Purpose: wxCheckBox declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 07.09.00 -// RCS-ID: $Id: checkbox.h 41227 2006-09-14 19:36:47Z VZ $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_CHECKBOX_H_ -#define _WX_UNIV_CHECKBOX_H_ - -#include "wx/button.h" // for wxStdButtonInputHandler - -// ---------------------------------------------------------------------------- -// the actions supported by wxCheckBox -// ---------------------------------------------------------------------------- - -#define wxACTION_CHECKBOX_CHECK _T("check") // SetValue(true) -#define wxACTION_CHECKBOX_CLEAR _T("clear") // SetValue(false) -#define wxACTION_CHECKBOX_TOGGLE _T("toggle") // toggle the check state - -// additionally it accepts wxACTION_BUTTON_PRESS and RELEASE - -// ---------------------------------------------------------------------------- -// wxCheckBox -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxCheckBox : public wxCheckBoxBase -{ -public: - // checkbox constants - enum State - { - State_Normal, - State_Pressed, - State_Disabled, - State_Current, - State_Max - }; - - enum Status - { - Status_Checked, - Status_Unchecked, - Status_3rdState, - Status_Max - }; - - // constructors - wxCheckBox() { Init(); } - - wxCheckBox(wxWindow *parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxCheckBoxNameStr) - { - Init(); - - Create(parent, id, label, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxCheckBoxNameStr); - - // implement the checkbox interface - virtual void SetValue(bool value); - virtual bool GetValue() const; - - // set/get the bitmaps to use for the checkbox indicator - void SetBitmap(const wxBitmap& bmp, State state, Status status); - virtual wxBitmap GetBitmap(State state, Status status) const; - - // wxCheckBox actions - void Toggle(); - virtual void Press(); - virtual void Release(); - virtual void ChangeValue(bool value); - - // overridden base class virtuals - virtual bool IsPressed() const { return m_isPressed; } - - virtual bool PerformAction(const wxControlAction& action, - long numArg = -1, - const wxString& strArg = wxEmptyString); - - virtual bool CanBeHighlighted() const { return true; } - virtual wxInputHandler *CreateStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return CreateStdInputHandler(handlerDef); - } - -protected: - virtual void DoSet3StateValue(wxCheckBoxState WXUNUSED(state)); - virtual wxCheckBoxState DoGet3StateValue() const; - - virtual void DoDraw(wxControlRenderer *renderer); - virtual wxSize DoGetBestClientSize() const; - - // get the size of the bitmap using either the current one or the default - // one (query renderer then) - virtual wxSize GetBitmapSize() const; - - // common part of all ctors - void Init(); - - // send command event notifying about the checkbox state change - virtual void SendEvent(); - - // called when the checkbox becomes checked - radio button hook - virtual void OnCheck(); - - // get the state corresponding to the flags (combination of wxCONTROL_XXX) - wxCheckBox::State GetState(int flags) const; - - // directly access the bitmaps array without trying to find a valid bitmap - // to use as GetBitmap() does - wxBitmap DoGetBitmap(State state, Status status) const - { return m_bitmaps[state][status]; } - - // get the current status - Status GetStatus() const { return m_status; } - -private: - // the current check status - Status m_status; - - // the bitmaps to use for the different states - wxBitmap m_bitmaps[State_Max][Status_Max]; - - // is the checkbox currently pressed? - bool m_isPressed; - - DECLARE_DYNAMIC_CLASS(wxCheckBox) -}; - -#endif // _WX_UNIV_CHECKBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/checklst.h b/desmume/src/windows/wx/include/wx/univ/checklst.h deleted file mode 100644 index d81bdd8d7..000000000 --- a/desmume/src/windows/wx/include/wx/univ/checklst.h +++ /dev/null @@ -1,114 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/checklst.h -// Purpose: wxCheckListBox class for wxUniversal -// Author: Vadim Zeitlin -// Modified by: -// Created: 12.09.00 -// RCS-ID: $Id: checklst.h 41227 2006-09-14 19:36:47Z VZ $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_CHECKLST_H_ -#define _WX_UNIV_CHECKLST_H_ - -// ---------------------------------------------------------------------------- -// actions -// ---------------------------------------------------------------------------- - -#define wxACTION_CHECKLISTBOX_TOGGLE _T("toggle") - -// ---------------------------------------------------------------------------- -// wxCheckListBox -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxCheckListBox : public wxCheckListBoxBase -{ -public: - // ctors - wxCheckListBox() { Init(); } - - wxCheckListBox(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int nStrings = 0, - const wxString choices[] = NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr) - { - Init(); - - Create(parent, id, pos, size, nStrings, choices, style, validator, name); - } - wxCheckListBox(wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int nStrings = 0, - const wxString choices[] = (const wxString *) NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - - // implement check list box methods - virtual bool IsChecked(unsigned int item) const; - virtual void Check(unsigned int item, bool check = true); - - // and input handling - virtual bool PerformAction(const wxControlAction& action, - long numArg = -1l, - const wxString& strArg = wxEmptyString); - - static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return GetStdInputHandler(handlerDef); - } - - // override all methods which add/delete items to update m_checks array as - // well - virtual void Delete(unsigned int n); - -protected: - virtual int DoAppend(const wxString& item); - virtual void DoInsertItems(const wxArrayString& items, unsigned int pos); - virtual void DoSetItems(const wxArrayString& items, void **clientData); - virtual void DoClear(); - - // draw the check items instead of the usual ones - virtual void DoDrawRange(wxControlRenderer *renderer, - int itemFirst, int itemLast); - - // take them also into account for size calculation - virtual wxSize DoGetBestClientSize() const; - - // common part of all ctors - void Init(); - -private: - // the array containing the checked status of the items - wxArrayInt m_checks; - - DECLARE_DYNAMIC_CLASS(wxCheckListBox) -}; - -#endif // _WX_UNIV_CHECKLST_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/chkconf.h b/desmume/src/windows/wx/include/wx/univ/chkconf.h deleted file mode 100644 index e88a2cf3e..000000000 --- a/desmume/src/windows/wx/include/wx/univ/chkconf.h +++ /dev/null @@ -1,117 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/chkconf.h -// Purpose: wxUniversal-specific configuration options checks -// Author: Vadim Zeitlin -// Created: 2006-09-28 (extracted from wx/chkconf.h) -// RCS-ID: $Id: chkconf.h 41494 2006-09-28 22:55:28Z VZ $ -// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_CHKCONF_H_ -#define _WX_UNIV_CHKCONF_H_ - -#if (wxUSE_COMBOBOX || wxUSE_MENUS) && !wxUSE_POPUPWIN -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_POPUPWIN must be defined to use comboboxes/menus" -# else -# undef wxUSE_POPUPWIN -# define wxUSE_POPUPWIN 1 -# endif -#endif - -#if wxUSE_COMBOBOX -# if !wxUSE_LISTBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxComboBox requires wxListBox in wxUniversal" -# else -# undef wxUSE_LISTBOX -# define wxUSE_LISTBOX 1 -# endif -# endif -#endif /* wxUSE_COMBOBOX */ - -#if wxUSE_RADIOBTN -# if !wxUSE_CHECKBOX -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_RADIOBTN requires wxUSE_CHECKBOX in wxUniversal" -# else -# undef wxUSE_CHECKBOX -# define wxUSE_CHECKBOX 1 -# endif -# endif -#endif /* wxUSE_RADIOBTN */ - -#if wxUSE_TEXTCTRL -# if !wxUSE_CARET -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxTextCtrl requires wxCaret in wxUniversal" -# else -# undef wxUSE_CARET -# define wxUSE_CARET 1 -# endif -# endif /* wxUSE_CARET */ - -# if !wxUSE_SCROLLBAR -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxTextCtrl requires wxScrollBar in wxUniversal" -# else -# undef wxUSE_SCROLLBAR -# define wxUSE_SCROLLBAR 1 -# endif -# endif /* wxUSE_SCROLLBAR */ -#endif /* wxUSE_TEXTCTRL */ - - -/* Themes checks */ -#ifndef wxUSE_ALL_THEMES -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_ALL_THEMES must be defined" -# else -# define wxUSE_ALL_THEMES 1 -# endif -#endif /* wxUSE_ALL_THEMES */ - -#ifndef wxUSE_THEME_GTK -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_THEME_GTK must be defined" -# else -# define wxUSE_THEME_GTK 1 -# endif -#endif /* wxUSE_THEME_GTK */ - -#ifndef wxUSE_THEME_METAL -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_THEME_METAL must be defined" -# else -# define wxUSE_THEME_METAL 1 -# endif -#endif /* wxUSE_THEME_METAL */ - -#ifndef wxUSE_THEME_MONO -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_THEME_MONO must be defined" -# else -# define wxUSE_THEME_MONO 1 -# endif -#endif /* wxUSE_THEME_MONO */ - -#ifndef wxUSE_THEME_WIN32 -# ifdef wxABORT_ON_CONFIG_ERROR -# error "wxUSE_THEME_WIN32 must be defined" -# else -# define wxUSE_THEME_WIN32 1 -# endif -#endif /* wxUSE_THEME_WIN32 */ - -#if !wxUSE_ALL_THEMES && wxUSE_THEME_METAL && !wxUSE_THEME_WIN32 -# ifdef wxABORT_ON_CONFIG_ERROR -# error "Metal theme requires Win32 one" -# else -# undef wxUSE_THEME_WIN32 -# define wxUSE_THEME_WIN32 1 -# endif -#endif /* wxUSE_THEME_METAL && !wxUSE_THEME_WIN32 */ - -#endif /* _WX_UNIV_CHKCONF_H_ */ - diff --git a/desmume/src/windows/wx/include/wx/univ/choice.h b/desmume/src/windows/wx/include/wx/univ/choice.h deleted file mode 100644 index 5c254b6ba..000000000 --- a/desmume/src/windows/wx/include/wx/univ/choice.h +++ /dev/null @@ -1,64 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/choice.h -// Purpose: the universal choice -// Author: Vadim Zeitlin -// Modified by: -// Created: 30.08.00 -// RCS-ID: $Id: choice.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_CHOICE_H_ -#define _WX_UNIV_CHOICE_H_ - -#include "wx/combobox.h" - -// VS: This is only a *temporary* implementation, real wxChoice should not -// derive from wxComboBox and may have different l&f -class WXDLLEXPORT wxChoice : public wxComboBox -{ -public: - wxChoice() {} - wxChoice(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = (const wxString *) NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr) - { - Create(parent, id, pos, size, n, choices, style, validator, name); - } - wxChoice(wxWindow *parent, wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr); - - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = (wxString *) NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr); - bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr); - -private: - void OnComboBox(wxCommandEvent &event); - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxChoice) -}; - - -#endif // _WX_UNIV_CHOICE_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/colschem.h b/desmume/src/windows/wx/include/wx/univ/colschem.h deleted file mode 100644 index eb92d2177..000000000 --- a/desmume/src/windows/wx/include/wx/univ/colschem.h +++ /dev/null @@ -1,103 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/colschem.h -// Purpose: wxColourScheme class provides the colours to use for drawing -// Author: Vadim Zeitlin -// Modified by: -// Created: 19.08.00 -// RCS-ID: $Id: colschem.h 44058 2006-12-24 19:06:39Z VS $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_COLSCHEM_H_ -#define _WX_UNIV_COLSCHEM_H_ - -class WXDLLEXPORT wxWindow; - -#include "wx/colour.h" -#include "wx/checkbox.h" - -// ---------------------------------------------------------------------------- -// wxColourScheme -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxColourScheme -{ -public: - // the standard colours - enum StdColour - { - // the background colour for a window - WINDOW, - - // the different background and text colours for the control - CONTROL, - CONTROL_PRESSED, - CONTROL_CURRENT, - - // the label text for the normal and the disabled state - CONTROL_TEXT, - CONTROL_TEXT_DISABLED, - CONTROL_TEXT_DISABLED_SHADOW, - - // the scrollbar background colour for the normal and pressed states - SCROLLBAR, - SCROLLBAR_PRESSED, - - // the background and text colour for the highlighted item - HIGHLIGHT, - HIGHLIGHT_TEXT, - - // these colours are used for drawing the shadows of 3D objects - SHADOW_DARK, - SHADOW_HIGHLIGHT, - SHADOW_IN, - SHADOW_OUT, - - // the titlebar background colours for the normal and focused states - TITLEBAR, - TITLEBAR_ACTIVE, - - // the titlebar text colours - TITLEBAR_TEXT, - TITLEBAR_ACTIVE_TEXT, - - // the default gauge fill colour - GAUGE, - - // desktop background colour (only used by framebuffer ports) - DESKTOP, - - // wxFrame's background colour - FRAME, - - MAX - }; - - // get a standard colour - virtual wxColour Get(StdColour col) const = 0; - - // get the background colour for the given window - virtual wxColour GetBackground(wxWindow *win) const = 0; - - // virtual dtor for any base class - virtual ~wxColourScheme(); -}; - -// some people just can't spell it correctly :-) -typedef wxColourScheme wxColorScheme; - -// ---------------------------------------------------------------------------- -// macros -// ---------------------------------------------------------------------------- - -// retrieve the default colour from the theme or the given scheme -#define wxSCHEME_COLOUR(scheme, what) scheme->Get(wxColorScheme::what) -#define wxTHEME_COLOUR(what) \ - wxSCHEME_COLOUR(wxTheme::Get()->GetColourScheme(), what) - -// get the background colour for the window in the current theme -#define wxTHEME_BG_COLOUR(win) \ - wxTheme::Get()->GetColourScheme()->GetBackground(win) - -#endif // _WX_UNIV_COLSCHEM_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/combobox.h b/desmume/src/windows/wx/include/wx/univ/combobox.h deleted file mode 100644 index 9c3a77a85..000000000 --- a/desmume/src/windows/wx/include/wx/univ/combobox.h +++ /dev/null @@ -1,167 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/combobox.h -// Purpose: the universal combobox -// Author: Vadim Zeitlin -// Modified by: -// Created: 30.08.00 -// RCS-ID: $Id: combobox.h 41227 2006-09-14 19:36:47Z VZ $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - - -#ifndef _WX_UNIV_COMBOBOX_H_ -#define _WX_UNIV_COMBOBOX_H_ - -#include "wx/combo.h" - -class WXDLLEXPORT wxListBox; - -// ---------------------------------------------------------------------------- -// NB: some actions supported by this control are in wx/generic/combo.h -// ---------------------------------------------------------------------------- - -// choose the next/prev/specified (by numArg) item -#define wxACTION_COMBOBOX_SELECT_NEXT _T("next") -#define wxACTION_COMBOBOX_SELECT_PREV _T("prev") -#define wxACTION_COMBOBOX_SELECT _T("select") - - -// ---------------------------------------------------------------------------- -// wxComboBox: a combination of text control and a listbox -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxComboBox : public wxComboCtrl, public wxComboBoxBase -{ -public: - // ctors and such - wxComboBox() { Init(); } - - wxComboBox(wxWindow *parent, - wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, - const wxString choices[] = (const wxString *) NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr) - { - Init(); - - (void)Create(parent, id, value, pos, size, n, choices, - style, validator, name); - } - wxComboBox(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, - const wxString choices[] = (const wxString *) NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr); - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxComboBoxNameStr); - - virtual ~wxComboBox(); - - // the wxUniversal-specific methods - // -------------------------------- - - // implement the combobox interface - - // wxTextCtrl methods - virtual wxString GetValue() const; - virtual void SetValue(const wxString& value); - virtual void Copy(); - virtual void Cut(); - virtual void Paste(); - virtual void SetInsertionPoint(long pos); - virtual void SetInsertionPointEnd(); - virtual long GetInsertionPoint() const; - virtual wxTextPos GetLastPosition() const; - virtual void Replace(long from, long to, const wxString& value); - virtual void Remove(long from, long to); - virtual void SetSelection(long from, long to); - virtual void SetEditable(bool editable); - virtual bool IsEditable() const; - - virtual void Undo(); - virtual void Redo(); - virtual void SelectAll(); - - virtual bool CanCopy() const; - virtual bool CanCut() const; - virtual bool CanPaste() const; - virtual bool CanUndo() const; - virtual bool CanRedo() const; - - // wxControlWithItems methods - virtual void Clear(); - virtual void Delete(unsigned int n); - virtual unsigned int GetCount() const; - virtual wxString GetString(unsigned int n) const; - virtual void SetString(unsigned int n, const wxString& s); - virtual int FindString(const wxString& s, bool bCase = false) const; - virtual void SetSelection(int n); - virtual int GetSelection() const; - - wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST - - // we have our own input handler and our own actions - // (but wxComboCtrl already handled Popup/Dismiss) - /* - virtual bool PerformAction(const wxControlAction& action, - long numArg = 0l, - const wxString& strArg = wxEmptyString); - */ - - static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return GetStdInputHandler(handlerDef); - } - -protected: - virtual int DoAppend(const wxString& item); - virtual int DoInsert(const wxString& item, unsigned int pos); - virtual void DoSetItemClientData(unsigned int n, void* clientData); - virtual void* DoGetItemClientData(unsigned int n) const; - virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData); - virtual wxClientData* DoGetItemClientObject(unsigned int n) const; - - // common part of all ctors - void Init(); - - // get the associated listbox - wxListBox *GetLBox() const { return m_lbox; } - -private: - // the popup listbox - wxListBox *m_lbox; - - //DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxComboBox) -}; - -#endif // _WX_UNIV_COMBOBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/control.h b/desmume/src/windows/wx/include/wx/univ/control.h deleted file mode 100644 index 80ce52676..000000000 --- a/desmume/src/windows/wx/include/wx/univ/control.h +++ /dev/null @@ -1,102 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/control.h -// Purpose: universal wxControl: adds handling of mnemonics -// Author: Vadim Zeitlin -// Modified by: -// Created: 14.08.00 -// RCS-ID: $Id: control.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_CONTROL_H_ -#define _WX_UNIV_CONTROL_H_ - -class WXDLLEXPORT wxControlRenderer; -class WXDLLEXPORT wxInputHandler; -class WXDLLEXPORT wxRenderer; - -// we must include it as most/all control classes derive their handlers from -// it -#include "wx/univ/inphand.h" - -#include "wx/univ/inpcons.h" - -// ---------------------------------------------------------------------------- -// wxControlAction: the action is currently just a string which identifies it, -// later it might become an atom (i.e. an opaque handler to string). -// ---------------------------------------------------------------------------- - -typedef wxString wxControlAction; - -// the list of actions which apply to all controls (other actions are defined -// in the controls headers) - -#define wxACTION_NONE _T("") // no action to perform - -// ---------------------------------------------------------------------------- -// wxControl: the base class for all GUI controls -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxControl : public wxControlBase, public wxInputConsumer -{ -public: - wxControl() { Init(); } - - wxControl(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxControlNameStr) - { - Init(); - - Create(parent, id, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxControlNameStr); - - // this function will filter out '&' characters and will put the - // accelerator char (the one immediately after '&') into m_chAccel - virtual void SetLabel(const wxString &label); - virtual wxString GetLabel() const; - - // wxUniversal-specific methods - - // return the accel index in the string or -1 if none and puts the modified - // string intosecond parameter if non NULL - static int FindAccelIndex(const wxString& label, - wxString *labelOnly = NULL); - - // return the index of the accel char in the label or -1 if none - int GetAccelIndex() const { return m_indexAccel; } - - // return the accel char itself or 0 if none - wxChar GetAccelChar() const - { - return m_indexAccel == -1 ? _T('\0') : m_label[m_indexAccel]; - } - - virtual wxWindow *GetInputWindow() const { return (wxWindow*)this; } - -protected: - // common part of all ctors - void Init(); - -private: - // label and accel info - wxString m_label; - int m_indexAccel; - - DECLARE_DYNAMIC_CLASS(wxControl) - DECLARE_EVENT_TABLE() - WX_DECLARE_INPUT_CONSUMER() -}; - -#endif // _WX_UNIV_CONTROL_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/dialog.h b/desmume/src/windows/wx/include/wx/univ/dialog.h deleted file mode 100644 index 9fbf2a7ec..000000000 --- a/desmume/src/windows/wx/include/wx/univ/dialog.h +++ /dev/null @@ -1,88 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: dialog.h -// Purpose: wxDialog class -// Author: Vaclav Slavik -// Created: 2001/09/16 -// RCS-ID: $Id: dialog.h 36891 2006-01-16 14:59:55Z MR $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_DIALOG_H_ -#define _WX_UNIV_DIALOG_H_ - -extern WXDLLEXPORT_DATA(const wxChar) wxDialogNameStr[]; -class WXDLLEXPORT wxWindowDisabler; -class WXDLLEXPORT wxEventLoop; - -// Dialog boxes -class WXDLLEXPORT wxDialog : public wxDialogBase -{ -public: - wxDialog() { Init(); } - - // Constructor with no modal flag - the new convention. - wxDialog(wxWindow *parent, wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE, - const wxString& name = wxDialogNameStr) - { - Init(); - Create(parent, id, title, pos, size, style, name); - } - - bool Create(wxWindow *parent, wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_DIALOG_STYLE, - const wxString& name = wxDialogNameStr); - - virtual ~wxDialog(); - - // is the dialog in modal state right now? - virtual bool IsModal() const; - - // For now, same as Show(true) but returns return code - virtual int ShowModal(); - - // may be called to terminate the dialog with the given return code - virtual void EndModal(int retCode); - - // returns true if we're in a modal loop - bool IsModalShowing() const; - - virtual bool Show(bool show = true); - - // implementation only from now on - // ------------------------------- - - // event handlers - void OnCloseWindow(wxCloseEvent& event); - void OnOK(wxCommandEvent& event); - void OnApply(wxCommandEvent& event); - void OnCancel(wxCommandEvent& event); - -protected: - // common part of all ctors - void Init(); - -private: - // while we are showing a modal dialog we disable the other windows using - // this object - wxWindowDisabler *m_windowDisabler; - - // modal dialog runs its own event loop - wxEventLoop *m_eventLoop; - - // is modal right now? - bool m_isShowingModal; - - DECLARE_DYNAMIC_CLASS(wxDialog) - DECLARE_EVENT_TABLE() -}; - -#endif - // _WX_UNIV_DIALOG_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/frame.h b/desmume/src/windows/wx/include/wx/univ/frame.h deleted file mode 100644 index 463930f96..000000000 --- a/desmume/src/windows/wx/include/wx/univ/frame.h +++ /dev/null @@ -1,92 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/frame.h -// Purpose: wxFrame class for wxUniversal -// Author: Vadim Zeitlin -// Modified by: -// Created: 19.05.01 -// RCS-ID: $Id: frame.h 42664 2006-10-29 20:39:31Z VZ $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_FRAME_H_ -#define _WX_UNIV_FRAME_H_ - -// ---------------------------------------------------------------------------- -// wxFrame -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxFrame : public wxFrameBase -{ -public: - wxFrame() {} - wxFrame(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr) - { - Create(parent, id, title, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr); - - virtual wxPoint GetClientAreaOrigin() const; - virtual bool Enable(bool enable = true); - -#if wxUSE_STATUSBAR - virtual wxStatusBar* CreateStatusBar(int number = 1, - long style = wxST_SIZEGRIP, - wxWindowID id = 0, - const wxString& name = wxStatusLineNameStr); -#endif // wxUSE_STATUSBAR - -#if wxUSE_TOOLBAR - // create main toolbar bycalling OnCreateToolBar() - virtual wxToolBar* CreateToolBar(long style = -1, - wxWindowID id = wxID_ANY, - const wxString& name = wxToolBarNameStr); -#endif // wxUSE_TOOLBAR - - virtual wxSize GetMinSize() const; - - // sends wxSizeEvent to itself (used after attaching xxxBar) - virtual void SendSizeEvent(); - -protected: - void OnSize(wxSizeEvent& event); - void OnSysColourChanged(wxSysColourChangedEvent& event); - - virtual void DoGetClientSize(int *width, int *height) const; - virtual void DoSetClientSize(int width, int height); - -#if wxUSE_MENUS - // override to update menu bar position when the frame size changes - virtual void PositionMenuBar(); - virtual void DetachMenuBar(); - virtual void AttachMenuBar(wxMenuBar *menubar); -#endif // wxUSE_MENUS - -#if wxUSE_STATUSBAR - // override to update statusbar position when the frame size changes - virtual void PositionStatusBar(); -#endif // wxUSE_MENUS - -protected: -#if wxUSE_TOOLBAR - virtual void PositionToolBar(); -#endif // wxUSE_TOOLBAR - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxFrame) -}; - -#endif // _WX_UNIV_FRAME_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/gauge.h b/desmume/src/windows/wx/include/wx/univ/gauge.h deleted file mode 100644 index f7444ef28..000000000 --- a/desmume/src/windows/wx/include/wx/univ/gauge.h +++ /dev/null @@ -1,75 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/gauge.h -// Purpose: wxUniversal wxGauge declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 20.02.01 -// RCS-ID: $Id: gauge.h 35698 2005-09-25 20:49:40Z MW $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_GAUGE_H_ -#define _WX_UNIV_GAUGE_H_ - -// ---------------------------------------------------------------------------- -// wxGauge: a progress bar -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxGauge : public wxGaugeBase -{ -public: - wxGauge() { Init(); } - - wxGauge(wxWindow *parent, - wxWindowID id, - int range, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxGA_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxGaugeNameStr) - { - Init(); - - (void)Create(parent, id, range, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - int range, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxGA_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxGaugeNameStr); - - // implement base class virtuals - virtual void SetRange(int range); - virtual void SetValue(int pos); - - // wxUniv-specific methods - - // is it a smooth progress bar or a discrete one? - bool IsSmooth() const { return (GetWindowStyle() & wxGA_SMOOTH) != 0; } - - // is it a vertica; progress bar or a horizontal one? - bool IsVertical() const { return (GetWindowStyle() & wxGA_VERTICAL) != 0; } - -protected: - // common part of all ctors - void Init(); - - // return the def border for a progress bar - virtual wxBorder GetDefaultBorder() const; - - // return the default size - virtual wxSize DoGetBestClientSize() const; - - // draw the control - virtual void DoDraw(wxControlRenderer *renderer); - - DECLARE_DYNAMIC_CLASS(wxGauge) -}; - -#endif // _WX_UNIV_GAUGE_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/inpcons.h b/desmume/src/windows/wx/include/wx/univ/inpcons.h deleted file mode 100644 index 10df5ff33..000000000 --- a/desmume/src/windows/wx/include/wx/univ/inpcons.h +++ /dev/null @@ -1,153 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/inpcons.h -// Purpose: wxInputConsumer: mix-in class for input handling -// Author: Vadim Zeitlin -// Modified by: -// Created: 14.08.00 -// RCS-ID: $Id: inpcons.h 41227 2006-09-14 19:36:47Z VZ $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_INPCONS_H_ -#define _WX_UNIV_INPCONS_H_ - -class WXDLLEXPORT wxInputHandler; -class WXDLLEXPORT wxWindow; - -#include "wx/object.h" -#include "wx/event.h" - -// ---------------------------------------------------------------------------- -// wxControlAction: the action is currently just a string which identifies it, -// later it might become an atom (i.e. an opaque handler to string). -// ---------------------------------------------------------------------------- - -typedef wxString wxControlAction; - -// the list of actions which apply to all controls (other actions are defined -// in the controls headers) - -#define wxACTION_NONE _T("") // no action to perform - -// ---------------------------------------------------------------------------- -// wxInputConsumer: mix-in class for handling wxControlActions (used by -// wxControl and wxTopLevelWindow). -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxInputConsumer -{ -public: - wxInputConsumer() { m_inputHandler = NULL; } - virtual ~wxInputConsumer() { } - - // get the input handler - wxInputHandler *GetInputHandler() const { return m_inputHandler; } - - // perform a control-dependent action: an action may have an optional - // numeric and another (also optional) string argument whose interpretation - // depends on the action - // - // NB: we might use ellipsis in PerformAction() declaration but this - // wouldn't be more efficient than always passing 2 unused parameters - // but would be more difficult. Another solution would be to have - // several overloaded versions but this will expose the problem of - // virtual function hiding we don't have here. - virtual bool PerformAction(const wxControlAction& action, - long numArg = -1l, - const wxString& strArg = wxEmptyString); - - // get the window to work with (usually the class wxInputConsumer was mixed into) - virtual wxWindow *GetInputWindow() const = 0; - - // this function must be implemented in any classes process input (i.e. not - // static controls) to create the standard input handler for the concrete - // class deriving from this mix-in - // - // the parameter is the default input handler which should receive all - // unprocessed input (i.e. typically handlerDef is passed to - // wxStdInputHandler ctor) or it may be NULL - // - // the returned pointer will not be deleted by caller so it must either - // point to a static object or be deleted on program termination - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef); - - -protected: - // event handlers - void OnMouse(wxMouseEvent& event); - void OnKeyDown(wxKeyEvent& event); - void OnKeyUp(wxKeyEvent& event); - void OnFocus(wxFocusEvent& event); - void OnActivate(wxActivateEvent& event); - - // create input handler by name, fall back to GetStdInputHandler() if - // the current theme doesn't define any specific handler of this type - void CreateInputHandler(const wxString& inphandler); - -private: - // the input processor (we never delete it) - wxInputHandler *m_inputHandler; -}; - - -// ---------------------------------------------------------------------------- -// macros which must be used by the classes derived from wxInputConsumer mix-in -// ---------------------------------------------------------------------------- - -// declare the methods to be forwarded -#define WX_DECLARE_INPUT_CONSUMER() \ -private: \ - void OnMouse(wxMouseEvent& event); \ - void OnKeyDown(wxKeyEvent& event); \ - void OnKeyUp(wxKeyEvent& event); \ - void OnFocus(wxFocusEvent& event); \ -public: /* because of docview :-( */ \ - void OnActivate(wxActivateEvent& event); \ -private: - -// implement the event table entries for wxControlContainer -#define WX_EVENT_TABLE_INPUT_CONSUMER(classname) \ - EVT_KEY_DOWN(classname::OnKeyDown) \ - EVT_KEY_UP(classname::OnKeyUp) \ - EVT_MOUSE_EVENTS(classname::OnMouse) \ - EVT_SET_FOCUS(classname::OnFocus) \ - EVT_KILL_FOCUS(classname::OnFocus) \ - EVT_ACTIVATE(classname::OnActivate) - -// Forward event handlers to wxInputConsumer -// -// (We can't use them directly, because wxIC has virtual methods, which forces -// the compiler to include (at least) two vtables into wxControl, one for the -// wxWindow-wxControlBase-wxControl branch and one for the wxIC mix-in. -// Consequently, the "this" pointer has different value when in wxControl's -// and wxIC's method, even though the instance stays same. This doesn't matter -// so far as member pointers aren't used, but that's not wxControl's case. -// When we add an event table entry (= use a member pointer) pointing to -// wxIC's OnXXX method, GCC compiles code that executes wxIC::OnXXX with the -// version of "this" that belongs to wxControl, not wxIC! In our particular -// case, the effect is that m_handler is NULL (probably same memory -// area as the_other_vtable's_this->m_refObj) and input handling doesn't work.) -#define WX_FORWARD_TO_INPUT_CONSUMER(classname) \ - void classname::OnMouse(wxMouseEvent& event) \ - { \ - wxInputConsumer::OnMouse(event); \ - } \ - void classname::OnKeyDown(wxKeyEvent& event) \ - { \ - wxInputConsumer::OnKeyDown(event); \ - } \ - void classname::OnKeyUp(wxKeyEvent& event) \ - { \ - wxInputConsumer::OnKeyUp(event); \ - } \ - void classname::OnFocus(wxFocusEvent& event) \ - { \ - wxInputConsumer::OnFocus(event); \ - } \ - void classname::OnActivate(wxActivateEvent& event) \ - { \ - wxInputConsumer::OnActivate(event); \ - } - -#endif // _WX_UNIV_INPCONS_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/inphand.h b/desmume/src/windows/wx/include/wx/univ/inphand.h deleted file mode 100644 index 2eb036898..000000000 --- a/desmume/src/windows/wx/include/wx/univ/inphand.h +++ /dev/null @@ -1,116 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/inphand.h -// Purpose: wxInputHandler class maps the keyboard and mouse events to the -// actions which then are performed by the control -// Author: Vadim Zeitlin -// Modified by: -// Created: 18.08.00 -// RCS-ID: $Id: inphand.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_INPHAND_H_ -#define _WX_UNIV_INPHAND_H_ - -#include "wx/univ/inpcons.h" // for wxControlAction(s) - -// ---------------------------------------------------------------------------- -// types of the standard input handlers which can be passed to -// wxTheme::GetInputHandler() -// ---------------------------------------------------------------------------- - -#define wxINP_HANDLER_DEFAULT _T("") -#define wxINP_HANDLER_BUTTON _T("button") -#define wxINP_HANDLER_CHECKBOX _T("checkbox") -#define wxINP_HANDLER_CHECKLISTBOX _T("checklistbox") -#define wxINP_HANDLER_COMBOBOX _T("combobox") -#define wxINP_HANDLER_LISTBOX _T("listbox") -#define wxINP_HANDLER_NOTEBOOK _T("notebook") -#define wxINP_HANDLER_RADIOBTN _T("radiobtn") -#define wxINP_HANDLER_SCROLLBAR _T("scrollbar") -#define wxINP_HANDLER_SLIDER _T("slider") -#define wxINP_HANDLER_SPINBTN _T("spinbtn") -#define wxINP_HANDLER_STATUSBAR _T("statusbar") -#define wxINP_HANDLER_TEXTCTRL _T("textctrl") -#define wxINP_HANDLER_TOOLBAR _T("toolbar") -#define wxINP_HANDLER_TOPLEVEL _T("toplevel") - -// ---------------------------------------------------------------------------- -// wxInputHandler: maps the events to the actions -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxInputHandler : public wxObject -{ -public: - // map a keyboard event to one or more actions (pressed == true if the key - // was pressed, false if released), returns true if something was done - virtual bool HandleKey(wxInputConsumer *consumer, - const wxKeyEvent& event, - bool pressed) = 0; - - // map a mouse (click) event to one or more actions - virtual bool HandleMouse(wxInputConsumer *consumer, - const wxMouseEvent& event) = 0; - - // handle mouse movement (or enter/leave) event: it is separated from - // HandleMouse() for convenience as many controls don't care about mouse - // movements at all - virtual bool HandleMouseMove(wxInputConsumer *consumer, - const wxMouseEvent& event); - - // do something with focus set/kill event: this is different from - // HandleMouseMove() as the mouse maybe over the control without it having - // focus - // - // return true to refresh the control, false otherwise - virtual bool HandleFocus(wxInputConsumer *consumer, const wxFocusEvent& event); - - // react to the app getting/losing activation - // - // return true to refresh the control, false otherwise - virtual bool HandleActivation(wxInputConsumer *consumer, bool activated); - - // virtual dtor for any base class - virtual ~wxInputHandler(); -}; - -// ---------------------------------------------------------------------------- -// wxStdInputHandler is just a base class for all other "standard" handlers -// and also provides the way to chain input handlers together -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStdInputHandler : public wxInputHandler -{ -public: - wxStdInputHandler(wxInputHandler *handler) : m_handler(handler) { } - - virtual bool HandleKey(wxInputConsumer *consumer, - const wxKeyEvent& event, - bool pressed) - { - return m_handler ? m_handler->HandleKey(consumer, event, pressed) - : false; - } - - virtual bool HandleMouse(wxInputConsumer *consumer, - const wxMouseEvent& event) - { - return m_handler ? m_handler->HandleMouse(consumer, event) : false; - } - - virtual bool HandleMouseMove(wxInputConsumer *consumer, const wxMouseEvent& event) - { - return m_handler ? m_handler->HandleMouseMove(consumer, event) : false; - } - - virtual bool HandleFocus(wxInputConsumer *consumer, const wxFocusEvent& event) - { - return m_handler ? m_handler->HandleFocus(consumer, event) : false; - } - -private: - wxInputHandler *m_handler; -}; - -#endif // _WX_UNIV_INPHAND_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/listbox.h b/desmume/src/windows/wx/include/wx/univ/listbox.h deleted file mode 100644 index 5800332f7..000000000 --- a/desmume/src/windows/wx/include/wx/univ/listbox.h +++ /dev/null @@ -1,300 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/listbox.h -// Purpose: the universal listbox -// Author: Vadim Zeitlin -// Modified by: -// Created: 30.08.00 -// RCS-ID: $Id: listbox.h 41227 2006-09-14 19:36:47Z VZ $ -// Copyright: (c) 2000 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_LISTBOX_H_ -#define _WX_UNIV_LISTBOX_H_ - -#include "wx/scrolwin.h" // for wxScrollHelper -#include "wx/dynarray.h" -#include "wx/arrstr.h" - -// ---------------------------------------------------------------------------- -// the actions supported by this control -// ---------------------------------------------------------------------------- - -// change the current item -#define wxACTION_LISTBOX_SETFOCUS _T("setfocus") // select the item -#define wxACTION_LISTBOX_MOVEDOWN _T("down") // select item below -#define wxACTION_LISTBOX_MOVEUP _T("up") // select item above -#define wxACTION_LISTBOX_PAGEDOWN _T("pagedown") // go page down -#define wxACTION_LISTBOX_PAGEUP _T("pageup") // go page up -#define wxACTION_LISTBOX_START _T("start") // go to first item -#define wxACTION_LISTBOX_END _T("end") // go to last item -#define wxACTION_LISTBOX_FIND _T("find") // find item by 1st letter - -// do something with the current item -#define wxACTION_LISTBOX_ACTIVATE _T("activate") // activate (choose) -#define wxACTION_LISTBOX_TOGGLE _T("toggle") // togglee selected state -#define wxACTION_LISTBOX_SELECT _T("select") // sel this, unsel others -#define wxACTION_LISTBOX_SELECTADD _T("selectadd") // add to selection -#define wxACTION_LISTBOX_UNSELECT _T("unselect") // unselect -#define wxACTION_LISTBOX_ANCHOR _T("selanchor") // anchor selection - -// do something with the selection globally (not for single selection ones) -#define wxACTION_LISTBOX_SELECTALL _T("selectall") // select all items -#define wxACTION_LISTBOX_UNSELECTALL _T("unselectall") // unselect all items -#define wxACTION_LISTBOX_SELTOGGLE _T("togglesel") // invert the selection -#define wxACTION_LISTBOX_EXTENDSEL _T("extend") // extend to item - -// ---------------------------------------------------------------------------- -// wxListBox: a list of selectable items -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxListBox : public wxListBoxBase, public wxScrollHelper -{ -public: - // ctors and such - wxListBox() : wxScrollHelper(this) { Init(); } - wxListBox(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = (const wxString *) NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr ) - : wxScrollHelper(this) - { - Init(); - - Create(parent, id, pos, size, n, choices, style, validator, name); - } - wxListBox(wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr ); - - virtual ~wxListBox(); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = (const wxString *) NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxListBoxNameStr); - - // implement the listbox interface defined by wxListBoxBase - virtual void Clear(); - virtual void Delete(unsigned int n); - - virtual unsigned int GetCount() const - { return (unsigned int)m_strings->GetCount(); } - virtual wxString GetString(unsigned int n) const - { return m_strings->Item(n); } - virtual void SetString(unsigned int n, const wxString& s); - virtual int FindString(const wxString& s, bool bCase = false) const - { return m_strings->Index(s, bCase); } - - virtual bool IsSelected(int n) const - { return m_selections.Index(n) != wxNOT_FOUND; } - virtual int GetSelection() const; - virtual int GetSelections(wxArrayInt& aSelections) const; - -protected: - virtual void DoSetSelection(int n, bool select); - virtual int DoAppendOnly(const wxString& item); - virtual int DoAppend(const wxString& item); - virtual void DoInsertItems(const wxArrayString& items, unsigned int pos); - virtual void DoSetItems(const wxArrayString& items, void **clientData); - - virtual void DoSetFirstItem(int n); - - virtual void DoSetItemClientData(unsigned int n, void* clientData); - virtual void* DoGetItemClientData(unsigned int n) const; - virtual void DoSetItemClientObject(unsigned int n, wxClientData* clientData); - virtual wxClientData* DoGetItemClientObject(unsigned int n) const; - -public: - // override some more base class methods - virtual bool SetFont(const wxFont& font); - - // the wxUniversal-specific methods - // -------------------------------- - - // the current item is the same as the selected one for wxLB_SINGLE - // listboxes but for the other ones it is just the focused item which may - // be selected or not - int GetCurrentItem() const { return m_current; } - void SetCurrentItem(int n); - - // select the item which is diff items below the current one - void ChangeCurrent(int diff); - - // activate (i.e. send a LISTBOX_DOUBLECLICKED message) the specified or - // current (if -1) item - void Activate(int item = -1); - - // select or unselect the specified or current (if -1) item - void DoSelect(int item = -1, bool sel = true); - - // more readable wrapper - void DoUnselect(int item) { DoSelect(item, false); } - - // select an item and send a notification about it - void SelectAndNotify(int item); - - // ensure that the given item is visible by scrolling it into view - virtual void EnsureVisible(int n); - - // find the first item [strictly] after the current one which starts with - // the given string and make it the current one, return true if the current - // item changed - bool FindItem(const wxString& prefix, bool strictlyAfter = false); - bool FindNextItem(const wxString& prefix) { return FindItem(prefix, true); } - - // extend the selection to span the range from the anchor (see below) to - // the specified or current item - void ExtendSelection(int itemTo = -1); - - // make this item the new selection anchor: extending selection with - // ExtendSelection() will work with it - void AnchorSelection(int itemFrom) { m_selAnchor = itemFrom; } - - // get, calculating it if necessary, the number of items per page, the - // height of each line and the max width of an item - int GetItemsPerPage() const; - wxCoord GetLineHeight() const; - wxCoord GetMaxWidth() const; - - // override the wxControl virtual methods - virtual bool PerformAction(const wxControlAction& action, - long numArg = 0l, - const wxString& strArg = wxEmptyString); - - static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return GetStdInputHandler(handlerDef); - } - - // idle processing - virtual void OnInternalIdle(); - -protected: - // geometry - virtual wxSize DoGetBestClientSize() const; - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - - virtual void DoDraw(wxControlRenderer *renderer); - virtual wxBorder GetDefaultBorder() const; - - // common part of all ctors - void Init(); - - // event handlers - void OnSize(wxSizeEvent& event); - - // common part of Clear() and DoSetItems(): clears everything - virtual void DoClear(); - - // refresh the given item(s) or everything - void RefreshItems(int from, int count); - void RefreshItem(int n); - void RefreshFromItemToEnd(int n); - void RefreshAll(); - - // send an event of the given type (using m_current by default) - bool SendEvent(wxEventType type, int item = -1); - - // calculate the number of items per page using our current size - void CalcItemsPerPage(); - - // can/should we have a horz scrollbar? - bool HasHorzScrollbar() const - { return (m_windowStyle & wxLB_HSCROLL) != 0; } - - // redraw the items in the given range only: called from DoDraw() - virtual void DoDrawRange(wxControlRenderer *renderer, - int itemFirst, int itemLast); - - // update the scrollbars and then ensure that the item is visible - void DoEnsureVisible(int n); - - // mark horz scrollbar for updating - void RefreshHorzScrollbar(); - - // update (show/hide/adjust) the scrollbars - void UpdateScrollbars(); - - // refresh the items specified by m_updateCount and m_updateFrom - void UpdateItems(); - - // the array containing all items (it is sorted if the listbox has - // wxLB_SORT style) - wxArrayString* m_strings; - - // this array contains the indices of the selected items (for the single - // selection listboxes only the first element of it is used and contains - // the current selection) - wxArrayInt m_selections; - - // and this one the client data (either void or wxClientData) - wxArrayPtrVoid m_itemsClientData; - - // the current item - int m_current; - -private: - // the range of elements which must be updated: if m_updateCount is 0 no - // update is needed, if it is -1 everything must be updated, otherwise - // m_updateCount items starting from m_updateFrom have to be redrawn - int m_updateFrom, - m_updateCount; - - // the height of one line in the listbox (all lines have the same height) - wxCoord m_lineHeight; - - // the maximal width of a listbox item and the item which has it - wxCoord m_maxWidth; - int m_maxWidthItem; - - // the extents of horz and vert scrollbars - int m_scrollRangeX, - m_scrollRangeY; - - // the number of items per page - size_t m_itemsPerPage; - - // if the number of items has changed we may need to show/hide the - // scrollbar - bool m_updateScrollbarX, m_updateScrollbarY, - m_showScrollbarX, m_showScrollbarY; - - // if the current item has changed, we might need to scroll if it went out - // of the window - bool m_currentChanged; - - // the anchor from which the selection is extended for the listboxes with - // wxLB_EXTENDED style - this is set to the last item which was selected - // by not extending the selection but by choosing it directly - int m_selAnchor; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxListBox) -}; - -#endif // _WX_UNIV_LISTBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/menu.h b/desmume/src/windows/wx/include/wx/univ/menu.h deleted file mode 100644 index 4b18ec46b..000000000 --- a/desmume/src/windows/wx/include/wx/univ/menu.h +++ /dev/null @@ -1,282 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/menu.h -// Purpose: wxMenu and wxMenuBar classes for wxUniversal -// Author: Vadim Zeitlin -// Modified by: -// Created: 05.05.01 -// RCS-ID: $Id: menu.h 48053 2007-08-13 17:07:01Z JS $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_MENU_H_ -#define _WX_UNIV_MENU_H_ - -#if wxUSE_ACCEL - #include "wx/accel.h" -#endif // wxUSE_ACCEL - -#include "wx/dynarray.h" - -// fwd declarations -class WXDLLEXPORT wxMenuInfo; -WX_DECLARE_EXPORTED_OBJARRAY(wxMenuInfo, wxMenuInfoArray); - -class WXDLLEXPORT wxMenuGeometryInfo; -class WXDLLEXPORT wxPopupMenuWindow; -class WXDLLEXPORT wxRenderer; - -// ---------------------------------------------------------------------------- -// wxMenu -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMenu : public wxMenuBase -{ -public: - // ctors and dtor - wxMenu(const wxString& title, long style = 0) - : wxMenuBase(title, style) { Init(); } - - wxMenu(long style = 0) : wxMenuBase(style) { Init(); } - - virtual ~wxMenu(); - - // called by wxMenuItem when an item of this menu changes - void RefreshItem(wxMenuItem *item); - - // does the menu have any items? - bool IsEmpty() const { return !GetMenuItems().GetFirst(); } - - // show this menu at the given position (in screen coords) and optionally - // select its first item - void Popup(const wxPoint& pos, const wxSize& size, - bool selectFirst = true); - - // dismiss the menu - void Dismiss(); - - // override the base class methods to connect/disconnect event handlers - virtual void Attach(wxMenuBarBase *menubar); - virtual void Detach(); - - // implementation only from here - - // do as if this item were clicked, return true if the resulting event was - // processed, false otherwise - bool ClickItem(wxMenuItem *item); - - // process the key event, return true if done - bool ProcessKeyDown(int key); - -#if wxUSE_ACCEL - // find the item for the given accel and generate an event if found - bool ProcessAccelEvent(const wxKeyEvent& event); -#endif // wxUSE_ACCEL - -protected: - // implement base class virtuals - virtual wxMenuItem* DoAppend(wxMenuItem *item); - virtual wxMenuItem* DoInsert(size_t pos, wxMenuItem *item); - virtual wxMenuItem* DoRemove(wxMenuItem *item); - - // common part of DoAppend and DoInsert - void OnItemAdded(wxMenuItem *item); - - // called by wxPopupMenuWindow when the window is hidden - void OnDismiss(bool dismissParent); - - // return true if the menu is currently shown on screen - bool IsShown() const; - - // get the menu geometry info - const wxMenuGeometryInfo& GetGeometryInfo() const; - - // forget old menu geometry info - void InvalidateGeometryInfo(); - - // return either the menubar or the invoking window, normally never NULL - wxWindow *GetRootWindow() const; - - // get the renderer we use for drawing: either the one of the menu bar or - // the one of the window if we're a popup menu - wxRenderer *GetRenderer() const; - -#if wxUSE_ACCEL - // add/remove accel for the given menu item - void AddAccelFor(wxMenuItem *item); - void RemoveAccelFor(wxMenuItem *item); -#endif // wxUSE_ACCEL - -private: - // common part of all ctors - void Init(); - - // terminate the current radio group, if any - void EndRadioGroup(); - - // the exact menu geometry is defined by a struct derived from this one - // which is opaque and defined by the renderer - wxMenuGeometryInfo *m_geometry; - - // the menu shown on screen or NULL if not currently shown - wxPopupMenuWindow *m_popupMenu; - -#if wxUSE_ACCEL - // the accel table for this menu - wxAcceleratorTable m_accelTable; -#endif // wxUSE_ACCEL - - // the position of the first item in the current radio group or -1 - int m_startRadioGroup; - - // it calls out OnDismiss() - friend class wxPopupMenuWindow; - DECLARE_DYNAMIC_CLASS(wxMenu) -}; - -// ---------------------------------------------------------------------------- -// wxMenuBar -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMenuBar : public wxMenuBarBase -{ -public: - // ctors and dtor - wxMenuBar(long WXUNUSED(style) = 0) { Init(); } - wxMenuBar(size_t n, wxMenu *menus[], const wxString titles[], long style = 0); - virtual ~wxMenuBar(); - - // implement base class virtuals - virtual bool Append( wxMenu *menu, const wxString &title ); - virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title); - virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title); - virtual wxMenu *Remove(size_t pos); - - virtual void EnableTop(size_t pos, bool enable); - virtual bool IsEnabledTop(size_t pos) const; - - virtual void SetLabelTop(size_t pos, const wxString& label); - virtual wxString GetLabelTop(size_t pos) const; - - virtual void Attach(wxFrame *frame); - virtual void Detach(); - - // get the next item for the givan accel letter (used by wxFrame), return - // -1 if none - // - // if unique is not NULL, filled with true if there is only one item with - // this accel, false if two or more - int FindNextItemForAccel(int idxStart, - int keycode, - bool *unique = NULL) const; - - // called by wxFrame to set focus to or open the given menu - void SelectMenu(size_t pos); - void PopupMenu(size_t pos); - -#if wxUSE_ACCEL - // find the item for the given accel and generate an event if found - bool ProcessAccelEvent(const wxKeyEvent& event); -#endif // wxUSE_ACCEL - - // called by wxMenu when it is dismissed - void OnDismissMenu(bool dismissMenuBar = false); - -protected: - // common part of all ctors - void Init(); - - // event handlers - void OnLeftDown(wxMouseEvent& event); - void OnMouseMove(wxMouseEvent& event); - void OnKeyDown(wxKeyEvent& event); - void OnKillFocus(wxFocusEvent& event); - - // process the mouse move event, return true if we did, false to continue - // processing as usual - // - // the coordinates are client coordinates of menubar, convert if necessary - bool ProcessMouseEvent(const wxPoint& pt); - - // called when the menu bar loses mouse capture - it is not hidden unlike - // menus, but it doesn't have modal status any longer - void OnDismiss(); - - // draw the menubar - virtual void DoDraw(wxControlRenderer *renderer); - - // menubar geometry - virtual wxSize DoGetBestClientSize() const; - - // has the menubar been created already? - bool IsCreated() const { return m_frameLast != NULL; } - - // "fast" version of GetMenuCount() - size_t GetCount() const { return m_menuInfos.GetCount(); } - - // get the (total) width of the specified menu - wxCoord GetItemWidth(size_t pos) const; - - // get the rect of the item - wxRect GetItemRect(size_t pos) const; - - // get the menu from the given point or -1 if none - int GetMenuFromPoint(const wxPoint& pos) const; - - // refresh the given item - void RefreshItem(size_t pos); - - // refresh all items after this one (including it) - void RefreshAllItemsAfter(size_t pos); - - // hide the currently shown menu and show this one - void DoSelectMenu(size_t pos); - - // popup the currently selected menu - void PopupCurrentMenu(bool selectFirst = true); - - // hide the currently selected menu - void DismissMenu(); - - // do we show a menu currently? - bool IsShowingMenu() const { return m_menuShown != 0; } - - // we don't want to have focus except while selecting from menu - void GiveAwayFocus(); - - // Release the mouse capture if we have it - bool ReleaseMouseCapture(); - - // the array containing extra menu info we need - wxMenuInfoArray m_menuInfos; - - // the current item (only used when menubar has focus) - int m_current; - -private: - // the last frame to which we were attached, NULL initially - wxFrame *m_frameLast; - - // the currently shown menu or NULL - wxMenu *m_menuShown; - - // should be showing the menu? this is subtly different from m_menuShown != - // NULL as the menu which should be shown may be disabled in which case we - // don't show it - but will do as soon as the focus shifts to another menu - bool m_shouldShowMenu; - - // it calls out ProcessMouseEvent() - friend class wxPopupMenuWindow; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxMenuBar) - -public: - -#if wxABI_VERSION >= 20805 - // Gets the original label at the top-level of the menubar - wxString GetMenuLabel(size_t pos) const; -#endif -}; - -#endif // _WX_UNIV_MENU_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/menuitem.h b/desmume/src/windows/wx/include/wx/univ/menuitem.h deleted file mode 100644 index c9020ec02..000000000 --- a/desmume/src/windows/wx/include/wx/univ/menuitem.h +++ /dev/null @@ -1,135 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/menuitem.h -// Purpose: wxMenuItem class for wxUniversal -// Author: Vadim Zeitlin -// Modified by: -// Created: 05.05.01 -// RCS-ID: $Id: menuitem.h 48053 2007-08-13 17:07:01Z JS $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_MENUITEM_H_ -#define _WX_UNIV_MENUITEM_H_ - -// ---------------------------------------------------------------------------- -// wxMenuItem implements wxMenuItemBase -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMenuItem : public wxMenuItemBase -{ -public: - // ctor & dtor - wxMenuItem(wxMenu *parentMenu = (wxMenu *)NULL, - int id = wxID_SEPARATOR, - const wxString& name = wxEmptyString, - const wxString& help = wxEmptyString, - wxItemKind kind = wxITEM_NORMAL, - wxMenu *subMenu = (wxMenu *)NULL); - virtual ~wxMenuItem(); - - // override base class virtuals to update the item appearance on screen - virtual void SetText(const wxString& text); - virtual void SetCheckable(bool checkable); - - virtual void Enable(bool enable = true); - virtual void Check(bool check = true); - - // we add some extra functions which are also available under MSW from - // wxOwnerDrawn class - they will be moved to wxMenuItemBase later - // hopefully - void SetBitmaps(const wxBitmap& bmpChecked, - const wxBitmap& bmpUnchecked = wxNullBitmap); - void SetBitmap(const wxBitmap& bmp) { SetBitmaps(bmp); } - const wxBitmap& GetBitmap(bool checked = true) const - { return checked ? m_bmpChecked : m_bmpUnchecked; } - - void SetDisabledBitmap( const wxBitmap& bmpDisabled ) - { m_bmpDisabled = bmpDisabled; } - const wxBitmap& GetDisabledBitmap() const - { return m_bmpDisabled; } - - // mark item as belonging to the given radio group - void SetAsRadioGroupStart(); - void SetRadioGroupStart(int start); - void SetRadioGroupEnd(int end); - - // wxUniv-specific methods for implementation only starting from here - - // get the accel index of our label or -1 if none - int GetAccelIndex() const { return m_indexAccel; } - - // get the accel string (displayed to the right of the label) - const wxString& GetAccelString() const { return m_strAccel; } - - // set/get the y coord and the height of this item: note that it must be - // set first and retrieved later, the item doesn't calculate it itself - void SetGeometry(wxCoord y, wxCoord height) - { - m_posY = y; - m_height = height; - } - - wxCoord GetPosition() const - { - wxASSERT_MSG( m_posY != wxDefaultCoord, _T("must call SetHeight first!") ); - - return m_posY; - } - - wxCoord GetHeight() const - { - wxASSERT_MSG( m_height != wxDefaultCoord, _T("must call SetHeight first!") ); - - return m_height; - } - -protected: - // notify the menu about the change in this item - inline void NotifyMenu(); - - // set the accel index and string from text - void UpdateAccelInfo(); - - // the bitmaps (may be invalid, then they're not used) - wxBitmap m_bmpChecked, - m_bmpUnchecked, - m_bmpDisabled; - - // 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; - - // the position of the accelerator in our label, -1 if none - int m_indexAccel; - - // the accel string (i.e. "Ctrl-Q" or "Alt-F1") - wxString m_strAccel; - - // the position and height of the displayed item - wxCoord m_posY, - m_height; - -private: - DECLARE_DYNAMIC_CLASS(wxMenuItem) - -public: - -#if wxABI_VERSION >= 20805 - // return the item label including any mnemonics and accelerators. - // This used to be called GetText. - wxString GetItemLabel() const { return GetText(); } -#endif -}; - -#endif // _WX_UNIV_MENUITEM_H_ - diff --git a/desmume/src/windows/wx/include/wx/univ/notebook.h b/desmume/src/windows/wx/include/wx/univ/notebook.h deleted file mode 100644 index f195c6cec..000000000 --- a/desmume/src/windows/wx/include/wx/univ/notebook.h +++ /dev/null @@ -1,257 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/notebook.h -// Purpose: universal version of wxNotebook -// Author: Vadim Zeitlin -// Modified by: -// Created: 01.02.01 -// RCS-ID: $Id: notebook.h 41738 2006-10-08 17:37:23Z VZ $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_NOTEBOOK_H_ -#define _WX_UNIV_NOTEBOOK_H_ - -#include "wx/arrstr.h" - -class WXDLLEXPORT wxSpinButton; - -// ---------------------------------------------------------------------------- -// the actions supported by this control -// ---------------------------------------------------------------------------- - -// change the page: to the next/previous/given one -#define wxACTION_NOTEBOOK_NEXT _T("nexttab") -#define wxACTION_NOTEBOOK_PREV _T("prevtab") -#define wxACTION_NOTEBOOK_GOTO _T("gototab") - -// ---------------------------------------------------------------------------- -// wxNotebook -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxNotebook : public wxNotebookBase -{ -public: - // ctors and such - // -------------- - - wxNotebook() { Init(); } - - wxNotebook(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxNotebookNameStr) - { - Init(); - - (void)Create(parent, id, pos, size, style, name); - } - - // quasi ctor - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxNotebookNameStr); - - // dtor - virtual ~wxNotebook(); - - // implement wxNotebookBase pure virtuals - // -------------------------------------- - - virtual int SetSelection(size_t nPage) { return DoSetSelection(nPage, SetSelection_SendEvent); } - virtual int GetSelection() const { return (int) m_sel; } - - // changes selected page without sending events - int ChangeSelection(size_t nPage) { return DoSetSelection(nPage); } - - virtual bool SetPageText(size_t nPage, const wxString& strText); - virtual wxString GetPageText(size_t nPage) const; - - virtual int GetPageImage(size_t nPage) const; - virtual bool SetPageImage(size_t nPage, int nImage); - - virtual void SetPageSize(const wxSize& size); - virtual void SetPadding(const wxSize& padding); - virtual void SetTabSize(const wxSize& sz); - - virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const; - - virtual bool DeleteAllPages(); - - virtual bool InsertPage(size_t nPage, - wxNotebookPage *pPage, - const wxString& strText, - bool bSelect = false, - int imageId = -1); - - // style tests - // ----------- - - // return true if all tabs have the same width - bool FixedSizeTabs() const { return HasFlag(wxNB_FIXEDWIDTH); } - - // return wxTOP/wxBOTTOM/wxRIGHT/wxLEFT - wxDirection GetTabOrientation() const; - - // return true if the notebook has tabs at the sidesand not at the top (or - // bottom) as usual - bool IsVertical() const; - - // hit testing - // ----------- - - virtual int HitTest(const wxPoint& pt, long *flags = NULL) const; - - // input handling - // -------------- - - virtual bool PerformAction(const wxControlAction& action, - long numArg = 0l, - const wxString& strArg = wxEmptyString); - - static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return GetStdInputHandler(handlerDef); - } - - // refresh the currently selected tab - void RefreshCurrent(); - -protected: - virtual wxNotebookPage *DoRemovePage(size_t nPage); - - // drawing - virtual void DoDraw(wxControlRenderer *renderer); - void DoDrawTab(wxDC& dc, const wxRect& rect, size_t n); - - // resizing - virtual wxSize DoGetBestClientSize() const; - virtual void DoMoveWindow(int x, int y, int width, int height); - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - - int DoSetSelection(size_t nPage, int flags = 0); - - // common part of all ctors - void Init(); - - // resize the tab to fit its title (and icon if any) - void ResizeTab(int page); - - // recalculate the geometry of the notebook completely - void Relayout(); - - // is the spin button currently shown? - bool HasSpinBtn() const; - - // calculate last (fully) visible tab: updates m_lastVisible - void CalcLastVisibleTab(); - - // show or hide the spin control for tabs scrolling depending on whether it - // is needed or not - void UpdateSpinBtn(); - - // position the spin button - void PositionSpinBtn(); - - // refresh the given tab only - void RefreshTab(int page, bool forceSelected = false); - - // refresh all tabs - void RefreshAllTabs(); - - // get the tab rect (inefficient, don't use this in a loop) - wxRect GetTabRect(int page) const; - - // get the rectangle containing all tabs - wxRect GetAllTabsRect() const; - - // get the part occupied by the tabs - slightly smaller than - // GetAllTabsRect() because the tabs may be indented from it - wxRect GetTabsPart() const; - - // calculate the tab size (without padding) - wxSize CalcTabSize(int page) const; - - // get the (cached) size of a tab - void GetTabSize(int page, wxCoord *w, wxCoord *h) const; - - // get the (cached) width of the tab - wxCoord GetTabWidth(int page) const - { return FixedSizeTabs() ? m_widthMax : m_widths[page]; } - - // return true if the tab has an associated image - bool HasImage(int page) const - { return m_imageList && m_images[page] != -1; } - - // get the part of the notebook reserved for the pages (slightly larger - // than GetPageRect() as we draw a border and leave marginin between) - wxRect GetPagePart() const; - - // get the page rect in our client coords - wxRect GetPageRect() const; - - // get our client size from the page size - wxSize GetSizeForPage(const wxSize& size) const; - - // scroll the tabs so that the first page shown becomes the given one - void ScrollTo(int page); - - // scroll the tabs so that the first page shown becomes the given one - void ScrollLastTo(int page); - - // the pages titles - wxArrayString m_titles; - - // the current selection - size_t m_sel; - - // the spin button to change the pages - wxSpinButton *m_spinbtn; - - // the offset of the first page shown (may be changed with m_spinbtn) - wxCoord m_offset; - - // the first and last currently visible tabs: the name is not completely - // accurate as m_lastVisible is, in fact, the first tab which is *not* - // visible: so the visible tabs are those with indexes such that - // m_firstVisible <= n < m_lastVisible - size_t m_firstVisible, - m_lastVisible; - - // the last fully visible item, usually just m_lastVisible - 1 but may be - // different from it - size_t m_lastFullyVisible; - - // the height of tabs in a normal notebook or the width of tabs in a - // notebook with tabs on a side - wxCoord m_heightTab; - - // the biggest height (or width) of a notebook tab (used only if - // FixedSizeTabs()) or -1 if not calculated yet - wxCoord m_widthMax; - - // the cached widths (or heights) of tabs - wxArrayInt m_widths; - - // the icon indices - wxArrayInt m_images; - - // the accel indexes for labels - wxArrayInt m_accels; - - // the padding - wxSize m_sizePad; - - DECLARE_DYNAMIC_CLASS(wxNotebook) -}; - -#endif // _WX_UNIV_NOTEBOOK_H_ - diff --git a/desmume/src/windows/wx/include/wx/univ/radiobox.h b/desmume/src/windows/wx/include/wx/univ/radiobox.h deleted file mode 100644 index 14ecf969f..000000000 --- a/desmume/src/windows/wx/include/wx/univ/radiobox.h +++ /dev/null @@ -1,151 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/radiobox.h -// Purpose: wxRadioBox declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 11.09.00 -// RCS-ID: $Id: radiobox.h 38319 2006-03-23 22:05:23Z VZ $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_RADIOBOX_H_ -#define _WX_UNIV_RADIOBOX_H_ - -class WXDLLEXPORT wxRadioButton; - -#include "wx/statbox.h" -#include "wx/dynarray.h" - -WX_DEFINE_EXPORTED_ARRAY_PTR(wxRadioButton *, wxArrayRadioButtons); - -// ---------------------------------------------------------------------------- -// wxRadioBox: a box full of radio buttons -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxRadioBox : public wxStaticBox, - public wxRadioBoxBase -{ -public: - // wxRadioBox construction - wxRadioBox() { Init(); } - - wxRadioBox(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString *choices = NULL, - int majorDim = 0, - long style = wxRA_SPECIFY_COLS, - const wxValidator& val = wxDefaultValidator, - const wxString& name = wxRadioBoxNameStr) - { - Init(); - - (void)Create(parent, id, title, pos, size, n, choices, - majorDim, style, val, name); - } - wxRadioBox(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - int majorDim = 0, - long style = wxRA_SPECIFY_COLS, - const wxValidator& val = wxDefaultValidator, - const wxString& name = wxRadioBoxNameStr); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString *choices = NULL, - int majorDim = 0, - long style = wxRA_SPECIFY_COLS, - const wxValidator& val = wxDefaultValidator, - const wxString& name = wxRadioBoxNameStr); - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos, - const wxSize& size, - const wxArrayString& choices, - int majorDim = 0, - long style = wxRA_SPECIFY_COLS, - const wxValidator& val = wxDefaultValidator, - const wxString& name = wxRadioBoxNameStr); - - virtual ~wxRadioBox(); - - // implement wxRadioBox interface - virtual void SetSelection(int n); - virtual int GetSelection() const; - - virtual unsigned int GetCount() const - { return (unsigned int)m_buttons.GetCount(); } - - virtual wxString GetString(unsigned int n) const; - virtual void SetString(unsigned int n, const wxString& label); - - virtual bool Enable(unsigned int n, bool enable = true); - virtual bool Show(unsigned int n, bool show = true); - - virtual bool IsItemEnabled(unsigned int n) const; - virtual bool IsItemShown(unsigned int n) const; - - // we also override the wxControl methods to avoid virtual function hiding - virtual bool Enable(bool enable = true); - virtual bool Show(bool show = true); - virtual wxString GetLabel() const; - virtual void SetLabel(const wxString& label); - - // we inherit a version always returning false from wxStaticBox, override - // it to behave normally - virtual bool AcceptsFocus() const { return wxControl::AcceptsFocus(); } - -#if wxUSE_TOOLTIPS - virtual void DoSetToolTip( wxToolTip *tip ); -#endif // wxUSE_TOOLTIPS - - // wxUniversal-only methods - - // another Append() version - void Append(int n, const wxString *choices); - - // implementation only: called by wxRadioHookHandler - void OnRadioButton(wxEvent& event); - bool OnKeyDown(wxKeyEvent& event); - -protected: - // override the base class methods dealing with window positioning/sizing - // as we must move/size the buttons as well - virtual void DoMoveWindow(int x, int y, int width, int height); - virtual wxSize DoGetBestClientSize() const; - - // generate a radiobutton click event for the current item - void SendRadioEvent(); - - // common part of all ctors - void Init(); - - // calculate the max size of all buttons - wxSize GetMaxButtonSize() const; - - // the currently selected radio button or -1 - int m_selection; - - // all radio buttons - wxArrayRadioButtons m_buttons; - - // the event handler which is used to translate radiobutton events into - // radiobox one - wxEvtHandler *m_evtRadioHook; - -private: - DECLARE_DYNAMIC_CLASS(wxRadioBox) -}; - -#endif // _WX_UNIV_RADIOBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/radiobut.h b/desmume/src/windows/wx/include/wx/univ/radiobut.h deleted file mode 100644 index bcf4005c9..000000000 --- a/desmume/src/windows/wx/include/wx/univ/radiobut.h +++ /dev/null @@ -1,76 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/radiobut.h -// Purpose: wxRadioButton declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 10.09.00 -// RCS-ID: $Id: radiobut.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_RADIOBUT_H_ -#define _WX_UNIV_RADIOBUT_H_ - -#include "wx/checkbox.h" - -// ---------------------------------------------------------------------------- -// wxRadioButton -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxRadioButton : public wxCheckBox -{ -public: - // constructors - wxRadioButton() { Init(); } - - wxRadioButton(wxWindow *parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxRadioButtonNameStr) - { - Init(); - - Create(parent, id, label, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxRadioButtonNameStr); - - // override some base class methods - virtual void ChangeValue(bool value); - -protected: - // implement our own drawing - virtual void DoDraw(wxControlRenderer *renderer); - - // we use the radio button bitmaps for size calculation - virtual wxSize GetBitmapSize() const; - - // the radio button can only be cleared using this method, not - // ChangeValue() above - and it is protected as it can only be called by - // another radiobutton - void ClearValue(); - - // called when the radio button becomes checked: we clear all the buttons - // in the same group with us here - virtual void OnCheck(); - - // send event about radio button selection - virtual void SendEvent(); - -private: - DECLARE_DYNAMIC_CLASS(wxRadioButton) -}; - -#endif // _WX_UNIV_RADIOBUT_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/renderer.h b/desmume/src/windows/wx/include/wx/univ/renderer.h deleted file mode 100644 index ef273309c..000000000 --- a/desmume/src/windows/wx/include/wx/univ/renderer.h +++ /dev/null @@ -1,932 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/renderer.h -// Purpose: wxRenderer class declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 06.08.00 -// RCS-ID: $Id: renderer.h 43726 2006-11-30 23:44:55Z RD $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_RENDERER_H_ -#define _WX_UNIV_RENDERER_H_ - -/* - wxRenderer class is used to draw all wxWidgets controls. This is an ABC and - the look of the application is determined by the concrete derivation of - wxRenderer used in the program. - - It also contains a few static methods which may be used by the concrete - renderers and provide the functionality which is often similar or identical - in all renderers (using inheritance here would be more restrictive as the - given concrete renderer may need an arbitrary subset of the base class - methods). - - Finally note that wxRenderer supersedes wxRendererNative in wxUniv build and - includes the latters functionality (which it may delegate to the generic - implementation of the latter or reimplement itself). - */ - -#include "wx/renderer.h" - -class WXDLLEXPORT wxWindow; -class WXDLLEXPORT wxDC; -class WXDLLEXPORT wxCheckListBox; - -#if wxUSE_LISTBOX - class WXDLLEXPORT wxListBox; -#endif // wxUSE_LISTBOX - -#if wxUSE_MENUS - class WXDLLEXPORT wxMenu; - class WXDLLEXPORT wxMenuGeometryInfo; -#endif // wxUSE_MENUS - -class WXDLLEXPORT wxScrollBar; - -#if wxUSE_TEXTCTRL - class WXDLLEXPORT wxTextCtrl; -#endif - -#if wxUSE_GAUGE - class WXDLLEXPORT wxGauge; -#endif // wxUSE_GAUGE - -#include "wx/string.h" -#include "wx/gdicmn.h" -#include "wx/icon.h" - -// helper class used by wxMenu-related functions -class WXDLLEXPORT wxMenuGeometryInfo -{ -public: - // get the total size of the menu - virtual wxSize GetSize() const = 0; - - virtual ~wxMenuGeometryInfo(); -}; - -// ---------------------------------------------------------------------------- -// wxRenderer: abstract renderers interface -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxRenderer : public wxDelegateRendererNative -{ -public: - // drawing functions - // ----------------- - - // draw the controls background - virtual void DrawBackground(wxDC& dc, - const wxColour& col, - const wxRect& rect, - int flags, - wxWindow *window = NULL) = 0; - - // draw the button surface - virtual void DrawButtonSurface(wxDC& dc, - const wxColour& col, - const wxRect& rect, - int flags) = 0; - - - // draw the focus rectangle around the label contained in the given rect - // - // only wxCONTROL_SELECTED makes sense in flags here - virtual void DrawFocusRect(wxDC& dc, const wxRect& rect, int flags = 0) = 0; - - // draw the label inside the given rectangle with the specified alignment - // and optionally emphasize the character with the given index - virtual void DrawLabel(wxDC& dc, - const wxString& label, - const wxRect& rect, - int flags = 0, - int alignment = wxALIGN_LEFT | wxALIGN_TOP, - int indexAccel = -1, - wxRect *rectBounds = NULL) = 0; - - // same but also draw a bitmap if it is valid - virtual void DrawButtonLabel(wxDC& dc, - const wxString& label, - const wxBitmap& image, - const wxRect& rect, - int flags = 0, - int alignment = wxALIGN_LEFT | wxALIGN_TOP, - int indexAccel = -1, - wxRect *rectBounds = NULL) = 0; - - - // draw the border and optionally return the rectangle containing the - // region inside the border - virtual void DrawBorder(wxDC& dc, - wxBorder border, - const wxRect& rect, - int flags = 0, - wxRect *rectIn = (wxRect *)NULL) = 0; - - // draw text control border (I hate to have a separate method for this but - // it is needed to accommodate GTK+) - virtual void DrawTextBorder(wxDC& dc, - wxBorder border, - const wxRect& rect, - int flags = 0, - wxRect *rectIn = (wxRect *)NULL) = 0; - - // draw push button border and return the rectangle left for the label - virtual void DrawButtonBorder(wxDC& dc, - const wxRect& rect, - int flags = 0, - wxRect *rectIn = (wxRect *)NULL) = 0; - - // draw a horizontal line - virtual void DrawHorizontalLine(wxDC& dc, - wxCoord y, wxCoord x1, wxCoord x2) = 0; - - // draw a vertical line - virtual void DrawVerticalLine(wxDC& dc, - wxCoord x, wxCoord y1, wxCoord y2) = 0; - - // draw a frame with the label (horizontal alignment can be specified) - virtual void DrawFrame(wxDC& dc, - const wxString& label, - const wxRect& rect, - int flags = 0, - int alignment = wxALIGN_LEFT, - int indexAccel = -1) = 0; - - // draw an arrow in the given direction - virtual void DrawArrow(wxDC& dc, - wxDirection dir, - const wxRect& rect, - int flags = 0) = 0; - - // draw a scrollbar arrow (may be the same as arrow but may be not) - virtual void DrawScrollbarArrow(wxDC& dc, - wxDirection dir, - const wxRect& rect, - int flags = 0) = 0; - - // draw the scrollbar thumb - virtual void DrawScrollbarThumb(wxDC& dc, - wxOrientation orient, - const wxRect& rect, - int flags = 0) = 0; - - // draw a (part of) scrollbar shaft - virtual void DrawScrollbarShaft(wxDC& dc, - wxOrientation orient, - const wxRect& rect, - int flags = 0) = 0; - - // draw the rectangle in the corner between two scrollbars - virtual void DrawScrollCorner(wxDC& dc, - const wxRect& rect) = 0; - - // draw an item of a wxListBox - virtual void DrawItem(wxDC& dc, - const wxString& label, - const wxRect& rect, - int flags = 0) = 0; - - // draw an item of a wxCheckListBox - virtual void DrawCheckItem(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags = 0) = 0; - - // draw a checkbutton (bitmap may be invalid to use default one) - virtual void DrawCheckButton(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags = 0, - wxAlignment align = wxALIGN_LEFT, - int indexAccel = -1) = 0; - - // draw a radio button - virtual void DrawRadioButton(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags = 0, - wxAlignment align = wxALIGN_LEFT, - int indexAccel = -1) = 0; - -#if wxUSE_TOOLBAR - // draw a toolbar button (label may be empty, bitmap may be invalid, if - // both conditions are true this function draws a separator) - virtual void DrawToolBarButton(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags = 0, - long style = 0, - int tbarStyle = 0) = 0; -#endif // wxUSE_TOOLBAR - -#if wxUSE_TEXTCTRL - // draw a (part of) line in the text control - virtual void DrawTextLine(wxDC& dc, - const wxString& text, - const wxRect& rect, - int selStart = -1, - int selEnd = -1, - int flags = 0) = 0; - - // draw a line wrap indicator - virtual void DrawLineWrapMark(wxDC& dc, const wxRect& rect) = 0; -#endif // wxUSE_TEXTCTRL - -#if wxUSE_NOTEBOOK - // draw a notebook tab - virtual void DrawTab(wxDC& dc, - const wxRect& rect, - wxDirection dir, - const wxString& label, - const wxBitmap& bitmap = wxNullBitmap, - int flags = 0, - int indexAccel = -1) = 0; -#endif // wxUSE_NOTEBOOK - -#if wxUSE_SLIDER - - // draw the slider shaft - virtual void DrawSliderShaft(wxDC& dc, - const wxRect& rect, - int lenThumb, - wxOrientation orient, - int flags = 0, - long style = 0, - wxRect *rectShaft = NULL) = 0; - - // draw the slider thumb - virtual void DrawSliderThumb(wxDC& dc, - const wxRect& rect, - wxOrientation orient, - int flags = 0, - long style = 0) = 0; - - // draw the slider ticks - virtual void DrawSliderTicks(wxDC& dc, - const wxRect& rect, - int lenThumb, - wxOrientation orient, - int start, - int end, - int step = 1, - int flags = 0, - long style = 0) = 0; -#endif // wxUSE_SLIDER - -#if wxUSE_MENUS - // draw a menu bar item - virtual void DrawMenuBarItem(wxDC& dc, - const wxRect& rect, - const wxString& label, - int flags = 0, - int indexAccel = -1) = 0; - - // draw a menu item (also used for submenus if flags has ISSUBMENU flag) - // - // the geometryInfo is calculated by GetMenuGeometry() function from below - virtual void DrawMenuItem(wxDC& dc, - wxCoord y, - const wxMenuGeometryInfo& geometryInfo, - const wxString& label, - const wxString& accel, - const wxBitmap& bitmap = wxNullBitmap, - int flags = 0, - int indexAccel = -1) = 0; - - // draw a menu bar separator - virtual void DrawMenuSeparator(wxDC& dc, - wxCoord y, - const wxMenuGeometryInfo& geomInfo) = 0; -#endif // wxUSE_MENUS - -#if wxUSE_STATUSBAR - // draw a status bar field: wxCONTROL_ISDEFAULT bit in the flags is - // interpreted specially and means "draw the status bar grip" here - virtual void DrawStatusField(wxDC& dc, - const wxRect& rect, - const wxString& label, - int flags = 0, int style = 0) = 0; -#endif // wxUSE_STATUSBAR - - // draw complete frame/dialog titlebar - virtual void DrawFrameTitleBar(wxDC& dc, - const wxRect& rect, - const wxString& title, - const wxIcon& icon, - int flags, - int specialButton = 0, - int specialButtonFlags = 0) = 0; - - // draw frame borders - virtual void DrawFrameBorder(wxDC& dc, - const wxRect& rect, - int flags) = 0; - - // draw frame titlebar background - virtual void DrawFrameBackground(wxDC& dc, - const wxRect& rect, - int flags) = 0; - - // draw frame title - virtual void DrawFrameTitle(wxDC& dc, - const wxRect& rect, - const wxString& title, - int flags) = 0; - - // draw frame icon - virtual void DrawFrameIcon(wxDC& dc, - const wxRect& rect, - const wxIcon& icon, - int flags) = 0; - - // draw frame buttons - virtual void DrawFrameButton(wxDC& dc, - wxCoord x, wxCoord y, - int button, - int flags = 0) = 0; - - // misc functions - // -------------- - -#if wxUSE_COMBOBOX - // return the bitmaps to use for combobox button - virtual void GetComboBitmaps(wxBitmap *bmpNormal, - wxBitmap *bmpFocus, - wxBitmap *bmpPressed, - wxBitmap *bmpDisabled) = 0; -#endif // wxUSE_COMBOBOX - - // geometry functions - // ------------------ - - // get the dimensions of the border: rect.x/y contain the width/height of - // the left/top side, width/heigh - of the right/bottom one - virtual wxRect GetBorderDimensions(wxBorder border) const = 0; - - // the scrollbars may be drawn either inside the window border or outside - // it - this function is used to decide how to draw them - virtual bool AreScrollbarsInsideBorder() const = 0; - - // adjust the size of the control of the given class: for most controls, - // this just takes into account the border, but for some (buttons, for - // example) it is more complicated - the result being, in any case, that - // the control looks "nice" if it uses the adjusted rectangle - virtual void AdjustSize(wxSize *size, const wxWindow *window) = 0; - -#if wxUSE_SCROLLBAR - // get the size of a scrollbar arrow - virtual wxSize GetScrollbarArrowSize() const = 0; -#endif // wxUSE_SCROLLBAR - - // get the height of a listbox item from the base font height - virtual wxCoord GetListboxItemHeight(wxCoord fontHeight) = 0; - - // get the size of a checkbox/radio button bitmap - virtual wxSize GetCheckBitmapSize() const = 0; - virtual wxSize GetRadioBitmapSize() const = 0; - virtual wxCoord GetCheckItemMargin() const = 0; - -#if wxUSE_TOOLBAR - // get the standard size of a toolbar button and also return the size of - // a toolbar separator in the provided pointer - virtual wxSize GetToolBarButtonSize(wxCoord *separator) const = 0; - - // get the margins between/around the toolbar buttons - virtual wxSize GetToolBarMargin() const = 0; -#endif // wxUSE_TOOLBAR - -#if wxUSE_TEXTCTRL - // convert between text rectangle and client rectangle for text controls: - // the former is typicall smaller to leave margins around text - virtual wxRect GetTextTotalArea(const wxTextCtrl *text, - const wxRect& rectText) const = 0; - - // extra space is for line indicators - virtual wxRect GetTextClientArea(const wxTextCtrl *text, - const wxRect& rectTotal, - wxCoord *extraSpaceBeyond) const = 0; -#endif // wxUSE_TEXTCTRL - -#if wxUSE_NOTEBOOK - // get the overhang of a selected tab - virtual wxSize GetTabIndent() const = 0; - - // get the padding around the text in a tab - virtual wxSize GetTabPadding() const = 0; -#endif // wxUSE_NOTEBOOK - -#if wxUSE_SLIDER - // get the default size of the slider in lesser dimension (i.e. height of a - // horizontal slider or width of a vertical one) - virtual wxCoord GetSliderDim() const = 0; - - // get the length of the slider ticks displayed along side slider - virtual wxCoord GetSliderTickLen() const = 0; - - // get the slider shaft rect from the total slider rect - virtual wxRect GetSliderShaftRect(const wxRect& rect, - int lenThumb, - wxOrientation orient, - long style = 0) const = 0; - - // get the size of the slider thumb for the given total slider rect - virtual wxSize GetSliderThumbSize(const wxRect& rect, - int lenThumb, - wxOrientation orient) const = 0; -#endif // wxUSE_SLIDER - - // get the size of one progress bar step (in horz and vertical directions) - virtual wxSize GetProgressBarStep() const = 0; - -#if wxUSE_MENUS - // get the size of rectangle to use in the menubar for the given text rect - virtual wxSize GetMenuBarItemSize(const wxSize& sizeText) const = 0; - - // get the struct storing all layout info needed to draw all menu items - // (this can't be calculated for each item separately as they should be - // aligned) - // - // the returned pointer must be deleted by the caller - virtual wxMenuGeometryInfo *GetMenuGeometry(wxWindow *win, - const wxMenu& menu) const = 0; -#endif // wxUSE_MENUS - -#if wxUSE_STATUSBAR - // get the borders around the status bar fields (x and y fields of the - // return value) - virtual wxSize GetStatusBarBorders() const = 0; - - // get the border between the status bar fields - virtual wxCoord GetStatusBarBorderBetweenFields() const = 0; - - // get the mergin between a field and its border - virtual wxSize GetStatusBarFieldMargins() const = 0; -#endif // wxUSE_STATUSBAR - - // get client area rectangle of top level window (i.e. subtract - // decorations from given rectangle) - virtual wxRect GetFrameClientArea(const wxRect& rect, int flags) const = 0; - - // get size of whole top level window, given size of its client area size - virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const = 0; - - // get the minimal size of top level window - virtual wxSize GetFrameMinSize(int flags) const = 0; - - // get titlebar icon size - virtual wxSize GetFrameIconSize() const = 0; - - // returns one of wxHT_TOPLEVEL_XXX constants - virtual int HitTestFrame(const wxRect& rect, - const wxPoint& pt, - int flags = 0) const = 0; - - // virtual dtor for any base class - virtual ~wxRenderer(); -}; - -// ---------------------------------------------------------------------------- -// wxDelegateRenderer: it is impossible to inherit from any of standard -// renderers as their declarations are in private code, but you can use this -// class to override only some of the Draw() functions - all the other ones -// will be left to the original renderer -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxDelegateRenderer : public wxRenderer -{ -public: - wxDelegateRenderer(wxRenderer *renderer) : m_renderer(renderer) { } - - virtual void DrawBackground(wxDC& dc, - const wxColour& col, - const wxRect& rect, - int flags, - wxWindow *window = NULL ) - { m_renderer->DrawBackground(dc, col, rect, flags, window ); } - virtual void DrawButtonSurface(wxDC& dc, - const wxColour& col, - const wxRect& rect, - int flags) - { m_renderer->DrawButtonSurface(dc, col, rect, flags); } - virtual void DrawFocusRect(wxDC& dc, const wxRect& rect, int flags = 0) - { m_renderer->DrawFocusRect(dc, rect, flags); } - virtual void DrawLabel(wxDC& dc, - const wxString& label, - const wxRect& rect, - int flags = 0, - int align = wxALIGN_LEFT | wxALIGN_TOP, - int indexAccel = -1, - wxRect *rectBounds = NULL) - { m_renderer->DrawLabel(dc, label, rect, - flags, align, indexAccel, rectBounds); } - virtual void DrawButtonLabel(wxDC& dc, - const wxString& label, - const wxBitmap& image, - const wxRect& rect, - int flags = 0, - int align = wxALIGN_LEFT | wxALIGN_TOP, - int indexAccel = -1, - wxRect *rectBounds = NULL) - { m_renderer->DrawButtonLabel(dc, label, image, rect, - flags, align, indexAccel, rectBounds); } - virtual void DrawBorder(wxDC& dc, - wxBorder border, - const wxRect& rect, - int flags = 0, - wxRect *rectIn = (wxRect *)NULL) - { m_renderer->DrawBorder(dc, border, rect, flags, rectIn); } - virtual void DrawTextBorder(wxDC& dc, - wxBorder border, - const wxRect& rect, - int flags = 0, - wxRect *rectIn = (wxRect *)NULL) - { m_renderer->DrawTextBorder(dc, border, rect, flags, rectIn); } - virtual void DrawButtonBorder(wxDC& dc, - const wxRect& rect, - int flags = 0, - wxRect *rectIn = (wxRect *)NULL) - { m_renderer->DrawButtonBorder(dc, rect, flags, rectIn); } - virtual void DrawFrame(wxDC& dc, - const wxString& label, - const wxRect& rect, - int flags = 0, - int align = wxALIGN_LEFT, - int indexAccel = -1) - { m_renderer->DrawFrame(dc, label, rect, flags, align, indexAccel); } - virtual void DrawHorizontalLine(wxDC& dc, - wxCoord y, wxCoord x1, wxCoord x2) - { m_renderer->DrawHorizontalLine(dc, y, x1, x2); } - virtual void DrawVerticalLine(wxDC& dc, - wxCoord x, wxCoord y1, wxCoord y2) - { m_renderer->DrawVerticalLine(dc, x, y1, y2); } - virtual void DrawArrow(wxDC& dc, - wxDirection dir, - const wxRect& rect, - int flags = 0) - { m_renderer->DrawArrow(dc, dir, rect, flags); } - virtual void DrawScrollbarArrow(wxDC& dc, - wxDirection dir, - const wxRect& rect, - int flags = 0) - { m_renderer->DrawScrollbarArrow(dc, dir, rect, flags); } - virtual void DrawScrollbarThumb(wxDC& dc, - wxOrientation orient, - const wxRect& rect, - int flags = 0) - { m_renderer->DrawScrollbarThumb(dc, orient, rect, flags); } - virtual void DrawScrollbarShaft(wxDC& dc, - wxOrientation orient, - const wxRect& rect, - int flags = 0) - { m_renderer->DrawScrollbarShaft(dc, orient, rect, flags); } - virtual void DrawScrollCorner(wxDC& dc, - const wxRect& rect) - { m_renderer->DrawScrollCorner(dc, rect); } - virtual void DrawItem(wxDC& dc, - const wxString& label, - const wxRect& rect, - int flags = 0) - { m_renderer->DrawItem(dc, label, rect, flags); } - virtual void DrawCheckItem(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags = 0) - { m_renderer->DrawCheckItem(dc, label, bitmap, rect, flags); } - virtual void DrawCheckButton(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags = 0, - wxAlignment align = wxALIGN_LEFT, - int indexAccel = -1) - { m_renderer->DrawCheckButton(dc, label, bitmap, rect, - flags, align, indexAccel); } - virtual void DrawRadioButton(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags = 0, - wxAlignment align = wxALIGN_LEFT, - int indexAccel = -1) - { m_renderer->DrawRadioButton(dc, label, bitmap, rect, - flags, align, indexAccel); } -#if wxUSE_TOOLBAR - virtual void DrawToolBarButton(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags = 0, - long style = 0, - int tbarStyle = 0) - { m_renderer->DrawToolBarButton(dc, label, bitmap, rect, flags, style, tbarStyle); } -#endif // wxUSE_TOOLBAR - -#if wxUSE_TEXTCTRL - virtual void DrawTextLine(wxDC& dc, - const wxString& text, - const wxRect& rect, - int selStart = -1, - int selEnd = -1, - int flags = 0) - { m_renderer->DrawTextLine(dc, text, rect, selStart, selEnd, flags); } - virtual void DrawLineWrapMark(wxDC& dc, const wxRect& rect) - { m_renderer->DrawLineWrapMark(dc, rect); } -#endif // wxUSE_TEXTCTRL - -#if wxUSE_NOTEBOOK - virtual void DrawTab(wxDC& dc, - const wxRect& rect, - wxDirection dir, - const wxString& label, - const wxBitmap& bitmap = wxNullBitmap, - int flags = 0, - int accel = -1) - { m_renderer->DrawTab(dc, rect, dir, label, bitmap, flags, accel); } -#endif // wxUSE_NOTEBOOK - -#if wxUSE_SLIDER - - virtual void DrawSliderShaft(wxDC& dc, - const wxRect& rect, - int lenThumb, - wxOrientation orient, - int flags = 0, - long style = 0, - wxRect *rectShaft = NULL) - { m_renderer->DrawSliderShaft(dc, rect, lenThumb, orient, flags, style, rectShaft); } - virtual void DrawSliderThumb(wxDC& dc, - const wxRect& rect, - wxOrientation orient, - int flags = 0, - long style = 0) - { m_renderer->DrawSliderThumb(dc, rect, orient, flags, style); } - virtual void DrawSliderTicks(wxDC& dc, - const wxRect& rect, - int lenThumb, - wxOrientation orient, - int start, - int end, - int WXUNUSED(step) = 1, - int flags = 0, - long style = 0) - { m_renderer->DrawSliderTicks(dc, rect, lenThumb, orient, - start, end, start, flags, style); } -#endif // wxUSE_SLIDER - -#if wxUSE_MENUS - virtual void DrawMenuBarItem(wxDC& dc, - const wxRect& rect, - const wxString& label, - int flags = 0, - int indexAccel = -1) - { m_renderer->DrawMenuBarItem(dc, rect, label, flags, indexAccel); } - virtual void DrawMenuItem(wxDC& dc, - wxCoord y, - const wxMenuGeometryInfo& gi, - const wxString& label, - const wxString& accel, - const wxBitmap& bitmap = wxNullBitmap, - int flags = 0, - int indexAccel = -1) - { m_renderer->DrawMenuItem(dc, y, gi, label, accel, - bitmap, flags, indexAccel); } - virtual void DrawMenuSeparator(wxDC& dc, - wxCoord y, - const wxMenuGeometryInfo& geomInfo) - { m_renderer->DrawMenuSeparator(dc, y, geomInfo); } -#endif // wxUSE_MENUS - -#if wxUSE_STATUSBAR - virtual void DrawStatusField(wxDC& dc, - const wxRect& rect, - const wxString& label, - int flags = 0, int style = 0) - { m_renderer->DrawStatusField(dc, rect, label, flags, style); } -#endif // wxUSE_STATUSBAR - - virtual void DrawFrameTitleBar(wxDC& dc, - const wxRect& rect, - const wxString& title, - const wxIcon& icon, - int flags, - int specialButton = 0, - int specialButtonFlag = 0) - { m_renderer->DrawFrameTitleBar(dc, rect, title, icon, flags, - specialButton, specialButtonFlag); } - virtual void DrawFrameBorder(wxDC& dc, - const wxRect& rect, - int flags) - { m_renderer->DrawFrameBorder(dc, rect, flags); } - virtual void DrawFrameBackground(wxDC& dc, - const wxRect& rect, - int flags) - { m_renderer->DrawFrameBackground(dc, rect, flags); } - virtual void DrawFrameTitle(wxDC& dc, - const wxRect& rect, - const wxString& title, - int flags) - { m_renderer->DrawFrameTitle(dc, rect, title, flags); } - virtual void DrawFrameIcon(wxDC& dc, - const wxRect& rect, - const wxIcon& icon, - int flags) - { m_renderer->DrawFrameIcon(dc, rect, icon, flags); } - virtual void DrawFrameButton(wxDC& dc, - wxCoord x, wxCoord y, - int button, - int flags = 0) - { m_renderer->DrawFrameButton(dc, x, y, button, flags); } - -#if wxUSE_COMBOBOX - virtual void GetComboBitmaps(wxBitmap *bmpNormal, - wxBitmap *bmpFocus, - wxBitmap *bmpPressed, - wxBitmap *bmpDisabled) - { m_renderer->GetComboBitmaps(bmpNormal, bmpFocus, - bmpPressed, bmpDisabled); } -#endif // wxUSE_COMBOBOX - - virtual void AdjustSize(wxSize *size, const wxWindow *window) - { m_renderer->AdjustSize(size, window); } - virtual wxRect GetBorderDimensions(wxBorder border) const - { return m_renderer->GetBorderDimensions(border); } - virtual bool AreScrollbarsInsideBorder() const - { return m_renderer->AreScrollbarsInsideBorder(); } - -#if wxUSE_SCROLLBAR - virtual wxSize GetScrollbarArrowSize() const - { return m_renderer->GetScrollbarArrowSize(); } -#endif // wxUSE_SCROLLBAR - - virtual wxCoord GetListboxItemHeight(wxCoord fontHeight) - { return m_renderer->GetListboxItemHeight(fontHeight); } - virtual wxSize GetCheckBitmapSize() const - { return m_renderer->GetCheckBitmapSize(); } - virtual wxSize GetRadioBitmapSize() const - { return m_renderer->GetRadioBitmapSize(); } - virtual wxCoord GetCheckItemMargin() const - { return m_renderer->GetCheckItemMargin(); } - -#if wxUSE_TOOLBAR - virtual wxSize GetToolBarButtonSize(wxCoord *separator) const - { return m_renderer->GetToolBarButtonSize(separator); } - virtual wxSize GetToolBarMargin() const - { return m_renderer->GetToolBarMargin(); } -#endif // wxUSE_TOOLBAR - -#if wxUSE_TEXTCTRL - virtual wxRect GetTextTotalArea(const wxTextCtrl *text, - const wxRect& rect) const - { return m_renderer->GetTextTotalArea(text, rect); } - virtual wxRect GetTextClientArea(const wxTextCtrl *text, - const wxRect& rect, - wxCoord *extraSpaceBeyond) const - { return m_renderer->GetTextClientArea(text, rect, extraSpaceBeyond); } -#endif // wxUSE_TEXTCTRL - -#if wxUSE_NOTEBOOK - virtual wxSize GetTabIndent() const { return m_renderer->GetTabIndent(); } - virtual wxSize GetTabPadding() const { return m_renderer->GetTabPadding(); } -#endif // wxUSE_NOTEBOOK - -#if wxUSE_SLIDER - virtual wxCoord GetSliderDim() const - { return m_renderer->GetSliderDim(); } - virtual wxCoord GetSliderTickLen() const - { return m_renderer->GetSliderTickLen(); } - - virtual wxRect GetSliderShaftRect(const wxRect& rect, - int lenThumb, - wxOrientation orient, - long style = 0) const - { return m_renderer->GetSliderShaftRect(rect, lenThumb, orient, style); } - virtual wxSize GetSliderThumbSize(const wxRect& rect, - int lenThumb, - wxOrientation orient) const - { return m_renderer->GetSliderThumbSize(rect, lenThumb, orient); } -#endif // wxUSE_SLIDER - - virtual wxSize GetProgressBarStep() const - { return m_renderer->GetProgressBarStep(); } - -#if wxUSE_MENUS - virtual wxSize GetMenuBarItemSize(const wxSize& sizeText) const - { return m_renderer->GetMenuBarItemSize(sizeText); } - virtual wxMenuGeometryInfo *GetMenuGeometry(wxWindow *win, - const wxMenu& menu) const - { return m_renderer->GetMenuGeometry(win, menu); } -#endif // wxUSE_MENUS - -#if wxUSE_STATUSBAR - virtual wxSize GetStatusBarBorders() const - { return m_renderer->GetStatusBarBorders(); } - virtual wxCoord GetStatusBarBorderBetweenFields() const - { return m_renderer->GetStatusBarBorderBetweenFields(); } - virtual wxSize GetStatusBarFieldMargins() const - { return m_renderer->GetStatusBarFieldMargins(); } -#endif // wxUSE_STATUSBAR - - virtual wxRect GetFrameClientArea(const wxRect& rect, int flags) const - { return m_renderer->GetFrameClientArea(rect, flags); } - virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const - { return m_renderer->GetFrameTotalSize(clientSize, flags); } - virtual wxSize GetFrameMinSize(int flags) const - { return m_renderer->GetFrameMinSize(flags); } - virtual wxSize GetFrameIconSize() const - { return m_renderer->GetFrameIconSize(); } - virtual int HitTestFrame(const wxRect& rect, - const wxPoint& pt, - int flags) const - { return m_renderer->HitTestFrame(rect, pt, flags); } - - virtual int DrawHeaderButton(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0, - wxHeaderSortIconType sortIcon = wxHDR_SORT_ICON_NONE, - wxHeaderButtonParams* params = NULL) - { return m_renderer->DrawHeaderButton(win, dc, rect, flags, sortIcon, params); } - virtual void DrawTreeItemButton(wxWindow *win, - wxDC& dc, - const wxRect& rect, - int flags = 0) - { m_renderer->DrawTreeItemButton(win, dc, rect, flags); } - -protected: - wxRenderer *m_renderer; -}; - -// ---------------------------------------------------------------------------- -// wxControlRenderer: wraps the wxRenderer functions in a form easy to use from -// OnPaint() -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxControlRenderer -{ -public: - // create a renderer for this dc with this "fundamental" renderer - wxControlRenderer(wxWindow *control, wxDC& dc, wxRenderer *renderer); - - // operations - void DrawLabel(const wxBitmap& bitmap = wxNullBitmap, - wxCoord marginX = 0, wxCoord marginY = 0); -#if wxUSE_LISTBOX - void DrawItems(const wxListBox *listbox, - size_t itemFirst, size_t itemLast); -#endif // wxUSE_LISTBOX -#if wxUSE_CHECKLISTBOX - void DrawCheckItems(const wxCheckListBox *listbox, - size_t itemFirst, size_t itemLast); -#endif // wxUSE_CHECKLISTBOX - void DrawButtonBorder(); - // the line must be either horizontal or vertical - void DrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); - void DrawFrame(); - void DrawBitmap(const wxBitmap& bitmap); - void DrawBackgroundBitmap(); - void DrawScrollbar(const wxScrollBar *scrollbar, int thumbPosOld); -#if wxUSE_GAUGE - void DrawProgressBar(const wxGauge *gauge); -#endif // wxUSE_GAUGE - - // accessors - wxWindow *GetWindow() const { return m_window; } - wxRenderer *GetRenderer() const { return m_renderer; } - - wxDC& GetDC() { return m_dc; } - - const wxRect& GetRect() const { return m_rect; } - wxRect& GetRect() { return m_rect; } - - // static helpers - static void DrawBitmap(wxDC &dc, - const wxBitmap& bitmap, - const wxRect& rect, - int alignment = wxALIGN_CENTRE | - wxALIGN_CENTRE_VERTICAL, - wxStretch stretch = wxSTRETCH_NOT); - -private: - -#if wxUSE_LISTBOX - // common part of DrawItems() and DrawCheckItems() - void DoDrawItems(const wxListBox *listbox, - size_t itemFirst, size_t itemLast, - bool isCheckLbox = false); -#endif // wxUSE_LISTBOX - - wxWindow *m_window; - wxRenderer *m_renderer; - wxDC& m_dc; - wxRect m_rect; -}; - -#endif // _WX_UNIV_RENDERER_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/scrarrow.h b/desmume/src/windows/wx/include/wx/univ/scrarrow.h deleted file mode 100644 index affeeff23..000000000 --- a/desmume/src/windows/wx/include/wx/univ/scrarrow.h +++ /dev/null @@ -1,112 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/scrarrow.h -// Purpose: wxScrollArrows class -// Author: Vadim Zeitlin -// Modified by: -// Created: 22.01.01 -// RCS-ID: $Id: scrarrow.h 42715 2006-10-30 12:24:13Z VS $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_SCRARROW_H_ -#define _WX_UNIV_SCRARROW_H_ - -// ---------------------------------------------------------------------------- -// wxScrollArrows is not a control but just a class containing the common -// functionality of scroll arrows, whether part of scrollbars, spin ctrls or -// anything else. -// -// To customize its behaviour, wxScrollArrows doesn't use any virtual methods -// but instead a callback pointer to a wxControlWithArrows object which is used -// for all control-dependent stuff. Thus, to use wxScrollArrows, you just need -// to derive from the wxControlWithArrows interface and implement its methods. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxControlWithArrows; -class WXDLLEXPORT wxDC; -class WXDLLEXPORT wxMouseEvent; -class WXDLLEXPORT wxRect; -class WXDLLEXPORT wxRenderer; - -// ---------------------------------------------------------------------------- -// wxScrollArrows: an abstraction of scrollbar arrow -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxScrollArrows -{ -public: - enum Arrow - { - Arrow_None = -1, - Arrow_First, // left or top - Arrow_Second, // right or bottom - Arrow_Max - }; - - // ctor requires a back pointer to wxControlWithArrows - wxScrollArrows(wxControlWithArrows *control); - - // draws the arrow on the given DC in the given rectangle, uses - // wxControlWithArrows::GetArrowState() to get its current state - void DrawArrow(Arrow arrow, wxDC& dc, const wxRect& rect, - bool scrollbarLike = false) const; - - // process a mouse move, enter or leave event, possibly calling - // wxControlWithArrows::SetArrowState() if - // wxControlWithArrows::HitTestArrow() says that the mouse has left/entered - // an arrow - bool HandleMouseMove(const wxMouseEvent& event) const; - - // process a mouse click event - bool HandleMouse(const wxMouseEvent& event) const; - - // dtor - ~wxScrollArrows(); - -private: - // set or clear the wxCONTROL_CURRENT flag for the arrow - void UpdateCurrentFlag(Arrow arrow, Arrow arrowCur) const; - - // the main control - wxControlWithArrows *m_control; - - // the data for the mouse capture - struct wxScrollArrowCaptureData *m_captureData; -}; - -// ---------------------------------------------------------------------------- -// wxControlWithArrows: interface implemented by controls using wxScrollArrows -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxControlWithArrows -{ -public: - virtual ~wxControlWithArrows() {} - - // get the renderer to use for drawing the arrows - virtual wxRenderer *GetRenderer() const = 0; - - // get the controls window (used for mouse capturing) - virtual wxWindow *GetWindow() = 0; - - // get the orientation of the arrows (vertical or horizontal) - virtual bool IsVertical() const = 0; - - // get the state of this arrow as combination of wxCONTROL_XXX flags - virtual int GetArrowState(wxScrollArrows::Arrow arrow) const = 0; - - // set or clear the specified flag in the arrow state: this function is - // responsible for refreshing the control - virtual void SetArrowFlag(wxScrollArrows::Arrow arrow, - int flag, bool set = true) = 0; - - // hit testing: return on which arrow the point is (or Arrow_None) - virtual wxScrollArrows::Arrow HitTestArrow(const wxPoint& pt) const = 0; - - // called when the arrow is pressed, return true to continue scrolling and - // false to stop it - virtual bool OnArrow(wxScrollArrows::Arrow arrow) = 0; -}; - -#endif // _WX_UNIV_SCRARROW_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/scrolbar.h b/desmume/src/windows/wx/include/wx/univ/scrolbar.h deleted file mode 100644 index ab3fd34c9..000000000 --- a/desmume/src/windows/wx/include/wx/univ/scrolbar.h +++ /dev/null @@ -1,283 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/scrolbar.h -// Purpose: wxScrollBar for wxUniversal -// Author: Vadim Zeitlin -// Modified by: -// Created: 20.08.00 -// RCS-ID: $Id: scrolbar.h 42716 2006-10-30 12:33:25Z VS $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_SCROLBAR_H_ -#define _WX_UNIV_SCROLBAR_H_ - -class WXDLLEXPORT wxScrollTimer; - -#include "wx/univ/scrarrow.h" -#include "wx/renderer.h" - -// ---------------------------------------------------------------------------- -// the actions supported by this control -// ---------------------------------------------------------------------------- - -// scroll the bar -#define wxACTION_SCROLL_START _T("start") // to the beginning -#define wxACTION_SCROLL_END _T("end") // to the end -#define wxACTION_SCROLL_LINE_UP _T("lineup") // one line up/left -#define wxACTION_SCROLL_PAGE_UP _T("pageup") // one page up/left -#define wxACTION_SCROLL_LINE_DOWN _T("linedown") // one line down/right -#define wxACTION_SCROLL_PAGE_DOWN _T("pagedown") // one page down/right - -// the scrollbar thumb may be dragged -#define wxACTION_SCROLL_THUMB_DRAG _T("thumbdrag") -#define wxACTION_SCROLL_THUMB_MOVE _T("thumbmove") -#define wxACTION_SCROLL_THUMB_RELEASE _T("thumbrelease") - -// ---------------------------------------------------------------------------- -// wxScrollBar -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxScrollBar : public wxScrollBarBase, - public wxControlWithArrows -{ -public: - // scrollbar elements: they correspond to wxHT_SCROLLBAR_XXX constants but - // start from 0 which allows to use them as array indices - enum Element - { - Element_Arrow_Line_1, - Element_Arrow_Line_2, - Element_Arrow_Page_1, - Element_Arrow_Page_2, - Element_Thumb, - Element_Bar_1, - Element_Bar_2, - Element_Max - }; - - wxScrollBar(); - wxScrollBar(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSB_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxScrollBarNameStr); - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSB_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxScrollBarNameStr); - - virtual ~wxScrollBar(); - - // implement base class pure virtuals - virtual int GetThumbPosition() const; - virtual int GetThumbSize() const; - virtual int GetPageSize() const; - virtual int GetRange() const; - - virtual void SetThumbPosition(int thumbPos); - virtual void SetScrollbar(int position, int thumbSize, - int range, int pageSize, - bool refresh = true); - - // wxScrollBar actions - void ScrollToStart(); - void ScrollToEnd(); - bool ScrollLines(int nLines); - bool ScrollPages(int nPages); - - virtual bool PerformAction(const wxControlAction& action, - long numArg = 0, - const wxString& strArg = wxEmptyString); - - static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return GetStdInputHandler(handlerDef); - } - - // scrollbars around a normal window should not receive the focus - virtual bool AcceptsFocus() const; - - // wxScrollBar sub elements state (combination of wxCONTROL_XXX) - void SetState(Element which, int flags); - int GetState(Element which) const; - - // implement wxControlWithArrows methods - virtual wxRenderer *GetRenderer() const { return m_renderer; } - virtual wxWindow *GetWindow() { return this; } - virtual bool IsVertical() const { return wxScrollBarBase::IsVertical(); } - virtual int GetArrowState(wxScrollArrows::Arrow arrow) const; - virtual void SetArrowFlag(wxScrollArrows::Arrow arrow, int flag, bool set); - virtual bool OnArrow(wxScrollArrows::Arrow arrow); - virtual wxScrollArrows::Arrow HitTestArrow(const wxPoint& pt) const; - - // for wxControlRenderer::DrawScrollbar() only - const wxScrollArrows& GetArrows() const { return m_arrows; } - - // returns one of wxHT_SCROLLBAR_XXX constants - wxHitTest HitTestBar(const wxPoint& pt) const; - - // idle processing - virtual void OnInternalIdle(); - -protected: - virtual wxSize DoGetBestClientSize() const; - virtual void DoDraw(wxControlRenderer *renderer); - virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } - - // forces update of thumb's visual appearence (does nothing if m_dirty=false) - void UpdateThumb(); - - // SetThumbPosition() helper - void DoSetThumb(int thumbPos); - - // common part of all ctors - void Init(); - - // is this scrollbar attached to a window or a standalone control? - bool IsStandalone() const; - - // scrollbar geometry methods: - - // gets the bounding box for a scrollbar element for the given (by default - // - current) thumb position - wxRect GetScrollbarRect(wxScrollBar::Element elem, int thumbPos = -1) const; - - // returns the size of the scrollbar shaft excluding the arrows - wxCoord GetScrollbarSize() const; - - // translate the scrollbar position (in logical units) into physical - // coordinate (in pixels) and the other way round - wxCoord ScrollbarToPixel(int thumbPos = -1); - int PixelToScrollbar(wxCoord coord); - - // return the starting and ending positions, in pixels, of the thumb of a - // scrollbar with the given logical position, thumb size and range and the - // given physical length - static void GetScrollBarThumbSize(wxCoord length, - int thumbPos, - int thumbSize, - int range, - wxCoord *thumbStart, - wxCoord *thumbEnd); - -private: - // total range of the scrollbar in logical units - int m_range; - - // the current and previous (after last refresh - this is used for - // repainting optimisation) size of the thumb in logical units (from 0 to - // m_range) and its position (from 0 to m_range - m_thumbSize) - int m_thumbSize, - m_thumbPos, - m_thumbPosOld; - - // the page size, i.e. the number of lines by which to scroll when page - // up/down action is performed - int m_pageSize; - - // the state of the sub elements - int m_elementsState[Element_Max]; - - // the dirty flag: if set, scrollbar must be updated - bool m_dirty; - - // the object handling the arrows - wxScrollArrows m_arrows; - - friend WXDLLEXPORT class wxControlRenderer; // for geometry methods - friend class wxStdScrollBarInputHandler; // for geometry methods - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxScrollBar) -}; - -// ---------------------------------------------------------------------------- -// Standard scrollbar input handler which can be used as a base class -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStdScrollBarInputHandler : public wxStdInputHandler -{ -public: - // constructor takes a renderer (used for scrollbar hit testing) and the - // base handler to which all unhandled events are forwarded - wxStdScrollBarInputHandler(wxRenderer *renderer, - wxInputHandler *inphand); - - virtual bool HandleKey(wxInputConsumer *consumer, - const wxKeyEvent& event, - bool pressed); - virtual bool HandleMouse(wxInputConsumer *consumer, - const wxMouseEvent& event); - virtual bool HandleMouseMove(wxInputConsumer *consumer, const wxMouseEvent& event); - - virtual ~wxStdScrollBarInputHandler(); - - // this method is called by wxScrollBarTimer only and may be overridden - // - // return true to continue scrolling, false to stop the timer - virtual bool OnScrollTimer(wxScrollBar *scrollbar, - const wxControlAction& action); - -protected: - // return true if the mouse button can be used to activate scrollbar, false - // if not (any button under GTK+ unlike left button only which is default) - virtual bool IsAllowedButton(int button) const - { return button == wxMOUSE_BTN_LEFT; } - - // set or clear the specified flag on the scrollbar element corresponding - // to m_htLast - void SetElementState(wxScrollBar *scrollbar, int flag, bool doIt); - - // [un]highlight the scrollbar element corresponding to m_htLast - virtual void Highlight(wxScrollBar *scrollbar, bool doIt) - { SetElementState(scrollbar, wxCONTROL_CURRENT, doIt); } - - // [un]press the scrollbar element corresponding to m_htLast - virtual void Press(wxScrollBar *scrollbar, bool doIt) - { SetElementState(scrollbar, wxCONTROL_PRESSED, doIt); } - - // stop scrolling because we reached the end point - void StopScrolling(wxScrollBar *scrollbar); - - // get the mouse coordinates in the scrollbar direction from the event - wxCoord GetMouseCoord(const wxScrollBar *scrollbar, - const wxMouseEvent& event) const; - - // generate a "thumb move" action for this mouse event - void HandleThumbMove(wxScrollBar *scrollbar, const wxMouseEvent& event); - - - // the window (scrollbar) which has capture or NULL and the flag telling if - // the mouse is inside the element which captured it or not - wxWindow *m_winCapture; - bool m_winHasMouse; - int m_btnCapture; // the mouse button which has captured mouse - - // the position where we started scrolling by page - wxPoint m_ptStartScrolling; - - // one of wxHT_SCROLLBAR_XXX value: where has the mouse been last time? - wxHitTest m_htLast; - - // the renderer (we use it only for hit testing) - wxRenderer *m_renderer; - - // the offset of the top/left of the scrollbar relative to the mouse to - // keep during the thumb drag - int m_ofsMouse; - - // the timer for generating scroll events when the mouse stays pressed on - // a scrollbar - wxScrollTimer *m_timerScroll; -}; - -#endif // _WX_UNIV_SCROLBAR_H_ - diff --git a/desmume/src/windows/wx/include/wx/univ/scrthumb.h b/desmume/src/windows/wx/include/wx/univ/scrthumb.h deleted file mode 100644 index 91d2a0c09..000000000 --- a/desmume/src/windows/wx/include/wx/univ/scrthumb.h +++ /dev/null @@ -1,140 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/scrthumb.h -// Purpose: wxScrollThumb class -// Author: Vadim Zeitlin -// Modified by: -// Created: 12.02.01 -// RCS-ID: $Id: scrthumb.h 37168 2006-01-26 19:35:32Z ABX $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_SCRTHUMB_H_ -#define _WX_UNIV_SCRTHUMB_H_ - -// ---------------------------------------------------------------------------- -// wxScrollThumb is not a control but just a class containing the common -// functionality of scroll thumb such as used by scrollbars, sliders and maybe -// other (user) controls -// -// This class is similar to wxScrollThumb. -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxControlWithThumb; -class WXDLLEXPORT wxMouseEvent; -class WXDLLEXPORT wxRect; -class WXDLLEXPORT wxScrollTimer; - -#include "wx/timer.h" - -// ---------------------------------------------------------------------------- -// wxScrollThumb: an abstraction of scrollbar thumb -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxScrollThumb -{ -public: - enum Shaft - { - Shaft_None = -1, - Shaft_Above, // or to the left of the thumb - Shaft_Below, // or to the right of the thumb - Shaft_Thumb, // on the thumb - Shaft_Max - }; - - // ctor requires a back pointer to wxControlWithThumb - wxScrollThumb(wxControlWithThumb *control); - - // process a mouse click: will capture the mouse if the button was pressed - // on either the thumb (start dragging it then) or the shaft (start - // scrolling) - bool HandleMouse(const wxMouseEvent& event) const; - - // process a mouse move - bool HandleMouseMove(const wxMouseEvent& event) const; - - // dtor - ~wxScrollThumb(); - -private: - // do we have the mouse capture? - bool HasCapture() const { return m_captureData != NULL; } - - // get the coord of this event in the direction we're interested in (y for - // vertical shaft or x for horizontal ones) - wxCoord GetMouseCoord(const wxMouseEvent& event) const; - - // get the position of the thumb corresponding to the current mouse - // position (can only be called while we're dragging the thumb!) - int GetThumbPos(const wxMouseEvent& event) const; - - // the main control - wxControlWithThumb *m_control; - - // the part of it where the mouse currently is - Shaft m_shaftPart; - - // the data for the mouse capture - struct WXDLLEXPORT wxScrollThumbCaptureData *m_captureData; -}; - -// ---------------------------------------------------------------------------- -// wxControlWithThumb: interface implemented by controls using wxScrollThumb -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxControlWithThumb -{ -public: - virtual ~wxControlWithThumb() {} - - // simple accessors - // ---------------- - - // get the controls window (used for mouse capturing) - virtual wxWindow *GetWindow() = 0; - - // get the orientation of the shaft (vertical or horizontal) - virtual bool IsVertical() const = 0; - - // geometry functions - // ------------------ - - // hit testing: return part of the shaft the point is in (or Shaft_None) - virtual wxScrollThumb::Shaft HitTest(const wxPoint& pt) const = 0; - - // get the current position in pixels of the thumb - virtual wxCoord ThumbPosToPixel() const = 0; - - // transform from pixel offset to the thumb logical position - virtual int PixelToThumbPos(wxCoord x) const = 0; - - // callbacks - // --------- - - // set or clear the specified flag in the arrow state: this function is - // responsible for refreshing the control - virtual void SetShaftPartState(wxScrollThumb::Shaft shaftPart, - int flag, - bool set = true) = 0; - - // called when the user starts dragging the thumb - virtual void OnThumbDragStart(int pos) = 0; - - // called while the user drags the thumb - virtual void OnThumbDrag(int pos) = 0; - - // called when the user stops dragging the thumb - virtual void OnThumbDragEnd(int pos) = 0; - - // called before starting to call OnPageScroll() - gives the control the - // possibility to remember its current state - virtual void OnPageScrollStart() = 0; - - // called while the user keeps the mouse pressed above/below the thumb, - // return true to continue scrollign and false to stop it (e.g. because the - // scrollbar has reached the top/bottom) - virtual bool OnPageScroll(int pageInc) = 0; -}; - -#endif // _WX_UNIV_SCRTHUMB_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/scrtimer.h b/desmume/src/windows/wx/include/wx/univ/scrtimer.h deleted file mode 100644 index 36799ac28..000000000 --- a/desmume/src/windows/wx/include/wx/univ/scrtimer.h +++ /dev/null @@ -1,51 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/scrtimer.h -// Purpose: wxScrollTimer: small helper class for wxScrollArrow/Thumb -// Author: Vadim Zeitlin -// Modified by: -// Created: 18.02.01 -// RCS-ID: $Id: scrtimer.h 39633 2006-06-08 11:25:30Z ABX $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_SCRTIMER_H -#define _WX_UNIV_SCRTIMER_H - -// NB: this class is implemented in scrolbar.cpp - -#include "wx/defs.h" - -#if wxUSE_TIMER - -#include "wx/timer.h" - -// ---------------------------------------------------------------------------- -// wxScrollTimer: the timer used when the arrow or scrollbar shaft is kept -// pressed -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxScrollTimer : public wxTimer -{ -public: - // default ctor - wxScrollTimer(); - - // start generating the events - void StartAutoScroll(); - - // the base class method - virtual void Notify(); - -protected: - // to implement in derived classes: perform the scroll action and return - // true to continue scrolling or false to stop - virtual bool DoNotify() = 0; - - // should we skip the next timer event? - bool m_skipNext; -}; - -#endif // wxUSE_TIMER - -#endif // _WX_UNIV_SCRTIMER_H diff --git a/desmume/src/windows/wx/include/wx/univ/setup.h b/desmume/src/windows/wx/include/wx/univ/setup.h deleted file mode 100644 index b944cd9bb..000000000 --- a/desmume/src/windows/wx/include/wx/univ/setup.h +++ /dev/null @@ -1,1332 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/setup.h -// Purpose: configuration settings for wxUniversal/MSW -// Author: Vadim Zeitlin -// Modified by: -// Created: 14.08.00 -// RCS-ID: $Id: setup0.h 49997 2007-11-16 16:14:49Z CE $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#error IS THIS FILE EVEN USED?? - - -#ifndef _WX_UNIV_SETUP_H_ -#define _WX_UNIV_SETUP_H_ - -// ---------------------------------------------------------------------------- -// global settings -// ---------------------------------------------------------------------------- - -// define this to 0 when building wxBase library - this can also be done from -// makefile/project file overriding the value here -#ifndef wxUSE_GUI - #define wxUSE_GUI 1 -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// compatibility settings -// ---------------------------------------------------------------------------- - -// This setting determines the compatibility with 2.4 API: set it to 1 to -// enable it -// -// Default is 0. -// -// Recommended setting: 0 (please update your code instead!) -#define WXWIN_COMPATIBILITY_2_4 0 - -// This setting determines the compatibility with 2.6 API: set it to 0 to -// flag all cases of using deprecated functions. -// -// Default is 1 but please try building your code with 0 as the default will -// change to 0 in the next version and the deprecated functions will disappear -// in the version after it completely. -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_6 1 - -// Set to 0 for accurate dialog units, else 1 to be as per 2.1.16 and before. -// If migrating between versions, your dialogs may seem to shrink. -// -// Default is 1 -// -// Recommended setting: 0 (the new calculations are more correct!) -#define wxDIALOG_UNIT_COMPATIBILITY 0 - -// ---------------------------------------------------------------------------- -// debugging settings -// ---------------------------------------------------------------------------- - -// Generic comment about debugging settings: they are very useful if you don't -// use any other memory leak detection tools such as Purify/BoundsChecker, but -// are probably redundant otherwise. Also, Visual C++ CRT has the same features -// as wxWidgets memory debugging subsystem built in since version 5.0 and you -// may prefer to use it instead of built in memory debugging code because it is -// faster and more fool proof. -// -// Using VC++ CRT memory debugging is enabled by default in debug mode -// (__WXDEBUG__) if wxUSE_GLOBAL_MEMORY_OPERATORS is *not* enabled (i.e. is 0) -// and if __NO_VC_CRTDBG__ is not defined. - -// If 1, enables wxDebugContext, for writing error messages to file, etc. If -// __WXDEBUG__ is not defined, will still use the normal memory operators. -// -// Default is 0 -// -// Recommended setting: 0 -#ifdef __MWERKS__ - #define wxUSE_DEBUG_CONTEXT 1 -#else - #define wxUSE_DEBUG_CONTEXT 0 -#endif - -// If 1, enables debugging versions of wxObject::new and wxObject::delete *IF* -// __WXDEBUG__ is also defined. -// -// WARNING: this code may not work with all architectures, especially if -// alignment is an issue. This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 1 if you are not using a memory debugging tool, else 0 -#define wxUSE_MEMORY_TRACING 0 - -// In debug mode, cause new and delete to be redefined globally. -// If this causes problems (e.g. link errors which is a common problem -// especially if you use another library which also redefines the global new -// and delete), set this to 0. -// This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -// In debug mode, causes new to be defined to be WXDEBUG_NEW (see object.h). If -// this causes problems (e.g. link errors), set this to 0. You may need to set -// this to 0 if using templates (at least for VC++). This switch is currently -// ignored for mingw / cygwin / CodeWarrior -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_NEW_ALWAYS 0 - -// wxHandleFatalExceptions() may be used to catch the program faults at run -// time and, instead of terminating the program with a usual GPF message box, -// call the user-defined wxApp::OnFatalException() function. If you set -// wxUSE_ON_FATAL_EXCEPTION to 0, wxHandleFatalExceptions() will not work. -// -// This setting is for Win32 only and can only be enabled if your compiler -// supports Win32 structured exception handling (currently only VC++ does) -// -// Default is 1 -// -// Recommended setting: 1 if your compiler supports it. -#ifdef _MSC_VER - #define wxUSE_ON_FATAL_EXCEPTION 1 -#else - #define wxUSE_ON_FATAL_EXCEPTION 0 -#endif - -// ---------------------------------------------------------------------------- -// Unicode support -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE to 1 to compile wxWidgets in Unicode mode: wxChar will be -// defined as wchar_t, wxString will use Unicode internally. If you set this -// to 1, you must use wxT() macro for all literal strings in the program. -// -// Unicode is currently only fully supported under Windows NT/2000/XP (Windows 9x -// doesn't support it and the programs compiled in Unicode mode will not run -// under 9x). -// -// Default is 0 -// -// Recommended setting: 0 (unless you only plan to use Windows NT/2000/XP) -#ifndef wxUSE_UNICODE - #define wxUSE_UNICODE 0 -#endif - -// Set wxUSE_UNICODE_MSLU to 1 if you want to compile wxWidgets in Unicode mode -// and be able to run compiled apps under Windows 9x as well as NT/2000/XP. This -// setting enables use of unicows.dll from MSLU (MS Layer for Unicode, see -// http://www.microsoft.com/globaldev/Articles/mslu_announce.asp). Note that you -// will have to modify the makefiles to include unicows.lib import library as the first -// library (if you use MSVC, you can run the makefile with "nmake MSLU=1 UNICODE=1" -// command). -// -// If your compiler doesn't have unicows.lib, you can get a version of it at -// http://libunicows.sourceforge.net -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_UNICODE_MSLU 0 - -// Setting wxUSE_WCHAR_T to 1 gives you some degree of Unicode support without -// compiling the program in Unicode mode. More precisely, it will be possible -// to construct wxString from a wide (Unicode) string and convert any wxString -// to Unicode. -// -// Default is 1 -// -// Recommended setting: 1 for win32 else 0 -#if defined(__WIN32__) || defined(__WATCOMC__) - #define wxUSE_WCHAR_T 1 -#else - #define wxUSE_WCHAR_T 0 -#endif - -// ---------------------------------------------------------------------------- -// global features -// ---------------------------------------------------------------------------- - -// Compile library in exception-safe mode? If set to 1, the library will try to -// behave correctly in presence of exceptions (even though it still will not -// use the exceptions itself) and notify the user code about any unhandled -// exceptions. If set to 0, propagation of the exceptions through the library -// code will lead to undefined behaviour -- but the code itself will be -// slightly smaller and faster. -// -// Default is 1 -// -// Recommended setting: depends on whether you intend to use C++ exceptions -// in your own code (1 if you do, 0 if you don't) -#define wxUSE_EXCEPTIONS 1 - -// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from -// std::list<Foo*> and std::vector<Foo*>, with a compatibility interface, -// and for wxHashMap to be implemented with templates. -// -// Default is 0 -// -// Recommended setting: YMMV -#define wxUSE_STL 0 - -// Set wxUSE_EXTENDED_RTTI to 1 to use extended RTTI -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_EXTENDED_RTTI 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. -// -// Default is 1 -// -// Recommended setting: 1 (always) -#define wxUSE_LOG 1 - -// Recommended setting: 1 -#define wxUSE_LOGWINDOW 1 - -// Recommended setting: 1 -#define wxUSE_LOGGUI 1 - -// Recommended setting: 1 -#define wxUSE_LOG_DIALOG 1 - -// Support for command line parsing using wxCmdLineParser class. -// -// Default is 1 -// -// Recommended setting: 1 (can be set to 0 if you don't use the cmd line) -#define wxUSE_CMDLINE_PARSER 1 - -// Support for multithreaded applications: if 1, compile in thread classes -// (thread.h) and make the library a bit more thread safe. Although thread -// support is quite stable by now, you may still consider recompiling the -// library without it if you have no use for it - this will result in a -// somewhat smaller and faster operation. -// -// This is ignored under Win16, threads are only supported under Win32. -// -// Default is 1 -// -// Recommended setting: 0 unless you do plan to develop MT applications -#define wxUSE_THREADS 1 - -// If enabled (1), compiles wxWidgets streams classes -#define wxUSE_STREAMS 1 - -// Use standard C++ streams if 1. If 0, use wxWin streams implementation. -#ifdef __MWERKS__ - #define wxUSE_STD_IOSTREAM 1 -#else - #define wxUSE_STD_IOSTREAM 0 -#endif - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// 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 header, 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_STRING 0 -#else - #define wxUSE_STD_STRING 1 -#endif - -// 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 -// of wxVsnprintf. The standard vsnprintf() supports positional parameters on -// many Unix systems but usually doesn't under Windows. -// -// Positional parameters are very useful when translating a program since using -// them in formatting strings allow translators to correctly reorder the -// translated sentences. -// -// Default is 1 -// -// Recommended setting: 1 if you want to support multiple languages -#define wxUSE_PRINTF_POS_PARAMS 1 - -// ---------------------------------------------------------------------------- -// non GUI features selection -// ---------------------------------------------------------------------------- - -// Set wxUSE_LONGLONG to 1 to compile the wxLongLong class. This is a 64 bit -// integer which is implemented in terms of native 64 bit integers if any or -// uses emulation otherwise. -// -// This class is required by wxDateTime and so you should enable it if you want -// to use wxDateTime. For most modern platforms, it will use the native 64 bit -// integers in which case (almost) all of its functions are inline and it -// almost does not take any space, so there should be no reason to switch it -// off. -// -// Recommended setting: 1 -#define wxUSE_LONGLONG 1 - -// Set wxUSE_(F)FILE to 1 to compile wx(F)File classes. wxFile uses low level -// POSIX functions for file access, wxFFile uses ANSI C stdio.h functions. -// -// Default is 1 -// -// Recommended setting: 1 (wxFile is highly recommended as it is required by -// i18n code, wxFileConfig and others) -#define wxUSE_FILE 1 -#define wxUSE_FFILE 1 - -// Use wxFSVolume class providing access to the configured/active mount points -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely disabled if you don't use it) -#define wxUSE_FSVOLUME 1 - -// Use wxStandardPaths class which allows to retrieve some standard locations -// in the file system -// -// Default is 1 -// -// Recommended setting: 1 (may be disabled to save space, but not much) -#define wxUSE_STDPATHS 1 - -// use wxTextBuffer class: required by wxTextFile -#define wxUSE_TEXTBUFFER 1 - -// use wxTextFile class: requires wxFile and wxTextBuffer, required by -// wxFileConfig -#define wxUSE_TEXTFILE 1 - -// i18n support: _() macro, wxLocale class. Requires wxTextFile. -#define wxUSE_INTL 1 - -// Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which -// allow to manipulate dates, times and time intervals. wxDateTime replaces the -// old wxTime and wxDate classes which are still provided for backwards -// compatibility (and implemented in terms of wxDateTime). -// -// Note that this class is relatively new and is still officially in alpha -// stage because some features are not yet (fully) implemented. It is already -// quite useful though and should only be disabled if you are aiming at -// absolutely minimal version of the library. -// -// Requires: wxUSE_LONGLONG -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_DATETIME 1 - -// wxUSE_TIMEDATE enables compilation of the old wxDate and wxTime classes (not -// the same as wxDateTime!). These classes are obsolete and shouldn't be used -// in new code -// -// Default is 0 -// -// Recommended setting: 0 unless you have legacy code which uses these classes -#define wxUSE_TIMEDATE 0 - -// Set wxUSE_TIMER to 1 to compile wxTimer class -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_TIMER 1 - -// Use wxStopWatch clas. -// -// Default is 1 -// -// Recommended setting: 1 (needed by wxSocket) -#define wxUSE_STOPWATCH 1 - -// Setting wxUSE_CONFIG to 1 enables the use of wxConfig and related classes -// which allow the application to store its settings in the persistent -// storage. Setting this to 1 will also enable on-demand creation of the -// global config object in wxApp. -// -// See also wxUSE_CONFIG_NATIVE below. -// -// Recommended setting: 1 -#define wxUSE_CONFIG 1 - -// If wxUSE_CONFIG is 1, you may choose to use either the native config -// classes under Windows (using .INI files under Win16 and the registry under -// Win32) or the portable text file format used by the config classes under -// Unix. -// -// Default is 1 to use native classes. Note that you may still use -// wxFileConfig even if you set this to 1 - just the config object created by -// default for the applications needs will be a wxRegConfig or wxIniConfig and -// not wxFileConfig. -// -// Recommended setting: 0 (universal should not use native) -#if defined(__WIN32__) - #define wxUSE_CONFIG_NATIVE 0 -#else - #define wxUSE_CONFIG_NATIVE 0 -#endif - -// If wxUSE_DIALUP_MANAGER is 1, compile in wxDialUpManager class which allows -// to connect/disconnect from the network and be notified whenever the dial-up -// network connection is established/terminated. Requires wxUSE_DYNAMIC_LOADER. -// -// Default is 1. -// -// Recommended setting: 1 -#if defined(__WIN32__) - #define wxUSE_DIALUP_MANAGER 1 -#else - #define wxUSE_DIALUP_MANAGER 0 -#endif - -// Compile in classes for run-time DLL loading and function calling. -// Required by wxUSE_DIALUP_MANAGER. -// -// This setting is for Win32 only -// -// Default is 1. -// -// Recommended setting: 1 -#if defined(__WIN32__) - #define wxUSE_DYNLIB_CLASS 1 -#else - #define wxUSE_DYNLIB_CLASS 0 -#endif - -// experimental, don't use for now -#if defined(__WIN32__) - #define wxUSE_DYNAMIC_LOADER 1 -#else - #define wxUSE_DYNAMIC_LOADER 0 -#endif - -// Set to 1 to use socket classes -#define wxUSE_SOCKETS 0 //zero 10-dec-2009 - -// Set to 1 to enable virtual file systems (required by wxHTML) -#define wxUSE_FILESYSTEM 1 - -// Set to 1 to enable virtual ZIP filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ZIP 0 //zero 10-dec-2009 - -// Set to 1 to enable virtual archive filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ARCHIVE 0 //zero 10-dec-2009 - -// wxArchive classes for accessing archives such as zip and tar -#define wxUSE_ARCHIVE_STREAMS 0 //zero 10-dec-2009 - -// Set to 1 to compile wxZipInput/OutputStream classes. -#define wxUSE_ZIPSTREAM 0 //zero 10-dec-2009 - -// Set to 1 to compile wxTarInput/OutputStream classes. -#define wxUSE_TARSTREAM 0 //zero 10-dec-2009 - -// Set to 1 to compile wxZlibInput/OutputStream classes. Also required by -// wxUSE_LIBPNG -#define wxUSE_ZLIB 0 //zero 10-dec-2009 - -// Set to 1 to enable virtual Internet filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_INET 0 //zero 10-dec-2009 - -// If enabled, the code written by Apple will be used to write, in a portable -// way, float on the disk. See extended.c for the license which is different -// from wxWidgets one. -// -// Default is 1. -// -// Recommended setting: 1 unless you don't like the license terms (unlikely) -#define wxUSE_APPLE_IEEE 0 //zero 10-dec-2009 - -// Joystick support class -#if defined(__WIN32__) - #define wxUSE_JOYSTICK 0 //zero 10-dec-2009 -#else - #define wxUSE_JOYSTICK 0 //zero 10-dec-2009 -#endif - -// wxFontMapper class -#define wxUSE_FONTMAP 0 //zero 10-dec-2009 - -// wxMimeTypesManager class -#define wxUSE_MIMETYPE 0 //zero 10-dec-2009 - -// wxProtocol and related classes: if you want to use either of wxFTP, wxHTTP -// or wxURL you need to set this to 1. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_PROTOCOL 0 //zero 10-dec-2009 - -// The settings for the individual URL schemes -#define wxUSE_PROTOCOL_FILE 1 -#define wxUSE_PROTOCOL_FTP 1 -#define wxUSE_PROTOCOL_HTTP 1 - -// Define this to use wxURL class. -#define wxUSE_URL 0 //zero 10-dec-2009 - -// Support for wxVariant class used in several places throughout the library, -// notably in wxDataViewCtrl API. -// -// Default is 1. -// -// Recommended setting: 1 unless you want to reduce the library size as much as -// possible in which case setting this to 0 can gain up to 100KB. -#define wxUSE_VARIANT 1 - -// Support for regular expression matching via wxRegEx class: enable this to -// use POSIX regular expressions in your code. You need to compile regex -// library from src/regex to use it under Windows. -// -// Default is 0 -// -// Recommended setting: 1 if your compiler supports it, if it doesn't please -// contribute us a makefile for src/regex for it -#define wxUSE_REGEX 0 //zero 10-dec-2009 - -// wxSystemOptions class -#define wxUSE_SYSTEM_OPTIONS 1 - -// wxSound class -#define wxUSE_SOUND 0 //zero 10-dec-2009 - -// Use wxMediaCtrl -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_MEDIACTRL 1 - -// Use QuickTime -// -// Default is 0 -// -// Recommended setting: 1 if you have the QT SDK installed and you need it, else 0 -#define wxUSE_QUICKTIME 0 - -// Use DirectShow -// -// Default is 0 -// -// Recommended setting: 1 if the DirectX 7 SDK is installed (highly recommended), else 0 -#define wxUSE_DIRECTSHOW 0 - -// Use wxWidget's XRC XML-based resource system. Recommended. -// -// Default is 1 -// -// Recommended setting: 1 (requires wxUSE_XML) -#define wxUSE_XRC 1 - -// XML parsing classes. Note that their API will change in the future, so -// using wxXmlDocument and wxXmlNode in your app is not recommended. -// -// Default is 1 -// -// Recommended setting: 1 (required by XRC) -#if wxUSE_XRC -# define wxUSE_XML 1 -#else -# define wxUSE_XML 0 -#endif - -// Use wxWidget's AUI docking system -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_AUI 1 - - -// Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced -// 2D drawing API. (Still somewhat experimental) -// -// Please note that on Windows you will need to link with gdiplus.lib (use -// USE_GDIPLUS=1 for makefile builds) and distribute gdiplus.dll with your -// application if you want it to be runnable on pre-XP systems. -// -// Default is 0 -// -// Recommended setting: 1 -#ifndef wxUSE_GRAPHICS_CONTEXT -#define wxUSE_GRAPHICS_CONTEXT 0 -#endif - -// Set to 1 to compile MS Windows XP theme engine support -#define wxUSE_UXTHEME 0 - -// Set to 1 to auto-adapt to MS Windows XP themes where possible -// (notably, wxNotebook pages) -#define wxUSE_UXTHEME_AUTO 0 - -// ---------------------------------------------------------------------------- -// Individual GUI controls -// ---------------------------------------------------------------------------- - -// You must set wxUSE_CONTROLS to 1 if you are using any controls at all -// (without it, wxControl class is not compiled) -// -// Default is 1 -// -// Recommended setting: 1 (don't change except for very special programs) -#define wxUSE_CONTROLS 1 - -// wxPopupWindow class is a top level transient window. It is currently used -// to implement wxTipWindow -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0 if you don't wxUSE_TIPWINDOW) -#define wxUSE_POPUPWIN 1 - -// wxTipWindow allows to implement the custom tooltips, it is used by the -// context help classes. Requires wxUSE_POPUPWIN. -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0) -#define wxUSE_TIPWINDOW 1 - -// Each of the settings below corresponds to one wxWidgets control. They are -// all switched on by default but may be disabled if you are sure that your -// program (including any standard dialogs it can show!) doesn't need them and -// if you desperately want to save some space. If you use any of these you must -// set wxUSE_CONTROLS as well. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl -#define wxUSE_BUTTON 1 // wxButton -#define wxUSE_BMPBUTTON 1 // wxBitmapButton -#define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl -#define wxUSE_CHECKBOX 1 // wxCheckBox -#define wxUSE_CHECKLISTBOX 1 // wxCheckListBox -#define wxUSE_CHOICE 1 // wxChoice -#define wxUSE_COLLPANE 1 // wxCollapsiblePane -#define wxUSE_COLOURPICKERCTRL 1 // wxColourPickerCtrl -#define wxUSE_COMBOBOX 1 // wxComboBox -#define wxUSE_DATAVIEWCTRL 1 // wxDataViewCtrl -#define wxUSE_DATEPICKCTRL 1 // wxDatePickerCtrl -#define wxUSE_DIRPICKERCTRL 1 // wxDirPickerCtrl -#define wxUSE_FILEPICKERCTRL 1 // wxFilePickerCtrl -#define wxUSE_FONTPICKERCTRL 1 // wxFontPickerCtrl -#define wxUSE_GAUGE 1 // wxGauge -#define wxUSE_HYPERLINKCTRL 1 // wxHyperlinkCtrl -#define wxUSE_LISTBOX 1 // wxListBox -#define wxUSE_LISTCTRL 1 // wxListCtrl -#define wxUSE_RADIOBOX 1 // wxRadioBox -#define wxUSE_RADIOBTN 1 // wxRadioButton -#define wxUSE_SCROLLBAR 1 // wxScrollBar -#define wxUSE_SEARCHCTRL 1 // wxSearchCtrl -#define wxUSE_SLIDER 1 // wxSlider -#define wxUSE_SPINBTN 1 // wxSpinButton -#define wxUSE_SPINCTRL 1 // wxSpinCtrl -#define wxUSE_STATBOX 1 // wxStaticBox -#define wxUSE_STATLINE 1 // wxStaticLine -#define wxUSE_STATTEXT 1 // wxStaticText -#define wxUSE_STATBMP 1 // wxStaticBitmap -#define wxUSE_TEXTCTRL 1 // wxTextCtrl -#define wxUSE_TOGGLEBTN 1 // wxToggleButton -#define wxUSE_TREECTRL 1 // wxTreeCtrl - -// Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR -// below either wxStatusBar95 or a generic wxStatusBar will be used. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_STATUSBAR 1 - -// Two status bar implementations are available under Win32: the generic one -// or the wrapper around native control. For native look and feel the native -// version should be used. -// -// Default is 0. -// -// Recommended setting: 0 -#define wxUSE_NATIVE_STATUSBAR 0 - -// wxToolBar related settings: if wxUSE_TOOLBAR is 0, don't compile any toolbar -// classes at all. Otherwise, use the native toolbar class unless -// wxUSE_TOOLBAR_NATIVE is 0. -// -// Default is 0 for all settings. -// -// Recommended setting: 1 for wxUSE_TOOLBAR and 0 for wxUSE_TOOLBAR_NATIVE. -#define wxUSE_TOOLBAR 1 -#define wxUSE_TOOLBAR_NATIVE 0 - -// wxNotebook is a control with several "tabs" located on one of its sides. It -// may be used ot logically organise the data presented to the user instead of -// putting everything in one huge dialog. It replaces wxTabControl and related -// classes of wxWin 1.6x. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_NOTEBOOK 1 - -// wxListbook control is similar to wxNotebook but uses wxListCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_LISTBOOK 1 - -// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CHOICEBOOK 1 - -// wxTreebook control is similar to wxNotebook but uses wxTreeCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TREEBOOK 1 - -// wxToolbook control is similar to wxNotebook but uses wxToolBar instead of -// tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLBOOK 1 - -// wxTabDialog is a generic version of wxNotebook but it is incompatible with -// the new class. It shouldn't be used in new code. -// -// Default is 0. -// -// Recommended setting: 0 (use wxNotebook) -#define wxUSE_TAB_DIALOG 0 - -// wxGrid class -// -// Default is 1, set to 0 to cut down compilation time and binaries size if you -// don't use it. -// -// Recommended setting: 1 -// -#define wxUSE_GRID 1 - -// wxProperty[Value/Form/List] classes, used by Dialog Editor -#define wxUSE_PROPSHEET 1 - - -// wxMiniFrame class: a frame with narrow title bar -// -// Default is 1. -// -// Recommended setting: 1 (it doesn't cost almost anything) -#define wxUSE_MINIFRAME 1 - - -// wxComboCtrl and related classes: combobox with custom popup window and -// not necessarily a listbox. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 except for wxUniv where it -// it used by wxComboBox -#define wxUSE_COMBOCTRL 1 - -// wxOwnerDrawnComboBox is a custom combobox allowing to paint the combobox -// items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0, except where it is -// needed as a base class for generic wxBitmapComboBox. -#define wxUSE_ODCOMBOBOX 1 - -// wxBitmapComboBox a combobox that can have images in front of text items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 -#define wxUSE_BITMAPCOMBOBOX 1 - -// ---------------------------------------------------------------------------- -// Miscellaneous GUI stuff -// ---------------------------------------------------------------------------- - -// wxAcceleratorTable/Entry classes and support for them in wxMenu(Bar) -#define wxUSE_ACCEL 1 - -// Use wxCaret: a class implementing a "cursor" in a text control (called caret -// under Windows). -// -// Default is 1. -// -// Recommended setting: 1 (can be safely set to 0, not used by the library) -#define wxUSE_CARET 1 - -// Use wxDisplay class: it allows enumerating all displays on a system and -// working with them. -// -// Default is 0 because it isn't yet implemented on all platforms -// -// Recommended setting: 1 if you need it, can be safely set to 0 otherwise -#define wxUSE_DISPLAY 0 - -// Miscellaneous geometry code: needed for Canvas library -#define wxUSE_GEOMETRY 0 - -// Use wxImageList. This class is needed by wxNotebook, wxTreeCtrl and -// wxListCtrl. -// -// Default is 1. -// -// Recommended setting: 1 (set it to 0 if you don't use any of the controls -// enumerated above, then this class is mostly useless too) -#define wxUSE_IMAGLIST 1 - -// Use wxMenu, wxMenuBar, wxMenuItem. -// -// Default is 1. -// -// Recommended setting: 1 (can't be disabled under MSW) -#define wxUSE_MENUS 1 - -// Use wxSashWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SASH 1 - -// Use wxSplitterWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SPLITTER 1 - -// Use wxToolTip and wxWindow::Set/GetToolTip() methods. -// -// Default is 1. -// -// Recommended setting: 1 -#ifdef __WIN32__ - #define wxUSE_TOOLTIPS 1 -#else - #define wxUSE_TOOLTIPS 0 -#endif - -// wxValidator class and related methods -#define wxUSE_VALIDATORS 1 - -// wxDC cacheing implementation -#define wxUSE_DC_CACHEING 1 - -// Set this to 1 to enable the use of DIB's for wxBitmap to support -// bitmaps > 16MB on Win95/98/Me. Set to 0 to use DDB's only. -#define wxUSE_DIB_FOR_BITMAP 0 - -// ---------------------------------------------------------------------------- -// common dialogs -// ---------------------------------------------------------------------------- - -// On rare occasions (e.g. using DJGPP) may want to omit common dialogs (e.g. -// file selector, printer dialog). Switching this off also switches off the -// printing architecture and interactive wxPrinterDC. -// -// Default is 1 -// -// Recommended setting: 1 (unless it really doesn't work) -#define wxUSE_COMMON_DIALOGS 1 - -// wxBusyInfo displays window with message when app is busy. Works in same way -// as wxBusyCursor -#define wxUSE_BUSYINFO 1 - -// Use single/multiple choice dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_CHOICEDLG 1 - -// Use colour picker dialog -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_COLOURDLG 1 - -// wxDirDlg class for getting a directory name from user -#define wxUSE_DIRDLG 1 - -// TODO: setting to choose the generic or native one - -// Use file open/save dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in many places in the library itself) -#if defined(__WIN32__) - #define wxUSE_FILEDLG 1 -#else - #define wxUSE_FILEDLG 1 -#endif - -// Use find/replace dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely set to 0) -#define wxUSE_FINDREPLDLG 1 - -// Use font picker dialog -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_FONTDLG 1 - -// Use wxMessageDialog and wxMessageBox. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_MSGDLG 1 - -// progress dialog class for lengthy operations -#define wxUSE_PROGRESSDLG 1 - -// support for startup tips (wxShowTip &c) -#define wxUSE_STARTUP_TIPS 0 //zero 10-dec-2009 - -// text entry dialog and wxGetTextFromUser function -#define wxUSE_TEXTDLG 1 - -// number entry dialog -#define wxUSE_NUMBERDLG 1 - -// splash screen class -#define wxUSE_SPLASH 0 //zero 10-dec-2009 - -// wizards -#define wxUSE_WIZARDDLG 1 - -// Compile in wxAboutBox() function showing the standard "About" dialog. -// -// Default is 1 -// -// Recommended setting: 1 but can be set to 0 to save some space if you don't -// use this function -#define wxUSE_ABOUTDLG 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// Metafiles support -// ---------------------------------------------------------------------------- - -// Windows supports the graphics format known as metafile which is, though not -// portable, is widely used under Windows and so is supported by wxWin (under -// Windows only, of course). Win16 (Win3.1) used the so-called "Window -// MetaFiles" or WMFs which were replaced with "Enhanced MetaFiles" or EMFs in -// Win32 (Win9x, NT, 2000). Both of these are supported in wxWin and, by -// default, WMFs will be used under Win16 and EMFs under Win32. This may be -// changed by setting wxUSE_WIN_METAFILES_ALWAYS to 1 and/or setting -// wxUSE_ENH_METAFILE to 0. You may also set wxUSE_METAFILE to 0 to not compile -// in any metafile related classes at all. -// -// Default is 1 for wxUSE_ENH_METAFILE and 0 for wxUSE_WIN_METAFILES_ALWAYS. -// -// Recommended setting: default or 0 for everything for portable programs. -#if defined(__WIN32__) - #define wxUSE_METAFILE 1 - #define wxUSE_ENH_METAFILE 1 - #define wxUSE_WIN_METAFILES_ALWAYS 0 -#else - #define wxUSE_METAFILE 0 - #define wxUSE_ENH_METAFILE 0 - #define wxUSE_WIN_METAFILES_ALWAYS 0 -#endif - -// ---------------------------------------------------------------------------- -// Big GUI components -// ---------------------------------------------------------------------------- - -// Set to 0 to disable MDI support. -// -// Requires wxUSE_NOTEBOOK under platforms other than MSW. -// -// Default is 1. -// -// Recommended setting: 1, can be safely set to 0. -#define wxUSE_MDI 1 - -// Set to 0 to disable document/view architecture -#define wxUSE_DOC_VIEW_ARCHITECTURE 1 - -// Set to 0 to disable MDI document/view architecture -// -// Requires wxUSE_MDI && wxUSE_DOC_VIEW_ARCHITECTURE -#define wxUSE_MDI_ARCHITECTURE 1 - -// Set to 0 to disable print/preview architecture code -#define wxUSE_PRINTING_ARCHITECTURE 0 //zero 10-dec-2009 - -// wxHTML sublibrary allows to display HTML in wxWindow programs and much, -// much more. -// -// Default is 1. -// -// Recommended setting: 1 (wxHTML is great!), set to 0 if you want compile a -// smaller library. -#define wxUSE_HTML 0 //zero 10-dec-2009 - -// Setting wxUSE_GLCANVAS to 1 enables OpenGL support. You need to have OpenGL -// headers and libraries to be able to compile the library with wxUSE_GLCANVAS -// set to 1. Note that for some compilers (notably Microsoft Visual C++) you -// will need to manually add opengl32.lib and glu32.lib to the list of -// libraries linked with your program if you use OpenGL. -// -// Default is 0. -// -// Recommended setting: 1 if you intend to use OpenGL, 0 otherwise -#if defined(__WIN32__) - #define wxUSE_GLCANVAS 1 -#else - #define wxUSE_GLCANVAS 0 -#endif - -// wxRichTextCtrl allows editing of styled text. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 if you want compile a -// smaller library. -#define wxUSE_RICHTEXT 1 - -// wxTreeLayout class -#define wxUSE_TREELAYOUT 1 - -// ---------------------------------------------------------------------------- -// Data transfer -// ---------------------------------------------------------------------------- - -// Use wxClipboard class for clipboard copy/paste. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CLIPBOARD 1 - -// Use wxDataObject and related classes. Needed for clipboard and OLE drag and -// drop -// -// Default is 1. -// -// Recommended setting: 1 for WIN32 -#define wxUSE_DATAOBJ 1 - -// Use wxDropTarget and wxDropSource classes for drag and drop (this is -// different from "built in" drag and drop in wxTreeCtrl which is always -// available). Requires wxUSE_DATAOBJ. -// -// Default is 1. -// -// Recommended setting: 1 -#if defined(__WIN32__) - #define wxUSE_DRAG_AND_DROP 1 -#else - #define wxUSE_DRAG_AND_DROP 0 -#endif - -// Use wxAccessible for enhanced and customisable accessibility. -// Depends on wxUSE_OLE. -// -// Default is 0. -// -// Recommended setting (at present): 0 -#define wxUSE_ACCESSIBILITY 0 - -// ---------------------------------------------------------------------------- -// miscellaneous settings -// ---------------------------------------------------------------------------- - -// wxSingleInstanceChecker class allows to verify at startup if another program -// instance is running (it is only available under Win32) -// -// Default is 1 -// -// Recommended setting: 1 (the class is tiny, disabling it won't save much -// space) -#if defined(__WIN32__) - #define wxUSE_SNGLINST_CHECKER 1 -#else - #define wxUSE_SNGLINST_CHECKER 0 -#endif - -// Drag image -#define wxUSE_DRAGIMAGE 1 - -// Interprocess communication -#define wxUSE_IPC 1 - -// Help -#if defined(__WIN32__) - #define wxUSE_HELP 1 -#else - #define wxUSE_HELP 1 -#endif - -// MS help -#define wxUSE_MS_HTML_HELP 1 - -// Use wxHTML-based help controller -#define wxUSE_WXHTML_HELP 1 - -// Use resources -#define wxUSE_RESOURCES 0 - -// Window layout constraint system -#define wxUSE_CONSTRAINTS 1 - -// Splines -#define wxUSE_SPLINES 1 - -// Include mouse wheel support -#define wxUSE_MOUSEWHEEL 1 - -// ---------------------------------------------------------------------------- -// postscript support settings -// ---------------------------------------------------------------------------- - -// Set to 1 for PostScript device context. -#define wxUSE_POSTSCRIPT 0 //zero 10-dec-2009 - -// Set to 1 to use font metric files in GetTextExtent -#define wxUSE_AFM_FOR_POSTSCRIPT 1 - -// ---------------------------------------------------------------------------- -// database classes -// ---------------------------------------------------------------------------- - -// Define 1 to use ODBC classes -#define wxUSE_ODBC 0 //zero 10-dec-2009 - -// For backward compatibility reasons, this parameter now only controls the -// default scrolling method used by cursors. This default behavior can be -// overriden by setting the second param of wxDB::wxDbGetConnection() or -// wxDb() constructor to indicate whether the connection (and any wxDbTable()s -// that use the connection) should support forward only scrolling of cursors, -// or both forward and backward support for backward scrolling cursors is -// dependent on the data source as well as the ODBC driver being used. -#define wxODBC_FWD_ONLY_CURSORS 0 - -// Default is 0. Set to 1 to use the deprecated classes, enum types, function, -// member variables. With a setting of 1, full backward compatibility with the -// 2.0.x release is possible. It is STRONGLY recommended that this be set to 0, -// as future development will be done only on the non-deprecated -// functions/classes/member variables/etc. -#define wxODBC_BACKWARD_COMPATABILITY 0 - -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. -// -// Default is 1. -// -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows <iostream> and <iostream.h> but you can't mix -// them. Set to 1 for <iostream.h>, 0 for <iostream> -// -// Default is 1. -// -// Recommended setting: whatever your compiler likes more -#ifdef __MWERKS__ - #define wxUSE_IOSTREAMH 1 -#else - #define wxUSE_IOSTREAMH 0 -#endif - -// ---------------------------------------------------------------------------- -// image format support -// ---------------------------------------------------------------------------- - -// wxImage supports many different image formats which can be configured at -// compile-time. BMP is always supported, others are optional and can be safely -// disabled if you don't plan to use images in such format sometimes saving -// substantial amount of code in the final library. -// -// Some formats require an extra library which is included in wxWin sources -// which is mentioned if it is the case. - -// Set to 1 for wxImage support (recommended). -#define wxUSE_IMAGE 1 - -// Set to 1 for PNG format support (requires libpng). Also requires wxUSE_ZLIB. -#define wxUSE_LIBPNG 0 //zero 10-dec-2009 - -// Set to 1 for JPEG format support (requires libjpeg) -#define wxUSE_LIBJPEG 0 //zero 10-dec-2009 - -// Set to 1 for TIFF format support (requires libtiff) -#define wxUSE_LIBTIFF 0 //zero 10-dec-2009 - -// Set to 1 for GIF format support -#define wxUSE_GIF 0 //zero 10-dec-2009 - -// Set to 1 for PNM format support -#define wxUSE_PNM 0 //zero 10-dec-2009 - -// Set to 1 for PCX format support -#define wxUSE_PCX 0 //zero 10-dec-2009 - -// Set to 1 for IFF format support (Amiga format) -#define wxUSE_IFF 0 //zero 10-dec-2009 - -// Set to 1 for XPM format support -#define wxUSE_XPM 0 //zero 10-dec-2009 - -// Set to 1 for MS Icons and Cursors format support -#define wxUSE_ICO_CUR 1 //zero 10-dec-2009 - -// Set to 1 to compile in wxPalette class - #define wxUSE_PALETTE 0 //zero 10-dec-2009 - -// ---------------------------------------------------------------------------- -// Windows-only settings -// ---------------------------------------------------------------------------- -#if defined(__WINDOWS__) - -// Set this to 1 if you want to use wxWidgets and MFC in the same program. This -// will override some other settings (see below) -// -// Default is 0. -// -// Recommended setting: 0 unless you really have to use MFC -#define wxUSE_MFC 0 - -// Set this to 1 for generic OLE support: this is required for drag-and-drop, -// clipboard, OLE Automation. Only set it to 0 if your compiler is very old and -// can't compile/doesn't have the OLE headers. -// -// Default is 1. -// -// Recommended setting: 1 for WIN32 - #define wxUSE_OLE 1 - -// Set to 0 to disable PostScript print/preview architecture code under Windows -// (just use Windows printing). -#if defined(__WIN32__) - #define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 1 -#else - #define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 0 -#endif - -// Set this to 1 to use RICHEDIT controls for wxTextCtrl with style wxTE_RICH -// which allows to put more than ~32Kb of text in it even under Win9x (NT -// doesn't have such limitation). -// -// Default is 1 for compilers which support it -// -// Recommended setting: 1, only set it to 0 if your compiler doesn't have -// or can't compile <richedit.h> -#if defined(__WIN95__) && !defined(__WINE__) && !defined(__GNUWIN32_OLD__) -// TODO: This should be ifdef'ed for any compilers that don't support -// RichEdit 2.0 but do have RichEdit 1.0... - #define wxUSE_RICHEDIT 0 // currently not supported - #define wxUSE_RICHEDIT2 0 // currently not supported - -#else - #define wxUSE_RICHEDIT 0 - #define wxUSE_RICHEDIT2 0 -#endif - -// Set this to 1 to enable support for the owner-drawn menu and listboxes. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 for a small library size reduction -#define wxUSE_OWNER_DRAWN 0 - -// Set this to 1 to be able to use wxCrashReport::Generate() to create mini -// dumps of your program when it crashes (or at any other moment) -// -// Default is 1 if supported by the compiler (VC++ and recent BC++ only). -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_CRASHREPORT 1 - -#endif - -// ---------------------------------------------------------------------------- -// unknown settings -// ---------------------------------------------------------------------------- - -// If 1, enables provision of run-time type information. -// NOW MANDATORY: don't change. -#define wxUSE_DYNAMIC_CLASSES 1 - -//?????? -#if defined(__WIN32__) - #define wxUSE_DDE_FOR_IPC 0 -#else - #define wxUSE_DDE_FOR_IPC 0 -#endif - -#endif // _WX_UNIV_SETUP_H_ - diff --git a/desmume/src/windows/wx/include/wx/univ/setup0.h b/desmume/src/windows/wx/include/wx/univ/setup0.h deleted file mode 100644 index 39b9cba8d..000000000 --- a/desmume/src/windows/wx/include/wx/univ/setup0.h +++ /dev/null @@ -1,1328 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/setup.h -// Purpose: configuration settings for wxUniversal/MSW -// Author: Vadim Zeitlin -// Modified by: -// Created: 14.08.00 -// RCS-ID: $Id: setup0.h 49997 2007-11-16 16:14:49Z CE $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_SETUP_H_ -#define _WX_UNIV_SETUP_H_ - -// ---------------------------------------------------------------------------- -// global settings -// ---------------------------------------------------------------------------- - -// define this to 0 when building wxBase library - this can also be done from -// makefile/project file overriding the value here -#ifndef wxUSE_GUI - #define wxUSE_GUI 1 -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// compatibility settings -// ---------------------------------------------------------------------------- - -// This setting determines the compatibility with 2.4 API: set it to 1 to -// enable it -// -// Default is 0. -// -// Recommended setting: 0 (please update your code instead!) -#define WXWIN_COMPATIBILITY_2_4 0 - -// This setting determines the compatibility with 2.6 API: set it to 0 to -// flag all cases of using deprecated functions. -// -// Default is 1 but please try building your code with 0 as the default will -// change to 0 in the next version and the deprecated functions will disappear -// in the version after it completely. -// -// Recommended setting: 0 (please update your code) -#define WXWIN_COMPATIBILITY_2_6 1 - -// Set to 0 for accurate dialog units, else 1 to be as per 2.1.16 and before. -// If migrating between versions, your dialogs may seem to shrink. -// -// Default is 1 -// -// Recommended setting: 0 (the new calculations are more correct!) -#define wxDIALOG_UNIT_COMPATIBILITY 0 - -// ---------------------------------------------------------------------------- -// debugging settings -// ---------------------------------------------------------------------------- - -// Generic comment about debugging settings: they are very useful if you don't -// use any other memory leak detection tools such as Purify/BoundsChecker, but -// are probably redundant otherwise. Also, Visual C++ CRT has the same features -// as wxWidgets memory debugging subsystem built in since version 5.0 and you -// may prefer to use it instead of built in memory debugging code because it is -// faster and more fool proof. -// -// Using VC++ CRT memory debugging is enabled by default in debug mode -// (__WXDEBUG__) if wxUSE_GLOBAL_MEMORY_OPERATORS is *not* enabled (i.e. is 0) -// and if __NO_VC_CRTDBG__ is not defined. - -// If 1, enables wxDebugContext, for writing error messages to file, etc. If -// __WXDEBUG__ is not defined, will still use the normal memory operators. -// -// Default is 0 -// -// Recommended setting: 0 -#ifdef __MWERKS__ - #define wxUSE_DEBUG_CONTEXT 1 -#else - #define wxUSE_DEBUG_CONTEXT 0 -#endif - -// If 1, enables debugging versions of wxObject::new and wxObject::delete *IF* -// __WXDEBUG__ is also defined. -// -// WARNING: this code may not work with all architectures, especially if -// alignment is an issue. This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 1 if you are not using a memory debugging tool, else 0 -#define wxUSE_MEMORY_TRACING 0 - -// In debug mode, cause new and delete to be redefined globally. -// If this causes problems (e.g. link errors which is a common problem -// especially if you use another library which also redefines the global new -// and delete), set this to 0. -// This switch is currently ignored for mingw / cygwin -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 - -// In debug mode, causes new to be defined to be WXDEBUG_NEW (see object.h). If -// this causes problems (e.g. link errors), set this to 0. You may need to set -// this to 0 if using templates (at least for VC++). This switch is currently -// ignored for mingw / cygwin / CodeWarrior -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_DEBUG_NEW_ALWAYS 0 - -// wxHandleFatalExceptions() may be used to catch the program faults at run -// time and, instead of terminating the program with a usual GPF message box, -// call the user-defined wxApp::OnFatalException() function. If you set -// wxUSE_ON_FATAL_EXCEPTION to 0, wxHandleFatalExceptions() will not work. -// -// This setting is for Win32 only and can only be enabled if your compiler -// supports Win32 structured exception handling (currently only VC++ does) -// -// Default is 1 -// -// Recommended setting: 1 if your compiler supports it. -#ifdef _MSC_VER - #define wxUSE_ON_FATAL_EXCEPTION 1 -#else - #define wxUSE_ON_FATAL_EXCEPTION 0 -#endif - -// ---------------------------------------------------------------------------- -// Unicode support -// ---------------------------------------------------------------------------- - -// Set wxUSE_UNICODE to 1 to compile wxWidgets in Unicode mode: wxChar will be -// defined as wchar_t, wxString will use Unicode internally. If you set this -// to 1, you must use wxT() macro for all literal strings in the program. -// -// Unicode is currently only fully supported under Windows NT/2000/XP (Windows 9x -// doesn't support it and the programs compiled in Unicode mode will not run -// under 9x). -// -// Default is 0 -// -// Recommended setting: 0 (unless you only plan to use Windows NT/2000/XP) -#ifndef wxUSE_UNICODE - #define wxUSE_UNICODE 0 -#endif - -// Set wxUSE_UNICODE_MSLU to 1 if you want to compile wxWidgets in Unicode mode -// and be able to run compiled apps under Windows 9x as well as NT/2000/XP. This -// setting enables use of unicows.dll from MSLU (MS Layer for Unicode, see -// http://www.microsoft.com/globaldev/Articles/mslu_announce.asp). Note that you -// will have to modify the makefiles to include unicows.lib import library as the first -// library (if you use MSVC, you can run the makefile with "nmake MSLU=1 UNICODE=1" -// command). -// -// If your compiler doesn't have unicows.lib, you can get a version of it at -// http://libunicows.sourceforge.net -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_UNICODE_MSLU 0 - -// Setting wxUSE_WCHAR_T to 1 gives you some degree of Unicode support without -// compiling the program in Unicode mode. More precisely, it will be possible -// to construct wxString from a wide (Unicode) string and convert any wxString -// to Unicode. -// -// Default is 1 -// -// Recommended setting: 1 for win32 else 0 -#if defined(__WIN32__) || defined(__WATCOMC__) - #define wxUSE_WCHAR_T 1 -#else - #define wxUSE_WCHAR_T 0 -#endif - -// ---------------------------------------------------------------------------- -// global features -// ---------------------------------------------------------------------------- - -// Compile library in exception-safe mode? If set to 1, the library will try to -// behave correctly in presence of exceptions (even though it still will not -// use the exceptions itself) and notify the user code about any unhandled -// exceptions. If set to 0, propagation of the exceptions through the library -// code will lead to undefined behaviour -- but the code itself will be -// slightly smaller and faster. -// -// Default is 1 -// -// Recommended setting: depends on whether you intend to use C++ exceptions -// in your own code (1 if you do, 0 if you don't) -#define wxUSE_EXCEPTIONS 1 - -// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from -// std::list<Foo*> and std::vector<Foo*>, with a compatibility interface, -// and for wxHashMap to be implemented with templates. -// -// Default is 0 -// -// Recommended setting: YMMV -#define wxUSE_STL 0 - -// Set wxUSE_EXTENDED_RTTI to 1 to use extended RTTI -// -// Default is 0 -// -// Recommended setting: 0 -#define wxUSE_EXTENDED_RTTI 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. -// -// Default is 1 -// -// Recommended setting: 1 (always) -#define wxUSE_LOG 1 - -// Recommended setting: 1 -#define wxUSE_LOGWINDOW 1 - -// Recommended setting: 1 -#define wxUSE_LOGGUI 1 - -// Recommended setting: 1 -#define wxUSE_LOG_DIALOG 1 - -// Support for command line parsing using wxCmdLineParser class. -// -// Default is 1 -// -// Recommended setting: 1 (can be set to 0 if you don't use the cmd line) -#define wxUSE_CMDLINE_PARSER 1 - -// Support for multithreaded applications: if 1, compile in thread classes -// (thread.h) and make the library a bit more thread safe. Although thread -// support is quite stable by now, you may still consider recompiling the -// library without it if you have no use for it - this will result in a -// somewhat smaller and faster operation. -// -// This is ignored under Win16, threads are only supported under Win32. -// -// Default is 1 -// -// Recommended setting: 0 unless you do plan to develop MT applications -#define wxUSE_THREADS 1 - -// If enabled (1), compiles wxWidgets streams classes -#define wxUSE_STREAMS 1 - -// Use standard C++ streams if 1. If 0, use wxWin streams implementation. -#ifdef __MWERKS__ - #define wxUSE_STD_IOSTREAM 1 -#else - #define wxUSE_STD_IOSTREAM 0 -#endif - -// Enable conversion to standard C++ string if 1. -// -// Default is 1 for most compilers. -// -// 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 header, 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_STRING 0 -#else - #define wxUSE_STD_STRING 1 -#endif - -// 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 -// of wxVsnprintf. The standard vsnprintf() supports positional parameters on -// many Unix systems but usually doesn't under Windows. -// -// Positional parameters are very useful when translating a program since using -// them in formatting strings allow translators to correctly reorder the -// translated sentences. -// -// Default is 1 -// -// Recommended setting: 1 if you want to support multiple languages -#define wxUSE_PRINTF_POS_PARAMS 1 - -// ---------------------------------------------------------------------------- -// non GUI features selection -// ---------------------------------------------------------------------------- - -// Set wxUSE_LONGLONG to 1 to compile the wxLongLong class. This is a 64 bit -// integer which is implemented in terms of native 64 bit integers if any or -// uses emulation otherwise. -// -// This class is required by wxDateTime and so you should enable it if you want -// to use wxDateTime. For most modern platforms, it will use the native 64 bit -// integers in which case (almost) all of its functions are inline and it -// almost does not take any space, so there should be no reason to switch it -// off. -// -// Recommended setting: 1 -#define wxUSE_LONGLONG 1 - -// Set wxUSE_(F)FILE to 1 to compile wx(F)File classes. wxFile uses low level -// POSIX functions for file access, wxFFile uses ANSI C stdio.h functions. -// -// Default is 1 -// -// Recommended setting: 1 (wxFile is highly recommended as it is required by -// i18n code, wxFileConfig and others) -#define wxUSE_FILE 1 -#define wxUSE_FFILE 1 - -// Use wxFSVolume class providing access to the configured/active mount points -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely disabled if you don't use it) -#define wxUSE_FSVOLUME 1 - -// Use wxStandardPaths class which allows to retrieve some standard locations -// in the file system -// -// Default is 1 -// -// Recommended setting: 1 (may be disabled to save space, but not much) -#define wxUSE_STDPATHS 1 - -// use wxTextBuffer class: required by wxTextFile -#define wxUSE_TEXTBUFFER 1 - -// use wxTextFile class: requires wxFile and wxTextBuffer, required by -// wxFileConfig -#define wxUSE_TEXTFILE 1 - -// i18n support: _() macro, wxLocale class. Requires wxTextFile. -#define wxUSE_INTL 1 - -// Set wxUSE_DATETIME to 1 to compile the wxDateTime and related classes which -// allow to manipulate dates, times and time intervals. wxDateTime replaces the -// old wxTime and wxDate classes which are still provided for backwards -// compatibility (and implemented in terms of wxDateTime). -// -// Note that this class is relatively new and is still officially in alpha -// stage because some features are not yet (fully) implemented. It is already -// quite useful though and should only be disabled if you are aiming at -// absolutely minimal version of the library. -// -// Requires: wxUSE_LONGLONG -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_DATETIME 1 - -// wxUSE_TIMEDATE enables compilation of the old wxDate and wxTime classes (not -// the same as wxDateTime!). These classes are obsolete and shouldn't be used -// in new code -// -// Default is 0 -// -// Recommended setting: 0 unless you have legacy code which uses these classes -#define wxUSE_TIMEDATE 0 - -// Set wxUSE_TIMER to 1 to compile wxTimer class -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_TIMER 1 - -// Use wxStopWatch clas. -// -// Default is 1 -// -// Recommended setting: 1 (needed by wxSocket) -#define wxUSE_STOPWATCH 1 - -// Setting wxUSE_CONFIG to 1 enables the use of wxConfig and related classes -// which allow the application to store its settings in the persistent -// storage. Setting this to 1 will also enable on-demand creation of the -// global config object in wxApp. -// -// See also wxUSE_CONFIG_NATIVE below. -// -// Recommended setting: 1 -#define wxUSE_CONFIG 1 - -// If wxUSE_CONFIG is 1, you may choose to use either the native config -// classes under Windows (using .INI files under Win16 and the registry under -// Win32) or the portable text file format used by the config classes under -// Unix. -// -// Default is 1 to use native classes. Note that you may still use -// wxFileConfig even if you set this to 1 - just the config object created by -// default for the applications needs will be a wxRegConfig or wxIniConfig and -// not wxFileConfig. -// -// Recommended setting: 0 (universal should not use native) -#if defined(__WIN32__) - #define wxUSE_CONFIG_NATIVE 0 -#else - #define wxUSE_CONFIG_NATIVE 0 -#endif - -// If wxUSE_DIALUP_MANAGER is 1, compile in wxDialUpManager class which allows -// to connect/disconnect from the network and be notified whenever the dial-up -// network connection is established/terminated. Requires wxUSE_DYNAMIC_LOADER. -// -// Default is 1. -// -// Recommended setting: 1 -#if defined(__WIN32__) - #define wxUSE_DIALUP_MANAGER 1 -#else - #define wxUSE_DIALUP_MANAGER 0 -#endif - -// Compile in classes for run-time DLL loading and function calling. -// Required by wxUSE_DIALUP_MANAGER. -// -// This setting is for Win32 only -// -// Default is 1. -// -// Recommended setting: 1 -#if defined(__WIN32__) - #define wxUSE_DYNLIB_CLASS 1 -#else - #define wxUSE_DYNLIB_CLASS 0 -#endif - -// experimental, don't use for now -#if defined(__WIN32__) - #define wxUSE_DYNAMIC_LOADER 1 -#else - #define wxUSE_DYNAMIC_LOADER 0 -#endif - -// Set to 1 to use socket classes -#define wxUSE_SOCKETS 1 - -// Set to 1 to enable virtual file systems (required by wxHTML) -#define wxUSE_FILESYSTEM 1 - -// Set to 1 to enable virtual ZIP filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ZIP 1 - -// Set to 1 to enable virtual archive filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_ARCHIVE 1 - -// wxArchive classes for accessing archives such as zip and tar -#define wxUSE_ARCHIVE_STREAMS 1 - -// Set to 1 to compile wxZipInput/OutputStream classes. -#define wxUSE_ZIPSTREAM 1 - -// Set to 1 to compile wxTarInput/OutputStream classes. -#define wxUSE_TARSTREAM 1 - -// Set to 1 to compile wxZlibInput/OutputStream classes. Also required by -// wxUSE_LIBPNG -#define wxUSE_ZLIB 1 - -// Set to 1 to enable virtual Internet filesystem (requires wxUSE_FILESYSTEM) -#define wxUSE_FS_INET 1 - -// If enabled, the code written by Apple will be used to write, in a portable -// way, float on the disk. See extended.c for the license which is different -// from wxWidgets one. -// -// Default is 1. -// -// Recommended setting: 1 unless you don't like the license terms (unlikely) -#define wxUSE_APPLE_IEEE 1 - -// Joystick support class -#if defined(__WIN32__) - #define wxUSE_JOYSTICK 1 -#else - #define wxUSE_JOYSTICK 1 -#endif - -// wxFontMapper class -#define wxUSE_FONTMAP 1 - -// wxMimeTypesManager class -#define wxUSE_MIMETYPE 1 - -// wxProtocol and related classes: if you want to use either of wxFTP, wxHTTP -// or wxURL you need to set this to 1. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_PROTOCOL 1 - -// The settings for the individual URL schemes -#define wxUSE_PROTOCOL_FILE 1 -#define wxUSE_PROTOCOL_FTP 1 -#define wxUSE_PROTOCOL_HTTP 1 - -// Define this to use wxURL class. -#define wxUSE_URL 1 - -// Support for wxVariant class used in several places throughout the library, -// notably in wxDataViewCtrl API. -// -// Default is 1. -// -// Recommended setting: 1 unless you want to reduce the library size as much as -// possible in which case setting this to 0 can gain up to 100KB. -#define wxUSE_VARIANT 1 - -// Support for regular expression matching via wxRegEx class: enable this to -// use POSIX regular expressions in your code. You need to compile regex -// library from src/regex to use it under Windows. -// -// Default is 0 -// -// Recommended setting: 1 if your compiler supports it, if it doesn't please -// contribute us a makefile for src/regex for it -#define wxUSE_REGEX 1 - -// wxSystemOptions class -#define wxUSE_SYSTEM_OPTIONS 1 - -// wxSound class -#define wxUSE_SOUND 1 - -// Use wxMediaCtrl -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_MEDIACTRL 1 - -// Use QuickTime -// -// Default is 0 -// -// Recommended setting: 1 if you have the QT SDK installed and you need it, else 0 -#define wxUSE_QUICKTIME 0 - -// Use DirectShow -// -// Default is 0 -// -// Recommended setting: 1 if the DirectX 7 SDK is installed (highly recommended), else 0 -#define wxUSE_DIRECTSHOW 0 - -// Use wxWidget's XRC XML-based resource system. Recommended. -// -// Default is 1 -// -// Recommended setting: 1 (requires wxUSE_XML) -#define wxUSE_XRC 1 - -// XML parsing classes. Note that their API will change in the future, so -// using wxXmlDocument and wxXmlNode in your app is not recommended. -// -// Default is 1 -// -// Recommended setting: 1 (required by XRC) -#if wxUSE_XRC -# define wxUSE_XML 1 -#else -# define wxUSE_XML 0 -#endif - -// Use wxWidget's AUI docking system -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_AUI 1 - - -// Enable the new wxGraphicsPath and wxGraphicsContext classes for an advanced -// 2D drawing API. (Still somewhat experimental) -// -// Please note that on Windows you will need to link with gdiplus.lib (use -// USE_GDIPLUS=1 for makefile builds) and distribute gdiplus.dll with your -// application if you want it to be runnable on pre-XP systems. -// -// Default is 0 -// -// Recommended setting: 1 -#ifndef wxUSE_GRAPHICS_CONTEXT -#define wxUSE_GRAPHICS_CONTEXT 0 -#endif - -// Set to 1 to compile MS Windows XP theme engine support -#define wxUSE_UXTHEME 0 - -// Set to 1 to auto-adapt to MS Windows XP themes where possible -// (notably, wxNotebook pages) -#define wxUSE_UXTHEME_AUTO 0 - -// ---------------------------------------------------------------------------- -// Individual GUI controls -// ---------------------------------------------------------------------------- - -// You must set wxUSE_CONTROLS to 1 if you are using any controls at all -// (without it, wxControl class is not compiled) -// -// Default is 1 -// -// Recommended setting: 1 (don't change except for very special programs) -#define wxUSE_CONTROLS 1 - -// wxPopupWindow class is a top level transient window. It is currently used -// to implement wxTipWindow -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0 if you don't wxUSE_TIPWINDOW) -#define wxUSE_POPUPWIN 1 - -// wxTipWindow allows to implement the custom tooltips, it is used by the -// context help classes. Requires wxUSE_POPUPWIN. -// -// Default is 1 -// -// Recommended setting: 1 (may be set to 0) -#define wxUSE_TIPWINDOW 1 - -// Each of the settings below corresponds to one wxWidgets control. They are -// all switched on by default but may be disabled if you are sure that your -// program (including any standard dialogs it can show!) doesn't need them and -// if you desperately want to save some space. If you use any of these you must -// set wxUSE_CONTROLS as well. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_ANIMATIONCTRL 1 // wxAnimationCtrl -#define wxUSE_BUTTON 1 // wxButton -#define wxUSE_BMPBUTTON 1 // wxBitmapButton -#define wxUSE_CALENDARCTRL 1 // wxCalendarCtrl -#define wxUSE_CHECKBOX 1 // wxCheckBox -#define wxUSE_CHECKLISTBOX 1 // wxCheckListBox -#define wxUSE_CHOICE 1 // wxChoice -#define wxUSE_COLLPANE 1 // wxCollapsiblePane -#define wxUSE_COLOURPICKERCTRL 1 // wxColourPickerCtrl -#define wxUSE_COMBOBOX 1 // wxComboBox -#define wxUSE_DATAVIEWCTRL 1 // wxDataViewCtrl -#define wxUSE_DATEPICKCTRL 1 // wxDatePickerCtrl -#define wxUSE_DIRPICKERCTRL 1 // wxDirPickerCtrl -#define wxUSE_FILEPICKERCTRL 1 // wxFilePickerCtrl -#define wxUSE_FONTPICKERCTRL 1 // wxFontPickerCtrl -#define wxUSE_GAUGE 1 // wxGauge -#define wxUSE_HYPERLINKCTRL 1 // wxHyperlinkCtrl -#define wxUSE_LISTBOX 1 // wxListBox -#define wxUSE_LISTCTRL 1 // wxListCtrl -#define wxUSE_RADIOBOX 1 // wxRadioBox -#define wxUSE_RADIOBTN 1 // wxRadioButton -#define wxUSE_SCROLLBAR 1 // wxScrollBar -#define wxUSE_SEARCHCTRL 1 // wxSearchCtrl -#define wxUSE_SLIDER 1 // wxSlider -#define wxUSE_SPINBTN 1 // wxSpinButton -#define wxUSE_SPINCTRL 1 // wxSpinCtrl -#define wxUSE_STATBOX 1 // wxStaticBox -#define wxUSE_STATLINE 1 // wxStaticLine -#define wxUSE_STATTEXT 1 // wxStaticText -#define wxUSE_STATBMP 1 // wxStaticBitmap -#define wxUSE_TEXTCTRL 1 // wxTextCtrl -#define wxUSE_TOGGLEBTN 1 // wxToggleButton -#define wxUSE_TREECTRL 1 // wxTreeCtrl - -// Use a status bar class? Depending on the value of wxUSE_NATIVE_STATUSBAR -// below either wxStatusBar95 or a generic wxStatusBar will be used. -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_STATUSBAR 1 - -// Two status bar implementations are available under Win32: the generic one -// or the wrapper around native control. For native look and feel the native -// version should be used. -// -// Default is 0. -// -// Recommended setting: 0 -#define wxUSE_NATIVE_STATUSBAR 0 - -// wxToolBar related settings: if wxUSE_TOOLBAR is 0, don't compile any toolbar -// classes at all. Otherwise, use the native toolbar class unless -// wxUSE_TOOLBAR_NATIVE is 0. -// -// Default is 0 for all settings. -// -// Recommended setting: 1 for wxUSE_TOOLBAR and 0 for wxUSE_TOOLBAR_NATIVE. -#define wxUSE_TOOLBAR 1 -#define wxUSE_TOOLBAR_NATIVE 0 - -// wxNotebook is a control with several "tabs" located on one of its sides. It -// may be used ot logically organise the data presented to the user instead of -// putting everything in one huge dialog. It replaces wxTabControl and related -// classes of wxWin 1.6x. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_NOTEBOOK 1 - -// wxListbook control is similar to wxNotebook but uses wxListCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_LISTBOOK 1 - -// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CHOICEBOOK 1 - -// wxTreebook control is similar to wxNotebook but uses wxTreeCtrl instead of -// the tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TREEBOOK 1 - -// wxToolbook control is similar to wxNotebook but uses wxToolBar instead of -// tabs -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_TOOLBOOK 1 - -// wxTabDialog is a generic version of wxNotebook but it is incompatible with -// the new class. It shouldn't be used in new code. -// -// Default is 0. -// -// Recommended setting: 0 (use wxNotebook) -#define wxUSE_TAB_DIALOG 0 - -// wxGrid class -// -// Default is 1, set to 0 to cut down compilation time and binaries size if you -// don't use it. -// -// Recommended setting: 1 -// -#define wxUSE_GRID 1 - -// wxProperty[Value/Form/List] classes, used by Dialog Editor -#define wxUSE_PROPSHEET 1 - - -// wxMiniFrame class: a frame with narrow title bar -// -// Default is 1. -// -// Recommended setting: 1 (it doesn't cost almost anything) -#define wxUSE_MINIFRAME 1 - - -// wxComboCtrl and related classes: combobox with custom popup window and -// not necessarily a listbox. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 except for wxUniv where it -// it used by wxComboBox -#define wxUSE_COMBOCTRL 1 - -// wxOwnerDrawnComboBox is a custom combobox allowing to paint the combobox -// items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0, except where it is -// needed as a base class for generic wxBitmapComboBox. -#define wxUSE_ODCOMBOBOX 1 - -// wxBitmapComboBox a combobox that can have images in front of text items. -// -// Default is 1. -// -// Recommended setting: 1 but can be safely set to 0 -#define wxUSE_BITMAPCOMBOBOX 1 - -// ---------------------------------------------------------------------------- -// Miscellaneous GUI stuff -// ---------------------------------------------------------------------------- - -// wxAcceleratorTable/Entry classes and support for them in wxMenu(Bar) -#define wxUSE_ACCEL 1 - -// Use wxCaret: a class implementing a "cursor" in a text control (called caret -// under Windows). -// -// Default is 1. -// -// Recommended setting: 1 (can be safely set to 0, not used by the library) -#define wxUSE_CARET 1 - -// Use wxDisplay class: it allows enumerating all displays on a system and -// working with them. -// -// Default is 0 because it isn't yet implemented on all platforms -// -// Recommended setting: 1 if you need it, can be safely set to 0 otherwise -#define wxUSE_DISPLAY 0 - -// Miscellaneous geometry code: needed for Canvas library -#define wxUSE_GEOMETRY 0 - -// Use wxImageList. This class is needed by wxNotebook, wxTreeCtrl and -// wxListCtrl. -// -// Default is 1. -// -// Recommended setting: 1 (set it to 0 if you don't use any of the controls -// enumerated above, then this class is mostly useless too) -#define wxUSE_IMAGLIST 1 - -// Use wxMenu, wxMenuBar, wxMenuItem. -// -// Default is 1. -// -// Recommended setting: 1 (can't be disabled under MSW) -#define wxUSE_MENUS 1 - -// Use wxSashWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SASH 1 - -// Use wxSplitterWindow class. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_SPLITTER 1 - -// Use wxToolTip and wxWindow::Set/GetToolTip() methods. -// -// Default is 1. -// -// Recommended setting: 1 -#ifdef __WIN32__ - #define wxUSE_TOOLTIPS 1 -#else - #define wxUSE_TOOLTIPS 0 -#endif - -// wxValidator class and related methods -#define wxUSE_VALIDATORS 1 - -// wxDC cacheing implementation -#define wxUSE_DC_CACHEING 1 - -// Set this to 1 to enable the use of DIB's for wxBitmap to support -// bitmaps > 16MB on Win95/98/Me. Set to 0 to use DDB's only. -#define wxUSE_DIB_FOR_BITMAP 0 - -// ---------------------------------------------------------------------------- -// common dialogs -// ---------------------------------------------------------------------------- - -// On rare occasions (e.g. using DJGPP) may want to omit common dialogs (e.g. -// file selector, printer dialog). Switching this off also switches off the -// printing architecture and interactive wxPrinterDC. -// -// Default is 1 -// -// Recommended setting: 1 (unless it really doesn't work) -#define wxUSE_COMMON_DIALOGS 1 - -// wxBusyInfo displays window with message when app is busy. Works in same way -// as wxBusyCursor -#define wxUSE_BUSYINFO 1 - -// Use single/multiple choice dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_CHOICEDLG 1 - -// Use colour picker dialog -// -// Default is 1 -// -// Recommended setting: 1 -#define wxUSE_COLOURDLG 1 - -// wxDirDlg class for getting a directory name from user -#define wxUSE_DIRDLG 1 - -// TODO: setting to choose the generic or native one - -// Use file open/save dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (used in many places in the library itself) -#if defined(__WIN32__) - #define wxUSE_FILEDLG 1 -#else - #define wxUSE_FILEDLG 1 -#endif - -// Use find/replace dialogs. -// -// Default is 1 -// -// Recommended setting: 1 (but may be safely set to 0) -#define wxUSE_FINDREPLDLG 1 - -// Use font picker dialog -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_FONTDLG 1 - -// Use wxMessageDialog and wxMessageBox. -// -// Default is 1 -// -// Recommended setting: 1 (used in the library itself) -#define wxUSE_MSGDLG 1 - -// progress dialog class for lengthy operations -#define wxUSE_PROGRESSDLG 1 - -// support for startup tips (wxShowTip &c) -#define wxUSE_STARTUP_TIPS 1 - -// text entry dialog and wxGetTextFromUser function -#define wxUSE_TEXTDLG 1 - -// number entry dialog -#define wxUSE_NUMBERDLG 1 - -// splash screen class -#define wxUSE_SPLASH 1 - -// wizards -#define wxUSE_WIZARDDLG 1 - -// Compile in wxAboutBox() function showing the standard "About" dialog. -// -// Default is 1 -// -// Recommended setting: 1 but can be set to 0 to save some space if you don't -// use this function -#define wxUSE_ABOUTDLG 1 - -// ---------------------------------------------------------------------------- -// Metafiles support -// ---------------------------------------------------------------------------- - -// Windows supports the graphics format known as metafile which is, though not -// portable, is widely used under Windows and so is supported by wxWin (under -// Windows only, of course). Win16 (Win3.1) used the so-called "Window -// MetaFiles" or WMFs which were replaced with "Enhanced MetaFiles" or EMFs in -// Win32 (Win9x, NT, 2000). Both of these are supported in wxWin and, by -// default, WMFs will be used under Win16 and EMFs under Win32. This may be -// changed by setting wxUSE_WIN_METAFILES_ALWAYS to 1 and/or setting -// wxUSE_ENH_METAFILE to 0. You may also set wxUSE_METAFILE to 0 to not compile -// in any metafile related classes at all. -// -// Default is 1 for wxUSE_ENH_METAFILE and 0 for wxUSE_WIN_METAFILES_ALWAYS. -// -// Recommended setting: default or 0 for everything for portable programs. -#if defined(__WIN32__) - #define wxUSE_METAFILE 1 - #define wxUSE_ENH_METAFILE 1 - #define wxUSE_WIN_METAFILES_ALWAYS 0 -#else - #define wxUSE_METAFILE 0 - #define wxUSE_ENH_METAFILE 0 - #define wxUSE_WIN_METAFILES_ALWAYS 0 -#endif - -// ---------------------------------------------------------------------------- -// Big GUI components -// ---------------------------------------------------------------------------- - -// Set to 0 to disable MDI support. -// -// Requires wxUSE_NOTEBOOK under platforms other than MSW. -// -// Default is 1. -// -// Recommended setting: 1, can be safely set to 0. -#define wxUSE_MDI 1 - -// Set to 0 to disable document/view architecture -#define wxUSE_DOC_VIEW_ARCHITECTURE 1 - -// Set to 0 to disable MDI document/view architecture -// -// Requires wxUSE_MDI && wxUSE_DOC_VIEW_ARCHITECTURE -#define wxUSE_MDI_ARCHITECTURE 1 - -// Set to 0 to disable print/preview architecture code -#define wxUSE_PRINTING_ARCHITECTURE 1 - -// wxHTML sublibrary allows to display HTML in wxWindow programs and much, -// much more. -// -// Default is 1. -// -// Recommended setting: 1 (wxHTML is great!), set to 0 if you want compile a -// smaller library. -#define wxUSE_HTML 1 - -// Setting wxUSE_GLCANVAS to 1 enables OpenGL support. You need to have OpenGL -// headers and libraries to be able to compile the library with wxUSE_GLCANVAS -// set to 1. Note that for some compilers (notably Microsoft Visual C++) you -// will need to manually add opengl32.lib and glu32.lib to the list of -// libraries linked with your program if you use OpenGL. -// -// Default is 0. -// -// Recommended setting: 1 if you intend to use OpenGL, 0 otherwise -#if defined(__WIN32__) - #define wxUSE_GLCANVAS 1 -#else - #define wxUSE_GLCANVAS 0 -#endif - -// wxRichTextCtrl allows editing of styled text. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 if you want compile a -// smaller library. -#define wxUSE_RICHTEXT 1 - -// wxTreeLayout class -#define wxUSE_TREELAYOUT 1 - -// ---------------------------------------------------------------------------- -// Data transfer -// ---------------------------------------------------------------------------- - -// Use wxClipboard class for clipboard copy/paste. -// -// Default is 1. -// -// Recommended setting: 1 -#define wxUSE_CLIPBOARD 1 - -// Use wxDataObject and related classes. Needed for clipboard and OLE drag and -// drop -// -// Default is 1. -// -// Recommended setting: 1 for WIN32 -#define wxUSE_DATAOBJ 1 - -// Use wxDropTarget and wxDropSource classes for drag and drop (this is -// different from "built in" drag and drop in wxTreeCtrl which is always -// available). Requires wxUSE_DATAOBJ. -// -// Default is 1. -// -// Recommended setting: 1 -#if defined(__WIN32__) - #define wxUSE_DRAG_AND_DROP 1 -#else - #define wxUSE_DRAG_AND_DROP 0 -#endif - -// Use wxAccessible for enhanced and customisable accessibility. -// Depends on wxUSE_OLE. -// -// Default is 0. -// -// Recommended setting (at present): 0 -#define wxUSE_ACCESSIBILITY 0 - -// ---------------------------------------------------------------------------- -// miscellaneous settings -// ---------------------------------------------------------------------------- - -// wxSingleInstanceChecker class allows to verify at startup if another program -// instance is running (it is only available under Win32) -// -// Default is 1 -// -// Recommended setting: 1 (the class is tiny, disabling it won't save much -// space) -#if defined(__WIN32__) - #define wxUSE_SNGLINST_CHECKER 1 -#else - #define wxUSE_SNGLINST_CHECKER 0 -#endif - -// Drag image -#define wxUSE_DRAGIMAGE 1 - -// Interprocess communication -#define wxUSE_IPC 1 - -// Help -#if defined(__WIN32__) - #define wxUSE_HELP 1 -#else - #define wxUSE_HELP 1 -#endif - -// MS help -#define wxUSE_MS_HTML_HELP 1 - -// Use wxHTML-based help controller -#define wxUSE_WXHTML_HELP 1 - -// Use resources -#define wxUSE_RESOURCES 0 - -// Window layout constraint system -#define wxUSE_CONSTRAINTS 1 - -// Splines -#define wxUSE_SPLINES 1 - -// Include mouse wheel support -#define wxUSE_MOUSEWHEEL 1 - -// ---------------------------------------------------------------------------- -// postscript support settings -// ---------------------------------------------------------------------------- - -// Set to 1 for PostScript device context. -#define wxUSE_POSTSCRIPT 1 - -// Set to 1 to use font metric files in GetTextExtent -#define wxUSE_AFM_FOR_POSTSCRIPT 1 - -// ---------------------------------------------------------------------------- -// database classes -// ---------------------------------------------------------------------------- - -// Define 1 to use ODBC classes -#define wxUSE_ODBC 1 - -// For backward compatibility reasons, this parameter now only controls the -// default scrolling method used by cursors. This default behavior can be -// overriden by setting the second param of wxDB::wxDbGetConnection() or -// wxDb() constructor to indicate whether the connection (and any wxDbTable()s -// that use the connection) should support forward only scrolling of cursors, -// or both forward and backward support for backward scrolling cursors is -// dependent on the data source as well as the ODBC driver being used. -#define wxODBC_FWD_ONLY_CURSORS 0 - -// Default is 0. Set to 1 to use the deprecated classes, enum types, function, -// member variables. With a setting of 1, full backward compatibility with the -// 2.0.x release is possible. It is STRONGLY recommended that this be set to 0, -// as future development will be done only on the non-deprecated -// functions/classes/member variables/etc. -#define wxODBC_BACKWARD_COMPATABILITY 0 - -// ---------------------------------------------------------------------------- -// other compiler (mis)features -// ---------------------------------------------------------------------------- - -// Set this to 0 if your compiler can't cope with omission of prototype -// parameters. -// -// Default is 1. -// -// Recommended setting: 1 (should never need to set this to 0) -#define REMOVE_UNUSED_ARG 1 - -// VC++ 4.2 and above allows <iostream> and <iostream.h> but you can't mix -// them. Set to 1 for <iostream.h>, 0 for <iostream> -// -// Default is 1. -// -// Recommended setting: whatever your compiler likes more -#ifdef __MWERKS__ - #define wxUSE_IOSTREAMH 1 -#else - #define wxUSE_IOSTREAMH 0 -#endif - -// ---------------------------------------------------------------------------- -// image format support -// ---------------------------------------------------------------------------- - -// wxImage supports many different image formats which can be configured at -// compile-time. BMP is always supported, others are optional and can be safely -// disabled if you don't plan to use images in such format sometimes saving -// substantial amount of code in the final library. -// -// Some formats require an extra library which is included in wxWin sources -// which is mentioned if it is the case. - -// Set to 1 for wxImage support (recommended). -#define wxUSE_IMAGE 1 - -// Set to 1 for PNG format support (requires libpng). Also requires wxUSE_ZLIB. -#define wxUSE_LIBPNG 1 - -// Set to 1 for JPEG format support (requires libjpeg) -#define wxUSE_LIBJPEG 1 - -// Set to 1 for TIFF format support (requires libtiff) -#define wxUSE_LIBTIFF 1 - -// Set to 1 for GIF format support -#define wxUSE_GIF 1 - -// Set to 1 for PNM format support -#define wxUSE_PNM 1 - -// Set to 1 for PCX format support -#define wxUSE_PCX 1 - -// Set to 1 for IFF format support (Amiga format) -#define wxUSE_IFF 0 - -// Set to 1 for XPM format support -#define wxUSE_XPM 1 - -// Set to 1 for MS Icons and Cursors format support -#define wxUSE_ICO_CUR 0 - -// Set to 1 to compile in wxPalette class - #define wxUSE_PALETTE 1 - -// ---------------------------------------------------------------------------- -// Windows-only settings -// ---------------------------------------------------------------------------- -#if defined(__WINDOWS__) - -// Set this to 1 if you want to use wxWidgets and MFC in the same program. This -// will override some other settings (see below) -// -// Default is 0. -// -// Recommended setting: 0 unless you really have to use MFC -#define wxUSE_MFC 0 - -// Set this to 1 for generic OLE support: this is required for drag-and-drop, -// clipboard, OLE Automation. Only set it to 0 if your compiler is very old and -// can't compile/doesn't have the OLE headers. -// -// Default is 1. -// -// Recommended setting: 1 for WIN32 - #define wxUSE_OLE 1 - -// Set to 0 to disable PostScript print/preview architecture code under Windows -// (just use Windows printing). -#if defined(__WIN32__) - #define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 1 -#else - #define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 0 -#endif - -// Set this to 1 to use RICHEDIT controls for wxTextCtrl with style wxTE_RICH -// which allows to put more than ~32Kb of text in it even under Win9x (NT -// doesn't have such limitation). -// -// Default is 1 for compilers which support it -// -// Recommended setting: 1, only set it to 0 if your compiler doesn't have -// or can't compile <richedit.h> -#if defined(__WIN95__) && !defined(__WINE__) && !defined(__GNUWIN32_OLD__) -// TODO: This should be ifdef'ed for any compilers that don't support -// RichEdit 2.0 but do have RichEdit 1.0... - #define wxUSE_RICHEDIT 0 // currently not supported - #define wxUSE_RICHEDIT2 0 // currently not supported - -#else - #define wxUSE_RICHEDIT 0 - #define wxUSE_RICHEDIT2 0 -#endif - -// Set this to 1 to enable support for the owner-drawn menu and listboxes. -// -// Default is 1. -// -// Recommended setting: 1, set to 0 for a small library size reduction -#define wxUSE_OWNER_DRAWN 0 - -// Set this to 1 to be able to use wxCrashReport::Generate() to create mini -// dumps of your program when it crashes (or at any other moment) -// -// Default is 1 if supported by the compiler (VC++ and recent BC++ only). -// -// Recommended setting: 1, set to 0 if your programs never crash -#define wxUSE_CRASHREPORT 1 - -#endif - -// ---------------------------------------------------------------------------- -// unknown settings -// ---------------------------------------------------------------------------- - -// If 1, enables provision of run-time type information. -// NOW MANDATORY: don't change. -#define wxUSE_DYNAMIC_CLASSES 1 - -//?????? -#if defined(__WIN32__) - #define wxUSE_DDE_FOR_IPC 0 -#else - #define wxUSE_DDE_FOR_IPC 0 -#endif - -#endif // _WX_UNIV_SETUP_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/slider.h b/desmume/src/windows/wx/include/wx/univ/slider.h deleted file mode 100644 index d5d5e4f0c..000000000 --- a/desmume/src/windows/wx/include/wx/univ/slider.h +++ /dev/null @@ -1,226 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/slider.h -// Purpose: wxSlider control for wxUniversal -// Author: Vadim Zeitlin -// Modified by: -// Created: 09.02.01 -// RCS-ID: $Id: slider.h 41227 2006-09-14 19:36:47Z VZ $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_SLIDER_H_ -#define _WX_UNIV_SLIDER_H_ - -#include "wx/univ/scrthumb.h" - -// ---------------------------------------------------------------------------- -// the actions supported by this control -// ---------------------------------------------------------------------------- - -// our actions are the same as scrollbars - -#define wxACTION_SLIDER_START _T("start") // to the beginning -#define wxACTION_SLIDER_END _T("end") // to the end -#define wxACTION_SLIDER_LINE_UP _T("lineup") // one line up/left -#define wxACTION_SLIDER_PAGE_UP _T("pageup") // one page up/left -#define wxACTION_SLIDER_LINE_DOWN _T("linedown") // one line down/right -#define wxACTION_SLIDER_PAGE_DOWN _T("pagedown") // one page down/right -#define wxACTION_SLIDER_PAGE_CHANGE _T("pagechange")// change page by numArg - -#define wxACTION_SLIDER_THUMB_DRAG _T("thumbdrag") -#define wxACTION_SLIDER_THUMB_MOVE _T("thumbmove") -#define wxACTION_SLIDER_THUMB_RELEASE _T("thumbrelease") - -// ---------------------------------------------------------------------------- -// wxSlider -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxSlider : public wxSliderBase, - public wxControlWithThumb -{ -public: - // ctors and such - wxSlider(); - - wxSlider(wxWindow *parent, - wxWindowID id, - int value, int minValue, int maxValue, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSL_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSliderNameStr); - - bool Create(wxWindow *parent, - wxWindowID id, - int value, int minValue, int maxValue, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSL_HORIZONTAL, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxSliderNameStr); - - // implement base class pure virtuals - virtual int GetValue() const; - virtual void SetValue(int value); - - virtual void SetRange(int minValue, int maxValue); - virtual int GetMin() const; - virtual int GetMax() const; - - virtual void SetLineSize(int lineSize); - virtual void SetPageSize(int pageSize); - virtual int GetLineSize() const; - virtual int GetPageSize() const; - - virtual void SetThumbLength(int lenPixels); - virtual int GetThumbLength() const; - - virtual void SetTickFreq(int n, int WXUNUSED(dummy) = 0); - virtual int GetTickFreq() const { return m_tickFreq; } - - // wxUniv-specific methods - // ----------------------- - - // is this a vertical slider? - bool IsVert() const { return (GetWindowStyle() & wxSL_VERTICAL) != 0; } - - // get the slider orientation - wxOrientation GetOrientation() const - { return IsVert() ? wxVERTICAL : wxHORIZONTAL; } - - // do we have labels? - bool HasLabels() const - { return ((GetWindowStyle() & wxSL_LABELS) != 0) && - ((GetWindowStyle() & (wxSL_TOP|wxSL_BOTTOM|wxSL_LEFT|wxSL_RIGHT)) != 0); } - - // do we have ticks? - bool HasTicks() const - { return ((GetWindowStyle() & wxSL_TICKS) != 0) && - ((GetWindowStyle() & (wxSL_TOP|wxSL_BOTTOM|wxSL_LEFT|wxSL_RIGHT|wxSL_BOTH)) != 0); } - - // implement wxControlWithThumb interface - virtual wxWindow *GetWindow() { return this; } - virtual bool IsVertical() const { return IsVert(); } - - virtual wxScrollThumb::Shaft HitTest(const wxPoint& pt) const; - virtual wxCoord ThumbPosToPixel() const; - virtual int PixelToThumbPos(wxCoord x) const; - - virtual void SetShaftPartState(wxScrollThumb::Shaft shaftPart, - int flag, - bool set = true); - - virtual void OnThumbDragStart(int pos); - virtual void OnThumbDrag(int pos); - virtual void OnThumbDragEnd(int pos); - virtual void OnPageScrollStart(); - virtual bool OnPageScroll(int pageInc); - - // for wxStdSliderInputHandler - wxScrollThumb& GetThumb() { return m_thumb; } - - virtual bool PerformAction(const wxControlAction& action, - long numArg = 0, - const wxString& strArg = wxEmptyString); - - static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return GetStdInputHandler(handlerDef); - } - -protected: - enum - { - INVALID_THUMB_VALUE = -0xffff - }; - - // overridden base class virtuals - virtual wxSize DoGetBestClientSize() const; - virtual void DoDraw(wxControlRenderer *renderer); - virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } - - // event handlers - void OnSize(wxSizeEvent& event); - - // common part of all ctors - void Init(); - - // normalize the value to fit in the range - int NormalizeValue(int value) const; - - // change the value by the given increment, return true if really changed - bool ChangeValueBy(int inc); - - // change the value to the given one - bool ChangeValueTo(int value); - - // is the value inside the range? - bool IsInRange(int value) { return (value >= m_min) && (value <= m_max); } - - // format the value for printing as label - virtual wxString FormatValue(int value) const; - - // calculate max label size - wxSize CalcLabelSize() const; - - // calculate m_rectLabel/Slider - void CalcGeometry(); - - // get the thumb size - wxSize GetThumbSize() const; - - // get the shaft rect (uses m_rectSlider which is supposed to be calculated) - wxRect GetShaftRect() const; - - // calc the current thumb position using the shaft rect (if the pointer is - // NULL, we calculate it here too) - void CalcThumbRect(const wxRect *rectShaft, - wxRect *rectThumbOut, - wxRect *rectLabelOut, - int value = INVALID_THUMB_VALUE) const; - - // return the slider rect calculating it if needed - const wxRect& GetSliderRect() const; - - // refresh the current thumb position - void RefreshThumb(); - -private: - // get the default thumb size (without using m_thumbSize) - wxSize GetDefaultThumbSize() const; - - // the object which manages our thumb - wxScrollThumb m_thumb; - - // the slider range and value - int m_min, - m_max, - m_value; - - // the tick frequence (default is 1) - int m_tickFreq; - - // the line and page increments (logical units) - int m_lineSize, - m_pageSize; - - // the size of the thumb (in pixels) - int m_thumbSize; - - // the part of the client area reserved for the label, the ticks and the - // part for the slider itself - wxRect m_rectLabel, - m_rectTicks, - m_rectSlider; - - // the state of the thumb (wxCONTROL_XXX constants sum) - int m_thumbFlags; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxSlider) -}; - -#endif // _WX_UNIV_SLIDER_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/spinbutt.h b/desmume/src/windows/wx/include/wx/univ/spinbutt.h deleted file mode 100644 index 4b483d8ee..000000000 --- a/desmume/src/windows/wx/include/wx/univ/spinbutt.h +++ /dev/null @@ -1,122 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/spinbutt.h -// Purpose: universal version of wxSpinButton -// Author: Vadim Zeitlin -// Modified by: -// Created: 21.01.01 -// RCS-ID: $Id: spinbutt.h 42715 2006-10-30 12:24:13Z VS $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_SPINBUTT_H_ -#define _WX_UNIV_SPINBUTT_H_ - -#include "wx/univ/scrarrow.h" - -// ---------------------------------------------------------------------------- -// wxSpinButton -// ---------------------------------------------------------------------------- - -// actions supported by this control -#define wxACTION_SPIN_INC _T("inc") -#define wxACTION_SPIN_DEC _T("dec") - -class WXDLLEXPORT wxSpinButton : public wxSpinButtonBase, - public wxControlWithArrows -{ -public: - wxSpinButton(); - wxSpinButton(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_VERTICAL | wxSP_ARROW_KEYS, - const wxString& name = wxSPIN_BUTTON_NAME); - - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxSP_VERTICAL | wxSP_ARROW_KEYS, - const wxString& name = wxSPIN_BUTTON_NAME); - - // implement wxSpinButtonBase methods - virtual int GetValue() const; - virtual void SetValue(int val); - virtual void SetRange(int minVal, int maxVal); - - // implement wxControlWithArrows methods - virtual wxRenderer *GetRenderer() const { return m_renderer; } - virtual wxWindow *GetWindow() { return this; } - virtual bool IsVertical() const { return wxSpinButtonBase::IsVertical(); } - virtual int GetArrowState(wxScrollArrows::Arrow arrow) const; - virtual void SetArrowFlag(wxScrollArrows::Arrow arrow, int flag, bool set); - virtual bool OnArrow(wxScrollArrows::Arrow arrow); - virtual wxScrollArrows::Arrow HitTestArrow(const wxPoint& pt) const; - - // for wxStdSpinButtonInputHandler - const wxScrollArrows& GetArrows() { return m_arrows; } - - virtual bool PerformAction(const wxControlAction& action, - long numArg = 0, - const wxString& strArg = wxEmptyString); - - static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return GetStdInputHandler(handlerDef); - } - -protected: - virtual wxSize DoGetBestClientSize() const; - virtual void DoDraw(wxControlRenderer *renderer); - virtual wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } - - // the common part of all ctors - void Init(); - - // normalize the value to fit into min..max range - int NormalizeValue(int value) const; - - // change the value by +1/-1 and send the event, return true if value was - // changed - bool ChangeValue(int inc); - - // get the rectangles for our 2 arrows - void CalcArrowRects(wxRect *rect1, wxRect *rect2) const; - - // the current controls value - int m_value; - -private: - // the object which manages our arrows - wxScrollArrows m_arrows; - - // the state (combination of wxCONTROL_XXX flags) of the arrows - int m_arrowsState[wxScrollArrows::Arrow_Max]; - - DECLARE_DYNAMIC_CLASS(wxSpinButton) -}; - -// ---------------------------------------------------------------------------- -// wxStdSpinButtonInputHandler: manages clicks on them (use arrows like -// wxStdScrollBarInputHandler) and processes keyboard events too -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStdSpinButtonInputHandler : public wxStdInputHandler -{ -public: - wxStdSpinButtonInputHandler(wxInputHandler *inphand); - - virtual bool HandleKey(wxInputConsumer *consumer, - const wxKeyEvent& event, - bool pressed); - virtual bool HandleMouse(wxInputConsumer *consumer, - const wxMouseEvent& event); - virtual bool HandleMouseMove(wxInputConsumer *consumer, - const wxMouseEvent& event); -}; - -#endif // _WX_UNIV_SPINBUTT_H_ - diff --git a/desmume/src/windows/wx/include/wx/univ/statbmp.h b/desmume/src/windows/wx/include/wx/univ/statbmp.h deleted file mode 100644 index 05a9b2aed..000000000 --- a/desmume/src/windows/wx/include/wx/univ/statbmp.h +++ /dev/null @@ -1,74 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/statbmp.h -// Purpose: wxStaticBitmap class for wxUniversal -// Author: Vadim Zeitlin -// Modified by: -// Created: 25.08.00 -// RCS-ID: $Id: statbmp.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_STATBMP_H_ -#define _WX_UNIV_STATBMP_H_ - -#include "wx/bitmap.h" - -// ---------------------------------------------------------------------------- -// wxStaticBitmap -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStaticBitmap : public wxStaticBitmapBase -{ -public: - wxStaticBitmap() - { - } - - wxStaticBitmap(wxWindow *parent, - const wxBitmap& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0) - { - Create(parent, wxID_ANY, label, pos, size, style); - } - - wxStaticBitmap(wxWindow *parent, - wxWindowID id, - const wxBitmap& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxStaticBitmapNameStr) - { - Create(parent, id, label, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxBitmap& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxStaticBitmapNameStr); - - virtual void SetBitmap(const wxBitmap& bitmap); - virtual void SetIcon(const wxIcon& icon); - virtual wxBitmap GetBitmap() const { return m_bitmap; } - - wxIcon GetIcon() const; - - virtual bool HasTransparentBackground() { return true; } - -protected: - virtual void DoDraw(wxControlRenderer *renderer); - -private: - // the bitmap which we show - wxBitmap m_bitmap; - - DECLARE_DYNAMIC_CLASS(wxStaticBitmap) -}; - -#endif // _WX_UNIV_STATBMP_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/statbox.h b/desmume/src/windows/wx/include/wx/univ/statbox.h deleted file mode 100644 index f732dc1eb..000000000 --- a/desmume/src/windows/wx/include/wx/univ/statbox.h +++ /dev/null @@ -1,65 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/statbox.h -// Purpose: wxStaticBox declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 15.08.00 -// RCS-ID: $Id: statbox.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_STATBOX_H_ -#define _WX_UNIV_STATBOX_H_ - -class WXDLLEXPORT wxStaticBox : public wxStaticBoxBase -{ -public: - wxStaticBox() { } - - wxStaticBox(wxWindow *parent, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize) - { - Create(parent, wxID_ANY, label, pos, size); - } - - wxStaticBox(wxWindow *parent, wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxStaticBoxNameStr) - { - Create(parent, id, label, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxStaticBoxNameStr); - - // the origin of the static box is inside the border and under the label: - // take account of this - virtual wxPoint GetBoxAreaOrigin() const; - - // returning true from here ensures that we act as a container window for - // our children - virtual bool IsStaticBox() const { return true; } - -protected: - // draw the control - virtual void DoDraw(wxControlRenderer *renderer); - - // get the size of the border - wxRect GetBorderGeometry() const; - -private: - DECLARE_DYNAMIC_CLASS(wxStaticBox) -}; - -#endif // _WX_UNIV_STATBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/statline.h b/desmume/src/windows/wx/include/wx/univ/statline.h deleted file mode 100644 index bd4947017..000000000 --- a/desmume/src/windows/wx/include/wx/univ/statline.h +++ /dev/null @@ -1,56 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/statline.h -// Purpose: wxStaticLine class for wxUniversal -// Author: Vadim Zeitlin -// Created: 28.06.99 -// Version: $Id: statline.h 43874 2006-12-09 14:52:59Z VZ $ -// Copyright: (c) 1999 Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_STATLINE_H_ -#define _WX_UNIV_STATLINE_H_ - -class WXDLLEXPORT wxStaticLine : public wxStaticLineBase -{ -public: - // constructors and pseudo-constructors - wxStaticLine() { } - - wxStaticLine(wxWindow *parent, - const wxPoint &pos, - wxCoord length, - long style = wxLI_HORIZONTAL) - { - Create(parent, wxID_ANY, pos, - style & wxLI_VERTICAL ? wxSize(wxDefaultCoord, length) - : wxSize(length, wxDefaultCoord), - style); - } - - wxStaticLine(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxLI_HORIZONTAL, - const wxString &name = wxStaticLineNameStr ) - { - Create(parent, id, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxLI_HORIZONTAL, - const wxString &name = wxStaticLineNameStr ); - -protected: - virtual void DoDraw(wxControlRenderer *renderer); - -private: - DECLARE_DYNAMIC_CLASS(wxStaticLine) -}; - -#endif // _WX_UNIV_STATLINE_H_ - diff --git a/desmume/src/windows/wx/include/wx/univ/stattext.h b/desmume/src/windows/wx/include/wx/univ/stattext.h deleted file mode 100644 index d5e210d13..000000000 --- a/desmume/src/windows/wx/include/wx/univ/stattext.h +++ /dev/null @@ -1,66 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/stattext.h -// Purpose: wxStaticText -// Author: Vadim Zeitlin -// Modified by: -// Created: 14.08.00 -// RCS-ID: $Id: stattext.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_STATTEXT_H_ -#define _WX_UNIV_STATTEXT_H_ - -class WXDLLEXPORT wxStaticText : public wxStaticTextBase -{ -public: - wxStaticText() { } - - // usual ctor - wxStaticText(wxWindow *parent, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize) - { - Create(parent, wxID_ANY, label, pos, size, 0, wxStaticTextNameStr); - } - - // full form - wxStaticText(wxWindow *parent, - wxWindowID id, - const wxString& label, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString &name = wxStaticTextNameStr) - { - Create(parent, id, label, pos, size, style, name); - } - - // function ctor - bool Create(wxWindow *parent, - wxWindowID id, - const wxString &label, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = 0, - const wxString &name = wxStaticTextNameStr); - - // implementation only from now on - - virtual void SetLabel(const wxString& label); - - virtual bool IsFocused() const { return false; } - -protected: - // calculate the optimal size for the label - virtual wxSize DoGetBestClientSize() const; - - // draw the control - virtual void DoDraw(wxControlRenderer *renderer); - - DECLARE_ABSTRACT_CLASS(wxStaticText) -}; - -#endif // _WX_UNIV_STATTEXT_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/statusbr.h b/desmume/src/windows/wx/include/wx/univ/statusbr.h deleted file mode 100644 index eb657b0e4..000000000 --- a/desmume/src/windows/wx/include/wx/univ/statusbr.h +++ /dev/null @@ -1,110 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/statusbr.h -// Purpose: wxStatusBarUniv: wxStatusBar for wxUniversal declaration -// Author: Vadim Zeitlin -// Modified by: -// Created: 14.10.01 -// RCS-ID: $Id: statusbr.h 37393 2006-02-08 21:47:09Z VZ $ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_STATUSBR_H_ -#define _WX_UNIV_STATUSBR_H_ - -#include "wx/univ/inpcons.h" -#include "wx/arrstr.h" - -// ---------------------------------------------------------------------------- -// wxStatusBar: a window near the bottom of the frame used for status info -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxStatusBarUniv : public wxStatusBarBase, - public wxInputConsumer -{ -public: - wxStatusBarUniv() { Init(); } - - wxStatusBarUniv(wxWindow *parent, - wxWindowID id = wxID_ANY, - long style = 0, - const wxString& name = wxPanelNameStr) - { - Init(); - - (void)Create(parent, id, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - long style = 0, - const wxString& name = wxPanelNameStr); - - // set field count/widths - virtual void SetFieldsCount(int number = 1, const int *widths = NULL); - virtual void SetStatusWidths(int n, const int widths[]); - - // get/set the text of the given field - virtual void SetStatusText(const wxString& text, int number = 0); - virtual wxString GetStatusText(int number = 0) const; - - // Get the position and size of the field's internal bounding rectangle - virtual bool GetFieldRect(int i, wxRect& rect) const; - - // sets the minimal vertical size of the status bar - virtual void SetMinHeight(int height); - - // get the dimensions of the horizontal and vertical borders - virtual int GetBorderX() const; - virtual int GetBorderY() const; - - // wxInputConsumer pure virtual - virtual wxWindow *GetInputWindow() const - { return wx_const_cast(wxStatusBar*, this); } - -protected: - // recalculate the field widths - void OnSize(wxSizeEvent& event); - - // draw the statusbar - virtual void DoDraw(wxControlRenderer *renderer); - - // tell them about our preferred height - virtual wxSize DoGetBestSize() const; - - // override DoSetSize() to prevent the status bar height from changing - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - - // get the (fixed) status bar height - wxCoord GetHeight() const; - - // get the rectangle containing all the fields and the border between them - // - // also updates m_widthsAbs if necessary - wxRect GetTotalFieldRect(wxCoord *borderBetweenFields); - - // get the rect for this field without ani side effects (see code) - wxRect DoGetFieldRect(int n) const; - - // refresh the given field - void RefreshField(int i); - - // common part of all ctors - void Init(); - -private: - // the status fields strings - wxArrayString m_statusText; - - // the absolute status fields widths - wxArrayInt m_widthsAbs; - - DECLARE_DYNAMIC_CLASS(wxStatusBarUniv) - DECLARE_EVENT_TABLE() - WX_DECLARE_INPUT_CONSUMER() -}; - -#endif // _WX_UNIV_STATUSBR_H_ - diff --git a/desmume/src/windows/wx/include/wx/univ/stdrend.h b/desmume/src/windows/wx/include/wx/univ/stdrend.h deleted file mode 100644 index 8994b37b8..000000000 --- a/desmume/src/windows/wx/include/wx/univ/stdrend.h +++ /dev/null @@ -1,352 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/stdrend.h -// Purpose: wxStdRenderer class declaration -// Author: Vadim Zeitlin -// Created: 2006-09-18 -// RCS-ID: $Id: stdrend.h 42716 2006-10-30 12:33:25Z VS $ -// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_STDREND_H_ -#define _WX_UNIV_STDREND_H_ - -#include "wx/univ/renderer.h" -#include "wx/pen.h" - -class WXDLLEXPORT wxColourScheme; - -// ---------------------------------------------------------------------------- -// wxStdRenderer: implements as much of wxRenderer API as possible generically -// ---------------------------------------------------------------------------- - -class wxStdRenderer : public wxRenderer -{ -public: - // the renderer will use the given scheme, whose lifetime must be at least - // as long as of this object itself, to choose the colours for drawing - wxStdRenderer(const wxColourScheme *scheme); - - virtual void DrawBackground(wxDC& dc, - const wxColour& col, - const wxRect& rect, - int flags = 0, - wxWindow *window = NULL); - virtual void DrawButtonSurface(wxDC& dc, - const wxColour& col, - const wxRect& rect, - int flags); - - - virtual void DrawFocusRect(wxDC& dc, const wxRect& rect, int flags = 0); - virtual void DrawLabel(wxDC& dc, - const wxString& label, - const wxRect& rect, - int flags = 0, - int alignment = wxALIGN_LEFT | wxALIGN_TOP, - int indexAccel = -1, - wxRect *rectBounds = NULL); - virtual void DrawButtonLabel(wxDC& dc, - const wxString& label, - const wxBitmap& image, - const wxRect& rect, - int flags = 0, - int alignment = wxALIGN_LEFT | wxALIGN_TOP, - int indexAccel = -1, - wxRect *rectBounds = NULL); - - - virtual void DrawBorder(wxDC& dc, - wxBorder border, - const wxRect& rect, - int flags = 0, - wxRect *rectIn = NULL); - virtual void DrawTextBorder(wxDC& dc, - wxBorder border, - const wxRect& rect, - int flags = 0, - wxRect *rectIn = NULL); - - virtual void DrawHorizontalLine(wxDC& dc, - wxCoord y, wxCoord x1, wxCoord x2); - virtual void DrawVerticalLine(wxDC& dc, - wxCoord x, wxCoord y1, wxCoord y2); - virtual void DrawFrame(wxDC& dc, - const wxString& label, - const wxRect& rect, - int flags = 0, - int alignment = wxALIGN_LEFT, - int indexAccel = -1); - - - virtual void DrawItem(wxDC& dc, - const wxString& label, - const wxRect& rect, - int flags = 0); - virtual void DrawCheckItem(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags = 0); - - virtual void DrawCheckButton(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags = 0, - wxAlignment align = wxALIGN_LEFT, - int indexAccel = -1); - virtual void DrawRadioButton(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags = 0, - wxAlignment align = wxALIGN_LEFT, - int indexAccel = -1); - - virtual void DrawScrollbarArrow(wxDC& dc, - wxDirection dir, - const wxRect& rect, - int flags = 0); - virtual void DrawScrollCorner(wxDC& dc, - const wxRect& rect); - -#if wxUSE_TEXTCTRL - virtual void DrawTextLine(wxDC& dc, - const wxString& text, - const wxRect& rect, - int selStart = -1, - int selEnd = -1, - int flags = 0); - - virtual void DrawLineWrapMark(wxDC& dc, const wxRect& rect); - - virtual wxRect GetTextTotalArea(const wxTextCtrl *text, - const wxRect& rect) const; - virtual wxRect GetTextClientArea(const wxTextCtrl *text, - const wxRect& rect, - wxCoord *extraSpaceBeyond) const; -#endif // wxUSE_TEXTCTRL - - virtual wxRect GetBorderDimensions(wxBorder border) const; - - virtual bool AreScrollbarsInsideBorder() const; - - virtual void AdjustSize(wxSize *size, const wxWindow *window); - - virtual wxCoord GetListboxItemHeight(wxCoord fontHeight); - -#if wxUSE_STATUSBAR - virtual void DrawStatusField(wxDC& dc, - const wxRect& rect, - const wxString& label, - int flags = 0, int style = 0); - - virtual wxSize GetStatusBarBorders() const; - - virtual wxCoord GetStatusBarBorderBetweenFields() const; - - virtual wxSize GetStatusBarFieldMargins() const; -#endif // wxUSE_STATUSBAR - - virtual wxCoord GetCheckItemMargin() const { return 0; } - - - virtual void DrawFrameTitleBar(wxDC& dc, - const wxRect& rect, - const wxString& title, - const wxIcon& icon, - int flags, - int specialButton = 0, - int specialButtonFlag = 0); - virtual void DrawFrameBorder(wxDC& dc, - const wxRect& rect, - int flags); - virtual void DrawFrameBackground(wxDC& dc, - const wxRect& rect, - int flags); - virtual void DrawFrameTitle(wxDC& dc, - const wxRect& rect, - const wxString& title, - int flags); - virtual void DrawFrameIcon(wxDC& dc, - const wxRect& rect, - const wxIcon& icon, - int flags); - virtual void DrawFrameButton(wxDC& dc, - wxCoord x, wxCoord y, - int button, - int flags = 0); - - virtual wxRect GetFrameClientArea(const wxRect& rect, int flags) const; - - virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const; - - virtual wxSize GetFrameMinSize(int flags) const; - - virtual wxSize GetFrameIconSize() const; - - virtual int HitTestFrame(const wxRect& rect, - const wxPoint& pt, - int flags = 0) const; -protected: - // various constants - enum ArrowDirection - { - Arrow_Left, - Arrow_Right, - Arrow_Up, - Arrow_Down, - Arrow_Max - }; - - enum ArrowStyle - { - Arrow_Normal, - Arrow_Disabled, - Arrow_Pressed, - Arrow_Inverted, - Arrow_InvertedDisabled, - Arrow_StateMax - }; - - enum FrameButtonType - { - FrameButton_Close, - FrameButton_Minimize, - FrameButton_Maximize, - FrameButton_Restore, - FrameButton_Help, - FrameButton_Max - }; - - enum IndicatorType - { - IndicatorType_Check, - IndicatorType_Radio, - IndicatorType_MaxCtrl, - IndicatorType_Menu = IndicatorType_MaxCtrl, - IndicatorType_Max - }; - - enum IndicatorState - { - IndicatorState_Normal, - IndicatorState_Pressed, // this one is for check/radioboxes - IndicatorState_Disabled, - IndicatorState_MaxCtrl, - - // the rest of the states are valid for menu items only - IndicatorState_Selected = IndicatorState_Pressed, - IndicatorState_SelectedDisabled = IndicatorState_MaxCtrl, - IndicatorState_MaxMenu - }; - - enum IndicatorStatus - { - IndicatorStatus_Checked, - IndicatorStatus_Unchecked, - IndicatorStatus_Undetermined, - IndicatorStatus_Max - }; - - // translate the appropriate bits in flags to the above enum elements - static void GetIndicatorsFromFlags(int flags, - IndicatorState& state, - IndicatorStatus& status); - - // translate wxDirection to ArrowDirection - static ArrowDirection GetArrowDirection(wxDirection dir); - - - // fill the rectangle with a brush of given colour (must be valid) - void DrawSolidRect(wxDC& dc, const wxColour& col, const wxRect& rect); - - - // all the functions in this section adjust the rect parameter to - // correspond to the interiour of the drawn area - - // draw complete rectangle - void DrawRect(wxDC& dc, wxRect *rect, const wxPen& pen); - - // draw the rectange using the first pen for the left and top sides - // and the second one for the bottom and right ones - void DrawShadedRect(wxDC& dc, wxRect *rect, - const wxPen& pen1, const wxPen& pen2); - - // border drawing routines, may be overridden in the derived class - virtual void DrawRaisedBorder(wxDC& dc, wxRect *rect); - virtual void DrawSunkenBorder(wxDC& dc, wxRect *rect); - virtual void DrawAntiSunkenBorder(wxDC& dc, wxRect *rect); - virtual void DrawBoxBorder(wxDC& dc, wxRect *rect); - virtual void DrawStaticBorder(wxDC& dc, wxRect *rect); - virtual void DrawExtraBorder(wxDC& dc, wxRect *rect); - - - // draw the frame with non-empty label inside the given rectText - virtual void DrawFrameWithLabel(wxDC& dc, - const wxString& label, - const wxRect& rectFrame, - const wxRect& rectText, - int flags, - int alignment, - int indexAccel); - - // draw the (static box) frame without the part corresponding to rectLabel - void DrawFrameWithoutLabel(wxDC& dc, - const wxRect& rectFrame, - const wxRect& rectLabel); - - - // draw the bitmap for a check item (which is by default the same as check - // box one but may be different) - virtual void DrawCheckItemBitmap(wxDC& dc, - const wxBitmap& bitmap, - const wxRect& rect, - int flags); - - // common routine for drawing check and radio buttons - void DrawCheckOrRadioButton(wxDC& dc, - const wxString& label, - const wxBitmap& bitmap, - const wxRect& rect, - int flags, - wxAlignment align, - int indexAccel); - - // return the check/radio bitmap for the given flags - virtual wxBitmap GetRadioBitmap(int flags) = 0; - virtual wxBitmap GetCheckBitmap(int flags) = 0; - - // return the frame icon bitmap - virtual wxBitmap GetFrameButtonBitmap(FrameButtonType type) = 0; - - // get the width of either normal or resizeable frame border depending on - // whether flags contains wxTOPLEVEL_RESIZEABLE bit - // - // notice that these methods only make sense with standard border drawing - // code which uses the borders of the same width on all sides, this is why - // they are only present here and not in wxRenderer itself - virtual int GetFrameBorderWidth(int flags) const; - -#if wxUSE_TEXTCTRL - // return the width of the border around the text area in the text control - virtual int GetTextBorderWidth(const wxTextCtrl *text) const; -#endif // wxUSE_TEXTCTRL - - // GDI objects we often use - wxPen m_penBlack, - m_penDarkGrey, - m_penLightGrey, - m_penHighlight; - - wxFont m_titlebarFont; - - // the colours we use, they never change currently so we don't have to ever - // update m_penXXX objects above - const wxColourScheme * const m_scheme; - - DECLARE_NO_COPY_CLASS(wxStdRenderer) -}; - -#endif // _WX_UNIV_STDREND_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/textctrl.h b/desmume/src/windows/wx/include/wx/univ/textctrl.h deleted file mode 100644 index 5c309d81b..000000000 --- a/desmume/src/windows/wx/include/wx/univ/textctrl.h +++ /dev/null @@ -1,534 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/textctrl.h -// Purpose: wxTextCtrl class -// Author: Vadim Zeitlin -// Modified by: -// Created: 15.09.00 -// RCS-ID: $Id: textctrl.h 47170 2007-07-05 21:37:36Z VZ $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_TEXTCTRL_H_ -#define _WX_UNIV_TEXTCTRL_H_ - -class WXDLLEXPORT wxCaret; -class WXDLLEXPORT wxTextCtrlCommandProcessor; - -#include "wx/scrolwin.h" // for wxScrollHelper - -#include "wx/univ/inphand.h" - -// ---------------------------------------------------------------------------- -// wxTextCtrl actions -// ---------------------------------------------------------------------------- - -// cursor movement and also selection and delete operations -#define wxACTION_TEXT_GOTO _T("goto") // to pos in numArg -#define wxACTION_TEXT_FIRST _T("first") // go to pos 0 -#define wxACTION_TEXT_LAST _T("last") // go to last pos -#define wxACTION_TEXT_HOME _T("home") -#define wxACTION_TEXT_END _T("end") -#define wxACTION_TEXT_LEFT _T("left") -#define wxACTION_TEXT_RIGHT _T("right") -#define wxACTION_TEXT_UP _T("up") -#define wxACTION_TEXT_DOWN _T("down") -#define wxACTION_TEXT_WORD_LEFT _T("wordleft") -#define wxACTION_TEXT_WORD_RIGHT _T("wordright") -#define wxACTION_TEXT_PAGE_UP _T("pageup") -#define wxACTION_TEXT_PAGE_DOWN _T("pagedown") - -// clipboard operations -#define wxACTION_TEXT_COPY _T("copy") -#define wxACTION_TEXT_CUT _T("cut") -#define wxACTION_TEXT_PASTE _T("paste") - -// insert text at the cursor position: the text is in strArg of PerformAction -#define wxACTION_TEXT_INSERT _T("insert") - -// if the action starts with either of these prefixes and the rest of the -// string is one of the movement commands, it means to select/delete text from -// the current cursor position to the new one -#define wxACTION_TEXT_PREFIX_SEL _T("sel") -#define wxACTION_TEXT_PREFIX_DEL _T("del") - -// mouse selection -#define wxACTION_TEXT_ANCHOR_SEL _T("anchorsel") -#define wxACTION_TEXT_EXTEND_SEL _T("extendsel") -#define wxACTION_TEXT_SEL_WORD _T("wordsel") -#define wxACTION_TEXT_SEL_LINE _T("linesel") - -// undo or redo -#define wxACTION_TEXT_UNDO _T("undo") -#define wxACTION_TEXT_REDO _T("redo") - -// ---------------------------------------------------------------------------- -// wxTextCtrl -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxTextCtrl : public wxTextCtrlBase, - public wxScrollHelper -{ -public: - // creation - // -------- - - wxTextCtrl() : wxScrollHelper(this) { Init(); } - - wxTextCtrl(wxWindow *parent, - wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxTextCtrlNameStr) - : wxScrollHelper(this) - { - Init(); - - Create(parent, id, value, pos, size, style, validator, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& value = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxTextCtrlNameStr); - - virtual ~wxTextCtrl(); - - // implement base class pure virtuals - // ---------------------------------- - - virtual wxString GetValue() const; - - virtual int GetLineLength(wxTextCoord lineNo) const; - virtual wxString GetLineText(wxTextCoord lineNo) const; - virtual int GetNumberOfLines() const; - - virtual bool IsModified() const; - virtual bool IsEditable() const; - - // If the return values from and to are the same, there is no selection. - virtual void GetSelection(wxTextPos* from, wxTextPos* to) const; - - // operations - // ---------- - - // editing - virtual void Clear(); - virtual void Replace(wxTextPos from, wxTextPos to, const wxString& value); - virtual void Remove(wxTextPos from, wxTextPos to); - - // sets/clears the dirty flag - virtual void MarkDirty(); - virtual void DiscardEdits(); - - // writing text inserts it at the current position, appending always - // inserts it at the end - virtual void WriteText(const wxString& text); - virtual void AppendText(const wxString& text); - - // translate between the position (which is just an index in the text ctrl - // considering all its contents as a single strings) and (x, y) coordinates - // which represent (logical, i.e. unwrapped) column and line. - virtual wxTextPos XYToPosition(wxTextCoord x, wxTextCoord y) const; - virtual bool PositionToXY(wxTextPos pos, - wxTextCoord *x, wxTextCoord *y) const; - - // wxUniv-specific: find a screen position (in client coordinates) of the - // given text position or of the caret - bool PositionToLogicalXY(wxTextPos pos, wxCoord *x, wxCoord *y) const; - bool PositionToDeviceXY(wxTextPos pos, wxCoord *x, wxCoord *y) const; - wxPoint GetCaretPosition() const; - - virtual void ShowPosition(wxTextPos pos); - - // Clipboard operations - virtual void Copy(); - virtual void Cut(); - virtual void Paste(); - - // Undo/redo - virtual void Undo(); - virtual void Redo(); - - virtual bool CanUndo() const; - virtual bool CanRedo() const; - - // Insertion point - virtual void SetInsertionPoint(wxTextPos pos); - virtual void SetInsertionPointEnd(); - virtual wxTextPos GetInsertionPoint() const; - virtual wxTextPos GetLastPosition() const; - - virtual void SetSelection(wxTextPos from, wxTextPos to); - virtual void SetEditable(bool editable); - - // wxUniv-specific methods - // ----------------------- - - // caret stuff - virtual void ShowCaret(bool show = true); - void HideCaret() { ShowCaret(false); } - void CreateCaret(); // for the current font size - - // helpers for cursor movement - wxTextPos GetWordStart() const; - wxTextPos GetWordEnd() const; - - // selection helpers - bool HasSelection() const - { return m_selStart != -1 && m_selEnd > m_selStart; } - void ClearSelection(); - void RemoveSelection(); - wxString GetSelectionText() const; - - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const; - virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, - wxTextCoord *col, - wxTextCoord *row) const; - - // find the character at this position in the given line, return value as - // for HitTest() - // - // NB: x is the logical coord (client and unscrolled) - wxTextCtrlHitTestResult HitTestLine(const wxString& line, - wxCoord x, - wxTextCoord *colOut) const; - - // bring the given position into view - void ShowHorzPosition(wxCoord pos); - - // scroll the window horizontally so that the first character shown is in - // position pos - void ScrollText(wxTextCoord col); - - // adjust the DC for horz text control scrolling too - virtual void DoPrepareDC(wxDC& dc); - - // implementation only from now on - // ------------------------------- - - // override this to take into account our scrollbar-less scrolling - virtual void CalcUnscrolledPosition(int x, int y, int *xx, int *yy) const; - virtual void CalcScrolledPosition(int x, int y, int *xx, int *yy) const; - - // perform an action - virtual bool PerformAction(const wxControlAction& action, - long numArg = -1, - const wxString& strArg = wxEmptyString); - - static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return GetStdInputHandler(handlerDef); - } - - // override these methods to handle the caret - virtual bool SetFont(const wxFont &font); - virtual bool Enable(bool enable = true); - - // more readable flag testing methods - bool IsPassword() const { return HasFlag(wxTE_PASSWORD); } - bool WrapLines() const { return m_wrapLines; } - - // only for wxStdTextCtrlInputHandler - void RefreshSelection(); - - // override wxScrollHelper method to prevent (auto)scrolling beyond the end - // of line - virtual bool SendAutoScrollEvents(wxScrollWinEvent& event) const; - - // idle processing - virtual void OnInternalIdle(); - -protected: - // ensure we have correct default border - virtual wxBorder GetDefaultBorder() const { return wxBORDER_SUNKEN; } - - // override base class methods - virtual void DoDrawBorder(wxDC& dc, const wxRect& rect); - virtual void DoDraw(wxControlRenderer *renderer); - - // calc the size from the text extent - virtual wxSize DoGetBestClientSize() const; - - // implements Set/ChangeValue() - virtual void DoSetValue(const wxString& value, int flags = 0); - - // common part of all ctors - void Init(); - - // drawing - // ------- - - // draw the text in the given rectangle - void DoDrawTextInRect(wxDC& dc, const wxRect& rectUpdate); - - // draw the line wrap marks in this rect - void DoDrawLineWrapMarks(wxDC& dc, const wxRect& rectUpdate); - - // line/row geometry calculations - // ------------------------------ - - // get the extent (width) of the text - wxCoord GetTextWidth(const wxString& text) const; - - // get the logical text width (accounting for scrolling) - wxCoord GetTotalWidth() const; - - // get total number of rows (different from number of lines if the lines - // can be wrapped) - wxTextCoord GetRowCount() const; - - // find the number of rows in this line (only if WrapLines()) - wxTextCoord GetRowsPerLine(wxTextCoord line) const; - - // get the starting row of the given line - wxTextCoord GetFirstRowOfLine(wxTextCoord line) const; - - // get the row following this line - wxTextCoord GetRowAfterLine(wxTextCoord line) const; - - // refresh functions - // ----------------- - - // the text area is the part of the window in which the text can be - // displayed, i.e. part of it inside the margins and the real text area is - // the area in which the text *is* currently displayed: for example, in the - // multiline control case the text area can have extra space at the bottom - // which is not tall enough for another line and which is then not included - // into the real text area - wxRect GetRealTextArea() const; - - // refresh the text in the given (in logical coords) rect - void RefreshTextRect(const wxRect& rect, bool textOnly = true); - - // refresh the line wrap marks for the given range of lines (inclusive) - void RefreshLineWrapMarks(wxTextCoord rowFirst, wxTextCoord rowLast); - - // refresh the text in the given range (in logical coords) of this line, if - // width is 0, refresh to the end of line - void RefreshPixelRange(wxTextCoord line, wxCoord start, wxCoord width); - - // refresh the text in the given range (in text coords) in this line - void RefreshColRange(wxTextCoord line, wxTextPos start, size_t count); - - // refresh the text from in the given line range (inclusive) - void RefreshLineRange(wxTextCoord lineFirst, wxTextCoord lineLast); - - // refresh the text in the given range which can span multiple lines - // (this method accepts arguments in any order) - void RefreshTextRange(wxTextPos start, wxTextPos end); - - // get the text to show: either the text itself or the text replaced with - // starts for wxTE_PASSWORD control - wxString GetTextToShow(const wxString& text) const; - - // find the row in this line where the given position (counted from the - // start of line) is - wxTextCoord GetRowInLine(wxTextCoord line, - wxTextCoord col, - wxTextCoord *colRowStart = NULL) const; - - // find the number of characters of a line before it wraps - // (and optionally also the real width of the line) - size_t GetPartOfWrappedLine(const wxChar* text, - wxCoord *widthReal = NULL) const; - - // get the start and end of the selection for this line: if the line is - // outside the selection, both will be -1 and false will be returned - bool GetSelectedPartOfLine(wxTextCoord line, - wxTextPos *start, wxTextPos *end) const; - - // update the text rect: the zone inside our client rect (its coords are - // client coords) which contains the text - void UpdateTextRect(); - - // calculate the last visible position - void UpdateLastVisible(); - - // move caret to the given position unconditionally - // (SetInsertionPoint() does nothing if the position didn't change) - void DoSetInsertionPoint(wxTextPos pos); - - // move caret to the new position without updating the display (for - // internal use only) - void MoveInsertionPoint(wxTextPos pos); - - // set the caret to its initial (default) position - void InitInsertionPoint(); - - // get the width of the longest line in pixels - wxCoord GetMaxWidth() const; - - // force recalculation of the max line width - void RecalcMaxWidth(); - - // update the max width after the given line was modified - void UpdateMaxWidth(wxTextCoord line); - - // hit testing - // ----------- - - // HitTest2() is more efficient than 2 consecutive HitTest()s with the same - // line (i.e. y) and it also returns the offset of the starting position in - // pixels - // - // as the last hack, this function accepts either logical or device (by - // default) coords depending on devCoords flag - wxTextCtrlHitTestResult HitTest2(wxCoord y, - wxCoord x1, - wxCoord x2, - wxTextCoord *row, - wxTextCoord *colStart, - wxTextCoord *colEnd, - wxTextCoord *colRowStart, - bool devCoords = true) const; - - // HitTest() version which takes the logical text coordinates and not the - // device ones - wxTextCtrlHitTestResult HitTestLogical(const wxPoint& pos, - wxTextCoord *col, - wxTextCoord *row) const; - - // get the line and the row in this line corresponding to the given row, - // return true if ok and false if row is out of range - // - // NB: this function can only be called for controls which wrap lines - bool GetLineAndRow(wxTextCoord row, - wxTextCoord *line, - wxTextCoord *rowInLine) const; - - // get the height of one line (the same for all lines) - wxCoord GetLineHeight() const - { - // this one should be already precalculated - wxASSERT_MSG( m_heightLine != -1, _T("should have line height") ); - - return m_heightLine; - } - - // get the average char width - wxCoord GetAverageWidth() const { return m_widthAvg; } - - // recalc the line height and char width (to call when the font changes) - void RecalcFontMetrics(); - - // vertical scrolling helpers - // -------------------------- - - // all these functions are for multi line controls only - - // get the number of visible lines - size_t GetLinesPerPage() const; - - // return the position above the cursor or INVALID_POS_VALUE - wxTextPos GetPositionAbove(); - - // return the position below the cursor or INVALID_POS_VALUE - wxTextPos GetPositionBelow(); - - // event handlers - // -------------- - void OnChar(wxKeyEvent& event); - void OnSize(wxSizeEvent& event); - - // return the struct containing control-type dependent data - struct wxTextSingleLineData& SData() { return *m_data.sdata; } - struct wxTextMultiLineData& MData() { return *m_data.mdata; } - struct wxTextWrappedData& WData() { return *m_data.wdata; } - const wxTextSingleLineData& SData() const { return *m_data.sdata; } - const wxTextMultiLineData& MData() const { return *m_data.mdata; } - const wxTextWrappedData& WData() const { return *m_data.wdata; } - - // clipboard operations (unlike the versions without Do prefix, they have a - // return code) - bool DoCut(); - bool DoPaste(); - -private: - // all these methods are for multiline text controls only - - // update the scrollbars (only called from OnIdle) - void UpdateScrollbars(); - - // get read only access to the lines of multiline control - inline const wxArrayString& GetLines() const; - inline size_t GetLineCount() const; - - // replace a line (returns true if the number of rows in thel ine changed) - bool ReplaceLine(wxTextCoord line, const wxString& text); - - // remove a line - void RemoveLine(wxTextCoord line); - - // insert a line at this position - void InsertLine(wxTextCoord line, const wxString& text); - - // calculate geometry of this line - void LayoutLine(wxTextCoord line, class wxWrappedLineData& lineData) const; - - // calculate geometry of all lines until the given one - void LayoutLines(wxTextCoord lineLast) const; - - // the initially specified control size - wxSize m_sizeInitial; - - // the global control text - wxString m_value; - - // current position - wxTextPos m_curPos; - wxTextCoord m_curCol, - m_curRow; - - // last position (only used by GetLastPosition()) - wxTextPos m_posLast; - - // selection - wxTextPos m_selAnchor, - m_selStart, - m_selEnd; - - // flags - bool m_isModified:1, - m_isEditable:1, - m_hasCaret:1, - m_wrapLines:1; // can't be changed after creation - - // the rectangle (in client coordinates) to draw text inside - wxRect m_rectText; - - // the height of one line (cached value of GetCharHeight) - wxCoord m_heightLine; - - // and the average char width (cached value of GetCharWidth) - wxCoord m_widthAvg; - - // we have some data which depends on the kind of control (single or multi - // line) - union - { - wxTextSingleLineData *sdata; - wxTextMultiLineData *mdata; - wxTextWrappedData *wdata; - void *data; - } m_data; - - // the object to which we delegate our undo/redo implementation - wxTextCtrlCommandProcessor *m_cmdProcessor; - - DECLARE_EVENT_TABLE() - DECLARE_DYNAMIC_CLASS(wxTextCtrl) - - friend class wxWrappedLineData; -}; - -#endif // _WX_UNIV_TEXTCTRL_H_ - diff --git a/desmume/src/windows/wx/include/wx/univ/tglbtn.h b/desmume/src/windows/wx/include/wx/univ/tglbtn.h deleted file mode 100644 index 202434345..000000000 --- a/desmume/src/windows/wx/include/wx/univ/tglbtn.h +++ /dev/null @@ -1,70 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/button.h -// Purpose: wxToggleButton for wxUniversal -// Author: Vadim Zeitlin -// Modified by: David Bjorkevik -// Created: 16.05.06 -// RCS-ID: $Id: tglbtn.h 39320 2006-05-24 17:17:27Z PC $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_TGLBTN_H_ -#define _WX_UNIV_TGLBTN_H_ - -#include "wx/button.h" - -extern WXDLLEXPORT_DATA(const wxChar) wxCheckBoxNameStr[]; - -// ---------------------------------------------------------------------------- -// wxToggleButton: a push button -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_CORE wxToggleButton: public wxButton -{ -public: - wxToggleButton(); - - wxToggleButton(wxWindow *parent, - wxWindowID id, - const wxBitmap& bitmap, - const wxString& label = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxCheckBoxNameStr); - - wxToggleButton(wxWindow *parent, - wxWindowID id, - const wxString& label = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxCheckBoxNameStr); - - virtual ~wxToggleButton(); - - virtual bool IsPressed() const { return m_isPressed || m_value; } - - // wxToggleButton actions - virtual void Toggle(); - virtual void Click(); - - // Get/set the value - void SetValue(bool state); - bool GetValue() const { return m_value; } - -protected: - // the current value - bool m_value; - -private: - // common part of all ctors - void Init(); - - DECLARE_DYNAMIC_CLASS(wxToggleButton) -}; - -#endif // _WX_UNIV_TGLBTN_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/theme.h b/desmume/src/windows/wx/include/wx/univ/theme.h deleted file mode 100644 index 02d74a8f4..000000000 --- a/desmume/src/windows/wx/include/wx/univ/theme.h +++ /dev/null @@ -1,202 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/theme.h -// Purpose: wxTheme class manages all configurable aspects of the -// application including the look (wxRenderer), feel -// (wxInputHandler) and the colours (wxColourScheme) -// Author: Vadim Zeitlin -// Modified by: -// Created: 06.08.00 -// RCS-ID: $Id: theme.h 42455 2006-10-26 15:33:10Z VS $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_THEME_H_ -#define _WX_UNIV_THEME_H_ - -#include "wx/string.h" - -// ---------------------------------------------------------------------------- -// wxTheme -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxArtProvider; -class WXDLLEXPORT wxColourScheme; -class WXDLLEXPORT wxInputConsumer; -class WXDLLEXPORT wxInputHandler; -class WXDLLEXPORT wxRenderer; -struct WXDLLEXPORT wxThemeInfo; - -class WXDLLEXPORT wxTheme -{ -public: - // static methods - // -------------- - - // create the default theme - static bool CreateDefault(); - - // create the theme by name (will return NULL if not found) - static wxTheme *Create(const wxString& name); - - // change the current scheme - static wxTheme *Set(wxTheme *theme); - - // get the current theme (never NULL) - static wxTheme *Get() { return ms_theme; } - - // the theme methods - // ----------------- - - // get the renderer implementing all the control-drawing operations in - // this theme - virtual wxRenderer *GetRenderer() = 0; - - // get the art provider to be used together with this theme - virtual wxArtProvider *GetArtProvider() = 0; - - // get the input handler of the given type, forward to the standard one - virtual wxInputHandler *GetInputHandler(const wxString& handlerType, - wxInputConsumer *consumer) = 0; - - // get the colour scheme for the control with this name - virtual wxColourScheme *GetColourScheme() = 0; - - // implementation only from now on - // ------------------------------- - - virtual ~wxTheme(); - -private: - // the list of descriptions of all known themes - static wxThemeInfo *ms_allThemes; - - // the current theme - static wxTheme *ms_theme; - friend struct WXDLLEXPORT wxThemeInfo; -}; - -// ---------------------------------------------------------------------------- -// wxDelegateTheme: it is impossible to inherit from any of standard -// themes as their declarations are in private code, but you can use this -// class to override only some of their functions - all the other ones -// will be left to the original theme -// ---------------------------------------------------------------------------- - -class wxDelegateTheme : public wxTheme -{ -public: - wxDelegateTheme(const wxChar *theme); - virtual ~wxDelegateTheme(); - - virtual wxRenderer *GetRenderer(); - virtual wxArtProvider *GetArtProvider(); - virtual wxInputHandler *GetInputHandler(const wxString& control, - wxInputConsumer *consumer); - virtual wxColourScheme *GetColourScheme(); - -protected: - // gets or creates theme and sets m_theme to point to it, - // returns true on success - bool GetOrCreateTheme(); - - wxString m_themeName; - wxTheme *m_theme; -}; - -// ---------------------------------------------------------------------------- -// dynamic theme creation helpers -// ---------------------------------------------------------------------------- - -struct WXDLLEXPORT wxThemeInfo -{ - typedef wxTheme *(*Constructor)(); - - // theme name and (user readable) description - wxString name, desc; - - // the function to create a theme object - Constructor ctor; - - // next node in the linked list or NULL - wxThemeInfo *next; - - // constructor for the struct itself - wxThemeInfo(Constructor ctor, const wxChar *name, const wxChar *desc); -}; - -// ---------------------------------------------------------------------------- -// macros -// ---------------------------------------------------------------------------- - -// to use a standard theme insert this macro into one of the application files: -// without it, an over optimizing linker may discard the object module -// containing the theme implementation entirely -#define WX_USE_THEME(themename) \ - /* this indirection makes it possible to pass macro as the argument */ \ - WX_USE_THEME_IMPL(themename) - -#define WX_USE_THEME_IMPL(themename) \ - extern WXDLLEXPORT_DATA(bool) wxThemeUse##themename; \ - static struct wxThemeUserFor##themename \ - { \ - wxThemeUserFor##themename() { wxThemeUse##themename = true; } \ - } wxThemeDoUse##themename - -// to declare a new theme, this macro must be used in the class declaration -#define WX_DECLARE_THEME(themename) \ - private: \ - static wxThemeInfo ms_info##themename; \ - public: \ - const wxThemeInfo *GetThemeInfo() const \ - { return &ms_info##themename; } - -// and this one must be inserted in the source file -#define WX_IMPLEMENT_THEME(classname, themename, themedesc) \ - WXDLLEXPORT_DATA(bool) wxThemeUse##themename = true; \ - wxTheme *wxCtorFor##themename() { return new classname; } \ - wxThemeInfo classname::ms_info##themename(wxCtorFor##themename, \ - wxT( #themename ), themedesc) - -// ---------------------------------------------------------------------------- -// determine default theme -// ---------------------------------------------------------------------------- - -#if wxUSE_ALL_THEMES - #undef wxUSE_THEME_WIN32 - #define wxUSE_THEME_WIN32 1 - #undef wxUSE_THEME_GTK - #define wxUSE_THEME_GTK 1 - #undef wxUSE_THEME_MONO - #define wxUSE_THEME_MONO 1 - #undef wxUSE_THEME_METAL - #define wxUSE_THEME_METAL 1 -#endif // wxUSE_ALL_THEMES - -// determine the default theme to use: -#if defined(__WXGTK__) && wxUSE_THEME_GTK - #define wxUNIV_DEFAULT_THEME gtk -#elif defined(__WXDFB__) && wxUSE_THEME_MONO - // use mono theme for DirectFB port because it cannot correctly - // render neither win32 nor gtk themes yet: - #define wxUNIV_DEFAULT_THEME mono -#endif - -// if no theme was picked, get any theme compiled in (sorted by -// quality/completeness of the theme): -#ifndef wxUNIV_DEFAULT_THEME - #if wxUSE_THEME_WIN32 - #define wxUNIV_DEFAULT_THEME win32 - #elif wxUSE_THEME_GTK - #define wxUNIV_DEFAULT_THEME gtk - #elif wxUSE_THEME_MONO - #define wxUNIV_DEFAULT_THEME mono - #endif - // If nothing matches, no themes are compiled and the app must provide - // some theme itself - // (note that wxUSE_THEME_METAL depends on win32 theme, so we don't have to - // try it) - // -#endif // !wxUNIV_DEFAULT_THEME - -#endif // _WX_UNIV_THEME_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/toolbar.h b/desmume/src/windows/wx/include/wx/univ/toolbar.h deleted file mode 100644 index 7c3f99d4c..000000000 --- a/desmume/src/windows/wx/include/wx/univ/toolbar.h +++ /dev/null @@ -1,138 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/toolbar.h -// Purpose: wxToolBar declaration -// Author: Robert Roebling -// Modified by: -// Created: 10.09.00 -// RCS-ID: $Id: toolbar.h 41227 2006-09-14 19:36:47Z VZ $ -// Copyright: (c) Robert Roebling -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_TOOLBAR_H_ -#define _WX_UNIV_TOOLBAR_H_ - -#include "wx/button.h" // for wxStdButtonInputHandler - -class WXDLLEXPORT wxToolBarTool; - -// ---------------------------------------------------------------------------- -// the actions supported by this control -// ---------------------------------------------------------------------------- - -#define wxACTION_TOOLBAR_TOGGLE wxACTION_BUTTON_TOGGLE -#define wxACTION_TOOLBAR_PRESS wxACTION_BUTTON_PRESS -#define wxACTION_TOOLBAR_RELEASE wxACTION_BUTTON_RELEASE -#define wxACTION_TOOLBAR_CLICK wxACTION_BUTTON_CLICK -#define wxACTION_TOOLBAR_ENTER _T("enter") // highlight the tool -#define wxACTION_TOOLBAR_LEAVE _T("leave") // unhighlight the tool - -// ---------------------------------------------------------------------------- -// wxToolBar -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxToolBar : public wxToolBarBase -{ -public: - // construction/destruction - wxToolBar() { Init(); } - wxToolBar(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxToolBarNameStr) - { - Init(); - - Create(parent, id, pos, size, style, name); - } - - bool Create( wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxToolBarNameStr ); - - virtual ~wxToolBar(); - - virtual bool Realize(); - - virtual void SetWindowStyleFlag( long style ); - - virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const; - - virtual void SetToolShortHelp(int id, const wxString& helpString); - - virtual void SetMargins(int x, int y); - void SetMargins(const wxSize& size) - { SetMargins((int) size.x, (int) size.y); } - - virtual bool PerformAction(const wxControlAction& action, - long numArg = -1, - const wxString& strArg = wxEmptyString); - static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return GetStdInputHandler(handlerDef); - } - -protected: - // common part of all ctors - void Init(); - - // implement base class pure virtuals - virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool); - virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool); - - virtual void DoEnableTool(wxToolBarToolBase *tool, bool enable); - 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); - - virtual wxSize DoGetBestClientSize() const; - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - virtual void DoDraw(wxControlRenderer *renderer); - - // get the bounding rect for the given tool - wxRect GetToolRect(wxToolBarToolBase *tool) const; - - // redraw the given tool - void RefreshTool(wxToolBarToolBase *tool); - - // (re)calculate the tool positions, should only be called if it is - // necessary to do it, i.e. m_needsLayout == true - void DoLayout(); - - // get the rect limits depending on the orientation: top/bottom for a - // vertical toolbar, left/right for a horizontal one - void GetRectLimits(const wxRect& rect, wxCoord *start, wxCoord *end) const; - -private: - // have we calculated the positions of our tools? - bool m_needsLayout; - - // the width of a separator - wxCoord m_widthSeparator; - - // the total size of all toolbar elements - wxCoord m_maxWidth, - m_maxHeight; - -private: - DECLARE_DYNAMIC_CLASS(wxToolBar) -}; - -#endif // _WX_UNIV_TOOLBAR_H_ diff --git a/desmume/src/windows/wx/include/wx/univ/toplevel.h b/desmume/src/windows/wx/include/wx/univ/toplevel.h deleted file mode 100644 index 79e9ae032..000000000 --- a/desmume/src/windows/wx/include/wx/univ/toplevel.h +++ /dev/null @@ -1,197 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/toplevel.h -// Purpose: Top level window, abstraction of wxFrame and wxDialog -// Author: Vaclav Slavik -// Id: $Id: toplevel.h 42664 2006-10-29 20:39:31Z VZ $ -// Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - - -#ifndef __WX_UNIV_TOPLEVEL_H__ -#define __WX_UNIV_TOPLEVEL_H__ - -#include "wx/univ/inpcons.h" -#include "wx/univ/inphand.h" -#include "wx/icon.h" - -// ---------------------------------------------------------------------------- -// constants -// ---------------------------------------------------------------------------- - -// frame decorations type flags used in wxRenderer and wxColourScheme -enum -{ - wxTOPLEVEL_ACTIVE = 0x00000001, - wxTOPLEVEL_MAXIMIZED = 0x00000002, - wxTOPLEVEL_TITLEBAR = 0x00000004, - wxTOPLEVEL_ICON = 0x00000008, - wxTOPLEVEL_RESIZEABLE = 0x00000010, - wxTOPLEVEL_BORDER = 0x00000020, - wxTOPLEVEL_BUTTON_CLOSE = 0x01000000, - wxTOPLEVEL_BUTTON_MAXIMIZE = 0x02000000, - wxTOPLEVEL_BUTTON_ICONIZE = 0x04000000, - wxTOPLEVEL_BUTTON_RESTORE = 0x08000000, - wxTOPLEVEL_BUTTON_HELP = 0x10000000 -}; - -// frame hit test return values: -enum -{ - wxHT_TOPLEVEL_NOWHERE = 0x00000000, - wxHT_TOPLEVEL_CLIENT_AREA = 0x00000001, - wxHT_TOPLEVEL_ICON = 0x00000002, - wxHT_TOPLEVEL_TITLEBAR = 0x00000004, - - wxHT_TOPLEVEL_BORDER_N = 0x00000010, - wxHT_TOPLEVEL_BORDER_S = 0x00000020, - wxHT_TOPLEVEL_BORDER_E = 0x00000040, - wxHT_TOPLEVEL_BORDER_W = 0x00000080, - wxHT_TOPLEVEL_BORDER_NE = wxHT_TOPLEVEL_BORDER_N | wxHT_TOPLEVEL_BORDER_E, - wxHT_TOPLEVEL_BORDER_SE = wxHT_TOPLEVEL_BORDER_S | wxHT_TOPLEVEL_BORDER_E, - wxHT_TOPLEVEL_BORDER_NW = wxHT_TOPLEVEL_BORDER_N | wxHT_TOPLEVEL_BORDER_W, - wxHT_TOPLEVEL_BORDER_SW = wxHT_TOPLEVEL_BORDER_S | wxHT_TOPLEVEL_BORDER_W, - wxHT_TOPLEVEL_ANY_BORDER = 0x000000F0, - - wxHT_TOPLEVEL_BUTTON_CLOSE = /*0x01000000*/ wxTOPLEVEL_BUTTON_CLOSE, - wxHT_TOPLEVEL_BUTTON_MAXIMIZE = /*0x02000000*/ wxTOPLEVEL_BUTTON_MAXIMIZE, - wxHT_TOPLEVEL_BUTTON_ICONIZE = /*0x04000000*/ wxTOPLEVEL_BUTTON_ICONIZE, - wxHT_TOPLEVEL_BUTTON_RESTORE = /*0x08000000*/ wxTOPLEVEL_BUTTON_RESTORE, - wxHT_TOPLEVEL_BUTTON_HELP = /*0x10000000*/ wxTOPLEVEL_BUTTON_HELP, - wxHT_TOPLEVEL_ANY_BUTTON = 0x1F000000 -}; - -// Flags for interactive frame manipulation functions (only in wxUniversal): -enum -{ - wxINTERACTIVE_MOVE = 0x00000001, - wxINTERACTIVE_RESIZE = 0x00000002, - wxINTERACTIVE_RESIZE_S = 0x00000010, - wxINTERACTIVE_RESIZE_N = 0x00000020, - wxINTERACTIVE_RESIZE_W = 0x00000040, - wxINTERACTIVE_RESIZE_E = 0x00000080, - wxINTERACTIVE_WAIT_FOR_INPUT = 0x10000000 -}; - -// ---------------------------------------------------------------------------- -// the actions supported by this control -// ---------------------------------------------------------------------------- - -#define wxACTION_TOPLEVEL_ACTIVATE _T("activate") // (de)activate the frame -#define wxACTION_TOPLEVEL_BUTTON_PRESS _T("pressbtn") // press titlebar btn -#define wxACTION_TOPLEVEL_BUTTON_RELEASE _T("releasebtn") // press titlebar btn -#define wxACTION_TOPLEVEL_BUTTON_CLICK _T("clickbtn") // press titlebar btn -#define wxACTION_TOPLEVEL_MOVE _T("move") // move the frame -#define wxACTION_TOPLEVEL_RESIZE _T("resize") // resize the frame - -//----------------------------------------------------------------------------- -// wxTopLevelWindow -//----------------------------------------------------------------------------- - -class WXDLLEXPORT wxTopLevelWindow : public wxTopLevelWindowNative, - public wxInputConsumer -{ -public: - // construction - wxTopLevelWindow() { Init(); } - wxTopLevelWindow(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr) - { - Init(); - - Create(parent, id, title, pos, size, style, name); - } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxString& title, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = wxDEFAULT_FRAME_STYLE, - const wxString& name = wxFrameNameStr); - - // wxUniv-specific methods: do [not] use native decorations for this (or - // all) window(s) - // - // notice that this has no effect if the system doesn't support any native - // decorations anyhow and that by default native decorations are used - // - // if UseNativeDecorations() is used, it must be called before Create() - static void UseNativeDecorationsByDefault(bool native = true); - void UseNativeDecorations(bool native = true); - bool IsUsingNativeDecorations() const; - - - // implement base class pure virtuals - virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL); - virtual wxPoint GetClientAreaOrigin() const; - virtual void SetIcon(const wxIcon& icon) { SetIcons( wxIconBundle( icon ) ); } - virtual void SetIcons(const wxIconBundle& icons); - - // implementation from now on - // -------------------------- - - // tests for frame's part at given point - long HitTest(const wxPoint& pt) const; - - virtual bool PerformAction(const wxControlAction& action, - long numArg = -1, - const wxString& strArg = wxEmptyString); - - static wxInputHandler *GetStdInputHandler(wxInputHandler *handlerDef); - virtual wxInputHandler *DoGetStdInputHandler(wxInputHandler *handlerDef) - { - return GetStdInputHandler(handlerDef); - } - - // move/resize the frame interactively, i.e. let the user do it - virtual void InteractiveMove(int flags = wxINTERACTIVE_MOVE); - - virtual wxSize GetMinSize() const; - - virtual wxWindow *GetInputWindow() const { return wx_const_cast(wxTopLevelWindow*, this); } - -protected: - virtual void DoGetClientSize(int *width, int *height) const; - virtual void DoSetClientSize(int width, int height); - - // handle titlebar button click event - virtual void ClickTitleBarButton(long button); - - // return wxTOPLEVEL_xxx combination based on current state of the frame - long GetDecorationsStyle() const; - - // common part of all ctors - void Init(); - - void RefreshTitleBar(); - void OnNcPaint(wxNcPaintEvent& event); - void OnSystemMenu(wxCommandEvent& event); - - // true if wxTLW should render decorations (aka titlebar) itself - static int ms_drawDecorations; - // true if wxTLW can be iconized - static int ms_canIconize; - - // true if we're using native decorations - bool m_usingNativeDecorations; - // true for currently active frame - bool m_isActive; - // version of icon for titlebar (16x16) - wxIcon m_titlebarIcon; - // saved window style in fullscreen mdoe - long m_fsSavedStyle; - // currently pressed titlebar button - long m_pressedButton; - - DECLARE_DYNAMIC_CLASS(wxTopLevelWindow) - DECLARE_EVENT_TABLE() - WX_DECLARE_INPUT_CONSUMER() -}; - -#endif // __WX_UNIV_TOPLEVEL_H__ diff --git a/desmume/src/windows/wx/include/wx/univ/window.h b/desmume/src/windows/wx/include/wx/univ/window.h deleted file mode 100644 index 1485f6033..000000000 --- a/desmume/src/windows/wx/include/wx/univ/window.h +++ /dev/null @@ -1,287 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/univ/window.h -// Purpose: wxWindow class which is the base class for all -// wxUniv port controls, it supports the customization of the -// window drawing and input processing. -// Author: Vadim Zeitlin -// Modified by: -// Created: 06.08.00 -// RCS-ID: $Id: window.h 39633 2006-06-08 11:25:30Z ABX $ -// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIV_WINDOW_H_ -#define _WX_UNIV_WINDOW_H_ - -#include "wx/bitmap.h" // for m_bitmapBg - -class WXDLLEXPORT wxControlRenderer; -class WXDLLEXPORT wxEventLoop; - -#if wxUSE_MENUS - class WXDLLEXPORT wxMenu; - class WXDLLEXPORT wxMenuBar; -#endif // wxUSE_MENUS - -class WXDLLEXPORT wxRenderer; - -#if wxUSE_SCROLLBAR - class WXDLLEXPORT wxScrollBar; -#endif // wxUSE_SCROLLBAR - -#ifdef __WXX11__ -#define wxUSE_TWO_WINDOWS 1 -#else -#define wxUSE_TWO_WINDOWS 0 -#endif - -// ---------------------------------------------------------------------------- -// wxWindow -// ---------------------------------------------------------------------------- - -#if defined(__WXMSW__) -#define wxWindowNative wxWindowMSW -#elif defined(__WXGTK__) -#define wxWindowNative wxWindowGTK -#elif defined(__WXMGL__) -#define wxWindowNative wxWindowMGL -#elif defined(__WXX11__) -#define wxWindowNative wxWindowX11 -#elif defined(__WXMAC__) -#define wxWindowNative wxWindowMac -#endif - -class WXDLLEXPORT wxWindow : public wxWindowNative -{ -public: - // ctors and create functions - // --------------------------- - - wxWindow() { Init(); } - - wxWindow(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxPanelNameStr) - : wxWindowNative(parent, id, pos, size, style | wxCLIP_CHILDREN, name) - { Init(); } - - bool Create(wxWindow *parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxPanelNameStr); - - virtual ~wxWindow(); - - // background pixmap support - // ------------------------- - - virtual void SetBackground(const wxBitmap& bitmap, - int alignment = wxALIGN_CENTRE, - wxStretch stretch = wxSTRETCH_NOT); - - const wxBitmap& GetBackgroundBitmap(int *alignment = NULL, - wxStretch *stretch = NULL) const; - - // scrollbars: we (re)implement it ourselves using our own scrollbars - // instead of the native ones - // ------------------------------------------------------------------ - - virtual void SetScrollbar(int orient, - int pos, - int page, - int range, - bool refresh = true ); - virtual void SetScrollPos(int orient, int pos, bool refresh = true); - virtual int GetScrollPos(int orient) const; - virtual int GetScrollThumb(int orient) const; - virtual int GetScrollRange(int orient) const; - virtual void ScrollWindow(int dx, int dy, - const wxRect* rect = (wxRect *) NULL); - - // take into account the borders here - virtual wxPoint GetClientAreaOrigin() const; - - // popup menu support - // ------------------ - - // NB: all menu related functions are implemented in menu.cpp - -#if wxUSE_MENUS - // this is wxUniv-specific private method to be used only by wxMenu - void DismissPopupMenu(); -#endif // wxUSE_MENUS - - // miscellaneous other methods - // --------------------------- - - // get the state information - virtual bool IsFocused() const; - virtual bool IsCurrent() const; - virtual bool IsPressed() const; - virtual bool IsDefault() const; - - // return all state flags at once (combination of wxCONTROL_XXX values) - int GetStateFlags() const; - - // set the "highlighted" flag and return true if it changed - virtual bool SetCurrent(bool doit = true); - -#if wxUSE_SCROLLBAR - // get the scrollbar (may be NULL) for the given orientation - wxScrollBar *GetScrollbar(int orient) const - { - return orient & wxVERTICAL ? m_scrollbarVert : m_scrollbarHorz; - } -#endif // wxUSE_SCROLLBAR - - // methods used by wxColourScheme to choose the colours for this window - // -------------------------------------------------------------------- - - // return true if this is a panel/canvas window which contains other - // controls only - virtual bool IsCanvasWindow() const { return false; } - - // return true if this control can be highlighted when the mouse is over - // it (the theme decides itself whether it is really highlighted or not) - virtual bool CanBeHighlighted() const { return false; } - - // return true if we should use the colours/fonts returned by the - // corresponding GetXXX() methods instead of the default ones - bool UseFgCol() const { return m_hasFgCol; } - bool UseFont() const { return m_hasFont; } - - // return true if this window serves as a container for the other windows - // only and doesn't get any input itself - virtual bool IsStaticBox() const { return false; } - - // returns the (low level) renderer to use for drawing the control by - // querying the current theme - wxRenderer *GetRenderer() const { return m_renderer; } - - // scrolling helper: like ScrollWindow() except that it doesn't refresh the - // uncovered window areas but returns the rectangle to update (don't call - // this with both dx and dy non zero) - wxRect ScrollNoRefresh(int dx, int dy, const wxRect *rect = NULL); - - // after scrollbars are added or removed they must be refreshed by calling - // this function - void RefreshScrollbars(); - - // erase part of the control - virtual void EraseBackground(wxDC& dc, const wxRect& rect); - - // overridden base class methods - // ----------------------------- - - // the rect coordinates are, for us, in client coords, but if no rect is - // specified, the entire window is refreshed - virtual void Refresh(bool eraseBackground = true, - const wxRect *rect = (const wxRect *) NULL); - - // we refresh the window when it is dis/enabled - virtual bool Enable(bool enable = true); - - // should we use the standard control colours or not? - virtual bool ShouldInheritColours() const { return false; } - -protected: - // common part of all ctors - void Init(); - -#if wxUSE_MENUS - virtual bool DoPopupMenu(wxMenu *menu, int x, int y); -#endif // wxUSE_MENUS - - // we deal with the scrollbars in these functions - virtual void DoSetClientSize(int width, int height); - virtual void DoGetClientSize(int *width, int *height) const; - virtual wxHitTest DoHitTest(wxCoord x, wxCoord y) const; - - // event handlers - void OnSize(wxSizeEvent& event); - void OnNcPaint(wxNcPaintEvent& event); - void OnPaint(wxPaintEvent& event); - void OnErase(wxEraseEvent& event); - -#if wxUSE_ACCEL || wxUSE_MENUS - void OnKeyDown(wxKeyEvent& event); -#endif // wxUSE_ACCEL - -#if wxUSE_MENUS - void OnChar(wxKeyEvent& event); - void OnKeyUp(wxKeyEvent& event); -#endif // wxUSE_MENUS - - // draw the control background, return true if done - virtual bool DoDrawBackground(wxDC& dc); - - // draw the controls border - virtual void DoDrawBorder(wxDC& dc, const wxRect& rect); - - // draw the controls contents - virtual void DoDraw(wxControlRenderer *renderer); - - // calculate the best size for the client area of the window: default - // implementation of DoGetBestSize() uses this method and adds the border - // width to the result - virtual wxSize DoGetBestClientSize() const; - virtual wxSize DoGetBestSize() const; - - // adjust the size of the window to take into account its borders - wxSize AdjustSize(const wxSize& size) const; - - // put the scrollbars along the edges of the window - void PositionScrollbars(); - -#if wxUSE_MENUS - // return the menubar of the parent frame or NULL - wxMenuBar *GetParentFrameMenuBar() const; -#endif // wxUSE_MENUS - - // the renderer we use - wxRenderer *m_renderer; - - // background bitmap info - wxBitmap m_bitmapBg; - int m_alignBgBitmap; - wxStretch m_stretchBgBitmap; - - // old size - wxSize m_oldSize; - - // is the mouse currently inside the window? - bool m_isCurrent:1; - -#ifdef __WXMSW__ -public: - // override MSWWindowProc() to process WM_NCHITTEST - WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam); -#endif // __WXMSW__ - -private: - -#if wxUSE_SCROLLBAR - // the window scrollbars - wxScrollBar *m_scrollbarHorz, - *m_scrollbarVert; -#endif // wxUSE_SCROLLBAR - -#if wxUSE_MENUS - // the current modal event loop for the popup menu we show or NULL - static wxEventLoop *ms_evtLoopPopup; - - // the last window over which Alt was pressed (used by OnKeyUp) - static wxWindow *ms_winLastAltPress; -#endif // wxUSE_MENUS - - DECLARE_DYNAMIC_CLASS(wxWindow) - DECLARE_EVENT_TABLE() -}; - -#endif // _WX_UNIV_WINDOW_H_ diff --git a/desmume/src/windows/wx/include/wx/unix/apptbase.h b/desmume/src/windows/wx/include/wx/unix/apptbase.h deleted file mode 100644 index 0fd100ea5..000000000 --- a/desmume/src/windows/wx/include/wx/unix/apptbase.h +++ /dev/null @@ -1,54 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/unix/apptbase.h -// Purpose: declaration of wxAppTraits for Unix systems -// Author: Vadim Zeitlin -// Modified by: -// Created: 23.06.2003 -// RCS-ID: $Id: apptbase.h 29409 2004-09-26 16:28:51Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIX_APPTBASE_H_ -#define _WX_UNIX_APPTBASE_H_ - -struct wxExecuteData; -class wxPipe; - -// ---------------------------------------------------------------------------- -// wxAppTraits: the Unix version adds extra hooks needed by Unix code -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxAppTraits : public wxAppTraitsBase -{ -public: - // wxExecute() support methods - // --------------------------- - - // called before starting the child process and creates the pipe used for - // detecting the process termination asynchronously in GUI, does nothing in - // wxBase - // - // if it returns false, we should return from wxExecute() with an error - virtual bool CreateEndProcessPipe(wxExecuteData& execData) = 0; - - // test if the given descriptor is the end of the pipe create by the - // function above - virtual bool IsWriteFDOfEndProcessPipe(wxExecuteData& execData, int fd) = 0; - - // ensure that the write end of the pipe is not closed by wxPipe dtor - virtual void DetachWriteFDOfEndProcessPipe(wxExecuteData& execData) = 0; - - // wait for the process termination, return whatever wxExecute() must - // return - virtual int WaitForChild(wxExecuteData& execData) = 0; - - - // wxThread helpers - // ---------------- - - // TODO -}; - -#endif // _WX_UNIX_APPTBASE_H_ - diff --git a/desmume/src/windows/wx/include/wx/unix/apptrait.h b/desmume/src/windows/wx/include/wx/unix/apptrait.h deleted file mode 100644 index 0bb0af469..000000000 --- a/desmume/src/windows/wx/include/wx/unix/apptrait.h +++ /dev/null @@ -1,55 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/unix/apptrait.h -// Purpose: standard implementations of wxAppTraits for Unix -// Author: Vadim Zeitlin -// Modified by: -// Created: 23.06.2003 -// RCS-ID: $Id: apptrait.h 43629 2006-11-24 11:33:53Z RR $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIX_APPTRAIT_H_ -#define _WX_UNIX_APPTRAIT_H_ - -// ---------------------------------------------------------------------------- -// wxGUI/ConsoleAppTraits: must derive from wxAppTraits, not wxAppTraitsBase -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxConsoleAppTraits : public wxConsoleAppTraitsBase -{ -public: - virtual bool CreateEndProcessPipe(wxExecuteData& execData); - virtual bool IsWriteFDOfEndProcessPipe(wxExecuteData& execData, int fd); - virtual void DetachWriteFDOfEndProcessPipe(wxExecuteData& execData); - virtual int WaitForChild(wxExecuteData& execData); -}; - -#if wxUSE_GUI - -class WXDLLEXPORT wxGUIAppTraits : public wxGUIAppTraitsBase -{ -public: - virtual bool CreateEndProcessPipe(wxExecuteData& execData); - virtual bool IsWriteFDOfEndProcessPipe(wxExecuteData& execData, int fd); - virtual void DetachWriteFDOfEndProcessPipe(wxExecuteData& execData); - virtual int WaitForChild(wxExecuteData& execData); - -#if defined(__WXMAC__) || defined(__WXCOCOA__) - virtual wxStandardPathsBase& GetStandardPaths(); -#endif - virtual wxPortId GetToolkitVersion(int *majVer, int *minVer) const; - -#ifdef __WXGTK__ - virtual wxString GetDesktopEnvironment() const; -#endif - -#if defined(__WXDEBUG__) && defined(__WXGTK20__) - virtual bool ShowAssertDialog(const wxString& msg); -#endif -}; - -#endif // wxUSE_GUI - -#endif // _WX_UNIX_APPTRAIT_H_ - diff --git a/desmume/src/windows/wx/include/wx/unix/execute.h b/desmume/src/windows/wx/include/wx/unix/execute.h deleted file mode 100644 index 0f095e86c..000000000 --- a/desmume/src/windows/wx/include/wx/unix/execute.h +++ /dev/null @@ -1,79 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: unix/execute.h -// Purpose: private details of wxExecute() implementation -// Author: Vadim Zeitlin -// Id: $Id: execute.h 35055 2005-08-02 22:58:06Z MW $ -// Copyright: (c) 1998 Robert Roebling, Julian Smart, Vadim Zeitlin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIX_EXECUTE_H -#define _WX_UNIX_EXECUTE_H - -#include "wx/unix/pipe.h" - -class WXDLLIMPEXP_BASE wxProcess; -class wxStreamTempInputBuffer; - -// if pid > 0, the execution is async and the data is freed in the callback -// executed when the process terminates, if pid < 0, the execution is -// synchronous and the caller (wxExecute) frees the data -struct wxEndProcessData -{ - int pid, // pid of the process - tag; // port dependent value - wxProcess *process; // if !NULL: notified on process termination - int exitcode; // the exit code -}; - -// struct in which information is passed from wxExecute() to wxAppTraits -// methods -struct wxExecuteData -{ - wxExecuteData() - { - flags = - pid = 0; - - process = NULL; - -#if wxUSE_STREAMS - bufOut = - bufErr = NULL; -#endif // wxUSE_STREAMS - } - - // wxExecute() flags - int flags; - - // the pid of the child process - int pid; - - // the associated process object or NULL - wxProcess *process; - - // pipe used for end process detection - wxPipe pipeEndProcDetect; - -#if wxUSE_STREAMS - // the input buffer bufOut is connected to stdout, this is why it is - // called bufOut and not bufIn - wxStreamTempInputBuffer *bufOut, - *bufErr; -#endif // wxUSE_STREAMS -}; - -// this function is called when the process terminates from port specific -// callback function and is common to all ports (src/unix/utilsunx.cpp) -extern WXDLLIMPEXP_BASE void wxHandleProcessTermination(wxEndProcessData *proc_data); - -// this function is called to associate the port-specific callback with the -// child process. The return valus is port-specific. -extern WXDLLIMPEXP_CORE int wxAddProcessCallback(wxEndProcessData *proc_data, int fd); - -#if defined(__DARWIN__) && (defined(__WXMAC__) || defined(__WXCOCOA__)) -// For ports (e.g. DARWIN) which can add callbacks based on the pid -extern int wxAddProcessCallbackForPid(wxEndProcessData *proc_data, int pid); -#endif - -#endif // _WX_UNIX_EXECUTE_H diff --git a/desmume/src/windows/wx/include/wx/unix/fontutil.h b/desmume/src/windows/wx/include/wx/unix/fontutil.h deleted file mode 100644 index 498bed1d5..000000000 --- a/desmume/src/windows/wx/include/wx/unix/fontutil.h +++ /dev/null @@ -1,37 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/unix/fontutil.h -// Purpose: font-related helper functions for Unix/X11 -// Author: Vadim Zeitlin -// Modified by: -// Created: 05.11.99 -// RCS-ID: $Id: fontutil.h 27408 2004-05-23 20:53:33Z JS $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIX_FONTUTIL_H_ -#define _WX_UNIX_FONTUTIL_H_ - -#ifdef __X__ - typedef WXFontStructPtr wxNativeFont; -#elif defined(__WXGTK__) - typedef GdkFont *wxNativeFont; -#else - #error "Unsupported toolkit" -#endif - -// returns the handle of the nearest available font or 0 -extern wxNativeFont -wxLoadQueryNearestFont(int pointSize, - int family, - int style, - int weight, - bool underlined, - const wxString &facename, - wxFontEncoding encoding, - wxString* xFontName = (wxString *)NULL); - -// returns the font specified by the given XLFD -extern wxNativeFont wxLoadFont(const wxString& fontSpec); - -#endif // _WX_UNIX_FONTUTIL_H_ diff --git a/desmume/src/windows/wx/include/wx/unix/gsockunx.h b/desmume/src/windows/wx/include/wx/unix/gsockunx.h deleted file mode 100644 index 4537f149b..000000000 --- a/desmume/src/windows/wx/include/wx/unix/gsockunx.h +++ /dev/null @@ -1,145 +0,0 @@ -/* ------------------------------------------------------------------------- - * Project: GSocket (Generic Socket) for WX - * Name: gsockunx.h - * Copyright: (c) Guilhem Lavaux - * Licence: wxWindows Licence - * Purpose: GSocket Unix header - * CVSID: $Id: gsockunx.h 33948 2005-05-04 18:57:50Z JS $ - * ------------------------------------------------------------------------- - */ - -#ifndef __GSOCK_UNX_H -#define __GSOCK_UNX_H - -#ifndef __GSOCKET_STANDALONE__ -#include "wx/setup.h" -#endif - -#if wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) - -#ifndef __GSOCKET_STANDALONE__ -#include "wx/gsocket.h" -#else -#include "gsocket.h" -#endif - -class GSocketGUIFunctionsTableConcrete: public GSocketGUIFunctionsTable -{ -public: - virtual bool OnInit(); - virtual void OnExit(); - virtual bool CanUseEventLoop(); - virtual bool Init_Socket(GSocket *socket); - virtual void Destroy_Socket(GSocket *socket); - virtual void Install_Callback(GSocket *socket, GSocketEvent event); - virtual void Uninstall_Callback(GSocket *socket, GSocketEvent event); - virtual void Enable_Events(GSocket *socket); - virtual void Disable_Events(GSocket *socket); -}; - -class GSocket -{ -public: - GSocket(); - virtual ~GSocket(); - bool IsOk() { return m_ok; } - void Close(); - void Shutdown(); - GSocketError SetLocal(GAddress *address); - GSocketError SetPeer(GAddress *address); - GAddress *GetLocal(); - GAddress *GetPeer(); - GSocketError SetServer(); - GSocket *WaitConnection(); - bool SetReusable(); - GSocketError Connect(GSocketStream stream); - GSocketError SetNonOriented(); - int Read(char *buffer, int size); - int Write(const char *buffer, int size); - GSocketEventFlags Select(GSocketEventFlags flags); - void SetNonBlocking(bool non_block); - void SetTimeout(unsigned long millisec); - GSocketError WXDLLIMPEXP_NET GetError(); - void SetCallback(GSocketEventFlags flags, - GSocketCallback callback, char *cdata); - void UnsetCallback(GSocketEventFlags flags); - GSocketError GetSockOpt(int level, int optname, void *optval, int *optlen); - GSocketError SetSockOpt(int level, int optname, - const void *optval, int optlen); - virtual void Detected_Read(); - virtual void Detected_Write(); -protected: - void Enable(GSocketEvent event); - void Disable(GSocketEvent event); - GSocketError Input_Timeout(); - GSocketError Output_Timeout(); - int Recv_Stream(char *buffer, int size); - int Recv_Dgram(char *buffer, int size); - int Send_Stream(const char *buffer, int size); - int Send_Dgram(const char *buffer, int size); - bool m_ok; -public: - /* DFE: We can't protect these data member until the GUI code is updated */ - /* protected: */ - int m_fd; - GAddress *m_local; - GAddress *m_peer; - GSocketError m_error; - - bool m_non_blocking; - bool m_server; - bool m_stream; - bool m_establishing; - bool m_reusable; - unsigned long m_timeout; - - /* Callbacks */ - GSocketEventFlags m_detected; - GSocketCallback m_cbacks[GSOCK_MAX_EVENT]; - char *m_data[GSOCK_MAX_EVENT]; - - char *m_gui_dependent; - -}; - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ -/* Definition of GAddress */ -struct _GAddress -{ - struct sockaddr *m_addr; - size_t m_len; - - GAddressType m_family; - int m_realfamily; - - GSocketError m_error; -}; -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/* GAddress */ - -GSocketError _GAddress_translate_from(GAddress *address, - struct sockaddr *addr, int len); -GSocketError _GAddress_translate_to (GAddress *address, - struct sockaddr **addr, int *len); -GSocketError _GAddress_Init_INET(GAddress *address); -GSocketError _GAddress_Init_UNIX(GAddress *address); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */ - -#endif /* __GSOCK_UNX_H */ diff --git a/desmume/src/windows/wx/include/wx/unix/joystick.h b/desmume/src/windows/wx/include/wx/unix/joystick.h deleted file mode 100644 index c01c63c92..000000000 --- a/desmume/src/windows/wx/include/wx/unix/joystick.h +++ /dev/null @@ -1,95 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/unix/joystick.h -// Purpose: wxJoystick class -// Author: Guilhem Lavaux -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: joystick.h 42077 2006-10-17 14:44:52Z ABX $ -// Copyright: (c) Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef __JOYSTICKH__ -#define __JOYSTICKH__ - -#include "wx/event.h" -#include "wx/thread.h" - -class WXDLLEXPORT wxJoystickThread; - -class WXDLLEXPORT wxJoystick: public wxObject -{ - DECLARE_DYNAMIC_CLASS(wxJoystick) - public: - /* - * Public interface - */ - - wxJoystick(int joystick = wxJOYSTICK1); - virtual ~wxJoystick(); - - // Attributes - //////////////////////////////////////////////////////////////////////////// - - wxPoint GetPosition() const; - int GetZPosition() const; - int GetButtonState() const; - int GetPOVPosition() const; - int GetPOVCTSPosition() const; - int GetRudderPosition() const; - int GetUPosition() const; - int GetVPosition() const; - int GetMovementThreshold() const; - void SetMovementThreshold(int threshold) ; - - // Capabilities - //////////////////////////////////////////////////////////////////////////// - - bool IsOk() const; // Checks that the joystick is functioning - static int GetNumberJoysticks() ; - int GetManufacturerId() const ; - int GetProductId() const ; - wxString GetProductName() const ; - int GetXMin() const; - int GetYMin() const; - int GetZMin() const; - int GetXMax() const; - int GetYMax() const; - int GetZMax() const; - int GetNumberButtons() const; - int GetNumberAxes() const; - int GetMaxButtons() const; - int GetMaxAxes() const; - int GetPollingMin() const; - int GetPollingMax() const; - int GetRudderMin() const; - int GetRudderMax() const; - int GetUMin() const; - int GetUMax() const; - int GetVMin() const; - int GetVMax() const; - - bool HasRudder() const; - bool HasZ() const; - bool HasU() const; - bool HasV() const; - bool HasPOV() const; - bool HasPOV4Dir() const; - bool HasPOVCTS() const; - - // Operations - //////////////////////////////////////////////////////////////////////////// - - // pollingFreq = 0 means that movement events are sent when above the threshold. - // If pollingFreq > 0, events are received every this many milliseconds. - bool SetCapture(wxWindow* win, int pollingFreq = 0); - bool ReleaseCapture(); - -protected: - int m_device; - int m_joystick; - wxJoystickThread* m_thread; -}; - -#endif - // __JOYSTICKH__ diff --git a/desmume/src/windows/wx/include/wx/unix/mimetype.h b/desmume/src/windows/wx/include/wx/unix/mimetype.h deleted file mode 100644 index bde5ab478..000000000 --- a/desmume/src/windows/wx/include/wx/unix/mimetype.h +++ /dev/null @@ -1,215 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/unix/mimetype.h -// Purpose: classes and functions to manage MIME types -// Author: Vadim Zeitlin -// Modified by: -// Created: 23.09.98 -// RCS-ID: $Id: mimetype.h 43723 2006-11-30 13:24:32Z RR $ -// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence (part of wxExtra library) -///////////////////////////////////////////////////////////////////////////// - -#ifndef _MIMETYPE_IMPL_H -#define _MIMETYPE_IMPL_H - -#include "wx/mimetype.h" - -#if wxUSE_MIMETYPE - -class wxMimeTypeCommands; - -WX_DEFINE_ARRAY_PTR(wxMimeTypeCommands *, wxMimeCommandsArray); - -// this is the real wxMimeTypesManager for Unix -class WXDLLEXPORT wxMimeTypesManagerImpl -{ -public: - // ctor and dtor - wxMimeTypesManagerImpl(); - virtual ~wxMimeTypesManagerImpl(); - - // load all data into memory - done when it is needed for the first time - void Initialize(int mailcapStyles = wxMAILCAP_ALL, - const wxString& extraDir = wxEmptyString); - - // and delete the data here - void ClearData(); - - // implement containing class functions - wxFileType *GetFileTypeFromExtension(const wxString& ext); - wxFileType *GetFileTypeFromMimeType(const wxString& mimeType); - - size_t EnumAllFileTypes(wxArrayString& mimetypes); - - bool ReadMailcap(const wxString& filename, bool fallback = FALSE); - bool ReadMimeTypes(const wxString& filename); - - void AddFallback(const wxFileTypeInfo& filetype); - - // add information about the given mimetype - void AddMimeTypeInfo(const wxString& mimetype, - const wxString& extensions, - const wxString& description); - void AddMailcapInfo(const wxString& strType, - const wxString& strOpenCmd, - const wxString& strPrintCmd, - const wxString& strTest, - const wxString& strDesc); - - // add a new record to the user .mailcap/.mime.types files - wxFileType *Associate(const wxFileTypeInfo& ftInfo); - // remove association - bool Unassociate(wxFileType *ft); - - // accessors - // get the string containing space separated extensions for the given - // file type - wxString GetExtension(size_t index) { return m_aExtensions[index]; } - -protected: - void InitIfNeeded(); - - wxArrayString m_aTypes, // MIME types - m_aDescriptions, // descriptions (just some text) - m_aExtensions, // space separated list of extensions - m_aIcons; // Icon filenames - - // verb=command pairs for this file type - wxMimeCommandsArray m_aEntries; - - // are we initialized? - bool m_initialized; - - // keep track of the files we had already loaded (this is a bitwise OR of - // wxMailcapStyle values) - int m_mailcapStylesInited; - - wxString GetCommand(const wxString &verb, size_t nIndex) const; - - // read Gnome files - void LoadGnomeDataFromKeyFile(const wxString& filename, - const wxArrayString& dirs); - void LoadGnomeMimeTypesFromMimeFile(const wxString& filename); - void LoadGnomeMimeFilesFromDir(const wxString& dirbase, - const wxArrayString& dirs); - void GetGnomeMimeInfo(const wxString& sExtraDir); - - // read KDE - void LoadKDELinksForMimeSubtype(const wxString& dirbase, - const wxString& subdir, - const wxString& filename, - const wxArrayString& icondirs); - void LoadKDELinksForMimeType(const wxString& dirbase, - const wxString& subdir, - const wxArrayString& icondirs); - void LoadKDELinkFilesFromDir(const wxString& dirbase, - const wxArrayString& icondirs); - void LoadKDEApp(const wxString& filename); - void LoadKDEAppsFilesFromDir(const wxString& dirname); - void GetKDEMimeInfo(const wxString& sExtraDir); - - // write KDE - bool WriteKDEMimeFile(int index, bool delete_index); - bool CheckKDEDirsExist(const wxString & sOK, const wxString& sTest); - - //read write Netscape and MetaMail formats - void GetMimeInfo (const wxString& sExtraDir); - bool WriteToMailCap (int index, bool delete_index); - bool WriteToMimeTypes (int index, bool delete_index); - bool WriteToNSMimeTypes (int index, bool delete_index); - - // ReadMailcap() helper - bool ProcessOtherMailcapField(struct MailcapLineData& data, - const wxString& curField); - - // functions used to do associations - - virtual int AddToMimeData(const wxString& strType, - const wxString& strIcon, - wxMimeTypeCommands *entry, - const wxArrayString& strExtensions, - const wxString& strDesc, - bool replaceExisting = TRUE); - - virtual bool DoAssociation(const wxString& strType, - const wxString& strIcon, - wxMimeTypeCommands *entry, - const wxArrayString& strExtensions, - const wxString& strDesc); - - virtual bool WriteMimeInfo(int nIndex, bool delete_mime ); - - // give it access to m_aXXX variables - friend class WXDLLEXPORT wxFileTypeImpl; -}; - - - -class WXDLLEXPORT wxFileTypeImpl -{ -public: - // initialization functions - // this is used to construct a list of mimetypes which match; - // if built with GetFileTypeFromMimetype index 0 has the exact match and - // index 1 the type / * match - // if built with GetFileTypeFromExtension, index 0 has the mimetype for - // the first extension found, index 1 for the second and so on - - void Init(wxMimeTypesManagerImpl *manager, size_t index) - { m_manager = manager; m_index.Add(index); } - - // accessors - bool GetExtensions(wxArrayString& extensions); - bool GetMimeType(wxString *mimeType) const - { *mimeType = m_manager->m_aTypes[m_index[0]]; return TRUE; } - bool GetMimeTypes(wxArrayString& mimeTypes) const; - bool GetIcon(wxIconLocation *iconLoc) const; - - bool GetDescription(wxString *desc) const - { *desc = m_manager->m_aDescriptions[m_index[0]]; return TRUE; } - - bool GetOpenCommand(wxString *openCmd, - const wxFileType::MessageParameters& params) const - { - *openCmd = GetExpandedCommand(wxT("open"), params); - return (! openCmd -> IsEmpty() ); - } - - bool GetPrintCommand(wxString *printCmd, - const wxFileType::MessageParameters& params) const - { - *printCmd = GetExpandedCommand(wxT("print"), params); - return (! printCmd -> IsEmpty() ); - } - - // return the number of commands defined for this file type, 0 if none - size_t GetAllCommands(wxArrayString *verbs, wxArrayString *commands, - const wxFileType::MessageParameters& params) const; - - - // remove the record for this file type - // probably a mistake to come here, use wxMimeTypesManager.Unassociate (ft) instead - bool Unassociate(wxFileType *ft) - { - return m_manager->Unassociate(ft); - } - - // set an arbitrary command, ask confirmation if it already exists and - // overwriteprompt is TRUE - bool SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt = TRUE); - bool SetDefaultIcon(const wxString& strIcon = wxEmptyString, int index = 0); - -private: - wxString - GetExpandedCommand(const wxString & verb, - const wxFileType::MessageParameters& params) const; - - wxMimeTypesManagerImpl *m_manager; - wxArrayInt m_index; // in the wxMimeTypesManagerImpl arrays -}; - -#endif // wxUSE_MIMETYPE - -#endif // _MIMETYPE_IMPL_H - - diff --git a/desmume/src/windows/wx/include/wx/unix/pipe.h b/desmume/src/windows/wx/include/wx/unix/pipe.h deleted file mode 100644 index 84310626e..000000000 --- a/desmume/src/windows/wx/include/wx/unix/pipe.h +++ /dev/null @@ -1,114 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/unix/pipe.h -// Purpose: wxPipe class -// Author: Vadim Zeitlin -// Modified by: -// Created: 24.06.2003 (extracted from src/unix/utilsunx.cpp) -// RCS-ID: $Id: pipe.h 40518 2006-08-08 13:06:05Z VS $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIX_PIPE_H_ -#define _WX_UNIX_PIPE_H_ - -#include <unistd.h> - -#include "wx/log.h" -#include "wx/intl.h" - -// ---------------------------------------------------------------------------- -// wxPipe: this class encapsulates pipe() system call -// ---------------------------------------------------------------------------- - -class wxPipe -{ -public: - // the symbolic names for the pipe ends - enum Direction - { - Read, - Write - }; - - enum - { - INVALID_FD = -1 - }; - - // default ctor doesn't do anything - wxPipe() { m_fds[Read] = m_fds[Write] = INVALID_FD; } - - // create the pipe, return TRUE if ok, FALSE on error - bool Create() - { - if ( pipe(m_fds) == -1 ) - { - wxLogSysError(_("Pipe creation failed")); - - return FALSE; - } - - return TRUE; - } - - // return TRUE if we were created successfully - bool IsOk() const { return m_fds[Read] != INVALID_FD; } - - // return the descriptor for one of the pipe ends - int operator[](Direction which) const { return m_fds[which]; } - - // detach a descriptor, meaning that the pipe dtor won't close it, and - // return it - int Detach(Direction which) - { - int fd = m_fds[which]; - m_fds[which] = INVALID_FD; - - return fd; - } - - // close the pipe descriptors - void Close() - { - for ( size_t n = 0; n < WXSIZEOF(m_fds); n++ ) - { - if ( m_fds[n] != INVALID_FD ) - { - close(m_fds[n]); - m_fds[n] = INVALID_FD; - } - } - } - - // dtor closes the pipe descriptors - ~wxPipe() { Close(); } - -private: - int m_fds[2]; -}; - -#if wxUSE_STREAMS && wxUSE_FILE - -#include "wx/wfstream.h" - -// ---------------------------------------------------------------------------- -// wxPipeInputStream: stream for reading from a pipe -// ---------------------------------------------------------------------------- - -class wxPipeInputStream : public wxFileInputStream -{ -public: - wxPipeInputStream(int fd) : wxFileInputStream(fd) { } - - // return TRUE if the pipe is still opened - bool IsOpened() const { return !Eof(); } - - // return TRUE if we have anything to read, don't block - virtual bool CanRead() const; -}; - -#endif // wxUSE_STREAMS && wxUSE_FILE - -#endif // _WX_UNIX_PIPE_H_ - diff --git a/desmume/src/windows/wx/include/wx/unix/private.h b/desmume/src/windows/wx/include/wx/unix/private.h deleted file mode 100644 index abae99420..000000000 --- a/desmume/src/windows/wx/include/wx/unix/private.h +++ /dev/null @@ -1,47 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/unix/private.h -// Purpose: miscellaneous private things for Unix wx ports -// Author: Vadim Zeitlin -// Created: 2005-09-25 -// RCS-ID: $Id: private.h 35688 2005-09-25 19:59:19Z VZ $ -// Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIX_PRIVATE_H_ -#define _WX_UNIX_PRIVATE_H_ - -// standard linux headers produce many warnings when used with icc -#if defined(__INTELC__) && defined(__LINUX__) - inline void wxFD_ZERO(fd_set *fds) - { - #pragma warning(push) - #pragma warning(disable:593) - FD_ZERO(fds); - #pragma warning(pop) - } - - inline void wxFD_SET(int fd, fd_set *fds) - { - #pragma warning(push, 1) - #pragma warning(disable:1469) - FD_SET(fd, fds); - #pragma warning(pop) - } - - inline bool wxFD_ISSET(int fd, fd_set *fds) - { - #pragma warning(push, 1) - #pragma warning(disable:1469) - return FD_ISSET(fd, fds); - #pragma warning(pop) - } -#else // !__INTELC__ - #define wxFD_ZERO(fds) FD_ZERO(fds) - #define wxFD_SET(fd, fds) FD_SET(fd, fds) - #define wxFD_ISSET(fd, fds) FD_ISSET(fd, fds) -#endif // __INTELC__/!__INTELC__ - - -#endif // _WX_UNIX_PRIVATE_H_ - diff --git a/desmume/src/windows/wx/include/wx/unix/sound.h b/desmume/src/windows/wx/include/wx/unix/sound.h deleted file mode 100644 index adf71381d..000000000 --- a/desmume/src/windows/wx/include/wx/unix/sound.h +++ /dev/null @@ -1,161 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/unix/sound.h -// Purpose: wxSound class -// Author: Julian Smart, Vaclav Slavik -// Modified by: -// Created: 25/10/98 -// RCS-ID: $Id: sound.h 42115 2006-10-19 13:09:48Z VZ $ -// Copyright: (c) Julian Smart, Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SOUND_H_ -#define _WX_SOUND_H_ - -#include "wx/defs.h" - -#if wxUSE_SOUND - -#include "wx/object.h" - -// ---------------------------------------------------------------------------- -// wxSound: simple audio playback class -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxSoundBackend; -class WXDLLIMPEXP_ADV wxSound; -class WXDLLIMPEXP_BASE wxDynamicLibrary; - -/// Sound data, as loaded from .wav file: -class WXDLLIMPEXP_ADV wxSoundData -{ -public: - wxSoundData() : m_refCnt(1) {} - void IncRef(); - void DecRef(); - - // .wav header information: - unsigned m_channels; // num of channels (mono:1, stereo:2) - unsigned m_samplingRate; - unsigned m_bitsPerSample; // if 8, then m_data contains unsigned 8bit - // samples (wxUint8), if 16 then signed 16bit - // (wxInt16) - unsigned m_samples; // length in samples: - - // wave data: - size_t m_dataBytes; - wxUint8 *m_data; // m_dataBytes bytes of data - -private: - ~wxSoundData(); - unsigned m_refCnt; - wxUint8 *m_dataWithHeader; // ditto, but prefixed with .wav header - friend class wxSound; -}; - - -/// Simple sound class: -class WXDLLIMPEXP_ADV wxSound : public wxSoundBase -{ -public: - wxSound(); - wxSound(const wxString& fileName, bool isResource = false); - wxSound(int size, const wxByte* 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 IsOk() const { return m_data != NULL; } - - // Stop playing any sound - static void Stop(); - - // Returns true if a sound is being played - static bool IsPlaying(); - - // for internal use - static void UnloadBackend(); - -protected: - bool DoPlay(unsigned flags) const; - - static void EnsureBackend(); - void Free(); - bool LoadWAV(const wxUint8 *data, size_t length, bool copyData); - - static wxSoundBackend *ms_backend; -#if wxUSE_LIBSDL && wxUSE_PLUGINS - // FIXME - temporary, until we have plugins architecture - static wxDynamicLibrary *ms_backendSDL; -#endif - -private: - wxSoundData *m_data; -}; - - -// ---------------------------------------------------------------------------- -// wxSoundBackend: -// ---------------------------------------------------------------------------- - -// This is interface to sound playing implementation. There are multiple -// sound architectures in use on Unix platforms and wxWidgets can use several -// of them for playback, depending on their availability at runtime; hence -// the need for backends. This class is for use by wxWidgets and people writing -// additional backends only, it is _not_ for use by applications! - -// Structure that holds playback status information -struct wxSoundPlaybackStatus -{ - // playback is in progress - bool m_playing; - // main thread called wxSound::Stop() - bool m_stopRequested; -}; - -// Audio backend interface -class WXDLLIMPEXP_ADV wxSoundBackend -{ -public: - virtual ~wxSoundBackend() {} - - // Returns the name of the backend (e.g. "Open Sound System") - virtual wxString GetName() const = 0; - - // Returns priority (higher priority backends are tried first) - virtual int GetPriority() const = 0; - - // Checks if the backend's audio system is available and the backend can - // be used for playback - virtual bool IsAvailable() const = 0; - - // Returns true if the backend is capable of playing sound asynchronously. - // If false, then wxWidgets creates a playback thread and handles async - // playback, otherwise it is left up to the backend (will usually be more - // effective). - virtual bool HasNativeAsyncPlayback() const = 0; - - // Plays the sound. flags are same flags as those passed to wxSound::Play. - // The function should periodically check the value of - // status->m_stopRequested and terminate if it is set to true (it may - // be modified by another thread) - virtual bool Play(wxSoundData *data, unsigned flags, - volatile wxSoundPlaybackStatus *status) = 0; - - // Stops playback (if something is played). - virtual void Stop() = 0; - - // Returns true if the backend is playing anything at the moment. - // (This method is never called for backends that don't support async - // playback.) - virtual bool IsPlaying() const = 0; -}; - - -#endif // wxUSE_SOUND - -#endif // _WX_SOUND_H_ - diff --git a/desmume/src/windows/wx/include/wx/unix/stackwalk.h b/desmume/src/windows/wx/include/wx/unix/stackwalk.h deleted file mode 100644 index 15629d091..000000000 --- a/desmume/src/windows/wx/include/wx/unix/stackwalk.h +++ /dev/null @@ -1,97 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/unix/stackwalk.h -// Purpose: declaration of wxStackWalker for Unix -// Author: Vadim Zeitlin -// Modified by: -// Created: 2005-01-19 -// RCS-ID: $Id: stackwalk.h 43346 2006-11-12 14:33:03Z RR $ -// Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIX_STACKWALK_H_ -#define _WX_UNIX_STACKWALK_H_ - -// ---------------------------------------------------------------------------- -// wxStackFrame -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStackFrame : public wxStackFrameBase -{ - friend class wxStackWalker; - -public: - // arguments are the stack depth of this frame, its address and the return - // value of backtrace_symbols() for it - // - // NB: we don't copy syminfo pointer so it should have lifetime at least as - // long as ours - wxStackFrame(size_t level = 0, void *address = NULL, const char *syminfo = NULL) - : wxStackFrameBase(level, address) - { - m_syminfo = syminfo; - } - -protected: - virtual void OnGetName(); - - // optimized for the 2 step initialization done by wxStackWalker - void Set(const wxString &name, const wxString &filename, const char* syminfo, - size_t level, size_t numLine, void *address) - { - m_level = level; - m_name = name; - m_filename = filename; - m_syminfo = syminfo; - - m_line = numLine; - m_address = address; - } - -private: - const char *m_syminfo; -}; - -// ---------------------------------------------------------------------------- -// wxStackWalker -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStackWalker : public wxStackWalkerBase -{ -public: - // we need the full path to the program executable to be able to use - // addr2line, normally we can retrieve it from wxTheApp but if wxTheApp - // doesn't exist or doesn't have the correct value, the path may be given - // explicitly - wxStackWalker(const char *argv0 = NULL) - { - ms_exepath = wxString::FromAscii(argv0); - } - - ~wxStackWalker() - { - FreeStack(); - } - - virtual void Walk(size_t skip = 1, size_t maxDepth = 200); - virtual void WalkFromException() { Walk(2); } - - static const wxString& GetExePath() { return ms_exepath; } - - - // these two may be used to save the stack at some point (fast operation) - // and then process it later (slow operation) - void SaveStack(size_t maxDepth); - void ProcessFrames(size_t skip); - void FreeStack(); - -private: - int InitFrames(wxStackFrame *arr, size_t n, void **addresses, char **syminfo); - - static wxString ms_exepath; - static void *ms_addresses[]; - static char **ms_symbols; - static int m_depth; -}; - -#endif // _WX_UNIX_STACKWALK_H_ diff --git a/desmume/src/windows/wx/include/wx/unix/stdpaths.h b/desmume/src/windows/wx/include/wx/unix/stdpaths.h deleted file mode 100644 index 3e7faaf8d..000000000 --- a/desmume/src/windows/wx/include/wx/unix/stdpaths.h +++ /dev/null @@ -1,56 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/unix/stdpaths.h -// Purpose: wxStandardPaths for Unix systems -// Author: Vadim Zeitlin -// Modified by: -// Created: 2004-10-19 -// RCS-ID: $Id: stdpaths.h 43340 2006-11-12 12:58:10Z RR $ -// Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIX_STDPATHS_H_ -#define _WX_UNIX_STDPATHS_H_ - -// ---------------------------------------------------------------------------- -// wxStandardPaths -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxStandardPaths : public wxStandardPathsBase -{ -public: - // tries to determine the installation prefix automatically (Linux only right - // now) and returns /usr/local if it failed - void DetectPrefix(); - - // set the program installation directory which is /usr/local by default - // - // under some systems (currently only Linux) the program directory can be - // determined automatically but for portable programs you should always set - // it explicitly - void SetInstallPrefix(const wxString& prefix); - - // get the program installation prefix - // - // if the prefix had been previously by SetInstallPrefix, returns that - // value, otherwise calls DetectPrefix() - wxString GetInstallPrefix() const; - - - // implement base class pure virtuals - virtual wxString GetExecutablePath() const; - virtual wxString GetConfigDir() const; - virtual wxString GetUserConfigDir() const; - virtual wxString GetDataDir() const; - virtual wxString GetLocalDataDir() const; - virtual wxString GetUserDataDir() const; - virtual wxString GetPluginsDir() const; - virtual wxString GetLocalizedResourcesDir(const wxChar *lang, - ResourceCat category) const; - -private: - wxString m_prefix; -}; - -#endif // _WX_UNIX_STDPATHS_H_ - diff --git a/desmume/src/windows/wx/include/wx/unix/taskbarx11.h b/desmume/src/windows/wx/include/wx/unix/taskbarx11.h deleted file mode 100644 index 04ec3ac04..000000000 --- a/desmume/src/windows/wx/include/wx/unix/taskbarx11.h +++ /dev/null @@ -1,46 +0,0 @@ -///////////////////////////////////////////////////////////////////////// -// File: wx/unix/taskbarx11.h -// Purpose: Defines wxTaskBarIcon class for most common X11 desktops -// Author: Vaclav Slavik -// Modified by: -// Created: 04/04/2003 -// RCS-ID: $Id: taskbarx11.h 53563 2008-05-11 22:45:36Z PC $ -// Copyright: (c) Vaclav Slavik, 2003 -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////// - -#ifndef _TASKBAR_H_ -#define _TASKBAR_H_ - -class WXDLLEXPORT wxIcon; -class WXDLLEXPORT wxFrame; -class WXDLLEXPORT wxWindow; - -class WXDLLIMPEXP_ADV wxTaskBarIconArea; - -class WXDLLIMPEXP_ADV wxTaskBarIcon: public wxTaskBarIconBase -{ -public: - wxTaskBarIcon(); - virtual ~wxTaskBarIcon(); - - // Accessors: - bool IsOk() const; - bool IsIconInstalled() const; - - // Operations: - bool SetIcon(const wxIcon& icon, const wxString& tooltip = wxEmptyString); - bool RemoveIcon(); - bool PopupMenu(wxMenu *menu); - -protected: - wxTaskBarIconArea *m_iconWnd; - -private: - void OnDestroy(wxWindowDestroyEvent&); - - DECLARE_DYNAMIC_CLASS(wxTaskBarIcon) -}; - -#endif - // _TASKBAR_H_ diff --git a/desmume/src/windows/wx/include/wx/unix/utilsx11.h b/desmume/src/windows/wx/include/wx/unix/utilsx11.h deleted file mode 100644 index cad9f6744..000000000 --- a/desmume/src/windows/wx/include/wx/unix/utilsx11.h +++ /dev/null @@ -1,53 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/unix/utilsx11.h -// Purpose: Miscellaneous X11 functions -// Author: Mattia Barbon, Vaclav Slavik -// Modified by: -// Created: 25.03.02 -// RCS-ID: $Id: utilsx11.h 27408 2004-05-23 20:53:33Z JS $ -// Copyright: (c) wxWidgets team -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UNIX_UTILSX11_H_ -#define _WX_UNIX_UTILSX11_H_ - -#include "wx/defs.h" -#include "wx/gdicmn.h" - -// NB: Content of this header is for wxWidgets' private use! It is not -// part of public API and may be modified or even disappear in the future! - -#if defined(__WXMOTIF__) || defined(__WXGTK__) || defined(__WXX11__) - -#if defined(__WXGTK__) -typedef void WXDisplay; -typedef void* WXWindow; -#endif - -class wxIconBundle; - -void wxSetIconsX11( WXDisplay* display, WXWindow window, - const wxIconBundle& ib ); - - -enum wxX11FullScreenMethod -{ - wxX11_FS_AUTODETECT = 0, - wxX11_FS_WMSPEC, - wxX11_FS_KDE, - wxX11_FS_GENERIC -}; - -wxX11FullScreenMethod wxGetFullScreenMethodX11(WXDisplay* display, - WXWindow rootWindow); - -void wxSetFullScreenStateX11(WXDisplay* display, WXWindow rootWindow, - WXWindow window, bool show, wxRect *origSize, - wxX11FullScreenMethod method); - -#endif - // __WXMOTIF__, __WXGTK__, __WXX11__ - -#endif - // _WX_UNIX_UTILSX11_H_ diff --git a/desmume/src/windows/wx/include/wx/uri.h b/desmume/src/windows/wx/include/wx/uri.h deleted file mode 100644 index 23c97e2a1..000000000 --- a/desmume/src/windows/wx/include/wx/uri.h +++ /dev/null @@ -1,151 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: uri.h -// Purpose: wxURI - Class for parsing URIs -// Author: Ryan Norton -// Modified By: -// Created: 07/01/2004 -// RCS-ID: $Id: uri.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) Ryan Norton -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_URI_H_ -#define _WX_URI_H_ - -#include "wx/defs.h" -#include "wx/object.h" -#include "wx/string.h" - -// Host Type that the server component can be -enum wxURIHostType -{ - wxURI_REGNAME, // Host is a normal register name (www.mysite.com etc.) - wxURI_IPV4ADDRESS, // Host is a version 4 ip address (192.168.1.100) - wxURI_IPV6ADDRESS, // Host is a version 6 ip address [aa:aa:aa:aa::aa:aa]:5050 - wxURI_IPVFUTURE // Host is a future ip address (wxURI is unsure what kind) -}; - -// Component Flags -enum wxURIFieldType -{ - wxURI_SCHEME = 1, - wxURI_USERINFO = 2, - wxURI_SERVER = 4, - wxURI_PORT = 8, - wxURI_PATH = 16, - wxURI_QUERY = 32, - wxURI_FRAGMENT = 64 -}; - -// Miscellaneous other flags -enum wxURIFlags -{ - wxURI_STRICT = 1 -}; - - -// Generic class for parsing URIs. -// -// See RFC 3986 -class WXDLLIMPEXP_BASE wxURI : public wxObject -{ -public: - wxURI(); - wxURI(const wxString& uri); - wxURI(const wxURI& uri); - - virtual ~wxURI(); - - const wxChar* Create(const wxString& uri); - - bool HasScheme() const { return (m_fields & wxURI_SCHEME) == wxURI_SCHEME; } - bool HasUserInfo() const { return (m_fields & wxURI_USERINFO) == wxURI_USERINFO; } - bool HasServer() const { return (m_fields & wxURI_SERVER) == wxURI_SERVER; } - bool HasPort() const { return (m_fields & wxURI_PORT) == wxURI_PORT; } - bool HasPath() const { return (m_fields & wxURI_PATH) == wxURI_PATH; } - bool HasQuery() const { return (m_fields & wxURI_QUERY) == wxURI_QUERY; } - bool HasFragment() const { return (m_fields & wxURI_FRAGMENT) == wxURI_FRAGMENT; } - - const wxString& GetScheme() const { return m_scheme; } - const wxString& GetPath() const { return m_path; } - const wxString& GetQuery() const { return m_query; } - const wxString& GetFragment() const { return m_fragment; } - const wxString& GetPort() const { return m_port; } - const wxString& GetUserInfo() const { return m_userinfo; } - const wxString& GetServer() const { return m_server; } - const wxURIHostType& GetHostType() const { return m_hostType; } - - //Note that the following two get functions are explicitly depreciated by RFC 2396 - wxString GetUser() const; - wxString GetPassword() const; - - wxString BuildURI() const; - wxString BuildUnescapedURI() const; - - void Resolve(const wxURI& base, int flags = wxURI_STRICT); - bool IsReference() const; - - wxURI& operator = (const wxURI& uri); - wxURI& operator = (const wxString& string); - bool operator == (const wxURI& uri) const; - - static wxString Unescape (const wxString& szEscapedURI); - -protected: - wxURI& Assign(const wxURI& uri); - - void Clear(); - - const wxChar* Parse (const wxChar* uri); - const wxChar* ParseAuthority (const wxChar* uri); - const wxChar* ParseScheme (const wxChar* uri); - const wxChar* ParseUserInfo (const wxChar* uri); - const wxChar* ParseServer (const wxChar* uri); - const wxChar* ParsePort (const wxChar* uri); - const wxChar* ParsePath (const wxChar* uri, - bool bReference = false, - bool bNormalize = true); - const wxChar* ParseQuery (const wxChar* uri); - const wxChar* ParseFragment (const wxChar* uri); - - - static bool ParseH16(const wxChar*& uri); - static bool ParseIPv4address(const wxChar*& uri); - static bool ParseIPv6address(const wxChar*& uri); - static bool ParseIPvFuture(const wxChar*& uri); - - static void Normalize(wxChar* uri, bool bIgnoreLeads = false); - static void UpTree(const wxChar* uristart, const wxChar*& uri); - - static wxChar TranslateEscape(const wxChar* s); - static void Escape (wxString& s, const wxChar& c); - static bool IsEscape(const wxChar*& uri); - - static wxChar CharToHex(const wxChar& c); - - static bool IsUnreserved (const wxChar& c); - static bool IsReserved (const wxChar& c); - static bool IsGenDelim (const wxChar& c); - static bool IsSubDelim (const wxChar& c); - static bool IsHex(const wxChar& c); - static bool IsAlpha(const wxChar& c); - static bool IsDigit(const wxChar& c); - - wxString m_scheme; - wxString m_path; - wxString m_query; - wxString m_fragment; - - wxString m_userinfo; - wxString m_server; - wxString m_port; - - wxURIHostType m_hostType; - - size_t m_fields; - - DECLARE_DYNAMIC_CLASS(wxURI) -}; - -#endif // _WX_URI_H_ - diff --git a/desmume/src/windows/wx/include/wx/url.h b/desmume/src/windows/wx/include/wx/url.h deleted file mode 100644 index 6ef54f742..000000000 --- a/desmume/src/windows/wx/include/wx/url.h +++ /dev/null @@ -1,129 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: url.h -// Purpose: URL parser -// Author: Guilhem Lavaux -// Modified by: Ryan Norton -// Created: 20/07/1997 -// RCS-ID: $Id: url.h 41263 2006-09-17 10:59:18Z RR $ -// Copyright: (c) 1997, 1998 Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_URL_H -#define _WX_URL_H - -#include "wx/defs.h" - -#if wxUSE_URL - -#include "wx/uri.h" -#include "wx/protocol/protocol.h" - -#if wxUSE_PROTOCOL_HTTP - #include "wx/protocol/http.h" -#endif - -typedef enum { - wxURL_NOERR = 0, - wxURL_SNTXERR, - wxURL_NOPROTO, - wxURL_NOHOST, - wxURL_NOPATH, - wxURL_CONNERR, - wxURL_PROTOERR -} wxURLError; - -#if wxUSE_URL_NATIVE -class WXDLLIMPEXP_NET wxURL; - -class WXDLLIMPEXP_NET wxURLNativeImp : public wxObject -{ -public: - virtual ~wxURLNativeImp() { } - virtual wxInputStream *GetInputStream(wxURL *owner) = 0; -}; -#endif // wxUSE_URL_NATIVE - -class WXDLLIMPEXP_NET wxURL : public wxURI -{ -public: - wxURL(const wxString& sUrl = wxEmptyString); - wxURL(const wxURI& url); - virtual ~wxURL(); - - wxURL& operator = (const wxString& url); - wxURL& operator = (const wxURI& url); - - wxProtocol& GetProtocol() { return *m_protocol; } - wxURLError GetError() const { return m_error; } - wxString GetURL() const { return m_url; } - - wxURLError SetURL(const wxString &url) - { *this = url; return m_error; } - - bool IsOk() const - { return m_error == wxURL_NOERR; } - - wxInputStream *GetInputStream(); - -#if wxUSE_PROTOCOL_HTTP - static void SetDefaultProxy(const wxString& url_proxy); - void SetProxy(const wxString& url_proxy); -#endif // wxUSE_PROTOCOL_HTTP - -#if WXWIN_COMPATIBILITY_2_4 - //Use the proper wxURI accessors instead - wxDEPRECATED( wxString GetProtocolName() const ); - wxDEPRECATED( wxString GetHostName() const ); - wxDEPRECATED( wxString GetPath() const ); - - //Use wxURI instead - this does not work that well - wxDEPRECATED( static wxString ConvertToValidURI( - const wxString& uri, - const wxChar* delims = wxT(";/?:@&=+$,") - ) ); - - //Use wxURI::Unescape instead - wxDEPRECATED( static wxString ConvertFromURI(const wxString& uri) ); -#endif - -protected: - static wxProtoInfo *ms_protocols; - -#if wxUSE_PROTOCOL_HTTP - static wxHTTP *ms_proxyDefault; - static bool ms_useDefaultProxy; - wxHTTP *m_proxy; -#endif // wxUSE_PROTOCOL_HTTP - -#if wxUSE_URL_NATIVE - friend class wxURLNativeImp; - // pointer to a native URL implementation object - wxURLNativeImp *m_nativeImp; - // Creates on the heap and returns a native - // implementation object for the current platform. - static wxURLNativeImp *CreateNativeImpObject(); -#endif - wxProtoInfo *m_protoinfo; - wxProtocol *m_protocol; - - wxURLError m_error; - wxString m_url; - bool m_useProxy; - - void Init(const wxString&); - bool ParseURL(); - void CleanData(); - bool FetchProtocol(); - - friend class wxProtoInfo; - friend class wxURLModule; - -private: - DECLARE_DYNAMIC_CLASS(wxURL) -}; - -#endif // wxUSE_URL - -#endif // _WX_URL_H - diff --git a/desmume/src/windows/wx/include/wx/utils.h b/desmume/src/windows/wx/include/wx/utils.h deleted file mode 100644 index 1a8d4672e..000000000 --- a/desmume/src/windows/wx/include/wx/utils.h +++ /dev/null @@ -1,741 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/utils.h -// Purpose: Miscellaneous utilities -// Author: Julian Smart -// Modified by: -// Created: 29/01/98 -// RCS-ID: $Id: utils.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1998 Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_UTILSH__ -#define _WX_UTILSH__ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/object.h" -#include "wx/list.h" -#include "wx/filefn.h" -#if wxUSE_GUI - #include "wx/gdicmn.h" -#endif - -class WXDLLIMPEXP_FWD_BASE wxArrayString; -class WXDLLIMPEXP_FWD_BASE wxArrayInt; - -// need this for wxGetDiskSpace() as we can't, unfortunately, forward declare -// wxLongLong -#include "wx/longlong.h" - -// need for wxOperatingSystemId -#include "wx/platinfo.h" - -#ifdef __WATCOMC__ - #include <direct.h> -#elif defined(__X__) - #include <dirent.h> - #include <unistd.h> -#endif - -#include <stdio.h> - -// ---------------------------------------------------------------------------- -// Forward declaration -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_BASE wxProcess; -class WXDLLIMPEXP_FWD_CORE wxFrame; -class WXDLLIMPEXP_FWD_CORE wxWindow; -class WXDLLIMPEXP_FWD_CORE wxWindowList; - -// ---------------------------------------------------------------------------- -// Macros -// ---------------------------------------------------------------------------- - -#define wxMax(a,b) (((a) > (b)) ? (a) : (b)) -#define wxMin(a,b) (((a) < (b)) ? (a) : (b)) -#define wxClip(a,b,c) (((a) < (b)) ? (b) : (((a) > (c)) ? (c) : (a))) - -// wxGetFreeMemory can return huge amount of memory on 32-bit platforms as well -// so to always use long long for its result type on all platforms which -// support it -#if wxUSE_LONGLONG - typedef wxLongLong wxMemorySize; -#else - typedef long wxMemorySize; -#endif - -// ---------------------------------------------------------------------------- -// String functions (deprecated, use wxString) -// ---------------------------------------------------------------------------- - -// Make a copy of this string using 'new' -#if WXWIN_COMPATIBILITY_2_4 -wxDEPRECATED( WXDLLIMPEXP_BASE wxChar* copystring(const wxChar *s) ); -#endif - -// A shorter way of using strcmp -#define wxStringEq(s1, s2) (s1 && s2 && (wxStrcmp(s1, s2) == 0)) - -// ---------------------------------------------------------------------------- -// Miscellaneous functions -// ---------------------------------------------------------------------------- - -// Sound the bell -#if !defined __EMX__ && \ - (defined __WXMOTIF__ || defined __WXGTK__ || defined __WXX11__) -WXDLLIMPEXP_CORE void wxBell(); -#else -WXDLLIMPEXP_BASE void wxBell(); -#endif - -// Get OS description as a user-readable string -WXDLLIMPEXP_BASE wxString wxGetOsDescription(); - -// Get OS version -WXDLLIMPEXP_BASE wxOperatingSystemId wxGetOsVersion(int *majorVsn = (int *) NULL, - int *minorVsn = (int *) NULL); - -// Get platform endianness -WXDLLIMPEXP_BASE bool wxIsPlatformLittleEndian(); - -// Get platform architecture -WXDLLIMPEXP_BASE bool wxIsPlatform64Bit(); - -// Return a string with the current date/time -WXDLLIMPEXP_BASE wxString wxNow(); - -// Return path where wxWidgets is installed (mostly useful in Unices) -WXDLLIMPEXP_BASE const wxChar *wxGetInstallPrefix(); -// Return path to wxWin data (/usr/share/wx/%{version}) (Unices) -WXDLLIMPEXP_BASE wxString wxGetDataDir(); - -/* - * Class to make it easier to specify platform-dependent values - * - * Examples: - * long val = wxPlatform::If(wxMac, 1).ElseIf(wxGTK, 2).ElseIf(stPDA, 5).Else(3); - * wxString strVal = wxPlatform::If(wxMac, wxT("Mac")).ElseIf(wxMSW, wxT("MSW")).Else(wxT("Other")); - * - * A custom platform symbol: - * - * #define stPDA 100 - * #ifdef __WXWINCE__ - * wxPlatform::AddPlatform(stPDA); - * #endif - * - * long windowStyle = wxCAPTION | (long) wxPlatform::IfNot(stPDA, wxRESIZE_BORDER); - * - */ - -class WXDLLIMPEXP_BASE wxPlatform -{ -public: - wxPlatform() { Init(); } - wxPlatform(const wxPlatform& platform) { Copy(platform); } - void operator = (const wxPlatform& platform) { Copy(platform); } - void Copy(const wxPlatform& platform); - - // Specify an optional default value - wxPlatform(int defValue) { Init(); m_longValue = (long)defValue; } - wxPlatform(long defValue) { Init(); m_longValue = defValue; } - wxPlatform(const wxString& defValue) { Init(); m_stringValue = defValue; } - wxPlatform(double defValue) { Init(); m_doubleValue = defValue; } - - static wxPlatform If(int platform, long value); - static wxPlatform IfNot(int platform, long value); - wxPlatform& ElseIf(int platform, long value); - wxPlatform& ElseIfNot(int platform, long value); - wxPlatform& Else(long value); - - static wxPlatform If(int platform, int value) { return If(platform, (long)value); } - static wxPlatform IfNot(int platform, int value) { return IfNot(platform, (long)value); } - wxPlatform& ElseIf(int platform, int value) { return ElseIf(platform, (long) value); } - wxPlatform& ElseIfNot(int platform, int value) { return ElseIfNot(platform, (long) value); } - wxPlatform& Else(int value) { return Else((long) value); } - - static wxPlatform If(int platform, double value); - static wxPlatform IfNot(int platform, double value); - wxPlatform& ElseIf(int platform, double value); - wxPlatform& ElseIfNot(int platform, double value); - wxPlatform& Else(double value); - - static wxPlatform If(int platform, const wxString& value); - static wxPlatform IfNot(int platform, const wxString& value); - wxPlatform& ElseIf(int platform, const wxString& value); - wxPlatform& ElseIfNot(int platform, const wxString& value); - wxPlatform& Else(const wxString& value); - - long GetInteger() const { return m_longValue; } - const wxString& GetString() const { return m_stringValue; } - double GetDouble() const { return m_doubleValue; } - - operator int() const { return (int) GetInteger(); } - operator long() const { return GetInteger(); } - operator double() const { return GetDouble(); } - operator const wxString() const { return GetString(); } - operator const wxChar*() const { return (const wxChar*) GetString(); } - - static void AddPlatform(int platform); - static bool Is(int platform); - static void ClearPlatforms(); - -private: - - void Init() { m_longValue = 0; m_doubleValue = 0.0; } - - long m_longValue; - double m_doubleValue; - wxString m_stringValue; - static wxArrayInt* sm_customPlatforms; -}; - -/// Function for testing current platform -inline bool wxPlatformIs(int platform) { return wxPlatform::Is(platform); } - -#if wxUSE_GUI - -// Get the state of a key (true if pressed, false if not) -// This is generally most useful getting the state of -// the modifier or toggle keys. -WXDLLEXPORT bool wxGetKeyState(wxKeyCode key); - - -// Don't synthesize KeyUp events holding down a key and producing -// KeyDown events with autorepeat. On by default and always on -// in wxMSW. -WXDLLEXPORT bool wxSetDetectableAutoRepeat( bool flag ); - - -// wxMouseState is used to hold information about button and modifier state -// and is what is returned from wxGetMouseState. -class WXDLLEXPORT wxMouseState -{ -public: - wxMouseState() - : m_x(0), m_y(0), - m_leftDown(false), m_middleDown(false), m_rightDown(false), - m_controlDown(false), m_shiftDown(false), m_altDown(false), - m_metaDown(false) - {} - - wxCoord GetX() { return m_x; } - wxCoord GetY() { return m_y; } - - bool LeftDown() { return m_leftDown; } - bool MiddleDown() { return m_middleDown; } - bool RightDown() { return m_rightDown; } - - bool ControlDown() { return m_controlDown; } - bool ShiftDown() { return m_shiftDown; } - bool AltDown() { return m_altDown; } - bool MetaDown() { return m_metaDown; } - bool CmdDown() - { -#if defined(__WXMAC__) || defined(__WXCOCOA__) - return MetaDown(); -#else - return ControlDown(); -#endif - } - - void SetX(wxCoord x) { m_x = x; } - void SetY(wxCoord y) { m_y = y; } - - void SetLeftDown(bool down) { m_leftDown = down; } - void SetMiddleDown(bool down) { m_middleDown = down; } - void SetRightDown(bool down) { m_rightDown = down; } - - void SetControlDown(bool down) { m_controlDown = down; } - void SetShiftDown(bool down) { m_shiftDown = down; } - void SetAltDown(bool down) { m_altDown = down; } - void SetMetaDown(bool down) { m_metaDown = down; } - -private: - wxCoord m_x; - wxCoord m_y; - - bool m_leftDown : 1; - bool m_middleDown : 1; - bool m_rightDown : 1; - - bool m_controlDown : 1; - bool m_shiftDown : 1; - bool m_altDown : 1; - bool m_metaDown : 1; -}; - - -// Returns the current state of the mouse position, buttons and modifers -WXDLLEXPORT wxMouseState wxGetMouseState(); - - -// ---------------------------------------------------------------------------- -// Window ID management -// ---------------------------------------------------------------------------- - -// Generate a unique ID -WXDLLEXPORT long wxNewId(); - -// Ensure subsequent IDs don't clash with this one -WXDLLEXPORT void wxRegisterId(long id); - -// Return the current ID -WXDLLEXPORT long wxGetCurrentId(); - -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// Various conversions -// ---------------------------------------------------------------------------- - -// these functions are deprecated, use wxString methods instead! -#if WXWIN_COMPATIBILITY_2_4 - -extern WXDLLIMPEXP_DATA_BASE(const wxChar*) wxFloatToStringStr; -extern WXDLLIMPEXP_DATA_BASE(const wxChar*) wxDoubleToStringStr; - -wxDEPRECATED( WXDLLIMPEXP_BASE void StringToFloat(const wxChar *s, float *number) ); -wxDEPRECATED( WXDLLIMPEXP_BASE wxChar* FloatToString(float number, const wxChar *fmt = wxFloatToStringStr) ); -wxDEPRECATED( WXDLLIMPEXP_BASE void StringToDouble(const wxChar *s, double *number) ); -wxDEPRECATED( WXDLLIMPEXP_BASE wxChar* DoubleToString(double number, const wxChar *fmt = wxDoubleToStringStr) ); -wxDEPRECATED( WXDLLIMPEXP_BASE void StringToInt(const wxChar *s, int *number) ); -wxDEPRECATED( WXDLLIMPEXP_BASE void StringToLong(const wxChar *s, long *number) ); -wxDEPRECATED( WXDLLIMPEXP_BASE wxChar* IntToString(int number) ); -wxDEPRECATED( WXDLLIMPEXP_BASE wxChar* LongToString(long number) ); - -#endif // WXWIN_COMPATIBILITY_2_4 - -// Convert 2-digit hex number to decimal -WXDLLIMPEXP_BASE int wxHexToDec(const wxString& buf); - -// Convert decimal integer to 2-character hex string -WXDLLIMPEXP_BASE void wxDecToHex(int dec, wxChar *buf); -WXDLLIMPEXP_BASE wxString wxDecToHex(int dec); - -// ---------------------------------------------------------------------------- -// Process management -// ---------------------------------------------------------------------------- - -// NB: for backwards compatibility reasons the values of wxEXEC_[A]SYNC *must* -// be 0 and 1, don't change! - -enum -{ - // execute the process asynchronously - wxEXEC_ASYNC = 0, - - // execute it synchronously, i.e. wait until it finishes - wxEXEC_SYNC = 1, - - // under Windows, don't hide the child even if it's IO is redirected (this - // is done by default) - wxEXEC_NOHIDE = 2, - - // under Unix, if the process is the group leader then passing wxKILL_CHILDREN to wxKill - // kills all children as well as pid - wxEXEC_MAKE_GROUP_LEADER = 4, - - // by default synchronous execution disables all program windows to avoid - // that the user interacts with the program while the child process is - // running, you can use this flag to prevent this from happening - wxEXEC_NODISABLE = 8 -}; - -// Execute another program. -// -// If flags contain wxEXEC_SYNC, return -1 on failure and the exit code of the -// process if everything was ok. Otherwise (i.e. if wxEXEC_ASYNC), return 0 on -// failure and the PID of the launched process if ok. -WXDLLIMPEXP_BASE long wxExecute(wxChar **argv, int flags = wxEXEC_ASYNC, - wxProcess *process = (wxProcess *) NULL); -WXDLLIMPEXP_BASE long wxExecute(const wxString& command, int flags = wxEXEC_ASYNC, - wxProcess *process = (wxProcess *) NULL); - -// execute the command capturing its output into an array line by line, this is -// always synchronous -WXDLLIMPEXP_BASE long wxExecute(const wxString& command, - wxArrayString& output, - int flags = 0); - -// also capture stderr (also synchronous) -WXDLLIMPEXP_BASE long wxExecute(const wxString& command, - wxArrayString& output, - wxArrayString& error, - int flags = 0); - -#if defined(__WXMSW__) && 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 - -enum wxSignal -{ - wxSIGNONE = 0, // verify if the process exists under Unix - wxSIGHUP, - wxSIGINT, - wxSIGQUIT, - wxSIGILL, - wxSIGTRAP, - wxSIGABRT, - wxSIGIOT = wxSIGABRT, // another name - wxSIGEMT, - wxSIGFPE, - wxSIGKILL, - wxSIGBUS, - wxSIGSEGV, - wxSIGSYS, - wxSIGPIPE, - wxSIGALRM, - wxSIGTERM - - // further signals are different in meaning between different Unix systems -}; - -enum wxKillError -{ - wxKILL_OK, // no error - wxKILL_BAD_SIGNAL, // no such signal - wxKILL_ACCESS_DENIED, // permission denied - wxKILL_NO_PROCESS, // no such process - wxKILL_ERROR // another, unspecified error -}; - -enum wxKillFlags -{ - wxKILL_NOCHILDREN = 0, // don't kill children - wxKILL_CHILDREN = 1 // kill children -}; - -enum wxShutdownFlags -{ - wxSHUTDOWN_POWEROFF, // power off the computer - wxSHUTDOWN_REBOOT // shutdown and reboot -}; - -// Shutdown or reboot the PC -WXDLLIMPEXP_BASE bool wxShutdown(wxShutdownFlags wFlags); - -// send the given signal to the process (only NONE and KILL are supported under -// Windows, all others mean TERM), return 0 if ok and -1 on error -// -// return detailed error in rc if not NULL -WXDLLIMPEXP_BASE int wxKill(long pid, - wxSignal sig = wxSIGTERM, - wxKillError *rc = NULL, - int flags = wxKILL_NOCHILDREN); - -// Execute a command in an interactive shell window (always synchronously) -// If no command then just the shell -WXDLLIMPEXP_BASE bool wxShell(const wxString& command = wxEmptyString); - -// As wxShell(), but must give a (non interactive) command and its output will -// be returned in output array -WXDLLIMPEXP_BASE bool wxShell(const wxString& command, wxArrayString& output); - -// Sleep for nSecs seconds -WXDLLIMPEXP_BASE void wxSleep(int nSecs); - -// Sleep for a given amount of milliseconds -WXDLLIMPEXP_BASE void wxMilliSleep(unsigned long milliseconds); - -// Sleep for a given amount of microseconds -WXDLLIMPEXP_BASE void wxMicroSleep(unsigned long microseconds); - -// Sleep for a given amount of milliseconds (old, bad name), use wxMilliSleep -wxDEPRECATED( WXDLLIMPEXP_BASE void wxUsleep(unsigned long milliseconds) ); - -// Get the process id of the current process -WXDLLIMPEXP_BASE unsigned long wxGetProcessId(); - -// Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX) -WXDLLIMPEXP_BASE wxMemorySize wxGetFreeMemory(); - -#if wxUSE_ON_FATAL_EXCEPTION - -// should wxApp::OnFatalException() be called? -WXDLLIMPEXP_BASE bool wxHandleFatalExceptions(bool doit = true); - -#endif // wxUSE_ON_FATAL_EXCEPTION - -// flags for wxLaunchDefaultBrowser -enum -{ - wxBROWSER_NEW_WINDOW = 1 -}; - -// Launch url in the user's default internet browser -WXDLLIMPEXP_BASE bool wxLaunchDefaultBrowser(const wxString& url, int flags = 0); - -// ---------------------------------------------------------------------------- -// Environment variables -// ---------------------------------------------------------------------------- - -// returns true if variable exists (value may be NULL if you just want to check -// for this) -WXDLLIMPEXP_BASE bool wxGetEnv(const wxString& var, wxString *value); - -// set the env var name to the given value, return true on success -WXDLLIMPEXP_BASE bool wxSetEnv(const wxString& var, const wxChar *value); - -// remove the env var from environment -inline bool wxUnsetEnv(const wxString& var) { return wxSetEnv(var, NULL); } - -// ---------------------------------------------------------------------------- -// Network and username functions. -// ---------------------------------------------------------------------------- - -// NB: "char *" functions are deprecated, use wxString ones! - -// Get eMail address -WXDLLIMPEXP_BASE bool wxGetEmailAddress(wxChar *buf, int maxSize); -WXDLLIMPEXP_BASE wxString wxGetEmailAddress(); - -// Get hostname. -WXDLLIMPEXP_BASE bool wxGetHostName(wxChar *buf, int maxSize); -WXDLLIMPEXP_BASE wxString wxGetHostName(); - -// Get FQDN -WXDLLIMPEXP_BASE wxString wxGetFullHostName(); -WXDLLIMPEXP_BASE bool wxGetFullHostName(wxChar *buf, int maxSize); - -// Get user ID e.g. jacs (this is known as login name under Unix) -WXDLLIMPEXP_BASE bool wxGetUserId(wxChar *buf, int maxSize); -WXDLLIMPEXP_BASE wxString wxGetUserId(); - -// Get user name e.g. Julian Smart -WXDLLIMPEXP_BASE bool wxGetUserName(wxChar *buf, int maxSize); -WXDLLIMPEXP_BASE wxString wxGetUserName(); - -// Get current Home dir and copy to dest (returns pstr->c_str()) -WXDLLIMPEXP_BASE wxString wxGetHomeDir(); -WXDLLIMPEXP_BASE const wxChar* wxGetHomeDir(wxString *pstr); - -// Get the user's home dir (caller must copy --- volatile) -// returns NULL is no HOME dir is known -#if defined(__UNIX__) && wxUSE_UNICODE && !defined(__WINE__) -WXDLLIMPEXP_BASE const wxMB2WXbuf wxGetUserHome(const wxString& user = wxEmptyString); -#else -WXDLLIMPEXP_BASE wxChar* wxGetUserHome(const wxString& user = wxEmptyString); -#endif - -#if wxUSE_LONGLONG - typedef wxLongLong wxDiskspaceSize_t; -#else - typedef long wxDiskspaceSize_t; -#endif - -// get number of total/free bytes on the disk where path belongs -WXDLLIMPEXP_BASE bool wxGetDiskSpace(const wxString& path, - wxDiskspaceSize_t *pTotal = NULL, - wxDiskspaceSize_t *pFree = NULL); - -#if wxUSE_GUI // GUI only things from now on - -// ---------------------------------------------------------------------------- -// Menu accelerators related things -// ---------------------------------------------------------------------------- - -// flags for wxStripMenuCodes -enum -{ - // strip '&' characters - wxStrip_Mnemonics = 1, - - // strip everything after '\t' - wxStrip_Accel = 2, - - // strip everything (this is the default) - wxStrip_All = wxStrip_Mnemonics | wxStrip_Accel -}; - -// strip mnemonics and/or accelerators from the label -WXDLLEXPORT wxString -wxStripMenuCodes(const wxString& str, int flags = wxStrip_All); - -#if WXWIN_COMPATIBILITY_2_6 -// obsolete and deprecated version, do not use, use the above overload instead -wxDEPRECATED( - WXDLLEXPORT wxChar* wxStripMenuCodes(const wxChar *in, wxChar *out = NULL) -); - -#if wxUSE_ACCEL -class WXDLLIMPEXP_FWD_CORE wxAcceleratorEntry; - -// use wxAcceleratorEntry::Create() or FromString() methods instead -wxDEPRECATED( - WXDLLEXPORT wxAcceleratorEntry *wxGetAccelFromString(const wxString& label) -); -#endif // wxUSE_ACCEL - -#endif // WXWIN_COMPATIBILITY_2_6 - -// ---------------------------------------------------------------------------- -// Window search -// ---------------------------------------------------------------------------- - -// Returns menu item id or wxNOT_FOUND if none. -WXDLLEXPORT int wxFindMenuItemId(wxFrame *frame, const wxString& menuString, const wxString& itemString); - -// Find the wxWindow at the given point. wxGenericFindWindowAtPoint -// is always present but may be less reliable than a native version. -WXDLLEXPORT wxWindow* wxGenericFindWindowAtPoint(const wxPoint& pt); -WXDLLEXPORT wxWindow* wxFindWindowAtPoint(const wxPoint& pt); - -// NB: this function is obsolete, use wxWindow::FindWindowByLabel() instead -// -// Find the window/widget with the given title or label. -// Pass a parent to begin the search from, or NULL to look through -// all windows. -WXDLLEXPORT wxWindow* wxFindWindowByLabel(const wxString& title, wxWindow *parent = (wxWindow *) NULL); - -// NB: this function is obsolete, use wxWindow::FindWindowByName() instead -// -// Find window by name, and if that fails, by label. -WXDLLEXPORT wxWindow* wxFindWindowByName(const wxString& name, wxWindow *parent = (wxWindow *) NULL); - -// ---------------------------------------------------------------------------- -// Message/event queue helpers -// ---------------------------------------------------------------------------- - -// Yield to other apps/messages and disable user input -WXDLLEXPORT bool wxSafeYield(wxWindow *win = NULL, bool onlyIfNeeded = false); - -// Enable or disable input to all top level windows -WXDLLEXPORT void wxEnableTopLevelWindows(bool enable = true); - -// Check whether this window wants to process messages, e.g. Stop button -// in long calculations. -WXDLLEXPORT bool wxCheckForInterrupt(wxWindow *wnd); - -// Consume all events until no more left -WXDLLEXPORT void wxFlushEvents(); - -// a class which disables all windows (except, may be, thegiven one) in its -// ctor and enables them back in its dtor -class WXDLLEXPORT wxWindowDisabler -{ -public: - wxWindowDisabler(wxWindow *winToSkip = (wxWindow *)NULL); - ~wxWindowDisabler(); - -private: - wxWindowList *m_winDisabled; - - DECLARE_NO_COPY_CLASS(wxWindowDisabler) -}; - -// ---------------------------------------------------------------------------- -// Cursors -// ---------------------------------------------------------------------------- - -// Set the cursor to the busy cursor for all windows -WXDLLIMPEXP_CORE void wxBeginBusyCursor(const wxCursor *cursor = wxHOURGLASS_CURSOR); - -// Restore cursor to normal -WXDLLEXPORT void wxEndBusyCursor(); - -// true if we're between the above two calls -WXDLLEXPORT bool wxIsBusy(); - -// Convenience class so we can just create a wxBusyCursor object on the stack -class WXDLLEXPORT wxBusyCursor -{ -public: - wxBusyCursor(const wxCursor* cursor = wxHOURGLASS_CURSOR) - { wxBeginBusyCursor(cursor); } - ~wxBusyCursor() - { wxEndBusyCursor(); } - - // FIXME: These two methods are currently only implemented (and needed?) - // in wxGTK. BusyCursor handling should probably be moved to - // common code since the wxGTK and wxMSW implementations are very - // similar except for wxMSW using HCURSOR directly instead of - // wxCursor.. -- RL. - static const wxCursor &GetStoredCursor(); - static const wxCursor GetBusyCursor(); -}; - - -// ---------------------------------------------------------------------------- -// Reading and writing resources (eg WIN.INI, .Xdefaults) -// ---------------------------------------------------------------------------- - -#if wxUSE_RESOURCES -WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, const wxString& value, const wxString& file = wxEmptyString); -WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, float value, const wxString& file = wxEmptyString); -WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, long value, const wxString& file = wxEmptyString); -WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, int value, const wxString& file = wxEmptyString); - -WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, wxChar **value, const wxString& file = wxEmptyString); -WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, float *value, const wxString& file = wxEmptyString); -WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, long *value, const wxString& file = wxEmptyString); -WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, int *value, const wxString& file = wxEmptyString); -#endif // wxUSE_RESOURCES - -void WXDLLEXPORT wxGetMousePosition( int* x, int* y ); - -// MSW only: get user-defined resource from the .res file. -// Returns NULL or newly-allocated memory, so use delete[] to clean up. -#ifdef __WXMSW__ - extern WXDLLEXPORT const wxChar* wxUserResourceStr; - WXDLLEXPORT wxChar* wxLoadUserResource(const wxString& resourceName, const wxString& resourceType = wxUserResourceStr); -#endif // MSW - -// ---------------------------------------------------------------------------- -// Display and colorss (X only) -// ---------------------------------------------------------------------------- - -#ifdef __WXGTK__ - void *wxGetDisplay(); -#endif - -#ifdef __X__ - WXDLLIMPEXP_CORE WXDisplay *wxGetDisplay(); - WXDLLIMPEXP_CORE bool wxSetDisplay(const wxString& display_name); - WXDLLIMPEXP_CORE wxString wxGetDisplayName(); -#endif // X or GTK+ - -#ifdef __X__ - -#ifdef __VMS__ // Xlib.h for VMS is not (yet) compatible with C++ - // The resulting warnings are switched off here -#pragma message disable nosimpint -#endif -// #include <X11/Xlib.h> -#ifdef __VMS__ -#pragma message enable nosimpint -#endif - -#endif //__X__ - -#endif // wxUSE_GUI - -// ---------------------------------------------------------------------------- -// wxYield(): these functions are obsolete, please use wxApp methods instead! -// ---------------------------------------------------------------------------- - -// avoid redeclaring this function here if it had been already declated by -// wx/app.h, this results in warnings from g++ with -Wredundant-decls -#ifndef wx_YIELD_DECLARED -#define wx_YIELD_DECLARED - -// Yield to other apps/messages -WXDLLIMPEXP_BASE bool wxYield(); - -#endif // wx_YIELD_DECLARED - -// Like wxYield, but fails silently if the yield is recursive. -WXDLLIMPEXP_BASE bool wxYieldIfNeeded(); - -// ---------------------------------------------------------------------------- -// Error message functions used by wxWidgets (deprecated, use wxLog) -// ---------------------------------------------------------------------------- - -#endif - // _WX_UTILSH__ diff --git a/desmume/src/windows/wx/include/wx/valgen.h b/desmume/src/windows/wx/include/wx/valgen.h deleted file mode 100644 index 35dd44ff5..000000000 --- a/desmume/src/windows/wx/include/wx/valgen.h +++ /dev/null @@ -1,69 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: valgen.h -// Purpose: wxGenericValidator class -// Author: Kevin Smith -// Modified by: -// Created: Jan 22 1999 -// RCS-ID: -// Copyright: (c) 1999 Julian Smart (assigned from Kevin) -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_VALGENH__ -#define _WX_VALGENH__ - -#include "wx/validate.h" - -#if wxUSE_VALIDATORS - -class WXDLLEXPORT wxGenericValidator: public wxValidator -{ -DECLARE_CLASS(wxGenericValidator) -public: - wxGenericValidator(bool* val); - wxGenericValidator(int* val); - wxGenericValidator(wxString* val); - wxGenericValidator(wxArrayInt* val); - wxGenericValidator(const wxGenericValidator& copyFrom); - - virtual ~wxGenericValidator(){} - - // Make a clone of this validator (or return NULL) - currently necessary - // if you're passing a reference to a validator. - // Another possibility is to always pass a pointer to a new validator - // (so the calling code can use a copy constructor of the relevant class). - virtual wxObject *Clone() const { return new wxGenericValidator(*this); } - bool Copy(const wxGenericValidator& val); - - // Called when the value in the window must be validated. - // This function can pop up an error message. - virtual bool Validate(wxWindow * WXUNUSED(parent)) { return true; } - - // Called to transfer data to the window - virtual bool TransferToWindow(); - - // Called to transfer data to the window - virtual bool TransferFromWindow(); - -protected: - void Initialize(); - - bool* m_pBool; - int* m_pInt; - wxString* m_pString; - wxArrayInt* m_pArrayInt; - -private: -// Cannot use -// DECLARE_NO_COPY_CLASS(wxGenericValidator) -// because copy constructor is explicitly declared above; -// but no copy assignment operator is defined, so declare -// it private to prevent the compiler from defining it: - wxGenericValidator& operator=(const wxGenericValidator&); -}; - -#endif - // wxUSE_VALIDATORS - -#endif - // _WX_VALGENH__ diff --git a/desmume/src/windows/wx/include/wx/validate.h b/desmume/src/windows/wx/include/wx/validate.h deleted file mode 100644 index b25649fb3..000000000 --- a/desmume/src/windows/wx/include/wx/validate.h +++ /dev/null @@ -1,98 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/validate.h -// Purpose: wxValidator class -// Author: Julian Smart -// Modified by: -// Created: 29/01/98 -// RCS-ID: $Id: validate.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1998 Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_VALIDATE_H_ -#define _WX_VALIDATE_H_ - -#include "wx/defs.h" - -#if wxUSE_VALIDATORS - -#include "wx/event.h" - -class WXDLLIMPEXP_FWD_CORE wxWindow; -class WXDLLIMPEXP_FWD_CORE wxWindowBase; - -/* - A validator has up to three purposes: - - 1) To validate the data in the window that's associated - with the validator. - 2) To transfer data to and from the window. - 3) To filter input, using its role as a wxEvtHandler - to intercept e.g. OnChar. - - Note that wxValidator and derived classes use reference counting. -*/ - -class WXDLLEXPORT wxValidator : public wxEvtHandler -{ -public: - wxValidator(); - virtual ~wxValidator(); - - // Make a clone of this validator (or return NULL) - currently necessary - // if you're passing a reference to a validator. - // Another possibility is to always pass a pointer to a new validator - // (so the calling code can use a copy constructor of the relevant class). - virtual wxObject *Clone() const - { return (wxValidator *)NULL; } - bool Copy(const wxValidator& val) - { m_validatorWindow = val.m_validatorWindow; return true; } - - // Called when the value in the window must be validated. - // This function can pop up an error message. - virtual bool Validate(wxWindow *WXUNUSED(parent)) { return false; } - - // Called to transfer data to the window - virtual bool TransferToWindow() { return false; } - - // Called to transfer data from the window - virtual bool TransferFromWindow() { return false; } - - // accessors - wxWindow *GetWindow() const { return (wxWindow *)m_validatorWindow; } - void SetWindow(wxWindowBase *win) { m_validatorWindow = win; } - - // validators beep by default if invalid key is pressed, these functions - // allow to change it - static bool IsSilent() { return ms_isSilent; } - static void SetBellOnError(bool doIt = true) { ms_isSilent = doIt; } - -protected: - wxWindowBase *m_validatorWindow; - -private: - static bool ms_isSilent; - - DECLARE_DYNAMIC_CLASS(wxValidator) - DECLARE_NO_COPY_CLASS(wxValidator) -}; - -extern WXDLLEXPORT_DATA(const wxValidator) wxDefaultValidator; - -#define wxVALIDATOR_PARAM(val) val - -#else // !wxUSE_VALIDATORS - // wxWidgets is compiled without support for wxValidator, but we still - // want to be able to pass wxDefaultValidator to the functions which take - // a wxValidator parameter to avoid using "#if wxUSE_VALIDATORS" - // everywhere - class WXDLLEXPORT wxValidator; - #define wxDefaultValidator (*((wxValidator *)NULL)) - - // this macro allows to avoid warnings about unused parameters when - // wxUSE_VALIDATORS == 0 - #define wxVALIDATOR_PARAM(val) -#endif // wxUSE_VALIDATORS/!wxUSE_VALIDATORS - -#endif // _WX_VALIDATE_H_ - diff --git a/desmume/src/windows/wx/include/wx/valtext.h b/desmume/src/windows/wx/include/wx/valtext.h deleted file mode 100644 index cccec0f60..000000000 --- a/desmume/src/windows/wx/include/wx/valtext.h +++ /dev/null @@ -1,122 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: valtext.h -// Purpose: wxTextValidator class -// Author: Julian Smart -// Modified by: -// Created: 29/01/98 -// RCS-ID: $Id: valtext.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) 1998 Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_VALTEXTH__ -#define _WX_VALTEXTH__ - -#include "wx/defs.h" - -#if wxUSE_VALIDATORS && wxUSE_TEXTCTRL - -#include "wx/textctrl.h" -#include "wx/validate.h" - -#define wxFILTER_NONE 0x0000 -#define wxFILTER_ASCII 0x0001 -#define wxFILTER_ALPHA 0x0002 -#define wxFILTER_ALPHANUMERIC 0x0004 -#define wxFILTER_NUMERIC 0x0008 -#define wxFILTER_INCLUDE_LIST 0x0010 -#define wxFILTER_EXCLUDE_LIST 0x0020 -#define wxFILTER_INCLUDE_CHAR_LIST 0x0040 -#define wxFILTER_EXCLUDE_CHAR_LIST 0x0080 - -class WXDLLEXPORT wxTextValidator: public wxValidator -{ -DECLARE_DYNAMIC_CLASS(wxTextValidator) -public: - - wxTextValidator(long style = wxFILTER_NONE, wxString *val = 0); - wxTextValidator(const wxTextValidator& val); - - virtual ~wxTextValidator(){} - - // Make a clone of this validator (or return NULL) - currently necessary - // if you're passing a reference to a validator. - // Another possibility is to always pass a pointer to a new validator - // (so the calling code can use a copy constructor of the relevant class). - virtual wxObject *Clone() const { return new wxTextValidator(*this); } - bool Copy(const wxTextValidator& val); - - // Called when the value in the window must be validated. - // This function can pop up an error message. - virtual bool Validate(wxWindow *parent); - - // Called to transfer data to the window - virtual bool TransferToWindow(); - - // Called to transfer data from the window - virtual bool TransferFromWindow(); - - // ACCESSORS - inline long GetStyle() const { return m_validatorStyle; } - inline void SetStyle(long style) { m_validatorStyle = style; } - -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( void SetIncludeList(const wxStringList& list) ); - wxDEPRECATED( wxStringList& GetIncludeList() ); - - wxDEPRECATED( void SetExcludeList(const wxStringList& list) ); - wxDEPRECATED( wxStringList& GetExcludeList() ); - - wxDEPRECATED( bool IsInCharIncludeList(const wxString& val) ); - wxDEPRECATED( bool IsNotInCharExcludeList(const wxString& val) ); -#endif - - void SetIncludes(const wxArrayString& includes) { m_includes = includes; } - inline wxArrayString& GetIncludes() { return m_includes; } - - void SetExcludes(const wxArrayString& excludes) { m_excludes = excludes; } - inline wxArrayString& GetExcludes() { return m_excludes; } - - bool IsInCharIncludes(const wxString& val); - bool IsNotInCharExcludes(const wxString& val); - - // Filter keystrokes - void OnChar(wxKeyEvent& event); - - -DECLARE_EVENT_TABLE() - -protected: - long m_validatorStyle; - wxString * m_stringValue; -#if WXWIN_COMPATIBILITY_2_4 - wxStringList m_includeList; - wxStringList m_excludeList; -#endif - wxArrayString m_includes; - wxArrayString m_excludes; - - bool CheckValidator() const - { - wxCHECK_MSG( m_validatorWindow, false, - _T("No window associated with validator") ); - wxCHECK_MSG( m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)), false, - _T("wxTextValidator is only for wxTextCtrl's") ); - - return true; - } - -private: -// Cannot use -// DECLARE_NO_COPY_CLASS(wxTextValidator) -// because copy constructor is explicitly declared above; -// but no copy assignment operator is defined, so declare -// it private to prevent the compiler from defining it: - wxTextValidator& operator=(const wxTextValidator&); -}; - -#endif - // wxUSE_VALIDATORS && wxUSE_TEXTCTRL - -#endif - // _WX_VALTEXTH__ diff --git a/desmume/src/windows/wx/include/wx/variant.h b/desmume/src/windows/wx/include/wx/variant.h deleted file mode 100644 index 242915091..000000000 --- a/desmume/src/windows/wx/include/wx/variant.h +++ /dev/null @@ -1,423 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/variant.h -// Purpose: wxVariant class, container for any type -// Author: Julian Smart -// Modified by: -// Created: 10/09/98 -// RCS-ID: $Id: variant.h 42997 2006-11-03 21:37:08Z VZ $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_VARIANT_H_ -#define _WX_VARIANT_H_ - -#include "wx/defs.h" - -#if wxUSE_VARIANT - -#include "wx/object.h" -#include "wx/string.h" -#include "wx/arrstr.h" -#include "wx/list.h" -#include "wx/cpp.h" - -#if wxUSE_DATETIME - #include "wx/datetime.h" -#endif // wxUSE_DATETIME - -#if wxUSE_ODBC - #include "wx/db.h" // will #include sqltypes.h -#endif //ODBC - -#include "wx/iosfwrap.h" - -/* - * wxVariantData stores the actual data in a wxVariant object, - * to allow it to store any type of data. - * Derive from this to provide custom data handling. - * - * NB: To prevent addition of extra vtbl pointer to wxVariantData, - * we don't multiple-inherit from wxObjectRefData. Instead, - * we simply replicate the wxObject ref-counting scheme. - * - * NB: When you construct a wxVariantData, it will have refcount - * of one. Refcount will not be further increased when - * it is passed to wxVariant. This simulates old common - * scenario where wxVariant took ownership of wxVariantData - * passed to it. - * If you create wxVariantData for other reasons than passing - * it to wxVariant, technically you are not required to call - * DecRef() before deleting it. - * - * TODO: in order to replace wxPropertyValue, we would need - * to consider adding constructors that take pointers to C++ variables, - * or removing that functionality from the wxProperty library. - * Essentially wxPropertyValue takes on some of the wxValidator functionality - * by storing pointers and not just actual values, allowing update of C++ data - * to be handled automatically. Perhaps there's another way of doing this without - * overloading wxVariant with unnecessary functionality. - */ - -class WXDLLIMPEXP_BASE wxVariantData: public wxObject -{ - friend class wxVariant; -public: - wxVariantData() - : wxObject(), m_count(1) - { } - - // Override these to provide common functionality - virtual bool Eq(wxVariantData& data) const = 0; - -#if wxUSE_STD_IOSTREAM - virtual bool Write(wxSTD ostream& WXUNUSED(str)) const { return false; } -#endif - virtual bool Write(wxString& WXUNUSED(str)) const { return false; } -#if wxUSE_STD_IOSTREAM - virtual bool Read(wxSTD istream& WXUNUSED(str)) { return false; } -#endif - virtual bool Read(wxString& WXUNUSED(str)) { return false; } - // What type is it? Return a string name. - virtual wxString GetType() const = 0; - // If it based on wxObject return the ClassInfo. - virtual wxClassInfo* GetValueClassInfo() { return NULL; } - - void IncRef() { m_count++; } - void DecRef() - { - if ( --m_count == 0 ) - delete this; - } - - int GetRefCount() const { return m_count; } - -protected: - // Protected dtor should make some incompatible code - // break more louder. That is, they should do data->DecRef() - // instead of delete data. - virtual ~wxVariantData() { } - -private: - int m_count; - -private: - DECLARE_ABSTRACT_CLASS(wxVariantData) -}; - -/* - * wxVariant can store any kind of data, but has some basic types - * built in. - */ - -class WXDLLIMPEXP_BASE wxVariant: public wxObject -{ -public: - wxVariant(); - - wxVariant(const wxVariant& variant); - wxVariant(wxVariantData* data, const wxString& name = wxEmptyString); - virtual ~wxVariant(); - - // generic assignment - void operator= (const wxVariant& variant); - - // Assignment using data, e.g. - // myVariant = new wxStringVariantData("hello"); - void operator= (wxVariantData* variantData); - - bool operator== (const wxVariant& variant) const; - bool operator!= (const wxVariant& variant) const; - - // Sets/gets name - inline void SetName(const wxString& name) { m_name = name; } - inline const wxString& GetName() const { return m_name; } - - // Tests whether there is data - bool IsNull() const; - - // For compatibility with wxWidgets <= 2.6, this doesn't increase - // reference count. - wxVariantData* GetData() const { return m_data; } - void SetData(wxVariantData* data) ; - - // make a 'clone' of the object - void Ref(const wxVariant& clone); - - // destroy a reference - void UnRef(); - - // Make NULL (i.e. delete the data) - void MakeNull(); - - // Delete data and name - void Clear(); - - // Returns a string representing the type of the variant, - // e.g. "string", "bool", "stringlist", "list", "double", "long" - wxString GetType() const; - - bool IsType(const wxString& type) const; - bool IsValueKindOf(const wxClassInfo* type) const; - - // write contents to a string (e.g. for debugging) - wxString MakeString() const; - - // double - wxVariant(double val, const wxString& name = wxEmptyString); - bool operator== (double value) const; - bool operator!= (double value) const; - void operator= (double value) ; - inline operator double () const { return GetDouble(); } - inline double GetReal() const { return GetDouble(); } - double GetDouble() const; - - // long - wxVariant(long val, const wxString& name = wxEmptyString); - wxVariant(int val, const wxString& name = wxEmptyString); - wxVariant(short val, const wxString& name = wxEmptyString); - bool operator== (long value) const; - bool operator!= (long value) const; - void operator= (long value) ; - inline operator long () const { return GetLong(); } - inline long GetInteger() const { return GetLong(); } - long GetLong() const; - - // bool -#ifdef HAVE_BOOL - wxVariant(bool val, const wxString& name = wxEmptyString); - bool operator== (bool value) const; - bool operator!= (bool value) const; - void operator= (bool value) ; - inline operator bool () const { return GetBool(); } - bool GetBool() const ; -#endif - - // wxDateTime -#if wxUSE_DATETIME - wxVariant(const wxDateTime& val, const wxString& name = wxEmptyString); -#if wxUSE_ODBC - wxVariant(const DATE_STRUCT* valptr, const wxString& name = wxEmptyString); - wxVariant(const TIME_STRUCT* valptr, const wxString& name = wxEmptyString); - wxVariant(const TIMESTAMP_STRUCT* valptr, const wxString& name = wxEmptyString); -#endif - bool operator== (const wxDateTime& value) const; - bool operator!= (const wxDateTime& value) const; - void operator= (const wxDateTime& value) ; -#if wxUSE_ODBC - void operator= (const DATE_STRUCT* value) ; - void operator= (const TIME_STRUCT* value) ; - void operator= (const TIMESTAMP_STRUCT* value) ; -#endif - inline operator wxDateTime () const { return GetDateTime(); } - wxDateTime GetDateTime() const; -#endif - - // wxString - wxVariant(const wxString& val, const wxString& name = wxEmptyString); - wxVariant(const wxChar* val, const wxString& name = wxEmptyString); // Necessary or VC++ assumes bool! - bool operator== (const wxString& value) const; - bool operator!= (const wxString& value) const; - void operator= (const wxString& value) ; - void operator= (const wxChar* value) ; // Necessary or VC++ assumes bool! - inline operator wxString () const { return MakeString(); } - wxString GetString() const; - - // wxChar - wxVariant(wxChar val, const wxString& name = wxEmptyString); - bool operator== (wxChar value) const; - bool operator!= (wxChar value) const; - void operator= (wxChar value) ; - inline operator wxChar () const { return GetChar(); } - wxChar GetChar() const ; - - // wxArrayString - wxVariant(const wxArrayString& val, const wxString& name = wxEmptyString); - bool operator== (const wxArrayString& value) const; - bool operator!= (const wxArrayString& value) const; - void operator= (const wxArrayString& value); - inline operator wxArrayString () const { return GetArrayString(); } - wxArrayString GetArrayString() const; - - // void* - wxVariant(void* ptr, const wxString& name = wxEmptyString); - bool operator== (void* value) const; - bool operator!= (void* value) const; - void operator= (void* value); - inline operator void* () const { return GetVoidPtr(); } - void* GetVoidPtr() const; - - // wxObject* - wxVariant(wxObject* ptr, const wxString& name = wxEmptyString); - bool operator== (wxObject* value) const; - bool operator!= (wxObject* value) const; - void operator= (wxObject* value); - wxObject* GetWxObjectPtr() const; - - -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( wxVariant(const wxStringList& val, const wxString& name = wxEmptyString) ); - wxDEPRECATED( bool operator== (const wxStringList& value) const ); - wxDEPRECATED( bool operator!= (const wxStringList& value) const ); - wxDEPRECATED( void operator= (const wxStringList& value) ); - wxDEPRECATED( wxStringList& GetStringList() const ); -#endif - - // ------------------------------ - // list operations - // ------------------------------ - - wxVariant(const wxList& val, const wxString& name = wxEmptyString); // List of variants - bool operator== (const wxList& value) const; - bool operator!= (const wxList& value) const; - void operator= (const wxList& value) ; - // Treat a list variant as an array - wxVariant operator[] (size_t idx) const; - wxVariant& operator[] (size_t idx) ; - wxList& GetList() const ; - - // Return the number of elements in a list - size_t GetCount() const; - - // Make empty list - void NullList(); - - // Append to list - void Append(const wxVariant& value); - - // Insert at front of list - void Insert(const wxVariant& value); - - // Returns true if the variant is a member of the list - bool Member(const wxVariant& value) const; - - // Deletes the nth element of the list - bool Delete(size_t item); - - // Clear list - void ClearList(); - -public: - // Type conversion - bool Convert(long* value) const; - bool Convert(bool* value) const; - bool Convert(double* value) const; - bool Convert(wxString* value) const; - bool Convert(wxChar* value) const; -#if wxUSE_DATETIME - bool Convert(wxDateTime* value) const; -#endif // wxUSE_DATETIME - -// Attributes -protected: - wxVariantData* m_data; - wxString m_name; - -private: - DECLARE_DYNAMIC_CLASS(wxVariant) -}; - -#define DECLARE_VARIANT_OBJECT(classname) \ - DECLARE_VARIANT_OBJECT_EXPORTED(classname, wxEMPTY_PARAMETER_VALUE) - -#define DECLARE_VARIANT_OBJECT_EXPORTED(classname,expdecl) \ -expdecl classname& operator << ( classname &object, const wxVariant &variant ); \ -expdecl wxVariant& operator << ( wxVariant &variant, const classname &object ); - -#define IMPLEMENT_VARIANT_OBJECT(classname) \ - IMPLEMENT_VARIANT_OBJECT_EXPORTED(classname, wxEMPTY_PARAMETER_VALUE) - -#define IMPLEMENT_VARIANT_OBJECT_EXPORTED_NO_EQ(classname,expdecl) \ -class classname##VariantData: public wxVariantData \ -{ \ -public:\ - classname##VariantData() {} \ - classname##VariantData( const classname &value ) { m_value = value; } \ -\ - classname &GetValue() { return m_value; } \ -\ - virtual bool Eq(wxVariantData& data) const; \ -\ - virtual wxString GetType() const; \ - virtual wxClassInfo* GetValueClassInfo(); \ -\ -protected:\ - classname m_value; \ -\ -private: \ - DECLARE_CLASS(classname##VariantData) \ -};\ -\ -IMPLEMENT_CLASS(classname##VariantData, wxVariantData)\ -\ -wxString classname##VariantData::GetType() const\ -{\ - return m_value.GetClassInfo()->GetClassName();\ -}\ -\ -wxClassInfo* classname##VariantData::GetValueClassInfo()\ -{\ - return m_value.GetClassInfo();\ -}\ -\ -expdecl classname& operator << ( classname &value, const wxVariant &variant )\ -{\ - wxASSERT( wxIsKindOf( variant.GetData(), classname##VariantData ) );\ - \ - classname##VariantData *data = (classname##VariantData*) variant.GetData();\ - value = data->GetValue();\ - return value;\ -}\ -\ -expdecl wxVariant& operator << ( wxVariant &variant, const classname &value )\ -{\ - classname##VariantData *data = new classname##VariantData( value );\ - variant.SetData( data );\ - return variant;\ -} - -// implements a wxVariantData-derived class using for the Eq() method the -// operator== which must have been provided by "classname" -#define IMPLEMENT_VARIANT_OBJECT_EXPORTED(classname,expdecl) \ -IMPLEMENT_VARIANT_OBJECT_EXPORTED_NO_EQ(classname,wxEMPTY_PARAMETER_VALUE expdecl) \ -\ -bool classname##VariantData::Eq(wxVariantData& data) const \ -{\ - wxASSERT( wxIsKindOf((&data), classname##VariantData) );\ -\ - classname##VariantData & otherData = (classname##VariantData &) data;\ -\ - return otherData.m_value == m_value;\ -}\ - - -// implements a wxVariantData-derived class using for the Eq() method a shallow -// comparison (through wxObject::IsSameAs function) -#define IMPLEMENT_VARIANT_OBJECT_SHALLOWCMP(classname) \ - IMPLEMENT_VARIANT_OBJECT_EXPORTED_SHALLOWCMP(classname, wxEMPTY_PARAMETER_VALUE) -#define IMPLEMENT_VARIANT_OBJECT_EXPORTED_SHALLOWCMP(classname,expdecl) \ -IMPLEMENT_VARIANT_OBJECT_EXPORTED_NO_EQ(classname,wxEMPTY_PARAMETER_VALUE expdecl) \ -\ -bool classname##VariantData::Eq(wxVariantData& data) const \ -{\ - wxASSERT( wxIsKindOf((&data), classname##VariantData) );\ -\ - classname##VariantData & otherData = (classname##VariantData &) data;\ -\ - return (otherData.m_value.IsSameAs(m_value));\ -}\ - - -// Since we want type safety wxVariant we need to fetch and dynamic_cast -// in a seemingly safe way so the compiler can check, so we define -// a dynamic_cast /wxDynamicCast analogue. - -#define wxGetVariantCast(var,classname) \ - ((classname*)(var.IsValueKindOf(&classname::ms_classInfo) ?\ - var.GetWxObjectPtr() : NULL)); - -extern wxVariant WXDLLIMPEXP_BASE wxNullVariant; - -#endif // wxUSE_VARIANT - -#endif // _WX_VARIANT_H_ diff --git a/desmume/src/windows/wx/include/wx/vector.h b/desmume/src/windows/wx/include/wx/vector.h deleted file mode 100644 index f8aa5625e..000000000 --- a/desmume/src/windows/wx/include/wx/vector.h +++ /dev/null @@ -1,212 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/vector.h -// Purpose: STL vector clone -// Author: Lindsay Mathieson -// Modified by: -// Created: 30.07.2001 -// Copyright: (c) 2001 Lindsay Mathieson <lindsay@mathieson.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_VECTOR_H_ -#define _WX_VECTOR_H_ - -#include "wx/defs.h" - -class WXDLLIMPEXP_BASE wxVectorBase -{ -public: - typedef size_t size_type; -private: - size_type m_allocsize; - size_type m_size, - m_capacity; - void **m_objects; - -protected: - bool Alloc(size_type sz) - { - // work in multiples of m_allocsize; - sz = (sz / m_allocsize + 1) * m_allocsize; - if (sz <= m_capacity) - return true; - - // try to realloc - void *mem = realloc(m_objects, sizeof(void *) * sz); - if (! mem) - return false; // failed - // success - m_objects = (void **) mem; - m_capacity = sz; - return true; - } - - // untyped destructor of elements - must be overriden - virtual void Free(void *) = 0; - // untyped copy constructor of elements - must be overriden - virtual void *Copy(const void *) const = 0; - - const void *GetItem(size_type idx) const - { - wxASSERT(idx < m_size); - return m_objects[idx]; - } - - void Append(void *obj) - { - wxASSERT(m_size < m_capacity); - m_objects[m_size] = obj; - m_size++; - } - - void RemoveAt(size_type idx) - { - wxASSERT(idx < m_size); - Free(m_objects[idx]); - if (idx < m_size - 1) - memcpy( - m_objects + idx, - m_objects + idx + 1, - ( m_size - idx - 1 ) * sizeof(void*) ); - m_size--; - } - - bool copy(const wxVectorBase& vb) - { - clear(); - if (! Alloc(vb.size())) - return false; - - for (size_type i = 0; i < vb.size(); i++) - { - void *o = vb.Copy(vb.GetItem(i)); - if (! o) - return false; - Append(o); - } - - return true; - } - -public: - wxVectorBase() : m_allocsize(16), m_size(0), m_capacity(0), m_objects(0) {} - virtual ~wxVectorBase() {} // calm down GCC - - void clear() - { - for (size_type i = 0; i < size(); i++) - Free(m_objects[i]); - free(m_objects); - m_objects = 0; - m_size = m_capacity = 0; - } - - void reserve(size_type n) - { - if ( !Alloc(n) ) - { - wxFAIL_MSG( _T("out of memory in wxVector::reserve()") ); - } - } - - size_type size() const - { - return m_size; - } - - size_type capacity() const - { - return m_capacity; - } - - bool empty() const - { - return size() == 0; - } - - wxVectorBase& operator = (const wxVectorBase& vb) - { - wxCHECK(copy(vb), *this); - return *this; - } -}; - -#define WX_DECLARE_VECTORBASE(obj, cls)\ -protected:\ - virtual void Free(void *o)\ - {\ - delete (obj *) o;\ - }\ - virtual void *Copy(const void *o) const\ - {\ - return new obj(*(obj *) o);\ - }\ -public:\ - cls() {}\ - cls(const cls& c) : wxVectorBase()\ - {\ - wxCHECK2(copy(c), return);\ - }\ - ~cls()\ - {\ - clear();\ - } - -#define _WX_DECLARE_VECTOR(obj, cls, exp)\ -class exp cls : public wxVectorBase\ -{\ - WX_DECLARE_VECTORBASE(obj, cls)\ -public:\ - void push_back(const obj& o)\ - {\ - wxCHECK2(Alloc(size() + 1), return);\ - Append(new obj(o));\ - }\ - void pop_back()\ - {\ - RemoveAt(size() - 1);\ - }\ - const obj& at(size_type idx) const\ - {\ - return *(obj *) GetItem(idx);\ - }\ - obj& at(size_type idx)\ - {\ - return *(obj *) GetItem(idx);\ - }\ - const obj& operator[](size_type idx) const\ - {\ - return at(idx);\ - }\ - obj& operator[](size_type idx)\ - {\ - return at(idx);\ - }\ - const obj& front() const\ - {\ - return at(0);\ - }\ - obj& front()\ - {\ - return at(0);\ - }\ - const obj& back() const\ - {\ - return at(size() - 1);\ - }\ - obj& back()\ - {\ - return at(size() - 1);\ - }\ - size_type erase(size_type idx)\ - {\ - RemoveAt(idx);\ - return idx;\ - }\ -} - -#define WX_DECLARE_VECTOR(obj, cls) \ - _WX_DECLARE_VECTOR(obj, cls, WXDLLEXPORT) - -#endif // _WX_VECTOR_H_ - diff --git a/desmume/src/windows/wx/include/wx/version.h b/desmume/src/windows/wx/include/wx/version.h deleted file mode 100644 index 47ae7bfab..000000000 --- a/desmume/src/windows/wx/include/wx/version.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Name: wx/version.h - * Purpose: wxWidgets version numbers - * Author: Julian Smart - * Modified by: Ryan Norton (Converted to C) - * Created: 29/01/98 - * RCS-ID: $Id: version.h 58872 2009-02-13 09:18:23Z CE $ - * Copyright: (c) 1998 Julian Smart - * Licence: wxWindows licence - */ - -/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ - -#ifndef _WX_VERSION_H_ -#define _WX_VERSION_H_ - -#include "wx/cpp.h" /* for wxSTRINGIZE */ - -/* the constants below must be changed with each new version */ -/* ---------------------------------------------------------------------------- */ - -/* - Don't forget to update WX_CURRENT, WX_REVISION and WX_AGE in - build/bakefiles/version.bkl and regenerate the makefiles when you change - this! - */ - -/* NB: this file is parsed by automatic tools so don't change its format! */ -#define wxMAJOR_VERSION 2 -#define wxMINOR_VERSION 8 -#define wxRELEASE_NUMBER 10 -#define wxSUBRELEASE_NUMBER 0 -#define wxVERSION_STRING _T("wxWidgets 2.8.10") - -/* nothing to update below this line when updating the version */ -/* ---------------------------------------------------------------------------- */ - -/* Users can pre-define wxABI_VERSION to a lower value in their - * makefile/project settings to compile code that will be binary compatible - * with earlier versions of the ABI within the same minor version (between - * minor versions binary compatibility breaks anyway). The default is the - * version of wxWidgets being used. A single number with two decimal digits - * for each component, e.g. 20601 for 2.6.1 */ -#ifndef wxABI_VERSION -#define wxABI_VERSION ( wxMAJOR_VERSION * 10000 + wxMINOR_VERSION * 100 + 99 ) -#endif - -/* helpers for wxVERSION_NUM_XXX */ -#define wxMAKE_VERSION_STRING(x, y, z) \ - wxSTRINGIZE(x) wxSTRINGIZE(y) wxSTRINGIZE(z) -#define wxMAKE_VERSION_DOT_STRING(x, y, z) \ - wxSTRINGIZE(x) "." wxSTRINGIZE(y) "." wxSTRINGIZE(z) - -#define wxMAKE_VERSION_STRING_T(x, y, z) \ - wxSTRINGIZE_T(x) wxSTRINGIZE_T(y) wxSTRINGIZE_T(z) -#define wxMAKE_VERSION_DOT_STRING_T(x, y, z) \ - wxSTRINGIZE_T(x) _T(".") wxSTRINGIZE_T(y) _T(".") wxSTRINGIZE_T(z) - -/* these are used by src/msw/version.rc and should always be ASCII, not Unicode */ -#define wxVERSION_NUM_STRING \ - wxMAKE_VERSION_STRING(wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER) -#define wxVERSION_NUM_DOT_STRING \ - wxMAKE_VERSION_DOT_STRING(wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER) - -/* those are Unicode-friendly */ -#define wxVERSION_NUM_STRING_T \ - wxMAKE_VERSION_STRING_T(wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER) -#define wxVERSION_NUM_DOT_STRING_T \ - wxMAKE_VERSION_DOT_STRING_T(wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER) - -/* some more defines, not really sure if they're [still] useful */ -#define wxVERSION_NUMBER ( (wxMAJOR_VERSION * 1000) + (wxMINOR_VERSION * 100) + wxRELEASE_NUMBER ) -#define wxBETA_NUMBER 0 -#define wxVERSION_FLOAT ( wxMAJOR_VERSION + (wxMINOR_VERSION/10.0) + (wxRELEASE_NUMBER/100.0) + (wxBETA_NUMBER/10000.0) ) - -/* check if the current version is at least major.minor.release */ -#define wxCHECK_VERSION(major,minor,release) \ - (wxMAJOR_VERSION > (major) || \ - (wxMAJOR_VERSION == (major) && wxMINOR_VERSION > (minor)) || \ - (wxMAJOR_VERSION == (major) && wxMINOR_VERSION == (minor) && wxRELEASE_NUMBER >= (release))) - -/* the same but check the subrelease also */ -#define wxCHECK_VERSION_FULL(major,minor,release,subrel) \ - (wxCHECK_VERSION(major, minor, release) && \ - ((major) != wxMAJOR_VERSION || \ - (minor) != wxMINOR_VERSION || \ - (release) != wxRELEASE_NUMBER || \ - (subrel) <= wxSUBRELEASE_NUMBER)) - -#endif /* _WX_VERSION_H_ */ - diff --git a/desmume/src/windows/wx/include/wx/vidmode.h b/desmume/src/windows/wx/include/wx/vidmode.h deleted file mode 100644 index 06e7ed4cf..000000000 --- a/desmume/src/windows/wx/include/wx/vidmode.h +++ /dev/null @@ -1,73 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/vidmode.h -// Purpose: declares wxVideoMode class used by both wxDisplay and wxApp -// Author: Vadim Zeitlin -// Modified by: -// Created: 27.09.2003 (extracted from wx/display.h) -// RCS-ID: $Id: vidmode.h 27408 2004-05-23 20:53:33Z JS $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_VMODE_H_ -#define _WX_VMODE_H_ - -// ---------------------------------------------------------------------------- -// wxVideoMode: a simple struct containing video mode parameters for a display -// ---------------------------------------------------------------------------- - -struct WXDLLEXPORT wxVideoMode -{ - wxVideoMode(int width = 0, int height = 0, int depth = 0, int freq = 0) - { - w = width; - h = height; - - bpp = depth; - - refresh = freq; - } - - // default copy ctor and assignment operator are ok - - bool operator==(const wxVideoMode& m) const - { - return w == m.w && h == m.h && bpp == m.bpp && refresh == m.refresh; - } - bool operator!=(const wxVideoMode& mode) const - { - return !operator==(mode); - } - - // returns true if this mode matches the other one in the sense that all - // non zero fields of the other mode have the same value in this one - // (except for refresh which is allowed to have a greater value) - bool Matches(const wxVideoMode& other) const - { - return (!other.w || w == other.w) && - (!other.h || h == other.h) && - (!other.bpp || bpp == other.bpp) && - (!other.refresh || refresh >= other.refresh); - } - - // trivial accessors - int GetWidth() const { return w; } - int GetHeight() const { return h; } - int GetDepth() const { return bpp; } - - // returns true if the object has been initialized - bool IsOk() const { return w && h; } - - - // the screen size in pixels (e.g. 640*480), 0 means unspecified - int w, h; - - // bits per pixel (e.g. 32), 1 is monochrome and 0 means unspecified/known - int bpp; - - // refresh frequency in Hz, 0 means unspecified/unknown - int refresh; -}; - -#endif // _WX_VMODE_H_ - diff --git a/desmume/src/windows/wx/include/wx/vlbox.h b/desmume/src/windows/wx/include/wx/vlbox.h deleted file mode 100644 index 1e0e6d964..000000000 --- a/desmume/src/windows/wx/include/wx/vlbox.h +++ /dev/null @@ -1,296 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/vlbox.h -// Purpose: wxVListBox is a virtual listbox with lines of variable height -// Author: Vadim Zeitlin -// Modified by: -// Created: 31.05.03 -// RCS-ID: $Id: vlbox.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_VLBOX_H_ -#define _WX_VLBOX_H_ - -#include "wx/vscroll.h" // base class -#include "wx/bitmap.h" - -class WXDLLIMPEXP_FWD_CORE wxSelectionStore; - -#define wxVListBoxNameStr _T("wxVListBox") - -// ---------------------------------------------------------------------------- -// wxVListBox -// ---------------------------------------------------------------------------- - -/* - This class has two main differences from a regular listbox: it can have an - arbitrarily huge number of items because it doesn't store them itself but - uses OnDrawItem() callback to draw them and its items can have variable - height as determined by OnMeasureItem(). - - It emits the same events as wxListBox and the same event macros may be used - with it. - */ -class WXDLLEXPORT wxVListBox : public wxVScrolledWindow -{ -public: - // constructors and such - // --------------------- - - // default constructor, you must call Create() later - wxVListBox() { Init(); } - - // normal constructor which calls Create() internally - wxVListBox(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxVListBoxNameStr) - { - Init(); - - (void)Create(parent, id, pos, size, style, name); - } - - // really creates the control and sets the initial number of items in it - // (which may be changed later with SetItemCount()) - // - // the only special style which may be specified here is wxLB_MULTIPLE - // - // returns true on success or false if the control couldn't be created - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxVListBoxNameStr); - - // dtor does some internal cleanup (deletes m_selStore if any) - virtual ~wxVListBox(); - - - // accessors - // --------- - - // get the number of items in the control - size_t GetItemCount() const { return GetLineCount(); } - - // does this control use multiple selection? - bool HasMultipleSelection() const { return m_selStore != NULL; } - - // get the currently selected item or wxNOT_FOUND if there is no selection - // - // this method is only valid for the single selection listboxes - int GetSelection() const - { - wxASSERT_MSG( !HasMultipleSelection(), - _T("GetSelection() can't be used with wxLB_MULTIPLE") ); - - return m_current; - } - - // is this item the current one? - bool IsCurrent(size_t item) const { return item == (size_t)m_current; } - #ifdef __WXUNIVERSAL__ - bool IsCurrent() const { return wxVScrolledWindow::IsCurrent(); } - #endif - - // is this item selected? - bool IsSelected(size_t item) const; - - // get the number of the selected items (maybe 0) - // - // this method is valid for both single and multi selection listboxes - size_t GetSelectedCount() const; - - // get the first selected item, returns wxNOT_FOUND if none - // - // cookie is an opaque parameter which should be passed to - // GetNextSelected() later - // - // this method is only valid for the multi selection listboxes - int GetFirstSelected(unsigned long& cookie) const; - - // get next selection item, return wxNOT_FOUND if no more - // - // cookie must be the same parameter that was passed to GetFirstSelected() - // before - // - // this method is only valid for the multi selection listboxes - int GetNextSelected(unsigned long& cookie) const; - - // get the margins around each item - wxPoint GetMargins() const { return m_ptMargins; } - - // get the background colour of selected cells - const wxColour& GetSelectionBackground() const { return m_colBgSel; } - - - // operations - // ---------- - - // set the number of items to be shown in the control - // - // this is just a synonym for wxVScrolledWindow::SetLineCount() - virtual void SetItemCount(size_t count); - - // delete all items from the control - void Clear() { SetItemCount(0); } - - // set the selection to the specified item, if it is wxNOT_FOUND the - // selection is unset - // - // this function is only valid for the single selection listboxes - void SetSelection(int selection); - - // selects or deselects the specified item which must be valid (i.e. not - // equal to wxNOT_FOUND) - // - // return true if the items selection status has changed or false - // otherwise - // - // this function is only valid for the multiple selection listboxes - bool Select(size_t item, bool select = true); - - // selects the items in the specified range whose end points may be given - // in any order - // - // return true if any items selection status has changed, false otherwise - // - // this function is only valid for the single selection listboxes - bool SelectRange(size_t from, size_t to); - - // toggle the selection of the specified item (must be valid) - // - // this function is only valid for the multiple selection listboxes - void Toggle(size_t item) { Select(item, !IsSelected(item)); } - - // select all items in the listbox - // - // the return code indicates if any items were affected by this operation - // (true) or if nothing has changed (false) - bool SelectAll() { return DoSelectAll(true); } - - // unselect all items in the listbox - // - // the return code has the same meaning as for SelectAll() - bool DeselectAll() { return DoSelectAll(false); } - - // set the margins: horizontal margin is the distance between the window - // border and the item contents while vertical margin is half of the - // distance between items - // - // by default both margins are 0 - void SetMargins(const wxPoint& pt); - void SetMargins(wxCoord x, wxCoord y) { SetMargins(wxPoint(x, y)); } - - // change the background colour of the selected cells - void SetSelectionBackground(const wxColour& col); - - - virtual wxVisualAttributes GetDefaultAttributes() const - { - return GetClassDefaultAttributes(GetWindowVariant()); - } - - static wxVisualAttributes - GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); - -protected: - // the derived class must implement this function to actually draw the item - // with the given index on the provided DC - virtual void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const = 0; - - // the derived class must implement this method to return the height of the - // specified item - virtual wxCoord OnMeasureItem(size_t n) const = 0; - - // this method may be used to draw separators between the lines; note that - // the rectangle may be modified, typically to deflate it a bit before - // passing to OnDrawItem() - // - // the base class version doesn't do anything - virtual void OnDrawSeparator(wxDC& dc, wxRect& rect, size_t n) const; - - // this method is used to draw the items background and, maybe, a border - // around it - // - // the base class version implements a reasonable default behaviour which - // consists in drawing the selected item with the standard background - // colour and drawing a border around the item if it is either selected or - // current - virtual void OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const; - - // we implement OnGetLineHeight() in terms of OnMeasureItem() because this - // allows us to add borders to the items easily - // - // this function is not supposed to be overridden by the derived classes - virtual wxCoord OnGetLineHeight(size_t line) const; - - - // event handlers - void OnPaint(wxPaintEvent& event); - void OnKeyDown(wxKeyEvent& event); - void OnLeftDown(wxMouseEvent& event); - void OnLeftDClick(wxMouseEvent& event); - - - // common part of all ctors - void Init(); - - // send the wxEVT_COMMAND_LISTBOX_SELECTED event - void SendSelectedEvent(); - - // common implementation of SelectAll() and DeselectAll() - bool DoSelectAll(bool select); - - // change the current item (in single selection listbox it also implicitly - // changes the selection); current may be wxNOT_FOUND in which case there - // will be no current item any more - // - // return true if the current item changed, false otherwise - bool DoSetCurrent(int current); - - // flags for DoHandleItemClick - enum - { - ItemClick_Shift = 1, // item shift-clicked - ItemClick_Ctrl = 2, // ctrl - ItemClick_Kbd = 4 // item selected from keyboard - }; - - // common part of keyboard and mouse handling processing code - void DoHandleItemClick(int item, int flags); - -private: - // the current item or wxNOT_FOUND - // - // if m_selStore == NULL this is also the selected item, otherwise the - // selections are managed by m_selStore - int m_current; - - // the anchor of the selection for the multiselection listboxes: - // shift-clicking an item extends the selection from m_anchor to the item - // clicked, for example - // - // always wxNOT_FOUND for single selection listboxes - int m_anchor; - - // the object managing our selected items if not NULL - wxSelectionStore *m_selStore; - - // margins - wxPoint m_ptMargins; - - // the selection bg colour - wxColour m_colBgSel; - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxVListBox) - DECLARE_ABSTRACT_CLASS(wxVListBox) -}; - -#endif // _WX_VLBOX_H_ - diff --git a/desmume/src/windows/wx/include/wx/vms_x_fix.h b/desmume/src/windows/wx/include/wx/vms_x_fix.h deleted file mode 100644 index 7abe93081..000000000 --- a/desmume/src/windows/wx/include/wx/vms_x_fix.h +++ /dev/null @@ -1,1213 +0,0 @@ -/*************************************************************************** - * * - * Author : Jouk Jansen (joukj@hrem.stm.tudelft.nl) * - * * - * Last revision : 7 October 2005 * - * * - * Repair definitions of Runtime library functions when compiling with * - * /name=(as_is) on OpenVMS * - * * - ***************************************************************************/ - -#ifndef VMS_X_FIX -#define VMS_X_FIX - -#define decw$_select DECW$_SELECT -#define DtSaverGetWindows DTSAVERGETWINDOWS -#define MrmFetchWidget MRMFETCHWIDGET -#define MrmInitialize MRMINITIALIZE -#define MrmOpenHierarchy MRMOPENHIERARCHY -#define MrmRegisterNames MRMREGISTERNAMES -#define XAddExtension XADDEXTENSION -#define XAddHosts XADDHOSTS -#define XAllocClassHint XALLOCCLASSHINT -#define XAllocColor XALLOCCOLOR -#define XAllocColorCells XALLOCCOLORCELLS -#define XAllocIconSize XALLOCICONSIZE -#define XAllocNamedColor XALLOCNAMEDCOLOR -#define XAllocSizeHints XALLOCSIZEHINTS -#define XAllocStandardColormap XALLOCSTANDARDCOLORMAP -#define XAllocWMHints XALLOCWMHINTS -#define XAllowEvents XALLOWEVENTS -#define XAutoRepeatOff XAUTOREPEATOFF -#define XAutoRepeatOn XAUTOREPEATON -#define XBaseFontNameListOfFontSet XBASEFONTNAMELISTOFFONTSET -#define XBell XBELL -#define XBitmapPad XBITMAPPAD -#define XBlackPixel XBLACKPIXEL -#define XBlackPixelOfScreen XBLACKPIXELOFSCREEN -#define XCellsOfScreen XCELLSOFSCREEN -#define XChangeActivePointerGrab XCHANGEACTIVEPOINTERGRAB -#define XChangeGC XCHANGEGC -#define XChangeKeyboardControl XCHANGEKEYBOARDCONTROL -#define XChangePointerControl XCHANGEPOINTERCONTROL -#define XChangeProperty XCHANGEPROPERTY -#define XChangeWindowAttributes XCHANGEWINDOWATTRIBUTES -#define XCheckIfEvent XCHECKIFEVENT -#define XCheckMaskEvent XCHECKMASKEVENT -#define XCheckTypedEvent XCHECKTYPEDEVENT -#define XCheckTypedWindowEvent XCHECKTYPEDWINDOWEVENT -#define XCheckWindowEvent XCHECKWINDOWEVENT -#define XClearArea XCLEARAREA -#define XClearWindow XCLEARWINDOW -#define XClipBox XCLIPBOX -#define XCloseDisplay XCLOSEDISPLAY -#define XCloseIM XCLOSEIM -#define XConfigureWindow XCONFIGUREWINDOW -#define XConvertSelection XCONVERTSELECTION -#define XCopyArea XCOPYAREA -#define XCopyColormapAndFree XCOPYCOLORMAPANDFREE -#define XCopyGC XCOPYGC -#define XCopyPlane XCOPYPLANE -#define XCreateBitmapFromData XCREATEBITMAPFROMDATA -#define XCreateColormap XCREATECOLORMAP -#define XCreateFontCursor XCREATEFONTCURSOR -#define XCreateFontSet XCREATEFONTSET -#define XCreateGC XCREATEGC -#define XCreateGlyphCursor XCREATEGLYPHCURSOR -#define XCreateIC XCREATEIC -#define XCreateImage XCREATEIMAGE -#define XCreatePixmap XCREATEPIXMAP -#define XCreatePixmapCursor XCREATEPIXMAPCURSOR -#define XCreatePixmapFromBitmapData XCREATEPIXMAPFROMBITMAPDATA -#define XCreateRegion XCREATEREGION -#define XCreateSimpleWindow XCREATESIMPLEWINDOW -#define XCreateWindow XCREATEWINDOW -#define XDefaultColormap XDEFAULTCOLORMAP -#define XDefaultColormapOfScreen XDEFAULTCOLORMAPOFSCREEN -#define XDefaultDepth XDEFAULTDEPTH -#define XDefaultDepthOfScreen XDEFAULTDEPTHOFSCREEN -#define XDefaultGC XDEFAULTGC -#define XDefaultRootWindow XDEFAULTROOTWINDOW -#define XDefaultScreen XDEFAULTSCREEN -#define XDefaultScreenOfDisplay XDEFAULTSCREENOFDISPLAY -#define XDefaultVisual XDEFAULTVISUAL -#define XDefaultVisualOfScreen XDEFAULTVISUALOFSCREEN -#define XDefineCursor XDEFINECURSOR -#define XDeleteContext XDELETECONTEXT -#define XDeleteProperty XDELETEPROPERTY -#define XDestroyIC XDESTROYIC -#define XDestroyRegion XDESTROYREGION -#define XDestroySubwindows XDESTROYSUBWINDOWS -#define XDestroyWindow XDESTROYWINDOW -#define XDisableAccessControl XDISABLEACCESSCONTROL -#define XDisplayCells XDISPLAYCELLS -#define XDisplayHeight XDISPLAYHEIGHT -#define XDisplayKeycodes XDISPLAYKEYCODES -#define XDisplayName XDISPLAYNAME -#define XDisplayOfIM XDISPLAYOFIM -#define XDisplayOfScreen XDISPLAYOFSCREEN -#define XDisplayString XDISPLAYSTRING -#define XDisplayWidth XDISPLAYWIDTH -#define XDoesBackingStore XDOESBACKINGSTORE -#define XDrawArc XDRAWARC -#define XDrawArcs XDRAWARCS -#define XDrawImageString XDRAWIMAGESTRING -#define XDrawImageString16 XDRAWIMAGESTRING16 -#define XDrawLine XDRAWLINE -#define XDrawLines XDRAWLINES -#define XDrawPoint XDRAWPOINT -#define XDrawPoints XDRAWPOINTS -#define XDrawRectangle XDRAWRECTANGLE -#define XDrawRectangles XDRAWRECTANGLES -#define XDrawSegments XDRAWSEGMENTS -#define XDrawString XDRAWSTRING -#define XDrawString16 XDRAWSTRING16 -#define XDrawText XDRAWTEXT -#define XDrawText16 XDRAWTEXT16 -#define XESetCloseDisplay XESETCLOSEDISPLAY -#define XEmptyRegion XEMPTYREGION -#define XEnableAccessControl XENABLEACCESSCONTROL -#define XEqualRegion XEQUALREGION -#define XEventsQueued XEVENTSQUEUED -#define XExtendedMaxRequestSize XEXTENDEDMAXREQUESTSIZE -#define XExtentsOfFontSet XEXTENTSOFFONTSET -#define XFetchBuffer XFETCHBUFFER -#define XFetchBytes XFETCHBYTES -#define XFetchName XFETCHNAME -#define XFillArc XFILLARC -#define XFillArcs XFILLARCS -#define XFillPolygon XFILLPOLYGON -#define XFillRectangle XFILLRECTANGLE -#define XFillRectangles XFILLRECTANGLES -#define XFilterEvent XFILTEREVENT -#define XFindContext XFINDCONTEXT -#define XFlush XFLUSH -#define XFontsOfFontSet XFONTSOFFONTSET -#define XForceScreenSaver XFORCESCREENSAVER -#define XFree XFREE -#define XFreeColormap XFREECOLORMAP -#define XFreeColors XFREECOLORS -#define XFreeCursor XFREECURSOR -#define XFreeDeviceList XFREEDEVICELIST -#define XFreeDeviceState XFREEDEVICESTATE -#define XFreeFont XFREEFONT -#define XFreeFontInfo XFREEFONTINFO -#define XFreeFontNames XFREEFONTNAMES -#define XFreeFontSet XFREEFONTSET -#define XFreeGC XFREEGC -#define XFreeModifiermap XFREEMODIFIERMAP -#define XFreePixmap XFREEPIXMAP -#define XFreeStringList XFREESTRINGLIST -#define XGContextFromGC XGCONTEXTFROMGC -#define XGeometry XGEOMETRY -#define XGetAtomName XGETATOMNAME -#define XGetCommand XGETCOMMAND -#define XGetDefault XGETDEFAULT -#define XGetErrorDatabaseText XGETERRORDATABASETEXT -#define XGetErrorText XGETERRORTEXT -#define XGetExtensionVersion XGETEXTENSIONVERSION -#define XGetFontProperty XGETFONTPROPERTY -#define XGetGCValues XGETGCVALUES -#define XGetGeometry XGETGEOMETRY -#define XGetICValues XGETICVALUES -#define XGetIMValues XGETIMVALUES -#define XGetIconName XGETICONNAME -#define XGetIconSizes XGETICONSIZES -#define XGetImage XGETIMAGE -#define XGetInputFocus XGETINPUTFOCUS -#define XGetKeyboardControl XGETKEYBOARDCONTROL -#define XGetKeyboardMapping XGETKEYBOARDMAPPING -#define XGetModifierMapping XGETMODIFIERMAPPING -#define XGetMotionEvents XGETMOTIONEVENTS -#define XGetNormalHints XGETNORMALHINTS -#define XGetPointerMapping XGETPOINTERMAPPING -#define XGetRGBColormaps XGETRGBCOLORMAPS -#define XGetScreenSaver XGETSCREENSAVER -#define XGetSelectionOwner XGETSELECTIONOWNER -#define XGetStandardColormap XGETSTANDARDCOLORMAP -#define XGetSubImage XGETSUBIMAGE -#define XGetTextProperty XGETTEXTPROPERTY -#define XGetVisualInfo XGETVISUALINFO -#define XGetWMColormapWindows XGETWMCOLORMAPWINDOWS -#define XGetWMHints XGETWMHINTS -#define XGetWMIconName XGETWMICONNAME -#define XGetWMName XGETWMNAME -#define XGetWMNormalHints XGETWMNORMALHINTS -#define XGetWindowAttributes XGETWINDOWATTRIBUTES -#define XGetWindowProperty XGETWINDOWPROPERTY -#define XGrabButton XGRABBUTTON -#define XGrabKeyboard XGRABKEYBOARD -#define XGrabPointer XGRABPOINTER -#define XGrabServer XGRABSERVER -#define XHeightMMOfScreen XHEIGHTMMOFSCREEN -#define XHeightOfScreen XHEIGHTOFSCREEN -#define XIconifyWindow XICONIFYWINDOW -#define XIfEvent XIFEVENT -#define XInitExtension XINITEXTENSION -#define XInitImage XINITIMAGE -#define XInstallColormap XINSTALLCOLORMAP -#define XInternAtom XINTERNATOM -#define XInternAtoms XINTERNATOMS -#define XIntersectRegion XINTERSECTREGION -#define XKeycodeToKeysym XKEYCODETOKEYSYM -#define XKeysymToKeycode XKEYSYMTOKEYCODE -#define XKeysymToString XKEYSYMTOSTRING -#define XKillClient XKILLCLIENT -#define XListDepths XLISTDEPTHS -#define XListFonts XLISTFONTS -#define XListFontsWithInfo XLISTFONTSWITHINFO -#define XListHosts XLISTHOSTS -#define XListInputDevices XLISTINPUTDEVICES -#define XListInstalledColormaps XLISTINSTALLEDCOLORMAPS -#define XListPixmapFormats XLISTPIXMAPFORMATS -#define XListProperties XLISTPROPERTIES -#define XLoadFont XLOADFONT -#define XLoadQueryFont XLOADQUERYFONT -#define XLookupColor XLOOKUPCOLOR -#define XLookupKeysym XLOOKUPKEYSYM -#define XLookupString XLOOKUPSTRING -#define XLowerWindow XLOWERWINDOW -#define XMapRaised XMAPRAISED -#define XMapSubwindows XMAPSUBWINDOWS -#define XMapWindow XMAPWINDOW -#define XMatchVisualInfo XMATCHVISUALINFO -#define XMaxRequestSize XMAXREQUESTSIZE -#define XMissingExtension XMISSINGEXTENSION -#define XMoveResizeWindow XMOVERESIZEWINDOW -#define XMoveWindow XMOVEWINDOW -#define XNextEvent XNEXTEVENT -#define XNextRequest XNEXTREQUEST -#define XNoOp XNOOP -#define XOffsetRegion XOFFSETREGION -#define XOpenDevice XOPENDEVICE -#define XOpenDisplay XOPENDISPLAY -#define XOpenIM XOPENIM -#define XParseColor XPARSECOLOR -#define XParseGeometry XPARSEGEOMETRY -#define XPeekEvent XPEEKEVENT -#define XPeekIfEvent XPEEKIFEVENT -#define XPending XPENDING -#define XPointInRegion XPOINTINREGION -#define XPolygonRegion XPOLYGONREGION -#define XPutBackEvent XPUTBACKEVENT -#define XPutImage XPUTIMAGE -#define XQLength XQLENGTH -#define XQueryBestCursor XQUERYBESTCURSOR -#define XQueryBestStipple XQUERYBESTSTIPPLE -#define XQueryColor XQUERYCOLOR -#define XQueryColors XQUERYCOLORS -#define XQueryDeviceState XQUERYDEVICESTATE -#define XQueryExtension XQUERYEXTENSION -#define XQueryFont XQUERYFONT -#define XQueryKeymap XQUERYKEYMAP -#define XQueryPointer XQUERYPOINTER -#define XQueryTree XQUERYTREE -#define XRaiseWindow XRAISEWINDOW -#define XReadBitmapFile XREADBITMAPFILE -#define XRecolorCursor XRECOLORCURSOR -#define XReconfigureWMWindow XRECONFIGUREWMWINDOW -#define XRectInRegion XRECTINREGION -#define XRefreshKeyboardMapping XREFRESHKEYBOARDMAPPING -#define XRemoveHosts XREMOVEHOSTS -#define XReparentWindow XREPARENTWINDOW -#define XResetScreenSaver XRESETSCREENSAVER -#define XResizeWindow XRESIZEWINDOW -#define XResourceManagerString XRESOURCEMANAGERSTRING -#define XRestackWindows XRESTACKWINDOWS -#define XRotateBuffers XROTATEBUFFERS -#define XRootWindow XROOTWINDOW -#define XRootWindowOfScreen XROOTWINDOWOFSCREEN -#define XSaveContext XSAVECONTEXT -#define XScreenNumberOfScreen XSCREENNUMBEROFSCREEN -#define XScreenOfDisplay XSCREENOFDISPLAY -#define XSelectAsyncEvent XSELECTASYNCEVENT -#define XSelectAsyncInput XSELECTASYNCINPUT -#define XSelectExtensionEvent XSELECTEXTENSIONEVENT -#define XSelectInput XSELECTINPUT -#define XSendEvent XSENDEVENT -#define XServerVendor XSERVERVENDOR -#define XSetArcMode XSETARCMODE -#define XSetBackground XSETBACKGROUND -#define XSetClassHint XSETCLASSHINT -#define XSetClipMask XSETCLIPMASK -#define XSetClipOrigin XSETCLIPORIGIN -#define XSetClipRectangles XSETCLIPRECTANGLES -#define XSetCloseDownMode XSETCLOSEDOWNMODE -#define XSetCommand XSETCOMMAND -#define XSetDashes XSETDASHES -#define XSetErrorHandler XSETERRORHANDLER -#define XSetFillRule XSETFILLRULE -#define XSetFillStyle XSETFILLSTYLE -#define XSetFont XSETFONT -#define XSetForeground XSETFOREGROUND -#define XSetFunction XSETFUNCTION -#define XSetGraphicsExposures XSETGRAPHICSEXPOSURES -#define XSetICFocus XSETICFOCUS -#define XSetICValues XSETICVALUES -#define XSetIOErrorHandler XSETIOERRORHANDLER -#define XSetIconName XSETICONNAME -#define XSetInputFocus XSETINPUTFOCUS -#define XSetLineAttributes XSETLINEATTRIBUTES -#define XSetLocaleModifiers XSETLOCALEMODIFIERS -#define XSetNormalHints XSETNORMALHINTS -#define XSetPlaneMask XSETPLANEMASK -#define XSetRegion XSETREGION -#define XSetRGBColormaps XSETRGBCOLORMAPS -#define XSetScreenSaver XSETSCREENSAVER -#define XSetSelectionOwner XSETSELECTIONOWNER -#define XSetStandardProperties XSETSTANDARDPROPERTIES -#define XSetState XSETSTATE -#define XSetStipple XSETSTIPPLE -#define XSetSubwindowMode XSETSUBWINDOWMODE -#define XSetTSOrigin XSETTSORIGIN -#define XSetTextProperty XSETTEXTPROPERTY -#define XSetTile XSETTILE -#define XSetTransientForHint XSETTRANSIENTFORHINT -#define XSetWMClientMachine XSETWMCLIENTMACHINE -#define XSetWMColormapWindows XSETWMCOLORMAPWINDOWS -#define XSetWMHints XSETWMHINTS -#define XSetWMIconName XSETWMICONNAME -#define XSetWMName XSETWMNAME -#define XSetWMNormalHints XSETWMNORMALHINTS -#define XSetWMProperties XSETWMPROPERTIES -#define XSetWMProtocols XSETWMPROTOCOLS -#define XSetWMSizeHints XSETWMSIZEHINTS -#define XSetWindowBackground XSETWINDOWBACKGROUND -#define XSetWindowBackgroundPixmap XSETWINDOWBACKGROUNDPIXMAP -#define XSetWindowBorder XSETWINDOWBORDER -#define XSetWindowBorderPixmap XSETWINDOWBORDERPIXMAP -#define XSetWindowBorderWidth XSETWINDOWBORDERWIDTH -#define XSetWindowColormap XSETWINDOWCOLORMAP -#define XShapeCombineMask XSHAPECOMBINEMASK -#define XShapeCombineRectangles XSHAPECOMBINERECTANGLES -#define XShapeGetRectangles XSHAPEGETRECTANGLES -#define XShapeQueryExtension XSHAPEQUERYEXTENSION -#define XShmAttach XSHMATTACH -#define XShmCreateImage XSHMCREATEIMAGE -#define XShmCreatePixmap XSHMCREATEPIXMAP -#define XShmDetach XSHMDETACH -#define XShmGetEventBase XSHMGETEVENTBASE -#define XShmPutImage XSHMPUTIMAGE -#define XShmQueryExtension XSHMQUERYEXTENSION -#define XShmQueryVersion XSHMQUERYVERSION -#define XShrinkRegion XSHRINKREGION -#define XStoreBuffer XSTOREBUFFER -#define XStoreBytes XSTOREBYTES -#define XStoreColor XSTORECOLOR -#define XStoreColors XSTORECOLORS -#define XStoreName XSTORENAME -#define XStringListToTextProperty XSTRINGLISTTOTEXTPROPERTY -#define XStringToKeysym XSTRINGTOKEYSYM -#define XSubtractRegion XSUBTRACTREGION -#define XSupportsLocale XSUPPORTSLOCALE -#define XSync XSYNC -#define XSynchronize XSYNCHRONIZE -#define XTextExtents XTEXTEXTENTS -#define XTextExtents16 XTEXTEXTENTS16 -#define XTextPropertyToStringList XTEXTPROPERTYTOSTRINGLIST -#define XTextWidth XTEXTWIDTH -#define XTextWidth16 XTEXTWIDTH16 -#define XTranslateCoordinates XTRANSLATECOORDINATES -#define XUndefineCursor XUNDEFINECURSOR -#define XUngrabButton XUNGRABBUTTON -#define XUngrabKeyboard XUNGRABKEYBOARD -#define XUngrabPointer XUNGRABPOINTER -#define XUngrabServer XUNGRABSERVER -#define XUninstallColormap XUNINSTALLCOLORMAP -#define XUnionRectWithRegion XUNIONRECTWITHREGION -#define XUnionRegion XUNIONREGION -#define XUniqueContext XUNIQUECONTEXT -#define XUnmapWindow XUNMAPWINDOW -#define XUnsetICFocus XUNSETICFOCUS -#define XVaCreateNestedList XVACREATENESTEDLIST -#define XVisualIDFromVisual XVISUALIDFROMVISUAL -#define XWMGeometry XWMGEOMETRY -#define XWarpPointer XWARPPOINTER -#define XWhitePixel XWHITEPIXEL -#define XWhitePixelOfScreen XWHITEPIXELOFSCREEN -#define XWidthMMOfScreen XWIDTHMMOFSCREEN -#define XWidthOfScreen XWIDTHOFSCREEN -#define XWindowEvent XWINDOWEVENT -#define XWithdrawWindow XWITHDRAWWINDOW -#define XXorRegion XXORREGION -#define XcmsQueryColor XCMSQUERYCOLOR -#define XdbeAllocateBackBufferName XDBEALLOCATEBACKBUFFERNAME -#define XdbeFreeVisualInfo XDBEFREEVISUALINFO -#define XdbeGetVisualInfo XDBEGETVISUALINFO -#define XdbeQueryExtension XDBEQUERYEXTENSION -#define XdbeSwapBuffers XDBESWAPBUFFERS -#define XextAddDisplay XEXTADDDISPLAY -#define XextFindDisplay XEXTFINDDISPLAY -#define XextRemoveDisplay XEXTREMOVEDISPLAY -#define XkbSetDetectableAutoRepeat XKBSETDETECTABLEAUTOREPEAT -#define XmActivateProtocol XMACTIVATEPROTOCOL -#define XmAddProtocolCallback XMADDPROTOCOLCALLBACK -#define XmAddProtocols XMADDPROTOCOLS -#define XmChangeColor XMCHANGECOLOR -#define XmClipboardCopy XMCLIPBOARDCOPY -#define XmClipboardCopyByName XMCLIPBOARDCOPYBYNAME -#define XmClipboardEndCopy XMCLIPBOARDENDCOPY -#define XmClipboardEndRetrieve XMCLIPBOARDENDRETRIEVE -#define XmClipboardInquireCount XMCLIPBOARDINQUIRECOUNT -#define XmClipboardInquireFormat XMCLIPBOARDINQUIREFORMAT -#define XmClipboardInquireLength XMCLIPBOARDINQUIRELENGTH -#define XmClipboardLock XMCLIPBOARDLOCK -#define XmClipboardRetrieve XMCLIPBOARDRETRIEVE -#define XmClipboardStartCopy XMCLIPBOARDSTARTCOPY -#define XmClipboardStartRetrieve XMCLIPBOARDSTARTRETRIEVE -#define XmClipboardUnlock XMCLIPBOARDUNLOCK -#define XmCommandError XMCOMMANDERROR -#define XmCommandGetChild XMCOMMANDGETCHILD -#define XmCommandSetValue XMCOMMANDSETVALUE -#define XmCreateArrowButton XMCREATEARROWBUTTON -#define XmCreateArrowButtonGadget XMCREATEARROWBUTTONGADGET -#define XmCreateBulletinBoardDialog XMCREATEBULLETINBOARDDIALOG -#define XmCreateCascadeButton XMCREATECASCADEBUTTON -#define XmCreateCascadeButtonGadget XMCREATECASCADEBUTTONGADGET -#define XmCreateDialogShell XMCREATEDIALOGSHELL -#define XmCreateDragIcon XMCREATEDRAGICON -#define XmCreateDrawingArea XMCREATEDRAWINGAREA -#define XmCreateDrawnButton XMCREATEDRAWNBUTTON -#define XmCreateErrorDialog XMCREATEERRORDIALOG -#define XmCreateFileSelectionBox XMCREATEFILESELECTIONBOX -#define XmCreateFileSelectionDialog XMCREATEFILESELECTIONDIALOG -#define XmCreateForm XMCREATEFORM -#define XmCreateFormDialog XMCREATEFORMDIALOG -#define XmCreateFrame XMCREATEFRAME -#define XmCreateInformationDialog XMCREATEINFORMATIONDIALOG -#define XmCreateLabel XMCREATELABEL -#define XmCreateLabelGadget XMCREATELABELGADGET -#define XmCreateList XMCREATELIST -#define XmCreateMainWindow XMCREATEMAINWINDOW -#define XmCreateMenuBar XMCREATEMENUBAR -#define XmCreateMessageBox XMCREATEMESSAGEBOX -#define XmCreateMessageDialog XMCREATEMESSAGEDIALOG -#define XmCreateOptionMenu XMCREATEOPTIONMENU -#define XmCreatePanedWindow XMCREATEPANEDWINDOW -#define XmCreatePopupMenu XMCREATEPOPUPMENU -#define XmCreatePromptDialog XMCREATEPROMPTDIALOG -#define XmCreatePulldownMenu XMCREATEPULLDOWNMENU -#define XmCreatePushButton XMCREATEPUSHBUTTON -#define XmCreatePushButtonGadget XMCREATEPUSHBUTTONGADGET -#define XmCreateQuestionDialog XMCREATEQUESTIONDIALOG -#define XmCreateRadioBox XMCREATERADIOBOX -#define XmCreateRowColumn XMCREATEROWCOLUMN -#define XmCreateScale XMCREATESCALE -#define XmCreateScrollBar XMCREATESCROLLBAR -#define XmCreateScrolledList XMCREATESCROLLEDLIST -#define XmCreateScrolledText XMCREATESCROLLEDTEXT -#define XmCreateScrolledWindow XMCREATESCROLLEDWINDOW -#define XmCreateSelectionDialog XMCREATESELECTIONDIALOG -#define XmCreateSeparator XMCREATESEPARATOR -#define XmCreateSeparatorGadget XMCREATESEPARATORGADGET -#define XmCreateTemplateDialog XMCREATETEMPLATEDIALOG -#define XmCreateText XMCREATETEXT -#define XmCreateTextField XMCREATETEXTFIELD -#define XmCreateToggleButton XMCREATETOGGLEBUTTON -#define XmCreateToggleButtonGadget XMCREATETOGGLEBUTTONGADGET -#define XmCreateWarningDialog XMCREATEWARNINGDIALOG -#define XmCvtCTToXmString XMCVTCTTOXMSTRING -#define XmDestroyPixmap XMDESTROYPIXMAP -#define XmDragStart XMDRAGSTART -#define XmDropSiteRegister XMDROPSITEREGISTER -#define XmDropSiteUnregister XMDROPSITEUNREGISTER -#define XmDropSiteUpdate XMDROPSITEUPDATE -#define XmDropTransferStart XMDROPTRANSFERSTART -#define XmFileSelectionBoxGetChild XMFILESELECTIONBOXGETCHILD -#define XmFileSelectionDoSearch XMFILESELECTIONDOSEARCH -#define XmFontListAppendEntry XMFONTLISTAPPENDENTRY -#define XmFontListCopy XMFONTLISTCOPY -#define XmFontListCreate XMFONTLISTCREATE -#define XmFontListEntryCreate XMFONTLISTENTRYCREATE -#define XmFontListEntryFree XMFONTLISTENTRYFREE -#define XmFontListEntryGetFont XMFONTLISTENTRYGETFONT -#define XmFontListEntryGetTag XMFONTLISTENTRYGETTAG -#define XmFontListEntryLoad XMFONTLISTENTRYLOAD -#define XmFontListFree XMFONTLISTFREE -#define XmFontListFreeFontContext XMFONTLISTFREEFONTCONTEXT -#define XmFontListGetNextFont XMFONTLISTGETNEXTFONT -#define XmFontListInitFontContext XMFONTLISTINITFONTCONTEXT -#define XmFontListNextEntry XMFONTLISTNEXTENTRY -#define XmGetColors XMGETCOLORS -#define XmGetColorCalculation XMGETCOLORCALCULATION -#define XmGetFocusWidget XMGETFOCUSWIDGET -#define XmGetMenuCursor XMGETMENUCURSOR -#define XmGetPixmap XMGETPIXMAP -#define XmGetPixmapByDepth XMGETPIXMAPBYDEPTH -#define XmGetTearOffControl XMGETTEAROFFCONTROL -#define XmGetXmDisplay XMGETXMDISPLAY -#define XmImMbLookupString XMIMMBLOOKUPSTRING -#define XmImRegister XMIMREGISTER -#define XmImSetFocusValues XMIMSETFOCUSVALUES -#define XmImSetValues XMIMSETVALUES -#define XmImUnregister XMIMUNREGISTER -#define XmImUnsetFocus XMIMUNSETFOCUS -#define XmInstallImage XMINSTALLIMAGE -#define XmInternAtom XMINTERNATOM -#define XmIsMotifWMRunning XMISMOTIFWMRUNNING -#define XmListAddItem XMLISTADDITEM -#define XmListAddItemUnselected XMLISTADDITEMUNSELECTED -#define XmListAddItems XMLISTADDITEMS -#define XmListAddItemsUnselected XMLISTADDITEMSUNSELECTED -#define XmListDeleteAllItems XMLISTDELETEALLITEMS -#define XmListDeleteItem XMLISTDELETEITEM -#define XmListDeleteItemsPos XMLISTDELETEITEMSPOS -#define XmListDeletePos XMLISTDELETEPOS -#define XmListDeselectAllItems XMLISTDESELECTALLITEMS -#define XmListDeselectPos XMLISTDESELECTPOS -#define XmListGetKbdItemPos XMLISTGETKBDITEMPOS -#define XmListGetMatchPos XMLISTGETMATCHPOS -#define XmListGetSelectedPos XMLISTGETSELECTEDPOS -#define XmListItemExists XMLISTITEMEXISTS -#define XmListItemPos XMLISTITEMPOS -#define XmListPosSelected XMLISTPOSSELECTED -#define XmListReplaceItems XMLISTREPLACEITEMS -#define XmListReplaceItemsPos XMLISTREPLACEITEMSPOS -#define XmListSelectItem XMLISTSELECTITEM -#define XmListSelectPos XMLISTSELECTPOS -#define XmListSetBottomPos XMLISTSETBOTTOMPOS -#define XmListSetItem XMLISTSETITEM -#define XmListSetKbdItemPos XMLISTSETKBDITEMPOS -#define XmListSetPos XMLISTSETPOS -#define XmMainWindowSetAreas XMMAINWINDOWSETAREAS -#define XmMenuPosition XMMENUPOSITION -#define XmMessageBoxGetChild XMMESSAGEBOXGETCHILD -#define XmOptionButtonGadget XMOPTIONBUTTONGADGET -#define XmOptionLabelGadget XMOPTIONLABELGADGET -#define XmProcessTraversal XMPROCESSTRAVERSAL -#define XmQmotif XMQMOTIF -#define XmRemoveProtocolCallback XMREMOVEPROTOCOLCALLBACK -#define XmRemoveProtocols XMREMOVEPROTOCOLS -#define XmRemoveTabGroup XMREMOVETABGROUP -#define XmRepTypeGetId XMREPTYPEGETID -#define XmRepTypeGetRecord XMREPTYPEGETRECORD -#define XmRepTypeInstallTearOffModelCon XMREPTYPEINSTALLTEAROFFMODELCON -#define XmRepTypeRegister XMREPTYPEREGISTER -#define XmRepTypeValidValue XMREPTYPEVALIDVALUE -#define XmScrollBarGetValues XMSCROLLBARGETVALUES -#define XmScrollBarSetValues XMSCROLLBARSETVALUES -#define XmScrolledWindowSetAreas XMSCROLLEDWINDOWSETAREAS -#define XmSelectionBoxGetChild XMSELECTIONBOXGETCHILD -#define XmSetColorCalculation XMSETCOLORCALCULATION -#define XmStringByteCompare XMSTRINGBYTECOMPARE -#define XmStringCompare XMSTRINGCOMPARE -#define XmStringConcat XMSTRINGCONCAT -#define XmStringCopy XMSTRINGCOPY -#define XmStringCreate XMSTRINGCREATE -#define XmStringCreateLocalized XMSTRINGCREATELOCALIZED -#define XmStringCreateLtoR XMSTRINGCREATELTOR -#define XmStringCreateSimple XMSTRINGCREATESIMPLE -#define XmStringDraw XMSTRINGDRAW -#define XmStringDrawUnderline XMSTRINGDRAWUNDERLINE -#define XmStringExtent XMSTRINGEXTENT -#define XmStringFree XMSTRINGFREE -#define XmStringFreeContext XMSTRINGFREECONTEXT -#define XmStringGetLtoR XMSTRINGGETLTOR -#define XmStringGetNextComponent XMSTRINGGETNEXTCOMPONENT -#define XmStringGetNextSegment XMSTRINGGETNEXTSEGMENT -#define XmStringInitContext XMSTRINGINITCONTEXT -#define XmStringLength XMSTRINGLENGTH -#define XmStringLtoRCreate XMSTRINGLTORCREATE -#define XmStringNConcat XMSTRINGNCONCAT -#define XmStringSegmentCreate XMSTRINGSEGMENTCREATE -#define XmStringSeparatorCreate XMSTRINGSEPARATORCREATE -#define XmStringWidth XMSTRINGWIDTH -#define XmTextClearSelection XMTEXTCLEARSELECTION -#define XmTextCopy XMTEXTCOPY -#define XmTextCut XMTEXTCUT -#define XmTextFieldClearSelection XMTEXTFIELDCLEARSELECTION -#define XmTextFieldCopy XMTEXTFIELDCOPY -#define XmTextFieldCut XMTEXTFIELDCUT -#define XmTextFieldGetEditable XMTEXTFIELDGETEDITABLE -#define XmTextFieldGetInsertionPosition XMTEXTFIELDGETINSERTIONPOSITION -#define XmTextFieldGetLastPosition XMTEXTFIELDGETLASTPOSITION -#define XmTextFieldGetMaxLength XMTEXTFIELDGETMAXLENGTH -#define XmTextFieldGetSelection XMTEXTFIELDGETSELECTION -#define XmTextFieldGetSelectionPosition XMTEXTFIELDGETSELECTIONPOSITION -#define XmTextFieldGetString XMTEXTFIELDGETSTRING -#define XmTextFieldInsert XMTEXTFIELDINSERT -#define XmTextFieldPaste XMTEXTFIELDPASTE -#define XmTextFieldRemove XMTEXTFIELDREMOVE -#define XmTextFieldReplace XMTEXTFIELDREPLACE -#define XmTextFieldSetAddMode XMTEXTFIELDSETADDMODE -#define XmTextFieldSetHighlight XMTEXTFIELDSETHIGHLIGHT -#define XmTextFieldSetInsertionPosition XMTEXTFIELDSETINSERTIONPOSITION -#define XmTextFieldSetMaxLength XMTEXTFIELDSETMAXLENGTH -#define XmTextFieldSetSelection XMTEXTFIELDSETSELECTION -#define XmTextFieldSetString XMTEXTFIELDSETSTRING -#define XmTextFieldShowPosition XMTEXTFIELDSHOWPOSITION -#define XmTextGetCursorPosition XMTEXTGETCURSORPOSITION -#define XmTextGetEditable XMTEXTGETEDITABLE -#define XmTextGetInsertionPosition XMTEXTGETINSERTIONPOSITION -#define XmTextGetLastPosition XMTEXTGETLASTPOSITION -#define XmTextGetMaxLength XMTEXTGETMAXLENGTH -#define XmTextGetSelection XMTEXTGETSELECTION -#define XmTextGetSelectionPosition XMTEXTGETSELECTIONPOSITION -#define XmTextGetString XMTEXTGETSTRING -#define XmTextInsert XMTEXTINSERT -#define XmTextPaste XMTEXTPASTE -#define XmTextPosToXY XMTEXTPOSTOXY -#define XmTextRemove XMTEXTREMOVE -#define XmTextReplace XMTEXTREPLACE -#define XmTextSetCursorPosition XMTEXTSETCURSORPOSITION -#define XmTextSetEditable XMTEXTSETEDITABLE -#define XmTextSetHighlight XMTEXTSETHIGHLIGHT -#define XmTextSetInsertionPosition XMTEXTSETINSERTIONPOSITION -#define XmTextSetSelection XMTEXTSETSELECTION -#define XmTextSetString XMTEXTSETSTRING -#define XmTextSetTopCharacter XMTEXTSETTOPCHARACTER -#define XmTextShowPosition XMTEXTSHOWPOSITION -#define XmToggleButtonGadgetGetState XMTOGGLEBUTTONGADGETGETSTATE -#define XmToggleButtonGadgetSetState XMTOGGLEBUTTONGADGETSETSTATE -#define XmToggleButtonGetState XMTOGGLEBUTTONGETSTATE -#define XmToggleButtonSetState XMTOGGLEBUTTONSETSTATE -#define XmUninstallImage XMUNINSTALLIMAGE -#define XmUpdateDisplay XMUPDATEDISPLAY -#define XmVaCreateSimpleRadioBox XMVACREATESIMPLERADIOBOX -#define XmbDrawString XMBDRAWSTRING -#define XmbLookupString XMBLOOKUPSTRING -#define XmbResetIC XMBRESETIC -#define XmbSetWMProperties XMBSETWMPROPERTIES -#define XmbTextEscapement XMBTEXTESCAPEMENT -#define XmbTextExtents XMBTEXTEXTENTS -#define XmbTextListToTextProperty XMBTEXTLISTTOTEXTPROPERTY -#define XmbTextPropertyToTextList XMBTEXTPROPERTYTOTEXTLIST -#define XmbufCreateBuffers XMBUFCREATEBUFFERS -#define XmbufDestroyBuffers XMBUFDESTROYBUFFERS -#define XmbufDisplayBuffers XMBUFDISPLAYBUFFERS -#define XmbufQueryExtension XMBUFQUERYEXTENSION -#define Xmemory_free XMEMORY_FREE -#define Xmemory_malloc XMEMORY_MALLOC -#define XmuClientWindow XMUCLIENTWINDOW -#define XmuConvertStandardSelection XMUCONVERTSTANDARDSELECTION -#define XmuCvtStringToBitmap XMUCVTSTRINGTOBITMAP -#define XmuInternAtom XMUINTERNATOM -#define XmuInternStrings XMUINTERNSTRINGS -#define XmuLookupStandardColormap XMULOOKUPSTANDARDCOLORMAP -#define XmuPrintDefaultErrorMessage XMUPRINTDEFAULTERRORMESSAGE -#define XrmCombineDatabase XRMCOMBINEDATABASE -#define XrmCombineFileDatabase XRMCOMBINEFILEDATABASE -#define XrmDestroyDatabase XRMDESTROYDATABASE -#define XrmGetDatabase XRMGETDATABASE -#define XrmGetFileDatabase XRMGETFILEDATABASE -#define XrmGetResource XRMGETRESOURCE -#define XrmGetStringDatabase XRMGETSTRINGDATABASE -#define XrmInitialize XRMINITIALIZE -#define XrmMergeDatabases XRMMERGEDATABASES -#define XrmParseCommand XRMPARSECOMMAND -#define XrmPermStringToQuark XRMPERMSTRINGTOQUARK -#define XrmPutFileDatabase XRMPUTFILEDATABASE -#define XrmPutLineResource XRMPUTLINERESOURCE -#define XrmPutStringResource XRMPUTSTRINGRESOURCE -#define XrmQGetResource XRMQGETRESOURCE -#define XrmQPutStringResource XRMQPUTSTRINGRESOURCE -#define XrmQuarkToString XRMQUARKTOSTRING -#define XrmSetDatabase XRMSETDATABASE -#define XrmStringToBindingQuarkList XRMSTRINGTOBINDINGQUARKLIST -#define XrmStringToQuark XRMSTRINGTOQUARK -#define XtAddCallback XTADDCALLBACK -#define XtAddCallbacks XTADDCALLBACKS -#define XtAddConverter XTADDCONVERTER -#define XtAddEventHandler XTADDEVENTHANDLER -#define XtAddExposureToRegion XTADDEXPOSURETOREGION -#define XtAddGrab XTADDGRAB -#define XtAddRawEventHandler XTADDRAWEVENTHANDLER -#define XtAllocateGC XTALLOCATEGC -#define XtAppAddActions XTAPPADDACTIONS -#define XtAppAddInput XTAPPADDINPUT -#define XtAppAddTimeOut XTAPPADDTIMEOUT -#define XtAppAddWorkProc XTAPPADDWORKPROC -#define XtAppCreateShell XTAPPCREATESHELL -#define XtAppError XTAPPERROR -#define XtAppErrorMsg XTAPPERRORMSG -#define XtAppInitialize XTAPPINITIALIZE -#define XtAppMainLoop XTAPPMAINLOOP -#define XtAppNextEvent XTAPPNEXTEVENT -#define XtAppPeekEvent XTAPPPEEKEVENT -#define XtAppPending XTAPPPENDING -#define XtAppProcessEvent XTAPPPROCESSEVENT -#define XtAppSetErrorHandler XTAPPSETERRORHANDLER -#define XtAppSetFallbackResources XTAPPSETFALLBACKRESOURCES -#define XtAppSetTypeConverter XTAPPSETTYPECONVERTER -#define XtAppSetWarningHandler XTAPPSETWARNINGHANDLER -#define XtAppWarningMsg XTAPPWARNINGMSG -#define XtAppSetWarningMsgHandler XTAPPSETWARNINGMSGHANDLER -#define XtAppWarning XTAPPWARNING -#define XtAugmentTranslations XTAUGMENTTRANSLATIONS -#define XtCallActionProc XTCALLACTIONPROC -#define XtCallCallbackList XTCALLCALLBACKLIST -#define XtCallCallbacks XTCALLCALLBACKS -#define XtCallConverter XTCALLCONVERTER -#define XtCalloc XTCALLOC -#ifndef NOXTDISPLAY -#define XtClass XTCLASS -#endif -#define XtCloseDisplay XTCLOSEDISPLAY -#define XtConfigureWidget XTCONFIGUREWIDGET -#define XtConvert XTCONVERT -#define XtConvertAndStore XTCONVERTANDSTORE -#define XtCreateApplicationContext XTCREATEAPPLICATIONCONTEXT -#define XtCreateManagedWidget XTCREATEMANAGEDWIDGET -#define XtCreatePopupShell XTCREATEPOPUPSHELL -#define XtCreateWidget XTCREATEWIDGET -#define XtCreateWindow XTCREATEWINDOW -#define XtCvtStringToFont XTCVTSTRINGTOFONT -#define XtDatabase XTDATABASE -#define XtDestroyApplicationContext XTDESTROYAPPLICATIONCONTEXT -#define XtDestroyWidget XTDESTROYWIDGET -#define XtDisownSelection XTDISOWNSELECTION -#define XtDispatchEvent XTDISPATCHEVENT -#ifndef NOXTDISPLAY -#define XtDisplay XTDISPLAY -#endif -#define XtDisplayOfObject XTDISPLAYOFOBJECT -#define XtDisplayStringConvWarning XTDISPLAYSTRINGCONVWARNING -#define XtDisplayToApplicationContext XTDISPLAYTOAPPLICATIONCONTEXT -#define XtError XTERROR -#define XtErrorMsg XTERRORMSG -#define XtFree XTFREE -#define XtGetActionKeysym XTGETACTIONKEYSYM -#define XtGetActionList XTGETACTIONLIST -#define XtGetApplicationNameAndClass XTGETAPPLICATIONNAMEANDCLASS -#define XtGetApplicationResources XTGETAPPLICATIONRESOURCES -#define XtGetClassExtension XTGETCLASSEXTENSION -#define XtGetConstraintResourceList XTGETCONSTRAINTRESOURCELIST -#define XtGetGC XTGETGC -#define XtGetMultiClickTime XTGETMULTICLICKTIME -#define XtGetResourceList XTGETRESOURCELIST -#define XtGetSelectionValue XTGETSELECTIONVALUE -#define XtGetSelectionValues XTGETSELECTIONVALUES -#define XtGetSubresources XTGETSUBRESOURCES -#define XtGetValues XTGETVALUES -#define XtGrabButton XTGRABBUTTON -#define XtGrabKeyboard XTGRABKEYBOARD -#define XtGrabPointer XTGRABPOINTER -#define XtHasCallbacks XTHASCALLBACKS -#define XtInitialize XTINITIALIZE -#define XtInitializeWidgetClass XTINITIALIZEWIDGETCLASS -#define XtInsertEventHandler XTINSERTEVENTHANDLER -#define XtInsertRawEventHandler XTINSERTRAWEVENTHANDLER -#define XtInstallAccelerators XTINSTALLACCELERATORS -#define XtIsManaged XTISMANAGED -#define XtIsObject XTISOBJECT -#ifndef NOXTDISPLAY -#define XtIsRealized XTISREALIZED -#endif -#define XtIsSensitive XTISSENSITIVE -#define XtIsSubclass XTISSUBCLASS -#define XtLastTimestampProcessed XTLASTTIMESTAMPPROCESSED -#define XtMainLoop XTMAINLOOP -#define XtMakeGeometryRequest XTMAKEGEOMETRYREQUEST -#define XtMakeResizeRequest XTMAKERESIZEREQUEST -#define XtMalloc XTMALLOC -#define XtManageChild XTMANAGECHILD -#define XtManageChildren XTMANAGECHILDREN -#define XtMergeArgLists XTMERGEARGLISTS -#define XtMoveWidget XTMOVEWIDGET -#define XtName XTNAME -#define XtNameToWidget XTNAMETOWIDGET -#define XtOpenApplication XTOPENAPPLICATION -#define XtOpenDisplay XTOPENDISPLAY -#define XtOverrideTranslations XTOVERRIDETRANSLATIONS -#define XtOwnSelection XTOWNSELECTION -#ifndef NOXTDISPLAY -#define XtParent XTPARENT -#endif -#define XtParseAcceleratorTable XTPARSEACCELERATORTABLE -#define XtParseTranslationTable XTPARSETRANSLATIONTABLE -#define XtPopdown XTPOPDOWN -#define XtPopup XTPOPUP -#define XtPopupSpringLoaded XTPOPUPSPRINGLOADED -#define XtQueryGeometry XTQUERYGEOMETRY -#define XtRealizeWidget XTREALIZEWIDGET -#define XtRealloc XTREALLOC -#define XtRegisterDrawable _XTREGISTERWINDOW -#define XtRegisterGrabAction XTREGISTERGRABACTION -#define XtReleaseGC XTRELEASEGC -#define XtRemoveAllCallbacks XTREMOVEALLCALLBACKS -#define XtRemoveCallback XTREMOVECALLBACK -#define XtRemoveEventHandler XTREMOVEEVENTHANDLER -#define XtRemoveGrab XTREMOVEGRAB -#define XtRemoveInput XTREMOVEINPUT -#define XtRemoveTimeOut XTREMOVETIMEOUT -#define XtRemoveWorkProc XTREMOVEWORKPROC -#define XtResizeWidget XTRESIZEWIDGET -#define XtResolvePathname XTRESOLVEPATHNAME -#ifndef NOXTDISPLAY -#define XtScreen XTSCREEN -#endif -#define XtScreenDatabase XTSCREENDATABASE -#define XtScreenOfObject XTSCREENOFOBJECT -#define XtSessionReturnToken XTSESSIONRETURNTOKEN -#define XtSetErrorHandler XTSETERRORHANDLER -#define XtSetKeyboardFocus XTSETKEYBOARDFOCUS -#define XtSetLanguageProc XTSETLANGUAGEPROC -#define XtSetMappedWhenManaged XTSETMAPPEDWHENMANAGED -#define XtSetSensitive XTSETSENSITIVE -#define XtSetTypeConverter XTSETTYPECONVERTER -#define XtSetValues XTSETVALUES -#define XtShellStrings XTSHELLSTRINGS -#define XtStringConversionWarning XTSTRINGCONVERSIONWARNING -#define XtStrings XTSTRINGS -#define XtToolkitInitialize XTTOOLKITINITIALIZE -#define XtTranslateCoords XTTRANSLATECOORDS -#define XtTranslateKeycode XTTRANSLATEKEYCODE -#define XtUngrabButton XTUNGRABBUTTON -#define XtUngrabKeyboard XTUNGRABKEYBOARD -#define XtUngrabPointer XTUNGRABPOINTER -#define XtUnmanageChild XTUNMANAGECHILD -#define XtUnmanageChildren XTUNMANAGECHILDREN -#define XtUnrealizeWidget XTUNREALIZEWIDGET -#define XtUnregisterDrawable _XTUNREGISTERWINDOW -#define XtVaCreateManagedWidget XTVACREATEMANAGEDWIDGET -#define XtVaCreatePopupShell XTVACREATEPOPUPSHELL -#define XtVaCreateWidget XTVACREATEWIDGET -#define XtVaGetApplicationResources XTVAGETAPPLICATIONRESOURCES -#define XtVaGetValues XTVAGETVALUES -#define XtVaSetValues XTVASETVALUES -#define XtWarning XTWARNING -#define XtWarningMsg XTWARNINGMSG -#define XtWidgetToApplicationContext XTWIDGETTOAPPLICATIONCONTEXT -#ifndef NOXTDISPLAY -#define XtWindow XTWINDOW -#endif -#define XtWindowOfObject XTWINDOWOFOBJECT -#define XtWindowToWidget XTWINDOWTOWIDGET -#define XwcDrawImageString XWCDRAWIMAGESTRING -#define XwcDrawString XWCDRAWSTRING -#define XwcFreeStringList XWCFREESTRINGLIST -#define XwcTextEscapement XWCTEXTESCAPEMENT -#define XwcTextExtents XWCTEXTEXTENTS -#define XwcTextListToTextProperty XWCTEXTLISTTOTEXTPROPERTY -#define XwcLookupString XWCLOOKUPSTRING -#define XwcTextPropertyToTextList XWCTEXTPROPERTYTOTEXTLIST -#define _XAllocTemp _XALLOCTEMP -#define _XDeqAsyncHandler _XDEQASYNCHANDLER -#define _XEatData _XEATDATA -#define _XFlush _XFLUSH -#define _XFreeTemp _XFREETEMP -#define _XGetAsyncReply _XGETASYNCREPLY -#define _XInitImageFuncPtrs _XINITIMAGEFUNCPTRS -#define _XRead _XREAD -#define _XReadPad _XREADPAD -#define _XRegisterFilterByType _XREGISTERFILTERBYTYPE -#define _XReply _XREPLY -#define _XSend _XSEND -#define _XUnregisterFilter _XUNREGISTERFILTER -#define _XVIDtoVisual _XVIDTOVISUAL -#define _XmBottomShadowColorDefault _XMBOTTOMSHADOWCOLORDEFAULT -#define _XmClearBorder _XMCLEARBORDER -#define _XmConfigureObject _XMCONFIGUREOBJECT -#define _XmDestroyParentCallback _XMDESTROYPARENTCALLBACK -#define _XmDrawArrow _XMDRAWARROW -#define _XmDrawShadows _XMDRAWSHADOWS -#define _XmFontListGetDefaultFont _XMFONTLISTGETDEFAULTFONT -#define _XmFromHorizontalPixels _XMFROMHORIZONTALPIXELS -#define _XmFromVerticalPixels _XMFROMVERTICALPIXELS -#define _XmGetClassExtensionPtr _XMGETCLASSEXTENSIONPTR -#define _XmGetDefaultFontList _XMGETDEFAULTFONTLIST -#define _XmGetTextualDragIcon _XMGETTEXTUALDRAGICON -#define _XmGetWidgetExtData _XMGETWIDGETEXTDATA -#define _XmGrabKeyboard _XMGRABKEYBOARD -#define _XmGrabPointer _XMGRABPOINTER -#define _XmInheritClass _XMINHERITCLASS -#define _XmInputForGadget _XMINPUTFORGADGET -#define _XmInputInGadget _XMINPUTINGADGET -#define _XmMakeGeometryRequest _XMMAKEGEOMETRYREQUEST -#define _XmMenuPopDown _XMMENUPOPDOWN -#define _XmMoveObject _XMMOVEOBJECT -#define _XmNavigChangeManaged _XMNAVIGCHANGEMANAGED -#define _XmOSBuildFileList _XMOSBUILDFILELIST -#define _XmOSFileCompare _XMOSFILECOMPARE -#define _XmOSFindPatternPart _XMOSFINDPATTERNPART -#define _XmOSQualifyFileSpec _XMOSQUALIFYFILESPEC -#define _XmPostPopupMenu _XMPOSTPOPUPMENU -#define _XmPrimitiveEnter _XMPRIMITIVEENTER -#define _XmPrimitiveLeave _XMPRIMITIVELEAVE -#define _XmRedisplayGadgets _XMREDISPLAYGADGETS -#define _XmShellIsExclusive _XMSHELLISEXCLUSIVE -#define _XmStringDraw _XMSTRINGDRAW -#define _XmStringGetTextConcat _XMSTRINGGETTEXTCONCAT -#define _XmStrings _XMSTRINGS -#define _XmToHorizontalPixels _XMTOHORIZONTALPIXELS -#define _XmToVerticalPixels _XMTOVERTICALPIXELS -#define _XmTopShadowColorDefault _XMTOPSHADOWCOLORDEFAULT -#define _Xm_fastPtr _XM_FASTPTR -#define _XtCheckSubclassFlag _XTCHECKSUBCLASSFLAG -#define _XtCopyFromArg _XTCOPYFROMARG -#define _XtCountVaList _XTCOUNTVALIST -#define _XtInherit _XTINHERIT -#define _XtInheritTranslations _XTINHERITTRANSLATIONS -#define _XtIsSubclassOf _XTISSUBCLASSOF -#define _XtVaToArgList _XTVATOARGLIST -#define applicationShellWidgetClass APPLICATIONSHELLWIDGETCLASS -#define cli$dcl_parse CLI$DCL_PARSE -#define cli$get_value CLI$GET_VALUE -#define cli$present CLI$PRESENT -#define compositeClassRec COMPOSITECLASSREC -#define compositeWidgetClass COMPOSITEWIDGETCLASS -#define constraintClassRec CONSTRAINTCLASSREC -#define constraintWidgetClass CONSTRAINTWIDGETCLASS -#define coreWidgetClass COREWIDGETCLASS -#define exe$getspi EXE$GETSPI -#define lbr$close LBR$CLOSE -#define lbr$get_header LBR$GET_HEADER -#define lbr$get_index LBR$GET_INDEX -#define lbr$get_record LBR$GET_RECORD -#define lbr$ini_control LBR$INI_CONTROL -#define lbr$lookup_key LBR$LOOKUP_KEY -#define lbr$open LBR$OPEN -#define lbr$output_help LBR$OUTPUT_HELP -#define lib$add_times LIB$ADD_TIMES -#define lib$addx LIB$ADDX -#define lib$create_dir LIB$CREATE_DIR -#define lib$create_vm_zone LIB$CREATE_VM_ZONE -#define lib$cvt_from_internal_time LIB$CVT_FROM_INTERNAL_TIME -#define lib$cvt_htb LIB$CVT_HTB -#define lib$cvt_vectim LIB$CVT_VECTIM -#define lib$day LIB$DAY -#define lib$day_of_week LIB$DAY_OF_WEEK -#define lib$delete_symbol LIB$DELETE_SYMBOL -#define lib$delete_vm_zone LIB$DELETE_VM_ZONE -#define lib$disable_ctrl LIB$DISABLE_CTRL -#define lib$ediv LIB$EDIV -#define lib$emul LIB$EMUL -#define lib$enable_ctrl LIB$ENABLE_CTRL -#define lib$find_vm_zone LIB$FIND_VM_ZONE -#define lib$format_date_time LIB$FORMAT_DATE_TIME -#define lib$free_timer LIB$FREE_TIMER -#define lib$free_vm LIB$FREE_VM -#define lib$get_ef LIB$GET_EF -#define lib$get_foreign LIB$GET_FOREIGN -#define lib$get_input LIB$GET_INPUT -#define lib$get_users_language LIB$GET_USERS_LANGUAGE -#define lib$get_vm LIB$GET_VM -#define lib$get_symbol LIB$GET_SYMBOL -#define lib$getdvi LIB$GETDVI -#define lib$init_date_time_context LIB$INIT_DATE_TIME_CONTEXT -#define lib$init_timer LIB$INIT_TIMER -#define lib$find_file LIB$FIND_FILE -#define lib$find_file_end LIB$FIND_FILE_END -#define lib$find_image_symbol LIB$FIND_IMAGE_SYMBOL -#define lib$mult_delta_time LIB$MULT_DELTA_TIME -#define lib$put_output LIB$PUT_OUTPUT -#define lib$rename_file LIB$RENAME_FILE -#define lib$reset_vm_zone LIB$RESET_VM_ZONE -#define lib$set_symbol LIB$SET_SYMBOL -#define lib$sfree1_dd LIB$SFREE1_DD -#define lib$show_vm LIB$SHOW_VM -#define lib$show_vm_zone LIB$SHOW_VM_ZONE -#define lib$spawn LIB$SPAWN -#define lib$stat_timer LIB$STAT_TIMER -#define lib$subx LIB$SUBX -#define lib$sub_times LIB$SUB_TIMES -#define lib$wait LIB$WAIT -#define mail$send_add_address MAIL$SEND_ADD_ADDRESS -#define mail$send_add_attribute MAIL$SEND_ADD_ATTRIBUTE -#define mail$send_add_bodypart MAIL$SEND_ADD_BODYPART -#define mail$send_begin MAIL$SEND_BEGIN -#define mail$send_end MAIL$SEND_END -#define mail$send_message MAIL$SEND_MESSAGE -#define ncs$convert NCS$CONVERT -#define ncs$get_cf NCS$GET_CF -#define objectClass OBJECTCLASS -#define objectClassRec OBJECTCLASSREC -#define overrideShellClassRec OVERRIDESHELLCLASSREC -#define overrideShellWidgetClass OVERRIDESHELLWIDGETCLASS -#define pthread_attr_create PTHREAD_ATTR_CREATE -#define pthread_attr_delete PTHREAD_ATTR_DELETE -#define pthread_attr_destroy PTHREAD_ATTR_DESTROY -#define pthread_attr_getdetach_np PTHREAD_ATTR_GETDETACH_NP -#define pthread_attr_getguardsize_np PTHREAD_ATTR_GETGUARDSIZE_NP -#define pthread_attr_getinheritsched PTHREAD_ATTR_GETINHERITSCHED -#define pthread_attr_getprio PTHREAD_ATTR_GETPRIO -#define pthread_attr_getsched PTHREAD_ATTR_GETSCHED -#define pthread_attr_getschedparam PTHREAD_ATTR_GETSCHEDPARAM -#define pthread_attr_getschedpolicy PTHREAD_ATTR_GETSCHEDPOLICY -#define pthread_attr_getstacksize PTHREAD_ATTR_GETSTACKSIZE -#define pthread_attr_init PTHREAD_ATTR_INIT -#define pthread_attr_setdetach_np PTHREAD_ATTR_SETDETACH_NP -#define pthread_attr_setdetachstate PTHREAD_ATTR_SETDETACHSTATE -#define pthread_attr_setguardsize_np PTHREAD_ATTR_SETGUARDSIZE_NP -#define pthread_attr_setinheritsched PTHREAD_ATTR_SETINHERITSCHED -#define pthread_attr_setprio PTHREAD_ATTR_SETPRIO -#define pthread_attr_setsched PTHREAD_ATTR_SETSCHED -#define pthread_attr_setschedparam PTHREAD_ATTR_SETSCHEDPARAM -#define pthread_attr_setschedpolicy PTHREAD_ATTR_SETSCHEDPOLICY -#ifndef pthread_attr_setscope -# define pthread_attr_setscope PTHREAD_ATTR_SETSCOPE -#endif -#define pthread_attr_setstacksize PTHREAD_ATTR_SETSTACKSIZE -#define pthread_cancel PTHREAD_CANCEL -#define pthread_cancel_e PTHREAD_CANCEL_E -#define pthread_cond_broadcast PTHREAD_COND_BROADCAST -#define pthread_cond_destroy PTHREAD_COND_DESTROY -#define pthread_cond_init PTHREAD_COND_INIT -#define pthread_cond_sig_preempt_int_np PTHREAD_COND_SIG_PREEMPT_INT_NP -#define pthread_cond_signal PTHREAD_COND_SIGNAL -#define pthread_cond_signal_int_np PTHREAD_COND_SIGNAL_INT_NP -#define pthread_cond_timedwait PTHREAD_COND_TIMEDWAIT -#define pthread_cond_wait PTHREAD_COND_WAIT -#define pthread_condattr_create PTHREAD_CONDATTR_CREATE -#define pthread_condattr_delete PTHREAD_CONDATTR_DELETE -#define pthread_condattr_init PTHREAD_CONDATTR_INIT -#define pthread_create PTHREAD_CREATE -#define pthread_delay_np PTHREAD_DELAY_NP -#define pthread_detach PTHREAD_DETACH -#define pthread_equal PTHREAD_EQUAL -#define pthread_exc_fetch_fp_np PTHREAD_EXC_FETCH_FP_NP -#define pthread_exc_handler_np PTHREAD_EXC_HANDLER_NP -#define pthread_exc_matches_np PTHREAD_EXC_MATCHES_NP -#define pthread_exc_pop_ctx_np PTHREAD_EXC_POP_CTX_NP -#define pthread_exc_push_ctx_np PTHREAD_EXC_PUSH_CTX_NP -#define pthread_exc_raise_np PTHREAD_EXC_RAISE_NP -#define pthread_exc_savecontext_np PTHREAD_EXC_SAVECONTEXT_NP -#define pthread_exit PTHREAD_EXIT -#define pthread_get_expiration_np PTHREAD_GET_EXPIRATION_NP -#define pthread_getprio PTHREAD_GETPRIO -#define pthread_getschedparam PTHREAD_GETSCHEDPARAM -#define pthread_getscheduler PTHREAD_GETSCHEDULER -#define pthread_getspecific PTHREAD_GETSPECIFIC -#define pthread_getunique_np PTHREAD_GETUNIQUE_NP -#define pthread_join PTHREAD_JOIN -#define pthread_join32 PTHREAD_JOIN32 -#define pthread_key_create PTHREAD_KEY_CREATE -#define pthread_key_delete PTHREAD_KEY_DELETE -#define pthread_keycreate PTHREAD_KEYCREATE -#define pthread_kill PTHREAD_KILL -#define pthread_lock_global_np PTHREAD_LOCK_GLOBAL_NP -#define pthread_mutex_destroy PTHREAD_MUTEX_DESTROY -#define pthread_mutex_init PTHREAD_MUTEX_INIT -#define pthread_mutex_lock PTHREAD_MUTEX_LOCK -#define pthread_mutex_trylock PTHREAD_MUTEX_TRYLOCK -#define pthread_mutex_unlock PTHREAD_MUTEX_UNLOCK -#define pthread_mutexattr_create PTHREAD_MUTEXATTR_CREATE -#define pthread_mutexattr_delete PTHREAD_MUTEXATTR_DELETE -#define pthread_mutexattr_destroy PTHREAD_MUTEXATTR_DESTROY -#define pthread_mutexattr_getkind_np PTHREAD_MUTEXATTR_GETKIND_NP -#define pthread_mutexattr_init PTHREAD_MUTEXATTR_INIT -#define pthread_mutexattr_setkind_np PTHREAD_MUTEXATTR_SETKIND_NP -#define pthread_mutexattr_settype_np PTHREAD_MUTEXATTR_SETTYPE_NP -#define pthread_once PTHREAD_ONCE -#define pthread_resume_np PTHREAD_RESUME_NP -#define pthread_self PTHREAD_SELF -#define pthread_setasynccancel PTHREAD_SETASYNCCANCEL -#define pthread_setcancel PTHREAD_SETCANCEL -#define pthread_setcancelstate PTHREAD_SETCANCELSTATE -#define pthread_setcanceltype PTHREAD_SETCANCELTYPE -#define pthread_setprio PTHREAD_SETPRIO -#define pthread_setschedparam PTHREAD_SETSCHEDPARAM -#define pthread_setscheduler PTHREAD_SETSCHEDULER -#define pthread_setspecific PTHREAD_SETSPECIFIC -#define pthread_suspend_np PTHREAD_SUSPEND_NP -#define pthread_testcancel PTHREAD_TESTCANCEL -#define pthread_unlock_global_np PTHREAD_UNLOCK_GLOBAL_NP -#define pthread_yield PTHREAD_YIELD -#define pthread_yield_np PTHREAD_YIELD_NP -#define rectObjClass RECTOBJCLASS -#define rectObjClassRec RECTOBJCLASSREC -#define sessionShellWidgetClass SESSIONSHELLWIDGETCLASS -#define shellWidgetClass SHELLWIDGETCLASS -#define shmat SHMAT -#define shmctl SHMCTL -#define shmdt SHMDT -#define shmget SHMGET -#define smg$create_key_table SMG$CREATE_KEY_TABLE -#define smg$create_virtual_keyboard SMG$CREATE_VIRTUAL_KEYBOARD -#define smg$read_composed_line SMG$READ_COMPOSED_LINE -#define sys$add_ident SYS$ADD_IDENT -#define sys$asctoid SYS$ASCTOID -#define sys$assign SYS$ASSIGN -#define sys$bintim SYS$BINTIM -#define sys$cancel SYS$CANCEL -#define sys$cantim SYS$CANTIM -#define sys$check_access SYS$CHECK_ACCESS -#define sys$close SYS$CLOSE -#define sys$connect SYS$CONNECT -#define sys$create SYS$CREATE -#define sys$create_user_profile SYS$CREATE_USER_PROFILE -#define sys$crembx SYS$CREMBX -#define sys$creprc SYS$CREPRC -#define sys$crmpsc SYS$CRMPSC -#define sys$dassgn SYS$DASSGN -#define sys$dclast SYS$DCLAST -#define sys$dclexh SYS$DCLEXH -#define sys$delprc SYS$DELPRC -#define sys$deq SYS$DEQ -#define sys$dgblsc SYS$DGBLSC -#define sys$display SYS$DISPLAY -#define sys$enq SYS$ENQ -#define sys$enqw SYS$ENQW -#define sys$erase SYS$ERASE -#define sys$fao SYS$FAO -#define sys$faol SYS$FAOL -#define sys$find_held SYS$FIND_HELD -#define sys$finish_rdb SYS$FINISH_RDB -#define sys$flush SYS$FLUSH -#define sys$forcex SYS$FORCEX -#define sys$get SYS$GET -#define sys$get_security SYS$GET_SECURITY -#define sys$getdviw SYS$GETDVIW -#define sys$getjpi SYS$GETJPI -#define sys$getjpiw SYS$GETJPIW -#define sys$getlkiw SYS$GETLKIW -#define sys$getmsg SYS$GETMSG -#define sys$getsyi SYS$GETSYI -#define sys$getsyiw SYS$GETSYIW -#define sys$gettim SYS$GETTIM -#define sys$getuai SYS$GETUAI -#define sys$grantid SYS$GRANTID -#define sys$hash_password SYS$HASH_PASSWORD -#define sys$hiber SYS$HIBER -#define sys$mgblsc SYS$MGBLSC -#define sys$numtim SYS$NUMTIM -#define sys$open SYS$OPEN -#define sys$parse SYS$PARSE -#define sys$parse_acl SYS$PARSE_ACL -#define sys$parse_acl SYS$PARSE_ACL -#define sys$persona_assume SYS$PERSONA_ASSUME -#define sys$persona_create SYS$PERSONA_CREATE -#define sys$persona_delete SYS$PERSONA_DELETE -#define sys$process_scan SYS$PROCESS_SCAN -#define sys$put SYS$PUT -#define sys$qio SYS$QIO -#define sys$qiow SYS$QIOW -#define sys$read SYS$READ -#define sys$resched SYS$RESCHED -#define sys$rewind SYS$REWIND -#define sys$search SYS$SEARCH -#define sys$set_security SYS$SET_SECURITY -#define sys$setast SYS$SETAST -#define sys$setef SYS$SETEF -#define sys$setimr SYS$SETIMR -#define sys$setpri SYS$SETPRI -#define sys$setprn SYS$SETPRN -#define sys$setprv SYS$SETPRV -#define sys$setswm SYS$SETSWM -#define sys$setuai SYS$SETUAI -#define sys$sndopr SYS$SNDOPR -#define sys$synch SYS$SYNCH -#define sys$trnlnm SYS$TRNLNM -#define sys$update SYS$UPDATE -#define sys$wake SYS$WAKE -#define sys$write SYS$WRITE -#define topLevelShellClassRec TOPLEVELSHELLCLASSREC -#define topLevelShellWidgetClass TOPLEVELSHELLWIDGETCLASS -#define transientShellWidgetClass TRANSIENTSHELLWIDGETCLASS -#define vendorShellClassRec VENDORSHELLCLASSREC -#define vendorShellWidgetClass VENDORSHELLWIDGETCLASS -#define widgetClass WIDGETCLASS -#define widgetClassRec WIDGETCLASSREC -#define wmShellClassRec WMSHELLCLASSREC -#define wmShellWidgetClass WMSHELLWIDGETCLASS -#define x$soft_ast_lib_lock X$SOFT_AST_LIB_LOCK -#define x$soft_ast_lock_depth X$SOFT_AST_LOCK_DEPTH -#define x$soft_reenable_asts X$SOFT_REENABLE_ASTS -#define xmArrowButtonWidgetClass XMARROWBUTTONWIDGETCLASS -#define xmBulletinBoardWidgetClass XMBULLETINBOARDWIDGETCLASS -#define xmCascadeButtonClassRec XMCASCADEBUTTONCLASSREC -#define xmCascadeButtonGadgetClass XMCASCADEBUTTONGADGETCLASS -#define xmCascadeButtonWidgetClass XMCASCADEBUTTONWIDGETCLASS -#define xmCommandWidgetClass XMCOMMANDWIDGETCLASS -#define xmDialogShellWidgetClass XMDIALOGSHELLWIDGETCLASS -#define xmDrawingAreaWidgetClass XMDRAWINGAREAWIDGETCLASS -#define xmDrawnButtonWidgetClass XMDRAWNBUTTONWIDGETCLASS -#define xmFileSelectionBoxWidgetClass XMFILESELECTIONBOXWIDGETCLASS -#define xmFormWidgetClass XMFORMWIDGETCLASS -#define xmFrameWidgetClass XMFRAMEWIDGETCLASS -#define xmGadgetClass XMGADGETCLASS -#define xmLabelGadgetClass XMLABELGADGETCLASS -#define xmLabelWidgetClass XMLABELWIDGETCLASS -#define xmListWidgetClass XMLISTWIDGETCLASS -#define xmMainWindowWidgetClass XMMAINWINDOWWIDGETCLASS -#define xmManagerClassRec XMMANAGERCLASSREC -#define xmManagerWidgetClass XMMANAGERWIDGETCLASS -#define xmMenuShellWidgetClass XMMENUSHELLWIDGETCLASS -#define xmMessageBoxWidgetClass XMMESSAGEBOXWIDGETCLASS -#define xmPrimitiveClassRec XMPRIMITIVECLASSREC -#define xmPrimitiveWidgetClass XMPRIMITIVEWIDGETCLASS -#define xmPushButtonClassRec XMPUSHBUTTONCLASSREC -#define xmPushButtonGadgetClass XMPUSHBUTTONGADGETCLASS -#define xmPushButtonWidgetClass XMPUSHBUTTONWIDGETCLASS -#define xmRowColumnWidgetClass XMROWCOLUMNWIDGETCLASS -#define xmSashWidgetClass XMSASHWIDGETCLASS -#define xmScaleWidgetClass XMSCALEWIDGETCLASS -#define xmScrollBarWidgetClass XMSCROLLBARWIDGETCLASS -#define xmScrolledWindowClassRec XMSCROLLEDWINDOWCLASSREC -#define xmScrolledWindowWidgetClass XMSCROLLEDWINDOWWIDGETCLASS -#define xmSeparatorGadgetClass XMSEPARATORGADGETCLASS -#define xmSeparatorWidgetClass XMSEPARATORWIDGETCLASS -#define xmTextFieldWidgetClass XMTEXTFIELDWIDGETCLASS -#define xmTextWidgetClass XMTEXTWIDGETCLASS -#define xmToggleButtonGadgetClass XMTOGGLEBUTTONGADGETCLASS -#define xmToggleButtonWidgetClass XMTOGGLEBUTTONWIDGETCLASS - -#if (__VMS_VER < 80200000) -# define SetReqLen(req,n,badlen) \ - if ((req->length + n) > (unsigned)65535) { \ - n = badlen; \ - req->length += n; \ - } else \ - req->length += n -#endif - -#ifdef __cplusplus -extern "C" { -#endif -extern void XtFree(char*); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/desmume/src/windows/wx/include/wx/volume.h b/desmume/src/windows/wx/include/wx/volume.h deleted file mode 100644 index be4407533..000000000 --- a/desmume/src/windows/wx/include/wx/volume.h +++ /dev/null @@ -1,146 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/volume.h -// Purpose: wxFSVolume - encapsulates system volume information -// Author: George Policello -// Modified by: -// Created: 28 Jan 02 -// RCS-ID: $Id: volume.h 39399 2006-05-28 23:08:31Z ABX $ -// Copyright: (c) 2002 George Policello -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -// ---------------------------------------------------------------------------- -// wxFSVolume represents a volume/drive/mount point in a file system -// ---------------------------------------------------------------------------- - -#ifndef _WX_FSVOLUME_H_ -#define _WX_FSVOLUME_H_ - -#include "wx/defs.h" - -#if wxUSE_FSVOLUME - -#include "wx/arrstr.h" - -// the volume flags -enum -{ - // is the volume mounted? - wxFS_VOL_MOUNTED = 0x0001, - - // is the volume removable (floppy, CD, ...)? - wxFS_VOL_REMOVABLE = 0x0002, - - // read only? (otherwise read write) - wxFS_VOL_READONLY = 0x0004, - - // network resources - wxFS_VOL_REMOTE = 0x0008 -}; - -// the volume types -enum wxFSVolumeKind -{ - wxFS_VOL_FLOPPY, - wxFS_VOL_DISK, - wxFS_VOL_CDROM, - wxFS_VOL_DVDROM, - wxFS_VOL_NETWORK, - wxFS_VOL_OTHER, - wxFS_VOL_MAX -}; - -class WXDLLIMPEXP_BASE wxFSVolumeBase -{ -public: - // return the array containing the names of the volumes - // - // only the volumes with the flags such that - // (flags & flagsSet) == flagsSet && !(flags & flagsUnset) - // are returned (by default, all mounted ones) - static wxArrayString GetVolumes(int flagsSet = wxFS_VOL_MOUNTED, - int flagsUnset = 0); - - // stop execution of GetVolumes() called previously (should be called from - // another thread, of course) - static void CancelSearch(); - - // create the volume object with this name (should be one of those returned - // by GetVolumes()). - wxFSVolumeBase(); - wxFSVolumeBase(const wxString& name); - bool Create(const wxString& name); - - // accessors - // --------- - - // is this a valid volume? - bool IsOk() const; - - // kind of this volume? - wxFSVolumeKind GetKind() const; - - // flags of this volume? - int GetFlags() const; - - // can we write to this volume? - bool IsWritable() const { return !(GetFlags() & wxFS_VOL_READONLY); } - - // get the name of the volume and the name which should be displayed to the - // user - wxString GetName() const { return m_volName; } - wxString GetDisplayName() const { return m_dispName; } - - // TODO: operatios (Mount(), Unmount(), Eject(), ...)? - -protected: - // the internal volume name - wxString m_volName; - - // the volume name as it is displayed to the user - wxString m_dispName; - - // have we been initialized correctly? - bool m_isOk; -}; - -#if wxUSE_GUI - -#include "wx/icon.h" -#include "wx/iconbndl.h" // only for wxIconArray - -enum wxFSIconType -{ - wxFS_VOL_ICO_SMALL = 0, - wxFS_VOL_ICO_LARGE, - wxFS_VOL_ICO_SEL_SMALL, - wxFS_VOL_ICO_SEL_LARGE, - wxFS_VOL_ICO_MAX -}; - -// wxFSVolume adds GetIcon() to wxFSVolumeBase -class WXDLLIMPEXP_CORE wxFSVolume : public wxFSVolumeBase -{ -public: - wxFSVolume() : wxFSVolumeBase() { InitIcons(); } - wxFSVolume(const wxString& name) : wxFSVolumeBase(name) { InitIcons(); } - - wxIcon GetIcon(wxFSIconType type) const; - -private: - void InitIcons(); - - // the different icons for this volume (created on demand) - wxIconArray m_icons; -}; - -#else // !wxUSE_GUI - -// wxFSVolume is the same thing as wxFSVolume in wxBase -typedef wxFSVolumeBase wxFSVolume; - -#endif // wxUSE_GUI/!wxUSE_GUI - -#endif // wxUSE_FSVOLUME - -#endif // _WX_FSVOLUME_H_ diff --git a/desmume/src/windows/wx/include/wx/vscroll.h b/desmume/src/windows/wx/include/wx/vscroll.h deleted file mode 100644 index 1d5d4e449..000000000 --- a/desmume/src/windows/wx/include/wx/vscroll.h +++ /dev/null @@ -1,223 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: include/wx/vscroll.h -// Purpose: wxVScrolledWindow: generalization of wxScrolledWindow -// Author: Vadim Zeitlin -// Modified by: -// Created: 30.05.03 -// RCS-ID: $Id: vscroll.h 38917 2006-04-26 00:17:52Z VZ $ -// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org> -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_VSCROLL_H_ -#define _WX_VSCROLL_H_ - -#include "wx/panel.h" // base class - -// ---------------------------------------------------------------------------- -// wxVScrolledWindow -// ---------------------------------------------------------------------------- - -/* - In the name of this class, "V" may stand for "variable" because it can be - used for scrolling lines of variable heights; "virtual" because it is not - necessary to know the heights of all lines in advance -- only those which - are shown on the screen need to be measured; or, even, "vertical" because - this class only supports scrolling in one direction currently (this could - and probably will change in the future however). - - In any case, this is a generalization of the wxScrolledWindow class which - can be only used when all lines have the same height. It lacks some other - wxScrolledWindow features however, notably it currently lacks support for - horizontal scrolling; it can't scroll another window nor only a rectangle - of the window and not its entire client area. - */ -class WXDLLEXPORT wxVScrolledWindow : public wxPanel -{ -public: - // constructors and such - // --------------------- - - // default ctor, you must call Create() later - wxVScrolledWindow() { Init(); } - - // normal ctor, no need to call Create() after this one - // - // note that wxVSCROLL is always automatically added to our style, there is - // no need to specify it explicitly - wxVScrolledWindow(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxPanelNameStr) - { - Init(); - - (void)Create(parent, id, pos, size, style, name); - } - - // same as the previous ctor but returns status code: true if ok - // - // just as with the ctor above, wxVSCROLL style is always used, there is no - // need to specify it - bool Create(wxWindow *parent, - wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxString& name = wxPanelNameStr) - { - return wxPanel::Create(parent, id, pos, size, style | wxVSCROLL, name); - } - - - // operations - // ---------- - - // set the number of lines the window contains: the derived class must - // provide the heights for all lines with indices up to the one given here - // in its OnGetLineHeight() - void SetLineCount(size_t count); - - // scroll to the specified line: it will become the first visible line in - // the window - // - // return true if we scrolled the window, false if nothing was done - bool ScrollToLine(size_t line); - - // scroll by the specified number of lines/pages - virtual bool ScrollLines(int lines); - virtual bool ScrollPages(int pages); - - // redraw the specified line - virtual void RefreshLine(size_t line); - - // redraw all lines in the specified range (inclusive) - virtual void RefreshLines(size_t from, size_t to); - - // return the item at the specified (in physical coordinates) position or. - - // wxNOT_FOUND if none, i.e. if it is below the last item - int HitTest(wxCoord x, wxCoord y) const; - int HitTest(const wxPoint& pt) const { return HitTest(pt.x, pt.y); } - - // recalculate all our parameters and redisplay all lines - virtual void RefreshAll(); - - - // accessors - // --------- - - // get the number of lines this window contains (previously set by - // SetLineCount()) - size_t GetLineCount() const { return m_lineMax; } - - // get the first currently visible line - size_t GetVisibleBegin() const { return m_lineFirst; } - - // get the first currently visible line - size_t GetVisibleEnd() const { return m_lineFirst + m_nVisible; } - - // is this line currently visible? - bool IsVisible(size_t line) const - { return line >= GetVisibleBegin() && line < GetVisibleEnd(); } - - - // this is the same as GetVisibleBegin(), exists to match - // GetLastVisibleLine() and for backwards compatibility only - size_t GetFirstVisibleLine() const { return m_lineFirst; } - - // get the last currently visible line - // - // this function is unsafe as it returns (size_t)-1 (i.e. a huge positive - // number) if the control is empty, use GetVisibleEnd() instead, this one - // is kept for backwards compatibility - size_t GetLastVisibleLine() const { return GetVisibleEnd() - 1; } - - // layout the children (including the sizer if needed) - virtual bool Layout(); - -protected: - // this function must be overridden in the derived class and it should - // return the height of the given line in pixels - virtual wxCoord OnGetLineHeight(size_t n) const = 0; - - // this function doesn't have to be overridden but it may be useful to do - // it if calculating the lines heights is a relatively expensive operation - // as it gives the user code a possibility to calculate several of them at - // once - // - // OnGetLinesHint() is normally called just before OnGetLineHeight() but you - // shouldn't rely on the latter being called for all lines in the interval - // specified here. It is also possible that OnGetLineHeight() will be - // called for the lines outside of this interval, so this is really just a - // hint, not a promise. - // - // finally note that lineMin is inclusive, while lineMax is exclusive, as - // usual - virtual void OnGetLinesHint(size_t WXUNUSED(lineMin), - size_t WXUNUSED(lineMax)) const { } - - // when the number of lines changes, we try to estimate the total height - // of all lines which is a rather expensive operation in terms of lines - // access, so if the user code may estimate the average height - // better/faster than we do, it should override this function to implement - // its own logic - // - // this function should return the best guess for the total height it may - // make - virtual wxCoord EstimateTotalHeight() const; - - - // the event handlers - void OnSize(wxSizeEvent& event); - void OnScroll(wxScrollWinEvent& event); -#if wxUSE_MOUSEWHEEL - void OnMouseWheel(wxMouseEvent& event); -#endif - - // find the index of the line we need to show at the top of the window such - // that the last (fully or partially) visible line is the given one - size_t FindFirstFromBottom(size_t lineLast, bool fullyVisible = false); - - // get the total height of the lines between lineMin (inclusive) and - // lineMax (exclusive) - wxCoord GetLinesHeight(size_t lineMin, size_t lineMax) const; - - // update the thumb size shown by the scrollbar - void UpdateScrollbar(); - - // remove the scrollbar completely because we don't need it - void RemoveScrollbar(); - -private: - // common part of all ctors - void Init(); - - - // the total number of (logical) lines - size_t m_lineMax; - - // the total (estimated) height - wxCoord m_heightTotal; - - // the first currently visible line - size_t m_lineFirst; - - // the number of currently visible lines (including the last, possibly only - // partly, visible one) - size_t m_nVisible; - - // accumulated mouse wheel rotation -#if wxUSE_MOUSEWHEEL - int m_sumWheelRotation; -#endif - - DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxVScrolledWindow) - DECLARE_ABSTRACT_CLASS(wxVScrolledWindow) -}; - -#endif // _WX_VSCROLL_H_ - diff --git a/desmume/src/windows/wx/include/wx/wave.h b/desmume/src/windows/wx/include/wx/wave.h deleted file mode 100644 index 48414af79..000000000 --- a/desmume/src/windows/wx/include/wx/wave.h +++ /dev/null @@ -1,36 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/wave.h -// Purpose: wxSound compatibility header -// Author: Vaclav Slavik -// Modified by: -// Created: 2004/02/01 -// RCS-ID: $Id: wave.h 32852 2005-03-16 16:18:31Z ABX $ -// Copyright: (c) 2004, Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WAVE_H_BASE_ -#define _WX_WAVE_H_BASE_ - -#include "wx/defs.h" - -#if wxUSE_SOUND - -#if WXWIN_COMPATIBILITY_2_4 -#if defined(__DMC__) || defined(__BORLANDC__) - #pragma message "wx/wave.h header is deprecated, use wx/sound.h and wxSound" -#elif defined(__WATCOMC__) || defined(__VISUALC__) - #pragma message ("wx/wave.h header is deprecated, use wx/sound.h and wxSound") -#else - #warning "wx/wave.h header is deprecated, use wx/sound.h and wxSound" -#endif - #include "wx/sound.h" - // wxSound used to be called wxWave before wxWidgets 2.5.1: - typedef wxSound wxWave; -#else - #error "wx/wave.h is only available in compatibility mode" -#endif - -#endif - -#endif diff --git a/desmume/src/windows/wx/include/wx/wfstream.h b/desmume/src/windows/wx/include/wx/wfstream.h deleted file mode 100644 index 9d4a44105..000000000 --- a/desmume/src/windows/wx/include/wx/wfstream.h +++ /dev/null @@ -1,204 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/wfstream.h -// Purpose: File stream classes -// Author: Guilhem Lavaux -// Modified by: -// Created: 11/07/98 -// RCS-ID: $Id: wfstream.h 44013 2006-12-19 13:49:26Z SC $ -// Copyright: (c) Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WXFSTREAM_H__ -#define _WX_WXFSTREAM_H__ - -#include "wx/defs.h" - -#if wxUSE_STREAMS - -#include "wx/object.h" -#include "wx/string.h" -#include "wx/stream.h" -#include "wx/file.h" -#include "wx/ffile.h" - -#if wxUSE_FILE - -// ---------------------------------------------------------------------------- -// wxFileStream using wxFile -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFileInputStream : public wxInputStream -{ -public: - wxFileInputStream(const wxString& ifileName); - wxFileInputStream(wxFile& file); - wxFileInputStream(int fd); - virtual ~wxFileInputStream(); - - wxFileOffset GetLength() const; - - bool Ok() const { return IsOk(); } - virtual bool IsOk() const; - bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } - -protected: - wxFileInputStream(); - - size_t OnSysRead(void *buffer, size_t size); - wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); - wxFileOffset OnSysTell() const; - -protected: - wxFile *m_file; - bool m_file_destroy; - - DECLARE_NO_COPY_CLASS(wxFileInputStream) -}; - -class WXDLLIMPEXP_BASE wxFileOutputStream : public wxOutputStream -{ -public: - wxFileOutputStream(const wxString& fileName); - wxFileOutputStream(wxFile& file); - wxFileOutputStream(int fd); - virtual ~wxFileOutputStream(); - - void Sync(); - bool Close() { return m_file_destroy ? m_file->Close() : true; } - wxFileOffset GetLength() const; - - bool Ok() const { return IsOk(); } - virtual bool IsOk() const; - bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } - -protected: - wxFileOutputStream(); - - size_t OnSysWrite(const void *buffer, size_t size); - wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); - wxFileOffset OnSysTell() const; - -protected: - wxFile *m_file; - bool m_file_destroy; - - DECLARE_NO_COPY_CLASS(wxFileOutputStream) -}; - -class WXDLLIMPEXP_BASE wxTempFileOutputStream : public wxOutputStream -{ -public: - wxTempFileOutputStream(const wxString& fileName); - virtual ~wxTempFileOutputStream(); - - bool Close() { return Commit(); } - virtual bool Commit() { return m_file->Commit(); } - virtual void Discard() { m_file->Discard(); } - - wxFileOffset GetLength() const { return m_file->Length(); } - bool IsSeekable() const { return true; } - -protected: - size_t OnSysWrite(const void *buffer, size_t size); - wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode) - { return m_file->Seek(pos, mode); } - wxFileOffset OnSysTell() const { return m_file->Tell(); } - -private: - wxTempFile *m_file; - - DECLARE_NO_COPY_CLASS(wxTempFileOutputStream) -}; - -class WXDLLIMPEXP_BASE wxFileStream : public wxFileInputStream, - public wxFileOutputStream -{ -public: - wxFileStream(const wxString& fileName); - -private: - DECLARE_NO_COPY_CLASS(wxFileStream) -}; - -#endif //wxUSE_FILE - -#if wxUSE_FFILE - -// ---------------------------------------------------------------------------- -// wxFFileStream using wxFFile -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxFFileInputStream : public wxInputStream -{ -public: - wxFFileInputStream(const wxString& fileName, const wxChar *mode = _T("rb")); - wxFFileInputStream(wxFFile& file); - wxFFileInputStream(FILE *file); - virtual ~wxFFileInputStream(); - - wxFileOffset GetLength() const; - - bool Ok() const { return IsOk(); } - virtual bool IsOk() const; - bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } - -protected: - wxFFileInputStream(); - - size_t OnSysRead(void *buffer, size_t size); - wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); - wxFileOffset OnSysTell() const; - -protected: - wxFFile *m_file; - bool m_file_destroy; - - DECLARE_NO_COPY_CLASS(wxFFileInputStream) -}; - -class WXDLLIMPEXP_BASE wxFFileOutputStream : public wxOutputStream -{ -public: - wxFFileOutputStream(const wxString& fileName, const wxChar *mode = _T("w+b")); - wxFFileOutputStream(wxFFile& file); - wxFFileOutputStream(FILE *file); - virtual ~wxFFileOutputStream(); - - void Sync(); - bool Close() { return m_file_destroy ? m_file->Close() : true; } - wxFileOffset GetLength() const; - - bool Ok() const { return IsOk(); } - virtual bool IsOk() const ; - bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } - -protected: - wxFFileOutputStream(); - - size_t OnSysWrite(const void *buffer, size_t size); - wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); - wxFileOffset OnSysTell() const; - -protected: - wxFFile *m_file; - bool m_file_destroy; - - DECLARE_NO_COPY_CLASS(wxFFileOutputStream) -}; - -class WXDLLIMPEXP_BASE wxFFileStream : public wxFFileInputStream, - public wxFFileOutputStream -{ -public: - wxFFileStream(const wxString& fileName); - -private: - DECLARE_NO_COPY_CLASS(wxFFileStream) -}; - -#endif //wxUSE_FFILE - -#endif // wxUSE_STREAMS - -#endif // _WX_WXFSTREAM_H__ diff --git a/desmume/src/windows/wx/include/wx/window.h b/desmume/src/windows/wx/include/wx/window.h deleted file mode 100644 index 54dc38d89..000000000 --- a/desmume/src/windows/wx/include/wx/window.h +++ /dev/null @@ -1,1671 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/window.h -// Purpose: wxWindowBase class - the interface of wxWindow -// Author: Vadim Zeitlin -// Modified by: Ron Lee -// Created: 01/02/97 -// RCS-ID: $Id: window.h 56758 2008-11-13 22:32:21Z VS $ -// Copyright: (c) Vadim Zeitlin -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WINDOW_H_BASE_ -#define _WX_WINDOW_H_BASE_ - -// ---------------------------------------------------------------------------- -// headers which we must include here -// ---------------------------------------------------------------------------- - -#include "wx/event.h" // the base class - -#include "wx/list.h" // defines wxWindowList - -#include "wx/cursor.h" // we have member variables of these classes -#include "wx/font.h" // so we can't do without them -#include "wx/colour.h" -#include "wx/region.h" -#include "wx/utils.h" -#include "wx/intl.h" - -#include "wx/validate.h" // for wxDefaultValidator (always include it) - -#if wxUSE_PALETTE - #include "wx/palette.h" -#endif // wxUSE_PALETTE - -#if wxUSE_ACCEL - #include "wx/accel.h" -#endif // wxUSE_ACCEL - -#if wxUSE_ACCESSIBILITY -#include "wx/access.h" -#endif - -// when building wxUniv/Foo we don't want the code for native menu use to be -// compiled in - it should only be used when building real wxFoo -#ifdef __WXUNIVERSAL__ - #define wxUSE_MENUS_NATIVE 0 -#else // !__WXUNIVERSAL__ - #define wxUSE_MENUS_NATIVE wxUSE_MENUS -#endif // __WXUNIVERSAL__/!__WXUNIVERSAL__ - -// ---------------------------------------------------------------------------- -// forward declarations -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_FWD_CORE wxCaret; -class WXDLLIMPEXP_FWD_CORE wxControl; -class WXDLLIMPEXP_FWD_CORE wxCursor; -class WXDLLIMPEXP_FWD_CORE wxDC; -class WXDLLIMPEXP_FWD_CORE wxDropTarget; -class WXDLLIMPEXP_FWD_CORE wxItemResource; -class WXDLLIMPEXP_FWD_CORE wxLayoutConstraints; -class WXDLLIMPEXP_FWD_CORE wxResourceTable; -class WXDLLIMPEXP_FWD_CORE wxSizer; -class WXDLLIMPEXP_FWD_CORE wxToolTip; -class WXDLLIMPEXP_FWD_CORE wxWindowBase; -class WXDLLIMPEXP_FWD_CORE wxWindow; -class WXDLLIMPEXP_FWD_CORE wxScrollHelper; - -#if wxUSE_ACCESSIBILITY -class WXDLLIMPEXP_FWD_CORE wxAccessible; -#endif - -// ---------------------------------------------------------------------------- -// helper stuff used by wxWindow -// ---------------------------------------------------------------------------- - -// struct containing all the visual attributes of a control -struct WXDLLEXPORT wxVisualAttributes -{ - // the font used for control label/text inside it - wxFont font; - - // the foreground colour - wxColour colFg; - - // the background colour, may be wxNullColour if the controls background - // colour is not solid - wxColour colBg; -}; - -// different window variants, on platforms like eg mac uses different -// rendering sizes -enum wxWindowVariant -{ - wxWINDOW_VARIANT_NORMAL, // Normal size - wxWINDOW_VARIANT_SMALL, // Smaller size (about 25 % smaller than normal) - wxWINDOW_VARIANT_MINI, // Mini size (about 33 % smaller than normal) - wxWINDOW_VARIANT_LARGE, // Large size (about 25 % larger than normal) - wxWINDOW_VARIANT_MAX -}; - -#if wxUSE_SYSTEM_OPTIONS - #define wxWINDOW_DEFAULT_VARIANT wxT("window-default-variant") -#endif - -// ---------------------------------------------------------------------------- -// (pseudo)template list classes -// ---------------------------------------------------------------------------- - -WX_DECLARE_LIST_3(wxWindow, wxWindowBase, wxWindowList, wxWindowListNode, class WXDLLEXPORT); - -// ---------------------------------------------------------------------------- -// global variables -// ---------------------------------------------------------------------------- - -extern WXDLLEXPORT_DATA(wxWindowList) wxTopLevelWindows; -extern WXDLLIMPEXP_DATA_CORE(wxList) wxPendingDelete; - -// ---------------------------------------------------------------------------- -// wxWindowBase is the base class for all GUI controls/widgets, this is the public -// interface of this class. -// -// Event handler: windows have themselves as their event handlers by default, -// but their event handlers could be set to another object entirely. This -// separation can reduce the amount of derivation required, and allow -// alteration of a window's functionality (e.g. by a resource editor that -// temporarily switches event handlers). -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxWindowBase : public wxEvtHandler -{ -public: - // creating the window - // ------------------- - - // default ctor, initializes everything which can be initialized before - // Create() - wxWindowBase() ; - - // pseudo ctor (can't be virtual, called from ctor) - bool CreateBase(wxWindowBase *parent, - wxWindowID winid, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxPanelNameStr); - - virtual ~wxWindowBase(); - - // deleting the window - // ------------------- - - // ask the window to close itself, return true if the event handler - // honoured our request - bool Close( bool force = false ); - - // the following functions delete the C++ objects (the window itself - // or its children) as well as the GUI windows and normally should - // never be used directly - - // delete window unconditionally (dangerous!), returns true if ok - virtual bool Destroy(); - // delete all children of this window, returns true if ok - bool DestroyChildren(); - - // is the window being deleted? - bool IsBeingDeleted() const { return m_isBeingDeleted; } - - // window attributes - // ----------------- - - // label is just the same as the title (but for, e.g., buttons it - // makes more sense to speak about labels), title access - // is available from wxTLW classes only (frames, dialogs) - virtual void SetLabel(const wxString& label) = 0; - virtual wxString GetLabel() const = 0; - - // the window name is used for ressource setting in X, it is not the - // same as the window title/label - virtual void SetName( const wxString &name ) { m_windowName = name; } - virtual wxString GetName() const { return m_windowName; } - - // sets the window variant, calls internally DoSetVariant if variant - // has changed - void SetWindowVariant(wxWindowVariant variant); - wxWindowVariant GetWindowVariant() const { return m_windowVariant; } - - - // window id uniquely identifies the window among its siblings unless - // it is wxID_ANY which means "don't care" - void SetId( wxWindowID winid ) { m_windowId = winid; } - wxWindowID GetId() const { return m_windowId; } - - // get or change the layout direction (LTR or RTL) for this window, - // wxLayout_Default is returned if layout direction is not supported - virtual wxLayoutDirection GetLayoutDirection() const - { return wxLayout_Default; } - virtual void SetLayoutDirection(wxLayoutDirection WXUNUSED(dir)) - { } - - // mirror coordinates for RTL layout if this window uses it and if the - // mirroring is not done automatically like Win32 - virtual wxCoord AdjustForLayoutDirection(wxCoord x, - wxCoord width, - wxCoord widthTotal) const; - - // generate a control id for the controls which were not given one by - // user - static int NewControlId() { return --ms_lastControlId; } - // get the id of the control following the one with the given - // (autogenerated) id - static int NextControlId(int winid) { return winid - 1; } - // get the id of the control preceding the one with the given - // (autogenerated) id - static int PrevControlId(int winid) { return winid + 1; } - - // moving/resizing - // --------------- - - // set the window size and/or position - void SetSize( int x, int y, int width, int height, - int sizeFlags = wxSIZE_AUTO ) - { DoSetSize(x, y, width, height, sizeFlags); } - - void SetSize( int width, int height ) - { DoSetSize( wxDefaultCoord, wxDefaultCoord, width, height, wxSIZE_USE_EXISTING ); } - - void SetSize( const wxSize& size ) - { SetSize( size.x, size.y); } - - void SetSize(const wxRect& rect, int sizeFlags = wxSIZE_AUTO) - { DoSetSize(rect.x, rect.y, rect.width, rect.height, sizeFlags); } - - void Move(int x, int y, int flags = wxSIZE_USE_EXISTING) - { DoSetSize(x, y, wxDefaultCoord, wxDefaultCoord, flags); } - - void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING) - { Move(pt.x, pt.y, flags); } - - void SetPosition(const wxPoint& pt) { Move(pt); } - - // Z-order - virtual void Raise() = 0; - virtual void Lower() = 0; - - // client size is the size of area available for subwindows - void SetClientSize( int width, int height ) - { DoSetClientSize(width, height); } - - void SetClientSize( const wxSize& size ) - { DoSetClientSize(size.x, size.y); } - - void SetClientSize(const wxRect& rect) - { SetClientSize( rect.width, rect.height ); } - - // get the window position (pointers may be NULL): notice that it is in - // client coordinates for child windows and screen coordinates for the - // top level ones, use GetScreenPosition() if you need screen - // coordinates for all kinds of windows - void GetPosition( int *x, int *y ) const { DoGetPosition(x, y); } - wxPoint GetPosition() const - { - int x, y; - DoGetPosition(&x, &y); - - return wxPoint(x, y); - } - - // get the window position in screen coordinates - void GetScreenPosition(int *x, int *y) const { DoGetScreenPosition(x, y); } - wxPoint GetScreenPosition() const - { - int x, y; - DoGetScreenPosition(&x, &y); - - return wxPoint(x, y); - } - - // get the window size (pointers may be NULL) - void GetSize( int *w, int *h ) const { DoGetSize(w, h); } - wxSize GetSize() const - { - int w, h; - DoGetSize(& w, & h); - return wxSize(w, h); - } - - void GetClientSize( int *w, int *h ) const { DoGetClientSize(w, h); } - wxSize GetClientSize() const - { - int w, h; - DoGetClientSize(&w, &h); - - return wxSize(w, h); - } - - // get the position and size at once - wxRect GetRect() const - { - int x, y, w, h; - GetPosition(&x, &y); - GetSize(&w, &h); - - return wxRect(x, y, w, h); - } - - wxRect GetScreenRect() const - { - int x, y, w, h; - GetScreenPosition(&x, &y); - GetSize(&w, &h); - - return wxRect(x, y, w, h); - } - - // get the origin of the client area of the window relative to the - // window top left corner (the client area may be shifted because of - // the borders, scrollbars, other decorations...) - virtual wxPoint GetClientAreaOrigin() const; - - // get the client rectangle in window (i.e. client) coordinates - wxRect GetClientRect() const - { - return wxRect(GetClientAreaOrigin(), GetClientSize()); - } - -#if wxABI_VERSION >= 20808 - // client<->window size conversion - wxSize ClientToWindowSize(const wxSize& size) const; - wxSize WindowToClientSize(const wxSize& size) const; -#endif - - // get the size best suited for the window (in fact, minimal - // acceptable size using which it will still look "nice" in - // most situations) - wxSize GetBestSize() const - { - if (m_bestSizeCache.IsFullySpecified()) - return m_bestSizeCache; - return DoGetBestSize(); - } - void GetBestSize(int *w, int *h) const - { - wxSize s = GetBestSize(); - if ( w ) - *w = s.x; - if ( h ) - *h = s.y; - } - - void SetScrollHelper( wxScrollHelper *sh ) { m_scrollHelper = sh; } - wxScrollHelper *GetScrollHelper() { return m_scrollHelper; } - - // reset the cached best size value so it will be recalculated the - // next time it is needed. - void InvalidateBestSize(); - void CacheBestSize(const wxSize& size) const - { wxConstCast(this, wxWindowBase)->m_bestSizeCache = size; } - - - // This function will merge the window's best size into the window's - // minimum size, giving priority to the min size components, and - // returns the results. - wxSize GetEffectiveMinSize() const; - wxDEPRECATED( wxSize GetBestFittingSize() const ); // replaced by GetEffectiveMinSize - wxDEPRECATED( wxSize GetAdjustedMinSize() const ); // replaced by GetEffectiveMinSize - - // A 'Smart' SetSize that will fill in default size values with 'best' - // size. Sets the minsize to what was passed in. - void SetInitialSize(const wxSize& size=wxDefaultSize); - wxDEPRECATED( void SetBestFittingSize(const wxSize& size=wxDefaultSize) ); // replaced by SetInitialSize - - - // the generic centre function - centers the window on parent by` - // default or on screen if it doesn't have parent or - // wxCENTER_ON_SCREEN flag is given - void Centre(int dir = wxBOTH) { DoCentre(dir); } - void Center(int dir = wxBOTH) { DoCentre(dir); } - - // centre with respect to the the parent window - void CentreOnParent(int dir = wxBOTH) { DoCentre(dir); } - void CenterOnParent(int dir = wxBOTH) { CentreOnParent(dir); } - - // set window size to wrap around its children - virtual void Fit(); - - // set virtual size to satisfy children - virtual void FitInside(); - - - // SetSizeHints is actually for setting the size hints - // for the wxTLW for a Window Manager - hence the name - - // and it is therefore overridden in wxTLW to do that. - // In wxWindow(Base), it has (unfortunately) been abused - // to mean the same as SetMinSize() and SetMaxSize(). - - virtual void SetSizeHints( int minW, int minH, - int maxW = wxDefaultCoord, int maxH = wxDefaultCoord, - int incW = wxDefaultCoord, int incH = wxDefaultCoord ) - { DoSetSizeHints(minW, minH, maxW, maxH, incW, incH); } - - void SetSizeHints( const wxSize& minSize, - const wxSize& maxSize=wxDefaultSize, - const wxSize& incSize=wxDefaultSize) - { DoSetSizeHints(minSize.x, minSize.y, maxSize.x, maxSize.y, incSize.x, incSize.y); } - - virtual void DoSetSizeHints( int minW, int minH, - int maxW, int maxH, - int incW, int incH ); - - // Methods for setting virtual size hints - // FIXME: What are virtual size hints? - - virtual void SetVirtualSizeHints( int minW, int minH, - int maxW = wxDefaultCoord, int maxH = wxDefaultCoord ); - void SetVirtualSizeHints( const wxSize& minSize, - const wxSize& maxSize=wxDefaultSize) - { - SetVirtualSizeHints(minSize.x, minSize.y, maxSize.x, maxSize.y); - } - - - // Call these to override what GetBestSize() returns. This - // method is only virtual because it is overriden in wxTLW - // as a different API for SetSizeHints(). - virtual void SetMinSize(const wxSize& minSize) { m_minWidth = minSize.x; m_minHeight = minSize.y; } - virtual void SetMaxSize(const wxSize& maxSize) { m_maxWidth = maxSize.x; m_maxHeight = maxSize.y; } - - // Override these methods to impose restrictions on min/max size. - // The easier way is to call SetMinSize() and SetMaxSize() which - // will have the same effect. Doing both is non-sense. - virtual wxSize GetMinSize() const { return wxSize(m_minWidth, m_minHeight); } - virtual wxSize GetMaxSize() const { return wxSize(m_maxWidth, m_maxHeight); } - - // Get the min and max values one by one - int GetMinWidth() const { return GetMinSize().x; } - int GetMinHeight() const { return GetMinSize().y; } - int GetMaxWidth() const { return GetMaxSize().x; } - int GetMaxHeight() const { return GetMaxSize().y; } - - - // Methods for accessing the virtual size of a window. For most - // 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. - - void SetVirtualSize( const wxSize &size ) { DoSetVirtualSize( size.x, size.y ); } - void SetVirtualSize( int x, int y ) { DoSetVirtualSize( x, y ); } - - wxSize GetVirtualSize() const { return DoGetVirtualSize(); } - void GetVirtualSize( int *x, int *y ) const - { - wxSize s( DoGetVirtualSize() ); - - if( x ) - *x = s.GetWidth(); - if( y ) - *y = s.GetHeight(); - } - - // Override these methods for windows that have a virtual size - // independent of their client size. eg. the virtual area of a - // wxScrolledWindow. - - virtual void DoSetVirtualSize( int x, int y ); - virtual wxSize DoGetVirtualSize() const; - - // Return the largest of ClientSize and BestSize (as determined - // by a sizer, interior children, or other means) - - virtual wxSize GetBestVirtualSize() const - { - wxSize client( GetClientSize() ); - wxSize best( GetBestSize() ); - - return wxSize( wxMax( client.x, best.x ), wxMax( client.y, best.y ) ); - } - - // return the size of the left/right and top/bottom borders in x and y - // components of the result respectively - virtual wxSize GetWindowBorderSize() const; - - - // window state - // ------------ - - // returns true if window was shown/hidden, false if the nothing was - // done (window was already shown/hidden) - virtual bool Show( bool show = true ); - bool Hide() { return Show(false); } - - // returns true if window was enabled/disabled, false if nothing done - virtual bool Enable( bool enable = true ); - bool Disable() { return Enable(false); } - - virtual bool IsShown() const { return m_isShown; } - virtual bool IsEnabled() const { return m_isEnabled; } - - // returns true if the window is visible, i.e. IsShown() returns true - // if called on it and all its parents up to the first TLW - virtual bool IsShownOnScreen() const; - - // get/set window style (setting style won't update the window and so - // is only useful for internal usage) - virtual void SetWindowStyleFlag( long style ) { m_windowStyle = style; } - virtual long GetWindowStyleFlag() const { return m_windowStyle; } - - // just some (somewhat shorter) synonims - void SetWindowStyle( long style ) { SetWindowStyleFlag(style); } - long GetWindowStyle() const { return GetWindowStyleFlag(); } - - // check if the flag is set - bool HasFlag(int flag) const { return (m_windowStyle & flag) != 0; } - virtual bool IsRetained() const { return HasFlag(wxRETAINED); } - - // turn the flag on if it had been turned off before and vice versa, - // return true if the flag is currently turned on - bool ToggleWindowStyle(int flag); - - // extra style: the less often used style bits which can't be set with - // SetWindowStyleFlag() - virtual void SetExtraStyle(long exStyle) { m_exStyle = exStyle; } - long GetExtraStyle() const { return m_exStyle; } - - // make the window modal (all other windows unresponsive) - virtual void MakeModal(bool modal = true); - - - // (primitive) theming support - // --------------------------- - - virtual void SetThemeEnabled(bool enableTheme) { m_themeEnabled = enableTheme; } - virtual bool GetThemeEnabled() const { return m_themeEnabled; } - - - // focus and keyboard handling - // --------------------------- - - // set focus to this window - virtual void SetFocus() = 0; - - // set focus to this window as the result of a keyboard action - virtual void SetFocusFromKbd() { SetFocus(); } - - // return the window which currently has the focus or NULL - static wxWindow *FindFocus(); - - static wxWindow *DoFindFocus() /* = 0: implement in derived classes */; - - // can this window have focus? - virtual bool AcceptsFocus() const { return IsShown() && IsEnabled(); } - - // can this window be given focus by keyboard navigation? if not, the - // only way to give it focus (provided it accepts it at all) is to - // click it - virtual bool AcceptsFocusFromKeyboard() const { return AcceptsFocus(); } - - // navigates in the specified direction by sending a wxNavigationKeyEvent - virtual bool Navigate(int flags = wxNavigationKeyEvent::IsForward); - - // move this window just before/after the specified one in tab order - // (the other window must be our sibling!) - void MoveBeforeInTabOrder(wxWindow *win) - { DoMoveInTabOrder(win, MoveBefore); } - void MoveAfterInTabOrder(wxWindow *win) - { DoMoveInTabOrder(win, MoveAfter); } - - - // parent/children relations - // ------------------------- - - // get the list of children - const wxWindowList& GetChildren() const { return m_children; } - wxWindowList& GetChildren() { return m_children; } - - // needed just for extended runtime - const wxWindowList& GetWindowChildren() const { return GetChildren() ; } - -#if wxABI_VERSION >= 20808 - // get the window before/after this one in the parents children list, - // returns NULL if this is the first/last window - wxWindow *GetPrevSibling() const { return DoGetSibling(MoveBefore); } - wxWindow *GetNextSibling() const { return DoGetSibling(MoveAfter); } -#endif // wx 2.8.8+ - - // get the parent or the parent of the parent - wxWindow *GetParent() const { return m_parent; } - inline wxWindow *GetGrandParent() const; - - // is this window a top level one? - virtual bool IsTopLevel() const; - - // it doesn't really change parent, use Reparent() instead - void SetParent( wxWindowBase *parent ) { m_parent = (wxWindow *)parent; } - // change the real parent of this window, return true if the parent - // was changed, false otherwise (error or newParent == oldParent) - virtual bool Reparent( wxWindowBase *newParent ); - - // implementation mostly - virtual void AddChild( wxWindowBase *child ); - virtual void RemoveChild( wxWindowBase *child ); - - // looking for windows - // ------------------- - - // find window among the descendants of this one either by id or by - // name (return NULL if not found) - wxWindow *FindWindow(long winid) const; - wxWindow *FindWindow(const wxString& name) const; - - // Find a window among any window (all return NULL if not found) - static wxWindow *FindWindowById( long winid, const wxWindow *parent = NULL ); - static wxWindow *FindWindowByName( const wxString& name, - const wxWindow *parent = NULL ); - static wxWindow *FindWindowByLabel( const wxString& label, - const wxWindow *parent = NULL ); - - // event handler stuff - // ------------------- - - // get the current event handler - wxEvtHandler *GetEventHandler() const { return m_eventHandler; } - - // replace the event handler (allows to completely subclass the - // window) - void SetEventHandler( wxEvtHandler *handler ) { m_eventHandler = handler; } - - // push/pop event handler: allows to chain a custom event handler to - // alreasy existing ones - void PushEventHandler( wxEvtHandler *handler ); - wxEvtHandler *PopEventHandler( bool deleteHandler = false ); - - // find the given handler in the event handler chain and remove (but - // not delete) it from the event handler chain, return true if it was - // found and false otherwise (this also results in an assert failure so - // this function should only be called when the handler is supposed to - // be there) - bool RemoveEventHandler(wxEvtHandler *handler); - - // validators - // ---------- - -#if wxUSE_VALIDATORS - // a window may have an associated validator which is used to control - // user input - virtual void SetValidator( const wxValidator &validator ); - virtual wxValidator *GetValidator() { return m_windowValidator; } -#endif // wxUSE_VALIDATORS - - - // dialog oriented functions - // ------------------------- - - // validate the correctness of input, return true if ok - virtual bool Validate(); - - // transfer data between internal and GUI representations - virtual bool TransferDataToWindow(); - virtual bool TransferDataFromWindow(); - - virtual void InitDialog(); - -#if wxUSE_ACCEL - // accelerators - // ------------ - virtual void SetAcceleratorTable( const wxAcceleratorTable& accel ) - { m_acceleratorTable = accel; } - wxAcceleratorTable *GetAcceleratorTable() - { return &m_acceleratorTable; } - -#endif // wxUSE_ACCEL - -#if wxUSE_HOTKEY - // hot keys (system wide accelerators) - // ----------------------------------- - - virtual bool RegisterHotKey(int hotkeyId, int modifiers, int keycode); - virtual bool UnregisterHotKey(int hotkeyId); -#endif // wxUSE_HOTKEY - - - // dialog units translations - // ------------------------- - - wxPoint ConvertPixelsToDialog( const wxPoint& pt ); - wxPoint ConvertDialogToPixels( const wxPoint& pt ); - wxSize ConvertPixelsToDialog( const wxSize& sz ) - { - wxPoint pt(ConvertPixelsToDialog(wxPoint(sz.x, sz.y))); - - return wxSize(pt.x, pt.y); - } - - wxSize ConvertDialogToPixels( const wxSize& sz ) - { - wxPoint pt(ConvertDialogToPixels(wxPoint(sz.x, sz.y))); - - return wxSize(pt.x, pt.y); - } - - // mouse functions - // --------------- - - // move the mouse to the specified position - virtual void WarpPointer(int x, int y) = 0; - - // start or end mouse capture, these functions maintain the stack of - // windows having captured the mouse and after calling ReleaseMouse() - // the mouse is not released but returns to the window which had had - // captured it previously (if any) - void CaptureMouse(); - void ReleaseMouse(); - - // get the window which currently captures the mouse or NULL - static wxWindow *GetCapture(); - - // does this window have the capture? - virtual bool HasCapture() const - { return (wxWindow *)this == GetCapture(); } - - // painting the window - // ------------------- - - // mark the specified rectangle (or the whole window) as "dirty" so it - // will be repainted - virtual void Refresh( bool eraseBackground = true, - const wxRect *rect = (const wxRect *) NULL ) = 0; - - // a less awkward wrapper for Refresh - void RefreshRect(const wxRect& rect, bool eraseBackground = true) - { - Refresh(eraseBackground, &rect); - } - - // repaint all invalid areas of the window immediately - virtual void Update() { } - - // clear the window background - virtual void ClearBackground(); - - // freeze the window: don't redraw it until it is thawed - virtual void Freeze() { } - - // thaw the window: redraw it after it had been frozen - virtual void Thaw() { } - - // return true if window had been frozen and not unthawed yet - virtual bool IsFrozen() const { return false; } - - // adjust DC for drawing on this window - virtual void PrepareDC( wxDC & WXUNUSED(dc) ) { } - - // return true if the window contents is double buffered by the system - virtual bool IsDoubleBuffered() const { return false; } - - // the update region of the window contains the areas which must be - // repainted by the program - const wxRegion& GetUpdateRegion() const { return m_updateRegion; } - wxRegion& GetUpdateRegion() { return m_updateRegion; } - - // get the update rectangleregion bounding box in client coords - wxRect GetUpdateClientRect() const; - - // these functions verify whether the given point/rectangle belongs to - // (or at least intersects with) the update region - virtual bool DoIsExposed( int x, int y ) const; - virtual bool DoIsExposed( int x, int y, int w, int h ) const; - - bool IsExposed( int x, int y ) const - { return DoIsExposed(x, y); } - bool IsExposed( int x, int y, int w, int h ) const - { return DoIsExposed(x, y, w, h); } - bool IsExposed( const wxPoint& pt ) const - { return DoIsExposed(pt.x, pt.y); } - bool IsExposed( const wxRect& rect ) const - { return DoIsExposed(rect.x, rect.y, rect.width, rect.height); } - - // colours, fonts and cursors - // -------------------------- - - // get the default attributes for the controls of this class: we - // provide a virtual function which can be used to query the default - // attributes of an existing control and a static function which can - // be used even when no existing object of the given class is - // available, but which won't return any styles specific to this - // particular control, of course (e.g. "Ok" button might have - // different -- bold for example -- font) - virtual wxVisualAttributes GetDefaultAttributes() const - { - return GetClassDefaultAttributes(GetWindowVariant()); - } - - static wxVisualAttributes - GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); - - // set/retrieve the window colours (system defaults are used by - // default): SetXXX() functions return true if colour was changed, - // SetDefaultXXX() reset the "m_inheritXXX" flag after setting the - // value to prevent it from being inherited by our children - virtual bool SetBackgroundColour(const wxColour& colour); - void SetOwnBackgroundColour(const wxColour& colour) - { - if ( SetBackgroundColour(colour) ) - m_inheritBgCol = false; - } - wxColour GetBackgroundColour() const; - bool InheritsBackgroundColour() const - { - return m_inheritBgCol; - } - bool UseBgCol() const - { - return m_hasBgCol; - } - - virtual bool SetForegroundColour(const wxColour& colour); - void SetOwnForegroundColour(const wxColour& colour) - { - if ( SetForegroundColour(colour) ) - m_inheritFgCol = false; - } - wxColour GetForegroundColour() const; - - // Set/get the background style. - // Pass one of wxBG_STYLE_SYSTEM, wxBG_STYLE_COLOUR, wxBG_STYLE_CUSTOM - virtual bool SetBackgroundStyle(wxBackgroundStyle style) { m_backgroundStyle = style; return true; } - virtual wxBackgroundStyle GetBackgroundStyle() const { return m_backgroundStyle; } - - // returns true if the control has "transparent" areas such as a - // wxStaticText and wxCheckBox and the background should be adapted - // from a parent window - virtual bool HasTransparentBackground() { return false; } - - // set/retrieve the font for the window (SetFont() returns true if the - // font really changed) - virtual bool SetFont(const wxFont& font) = 0; - void SetOwnFont(const wxFont& font) - { - if ( SetFont(font) ) - m_inheritFont = false; - } - wxFont GetFont() const; - - // set/retrieve the cursor for this window (SetCursor() returns true - // if the cursor was really changed) - virtual bool SetCursor( const wxCursor &cursor ); - const wxCursor& GetCursor() const { return m_cursor; } - -#if wxUSE_CARET - // associate a caret with the window - void SetCaret(wxCaret *caret); - // get the current caret (may be NULL) - wxCaret *GetCaret() const { return m_caret; } -#endif // wxUSE_CARET - - // get the (average) character size for the current font - virtual int GetCharHeight() const = 0; - virtual int GetCharWidth() const = 0; - - // get the width/height/... of the text using current or specified - // font - virtual void GetTextExtent(const wxString& string, - int *x, int *y, - int *descent = (int *) NULL, - int *externalLeading = (int *) NULL, - const wxFont *theFont = (const wxFont *) NULL) - const = 0; - - // client <-> screen coords - // ------------------------ - - // translate to/from screen/client coordinates (pointers may be NULL) - void ClientToScreen( int *x, int *y ) const - { DoClientToScreen(x, y); } - void ScreenToClient( int *x, int *y ) const - { DoScreenToClient(x, y); } - - // wxPoint interface to do the same thing - wxPoint ClientToScreen(const wxPoint& pt) const - { - int x = pt.x, y = pt.y; - DoClientToScreen(&x, &y); - - return wxPoint(x, y); - } - - wxPoint ScreenToClient(const wxPoint& pt) const - { - int x = pt.x, y = pt.y; - DoScreenToClient(&x, &y); - - return wxPoint(x, y); - } - - // test where the given (in client coords) point lies - wxHitTest HitTest(wxCoord x, wxCoord y) const - { return DoHitTest(x, y); } - - wxHitTest HitTest(const wxPoint& pt) const - { return DoHitTest(pt.x, pt.y); } - - // misc - // ---- - - // get the window border style from the given flags: this is different from - // simply doing flags & wxBORDER_MASK because it uses GetDefaultBorder() to - // translate wxBORDER_DEFAULT to something reasonable - wxBorder GetBorder(long flags) const; - - // get border for the flags of this window - wxBorder GetBorder() const { return GetBorder(GetWindowStyleFlag()); } - - // send wxUpdateUIEvents to this window, and children if recurse is true - virtual void UpdateWindowUI(long flags = wxUPDATE_UI_NONE); - - // do the window-specific processing after processing the update event - virtual void DoUpdateWindowUI(wxUpdateUIEvent& event) ; - -#if wxUSE_MENUS - bool PopupMenu(wxMenu *menu, const wxPoint& pos = wxDefaultPosition) - { return DoPopupMenu(menu, pos.x, pos.y); } - bool PopupMenu(wxMenu *menu, int x, int y) - { return DoPopupMenu(menu, x, y); } -#endif // wxUSE_MENUS - - // override this method to return true for controls having multiple pages - virtual bool HasMultiplePages() const { return false; } - - - // scrollbars - // ---------- - - // does the window have the scrollbar for this orientation? - bool HasScrollbar(int orient) const - { - return (m_windowStyle & - (orient == wxHORIZONTAL ? wxHSCROLL : wxVSCROLL)) != 0; - } - - // configure the window scrollbars - virtual void SetScrollbar( int orient, - int pos, - int thumbvisible, - int range, - bool refresh = true ) = 0; - virtual void SetScrollPos( int orient, int pos, bool refresh = true ) = 0; - virtual int GetScrollPos( int orient ) const = 0; - virtual int GetScrollThumb( int orient ) const = 0; - virtual int GetScrollRange( int orient ) const = 0; - - // scroll window to the specified position - virtual void ScrollWindow( int dx, int dy, - const wxRect* rect = (wxRect *) NULL ) = 0; - - // scrolls window by line/page: note that not all controls support this - // - // return true if the position changed, false otherwise - virtual bool ScrollLines(int WXUNUSED(lines)) { return false; } - virtual bool ScrollPages(int WXUNUSED(pages)) { return false; } - - // convenient wrappers for ScrollLines/Pages - bool LineUp() { return ScrollLines(-1); } - bool LineDown() { return ScrollLines(1); } - bool PageUp() { return ScrollPages(-1); } - bool PageDown() { return ScrollPages(1); } - - // context-sensitive help - // ---------------------- - - // these are the convenience functions wrapping wxHelpProvider methods - -#if wxUSE_HELP - // associate this help text with this window - void SetHelpText(const wxString& text); - // associate this help text with all windows with the same id as this - // one - void SetHelpTextForId(const wxString& text); - // get the help string associated with the given position in this window - // - // notice that pt may be invalid if event origin is keyboard or unknown - // and this method should return the global window help text then - virtual wxString GetHelpTextAtPoint(const wxPoint& pt, - wxHelpEvent::Origin origin) const; - // returns the position-independent help text - wxString GetHelpText() const - { - return GetHelpTextAtPoint(wxDefaultPosition, wxHelpEvent::Origin_Unknown); - } - -#else // !wxUSE_HELP - // silently ignore SetHelpText() calls - void SetHelpText(const wxString& WXUNUSED(text)) { } - void SetHelpTextForId(const wxString& WXUNUSED(text)) { } -#endif // wxUSE_HELP - - // tooltips - // -------- - -#if wxUSE_TOOLTIPS - // the easiest way to set a tooltip for a window is to use this method - void SetToolTip( const wxString &tip ); - // attach a tooltip to the window - void SetToolTip( wxToolTip *tip ) { DoSetToolTip(tip); } -#if wxABI_VERSION >= 20809 - // more readable synonym for SetToolTip(NULL) - void UnsetToolTip() { SetToolTip(NULL); } -#endif // wxABI_VERSION >= 2.8.9 - // get the associated tooltip or NULL if none - wxToolTip* GetToolTip() const { return m_tooltip; } - wxString GetToolTipText() const ; -#else // !wxUSE_TOOLTIPS - // make it much easier to compile apps in an environment - // that doesn't support tooltips, such as PocketPC - void SetToolTip( const wxString & WXUNUSED(tip) ) {} -#if wxABI_VERSION >= 20809 - void UnsetToolTip() { } -#endif // wxABI_VERSION >= 2.8.9 -#endif // wxUSE_TOOLTIPS/!wxUSE_TOOLTIPS - - // drag and drop - // ------------- -#if wxUSE_DRAG_AND_DROP - // set/retrieve the drop target associated with this window (may be - // NULL; it's owned by the window and will be deleted by it) - virtual void SetDropTarget( wxDropTarget *dropTarget ) = 0; - virtual wxDropTarget *GetDropTarget() const { return m_dropTarget; } - -#ifndef __WXMSW__ // MSW version is in msw/window.h -#if wxABI_VERSION >= 20810 - // Accept files for dragging - void DragAcceptFiles(bool accept); -#endif // wxABI_VERSION >= 20810 -#endif // !__WXMSW__ - -#endif // wxUSE_DRAG_AND_DROP - - // constraints and sizers - // ---------------------- -#if wxUSE_CONSTRAINTS - // set the constraints for this window or retrieve them (may be NULL) - void SetConstraints( wxLayoutConstraints *constraints ); - wxLayoutConstraints *GetConstraints() const { return m_constraints; } - - // implementation only - void UnsetConstraints(wxLayoutConstraints *c); - wxWindowList *GetConstraintsInvolvedIn() const - { return m_constraintsInvolvedIn; } - void AddConstraintReference(wxWindowBase *otherWin); - void RemoveConstraintReference(wxWindowBase *otherWin); - void DeleteRelatedConstraints(); - void ResetConstraints(); - - // these methods may be overridden for special layout algorithms - virtual void SetConstraintSizes(bool recurse = true); - virtual bool LayoutPhase1(int *noChanges); - virtual bool LayoutPhase2(int *noChanges); - virtual bool DoPhase(int phase); - - // these methods are virtual but normally won't be overridden - virtual void SetSizeConstraint(int x, int y, int w, int h); - virtual void MoveConstraint(int x, int y); - virtual void GetSizeConstraint(int *w, int *h) const ; - virtual void GetClientSizeConstraint(int *w, int *h) const ; - virtual void GetPositionConstraint(int *x, int *y) const ; - -#endif // wxUSE_CONSTRAINTS - - // when using constraints or sizers, it makes sense to update - // children positions automatically whenever the window is resized - // - this is done if autoLayout is on - void SetAutoLayout( bool autoLayout ) { m_autoLayout = autoLayout; } - bool GetAutoLayout() const { return m_autoLayout; } - - // lay out the window and its children - virtual bool Layout(); - - // sizers - void SetSizer(wxSizer *sizer, bool deleteOld = true ); - void SetSizerAndFit( wxSizer *sizer, bool deleteOld = true ); - - wxSizer *GetSizer() const { return m_windowSizer; } - - // Track if this window is a member of a sizer - void SetContainingSizer(wxSizer* sizer); - wxSizer *GetContainingSizer() const { return m_containingSizer; } - - // accessibility - // ---------------------- -#if wxUSE_ACCESSIBILITY - // Override to create a specific accessible object. - virtual wxAccessible* CreateAccessible(); - - // Sets the accessible object. - void SetAccessible(wxAccessible* accessible) ; - - // Returns the accessible object. - wxAccessible* GetAccessible() { return m_accessible; } - - // Returns the accessible object, creating if necessary. - wxAccessible* GetOrCreateAccessible() ; -#endif - - - // Set window transparency if the platform supports it - virtual bool SetTransparent(wxByte WXUNUSED(alpha)) { return false; } - virtual bool CanSetTransparent() { return false; } - - - // implementation - // -------------- - - // event handlers - void OnSysColourChanged( wxSysColourChangedEvent& event ); - void OnInitDialog( wxInitDialogEvent &event ); - void OnMiddleClick( wxMouseEvent& event ); -#if wxUSE_HELP - void OnHelp(wxHelpEvent& event); -#endif // wxUSE_HELP - - // virtual function for implementing internal idle - // behaviour - virtual void OnInternalIdle() {} - - // call internal idle recursively -// void ProcessInternalIdle() ; - - // get the handle of the window for the underlying window system: this - // is only used for wxWin itself or for user code which wants to call - // platform-specific APIs - virtual WXWidget GetHandle() const = 0; - // associate the window with a new native handle - virtual void AssociateHandle(WXWidget WXUNUSED(handle)) { } - // dissociate the current native handle from the window - virtual void DissociateHandle() { } - -#if wxUSE_PALETTE - // Store the palette used by DCs in wxWindow so that the dcs can share - // a palette. And we can respond to palette messages. - wxPalette GetPalette() const { return m_palette; } - - // When palette is changed tell the DC to set the system palette to the - // new one. - void SetPalette(const wxPalette& pal); - - // return true if we have a specific palette - bool HasCustomPalette() const { return m_hasCustomPalette; } - - // return the first parent window with a custom palette or NULL - wxWindow *GetAncestorWithCustomPalette() const; -#endif // wxUSE_PALETTE - - // inherit the parents visual attributes if they had been explicitly set - // by the user (i.e. we don't inherit default attributes) and if we don't - // have our own explicitly set - virtual void InheritAttributes(); - - // returns false from here if this window doesn't want to inherit the - // parents colours even if InheritAttributes() would normally do it - // - // this just provides a simple way to customize InheritAttributes() - // behaviour in the most common case - virtual bool ShouldInheritColours() const { return false; } - -protected: - // event handling specific to wxWindow - virtual bool TryValidator(wxEvent& event); - virtual bool TryParent(wxEvent& event); - - enum MoveKind - { - MoveBefore, // insert before the given window - MoveAfter // insert after the given window - }; - -#if wxABI_VERSION >= 20808 - // common part of GetPrev/NextSibling() - wxWindow *DoGetSibling(MoveKind order) const; -#endif // wx 2.8.8+ - - // common part of MoveBefore/AfterInTabOrder() - virtual void DoMoveInTabOrder(wxWindow *win, MoveKind move); - -#if wxUSE_CONSTRAINTS - // satisfy the constraints for the windows but don't set the window sizes - void SatisfyConstraints(); -#endif // wxUSE_CONSTRAINTS - - // Send the wxWindowDestroyEvent - void SendDestroyEvent(); - - // returns the main window of composite control; this is the window - // that FindFocus returns if the focus is in one of composite control's - // windows - virtual wxWindow *GetMainWindowOfCompositeControl() - { return (wxWindow*)this; } - - // the window id - a number which uniquely identifies a window among - // its siblings unless it is wxID_ANY - wxWindowID m_windowId; - - // the parent window of this window (or NULL) and the list of the children - // of this window - wxWindow *m_parent; - wxWindowList m_children; - - // the minimal allowed size for the window (no minimal size if variable(s) - // contain(s) wxDefaultCoord) - int m_minWidth, - m_minHeight, - m_maxWidth, - m_maxHeight; - - // event handler for this window: usually is just 'this' but may be - // changed with SetEventHandler() - wxEvtHandler *m_eventHandler; - -#if wxUSE_VALIDATORS - // associated validator or NULL if none - wxValidator *m_windowValidator; -#endif // wxUSE_VALIDATORS - -#if wxUSE_DRAG_AND_DROP - wxDropTarget *m_dropTarget; -#endif // wxUSE_DRAG_AND_DROP - - // visual window attributes - wxCursor m_cursor; - wxFont m_font; // see m_hasFont - wxColour m_backgroundColour, // m_hasBgCol - m_foregroundColour; // m_hasFgCol - -#if wxUSE_CARET - wxCaret *m_caret; -#endif // wxUSE_CARET - - // the region which should be repainted in response to paint event - wxRegion m_updateRegion; - -#if wxUSE_ACCEL - // the accelerator table for the window which translates key strokes into - // command events - wxAcceleratorTable m_acceleratorTable; -#endif // wxUSE_ACCEL - - // the tooltip for this window (may be NULL) -#if wxUSE_TOOLTIPS - wxToolTip *m_tooltip; -#endif // wxUSE_TOOLTIPS - - // constraints and sizers -#if wxUSE_CONSTRAINTS - // the constraints for this window or NULL - wxLayoutConstraints *m_constraints; - - // constraints this window is involved in - wxWindowList *m_constraintsInvolvedIn; -#endif // wxUSE_CONSTRAINTS - - // this window's sizer - wxSizer *m_windowSizer; - - // The sizer this window is a member of, if any - wxSizer *m_containingSizer; - - // Layout() window automatically when its size changes? - bool m_autoLayout:1; - - // window state - bool m_isShown:1; - bool m_isEnabled:1; - bool m_isBeingDeleted:1; - - // was the window colours/font explicitly changed by user? - bool m_hasBgCol:1; - bool m_hasFgCol:1; - bool m_hasFont:1; - - // and should it be inherited by children? - bool m_inheritBgCol:1; - bool m_inheritFgCol:1; - bool m_inheritFont:1; - - // window attributes - long m_windowStyle, - m_exStyle; - wxString m_windowName; - bool m_themeEnabled; - wxBackgroundStyle m_backgroundStyle; -#if wxUSE_PALETTE - wxPalette m_palette; - bool m_hasCustomPalette; -#endif // wxUSE_PALETTE - -#if wxUSE_ACCESSIBILITY - wxAccessible* m_accessible; -#endif - - // Virtual size (scrolling) - wxSize m_virtualSize; - - wxScrollHelper *m_scrollHelper; - - int m_minVirtualWidth; // VirtualSizeHints - int m_minVirtualHeight; - int m_maxVirtualWidth; - int m_maxVirtualHeight; - - wxWindowVariant m_windowVariant ; - - // override this to change the default (i.e. used when no style is - // specified) border for the window class - virtual wxBorder GetDefaultBorder() const; - - // Get the default size for the new window if no explicit size given. TLWs - // have their own default size so this is just for non top-level windows. - static int WidthDefault(int w) { return w == wxDefaultCoord ? 20 : w; } - static int HeightDefault(int h) { return h == wxDefaultCoord ? 20 : h; } - - - // Used to save the results of DoGetBestSize so it doesn't need to be - // recalculated each time the value is needed. - wxSize m_bestSizeCache; - - wxDEPRECATED( void SetBestSize(const wxSize& size) ); // use SetInitialSize - wxDEPRECATED( virtual void SetInitialBestSize(const wxSize& size) ); // use SetInitialSize - - - - // more pure virtual functions - // --------------------------- - - // NB: we must have DoSomething() function when Something() is an overloaded - // method: indeed, we can't just have "virtual Something()" in case when - // the function is overloaded because then we'd have to make virtual all - // the variants (otherwise only the virtual function may be called on a - // pointer to derived class according to C++ rules) which is, in - // general, absolutely not needed. So instead we implement all - // overloaded Something()s in terms of DoSomething() which will be the - // only one to be virtual. - - // coordinates translation - virtual void DoClientToScreen( int *x, int *y ) const = 0; - virtual void DoScreenToClient( int *x, int *y ) const = 0; - - virtual wxHitTest DoHitTest(wxCoord x, wxCoord y) const; - - // capture/release the mouse, used by Capture/ReleaseMouse() - virtual void DoCaptureMouse() = 0; - virtual void DoReleaseMouse() = 0; - - // retrieve the position/size of the window - virtual void DoGetPosition(int *x, int *y) const = 0; - virtual void DoGetScreenPosition(int *x, int *y) const; - virtual void DoGetSize(int *width, int *height) const = 0; - virtual void DoGetClientSize(int *width, int *height) const = 0; - - // get the size which best suits the window: for a control, it would be - // the minimal size which doesn't truncate the control, for a panel - the - // same size as it would have after a call to Fit() - virtual wxSize DoGetBestSize() const; - - // called from DoGetBestSize() to convert best virtual size (returned by - // the window sizer) to the best size for the window itself; this is - // overridden at wxScrolledWindow level to clump down virtual size to real - virtual wxSize GetWindowSizeForVirtualSize(const wxSize& size) const - { - return size; - } - - // this is the virtual function to be overriden in any derived class which - // wants to change how SetSize() or Move() works - it is called by all - // versions of these functions in the base class - virtual void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO) = 0; - - // same as DoSetSize() for the client size - virtual void DoSetClientSize(int width, int height) = 0; - - // move the window to the specified location and resize it: this is called - // from both DoSetSize() and DoSetClientSize() and would usually just - // reposition this window except for composite controls which will want to - // arrange themselves inside the given rectangle - // - // Important note: the coordinates passed to this method are in parent's - // *window* coordinates and not parent's client coordinates (as the values - // passed to DoSetSize and returned by DoGetPosition are)! - virtual void DoMoveWindow(int x, int y, int width, int height) = 0; - - // centre the window in the specified direction on parent, note that - // wxCENTRE_ON_SCREEN shouldn't be specified here, it only makes sense for - // TLWs - virtual void DoCentre(int dir); - -#if wxUSE_TOOLTIPS - virtual void DoSetToolTip( wxToolTip *tip ); -#endif // wxUSE_TOOLTIPS - -#if wxUSE_MENUS - virtual bool DoPopupMenu(wxMenu *menu, int x, int y) = 0; -#endif // wxUSE_MENUS - - // Makes an adjustment to the window position to make it relative to the - // parents client area, e.g. if the parent is a frame with a toolbar, its - // (0, 0) is just below the toolbar - virtual void AdjustForParentClientOrigin(int& x, int& y, - int sizeFlags = 0) const; - - // implements the window variants - virtual void DoSetWindowVariant( wxWindowVariant variant ) ; - - // Must be called when mouse capture is lost to send - // wxMouseCaptureLostEvent to windows on capture stack. - static void NotifyCaptureLost(); - -private: - // contains the last id generated by NewControlId - static int ms_lastControlId; - - // the stack of windows which have captured the mouse - static struct WXDLLIMPEXP_FWD_CORE wxWindowNext *ms_winCaptureNext; - // the window that currently has mouse capture - static wxWindow *ms_winCaptureCurrent; - // indicates if execution is inside CaptureMouse/ReleaseMouse - static bool ms_winCaptureChanging; - - DECLARE_ABSTRACT_CLASS(wxWindowBase) - DECLARE_NO_COPY_CLASS(wxWindowBase) - DECLARE_EVENT_TABLE() -}; - - - -// Inlines for some deprecated methods -inline wxSize wxWindowBase::GetBestFittingSize() const -{ - return GetEffectiveMinSize(); -} - -inline void wxWindowBase::SetBestFittingSize(const wxSize& size) -{ - SetInitialSize(size); -} - -inline void wxWindowBase::SetBestSize(const wxSize& size) -{ - SetInitialSize(size); -} - -inline void wxWindowBase::SetInitialBestSize(const wxSize& size) -{ - SetInitialSize(size); -} - - -// ---------------------------------------------------------------------------- -// now include the declaration of wxWindow class -// ---------------------------------------------------------------------------- - -// 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__) - #ifdef __WXUNIVERSAL__ - #define wxWindowNative wxWindowMSW - #else // !wxUniv - #define wxWindowMSW wxWindow - #endif // wxUniv/!wxUniv - #include "wx/msw/window.h" -#elif defined(__WXMOTIF__) - #include "wx/motif/window.h" -#elif defined(__WXGTK20__) - #ifdef __WXUNIVERSAL__ - #define wxWindowNative wxWindowGTK - #else // !wxUniv - #define wxWindowGTK wxWindow - #endif // wxUniv - #include "wx/gtk/window.h" -#elif defined(__WXGTK__) - #ifdef __WXUNIVERSAL__ - #define wxWindowNative wxWindowGTK - #else // !wxUniv - #define wxWindowGTK wxWindow - #endif // wxUniv - #include "wx/gtk1/window.h" -#elif defined(__WXX11__) - #ifdef __WXUNIVERSAL__ - #define wxWindowNative wxWindowX11 - #else // !wxUniv - #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" -#elif defined(__WXMAC__) - #ifdef __WXUNIVERSAL__ - #define wxWindowNative wxWindowMac - #else // !wxUniv - #define wxWindowMac wxWindow - #endif // wxUniv - #include "wx/mac/window.h" -#elif defined(__WXCOCOA__) - #ifdef __WXUNIVERSAL__ - #define wxWindowNative wxWindowCocoa - #else // !wxUniv - #define wxWindowCocoa wxWindow - #endif // wxUniv - #include "wx/cocoa/window.h" -#elif defined(__WXPM__) - #ifdef __WXUNIVERSAL__ - #define wxWindowNative wxWindowOS2 - #else // !wxUniv - #define wxWindowOS2 wxWindow - #endif // wxUniv/!wxUniv - #include "wx/os2/window.h" -#endif - -// for wxUniversal, we now derive the real wxWindow from wxWindow<platform>, -// for the native ports we already have defined it above -#if defined(__WXUNIVERSAL__) - #ifndef wxWindowNative - #error "wxWindowNative must be defined above!" - #endif - - #include "wx/univ/window.h" -#endif // wxUniv - -// ---------------------------------------------------------------------------- -// inline functions which couldn't be declared in the class body because of -// forward dependencies -// ---------------------------------------------------------------------------- - -inline wxWindow *wxWindowBase::GetGrandParent() const -{ - return m_parent ? m_parent->GetParent() : (wxWindow *)NULL; -} - -// ---------------------------------------------------------------------------- -// global functions -// ---------------------------------------------------------------------------- - -// Find the wxWindow at the current mouse position, also returning the mouse -// position. -extern WXDLLEXPORT wxWindow* wxFindWindowAtPointer(wxPoint& pt); - -// Get the current mouse position. -extern WXDLLEXPORT wxPoint wxGetMousePosition(); - -// get the currently active window of this application or NULL -extern WXDLLEXPORT wxWindow *wxGetActiveWindow(); - -// get the (first) top level parent window -WXDLLEXPORT wxWindow* wxGetTopLevelParent(wxWindow *win); - -#if WXWIN_COMPATIBILITY_2_6 - // deprecated (doesn't start with 'wx' prefix), use wxWindow::NewControlId() - wxDEPRECATED( int NewControlId() ); - inline int NewControlId() { return wxWindowBase::NewControlId(); } -#endif // WXWIN_COMPATIBILITY_2_6 - -#if wxUSE_ACCESSIBILITY -// ---------------------------------------------------------------------------- -// accessible object for windows -// ---------------------------------------------------------------------------- - -class WXDLLEXPORT wxWindowAccessible: public wxAccessible -{ -public: - wxWindowAccessible(wxWindow* win): wxAccessible(win) { if (win) win->SetAccessible(this); } - virtual ~wxWindowAccessible() {} - -// Overridables - - // Can return either a child object, or an integer - // representing the child element, starting from 1. - virtual wxAccStatus HitTest(const wxPoint& pt, int* childId, wxAccessible** childObject); - - // Returns the rectangle for this object (id = 0) or a child element (id > 0). - virtual wxAccStatus GetLocation(wxRect& rect, int elementId); - - // Navigates from fromId to toId/toObject. - virtual wxAccStatus Navigate(wxNavDir navDir, int fromId, - int* toId, wxAccessible** toObject); - - // Gets the name of the specified object. - virtual wxAccStatus GetName(int childId, wxString* name); - - // Gets the number of children. - virtual wxAccStatus GetChildCount(int* childCount); - - // Gets the specified child (starting from 1). - // If *child is NULL and return value is wxACC_OK, - // this means that the child is a simple element and - // not an accessible object. - virtual wxAccStatus GetChild(int childId, wxAccessible** child); - - // Gets the parent, or NULL. - virtual wxAccStatus GetParent(wxAccessible** parent); - - // Performs the default action. childId is 0 (the action for this object) - // or > 0 (the action for a child). - // Return wxACC_NOT_SUPPORTED if there is no default action for this - // window (e.g. an edit control). - virtual wxAccStatus DoDefaultAction(int childId); - - // Gets the default action for this object (0) or > 0 (the action for a child). - // Return wxACC_OK even if there is no action. actionName is the action, or the empty - // string if there is no action. - // The retrieved string describes the action that is performed on an object, - // not what the object does as a result. For example, a toolbar button that prints - // a document has a default action of "Press" rather than "Prints the current document." - virtual wxAccStatus GetDefaultAction(int childId, wxString* actionName); - - // Returns the description for this object or a child. - virtual wxAccStatus GetDescription(int childId, wxString* description); - - // Returns help text for this object or a child, similar to tooltip text. - virtual wxAccStatus GetHelpText(int childId, wxString* helpText); - - // Returns the keyboard shortcut for this object or child. - // Return e.g. ALT+K - virtual wxAccStatus GetKeyboardShortcut(int childId, wxString* shortcut); - - // Returns a role constant. - virtual wxAccStatus GetRole(int childId, wxAccRole* role); - - // Returns a state constant. - virtual wxAccStatus GetState(int childId, long* state); - - // Returns a localized string representing the value for the object - // or child. - virtual wxAccStatus GetValue(int childId, wxString* strValue); - - // Selects the object or child. - virtual wxAccStatus Select(int childId, wxAccSelectionFlags selectFlags); - - // Gets the window with the keyboard focus. - // If childId is 0 and child is NULL, no object in - // this subhierarchy has the focus. - // If this object has the focus, child should be 'this'. - virtual wxAccStatus GetFocus(int* childId, wxAccessible** child); - -#if wxUSE_VARIANT - // Gets a variant representing the selected children - // of this object. - // Acceptable values: - // - a null variant (IsNull() returns true) - // - a list variant (GetType() == wxT("list") - // - an integer representing the selected child element, - // or 0 if this object is selected (GetType() == wxT("long") - // - a "void*" pointer to a wxAccessible child object - virtual wxAccStatus GetSelections(wxVariant* selections); -#endif // wxUSE_VARIANT -}; - -#endif // wxUSE_ACCESSIBILITY - - -#endif // _WX_WINDOW_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/wizard.h b/desmume/src/windows/wx/include/wx/wizard.h deleted file mode 100644 index e0aa88b2f..000000000 --- a/desmume/src/windows/wx/include/wx/wizard.h +++ /dev/null @@ -1,317 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wizard.h -// Purpose: wxWizard class: a GUI control presenting the user with a -// sequence of dialogs which allows to simply perform some task -// Author: Vadim Zeitlin (partly based on work by Ron Kuris and Kevin B. -// Smith) -// Modified by: Robert Cavanaugh -// Added capability to use .WXR resource files in Wizard pages -// Added wxWIZARD_HELP event -// Robert Vazan (sizers) -// Created: 15.08.99 -// RCS-ID: $Id: wizard.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WIZARD_H_ -#define _WX_WIZARD_H_ - -#include "wx/defs.h" - -#if wxUSE_WIZARDDLG - -// ---------------------------------------------------------------------------- -// headers and other simple declarations -// ---------------------------------------------------------------------------- - -#include "wx/dialog.h" // the base class -#include "wx/panel.h" // ditto -#include "wx/event.h" // wxEVT_XXX constants -#include "wx/bitmap.h" - -// Extended style to specify a help button -#define wxWIZARD_EX_HELPBUTTON 0x00000010 - -// forward declarations -class WXDLLIMPEXP_FWD_ADV wxWizard; - -// ---------------------------------------------------------------------------- -// wxWizardPage is one of the wizards screen: it must know what are the -// following and preceding pages (which may be NULL for the first/last page). -// -// Other than GetNext/Prev() functions, wxWizardPage is just a panel and may be -// used as such (i.e. controls may be placed directly on it &c). -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxWizardPage : public wxPanel -{ -public: - wxWizardPage() { Init(); } - - // ctor accepts an optional bitmap which will be used for this page instead - // of the default one for this wizard (should be of the same size). Notice - // that no other parameters are needed because the wizard will resize and - // reposition the page anyhow - wxWizardPage(wxWizard *parent, - const wxBitmap& bitmap = wxNullBitmap, - const wxChar* resource = NULL); - - bool Create(wxWizard *parent, - const wxBitmap& bitmap = wxNullBitmap, - const wxChar* resource = NULL); - - // these functions are used by the wizard to show another page when the - // user chooses "Back" or "Next" button - virtual wxWizardPage *GetPrev() const = 0; - virtual wxWizardPage *GetNext() const = 0; - - // default GetBitmap() will just return m_bitmap which is ok in 99% of - // cases - override this method if you want to create the bitmap to be used - // dynamically or to do something even more fancy. It's ok to return - // wxNullBitmap from here - the default one will be used then. - virtual wxBitmap GetBitmap() const { return m_bitmap; } - -#if wxUSE_VALIDATORS - // Override the base functions to allow a validator to be assigned to this page. - virtual bool TransferDataToWindow() - { - return GetValidator() ? GetValidator()->TransferToWindow() - : wxPanel::TransferDataToWindow(); - } - - virtual bool TransferDataFromWindow() - { - return GetValidator() ? GetValidator()->TransferFromWindow() - : wxPanel::TransferDataFromWindow(); - } - - virtual bool Validate() - { - return GetValidator() ? GetValidator()->Validate(this) - : wxPanel::Validate(); - } -#endif // wxUSE_VALIDATORS - -protected: - // common part of ctors: - void Init(); - - wxBitmap m_bitmap; - -private: - DECLARE_DYNAMIC_CLASS_NO_COPY(wxWizardPage) -}; - -// ---------------------------------------------------------------------------- -// wxWizardPageSimple just returns the pointers given to the ctor and is useful -// to create a simple wizard where the order of pages never changes. -// -// OTOH, it is also possible to dynamicly decide which page to return (i.e. -// depending on the user's choices) as the wizard sample shows - in order to do -// this, you must derive from wxWizardPage directly. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxWizardPageSimple : public wxWizardPage -{ -public: - wxWizardPageSimple() { Init(); } - - // ctor takes the previous and next pages - wxWizardPageSimple(wxWizard *parent, - wxWizardPage *prev = (wxWizardPage *)NULL, - wxWizardPage *next = (wxWizardPage *)NULL, - const wxBitmap& bitmap = wxNullBitmap, - const wxChar* resource = NULL) - { - Create(parent, prev, next, bitmap, resource); - } - - bool Create(wxWizard *parent = NULL, // let it be default ctor too - wxWizardPage *prev = (wxWizardPage *)NULL, - wxWizardPage *next = (wxWizardPage *)NULL, - const wxBitmap& bitmap = wxNullBitmap, - const wxChar* resource = NULL) - { - m_prev = prev; - m_next = next; - return wxWizardPage::Create(parent, bitmap, resource); - } - - // the pointers may be also set later - but before starting the wizard - void SetPrev(wxWizardPage *prev) { m_prev = prev; } - void SetNext(wxWizardPage *next) { m_next = next; } - - // a convenience function to make the pages follow each other - static void Chain(wxWizardPageSimple *first, wxWizardPageSimple *second) - { - wxCHECK_RET( first && second, - wxT("NULL passed to wxWizardPageSimple::Chain") ); - - first->SetNext(second); - second->SetPrev(first); - } - - // base class pure virtuals - virtual wxWizardPage *GetPrev() const; - virtual wxWizardPage *GetNext() const; - -private: - // common part of ctors: - void Init() - { - m_prev = m_next = NULL; - } - - // pointers are private, the derived classes shouldn't mess with them - - // just derive from wxWizardPage directly to implement different behaviour - wxWizardPage *m_prev, - *m_next; - - DECLARE_DYNAMIC_CLASS_NO_COPY(wxWizardPageSimple) -}; - -// ---------------------------------------------------------------------------- -// wxWizard -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxWizardBase : public wxDialog -{ -public: - /* - The derived class (i.e. the real wxWizard) has a ctor and Create() - function taking the following arguments: - - wxWizard(wxWindow *parent, - int id = wxID_ANY, - const wxString& title = wxEmptyString, - const wxBitmap& bitmap = wxNullBitmap, - const wxPoint& pos = wxDefaultPosition, - long style = wxDEFAULT_DIALOG_STYLE); - */ - wxWizardBase() { } - - // executes the wizard starting from the given page, returns true if it was - // successfully finished, false if user cancelled it - virtual bool RunWizard(wxWizardPage *firstPage) = 0; - - // get the current page (NULL if RunWizard() isn't running) - virtual wxWizardPage *GetCurrentPage() const = 0; - - // set the min size which should be available for the pages: a - // wizard will take into account the size of the bitmap (if any) - // itself and will never be less than some predefined fixed size - virtual void SetPageSize(const wxSize& size) = 0; - - // get the size available for the page - virtual wxSize GetPageSize() const = 0; - - // set the best size for the wizard, i.e. make it big enough to contain all - // of the pages starting from the given one - // - // this function may be called several times and possible with different - // pages in which case it will only increase the page size if needed (this - // may be useful if not all pages are accessible from the first one by - // default) - virtual void FitToPage(const wxWizardPage *firstPage) = 0; - - // Adding pages to page area sizer enlarges wizard - virtual wxSizer *GetPageAreaSizer() const = 0; - - // Set border around page area. Default is 0 if you add at least one - // page to GetPageAreaSizer and 5 if you don't. - virtual void SetBorder(int border) = 0; - - // the methods below may be overridden by the derived classes to provide - // custom logic for determining the pages order - - virtual bool HasNextPage(wxWizardPage *page) - { return page->GetNext() != NULL; } - - virtual bool HasPrevPage(wxWizardPage *page) - { return page->GetPrev() != NULL; } - - /// Override these functions to stop InitDialog from calling TransferDataToWindow - /// for _all_ pages when the wizard starts. Instead 'ShowPage' will call - /// TransferDataToWindow for the first page only. - bool TransferDataToWindow() { return true; } - bool TransferDataFromWindow() { return true; } - bool Validate() { return true; } - -private: - DECLARE_NO_COPY_CLASS(wxWizardBase) -}; - -// include the real class declaration -#include "wx/generic/wizard.h" - -// ---------------------------------------------------------------------------- -// wxWizardEvent class represents an event generated by the wizard: this event -// is first sent to the page itself and, if not processed there, goes up the -// window hierarchy as usual -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_ADV wxWizardEvent : public wxNotifyEvent -{ -public: - wxWizardEvent(wxEventType type = wxEVT_NULL, - int id = wxID_ANY, - bool direction = true, - wxWizardPage* page = NULL); - - // for EVT_WIZARD_PAGE_CHANGING, return true if we're going forward or - // false otherwise and for EVT_WIZARD_PAGE_CHANGED return true if we came - // from the previous page and false if we returned from the next one - // (this function doesn't make sense for CANCEL events) - bool GetDirection() const { return m_direction; } - - wxWizardPage* GetPage() const { return m_page; } - -private: - bool m_direction; - wxWizardPage* m_page; - - DECLARE_DYNAMIC_CLASS(wxWizardEvent) - DECLARE_NO_COPY_CLASS(wxWizardEvent) -}; - -// ---------------------------------------------------------------------------- -// macros for handling wxWizardEvents -// ---------------------------------------------------------------------------- - -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_WIZARD_PAGE_CHANGED, 900) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_WIZARD_PAGE_CHANGING, 901) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_WIZARD_CANCEL, 902) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_WIZARD_HELP, 903) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_WIZARD_FINISHED, 903) -END_DECLARE_EVENT_TYPES() - -typedef void (wxEvtHandler::*wxWizardEventFunction)(wxWizardEvent&); - -#define wxWizardEventHandler(func) \ - (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxWizardEventFunction, &func) - -#define wx__DECLARE_WIZARDEVT(evt, id, fn) \ - wx__DECLARE_EVT1(wxEVT_WIZARD_ ## evt, id, wxWizardEventHandler(fn)) - -// notifies that the page has just been changed (can't be vetoed) -#define EVT_WIZARD_PAGE_CHANGED(id, fn) wx__DECLARE_WIZARDEVT(PAGE_CHANGED, id, fn) - -// the user pressed "<Back" or "Next>" button and the page is going to be -// changed - unless the event handler vetoes the event -#define EVT_WIZARD_PAGE_CHANGING(id, fn) wx__DECLARE_WIZARDEVT(PAGE_CHANGING, 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) - -// the user pressed "Finish" button and the wizard is going to be dismissed - -#define EVT_WIZARD_FINISHED(id, fn) wx__DECLARE_WIZARDEVT(FINISHED, id, fn) - -// the user pressed "Help" button -#define EVT_WIZARD_HELP(id, fn) wx__DECLARE_WIZARDEVT(HELP, id, fn) - -#endif // wxUSE_WIZARDDLG - -#endif // _WX_WIZARD_H_ diff --git a/desmume/src/windows/wx/include/wx/wupdlock.h b/desmume/src/windows/wx/include/wx/wupdlock.h deleted file mode 100644 index 61f6a3909..000000000 --- a/desmume/src/windows/wx/include/wx/wupdlock.h +++ /dev/null @@ -1,37 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Name: wx/wupdlock.h -// Purpose: wxWindowUpdateLocker prevents window redrawing -// Author: Vadim Zeitlin -// Created: 2006-03-06 -// RCS-ID: $Id: wupdlock.h 37842 2006-03-07 01:50:21Z VZ $ -// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org> -// Licence: wxWindows licence -/////////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WUPDLOCK_H_ -#define _WX_WUPDLOCK_H_ - -#include "wx/window.h" - -// ---------------------------------------------------------------------------- -// wxWindowUpdateLocker prevents updates to the window during its lifetime -// ---------------------------------------------------------------------------- - -class wxWindowUpdateLocker -{ -public: - // create an object preventing updates of the given window (which must have - // a lifetime at least as great as ours) - wxWindowUpdateLocker(wxWindow *win) : m_win(win) { win->Freeze(); } - - // dtor thaws the window to permit updates again - ~wxWindowUpdateLocker() { m_win->Thaw(); } - -private: - wxWindow *m_win; - - DECLARE_NO_COPY_CLASS(wxWindowUpdateLocker) -}; - -#endif // _WX_WUPDLOCK_H_ - diff --git a/desmume/src/windows/wx/include/wx/wx.h b/desmume/src/windows/wx/include/wx/wx.h deleted file mode 100644 index 0ad9bcdce..000000000 --- a/desmume/src/windows/wx/include/wx/wx.h +++ /dev/null @@ -1,105 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/wx.h -// Purpose: wxWidgets central header including the most often used ones -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: wx.h 40943 2006-08-31 19:31:43Z ABX $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WX_H_ -#define _WX_WX_H_ - -#include "wx/defs.h" -#include "wx/object.h" -#include "wx/dynarray.h" -#include "wx/list.h" -#include "wx/hash.h" -#include "wx/string.h" -#include "wx/hashmap.h" -#include "wx/arrstr.h" -#include "wx/intl.h" -#include "wx/log.h" -#include "wx/event.h" -#include "wx/app.h" -#include "wx/utils.h" -#include "wx/stream.h" -#include "wx/memory.h" -#include "wx/math.h" -#include "wx/stopwatch.h" -#include "wx/module.h" - -#if wxUSE_GUI - -#include "wx/window.h" -#include "wx/containr.h" -#include "wx/panel.h" -#include "wx/toplevel.h" -#include "wx/frame.h" -#include "wx/gdicmn.h" -#include "wx/gdiobj.h" -#include "wx/region.h" -#include "wx/bitmap.h" -#include "wx/image.h" -#include "wx/colour.h" -#include "wx/font.h" -#include "wx/dc.h" -#include "wx/dcclient.h" -#include "wx/dcmemory.h" -#include "wx/dcprint.h" -#include "wx/dcscreen.h" -#include "wx/button.h" -#include "wx/menuitem.h" -#include "wx/menu.h" -#include "wx/pen.h" -#include "wx/brush.h" -#include "wx/palette.h" -#include "wx/icon.h" -#include "wx/cursor.h" -#include "wx/dialog.h" -#include "wx/timer.h" -#include "wx/settings.h" -#include "wx/msgdlg.h" -#include "wx/cmndata.h" -#include "wx/dataobj.h" - -#include "wx/control.h" -#include "wx/ctrlsub.h" -#include "wx/bmpbuttn.h" -#include "wx/checkbox.h" -#include "wx/checklst.h" -#include "wx/choice.h" -#include "wx/scrolbar.h" -#include "wx/stattext.h" -#include "wx/statbmp.h" -#include "wx/statbox.h" -#include "wx/listbox.h" -#include "wx/radiobox.h" -#include "wx/radiobut.h" -#include "wx/textctrl.h" -#include "wx/slider.h" -#include "wx/gauge.h" -#include "wx/scrolwin.h" -#include "wx/dirdlg.h" -#include "wx/toolbar.h" -#include "wx/combobox.h" -#include "wx/layout.h" -#include "wx/sizer.h" -#include "wx/mdi.h" -#include "wx/statusbr.h" -#include "wx/choicdlg.h" -#include "wx/textdlg.h" -#include "wx/filedlg.h" - -// always include, even if !wxUSE_VALIDATORS because we need wxDefaultValidator -#include "wx/validate.h" - -#if wxUSE_VALIDATORS - #include "wx/valtext.h" -#endif // wxUSE_VALIDATORS - -#endif // wxUSE_GUI - -#endif // _WX_WX_H_ diff --git a/desmume/src/windows/wx/include/wx/wx_cw.h b/desmume/src/windows/wx/include/wx/wx_cw.h deleted file mode 100644 index b9b214a90..000000000 --- a/desmume/src/windows/wx/include/wx/wx_cw.h +++ /dev/null @@ -1,65 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw.h -// Purpose: wxWidgets definitions for CodeWarrior builds -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wx_cw.h 29319 2004-09-24 14:32:35Z ABX $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 -#pragma old_argmatch on -#endif - -#if __option(profile) -#ifdef __cplusplus - #if __POWERPC__ - #include <wx_PPC++_prof.mch> - #elif __INTEL__ - #include <wx_x86++_prof.mch> - #elif __CFM68K__ - #include <wx_cfm++_prof.mch> - #else - #include <wx_68k++_prof.mch> - #endif -#else - #if __POWERPC__ - #include <wx_PPC_prof.mch> - #elif __INTEL__ - #include <wx_x86_prof.mch> - #elif __CFM68K__ - #include <wx_cfm_prof.mch> - #else - #include <wx_68k_prof.mch> - #endif -#endif -#else -#ifdef __cplusplus - #if __POWERPC__ - #include <wx_PPC++.mch> - #elif __INTEL__ - #include <wx_x86++.mch> - #elif __CFM68K__ - #include <wx_cfm++.mch> - #else - #include <wx_68k++.mch> - #endif -#else - #if __POWERPC__ - #include <wx_PPC.mch> - #elif __INTEL__ - #include <wx_x86.mch> - #elif __CFM68K__ - #include <wx_cfm.mch> - #else - #include <wx_68k.mch> - #endif -#endif -#endif -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wx_cw_cm.h b/desmume/src/windows/wx/include/wx/wx_cw_cm.h deleted file mode 100644 index c6c64b9e0..000000000 --- a/desmume/src/windows/wx/include/wx/wx_cw_cm.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - Name: wx/wx_cw_cm.h - Purpose: wxWidgets definitions for CodeWarrior builds - Author: Stefan Csomor - Modified by: - Created: - RCS-ID: $Id: wx_cw_cm.h 42655 2006-10-29 20:17:29Z VZ $ - Copyright: (c) Stefan Csomor - Licence: wxWindows licence -*/ - -#define MSL_USE_PRECOMPILED_HEADERS 0 -#if __WXDEBUG__ - // mac os assert levels - #define DEBUG 1 - #define DEBUG_INTERNAL 1 -#endif -#if !defined( __MWERKS__ ) - #error "this file is only for builds with Metrowerks CodeWarrior" -#endif - -// defined if the compiler does not want the classname repeated for inlines -// within a class definition -#define WX_COMP_INLINE_NO_CLASS - -#if __MWERKS__ >= 0x2400 && __MWERKS__ < 0x3200 - #pragma old_argmatch on -#endif - -#if (__MWERKS__ < 0x0900) || macintosh || __MACH__ - #define __MAC__ - #define __WXMAC__ -#elif (__MWERKS__ >= 0x0900) && __INTEL__ - #define WIN32 - #define _WINDOWS - #define __WXMSW__ - #define __WINDOWS__ - #define __WIN95__ - #define __WIN32__ - #define STRICT - #define NOMINMAX -#elif __BEOS__ - #include <ansi_prefix.be.h> - #include <Be.h> -#else - #error unknown MW compiler -#endif - -#ifdef __WXMSW__ - #include <ansi_prefix.win32.h> - #include <ansi_parms.h> - #ifdef __MWERKS__ - #if defined( __MSL__ ) && __MSL__ >= 0x5012 && __MSL__ < 0x7000 - #define fileno _fileno - #define fdopen _fdopen - #define tell _tell - #endif - #endif -#elif defined( __WXMAC__) - /* Set to 0 if you don't want to use precompiled MacHeaders */ - #define USE_PRECOMPILED_MAC_HEADERS 0 - #define ACCESSOR_CALLS_ARE_FUNCTIONS 1 - #define OPAQUE_TOOLBOX_STRUCTS 1 - - /* CW8.3+ has mbstate_t */ - #if defined(__MACH__) && __MWERKS__ < 0x3003 - typedef int mbstate_t; - #define _MBSTATE_T - #endif - - /* CW8.3+ has ssize_t */ - #if defined(__MACH__) && __MWERKS__ >= 0x3003 - #define HAVE_SSIZE_T - #endif - - #include <mslconfig> - // for getting the correct expat includes - #define MACOS_CLASSIC - /* - #include <MacTypes.h> - #if UNIVERSAL_INTERFACES_VERSION < 0x0340 - #error "please update to Apple's lastest universal headers from http://developer.apple.com/sdk/" - #endif - */ -#endif - -#define USE_DEFINE - diff --git a/desmume/src/windows/wx/include/wx/wx_cw_d.h b/desmume/src/windows/wx/include/wx/wx_cw_d.h deleted file mode 100644 index 6e127a9f6..000000000 --- a/desmume/src/windows/wx/include/wx/wx_cw_d.h +++ /dev/null @@ -1,46 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw_d.h -// Purpose: wxWidgets definitions for CodeWarrior builds (Debug) -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wx_cw_d.h 29319 2004-09-24 14:32:35Z ABX $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 && __MWERKS__ < 0x3200 -#pragma old_argmatch on -#endif - -#if __option(profile) -#error "profiling is not supported in debug versions" -#else -#ifdef __cplusplus - #if __POWERPC__ - #include <wx_PPC++_d.mch> - #elif __INTEL__ - #include <wx_x86++_d.mch> - #elif __CFM68K__ - #include <wx_cfm++_d.mch> - #else - #include <wx_68k++_d.mch> - #endif -#else - #if __POWERPC__ - #include <wx_PPC_d.mch> - #elif __INTEL__ - #include <wx_x86_d.mch> - #elif __CFM68K__ - #include <wx_cfm_d.mch> - #else - #include <wx_68k_d.mch> - #endif -#endif -#endif - -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wx_cwc.h b/desmume/src/windows/wx/include/wx/wx_cwc.h deleted file mode 100644 index 7c323bd76..000000000 --- a/desmume/src/windows/wx/include/wx/wx_cwc.h +++ /dev/null @@ -1,49 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw.h -// Purpose: wxWidgets definitions for CodeWarrior builds -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wx_cwc.h 36967 2006-01-18 14:13:20Z JS $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 && __MWERKS__ < 0x3200 - #pragma old_argmatch on -#endif - -#if __option(profile) -#ifdef __cplusplus - #ifdef __MACH__ - #include "wx_Mach++_prof.mch" - #elif __POWERPC__ - #include "wx_Carbon++_prof.mch" - #endif -#else - #ifdef __MACH__ - #include "wx_Mach_prof.mch" - #elif __POWERPC__ - #include "wx_Carbon_prof.mch" - #endif -#endif -#else -#ifdef __cplusplus - #ifdef __MACH__ - #include "wx_Mach++.mch" - #elif __POWERPC__ - #include "wx_Carbon++.mch" - #endif -#else - #ifdef __MACH__ - #include "wx_Mach.mch" - #elif __POWERPC__ - #include "wx_Carbon.mch" - #endif -#endif -#endif -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wx_cwc_d.h b/desmume/src/windows/wx/include/wx/wx_cwc_d.h deleted file mode 100644 index dd46cfeac..000000000 --- a/desmume/src/windows/wx/include/wx/wx_cwc_d.h +++ /dev/null @@ -1,38 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw_d.h -// Purpose: wxWidgets definitions for CodeWarrior builds (Debug) -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wx_cwc_d.h 36967 2006-01-18 14:13:20Z JS $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 && __MWERKS__ < 0x3200 - #pragma old_argmatch on -#endif - -#if __option(profile) -#error "profiling is not supported in debug versions" -#else -#ifdef __cplusplus - #ifdef __MACH__ - #include "wx_Mach++_d.mch" - #elif __POWERPC__ - #include "wx_Carbon++_d.mch" - #endif -#else - #ifdef __MACH__ - #include "wx_Mach_d.mch" - #elif __POWERPC__ - #include "wx_Carbon_d.mch" - #endif -#endif -#endif - -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wx_cwcocoa.h b/desmume/src/windows/wx/include/wx/wx_cwcocoa.h deleted file mode 100644 index 920fde540..000000000 --- a/desmume/src/windows/wx/include/wx/wx_cwcocoa.h +++ /dev/null @@ -1,66 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: include/wx/wx_cwcocoa.h -// Purpose: Metrowerks Prefix Header File (wxCocoa Release) -// Author: Tommy Tian (tommy.tian@webex.com) -// Modified by: David Elliott -// Created: 10/22/2004 -// RCS-ID: $Id: wx_cwcocoa.h 30235 2004-11-02 06:22:11Z DE $ -// Copyright: (c) Tommy Tian -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW_COCOA__ -#define _WX_CW_COCOA__ - -#if __MWERKS__ >= 0x2400 && __MWERKS__ <= 0x3200 -#pragma old_argmatch on -#endif - -#if __option(profile) -#ifdef __cplusplus - #ifdef __OBJC__ - #if __mwlinker__ - #include "wx_cocoaMacOSXmm_prof.mch" - #else - #include "wx_cocoaMach-Omm_prof.mch" - #endif - #else - #if __mwlinker__ - #include "wx_cocoaMacOSX++_prof.mch" - #else - #include "wx_cocoaMach-O++_prof.mch" - #endif - #endif -#else - #if __mwlinker__ - #include "wx_cocoaMacOSX_prof.mch" - #else - #include "wx_cocoaMach-O_prof.mch" - #endif -#endif -#else -#ifdef __cplusplus - #ifdef __OBJC__ - #if __mwlinker__ - #include "wx_cocoaMacOSXmm.mch" - #else - #include "wx_cocoaMach-Omm.mch" - #endif - #else - #if __mwlinker__ - #include "wx_cocoaMacOSX++.mch" - #else - #include "wx_cocoaMach-O++.mch" - #endif - #endif -#else - #if __mwlinker__ - #include "wx_cocoaMacOSX.mch" - #else - #include "wx_cocoaMach-O.mch" - #endif -#endif -#endif - -#endif - // _WX_CW_COCOA__ diff --git a/desmume/src/windows/wx/include/wx/wx_cwcocoa_cm.h b/desmume/src/windows/wx/include/wx/wx_cwcocoa_cm.h deleted file mode 100644 index fbe176d4b..000000000 --- a/desmume/src/windows/wx/include/wx/wx_cwcocoa_cm.h +++ /dev/null @@ -1,85 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: include/wx/wx_cwcocoa_cm.h -// Purpose: Metrowerks wxCocoa PCH common definitions -// Author: Tommy Tian (tommy.tian@webex.com) -// Modified by: -// Created: 10/04/2004 -// RCS-ID: $Id: wx_cwcocoa_cm.h 30235 2004-11-02 06:22:11Z DE $ -// Copyright: (c) Tommy Tian -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#define MSL_USE_PRECOMPILED_HEADERS 0 -#if __WXDEBUG__ - // mac os assert levels - #define DEBUG 1 - #define DEBUG_INTERNAL 1 -#endif -#if !defined( __MWERKS__ ) - #error "this file is only for builds with Metrowerks CodeWarrior" -#endif - -#define WX_COMP_INLINE_NO_CLASS // defined if the compiler does not want the classname repeated for inlines within a class definition - -#if __MWERKS__ >= 0x2400 && __MWERKS__ <= 0x3200 -#pragma old_argmatch on -#endif - -#if (__MWERKS__ < 0x0900) || macintosh || __MACH__ - #define __MAC__ - #define __WXCOCOA__ -#elif (__MWERKS__ >= 0x0900) && __INTEL__ - #define WIN32 - #define _WINDOWS - #define __WXMSW__ - #define __WINDOWS__ - #define __WIN95__ - #define __WIN32__ - #define STRICT - #define NOMINMAX -#elif __BEOS__ - #include <ansi_prefix.be.h> - #include <Be.h> -#else - #error unknown MW compiler -#endif - -#ifdef __WXMSW__ - #include <ansi_prefix.win32.h> - #include <ansi_parms.h> - #ifdef __MWERKS__ - #if defined( __MSL__ ) && __MSL__ >= 0x5012 && __MSL__ < 0x7000 - #define fileno _fileno - #define fdopen _fdopen - #define tell _tell - #endif - #endif -#elif defined( __WXMAC__) - #define USE_PRECOMPILED_MAC_HEADERS 0 /*Set to 0 if you don't want to use precompiled MacHeaders*/ - #define ACCESSOR_CALLS_ARE_FUNCTIONS 1 - #define OPAQUE_TOOLBOX_STRUCTS 1 - #ifdef __MACH__ - #include <ansi_prefix.mach.h> - #include <msl_c_version.h> - #include <stdint.h> - #undef WCHAR_MAX - #include <machine/ansi.h> - #else - #include <ansi_prefix.mac.h> - #endif - // for getting the correct expat includes - #define MACOS_CLASSIC - /* - #include <MacTypes.h> - #if UNIVERSAL_INTERFACES_VERSION < 0x0340 - #error "please update to Apple's lastest universal headers from http://developer.apple.com/sdk/" - #endif - */ -#elif defined( __WXCOCOA__) //tommy - #if defined(__OBJC__) - #include "CocoaHeaders.m" - #endif //defined(__OBJC__) -#endif - -#define USE_DEFINE - diff --git a/desmume/src/windows/wx/include/wx/wx_cwcocoa_d.h b/desmume/src/windows/wx/include/wx/wx_cwcocoa_d.h deleted file mode 100644 index de2b5b95b..000000000 --- a/desmume/src/windows/wx/include/wx/wx_cwcocoa_d.h +++ /dev/null @@ -1,47 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: include/wx/wx_cwcocoa_d.h -// Purpose: Metrowerks Prefix Header File (wxCocoa Debug) -// Author: Tommy Tian (tommy.tian@webex.com) -// Modified by: David Elliott -// Created: 10/04/2004 -// RCS-ID: $Id: wx_cwcocoa_d.h 30235 2004-11-02 06:22:11Z DE $ -// Copyright: (c) Tommy Tian -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - - -#ifndef _WX_CW_COCOA__ -#define _WX_CW_COCOA__ - -#if __MWERKS__ >= 0x2400 && __MWERKS__ <= 0x3200 -#pragma old_argmatch on -#endif - -#if __option(profile) -#error "profiling is not supported in debug versions" -#else -#ifdef __cplusplus - #ifdef __OBJC__ - #if __mwlinker__ - #include "wx_cocoaMacOSXmm_d.mch" - #else - #include "wx_cocoaMach-Omm_d.mch" - #endif - #else - #if __mwlinker__ - #include "wx_cocoaMacOSX++_d.mch" - #else - #include "wx_cocoaMach-O++_d.mch" - #endif - #endif -#else - #if __mwlinker__ - #include "wx_cocoaMacOSX_d.mch" - #else - #include "wx_cocoaMach-O_d.mch" - #endif -#endif -#endif - -#endif - // _WX_CW_COCOA__ diff --git a/desmume/src/windows/wx/include/wx/wx_cwu_d.h b/desmume/src/windows/wx/include/wx/wx_cwu_d.h deleted file mode 100644 index 24c384a77..000000000 --- a/desmume/src/windows/wx/include/wx/wx_cwu_d.h +++ /dev/null @@ -1,46 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw_d.h -// Purpose: wxWidgets definitions for CodeWarrior builds (Debug) -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wx_cwu_d.h 29319 2004-09-24 14:32:35Z ABX $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 -#pragma old_argmatch on -#endif - -#if __option(profile) -#error "profiling is not supported in debug versions" -#else -#ifdef __cplusplus - #if __POWERPC__ - #include <wx_PPCu++_d.mch> - #elif __INTEL__ - #include <wx_x86u++_d.mch> - #elif __CFM68K__ - #include <wx_cfmu++_d.mch> - #else - #include <wx_68ku++_d.mch> - #endif -#else - #if __POWERPC__ - #include <wx_PPCu_d.mch> - #elif __INTEL__ - #include <wx_x86u_d.mch> - #elif __CFM68K__ - #include <wx_cfmu_d.mch> - #else - #include <wx_68ku_d.mch> - #endif -#endif -#endif - -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wxchar.h b/desmume/src/windows/wx/include/wx/wxchar.h deleted file mode 100644 index bbdcab1fa..000000000 --- a/desmume/src/windows/wx/include/wx/wxchar.h +++ /dev/null @@ -1,1393 +0,0 @@ -/* - * Name: wx/wxchar.h - * Purpose: Declarations common to wx char/wchar_t usage (wide chars) - * Author: Joel Farley, Ove Kåven - * Modified by: Vadim Zeitlin, Robert Roebling, Ron Lee - * Created: 1998/06/12 - * RCS-ID: $Id: wxchar.h 50987 2008-01-02 16:31:38Z VZ $ - * Copyright: (c) 1998-2006 wxWidgets dev team - * Licence: wxWindows licence - */ - -/* THIS IS A C FILE, DON'T USE C++ FEATURES (IN PARTICULAR COMMENTS) IN IT */ - -#ifndef _WX_WXCHAR_H_ -#define _WX_WXCHAR_H_ - -/* defs.h indirectly includes this file, so don't include it here */ -#include "wx/platform.h" -#include "wx/dlimpexp.h" - -#include <stdio.h> /* we use FILE below */ - -#if defined(HAVE_STRTOK_R) && defined(__DARWIN__) && defined(_MSL_USING_MW_C_HEADERS) && _MSL_USING_MW_C_HEADERS - char *strtok_r(char *, const char *, char **); -#endif - -/* check whether we have wchar_t and which size it is if we do */ -#if !defined(wxUSE_WCHAR_T) - #if defined(__UNIX__) - #if defined(HAVE_WCSTR_H) || defined(HAVE_WCHAR_H) || defined(__FreeBSD__) || defined(__DARWIN__) - #define wxUSE_WCHAR_T 1 - #else - #define wxUSE_WCHAR_T 0 - #endif - #elif defined(__GNUWIN32__) && !defined(__MINGW32__) - #define wxUSE_WCHAR_T 0 - #elif defined(__WATCOMC__) - #define wxUSE_WCHAR_T 0 - #elif defined(__VISAGECPP__) && (__IBMCPP__ < 400) - #define wxUSE_WCHAR_T 0 - #else - /* add additional compiler checks if this fails */ - #define wxUSE_WCHAR_T 1 - #endif -#endif /* !defined(wxUSE_WCHAR_T) */ - -/* Unicode support requires wchar_t */ -#if wxUSE_UNICODE && !wxUSE_WCHAR_T - #error "wchar_t must be available in Unicode build" -#endif /* Unicode */ - -/* - Standard headers we need here. - - NB: don't include any wxWidgets headers here because almost all of them include - this one! - */ - -/* Required for wxPrintf() etc */ -#include <stdarg.h> - -/* Almost all compiler have strdup(), but not quite all: CodeWarrior under Mac */ -/* and VC++ for Windows CE don't provide it */ -#if defined(__VISUALC__) && __VISUALC__ >= 1400 - #define wxStrdupA _strdup -#elif !(defined(__MWERKS__) && defined(__WXMAC__)) && !defined(__WXWINCE__) - /* use #define, not inline wrapper, as it is tested with #ifndef below */ - #define wxStrdupA strdup -#endif - -/* - non Unix compilers which do have wchar.h (but not tchar.h which is included - below and which includes wchar.h anyhow). - - Actually MinGW has tchar.h, but it does not include wchar.h - */ -#if defined(__MWERKS__) || defined(__VISAGECPP__) || defined(__MINGW32__) || defined(__WATCOMC__) - #ifndef HAVE_WCHAR_H - #define HAVE_WCHAR_H - #endif -#endif -#if defined(__MWERKS__) && !defined(__MACH__) - #ifndef HAVE_WCSLEN - #define HAVE_WCSLEN - #endif -#endif - -#if wxUSE_WCHAR_T - #ifdef HAVE_WCHAR_H - /* the current (as of Nov 2002) version of cygwin has a bug in its */ - /* wchar.h -- there is no extern "C" around the declarations in it and */ - /* this results in linking errors later; also, at least on some */ - /* Cygwin versions, wchar.h requires sys/types.h */ - #ifdef __CYGWIN__ - #include <sys/types.h> - #ifdef __cplusplus - extern "C" { - #endif - #endif /* Cygwin */ - - #include <wchar.h> - - #if defined(__CYGWIN__) && defined(__cplusplus) - } - #endif /* Cygwin and C++ */ - - #elif defined(HAVE_WCSTR_H) - /* old compilers have relevant declarations here */ - #include <wcstr.h> - #elif defined(__FreeBSD__) || defined(__DARWIN__) || defined(__EMX__) - /* include stdlib.h for wchar_t */ - #include <stdlib.h> - #endif /* HAVE_WCHAR_H */ - - #ifdef HAVE_WIDEC_H - #include <widec.h> - #endif -#endif /* wxUSE_WCHAR_T */ - -/* ---------------------------------------------------------------------------- */ -/* define wxHAVE_TCHAR_SUPPORT for the compilers which support the TCHAR type */ -/* mapped to either char or wchar_t depending on the ASCII/Unicode mode and have */ -/* the function mapping _tfoo() -> foo() or wfoo() */ -/* ---------------------------------------------------------------------------- */ - -/* VC++ and BC++ starting with 5.2 have TCHAR support */ -#ifdef __VISUALC__ - #define wxHAVE_TCHAR_SUPPORT -#elif defined(__BORLANDC__) && (__BORLANDC__ >= 0x520) - #define wxHAVE_TCHAR_SUPPORT - #include <ctype.h> - #include <memory.h> -#elif defined(__WATCOMC__) - #define wxHAVE_TCHAR_SUPPORT -#elif defined(__DMC__) - #define wxHAVE_TCHAR_SUPPORT -#elif defined(__WXPALMOS__) - #include <stddef.h> -#elif defined(__MINGW32__) && wxCHECK_W32API_VERSION( 1, 0 ) - #define wxHAVE_TCHAR_SUPPORT - #include <stddef.h> - #include <string.h> - #include <ctype.h> -#elif 0 && defined(__VISAGECPP__) && (__IBMCPP__ >= 400) - /* VZ: the old VisualAge definitions were completely wrong and had no */ - /* chance at all to work in Unicode build anyhow so let's pretend that */ - /* VisualAge does _not_ support TCHAR for the moment (as indicated by */ - /* "0 &&" above) until someone really has time to delve into Unicode */ - /* issues under OS/2 */ - - /* VisualAge 4.0+ supports TCHAR */ - #define wxHAVE_TCHAR_SUPPORT -#endif /* compilers with (good) TCHAR support */ - -#if defined(__MWERKS__) - /* Metrowerks only has wide char support for OS X >= 10.3 */ - #if !defined(__DARWIN__) || \ - (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3) - #define wxHAVE_MWERKS_UNICODE - #endif - - #ifdef wxHAVE_MWERKS_UNICODE - #define HAVE_WPRINTF 1 - #define HAVE_WCSRTOMBS 1 - #define HAVE_VSWPRINTF 1 - #endif -#endif /* __MWERKS__ */ - -#ifdef wxHAVE_TCHAR_SUPPORT - /* get TCHAR definition if we've got it */ - #include <tchar.h> - - /* we surely do have wchar_t if we have TCHAR */ - #ifndef wxUSE_WCHAR_T - #define wxUSE_WCHAR_T 1 - #endif /* !defined(wxUSE_WCHAR_T) */ - - /* and we also do have wcslen() */ - #ifndef HAVE_WCSLEN - #define HAVE_WCSLEN - #endif -#endif /* wxHAVE_TCHAR_SUPPORT */ - -/* ---------------------------------------------------------------------------- */ -/* define wxChar type */ -/* ---------------------------------------------------------------------------- */ - -/* TODO: define wxCharInt to be equal to either int or wint_t? */ - -#if !wxUSE_UNICODE - typedef char wxChar; - typedef signed char wxSChar; - typedef unsigned char wxUChar; -#else /* Unicode */ - /* VZ: note that VC++ defines _T[SU]CHAR simply as wchar_t and not as */ - /* signed/unsigned version of it which (a) makes sense to me (unlike */ - /* char wchar_t is always unsigned) and (b) was how the previous */ - /* definitions worked so keep it like this */ - - /* Sun's SunPro compiler supports the wchar_t type and wide character */ - /* functions, but does not define __WCHAR_TYPE__. Define it here to */ - /* allow unicode enabled builds. */ - #if defined(__SUNPRO_CC) || defined(__SUNPRO_C) - #define __WCHAR_TYPE__ wxchar_t - #endif - - /* GNU libc has __WCHAR_TYPE__ which requires special treatment, see */ - /* comment below */ - #if !defined(__WCHAR_TYPE__) || \ - (!defined(__GNUC__) || wxCHECK_GCC_VERSION(2, 96)) - /* standard case */ - typedef wchar_t wxChar; - typedef wchar_t wxSChar; - typedef wchar_t wxUChar; - #else /* __WCHAR_TYPE__ and gcc < 2.96 */ - /* VS: wxWidgets used to define wxChar as __WCHAR_TYPE__ here. However, */ - /* this doesn't work with new GCC 3.x compilers because wchar_t is */ - /* C++'s builtin type in the new standard. OTOH, old compilers (GCC */ - /* 2.x) won't accept new definition of wx{S,U}Char, therefore we */ - /* have to define wxChar conditionally depending on detected */ - /* compiler & compiler version. */ - /* with old definition of wxChar. */ - typedef __WCHAR_TYPE__ wxChar; - typedef __WCHAR_TYPE__ wxSChar; - typedef __WCHAR_TYPE__ wxUChar; - #endif /* __WCHAR_TYPE__ */ -#endif /* ASCII/Unicode */ - -/* ---------------------------------------------------------------------------- */ -/* define _T() and related macros */ -/* ---------------------------------------------------------------------------- */ - -/* BSD systems define _T() to be something different in ctype.h, override it */ -#if defined(__FreeBSD__) || defined(__DARWIN__) - #include <ctype.h> - #undef _T -#endif - -/* could already be defined by tchar.h (it's quasi standard) */ -#ifndef _T - #if !wxUSE_UNICODE - #define _T(x) x - #else /* Unicode */ - /* use wxCONCAT_HELPER so that x could be expanded if it's a macro */ - #define _T(x) wxCONCAT_HELPER(L, x) - #endif /* ASCII/Unicode */ -#endif /* !defined(_T) */ - -/* although global macros with such names are normally bad, we want to have */ -/* another name for _T() which should be used to avoid confusion between _T() */ -/* and _() in wxWidgets sources */ -#define wxT(x) _T(x) - -/* this macro exists only for forward compatibility with wx 3.0 */ -#define wxS(x) _T(x) - -/* a helper macro allowing to make another macro Unicode-friendly, see below */ -#define wxAPPLY_T(x) _T(x) - -/* Unicode-friendly __FILE__, __DATE__ and __TIME__ analogs */ -#ifndef __TFILE__ - #define __TFILE__ wxAPPLY_T(__FILE__) -#endif - -#ifndef __TDATE__ - #define __TDATE__ wxAPPLY_T(__DATE__) -#endif - -#ifndef __TTIME__ - #define __TTIME__ wxAPPLY_T(__TIME__) -#endif - -/* - define wxFoo() function for each standard foo() function whose signature - (exceptionally including the return type) includes any mention of char: - wxFoo() is going to be a Unicode-friendly version of foo(), i.e. will have - the same signature but with char replaced by wxChar which allows us to use - it in Unicode build as well - */ - -#ifdef wxHAVE_TCHAR_SUPPORT - #include <ctype.h> - - #if defined(__WATCOMC__) && defined(UNICODE) - #define WXWCHAR_T_CAST(c) (wint_t)(c) - #else - #define WXWCHAR_T_CAST(c) c - #endif - - /* ctype.h functions */ - #define wxIsalnum(c) _istalnum(WXWCHAR_T_CAST(c)) - #define wxIsalpha(c) _istalpha(WXWCHAR_T_CAST(c)) - #define wxIscntrl(c) _istcntrl(WXWCHAR_T_CAST(c)) - #define wxIsdigit(c) _istdigit(WXWCHAR_T_CAST(c)) - #define wxIsgraph(c) _istgraph(WXWCHAR_T_CAST(c)) - #define wxIslower(c) _istlower(WXWCHAR_T_CAST(c)) - #define wxIsprint(c) _istprint(WXWCHAR_T_CAST(c)) - #define wxIspunct(c) _istpunct(WXWCHAR_T_CAST(c)) - #define wxIsspace(c) _istspace(WXWCHAR_T_CAST(c)) - #define wxIsupper(c) _istupper(WXWCHAR_T_CAST(c)) - #define wxIsxdigit(c) _istxdigit(WXWCHAR_T_CAST(c)) - - /* - There is a bug in VC6 C RTL: toxxx() functions dosn't do anything with - signed chars < 0, so "fix" it here. - */ - #define wxTolower(c) _totlower((wxUChar)(c)) - #define wxToupper(c) _totupper((wxUChar)(c)) - - /* locale.h functons */ - #define wxSetlocale _tsetlocale - - /* string.h functions */ - #define wxStrcat _tcscat - #define wxStrchr _tcschr - #define wxStrcmp _tcscmp - #define wxStrcoll _tcscoll - #define wxStrcpy _tcscpy - #define wxStrcspn _tcscspn - #define wxStrdupW _wcsdup /* notice the 'W'! */ - #define wxStrftime _tcsftime - #define wxStricmp _tcsicmp - #define wxStrnicmp _tcsnicmp - #define wxStrlen_ _tcslen /* used in wxStrlen inline function */ - #define wxStrncat _tcsncat - #define wxStrncmp _tcsncmp - #define wxStrncpy _tcsncpy - #define wxStrpbrk _tcspbrk - #define wxStrrchr _tcsrchr - #define wxStrspn _tcsspn - #define wxStrstr _tcsstr - #define wxStrtod _tcstod - #define wxStrtol _tcstol - #define wxStrtoul _tcstoul - #ifdef __VISUALC__ - #if __VISUALC__ >= 1300 && !defined(__WXWINCE__) - #define wxStrtoll _tcstoi64 - #define wxStrtoull _tcstoui64 - #endif /* VC++ 7+ */ - #endif - #define wxStrxfrm _tcsxfrm - - /* stdio.h functions */ - #define wxFgetc _fgettc - #define wxFgetchar _fgettchar - #define wxFgets _fgetts - #if wxUSE_UNICODE_MSLU - WXDLLIMPEXP_BASE FILE * wxMSLU__tfopen(const wxChar *name, const wxChar *mode); - - #define wxFopen wxMSLU__tfopen - #else - #define wxFopen _tfopen - #endif - #define wxFputc _fputtc - #define wxFputchar _fputtchar - #define wxFprintf _ftprintf - #define wxFputs _fputts - #define wxFreopen _tfreopen - #define wxFscanf _ftscanf - #define wxGetc _gettc - #define wxGetchar _gettchar - #define wxGets _getts - #define wxPerror _tperror - #define wxPrintf _tprintf - #define wxPutc(c,f) _puttc(WXWCHAR_T_CAST(c),f) - #define wxPutchar _puttchar - #define wxPuts _putts - #define wxScanf _tscanf - #if defined(__DMC__) - #if wxUSE_UNICODE - /* Digital Mars adds count to _stprintf (C99) so prototype conversion see wxchar.cpp */ - int wxSprintf (wchar_t * __RESTRICT s, const wchar_t * __RESTRICT format, ... ) ; - #else - /* and there is a bug in D Mars tchar.h prior to 8.39.4n, so define as sprintf */ - #define wxSprintf sprintf - #endif - #elif defined(__MINGW32__) && ( defined(_STLPORT_VERSION) && _STLPORT_VERSION >= 0x510 ) - #if wxUSE_UNICODE - /* MinGW with STLPort 5.1 adds count to swprintf (C99) so prototype conversion see wxchar.cpp */ - int wxSprintf (wchar_t*, const wchar_t*, ...); - #else - /* MinGW with STLPort 5.1 has clashing defines for _stprintf so use sprintf */ - #define wxSprintf sprintf - #endif - #else - #define wxSprintf _stprintf - #endif - - #define wxSscanf _stscanf - #define wxTmpnam _ttmpnam - #define wxUngetc _tungetc - #define wxVfprintf _vftprintf - #define wxVprintf _vtprintf - #define wxVsscanf _vstscanf - #define wxVsprintf _vstprintf - - /* special case: these functions are missing under Win9x with Unicows so we */ - /* have to implement them ourselves */ - #if wxUSE_UNICODE_MSLU - WXDLLIMPEXP_BASE int wxMSLU__trename(const wxChar *oldname, const wxChar *newname); - WXDLLIMPEXP_BASE int wxMSLU__tremove(const wxChar *name); - - #define wxRemove wxMSLU__tremove - #define wxRename wxMSLU__trename - #else - #ifdef __WXWINCE__ - /* carefully: wxRemove() must return 0 on success while DeleteFile() - returns 0 on error, so don't just define one as the other */ - int wxRemove(const wxChar *path); - #else - #define wxRemove _tremove - #define wxRename _trename - #endif - #endif - - /* stdlib.h functions */ - #define wxAtoi _ttoi - #define wxAtol _ttol - /* #define wxAtof _tttof -- notice that there is no such thing (why?) */ - /* there are no env vars at all under CE, so no _tgetenv neither */ - #ifdef __WXWINCE__ - /* can't define as inline function as this is a C file... */ - #define wxGetenv(name) ((wxChar *)NULL) - #else - #define wxGetenv _tgetenv - #endif - #define wxSystem _tsystem - - /* time.h functions */ - #define wxAsctime _tasctime - #define wxCtime _tctime - - #define wxMbstowcs mbstowcs - #define wxWcstombs wcstombs -#else /* !TCHAR-aware compilers */ - /* - There are 2 unrelated problems with these functions under Mac: - a) Metrowerks MSL CRT implements them strictly in C99 sense and - doesn't support (very common) extension of allowing to call - mbstowcs(NULL, ...) which makes it pretty useless as you can't - know the size of the needed buffer - b) OS X <= 10.2 declares and even defined these functions but - doesn't really implement them -- they always return an error - - So use our own replacements in both cases. - */ - #if defined(__MWERKS__) && defined(__MSL__) - #define wxNEED_WX_MBSTOWCS - #endif - - #ifdef __DARWIN__ - #if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 - #define wxNEED_WX_MBSTOWCS - #endif - #endif - - #ifdef wxNEED_WX_MBSTOWCS - /* even though they are defined and "implemented", they are bad and just - stubs so we need our own - we need these even in ANSI builds!! */ - WXDLLIMPEXP_BASE size_t wxMbstowcs (wchar_t *, const char *, size_t); - WXDLLIMPEXP_BASE size_t wxWcstombs (char *, const wchar_t *, size_t); - #else - #define wxMbstowcs mbstowcs - #define wxWcstombs wcstombs - #endif - - /* - The system C library on Mac OS X 10.2 and below does not support - unicode: in other words all wide-character functions such as towupper et - al. do simply not exist so we need to provide our own in that context, - except for the wchar_t definition/typedef itself. - - We need to do this for both project builder and CodeWarrior as - the latter uses the system C library in Mach builds for wide character - support, which as mentioned does not exist on 10.2 and below. - */ - #if wxUSE_UNICODE && \ - defined(__DARWIN__) && \ - ( MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2 ) - /* we need everything! */ - #define wxNEED_WX_STRING_H - #define wxNEED_WX_CTYPE_H - - #define wxFgetchar(c) wxFgetc(c, stdin) - #define wxFputc wxPutc - #define wxFputchar(c) wxPutc(c, stdout) - #define wxGetc wxFgetc - #define wxGetchar(c) wxFgetc(c, stdin) - - #include <stdio.h> - - #define wxNEED_FGETC - #define wxNEED_FGETS - #define wxNEED_GETS - #define wxNEED_UNGETC - - #define wxNEED_FPUTS - #define wxNEED_PUTS - #define wxNEED_PUTC - - int wxFputs(const wxChar *ch, FILE *stream); - int wxPuts(const wxChar *ws); - int wxPutc(wxChar ch, FILE *stream); - - #ifdef __cplusplus - extern "C" { - #endif - WXDLLIMPEXP_BASE size_t wxStrlen_(const wxChar *s); - #ifdef __cplusplus - } - #endif - - #define wxPutchar(wch) wxPutc(wch, stdout) - - #define wxNEED_PRINTF_CONVERSION - #define wxNEED_WX_STDIO_H - #define wxNEED_WX_STDLIB_H - #define wxNEED_WX_TIME_H - - #elif wxUSE_UNICODE - #include <wctype.h> - - /* this is probably glibc-specific */ - #if defined(__WCHAR_TYPE__) && !defined(__MWERKS__) - /* ctype.h functions (wctype.h) */ - #define wxIsalnum iswalnum - #define wxIsalpha iswalpha - #define wxIscntrl iswcntrl - #define wxIsdigit iswdigit - #define wxIsgraph iswgraph - #define wxIslower iswlower - #define wxIsprint iswprint - #define wxIspunct iswpunct - #define wxIsspace iswspace - #define wxIsupper iswupper - #define wxIsxdigit iswxdigit - - #if defined(__GLIBC__) && (__GLIBC__ == 2) && (__GLIBC_MINOR__ == 0) - /* /usr/include/wctype.h incorrectly declares translations */ - /* tables which provokes tons of compile-time warnings -- try */ - /* to correct this */ - #define wxTolower(wc) towctrans((wc), (wctrans_t)__ctype_tolower) - #define wxToupper(wc) towctrans((wc), (wctrans_t)__ctype_toupper) - #else /* !glibc 2.0 */ - #define wxTolower towlower - #define wxToupper towupper - #endif /* gcc/!gcc */ - - /* string.h functions (wchar.h) */ - #define wxStrcat wcscat - #define wxStrchr wcschr - #define wxStrcmp wcscmp - #define wxStrcoll wcscoll - #define wxStrcpy wcscpy - #define wxStrcspn wcscspn - #define wxStrlen_ wxWcslen /* wxStrlen_() is used in wxStrlen() */ - #define wxStrncat wcsncat - #define wxStrncmp wcsncmp - #define wxStrncpy wcsncpy - #define wxStrpbrk wcspbrk - #define wxStrrchr wcsrchr - #define wxStrspn wcsspn - #define wxStrstr wcsstr - #define wxStrtod wcstod - #define wxStrtol wcstol - #define wxStrtoul wcstoul - #ifdef HAVE_WCSTOULL - /* assume that we have wcstoull(), which is also C99, too */ - #define wxStrtoll wcstoll - #define wxStrtoull wcstoull - #endif /* HAVE_WCSTOULL */ - #define wxStrxfrm wcsxfrm - - #define wxFgetc fgetwc - #define wxFgetchar fgetwchar - #define wxFgets fgetws - #define wxFputc fputwc - #define wxFputchar fputwchar - #define wxGetc getwc - #define wxGetchar getwchar - #define wxGets getws - #define wxUngetc ungetwc - - #ifdef HAVE_FPUTWS - #define wxFputs fputws - #else - #define wxNEED_FPUTS - #include <stdio.h> - int wxFputs(const wxChar *ch, FILE *stream); - #endif - - #ifdef HAVE_WPUTC - #define wxPutc wputc - #else - #define wxNEED_PUTC - #include <stdio.h> - int wxPutc(wxChar ch, FILE *stream); - #endif - - #ifdef HAVE_WPUTCHAR - #define wxPutchar wputchar - #else - #define wxPutchar(wch) wxPutc(wch, stdout) - #endif - - #ifdef HAVE_PUTWS - #define wxPuts putws - #else - #define wxNEED_PUTS - int wxPuts(const wxChar *ws); - #endif - - /* we need %s to %ls conversion for printf and scanf etc */ - #define wxNEED_PRINTF_CONVERSION - - /* glibc doesn't have wide char equivalents of the other stuff so */ - /* use our own versions */ - #define wxNEED_WX_STDIO_H - #define wxNEED_WX_STDLIB_H - #define wxNEED_WX_TIME_H - #elif defined(__MWERKS__) && ( defined(__MSL__) || defined(__MACH__) ) - /* ctype.h functions (wctype.h) */ - #define wxIsalnum iswalnum - #define wxIsalpha iswalpha - #define wxIscntrl iswcntrl - #define wxIsdigit iswdigit - #define wxIsgraph iswgraph - #define wxIslower iswlower - #define wxIsprint iswprint - #define wxIspunct iswpunct - #define wxIsspace iswspace - #define wxIsupper iswupper - #define wxIsxdigit iswxdigit - #define wxTolower towlower - #define wxToupper towupper - - /* string.h functions (wchar.h) */ - #define wxStrcat wcscat - #define wxStrchr wcschr - #define wxStrcmp wcscmp - #define wxStrcoll wcscoll - #define wxStrcpy wcscpy - #define wxStrcspn wcscspn - #define wxStrlen_ wxWcslen /* wxStrlen_() is used in wxStrlen() */ - #define wxStrncat wcsncat - #define wxStrncmp wcsncmp - #define wxStrncpy wcsncpy - #define wxStrpbrk wcspbrk - #define wxStrrchr wcsrchr - #define wxStrspn wcsspn - #define wxStrstr wcsstr - #define wxStrtod wcstod - #define wxStrtol wcstol - #define wxStrtoul wcstoul - #define wxStrxfrm wcsxfrm - - #define wxFgetc fgetwc - #define wxFgetchar fgetwchar - #define wxFgets fgetws - #define wxFputc fputwc - #define wxFputchar fputwchar - #define wxGetc getwc - #define wxGetchar getwchar - #define wxGets getws - #define wxUngetc ungetwc - - #define wxNEED_PRINTF_CONVERSION - - #define wxPutc putwc - #define wxPutchar putwchar - #define wxFputs fputws - - /* stdio.h functions */ - - #define wxNEED_WX_STDIO_H - - /* stdlib.h functions */ - #ifdef __MACH__ - #define wxNEED_WX_STDLIB_H - #else - #define wxAtof watof - #define wxAtoi watoi - #define wxAtol watol - #define wxGetenv(a) ((wxChar*)NULL) - #define wxSystem(a) ((int)NULL) - #endif - /* time.h functions */ - #define wxAsctime wasciitime - #define wxCtime wctime - /* #define wxStrftime wcsftime */ - - #define wxNEED_WX_TIME_H - #else /* !metrowerks for apple */ - #error "Please define wide character functions for your environment" - #endif - #else /* ASCII */ - #include <ctype.h> - #include <string.h> - - /* ctype.h functions */ - #define wxIsalnum isalnum - #define wxIsalpha isalpha - #define wxIscntrl iscntrl - #define wxIsdigit isdigit - #define wxIsgraph isgraph - #define wxIslower islower - #define wxIsprint isprint - #define wxIspunct ispunct - #define wxIsspace isspace - #define wxIsupper isupper - #define wxIsxdigit isxdigit - #define wxTolower tolower - #define wxToupper toupper - - /* locale.h functons */ - #define wxSetlocale setlocale - - /* string.h functions */ - #define wxStrcat strcat - #define wxStrchr strchr - #define wxStrcmp strcmp - #define wxStrcoll strcoll - #define wxStrcpy strcpy - #define wxStrcspn strcspn - - /* wxStricmp and wxStrnicmp are defined below */ - #define wxStrlen_ strlen /* used in wxStrlen inline function */ - #define wxStrncat strncat - #define wxStrncmp strncmp - #define wxStrncpy strncpy - #define wxStrpbrk strpbrk - #define wxStrrchr strrchr - #define wxStrspn strspn - #define wxStrstr strstr - #define wxStrtod strtod - #ifdef HAVE_STRTOK_R - #define wxStrtok(str, sep, last) strtok_r(str, sep, last) - #endif - #define wxStrtol strtol - #define wxStrtoul strtoul - #ifdef HAVE_STRTOULL - /* assume that we have wcstoull(), which is also C99, too */ - #define wxStrtoll strtoll - #define wxStrtoull strtoull - #endif /* HAVE_WCSTOULL */ - #define wxStrxfrm strxfrm - - /* stdio.h functions */ - #define wxFopen fopen - #define wxFreopen freopen - #define wxRemove remove - #define wxRename rename - - #define wxPerror perror - #define wxTmpnam tmpnam - - #define wxFgetc fgetc - #define wxFgetchar fgetchar - #define wxFgets fgets - #define wxFputc fputc - #define wxFputs fputs - #define wxFputchar fputchar - #define wxFprintf fprintf - #define wxFscanf fscanf - #define wxGetc getc - #define wxGetchar getchar - #define wxGets gets - #define wxPrintf printf - #define wxPutc putc - #define wxPutchar putchar - #define wxPuts puts - #define wxScanf scanf - #define wxSprintf sprintf - #define wxSscanf sscanf - #define wxUngetc ungetc - #define wxVfprintf vfprintf - #define wxVprintf vprintf - #define wxVsscanf vsscanf - #define wxVsprintf vsprintf - - /* stdlib.h functions */ - #define wxAtof atof - #define wxAtoi atoi - #define wxAtol atol - #define wxGetenv getenv - #define wxSystem system - - /* time.h functions */ - #define wxAsctime asctime - #define wxCtime ctime - #define wxStrftime strftime - #endif /* Unicode/ASCII */ -#endif /* TCHAR-aware compilers/the others */ - -#ifdef wxStrtoll - #define wxHAS_STRTOLL -#endif - -/* - various special cases - */ - -/* define wxStricmp and wxStrnicmp for various compilers */ - -/* note that in Unicode mode we definitely are going to need our own version */ -#if !defined(wxStricmp) && !wxUSE_UNICODE - #if defined(__BORLANDC__) || defined(__WATCOMC__) || \ - defined(__SALFORDC__) || defined(__VISAGECPP__) || \ - defined(__EMX__) || defined(__DJGPP__) - #define wxStricmp stricmp - #define wxStrnicmp 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 wxStricmp StrCaselessCompare - #define wxStrnicmp strnicmp - #elif defined(__SYMANTEC__) || defined(__VISUALC__) || \ - (defined(__MWERKS__) && defined(__INTEL__)) - #define wxStricmp _stricmp - #define wxStrnicmp _strnicmp - #elif defined(__UNIX__) || defined(__GNUWIN32__) - #define wxStricmp strcasecmp - #define wxStrnicmp strncasecmp - /* #else -- use wxWidgets implementation */ - #endif -#endif /* !defined(wxStricmp) */ - -/* define wxWcslen() which should be always available if wxUSE_WCHAR_T == 1 (as */ -/* it's used in wx/buffer.h -- and also might be used just below by wxStrlen() */ -/* when wxStrlen_() is #define'd as wxWcslen so do it before defining wxStrlen) */ -#if wxUSE_WCHAR_T - #ifdef HAVE_WCSLEN - #define wxWcslen wcslen - #else - WXDLLIMPEXP_BASE size_t wxWcslen(const wchar_t *s); - #endif -#endif /* wxUSE_WCHAR_T */ - -#ifdef __cplusplus -/* checks whether the passed in pointer is NULL and if the string is empty */ -inline bool wxIsEmpty(const wxChar *p) { return !p || !*p; } - -/* safe version of strlen() (returns 0 if passed NULL pointer) */ -inline size_t wxStrlen(const wxChar *psz) { return psz ? wxStrlen_(psz) : 0; } -#endif - -/* - each of strdup() and wcsdup() may or may not be available but we need both - of them anyhow for wx/buffer.h so we define the missing one(s) in - wxchar.cpp and so we should always have both wxStrdupA and wxStrdupW - defined -- if this is somehow not the case in some situations, please - correct that and not the lines here - */ -#if wxUSE_UNICODE - #define wxStrdup wxStrdupW -#else - #define wxStrdup wxStrdupA -#endif - -#ifdef __cplusplus -WXDLLIMPEXP_BASE bool wxOKlibc(); /* for internal use */ -#endif - -/* printf() family saga */ - -/* - For some systems [v]snprintf() exists in the system libraries but not in the - headers, so we need to declare it ourselves to be able to use it. - */ -#if defined(HAVE_VSNPRINTF) && !defined(HAVE_VSNPRINTF_DECL) -#ifdef __cplusplus - extern "C" -#else - extern -#endif - int vsnprintf(char *str, size_t size, const char *format, va_list ap); -#endif /* !HAVE_VSNPRINTF_DECL */ - -#if defined(HAVE_SNPRINTF) && !defined(HAVE_SNPRINTF_DECL) -#ifdef __cplusplus - extern "C" -#else - extern -#endif - WXDLLIMPEXP_BASE int snprintf(char *str, size_t size, const char *format, ...); -#endif /* !HAVE_SNPRINTF_DECL */ - -/* Wrapper for vsnprintf if it's 3rd parameter is non-const. Note: the - * same isn't done for snprintf below, the builtin wxSnprintf_ is used - * instead since it's already a simple wrapper */ -#if defined __cplusplus && defined HAVE_BROKEN_VSNPRINTF_DECL - inline int wx_fixed_vsnprintf(char *str, size_t size, const char *format, va_list ap) - { - return vsnprintf(str, size, (char*)format, ap); - } -#endif - -/* - MinGW MSVCRT has non-standard vswprintf() (for MSVC compatibility - presumably) and normally _vsnwprintf() is used instead (but as - STLPort 5.1 defines standard vswprintf(), don't do this for it) - */ -#if defined(HAVE_VSWPRINTF) && defined(__MINGW32__) && !( defined(_STLPORT_VERSION) && _STLPORT_VERSION >= 0x510 ) - #undef HAVE_VSWPRINTF -#endif - -#if wxUSE_PRINTF_POS_PARAMS - /* - The systems where vsnprintf() supports positional parameters should - define the HAVE_UNIX98_PRINTF symbol. - - On systems which don't (e.g. Windows) we are forced to use - our wxVsnprintf() implementation. - */ - #if defined(HAVE_UNIX98_PRINTF) - #if wxUSE_UNICODE - #ifdef HAVE_VSWPRINTF - #define wxVsnprintf_ vswprintf - #endif - #else /* ASCII */ - #ifdef HAVE_BROKEN_VSNPRINTF_DECL - #define wxVsnprintf_ wx_fixed_vsnprintf - #else - #define wxVsnprintf_ vsnprintf - #endif - #endif - #else /* !HAVE_UNIX98_PRINTF */ - /* - The only compiler with positional parameters support under Windows - is VC++ 8.0 which provides a new xxprintf_p() functions family. - The 2003 PSDK includes a slightly earlier version of VC8 than the - main release and does not have the printf_p functions. - */ - #if defined _MSC_FULL_VER && _MSC_FULL_VER >= 140050727 && !defined __WXWINCE__ - #if wxUSE_UNICODE - #define wxVsnprintf_ _vswprintf_p - #else - #define wxVsnprintf_ _vsprintf_p - #endif - #endif - #endif /* HAVE_UNIX98_PRINTF/!HAVE_UNIX98_PRINTF */ -#else /* !wxUSE_PRINTF_POS_PARAMS */ - /* - We always want to define safe snprintf() function to be used instead of - sprintf(). Some compilers already have it (or rather vsnprintf() which - we really need...), otherwise we implement it using our own printf() - code. - - We define function with a trailing underscore here because the real one - is a wrapper around it as explained below - */ - - /* first deal with TCHAR-aware compilers which have _vsntprintf */ - #ifndef wxVsnprintf_ - #if defined(__VISUALC__) || \ - (defined(__BORLANDC__) && __BORLANDC__ >= 0x540) - #define wxVsnprintf_ _vsntprintf - #define wxSnprintf_ _sntprintf - #endif - #endif - - /* if this didn't work, define it separately for Unicode and ANSI builds */ - #ifndef wxVsnprintf_ - #if wxUSE_UNICODE - #if defined(HAVE__VSNWPRINTF) - #define wxVsnprintf_ _vsnwprintf - #elif defined(HAVE_VSWPRINTF) - #define wxVsnprintf_ vswprintf - #elif defined(__WATCOMC__) - #define wxVsnprintf_ _vsnwprintf - #define wxSnprintf_ _snwprintf - #endif - #else /* ASCII */ - /* - All versions of CodeWarrior supported by wxWidgets apparently - have both snprintf() and vsnprintf() - */ - #if defined(HAVE_SNPRINTF) \ - || defined(__MWERKS__) || defined(__WATCOMC__) - #ifndef HAVE_BROKEN_SNPRINTF_DECL - #define wxSnprintf_ snprintf - #endif - #endif - #if defined(HAVE_VSNPRINTF) \ - || defined(__MWERKS__) || defined(__WATCOMC__) - #ifdef HAVE_BROKEN_VSNPRINTF_DECL - #define wxVsnprintf_ wx_fixed_vsnprintf - #else - #define wxVsnprintf_ vsnprintf - #endif - #endif - #endif /* Unicode/ASCII */ - #endif /* wxVsnprintf_ */ -#endif /* wxUSE_PRINTF_POS_PARAMS/!wxUSE_PRINTF_POS_PARAMS */ - -#ifndef wxSnprintf_ - /* no snprintf(), cook our own */ - WXDLLIMPEXP_BASE int - wxSnprintf_(wxChar *buf, size_t len, const wxChar *format, ...) ATTRIBUTE_PRINTF_3; -#endif -#ifndef wxVsnprintf_ - /* no (suitable) vsnprintf(), cook our own */ - WXDLLIMPEXP_BASE int - wxVsnprintf_(wxChar *buf, size_t len, const wxChar *format, va_list argptr); - - #define wxUSE_WXVSNPRINTF 1 -#else - #define wxUSE_WXVSNPRINTF 0 -#endif - -/* - In Unicode mode we need to have all standard functions such as wprintf() and - so on but not all systems have them so use our own implementations in this - case. - */ -#if wxUSE_UNICODE && !defined(wxHAVE_TCHAR_SUPPORT) && !defined(HAVE_WPRINTF) - #define wxNEED_WPRINTF -#endif - -/* - More Unicode complications: although both ANSI C and C++ define a number of - wide character functions such as wprintf(), not all environments have them. - Worse, those which do have different behaviours: under Windows, %s format - specifier changes its meaning in Unicode build and expects a Unicode string - while under Unix/POSIX it still means an ASCII string even for wprintf() and - %ls has to be used for wide strings. - - We choose to always emulate Windows behaviour as more useful for us so even - if we have wprintf() we still must wrap it in a non trivial wxPrintf(). - -*/ - -#if defined(wxNEED_PRINTF_CONVERSION) || defined(wxNEED_WPRINTF) - /* - we need to implement all wide character printf and scanf functions - either because we don't have them at all or because they don't have the - semantics we need - */ - int wxScanf( const wxChar *format, ... ) ATTRIBUTE_PRINTF_1; - int wxSscanf( const wxChar *str, const wxChar *format, ... ) ATTRIBUTE_PRINTF_2; - int wxFscanf( FILE *stream, const wxChar *format, ... ) ATTRIBUTE_PRINTF_2; - int wxVsscanf( const wxChar *str, const wxChar *format, va_list ap ); - int wxPrintf( const wxChar *format, ... ) ATTRIBUTE_PRINTF_1; - int wxSprintf( wxChar *str, const wxChar *format, ... ) ATTRIBUTE_PRINTF_2; - int wxFprintf( FILE *stream, const wxChar *format, ... ) ATTRIBUTE_PRINTF_2; - int wxVfprintf( FILE *stream, const wxChar *format, va_list ap ); - int wxVprintf( const wxChar *format, va_list ap ); - int wxVsprintf( wxChar *str, const wxChar *format, va_list ap ); -#endif /* wxNEED_PRINTF_CONVERSION */ - -/* these 2 can be simply mapped to the versions with underscore at the end */ -/* if we don't have to do the conversion */ -/* - However, if we don't have any vswprintf() at all we don't need to redefine - anything as our own wxVsnprintf_() already behaves as needed. -*/ -#if defined(wxNEED_PRINTF_CONVERSION) && defined(wxVsnprintf_) - int wxSnprintf( wxChar *str, size_t size, const wxChar *format, ... ) ATTRIBUTE_PRINTF_3; - int wxVsnprintf( wxChar *str, size_t size, const wxChar *format, va_list ap ); -#else - #define wxSnprintf wxSnprintf_ - #define wxVsnprintf wxVsnprintf_ -#endif - -/* - various functions which might not be available in libc and for which we - provide our own replacements in wxchar.cpp - */ - -/* ctype.h functions */ - -/* RN: Used only under OSX <= 10.2 currently */ -#ifdef wxNEED_WX_CTYPE_H - WXDLLIMPEXP_BASE int wxIsalnum(wxChar ch); - WXDLLIMPEXP_BASE int wxIsalpha(wxChar ch); - WXDLLIMPEXP_BASE int wxIscntrl(wxChar ch); - WXDLLIMPEXP_BASE int wxIsdigit(wxChar ch); - WXDLLIMPEXP_BASE int wxIsgraph(wxChar ch); - WXDLLIMPEXP_BASE int wxIslower(wxChar ch); - WXDLLIMPEXP_BASE int wxIsprint(wxChar ch); - WXDLLIMPEXP_BASE int wxIspunct(wxChar ch); - WXDLLIMPEXP_BASE int wxIsspace(wxChar ch); - WXDLLIMPEXP_BASE int wxIsupper(wxChar ch); - WXDLLIMPEXP_BASE int wxIsxdigit(wxChar ch); - WXDLLIMPEXP_BASE int wxTolower(wxChar ch); - WXDLLIMPEXP_BASE int wxToupper(wxChar ch); -#endif /* wxNEED_WX_CTYPE_H */ - -/* under VC++ 6.0 isspace() returns 1 for 8 bit chars which completely breaks */ -/* the file parsing -- this may be true for 5.0 as well, update #ifdef then */ -#if defined(__VISUALC__) && (__VISUALC__ >= 1200) && !wxUSE_UNICODE - #undef wxIsspace - #define wxIsspace(c) ((((unsigned)c) < 128) && isspace(c)) -#endif /* VC++ */ - -/* - a few compilers don't have the (non standard but common) isascii function, - define it ourselves for them - */ -#ifndef isascii - #if defined(__MWERKS__) - #define wxNEED_ISASCII - #elif defined(_WIN32_WCE) - #if _WIN32_WCE <= 211 - #define wxNEED_ISASCII - #endif - #endif -#endif /* isascii */ - -#ifdef wxNEED_ISASCII - inline int isascii(int c) { return (unsigned)c < 0x80; } -#endif - -#ifdef _WIN32_WCE - #if _WIN32_WCE <= 211 - #define isspace(c) ((c) == _T(' ') || (c) == _T('\t')) - #endif -#endif /* _WIN32_WCE */ - -/* - we had goofed and defined wxIsctrl() instead of (correct) wxIscntrl() in the - initial versions of this header -- now it is too late to remove it so - although we fixed the function/macro name above, still provide the - backwards-compatible synonym. - */ -#define wxIsctrl wxIscntrl - -/* string.h functions */ -#ifndef strdup - #if defined(__MWERKS__) && !defined(__MACH__) && (__MSL__ < 0x00008000) - #define wxNEED_STRDUP - #elif defined(__WXWINCE__) - #if _WIN32_WCE <= 211 - #define wxNEED_STRDUP - #endif - #endif -#endif /* strdup */ - -#ifdef wxNEED_STRDUP - WXDLLIMPEXP_BASE char *strdup(const char* s); -#endif - -/* RN: Used only under OSX <= 10.2 currently - The __cplusplus ifdefs are messy, but they are required to build - the regex library, since c does not support function overloading -*/ -#ifdef wxNEED_WX_STRING_H -# ifdef __cplusplus - extern "C" { -# endif - WXDLLIMPEXP_BASE wxChar * wxStrcat(wxChar *dest, const wxChar *src); - WXDLLIMPEXP_BASE const wxChar * wxStrchr(const wxChar *s, wxChar c); - WXDLLIMPEXP_BASE int wxStrcmp(const wxChar *s1, const wxChar *s2); - WXDLLIMPEXP_BASE int wxStrcoll(const wxChar *s1, const wxChar *s2); - WXDLLIMPEXP_BASE wxChar * wxStrcpy(wxChar *dest, const wxChar *src); - WXDLLIMPEXP_BASE size_t wxStrcspn(const wxChar *s, const wxChar *reject); - WXDLLIMPEXP_BASE wxChar * wxStrncat(wxChar *dest, const wxChar *src, size_t n); - WXDLLIMPEXP_BASE int wxStrncmp(const wxChar *s1, const wxChar *s2, size_t n); - WXDLLIMPEXP_BASE wxChar * wxStrncpy(wxChar *dest, const wxChar *src, size_t n); - WXDLLIMPEXP_BASE const wxChar * wxStrpbrk(const wxChar *s, const wxChar *accept); - WXDLLIMPEXP_BASE const wxChar * wxStrrchr(const wxChar *s, wxChar c); - WXDLLIMPEXP_BASE size_t wxStrspn(const wxChar *s, const wxChar *accept); - WXDLLIMPEXP_BASE const wxChar * wxStrstr(const wxChar *haystack, const wxChar *needle); -# ifdef __cplusplus - } -# endif - - /* These functions use C++, so we can't c extern them */ - WXDLLIMPEXP_BASE double wxStrtod(const wxChar *nptr, wxChar **endptr); - WXDLLIMPEXP_BASE long int wxStrtol(const wxChar *nptr, wxChar **endptr, int base); - WXDLLIMPEXP_BASE unsigned long int wxStrtoul(const wxChar *nptr, wxChar **endptr, int base); - WXDLLIMPEXP_BASE size_t wxStrxfrm(wxChar *dest, const wxChar *src, size_t n); - - /* inlined versions */ - #ifdef __cplusplus - inline wxChar * wxStrchr(wxChar *s, wxChar c) - { return (wxChar *)wxStrchr((const wxChar *)s, c); } - inline wxChar * wxStrpbrk(wxChar *s, const wxChar *accept) - { return (wxChar *)wxStrpbrk((const wxChar *)s, accept); } - inline wxChar * wxStrrchr(wxChar *s, wxChar c) - { return (wxChar *)wxStrrchr((const wxChar *)s, c); } - inline wxChar *wxStrstr(wxChar *haystack, const wxChar *needle) - { return (wxChar *)wxStrstr((const wxChar *)haystack, needle); } - #endif - -#endif /* wxNEED_WX_STRING_H */ - -#ifndef wxStrdupA -WXDLLIMPEXP_BASE char *wxStrdupA(const char *psz); -#endif - -#ifndef wxStrdupW -WXDLLIMPEXP_BASE wchar_t *wxStrdupW(const wchar_t *pwz); -#endif - -#ifndef wxStricmp -WXDLLIMPEXP_BASE int wxStricmp(const wxChar *psz1, const wxChar *psz2); -#endif - -#ifndef wxStrnicmp -WXDLLIMPEXP_BASE int wxStrnicmp(const wxChar *psz1, const wxChar *psz2, size_t len); -#endif - -#ifndef wxStrtok -WXDLLIMPEXP_BASE wxChar * wxStrtok(wxChar *psz, const wxChar *delim, wxChar **save_ptr); -#endif - -#ifdef __cplusplus -#ifndef wxSetlocale -class WXDLLIMPEXP_BASE wxWCharBuffer; -WXDLLIMPEXP_BASE wxWCharBuffer wxSetlocale(int category, const wxChar *locale); -#endif -#endif - -/* stdio.h functions */ -#ifdef wxNEED_WX_STDIO_H - #include <stdio.h> - WXDLLIMPEXP_BASE FILE * wxFopen(const wxChar *path, const wxChar *mode); - WXDLLIMPEXP_BASE FILE * wxFreopen(const wxChar *path, const wxChar *mode, FILE *stream); - WXDLLIMPEXP_BASE int wxRemove(const wxChar *path); - WXDLLIMPEXP_BASE int wxRename(const wxChar *oldpath, const wxChar *newpath); - - /* *printf() family is handled separately */ -#endif /* wxNEED_WX_STDIO_H */ - - -/* stdlib.h functions */ -#ifndef wxAtof -WXDLLIMPEXP_BASE double wxAtof(const wxChar *psz); -#endif - -/* - mingw32 doesn't provide _tsystem() even though it does provide all the other - stdlib.h functions wrappers so check for it separately: - */ -#if defined(__MINGW32__) && wxUSE_UNICODE && !defined(_tsystem) - #define wxNEED_WXSYSTEM -#endif - -#ifdef wxNEED_WX_STDLIB_H -WXDLLIMPEXP_BASE int wxAtoi(const wxChar *psz); -WXDLLIMPEXP_BASE long wxAtol(const wxChar *psz); -WXDLLIMPEXP_BASE wxChar * wxGetenv(const wxChar *name); -#define wxNEED_WXSYSTEM -#endif - -#ifdef wxNEED_WXSYSTEM -WXDLLIMPEXP_BASE int wxSystem(const wxChar *psz); -#endif - - -/* time.h functions */ -#ifdef wxNEED_WX_TIME_H -#if defined(__MWERKS__) && defined(macintosh) - #include <time.h> -#endif - /*silent gabby compilers*/ - struct tm; - WXDLLIMPEXP_BASE size_t wxStrftime(wxChar *s, size_t max, - const wxChar *fmt, const struct tm *tm); -#endif /* wxNEED_WX_TIME_H */ - -#ifndef wxCtime -#include <time.h> -WXDLLIMPEXP_BASE wxChar *wxCtime(const time_t *timep); -#endif - - -/* missing functions in some WinCE versions */ -#ifdef _WIN32_WCE -#if (_WIN32_WCE < 300) -WXDLLIMPEXP_BASE void *calloc( size_t num, size_t size ); -#endif -#endif /* _WIN32_WCE */ - -/* multibyte to wide char conversion functions and macros */ - -#if wxUSE_WCHAR_T - /* multibyte<->widechar conversion */ - WXDLLIMPEXP_BASE size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n); - WXDLLIMPEXP_BASE size_t wxWC2MB(char *buf, const wchar_t *psz, size_t n); - - #if wxUSE_UNICODE - #define wxMB2WX wxMB2WC - #define wxWX2MB wxWC2MB - #define wxWC2WX wxStrncpy - #define wxWX2WC wxStrncpy - #else - #define wxMB2WX wxStrncpy - #define wxWX2MB wxStrncpy - #define wxWC2WX wxWC2MB - #define wxWX2WC wxMB2WC - #endif -#else /* !wxUSE_UNICODE */ -/* Why is this here? -#error ha */ - /* No wxUSE_WCHAR_T: we have to do something (JACS) */ - #define wxMB2WC wxStrncpy - #define wxWC2MB wxStrncpy - #define wxMB2WX wxStrncpy - #define wxWX2MB wxStrncpy - #define wxWC2WX wxWC2MB - #define wxWX2WC wxMB2WC -#endif - -/* - RN: The following are not normal versions of memcpy et al., rather - these are either char or widechar versions depending on - if unicode is used or not. -*/ - -#ifdef __cplusplus - - // - // RN: We could do the usual tricky compiler detection here, - // and use their variant (such as wmemchr, etc.). The problem - // is that these functions are quite rare, even though they are - // part of the current POSIX standard. In addition, most compilers - // (including even MSC) inline them just like we do right in their - // headers. - // - #include <string.h> - #if wxUSE_UNICODE - //implement our own wmem variants - inline wxChar* wxTmemchr(const wxChar* s, wxChar c, size_t l) - { - for(;l && *s != c;--l, ++s) {} - - if(l) - return (wxChar*)s; - return NULL; - } - - inline int wxTmemcmp(const wxChar* sz1, const wxChar* sz2, size_t len) - { - for(; *sz1 == *sz2 && len; --len, ++sz1, ++sz2) {} - - if(len) - return *sz1 < *sz2 ? -1 : *sz1 > *sz2; - else - return 0; - } - - inline wxChar* wxTmemcpy(wxChar* szOut, const wxChar* szIn, size_t len) - { - return (wxChar*) memcpy(szOut, szIn, len * sizeof(wxChar)); - } - - inline wxChar* wxTmemmove(wxChar* szOut, const wxChar* szIn, size_t len) - { - return (wxChar*) memmove(szOut, szIn, len * sizeof(wxChar)); - } - - inline wxChar* wxTmemset(wxChar* szOut, const wxChar cIn, size_t len) - { - wxChar* szRet = szOut; - - while (len--) - *szOut++ = cIn; - - return szRet; - } - #else /* !wxUSE_UNICODE */ - #if wxABI_VERSION >= 20805 - // for compatibility with earlier versions, these functions take - // "void *" but in the next wx version they will take "char *" so - // don't use them with void pointers (use the standard memxxx() - // with them) - inline char* wxTmemchr(const void* s, int c, size_t len) - { return (char*)memchr(s, c, len); } - inline int wxTmemcmp(const void* sz1, const void* sz2, size_t len) - { return memcmp(sz1, sz2, len); } - inline char* wxTmemcpy(void* szOut, const void* szIn, size_t len) - { return (char*)memcpy(szOut, szIn, len); } - inline char* wxTmemmove(void* szOut, const void* szIn, size_t len) - { return (char*)memmove(szOut, szIn, len); } - inline char* wxTmemset(void* szOut, int c, size_t len) - { return (char*)memset(szOut, c, len); } - #else - # define wxTmemchr memchr - # define wxTmemcmp memcmp - # define wxTmemcpy memcpy - # define wxTmemmove memmove - # define wxTmemset memset - #endif - #endif /* wxUSE_UNICODE/!wxUSE_UNICODE */ - -#endif /*__cplusplus*/ - - -#endif /* _WX_WXCHAR_H_ */ - diff --git a/desmume/src/windows/wx/include/wx/wxhtml.h b/desmume/src/windows/wx/include/wx/wxhtml.h deleted file mode 100644 index a401c93ee..000000000 --- a/desmume/src/windows/wx/include/wx/wxhtml.h +++ /dev/null @@ -1,22 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wxhtml.h -// Purpose: wxHTML library for wxWidgets -// Author: Vaclav Slavik -// RCS-ID: $Id: wxhtml.h 35650 2005-09-23 12:56:45Z MR $ -// Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_HTML_H_ -#define _WX_HTML_H_ - -#include "wx/html/htmldefs.h" -#include "wx/html/htmltag.h" -#include "wx/html/htmlcell.h" -#include "wx/html/htmlpars.h" -#include "wx/html/htmlwin.h" -#include "wx/html/winpars.h" -#include "wx/filesys.h" -#include "wx/html/helpctrl.h" - -#endif // __WXHTML_H__ diff --git a/desmume/src/windows/wx/include/wx/wxprec.h b/desmume/src/windows/wx/include/wx/wxprec.h deleted file mode 100644 index 851003665..000000000 --- a/desmume/src/windows/wx/include/wx/wxprec.h +++ /dev/null @@ -1,70 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/wxprec.h -// Purpose: Includes the appropriate files for precompiled headers -// Author: Julian Smart -// Modified by: -// Created: 01/02/97 -// RCS-ID: $Id: wxprec.h 39484 2006-05-31 12:18:02Z ABX $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -// compiler detection; includes setup.h -#include "wx/defs.h" - -// check if to use precompiled headers: do it for most Windows compilers unless -// explicitly disabled by defining NOPCH -#if defined(__VISUALC__) || \ - defined(__DMC__) || \ - defined(__VISAGECPP__) || \ - defined(__MWERKS__) || \ - defined(__WATCOMC__) || \ - defined(__BORLANDC__) - - - // If user did not request NOCPH and we're not building using configure - // then assume user wants precompiled headers. - #if !defined(NOPCH) && !defined(__WX_SETUP_H__) - #define WX_PRECOMP - #endif -#endif - -// For some reason, this must be defined for common dialogs to work. -#ifdef __WATCOMC__ - #define INCLUDE_COMMDLG_H 1 -#endif - -#ifdef WX_PRECOMP - -// include "wx/wxchar.h" first to ensure that UNICODE macro is correctly set -// _before_ including <windows.h> -#include "wx/wxchar.h" - -// include standard Windows headers -#if defined(__WXMSW__) - #include "wx/msw/wrapwin.h" - #include "wx/msw/wrapcctl.h" - #include "wx/msw/wrapcdlg.h" - #include "wx/msw/private.h" - #include "wx/msw/missing.h" -#endif - -// include all PalmOS headers at once -#ifdef __WXPALMOS__ -# include <PalmOS.h> -#endif - -// include <os2.h> -#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" - -#endif // WX_PRECOMP diff --git a/desmume/src/windows/wx/include/wx/wxshlb_cw.h b/desmume/src/windows/wx/include/wx/wxshlb_cw.h deleted file mode 100644 index 7c2247236..000000000 --- a/desmume/src/windows/wx/include/wx/wxshlb_cw.h +++ /dev/null @@ -1,65 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw.h -// Purpose: wxWidgets definitions for CodeWarrior builds -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wxshlb_cw.h 33744 2005-04-19 10:06:30Z SC $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 -#pragma old_argmatch on -#endif - -#if __option(profile) -#ifdef __cplusplus - #if __POWERPC__ - #include "wxshlb_PPC++_prof.mch" - #elif __INTEL__ - #include "wxshlb_x86++_prof.mch" - #elif __CFM68K__ - #include "wxshlb_cfm++_prof.mch" - #else - #include "wxshlb_68k++_prof.mch" - #endif -#else - #if __POWERPC__ - #include "wxshlb_PPC_prof.mch" - #elif __INTEL__ - #include "wxshlb_x86_prof.mch" - #elif __CFM68K__ - #include "wxshlb_cfm_prof.mch" - #else - #include "wxshlb_68k_prof.mch" - #endif -#endif -#else -#ifdef __cplusplus - #if __POWERPC__ - #include "wxshlb_PPC++.mch" - #elif __INTEL__ - #include "wxshlb_x86++.mch" - #elif __CFM68K__ - #include "wxshlb_cfm++.mch" - #else - #include "wxshlb_68k++.mch" - #endif -#else - #if __POWERPC__ - #include "wxshlb_PPC.mch" - #elif __INTEL__ - #include "wxshlb_x86.mch" - #elif __CFM68K__ - #include "wxshlb_cfm.mch" - #else - #include "wxshlb_68k.mch" - #endif -#endif -#endif -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wxshlb_cw_d.h b/desmume/src/windows/wx/include/wx/wxshlb_cw_d.h deleted file mode 100644 index 930cd0b1c..000000000 --- a/desmume/src/windows/wx/include/wx/wxshlb_cw_d.h +++ /dev/null @@ -1,46 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw_d.h -// Purpose: wxWidgets definitions for CodeWarrior builds (Debug) -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wxshlb_cw_d.h 33744 2005-04-19 10:06:30Z SC $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 -#pragma old_argmatch on -#endif - -#if __option(profile) -#error "profiling is not supported in debug versions" -#else -#ifdef __cplusplus - #if __POWERPC__ - #include "wxshlb_PPC++_d.mch" - #elif __INTEL__ - #include "wxshlb_x86++_d.mch" - #elif __CFM68K__ - #include "wxshlb_cfm++_d.mch" - #else - #include "wxshlb_68k++_d.mch" - #endif -#else - #if __POWERPC__ - #include "wxshlb_PPC_d.mch" - #elif __INTEL__ - #include "wxshlb_x86_d.mch" - #elif __CFM68K__ - #include "wxshlb_cfm_d.mch" - #else - #include "wxshlb_68k_d.mch" - #endif -#endif -#endif - -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wxshlb_cwc.h b/desmume/src/windows/wx/include/wx/wxshlb_cwc.h deleted file mode 100644 index cebad6bec..000000000 --- a/desmume/src/windows/wx/include/wx/wxshlb_cwc.h +++ /dev/null @@ -1,45 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw.h -// Purpose: wxWidgets definitions for CodeWarrior builds -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wxshlb_cwc.h 33744 2005-04-19 10:06:30Z SC $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 -#pragma old_argmatch on -#endif - -#if __option(profile) -#ifdef __cplusplus - #if __POWERPC__ - #include "wxshlb_Carbon++_prof.mch" - #endif -#else - #if __POWERPC__ - #include "wxshlb_Carbon_prof.mch" - #endif -#endif -#else -#ifdef __cplusplus - #if __MACH__ - #include "wxshlb_Mach++.mch" - #elif __POWERPC__ - #include "wxshlb_Carbon++.mch" - #endif -#else - #if __MACH__ - #include "wxshlb_Mach.mch" - #elif __POWERPC__ - #include "wxshlb_Carbon.mch" - #endif -#endif -#endif -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wxshlb_cwc_d.h b/desmume/src/windows/wx/include/wx/wxshlb_cwc_d.h deleted file mode 100644 index ee1094c7b..000000000 --- a/desmume/src/windows/wx/include/wx/wxshlb_cwc_d.h +++ /dev/null @@ -1,38 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw_d.h -// Purpose: wxWidgets definitions for CodeWarrior builds (Debug) -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wxshlb_cwc_d.h 33744 2005-04-19 10:06:30Z SC $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 -#pragma old_argmatch on -#endif - -#if __option(profile) -#error "profiling is not supported in debug versions" -#else -#ifdef __cplusplus - #ifdef __MACH__ - #include "wxshlb_Mach++_d.mch" - #elif __POWERPC__ - #include "wxshlb_Carbon++_d.mch" - #endif -#else - #ifdef __MACH__ - #include "wxshlb_Mach_d.mch" - #elif __POWERPC__ - #include "wxshlb_Carbon_d.mch" - #endif -#endif -#endif - -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wxshlba_cw.h b/desmume/src/windows/wx/include/wx/wxshlba_cw.h deleted file mode 100644 index 6769d008c..000000000 --- a/desmume/src/windows/wx/include/wx/wxshlba_cw.h +++ /dev/null @@ -1,65 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw.h -// Purpose: wxWidgets definitions for CodeWarrior builds -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wxshlba_cw.h 33744 2005-04-19 10:06:30Z SC $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 -#pragma old_argmatch on -#endif - -#if __option(profile) -#ifdef __cplusplus - #if __POWERPC__ - #include "wxshlba_PPC++_prof.mch" - #elif __INTEL__ - #include "wxshlba_x86++_prof.mch" - #elif __CFM68K__ - #include "wxshlba_cfm++_prof.mch" - #else - #include "wxshlba_68k++_prof.mch" - #endif -#else - #if __POWERPC__ - #include "wxshlba_PPC_prof.mch" - #elif __INTEL__ - #include "wxshlba_x86_prof.mch" - #elif __CFM68K__ - #include "wxshlba_cfm_prof.mch" - #else - #include "wxshlba_68k_prof.mch" - #endif -#endif -#else -#ifdef __cplusplus - #if __POWERPC__ - #include "wxshlba_PPC++.mch" - #elif __INTEL__ - #include "wxshlba_x86++.mch" - #elif __CFM68K__ - #include "wxshlba_cfm++.mch" - #else - #include "wxshlba_68k++.mch" - #endif -#else - #if __POWERPC__ - #include "wxshlba_PPC.mch" - #elif __INTEL__ - #include "wxshlba_x86.mch" - #elif __CFM68K__ - #include "wxshlba_cfm.mch" - #else - #include "wxshlba_68k.mch" - #endif -#endif -#endif -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wxshlba_cw_d.h b/desmume/src/windows/wx/include/wx/wxshlba_cw_d.h deleted file mode 100644 index 5d789dfb9..000000000 --- a/desmume/src/windows/wx/include/wx/wxshlba_cw_d.h +++ /dev/null @@ -1,46 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw_d.h -// Purpose: wxWidgets definitions for CodeWarrior builds (Debug) -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wxshlba_cw_d.h 33744 2005-04-19 10:06:30Z SC $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 -#pragma old_argmatch on -#endif - -#if __option(profile) -#error "profiling is not supported in debug versions" -#else -#ifdef __cplusplus - #if __POWERPC__ - #include "wxshlba_PPC++_d.mch" - #elif __INTEL__ - #include "wxshlba_x86++_d.mch" - #elif __CFM68K__ - #include "wxshlba_cfm++_d.mch" - #else - #include "wxshlba_68k++_d.mch" - #endif -#else - #if __POWERPC__ - #include "wxshlba_PPC_d.mch" - #elif __INTEL__ - #include "wxshlba_x86_d.mch" - #elif __CFM68K__ - #include "wxshlba_cfm_d.mch" - #else - #include "wxshlba_68k_d.mch" - #endif -#endif -#endif - -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wxshlba_cwc.h b/desmume/src/windows/wx/include/wx/wxshlba_cwc.h deleted file mode 100644 index 766b628ba..000000000 --- a/desmume/src/windows/wx/include/wx/wxshlba_cwc.h +++ /dev/null @@ -1,45 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw.h -// Purpose: wxWidgets definitions for CodeWarrior builds -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wxshlba_cwc.h 33744 2005-04-19 10:06:30Z SC $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 -#pragma old_argmatch on -#endif - -#if __option(profile) -#ifdef __cplusplus - #if __POWERPC__ - #include "wxshlba_Carbon++_prof.mch" - #endif -#else - #if __POWERPC__ - #include "wxshlba_Carbon_prof.mch" - #endif -#endif -#else -#ifdef __cplusplus - #ifdef __MACH__ - #include "wxshlba_Mach++.mch" - #elif __POWERPC__ - #include "wxshlba_Carbon++.mch" - #endif -#else - #ifdef __MACH__ - #include "wxshlba_Mach.mch" - #elif __POWERPC__ - #include "wxshlba_Carbon.mch" - #endif -#endif -#endif -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/wxshlba_cwc_d.h b/desmume/src/windows/wx/include/wx/wxshlba_cwc_d.h deleted file mode 100644 index bd5818203..000000000 --- a/desmume/src/windows/wx/include/wx/wxshlba_cwc_d.h +++ /dev/null @@ -1,38 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx_cw_d.h -// Purpose: wxWidgets definitions for CodeWarrior builds (Debug) -// Author: Stefan Csomor -// Modified by: -// Created: 12/10/98 -// RCS-ID: $Id: wxshlba_cwc_d.h 33744 2005-04-19 10:06:30Z SC $ -// Copyright: (c) Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_CW__ -#define _WX_CW__ - -#if __MWERKS__ >= 0x2400 -#pragma old_argmatch on -#endif - -#if __option(profile) -#error "profiling is not supported in debug versions" -#else -#ifdef __cplusplus - #ifdef __MACH__ - #include "wxshlba_Mach++_d.mch" - #elif __POWERPC__ - #include "wxshlba_Carbon++_d.mch" - #endif -#else - #ifdef __MACH__ - #include "wxshlba_Mach_d.mch" - #elif __POWERPC__ - #include "wxshlba_Carbon_d.mch" - #endif -#endif -#endif - -#endif - // _WX_CW__ diff --git a/desmume/src/windows/wx/include/wx/xml/xml.h b/desmume/src/windows/wx/include/wx/xml/xml.h deleted file mode 100644 index b2e808d88..000000000 --- a/desmume/src/windows/wx/include/wx/xml/xml.h +++ /dev/null @@ -1,252 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: xml.h -// Purpose: wxXmlDocument - XML parser & data holder class -// Author: Vaclav Slavik -// Created: 2000/03/05 -// RCS-ID: $Id: xml.h 52976 2008-04-02 10:06:54Z VS $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - - -#ifndef _WX_XML_H_ -#define _WX_XML_H_ - -#include "wx/defs.h" - -#if wxUSE_XML - -#include "wx/string.h" -#include "wx/object.h" -#include "wx/list.h" - -#ifdef WXMAKINGDLL_XML - #define WXDLLIMPEXP_XML WXEXPORT -#elif defined(WXUSINGDLL) - #define WXDLLIMPEXP_XML WXIMPORT -#else // not making nor using DLL - #define WXDLLIMPEXP_XML -#endif - -class WXDLLIMPEXP_FWD_XML wxXmlNode; -class WXDLLIMPEXP_FWD_XML wxXmlProperty; -class WXDLLIMPEXP_FWD_XML wxXmlDocument; -class WXDLLIMPEXP_FWD_XML wxXmlIOHandler; -class WXDLLIMPEXP_FWD_BASE wxInputStream; -class WXDLLIMPEXP_FWD_BASE wxOutputStream; - - -// Represents XML node type. -enum wxXmlNodeType -{ - // note: values are synchronized with xmlElementType from libxml - wxXML_ELEMENT_NODE = 1, - wxXML_ATTRIBUTE_NODE = 2, - wxXML_TEXT_NODE = 3, - wxXML_CDATA_SECTION_NODE = 4, - wxXML_ENTITY_REF_NODE = 5, - wxXML_ENTITY_NODE = 6, - wxXML_PI_NODE = 7, - wxXML_COMMENT_NODE = 8, - wxXML_DOCUMENT_NODE = 9, - wxXML_DOCUMENT_TYPE_NODE = 10, - wxXML_DOCUMENT_FRAG_NODE = 11, - wxXML_NOTATION_NODE = 12, - wxXML_HTML_DOCUMENT_NODE = 13 -}; - - -// Represents node property(ies). -// Example: in <img src="hello.gif" id="3"/> "src" is property with value -// "hello.gif" and "id" is prop. with value "3". - -class WXDLLIMPEXP_XML wxXmlProperty -{ -public: - wxXmlProperty() : m_next(NULL) {} - wxXmlProperty(const wxString& name, const wxString& value, - wxXmlProperty *next = NULL) - : m_name(name), m_value(value), m_next(next) {} - virtual ~wxXmlProperty() {} - - wxString GetName() const { return m_name; } - wxString GetValue() const { return m_value; } - wxXmlProperty *GetNext() const { return m_next; } - - void SetName(const wxString& name) { m_name = name; } - void SetValue(const wxString& value) { m_value = value; } - void SetNext(wxXmlProperty *next) { m_next = next; } - -private: - wxString m_name; - wxString m_value; - wxXmlProperty *m_next; -}; - - - -// Represents node in XML document. Node has name and may have content -// and properties. Most common node types are wxXML_TEXT_NODE (name and props -// are irrelevant) and wxXML_ELEMENT_NODE (e.g. in <title>hi there is -// element with name="title", irrelevant content and one child (wxXML_TEXT_NODE -// with content="hi"). -// -// If wxUSE_UNICODE is 0, all strings are encoded in the encoding given to Load -// (default is UTF-8). - -class WXDLLIMPEXP_XML wxXmlNode -{ -public: - wxXmlNode() : m_properties(NULL), m_parent(NULL), - m_children(NULL), m_next(NULL) {} - wxXmlNode(wxXmlNode *parent, wxXmlNodeType type, - const wxString& name, const wxString& content = wxEmptyString, - wxXmlProperty *props = NULL, wxXmlNode *next = NULL); - virtual ~wxXmlNode(); - - // copy ctor & operator=. Note that this does NOT copy syblings - // and parent pointer, i.e. m_parent and m_next will be NULL - // after using copy ctor and are never unmodified by operator=. - // On the other hand, it DOES copy children and properties. - wxXmlNode(const wxXmlNode& node); - wxXmlNode& operator=(const wxXmlNode& node); - - // user-friendly creation: - wxXmlNode(wxXmlNodeType type, const wxString& name, - const wxString& content = wxEmptyString); - virtual void AddChild(wxXmlNode *child); - virtual bool InsertChild(wxXmlNode *child, wxXmlNode *followingNode); -#if wxABI_VERSION >= 20808 - bool InsertChildAfter(wxXmlNode *child, wxXmlNode *precedingNode); -#endif - virtual bool RemoveChild(wxXmlNode *child); - virtual void AddProperty(const wxString& name, const wxString& value); - virtual bool DeleteProperty(const wxString& name); - - // access methods: - wxXmlNodeType GetType() const { return m_type; } - wxString GetName() const { return m_name; } - wxString GetContent() const { return m_content; } - - bool IsWhitespaceOnly() const; - int GetDepth(wxXmlNode *grandparent = NULL) const; - - // Gets node content from wxXML_ENTITY_NODE - // The problem is, content is represented as - // wxXML_ENTITY_NODE name="tag", content="" - // |-- wxXML_TEXT_NODE or - // wxXML_CDATA_SECTION_NODE name="" content="content" - wxString GetNodeContent() const; - - wxXmlNode *GetParent() const { return m_parent; } - wxXmlNode *GetNext() const { return m_next; } - wxXmlNode *GetChildren() const { return m_children; } - - wxXmlProperty *GetProperties() const { return m_properties; } - bool GetPropVal(const wxString& propName, wxString *value) const; - wxString GetPropVal(const wxString& propName, - const wxString& defaultVal) const; - bool HasProp(const wxString& propName) const; - - void SetType(wxXmlNodeType type) { m_type = type; } - void SetName(const wxString& name) { m_name = name; } - void SetContent(const wxString& con) { m_content = con; } - - void SetParent(wxXmlNode *parent) { m_parent = parent; } - void SetNext(wxXmlNode *next) { m_next = next; } - void SetChildren(wxXmlNode *child) { m_children = child; } - - void SetProperties(wxXmlProperty *prop) { m_properties = prop; } - virtual void AddProperty(wxXmlProperty *prop); - -private: - wxXmlNodeType m_type; - wxString m_name; - wxString m_content; - wxXmlProperty *m_properties; - wxXmlNode *m_parent, *m_children, *m_next; - - void DoCopy(const wxXmlNode& node); -}; - - - -// special indentation value for wxXmlDocument::Save -#define wxXML_NO_INDENTATION (-1) - -// flags for wxXmlDocument::Load -enum wxXmlDocumentLoadFlag -{ - wxXMLDOC_NONE = 0, - wxXMLDOC_KEEP_WHITESPACE_NODES = 1 -}; - - -// This class holds XML data/document as parsed by XML parser. - -class WXDLLIMPEXP_XML wxXmlDocument : public wxObject -{ -public: - wxXmlDocument(); - wxXmlDocument(const wxString& filename, - const wxString& encoding = wxT("UTF-8")); - wxXmlDocument(wxInputStream& stream, - const wxString& encoding = wxT("UTF-8")); - virtual ~wxXmlDocument() { wxDELETE(m_root); } - - wxXmlDocument(const wxXmlDocument& doc); - wxXmlDocument& operator=(const wxXmlDocument& doc); - - // Parses .xml file and loads data. Returns TRUE on success, FALSE - // otherwise. - virtual bool Load(const wxString& filename, - const wxString& encoding = wxT("UTF-8"), int flags = wxXMLDOC_NONE); - virtual bool Load(wxInputStream& stream, - const wxString& encoding = wxT("UTF-8"), int flags = wxXMLDOC_NONE); - - // Saves document as .xml file. - virtual bool Save(const wxString& filename, int indentstep = 1) const; - virtual bool Save(wxOutputStream& stream, int indentstep = 1) const; - - bool IsOk() const { return m_root != NULL; } - - // Returns root node of the document. - wxXmlNode *GetRoot() const { return m_root; } - - // Returns version of document (may be empty). - wxString GetVersion() const { return m_version; } - // Returns encoding of document (may be empty). - // Note: this is the encoding original file was saved in, *not* the - // encoding of in-memory representation! - wxString GetFileEncoding() const { return m_fileEncoding; } - - // Write-access methods: - wxXmlNode *DetachRoot() { wxXmlNode *old=m_root; m_root=NULL; return old; } - void SetRoot(wxXmlNode *node) { wxDELETE(m_root); m_root = node; } - void SetVersion(const wxString& version) { m_version = version; } - void SetFileEncoding(const wxString& encoding) { m_fileEncoding = encoding; } - -#if !wxUSE_UNICODE - // Returns encoding of in-memory representation of the document - // (same as passed to Load or ctor, defaults to UTF-8). - // NB: this is meaningless in Unicode build where data are stored as wchar_t* - wxString GetEncoding() const { return m_encoding; } - void SetEncoding(const wxString& enc) { m_encoding = enc; } -#endif - -private: - wxString m_version; - wxString m_fileEncoding; -#if !wxUSE_UNICODE - wxString m_encoding; -#endif - wxXmlNode *m_root; - - void DoCopy(const wxXmlDocument& doc); - - DECLARE_CLASS(wxXmlDocument) -}; - -#endif // wxUSE_XML - -#endif // _WX_XML_H_ diff --git a/desmume/src/windows/wx/include/wx/xpmdecod.h b/desmume/src/windows/wx/include/wx/xpmdecod.h deleted file mode 100644 index 939104368..000000000 --- a/desmume/src/windows/wx/include/wx/xpmdecod.h +++ /dev/null @@ -1,47 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xpmdecod.h -// Purpose: wxXPMDecoder, XPM reader for wxImage and wxBitmap -// Author: Vaclav Slavik -// CVS-ID: $Id: xpmdecod.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 2001 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XPMDECOD_H_ -#define _WX_XPMDECOD_H_ - -#include "wx/defs.h" - -#if wxUSE_IMAGE && wxUSE_XPM - -class WXDLLIMPEXP_FWD_CORE wxImage; -class WXDLLIMPEXP_FWD_BASE wxInputStream; - -// -------------------------------------------------------------------------- -// wxXPMDecoder class -// -------------------------------------------------------------------------- - -class WXDLLEXPORT wxXPMDecoder -{ -public: - // constructor, destructor, etc. - wxXPMDecoder() {} - ~wxXPMDecoder() {} - -#if wxUSE_STREAMS - // Is the stream XPM file? - bool CanRead(wxInputStream& stream); - // Read XPM file from the stream, parse it and create image from it - wxImage ReadFile(wxInputStream& stream); -#endif - // Read directly from XPM data (as passed to wxBitmap ctor): - wxImage ReadData(const char* const* xpm_data); -#ifdef __BORLANDC__ - // needed for Borland 5.5 - wxImage ReadData(char** xpm_data) { return ReadData(wx_const_cast(const char* const*, xpm_data)); } -#endif -}; - -#endif // wxUSE_IMAGE && wxUSE_XPM - -#endif // _WX_XPM_H_ diff --git a/desmume/src/windows/wx/include/wx/xpmhand.h b/desmume/src/windows/wx/include/wx/xpmhand.h deleted file mode 100644 index 4207f7da8..000000000 --- a/desmume/src/windows/wx/include/wx/xpmhand.h +++ /dev/null @@ -1,25 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xpmhand.h -// Purpose: XPM handler base header -// Author: Julian Smart -// Modified by: -// Created: -// RCS-ID: $Id: xpmhand.h 33948 2005-05-04 18:57:50Z JS $ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XPMHAND_H_BASE_ -#define _WX_XPMHAND_H_BASE_ - -// Only wxMSW and wxPM currently defines a separate XPM handler, since -// mostly Windows and Presentation Manager apps won't need XPMs. -#if defined(__WXMSW__) -#error xpmhand.h is no longer needed since wxImage now handles XPMs. -#endif -#if defined(__WXPM__) -#include "wx/os2/xpmhand.h" -#endif - -#endif - // _WX_XPMHAND_H_BASE_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_all.h b/desmume/src/windows/wx/include/wx/xrc/xh_all.h deleted file mode 100644 index 9132fbbcb..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_all.h +++ /dev/null @@ -1,74 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_all.h -// Purpose: includes all xh_*.h files -// Author: Vaclav Slavik -// Created: 2000/03/05 -// RCS-ID: $Id: xh_all.h 48045 2007-08-13 12:05:18Z JS $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_ALL_H_ -#define _WX_XH_ALL_H_ - - -// Existing handlers: - -#include "wx/xrc/xh_menu.h" -#include "wx/xrc/xh_panel.h" -#include "wx/xrc/xh_dlg.h" -#include "wx/xrc/xh_bttn.h" -#include "wx/xrc/xh_chckb.h" -#include "wx/xrc/xh_tglbtn.h" -#include "wx/xrc/xh_gauge.h" -#include "wx/xrc/xh_html.h" -#include "wx/xrc/xh_spin.h" -#include "wx/xrc/xh_sttxt.h" -#include "wx/xrc/xh_slidr.h" -#include "wx/xrc/xh_radbt.h" -#include "wx/xrc/xh_radbx.h" -#include "wx/xrc/xh_combo.h" -#include "wx/xrc/xh_chckl.h" -#include "wx/xrc/xh_choic.h" -#include "wx/xrc/xh_datectrl.h" -#include "wx/xrc/xh_sizer.h" -#include "wx/xrc/xh_stbmp.h" -#include "wx/xrc/xh_notbk.h" -#include "wx/xrc/xh_odcombo.h" -#include "wx/xrc/xh_listbk.h" -#include "wx/xrc/xh_choicbk.h" -#include "wx/xrc/xh_treebk.h" -#include "wx/xrc/xh_text.h" -#include "wx/xrc/xh_listb.h" -#include "wx/xrc/xh_toolb.h" -#include "wx/xrc/xh_bmpbt.h" -#include "wx/xrc/xh_stbox.h" -#include "wx/xrc/xh_scrol.h" -#include "wx/xrc/xh_tree.h" -#include "wx/xrc/xh_cald.h" -#include "wx/xrc/xh_listc.h" -#include "wx/xrc/xh_stlin.h" -#include "wx/xrc/xh_bmp.h" -#include "wx/xrc/xh_unkwn.h" -#include "wx/xrc/xh_gdctl.h" -#include "wx/xrc/xh_frame.h" -#include "wx/xrc/xh_scwin.h" -#include "wx/xrc/xh_htmllbox.h" -#include "wx/xrc/xh_split.h" -#include "wx/xrc/xh_wizrd.h" -#include "wx/xrc/xh_statbar.h" -#include "wx/xrc/xh_mdi.h" -#include "wx/xrc/xh_grid.h" -#include "wx/xrc/xh_clrpicker.h" -#include "wx/xrc/xh_filepicker.h" -#include "wx/xrc/xh_fontpicker.h" -#include "wx/xrc/xh_dirpicker.h" -#include "wx/xrc/xh_hyperlink.h" -#include "wx/xrc/xh_bmpcbox.h" -#include "wx/xrc/xh_animatctrl.h" -#include "wx/xrc/xh_collpane.h" -#if wxABI_VERSION >= 20805 -#include "wx/xrc/xh_propdlg.h" -#endif - -#endif // _WX_XH_ALL_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_animatctrl.h b/desmume/src/windows/wx/include/wx/xrc/xh_animatctrl.h deleted file mode 100644 index 699a0413c..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_animatctrl.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_animatctrl.h -// Purpose: XML resource handler for wxAnimationCtrl -// Author: Francesco Montorsi -// Created: 2006-10-15 -// RCS-ID: $Id: xh_animatctrl.h 42196 2006-10-21 13:59:25Z RR $ -// Copyright: (c) 2006 Francesco Montorsi -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_ANIMATIONCTRL_H_ -#define _WX_XH_ANIMATIONCTRL_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_ANIMATIONCTRL - -class WXDLLIMPEXP_XRC wxAnimationCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxAnimationCtrlXmlHandler) - -public: - wxAnimationCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_ANIMATIONCTRL - -#endif // _WX_XH_ANIMATIONCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_bmp.h b/desmume/src/windows/wx/include/wx/xrc/xh_bmp.h deleted file mode 100644 index 40698e084..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_bmp.h +++ /dev/null @@ -1,40 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_bmp.h -// Purpose: XML resource handler for wxBitmap and wxIcon -// Author: Vaclav Slavik -// Created: 2000/09/00 -// RCS-ID: $Id: xh_bmp.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_BMP_H_ -#define _WX_XH_BMP_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC - -class WXDLLIMPEXP_XRC wxBitmapXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxBitmapXmlHandler) - -public: - wxBitmapXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -class WXDLLIMPEXP_XRC wxIconXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxIconXmlHandler) - -public: - wxIconXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC - -#endif // _WX_XH_BMP_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_bmpbt.h b/desmume/src/windows/wx/include/wx/xrc/xh_bmpbt.h deleted file mode 100644 index 28b763fa7..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_bmpbt.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_bmpbt.h -// Purpose: XML resource handler for bitmap buttons -// Author: Brian Gavin -// Created: 2000/03/05 -// RCS-ID: $Id: xh_bmpbt.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Brian Gavin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_BMPBT_H_ -#define _WX_XH_BMPBT_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_BMPBUTTON - -class WXDLLIMPEXP_XRC wxBitmapButtonXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxBitmapButtonXmlHandler) - -public: - wxBitmapButtonXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_BMPBUTTON - -#endif // _WX_XH_BMPBT_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_bmpcbox.h b/desmume/src/windows/wx/include/wx/xrc/xh_bmpcbox.h deleted file mode 100644 index f00d98a35..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_bmpcbox.h +++ /dev/null @@ -1,36 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_bmpcbox.h -// Purpose: XML resource handler for wxBitmapComboBox -// Author: Jaakko Salli -// Created: Sep-10-2006 -// RCS-ID: $Id: xh_bmpcbox.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 2006 Jaakko Salli -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_BMPCBOX_H_ -#define _WX_XH_BMPCBOX_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_BITMAPCOMBOBOX - -class WXDLLIMPEXP_FWD_ADV wxBitmapComboBox; - -class WXDLLIMPEXP_XRC wxBitmapComboBoxXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxBitmapComboBoxXmlHandler) - -public: - wxBitmapComboBoxXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - wxBitmapComboBox* m_combobox; - bool m_isInside; -}; - -#endif // wxUSE_XRC && wxUSE_BITMAPCOMBOBOX - -#endif // _WX_XH_BMPCBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_bttn.h b/desmume/src/windows/wx/include/wx/xrc/xh_bttn.h deleted file mode 100644 index aae80baad..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_bttn.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_bttn.h -// Purpose: XML resource handler for buttons -// Author: Vaclav Slavik -// Created: 2000/03/05 -// RCS-ID: $Id: xh_bttn.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_BTTN_H_ -#define _WX_XH_BTTN_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_BUTTON - -class WXDLLIMPEXP_XRC wxButtonXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxButtonXmlHandler) - -public: - wxButtonXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_BUTTON - -#endif // _WX_XH_BTTN_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_cald.h b/desmume/src/windows/wx/include/wx/xrc/xh_cald.h deleted file mode 100644 index 8d9ad664a..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_cald.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_cald.h -// Purpose: XML resource handler for wxCalendarCtrl -// Author: Brian Gavin -// Created: 2000/09/09 -// RCS-ID: $Id: xh_cald.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Brian Gavin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_CALD_H_ -#define _WX_XH_CALD_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_CALENDARCTRL - -class WXDLLIMPEXP_XRC wxCalendarCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxCalendarCtrlXmlHandler) - -public: - wxCalendarCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_CALENDARCTRL - -#endif // _WX_XH_CALD_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_chckb.h b/desmume/src/windows/wx/include/wx/xrc/xh_chckb.h deleted file mode 100644 index c9b8e74a8..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_chckb.h +++ /dev/null @@ -1,31 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_chckb.h -// Purpose: XML resource handler for wxCheckBox -// Author: Bob Mitchell -// Created: 2000/03/21 -// RCS-ID: $Id: xh_chckb.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell and Verant Interactive -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_CHCKB_H_ -#define _WX_XH_CHCKB_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_CHECKBOX - -class WXDLLIMPEXP_XRC wxCheckBoxXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxCheckBoxXmlHandler) - -public: - wxCheckBoxXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_CHECKBOX - -#endif // _WX_XH_CHECKBOX_H_ - diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_chckl.h b/desmume/src/windows/wx/include/wx/xrc/xh_chckl.h deleted file mode 100644 index 4969356c8..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_chckl.h +++ /dev/null @@ -1,34 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_chckl.h -// Purpose: XML resource handler for wxCheckListBox -// Author: Bob Mitchell -// Created: 2000/03/21 -// RCS-ID: $Id: xh_chckl.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell and Verant Interactive -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_CHCKL_H_ -#define _WX_XH_CHCKL_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_CHECKLISTBOX - -class WXDLLIMPEXP_XRC wxCheckListBoxXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxCheckListBoxXmlHandler) - -public: - wxCheckListBoxXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_insideBox; - wxArrayString strList; -}; - -#endif // wxUSE_XRC && wxUSE_CHECKLISTBOX - -#endif // _WX_XH_CHECKLIST_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_choic.h b/desmume/src/windows/wx/include/wx/xrc/xh_choic.h deleted file mode 100644 index 770d4de12..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_choic.h +++ /dev/null @@ -1,34 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_choic.h -// Purpose: XML resource handler for wxChoice -// Author: Bob Mitchell -// Created: 2000/03/21 -// RCS-ID: $Id: xh_choic.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell and Verant Interactive -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_CHOIC_H_ -#define _WX_XH_CHOIC_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_CHOICE - -class WXDLLIMPEXP_XRC wxChoiceXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxChoiceXmlHandler) - -public: - wxChoiceXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_insideBox; - wxArrayString strList; -}; - -#endif // wxUSE_XRC && wxUSE_CHOICE - -#endif // _WX_XH_CHOIC_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_choicbk.h b/desmume/src/windows/wx/include/wx/xrc/xh_choicbk.h deleted file mode 100644 index 20c5346eb..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_choicbk.h +++ /dev/null @@ -1,34 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_choicbk.h -// Purpose: XML resource handler for wxChoicebook -// Author: Vaclav Slavik -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_CHOICEBK_H_ -#define _WX_XH_CHOICEBK_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_CHOICEBOOK - -class WXDLLIMPEXP_FWD_CORE wxChoicebook; - -class WXDLLIMPEXP_XRC wxChoicebookXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxChoicebookXmlHandler) - -public: - wxChoicebookXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_isInside; - wxChoicebook *m_choicebook; -}; - -#endif // wxUSE_XRC && wxUSE_CHOICEBOOK - -#endif // _WX_XH_CHOICEBK_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_clrpicker.h b/desmume/src/windows/wx/include/wx/xrc/xh_clrpicker.h deleted file mode 100644 index 43ff72f09..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_clrpicker.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_clrpicker.h -// Purpose: XML resource handler for wxColourPickerCtrl -// Author: Francesco Montorsi -// Created: 2006-04-17 -// RCS-ID: $Id: xh_clrpicker.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2006 Francesco Montorsi -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_CLRPICKERCTRL_H_ -#define _WX_XH_CLRPICKERCTRL_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_COLOURPICKERCTRL - -class WXDLLIMPEXP_XRC wxColourPickerCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxColourPickerCtrlXmlHandler) - -public: - wxColourPickerCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_COLOURPICKERCTRL - -#endif // _WX_XH_CLRPICKERCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_collpane.h b/desmume/src/windows/wx/include/wx/xrc/xh_collpane.h deleted file mode 100644 index 4b758b168..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_collpane.h +++ /dev/null @@ -1,36 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_collpane.h -// Purpose: XML resource handler for wxCollapsiblePane -// Author: Francesco Montorsi -// Created: 2006-10-27 -// RCS-ID: $Id: xh_collpane.h 52422 2008-03-10 13:55:07Z VZ $ -// Copyright: (c) 2006 Francesco Montorsi -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_COLLPANE_H_ -#define _WX_XH_COLLPANE_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_COLLPANE - -class WXDLLIMPEXP_FWD_CORE wxCollapsiblePane; - -class WXDLLIMPEXP_XRC wxCollapsiblePaneXmlHandler : public wxXmlResourceHandler -{ -public: - wxCollapsiblePaneXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_isInside; - wxCollapsiblePane *m_collpane; - - DECLARE_DYNAMIC_CLASS(wxCollapsiblePaneXmlHandler) -}; - -#endif // wxUSE_XRC && wxUSE_COLLPANE - -#endif // _WX_XH_COLLPANE_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_combo.h b/desmume/src/windows/wx/include/wx/xrc/xh_combo.h deleted file mode 100644 index d57cc6179..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_combo.h +++ /dev/null @@ -1,34 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_combo.h -// Purpose: XML resource handler for wxComboBox -// Author: Bob Mitchell -// Created: 2000/03/21 -// RCS-ID: $Id: xh_combo.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell and Verant Interactive -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_COMBO_H_ -#define _WX_XH_COMBO_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_COMBOBOX - -class WXDLLIMPEXP_XRC wxComboBoxXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxComboBoxXmlHandler) - -public: - wxComboBoxXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_insideBox; - wxArrayString strList; -}; - -#endif // wxUSE_XRC && wxUSE_COMBOBOX - -#endif // _WX_XH_COMBO_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_datectrl.h b/desmume/src/windows/wx/include/wx/xrc/xh_datectrl.h deleted file mode 100644 index 0fdb0835b..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_datectrl.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_datectrl.h -// Purpose: XML resource handler for wxDatePickerCtrl -// Author: Vaclav Slavik -// Created: 2005-02-07 -// RCS-ID: $Id: xh_datectrl.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2005 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_DATECTRL_H_ -#define _WX_XH_DATECTRL_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_DATEPICKCTRL - -class WXDLLIMPEXP_XRC wxDateCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxDateCtrlXmlHandler) - -public: - wxDateCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_DATEPICKCTRL - -#endif // _WX_XH_DATECTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_dirpicker.h b/desmume/src/windows/wx/include/wx/xrc/xh_dirpicker.h deleted file mode 100644 index 24b98f579..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_dirpicker.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_dirpicker.h -// Purpose: XML resource handler for wxDirPickerCtrl -// Author: Francesco Montorsi -// Created: 2006-04-17 -// RCS-ID: $Id: xh_dirpicker.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2006 Francesco Montorsi -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_DIRPICKERCTRL_H_ -#define _WX_XH_DIRPICKERCTRL_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_DIRPICKERCTRL - -class WXDLLIMPEXP_XRC wxDirPickerCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxDirPickerCtrlXmlHandler) - -public: - wxDirPickerCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_DIRPICKERCTRL - -#endif // _WX_XH_DIRPICKERCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_dlg.h b/desmume/src/windows/wx/include/wx/xrc/xh_dlg.h deleted file mode 100644 index e12a43956..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_dlg.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_dlg.h -// Purpose: XML resource handler for dialogs -// Author: Vaclav Slavik -// Created: 2000/03/05 -// RCS-ID: $Id: xh_dlg.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_DLG_H_ -#define _WX_XH_DLG_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC - -class WXDLLIMPEXP_XRC wxDialogXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxDialogXmlHandler) - -public: - wxDialogXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC - -#endif // _WX_XH_DLG_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_filepicker.h b/desmume/src/windows/wx/include/wx/xrc/xh_filepicker.h deleted file mode 100644 index 0a64ad859..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_filepicker.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_filepicker.h -// Purpose: XML resource handler for wxFilePickerCtrl -// Author: Francesco Montorsi -// Created: 2006-04-17 -// RCS-ID: $Id: xh_filepicker.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2006 Francesco Montorsi -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_FILEPICKERCTRL_H_ -#define _WX_XH_FILEPICKERCTRL_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_FILEPICKERCTRL - -class WXDLLIMPEXP_XRC wxFilePickerCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxFilePickerCtrlXmlHandler) - -public: - wxFilePickerCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_FILEPICKERCTRL - -#endif // _WX_XH_FILEPICKERCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_fontpicker.h b/desmume/src/windows/wx/include/wx/xrc/xh_fontpicker.h deleted file mode 100644 index bbc661279..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_fontpicker.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_fontpicker.h -// Purpose: XML resource handler for wxFontPickerCtrl -// Author: Francesco Montorsi -// Created: 2006-04-17 -// RCS-ID: $Id: xh_fontpicker.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2006 Francesco Montorsi -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_FONTPICKERCTRL_H_ -#define _WX_XH_FONTPICKERCTRL_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_FONTPICKERCTRL - -class WXDLLIMPEXP_XRC wxFontPickerCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxFontPickerCtrlXmlHandler) - -public: - wxFontPickerCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_FONTPICKERCTRL - -#endif // _WX_XH_FONTPICKERCTRL_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_frame.h b/desmume/src/windows/wx/include/wx/xrc/xh_frame.h deleted file mode 100644 index 3bfcbe5b0..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_frame.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_frame.h -// Purpose: XML resource handler for wxFrame -// Author: Vaclav Slavik & Aleks. -// Created: 2000/03/05 -// RCS-ID: $Id: xh_frame.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_FRAME_H_ -#define _WX_XH_FRAME_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC - -class WXDLLIMPEXP_XRC wxFrameXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxFrameXmlHandler) - -public: - wxFrameXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC - -#endif // _WX_XH_FRAME_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_gauge.h b/desmume/src/windows/wx/include/wx/xrc/xh_gauge.h deleted file mode 100644 index 05ce86520..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_gauge.h +++ /dev/null @@ -1,34 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_gauge.h -// Purpose: XML resource handler for wxGauge -// Author: Bob Mitchell -// Created: 2000/03/21 -// RCS-ID: $Id: xh_gauge.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell and Verant Interactive -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_GAUGE_H_ -#define _WX_XH_GAUGE_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_GAUGE - -class WXDLLIMPEXP_XRC wxGaugeXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxGaugeXmlHandler) - enum - { - wxGAUGE_DEFAULT_RANGE = 100 - }; - -public: - wxGaugeXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_GAUGE - -#endif // _WX_XH_GAUGE_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_gdctl.h b/desmume/src/windows/wx/include/wx/xrc/xh_gdctl.h deleted file mode 100644 index f706ccfb8..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_gdctl.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_gdctl.h -// Purpose: XML resource handler for wxGenericDirCtrl -// Author: Markus Greither -// Created: 2002/01/20 -// RCS-ID: $Id: xh_gdctl.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2002 Markus Greither -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_GDCTL_H_ -#define _WX_XH_GDCTL_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_DIRDLG - -class WXDLLIMPEXP_XRC wxGenericDirCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxGenericDirCtrlXmlHandler) - -public: - wxGenericDirCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_DIRDLG - -#endif // _WX_XH_GDCTL_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_grid.h b/desmume/src/windows/wx/include/wx/xrc/xh_grid.h deleted file mode 100644 index 0cabb4b88..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_grid.h +++ /dev/null @@ -1,31 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_grid.h -// Purpose: XML resource handler for wxGrid -// Author: Agron Selimaj -// Created: 2005/08/11 -// RCS-ID: $Id: xh_grid.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2005 Agron Selimaj, Freepour Controls Inc. -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_GRD_H_ -#define _WX_XH_GRD_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_GRID - -class WXDLLIMPEXP_XRC wxGridXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxGridXmlHandler) - -public: - wxGridXmlHandler(); - - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_GRID - -#endif // _WX_XH_GRD_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_html.h b/desmume/src/windows/wx/include/wx/xrc/xh_html.h deleted file mode 100644 index 770ea9ad1..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_html.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_html.h -// Purpose: XML resource handler for wxHtmlWindow -// Author: Bob Mitchell -// Created: 2000/03/21 -// RCS-ID: $Id: xh_html.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell and Verant Interactive -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_HTML_H_ -#define _WX_XH_HTML_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_HTML - -class WXDLLIMPEXP_XRC wxHtmlWindowXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxHtmlWindowXmlHandler) - -public: - wxHtmlWindowXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_HTML - -#endif // _WX_XH_HTML_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_htmllbox.h b/desmume/src/windows/wx/include/wx/xrc/xh_htmllbox.h deleted file mode 100644 index e5c5ff943..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_htmllbox.h +++ /dev/null @@ -1,34 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_htmllbox.h -// Purpose: XML resource handler for wxSimpleHtmlListBox -// Author: Francesco Montorsi -// Created: 2006/10/21 -// RCS-ID: $Id: xh_htmllbox.h 42257 2006-10-22 22:09:16Z VZ $ -// Copyright: (c) 2006 Francesco Montorsi -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_SIMPLEHTMLLISTBOX_H_ -#define _WX_XH_SIMPLEHTMLLISTBOX_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_HTML - -class WXDLLIMPEXP_XRC wxSimpleHtmlListBoxXmlHandler : public wxXmlResourceHandler -{ -public: - wxSimpleHtmlListBoxXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_insideBox; - wxArrayString strList; - - DECLARE_DYNAMIC_CLASS(wxSimpleHtmlListBoxXmlHandler) -}; - -#endif // wxUSE_XRC && wxUSE_HTML - -#endif // _WX_XH_SIMPLEHTMLLISTBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_hyperlink.h b/desmume/src/windows/wx/include/wx/xrc/xh_hyperlink.h deleted file mode 100644 index 573359faf..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_hyperlink.h +++ /dev/null @@ -1,37 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_hyperlink.h -// Purpose: Hyperlink control (wxAdv) -// Author: David Norris -// Modified by: Ryan Norton, Francesco Montorsi -// Created: 04/02/2005 -// RCS-ID: $Id: xh_hyperlink.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2005 David Norris -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_HYPERLINKH__ -#define _WX_XH_HYPERLINKH__ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_HYPERLINKCTRL - -class WXDLLIMPEXP_XRC wxHyperlinkCtrlXmlHandler : public wxXmlResourceHandler -{ - // Register with wxWindows' dynamic class subsystem. - DECLARE_DYNAMIC_CLASS(wxHyperlinkCtrlXmlHandler) - -public: - // Constructor. - wxHyperlinkCtrlXmlHandler(); - - // Creates the control and returns a pointer to it. - virtual wxObject *DoCreateResource(); - - // Returns true if we know how to create a control for the given node. - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_HYPERLINKCTRL - -#endif // _WX_XH_HYPERLINKH__ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_listb.h b/desmume/src/windows/wx/include/wx/xrc/xh_listb.h deleted file mode 100644 index 53c135066..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_listb.h +++ /dev/null @@ -1,34 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_listb.h -// Purpose: XML resource handler for wxListbox -// Author: Bob Mitchell & Vaclav Slavik -// Created: 2000/07/29 -// RCS-ID: $Id: xh_listb.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell & Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_LISTB_H_ -#define _WX_XH_LISTB_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_LISTBOX - -class WXDLLIMPEXP_XRC wxListBoxXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxListBoxXmlHandler) - -public: - wxListBoxXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_insideBox; - wxArrayString strList; -}; - -#endif // wxUSE_XRC && wxUSE_LISTBOX - -#endif // _WX_XH_LISTB_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_listbk.h b/desmume/src/windows/wx/include/wx/xrc/xh_listbk.h deleted file mode 100644 index 7aa2e0b2f..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_listbk.h +++ /dev/null @@ -1,34 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_listbk.h -// Purpose: XML resource handler for wxListbook -// Author: Vaclav Slavik -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_LISTBK_H_ -#define _WX_XH_LISTBK_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_LISTBOOK - -class WXDLLIMPEXP_FWD_CORE wxListbook; - -class WXDLLIMPEXP_XRC wxListbookXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxListbookXmlHandler) - -public: - wxListbookXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_isInside; - wxListbook *m_listbook; -}; - -#endif // wxUSE_XRC && wxUSE_LISTBOOK - -#endif // _WX_XH_LISTBK_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_listc.h b/desmume/src/windows/wx/include/wx/xrc/xh_listc.h deleted file mode 100644 index 33b19d9d7..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_listc.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_listc.h -// Purpose: XML resource handler for wxListCtrl -// Author: Brian Gavin -// Created: 2000/09/09 -// RCS-ID: $Id: xh_listc.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Brian Gavin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_LISTC_H_ -#define _WX_XH_LISTC_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_LISTCTRL - -class WXDLLIMPEXP_XRC wxListCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxListCtrlXmlHandler) - -public: - wxListCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_LISTCTRL - -#endif // _WX_XH_LISTC_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_mdi.h b/desmume/src/windows/wx/include/wx/xrc/xh_mdi.h deleted file mode 100644 index 6cd1fc7e7..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_mdi.h +++ /dev/null @@ -1,35 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_mdi.h -// Purpose: XML resource handler for wxMDI -// Author: David M. Falkinder & Vaclav Slavik -// Created: 14/02/2005 -// RCS-ID: $Id: xh_mdi.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 2005 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_MDI_H_ -#define _WX_XH_MDI_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_MDI - -class WXDLLIMPEXP_FWD_CORE wxWindow; - -class WXDLLIMPEXP_XRC wxMdiXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxMdiXmlHandler) - -public: - wxMdiXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - wxWindow *CreateFrame(); -}; - -#endif // wxUSE_XRC && wxUSE_MDI - -#endif // _WX_XH_MDI_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_menu.h b/desmume/src/windows/wx/include/wx/xrc/xh_menu.h deleted file mode 100644 index 2599478ac..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_menu.h +++ /dev/null @@ -1,43 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_menu.h -// Purpose: XML resource handler for menus/menubars -// Author: Vaclav Slavik -// Created: 2000/03/05 -// RCS-ID: $Id: xh_menu.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_MENU_H_ -#define _WX_XH_MENU_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_MENUS - -class WXDLLIMPEXP_XRC wxMenuXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxMenuXmlHandler) - -public: - wxMenuXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_insideMenu; -}; - -class WXDLLIMPEXP_XRC wxMenuBarXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxMenuBarXmlHandler) - -public: - wxMenuBarXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_MENUS - -#endif // _WX_XH_MENU_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_notbk.h b/desmume/src/windows/wx/include/wx/xrc/xh_notbk.h deleted file mode 100644 index 2f97b4ceb..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_notbk.h +++ /dev/null @@ -1,35 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_notbk.h -// Purpose: XML resource handler for wxNotebook -// Author: Vaclav Slavik -// RCS-ID: $Id: xh_notbk.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_NOTBK_H_ -#define _WX_XH_NOTBK_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_NOTEBOOK - -class WXDLLIMPEXP_FWD_CORE wxNotebook; - -class WXDLLIMPEXP_XRC wxNotebookXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxNotebookXmlHandler) - -public: - wxNotebookXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_isInside; - wxNotebook *m_notebook; -}; - -#endif // wxUSE_XRC && wxUSE_NOTEBOOK - -#endif // _WX_XH_NOTBK_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_odcombo.h b/desmume/src/windows/wx/include/wx/xrc/xh_odcombo.h deleted file mode 100644 index ffbd02112..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_odcombo.h +++ /dev/null @@ -1,35 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_odcombo.h -// Purpose: XML resource handler for wxOwnerDrawnComboBox -// Author: Alex Bligh - based on wx/xrc/xh_combo.h -// Created: 2006/06/19 -// RCS-ID: $Id: xh_odcombo.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2006 Alex Bligh -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_ODCOMBO_H_ -#define _WX_XH_ODCOMBO_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_ODCOMBOBOX - -class WXDLLIMPEXP_XRC wxOwnerDrawnComboBoxXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxOwnerDrawnComboBoxXmlHandler) - -public: - wxOwnerDrawnComboBoxXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_insideBox; - wxArrayString strList; -}; - -#endif // wxUSE_XRC && wxUSE_ODCOMBOBOX - -#endif // _WX_XH_ODCOMBO_H_ - diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_panel.h b/desmume/src/windows/wx/include/wx/xrc/xh_panel.h deleted file mode 100644 index 600ebf289..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_panel.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_panel.h -// Purpose: XML resource handler for wxPanel -// Author: Vaclav Slavik -// Created: 2000/03/05 -// RCS-ID: $Id: xh_panel.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_PANEL_H_ -#define _WX_XH_PANEL_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC - -class WXDLLIMPEXP_XRC wxPanelXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxPanelXmlHandler) - -public: - wxPanelXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC - -#endif // _WX_XH_PANEL_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_propdlg.h b/desmume/src/windows/wx/include/wx/xrc/xh_propdlg.h deleted file mode 100644 index e55f1d358..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_propdlg.h +++ /dev/null @@ -1,38 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_propdlg.h -// Purpose: XML resource handler for wxPropertySheetDialog -// Author: Sander Berents -// Created: 2007/07/12 -// RCS-ID: $Id: xh_propdlg.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 2007 Sander Berents -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_PROPDLG_H_ -#define _WX_XH_PROPDLG_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC - -#if wxABI_VERSION >= 20805 -class WXDLLIMPEXP_FWD_ADV wxPropertySheetDialog; - -class WXDLLIMPEXP_XRC wxPropertySheetDialogXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxPropertySheetDialogXmlHandler) - -public: - wxPropertySheetDialogXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_isInside; - wxPropertySheetDialog *m_dialog; -}; -#endif // wxABI_VERSION >= 20805 - -#endif // wxUSE_XRC - -#endif // _WX_XH_PROPDLG_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_radbt.h b/desmume/src/windows/wx/include/wx/xrc/xh_radbt.h deleted file mode 100644 index da61711f5..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_radbt.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_radbt.h -// Purpose: XML resource handler for wxRadioButton -// Author: Bob Mitchell -// Created: 2000/03/21 -// RCS-ID: $Id: xh_radbt.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell and Verant Interactive -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_RADBT_H_ -#define _WX_XH_RADBT_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_RADIOBTN - -class WXDLLIMPEXP_XRC wxRadioButtonXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxRadioButtonXmlHandler) - -public: - wxRadioButtonXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_RADIOBOX - -#endif // _WX_XH_RADBT_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_radbx.h b/desmume/src/windows/wx/include/wx/xrc/xh_radbx.h deleted file mode 100644 index f53e0a6eb..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_radbx.h +++ /dev/null @@ -1,43 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_radbx.h -// Purpose: XML resource handler for wxRadioBox -// Author: Bob Mitchell -// Created: 2000/03/21 -// RCS-ID: $Id: xh_radbx.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell and Verant Interactive -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_RADBX_H_ -#define _WX_XH_RADBX_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_RADIOBOX - -class WXDLLIMPEXP_XRC wxRadioBoxXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxRadioBoxXmlHandler) - -public: - wxRadioBoxXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_insideBox; - - // the items labels - wxArrayString labels; - - // the items tooltips - wxArrayString tooltips; - - // the item help text - wxArrayString helptexts; - wxArrayInt helptextSpecified; -}; - -#endif // wxUSE_XRC && wxUSE_RADIOBOX - -#endif // _WX_XH_RADBX_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_richtext.h b/desmume/src/windows/wx/include/wx/xrc/xh_richtext.h deleted file mode 100644 index 17772eeb9..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_richtext.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_text.h -// Purpose: XML resource handler for wxRichTextCtrl -// Author: Julian Smart -// Created: 2006-11-08 -// RCS-ID: $Id: xh_richtext.h 43199 2006-11-08 15:45:11Z JS $ -// Copyright: (c) 2006 Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_RICHTEXT_H_ -#define _WX_XH_RICHTEXT_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_RICHTEXT - -class WXDLLIMPEXP_XRC wxRichTextCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxRichTextCtrlXmlHandler) - -public: - wxRichTextCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_RICHTEXT - -#endif // _WX_XH_RICHTEXT_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_scrol.h b/desmume/src/windows/wx/include/wx/xrc/xh_scrol.h deleted file mode 100644 index 978e82bc5..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_scrol.h +++ /dev/null @@ -1,36 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_scrol.h -// Purpose: XML resource handler for wxScrollBar -// Author: Brian Gavin -// Created: 2000/09/09 -// RCS-ID: $Id: xh_scrol.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Brian Gavin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_SCROL_H_ -#define _WX_XH_SCROL_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_SCROLLBAR - -class WXDLLIMPEXP_XRC wxScrollBarXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxScrollBarXmlHandler) - enum - { - wxSL_DEFAULT_VALUE = 0, - wxSL_DEFAULT_MIN = 0, - wxSL_DEFAULT_MAX = 100 - }; - -public: - wxScrollBarXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_SCROLLBAR - -#endif // _WX_XH_SCROL_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_scwin.h b/desmume/src/windows/wx/include/wx/xrc/xh_scwin.h deleted file mode 100644 index 9875f4e3e..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_scwin.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_scwin.h -// Purpose: XML resource handler for wxScrolledWindow -// Author: Vaclav Slavik -// Created: 2002/10/18 -// RCS-ID: $Id: xh_scwin.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2002 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_SCWIN_H_ -#define _WX_XH_SCWIN_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC - -class WXDLLIMPEXP_XRC wxScrolledWindowXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxScrolledWindowXmlHandler) - -public: - wxScrolledWindowXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC - -#endif // _WX_XH_SCWIN_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_sizer.h b/desmume/src/windows/wx/include/wx/xrc/xh_sizer.h deleted file mode 100644 index 15b30ff3d..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_sizer.h +++ /dev/null @@ -1,80 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_sizer.h -// Purpose: XML resource handler for wxBoxSizer -// Author: Vaclav Slavik -// Created: 2000/04/24 -// RCS-ID: $Id: xh_sizer.h 49804 2007-11-10 01:09:42Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_SIZER_H_ -#define _WX_XH_SIZER_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC - -#include "wx/sizer.h" -#include "wx/gbsizer.h" - -class WXDLLIMPEXP_FWD_CORE wxSizer; - -class WXDLLIMPEXP_XRC wxSizerXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxSizerXmlHandler) - -public: - wxSizerXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_isInside; - bool m_isGBS; - - wxSizer *m_parentSizer; - - bool IsSizerNode(wxXmlNode *node); - - wxObject* Handle_sizeritem(); - wxObject* Handle_spacer(); - wxObject* Handle_sizer(); - wxSizer* Handle_wxBoxSizer(); -#if wxUSE_STATBOX - wxSizer* Handle_wxStaticBoxSizer(); -#endif - wxSizer* Handle_wxGridSizer(); - wxSizer* Handle_wxFlexGridSizer(); - wxSizer* Handle_wxGridBagSizer(); - - void SetGrowables(wxFlexGridSizer* fsizer, const wxChar* param, bool rows); - wxGBPosition GetGBPos(const wxString& param); - wxGBSpan GetGBSpan(const wxString& param); - wxSizerItem* MakeSizerItem(); - void SetSizerItemAttributes(wxSizerItem* sitem); - void AddSizerItem(wxSizerItem* sitem); -}; - -#if wxUSE_BUTTON - -class WXDLLIMPEXP_XRC wxStdDialogButtonSizerXmlHandler - : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxStdDialogButtonSizerXmlHandler) - -public: - wxStdDialogButtonSizerXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_isInside; - wxStdDialogButtonSizer *m_parentSizer; -}; - -#endif // wxUSE_BUTTON - -#endif // wxUSE_XRC - -#endif // _WX_XH_SIZER_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_slidr.h b/desmume/src/windows/wx/include/wx/xrc/xh_slidr.h deleted file mode 100644 index 8c415941a..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_slidr.h +++ /dev/null @@ -1,36 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_slidr.h -// Purpose: XML resource handler for wxSlider -// Author: Bob Mitchell -// Created: 2000/03/21 -// RCS-ID: $Id: xh_slidr.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell and Verant Interactive -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_SLIDR_H_ -#define _WX_XH_SLIDR_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_SLIDER - -class WXDLLIMPEXP_XRC wxSliderXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxSliderXmlHandler) - enum - { - wxSL_DEFAULT_VALUE = 0, - wxSL_DEFAULT_MIN = 0, - wxSL_DEFAULT_MAX = 100 - }; - -public: - wxSliderXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_SLIDER - -#endif // _WX_XH_SLIDR_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_spin.h b/desmume/src/windows/wx/include/wx/xrc/xh_spin.h deleted file mode 100644 index d4b315186..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_spin.h +++ /dev/null @@ -1,61 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_spin.h -// Purpose: XML resource handler for wxSpinButton and wxSpinCtrl -// Author: Bob Mitchell -// Created: 2000/03/21 -// RCS-ID: $Id: xh_spin.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell and Verant Interactive -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_SPIN_H_ -#define _WX_XH_SPIN_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC - -#if wxUSE_SPINBTN - -class WXDLLIMPEXP_XRC wxSpinButtonXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxSpinButtonXmlHandler) - enum - { - wxSP_DEFAULT_VALUE = 0, - wxSP_DEFAULT_MIN = 0, - wxSP_DEFAULT_MAX = 100 - }; - -public: - wxSpinButtonXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_SPINBTN - - -#if wxUSE_SPINCTRL - -class WXDLLIMPEXP_XRC wxSpinCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxSpinCtrlXmlHandler) - enum - { - wxSP_DEFAULT_VALUE = 0, - wxSP_DEFAULT_MIN = 0, - wxSP_DEFAULT_MAX = 100 - }; - -public: - wxSpinCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_SPINCTRL - -#endif // wxUSE_XRC - -#endif // _WX_XH_SPIN_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_split.h b/desmume/src/windows/wx/include/wx/xrc/xh_split.h deleted file mode 100644 index c47330e5e..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_split.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_split.h -// Purpose: XRC resource for wxSplitterWindow -// Author: panga@freemail.hu, Vaclav Slavik -// Created: 2003/01/26 -// RCS-ID: $Id: xh_split.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2003 panga@freemail.hu, Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_SPLIT_H_ -#define _WX_XH_SPLIT_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_SPLITTER - -class WXDLLIMPEXP_XRC wxSplitterWindowXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxSplitterWindowXmlHandler) - -public: - wxSplitterWindowXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_SPLITTER - -#endif // _WX_XH_SPLIT_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_statbar.h b/desmume/src/windows/wx/include/wx/xrc/xh_statbar.h deleted file mode 100644 index 1a2787b12..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_statbar.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_statbar.h -// Purpose: XML resource handler for wxStatusBar -// Author: Brian Ravnsgaard Riis -// Created: 2004/01/21 -// RCS-ID: -// Copyright: (c) 2004 Brian Ravnsgaard Riis -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_STATBAR_H_ -#define _WX_XH_STATBAR_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_STATUSBAR - -class WXDLLIMPEXP_XRC wxStatusBarXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxStatusBarXmlHandler) - -public: - wxStatusBarXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_STATUSBAR - -#endif // _WX_XH_STATBAR_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_stbmp.h b/desmume/src/windows/wx/include/wx/xrc/xh_stbmp.h deleted file mode 100644 index 0e1497fdf..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_stbmp.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_stbmp.h -// Purpose: XML resource handler for wxStaticBitmap -// Author: Vaclav Slavik -// Created: 2000/04/22 -// RCS-ID: $Id: xh_stbmp.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_STBMP_H_ -#define _WX_XH_STBMP_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_STATBMP - -class WXDLLIMPEXP_XRC wxStaticBitmapXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxStaticBitmapXmlHandler) - -public: - wxStaticBitmapXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_STATBMP - -#endif // _WX_XH_STBMP_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_stbox.h b/desmume/src/windows/wx/include/wx/xrc/xh_stbox.h deleted file mode 100644 index 032f4d5ba..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_stbox.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_stbox.h -// Purpose: XML resource handler for wxStaticBox -// Author: Brian Gavin -// Created: 2000/09/00 -// RCS-ID: $Id: xh_stbox.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Brian Gavin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_STBOX_H_ -#define _WX_XH_STBOX_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_STATBOX - -class WXDLLIMPEXP_XRC wxStaticBoxXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxStaticBoxXmlHandler) - -public: - wxStaticBoxXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_STATBOX - -#endif // _WX_XH_STBOX_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_stlin.h b/desmume/src/windows/wx/include/wx/xrc/xh_stlin.h deleted file mode 100644 index 7eb834bde..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_stlin.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_stlin.h -// Purpose: XML resource handler for wxStaticLine -// Author: Vaclav Slavik -// Created: 2000/09/00 -// RCS-ID: $Id: xh_stlin.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_STLIN_H_ -#define _WX_XH_STLIN_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_STATLINE - -class WXDLLIMPEXP_XRC wxStaticLineXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxStaticLineXmlHandler) - -public: - wxStaticLineXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_STATLINE - -#endif // _WX_XH_STLIN_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_sttxt.h b/desmume/src/windows/wx/include/wx/xrc/xh_sttxt.h deleted file mode 100644 index cd0247c25..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_sttxt.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_sttxt.h -// Purpose: XML resource handler for wxStaticText -// Author: Bob Mitchell -// Created: 2000/03/21 -// RCS-ID: $Id: xh_sttxt.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Bob Mitchell -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_STTXT_H_ -#define _WX_XH_STTXT_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_STATTEXT - -class WXDLLIMPEXP_XRC wxStaticTextXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxStaticTextXmlHandler) - -public: - wxStaticTextXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_STATTEXT - -#endif // _WX_XH_STTXT_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_text.h b/desmume/src/windows/wx/include/wx/xrc/xh_text.h deleted file mode 100644 index 8b50a273a..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_text.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_text.h -// Purpose: XML resource handler for wxTextCtrl -// Author: Aleksandras Gluchovas -// Created: 2000/03/21 -// RCS-ID: $Id: xh_text.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Aleksandras Gluchovas -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_TEXT_H_ -#define _WX_XH_TEXT_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_TEXTCTRL - -class WXDLLIMPEXP_XRC wxTextCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxTextCtrlXmlHandler) - -public: - wxTextCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_TEXTCTRL - -#endif // _WX_XH_TEXT_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_tglbtn.h b/desmume/src/windows/wx/include/wx/xrc/xh_tglbtn.h deleted file mode 100644 index 844ff9b65..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_tglbtn.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_tglbtn.h -// Purpose: XML resource handler for wxToggleButton -// Author: Julian Smart -// Created: 2004-08-30 -// RCS-ID: $Id: xh_tglbtn.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2004 Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_TGLBTN_H_ -#define _WX_XH_TGLBTN_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_TOGGLEBTN - -class WXDLLIMPEXP_XRC wxToggleButtonXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxToggleButtonXmlHandler) - -public: - wxToggleButtonXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_TOGGLEBTN - -#endif // _WX_XH_TGLBTN_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_toolb.h b/desmume/src/windows/wx/include/wx/xrc/xh_toolb.h deleted file mode 100644 index 3ef690cfa..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_toolb.h +++ /dev/null @@ -1,36 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_toolb.h -// Purpose: XML resource handler for wxToolBar -// Author: Vaclav Slavik -// Created: 2000/08/11 -// RCS-ID: $Id: xh_toolb.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_TOOLB_H_ -#define _WX_XH_TOOLB_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_TOOLBAR - -class WXDLLIMPEXP_FWD_CORE wxToolBar; - -class WXDLLIMPEXP_XRC wxToolBarXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxToolBarXmlHandler) - -public: - wxToolBarXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - bool m_isInside; - wxToolBar *m_toolbar; -}; - -#endif // wxUSE_XRC && wxUSE_TOOLBAR - -#endif // _WX_XH_TOOLB_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_tree.h b/desmume/src/windows/wx/include/wx/xrc/xh_tree.h deleted file mode 100644 index 560a5d8e4..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_tree.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_tree.h -// Purpose: XML resource handler for wxTreeCtrl -// Author: Brian Gavin -// Created: 2000/09/09 -// RCS-ID: $Id: xh_tree.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Brian Gavin -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_TREE_H_ -#define _WX_XH_TREE_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_TREECTRL - -class WXDLLIMPEXP_XRC wxTreeCtrlXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxTreeCtrlXmlHandler) - -public: - wxTreeCtrlXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC && wxUSE_TREECTRL - -#endif // _WX_XH_TREE_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_treebk.h b/desmume/src/windows/wx/include/wx/xrc/xh_treebk.h deleted file mode 100644 index 56de55366..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_treebk.h +++ /dev/null @@ -1,83 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_treebk.h -// Purpose: XML resource handler for wxTreebook -// Author: Evgeniy Tarassov -// Created: 2005/09/28 -// Copyright: (c) 2005 TT-Solutions -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_TREEBK_H_ -#define _WX_XH_TREEBK_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_TREEBOOK - -class WXDLLIMPEXP_FWD_CORE wxTreebook; -#include "wx/dynarray.h" - -WX_DEFINE_USER_EXPORTED_ARRAY_SIZE_T(size_t, wxArrayTbkPageIndexes, - class WXDLLIMPEXP_XRC); - -// --------------------------------------------------------------------- -// wxTreebookXmlHandler class -// --------------------------------------------------------------------- -// Resource xml structure have to be almost the "same" as for wxNotebook -// except the additional (size_t)depth parameter for treebookpage nodes -// which indicates the depth of the page in the tree. -// There is only one logical constraint on this parameter : -// it cannot be greater than the previous page depth plus one -class WXDLLIMPEXP_XRC wxTreebookXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxTreebookXmlHandler) - -public: - wxTreebookXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - wxTreebook *m_tbk; - wxArrayTbkPageIndexes m_treeContext; - bool m_isInside; -}; - - -// Example: -// ------- -// Label -// \--First -// | \--Second -// \--Third -// -// -// ... -// -// -// -// -// 0 -// -// -// -// -// 1 -// -// -// -// -// 2 -// -// -// -// -// 1 -// -// -// ... -// - -#endif // wxUSE_XRC && wxUSE_TREEBOOK - -#endif // _WX_XH_TREEBK_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_unkwn.h b/desmume/src/windows/wx/include/wx/xrc/xh_unkwn.h deleted file mode 100644 index de7547533..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_unkwn.h +++ /dev/null @@ -1,30 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_unkwn.h -// Purpose: XML resource handler for unkown widget -// Author: Vaclav Slavik -// Created: 2000/03/05 -// RCS-ID: $Id: xh_unkwn.h 41590 2006-10-03 14:53:40Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_UNKWN_H_ -#define _WX_XH_UNKWN_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC - -class WXDLLIMPEXP_XRC wxUnknownWidgetXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxUnknownWidgetXmlHandler) - -public: - wxUnknownWidgetXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); -}; - -#endif // wxUSE_XRC - -#endif // _WX_XH_UNKWN_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xh_wizrd.h b/desmume/src/windows/wx/include/wx/xrc/xh_wizrd.h deleted file mode 100644 index d753150a8..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xh_wizrd.h +++ /dev/null @@ -1,37 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xh_wizrd.h -// Purpose: XML resource handler for wxWizard -// Author: Vaclav Slavik -// Created: 2003/03/02 -// RCS-ID: $Id: xh_wizrd.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XH_WIZRD_H_ -#define _WX_XH_WIZRD_H_ - -#include "wx/xrc/xmlres.h" - -#if wxUSE_XRC && wxUSE_WIZARDDLG - -class WXDLLIMPEXP_FWD_ADV wxWizard; -class WXDLLIMPEXP_FWD_ADV wxWizardPageSimple; - -class WXDLLIMPEXP_XRC wxWizardXmlHandler : public wxXmlResourceHandler -{ - DECLARE_DYNAMIC_CLASS(wxWizardXmlHandler) - -public: - wxWizardXmlHandler(); - virtual wxObject *DoCreateResource(); - virtual bool CanHandle(wxXmlNode *node); - -private: - wxWizard *m_wizard; - wxWizardPageSimple *m_lastSimplePage; -}; - -#endif // wxUSE_XRC && wxUSE_WIZARDDLG - -#endif // _WX_XH_WIZRD_H_ diff --git a/desmume/src/windows/wx/include/wx/xrc/xmlres.h b/desmume/src/windows/wx/include/wx/xrc/xmlres.h deleted file mode 100644 index 0b41eefb2..000000000 --- a/desmume/src/windows/wx/include/wx/xrc/xmlres.h +++ /dev/null @@ -1,528 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xrc/xmlres.h -// Purpose: XML resources -// Author: Vaclav Slavik -// Created: 2000/03/05 -// RCS-ID: $Id: xmlres.h 55504 2008-09-07 09:15:46Z VS $ -// Copyright: (c) 2000 Vaclav Slavik -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XMLRES_H_ -#define _WX_XMLRES_H_ - -#include "wx/defs.h" - -#if wxUSE_XRC - -#include "wx/string.h" -#include "wx/dynarray.h" -#include "wx/datetime.h" -#include "wx/list.h" -#include "wx/gdicmn.h" -#include "wx/filesys.h" -#include "wx/bitmap.h" -#include "wx/icon.h" -#include "wx/artprov.h" -#include "wx/colour.h" -#include "wx/animate.h" - -#include "wx/xml/xml.h" - -class WXDLLIMPEXP_FWD_CORE wxMenu; -class WXDLLIMPEXP_FWD_CORE wxMenuBar; -class WXDLLIMPEXP_FWD_CORE wxDialog; -class WXDLLIMPEXP_FWD_CORE wxPanel; -class WXDLLIMPEXP_FWD_CORE wxWindow; -class WXDLLIMPEXP_FWD_CORE wxFrame; -class WXDLLIMPEXP_FWD_CORE wxToolBar; - -class WXDLLIMPEXP_FWD_XRC wxXmlResourceHandler; -class WXDLLIMPEXP_FWD_XRC wxXmlSubclassFactory; -class WXDLLIMPEXP_FWD_XRC wxXmlSubclassFactoriesList; -class wxXmlResourceModule; - - -// These macros indicate current version of XML resources (this information is -// encoded in root node of XRC file as "version" property). -// -// Rules for increasing version number: -// - change it only if you made incompatible change to the format. Addition -// of new attribute to control handler is _not_ incompatible change, because -// older versions of the library may ignore it. -// - if you change version number, follow these steps: -// - set major, minor and release numbers to respective version numbers of -// the wxWidgets library (see wx/version.h) -// - reset revision to 0 unless the first three are same as before, -// in which case you should increase revision by one -#define WX_XMLRES_CURRENT_VERSION_MAJOR 2 -#define WX_XMLRES_CURRENT_VERSION_MINOR 5 -#define WX_XMLRES_CURRENT_VERSION_RELEASE 3 -#define WX_XMLRES_CURRENT_VERSION_REVISION 0 -#define WX_XMLRES_CURRENT_VERSION_STRING _T("2.5.3.0") - -#define WX_XMLRES_CURRENT_VERSION \ - (WX_XMLRES_CURRENT_VERSION_MAJOR * 256*256*256 + \ - WX_XMLRES_CURRENT_VERSION_MINOR * 256*256 + \ - WX_XMLRES_CURRENT_VERSION_RELEASE * 256 + \ - WX_XMLRES_CURRENT_VERSION_REVISION) - -class WXDLLIMPEXP_XRC wxXmlResourceDataRecord -{ -public: - wxXmlResourceDataRecord() : Doc(NULL) { -#if wxUSE_DATETIME - Time = wxDateTime::Now(); -#endif - } - ~wxXmlResourceDataRecord() {delete Doc;} - - wxString File; - wxXmlDocument *Doc; -#if wxUSE_DATETIME - wxDateTime Time; -#endif -}; - - -WX_DECLARE_USER_EXPORTED_OBJARRAY(wxXmlResourceDataRecord, - wxXmlResourceDataRecords, - WXDLLIMPEXP_XRC); - -enum wxXmlResourceFlags -{ - wxXRC_USE_LOCALE = 1, - wxXRC_NO_SUBCLASSING = 2, - wxXRC_NO_RELOADING = 4 -}; - -// This class holds XML resources from one or more .xml files -// (or derived forms, either binary or zipped -- see manual for -// details). -class WXDLLIMPEXP_XRC wxXmlResource : public wxObject -{ -public: - // Constructor. - // Flags: wxXRC_USE_LOCALE - // translatable strings will be translated via _() - // using the given domain if specified - // wxXRC_NO_SUBCLASSING - // subclass property of object nodes will be ignored - // (useful for previews in XRC editors) - // wxXRC_NO_RELOADING - // don't check the modification time of the XRC files and - // reload them if they have changed on disk - wxXmlResource(int flags = wxXRC_USE_LOCALE, - const wxString& domain=wxEmptyString); - - // Constructor. - // Flags: wxXRC_USE_LOCALE - // translatable strings will be translated via _() - // using the given domain if specified - // wxXRC_NO_SUBCLASSING - // subclass property of object nodes will be ignored - // (useful for previews in XRC editors) - wxXmlResource(const wxString& filemask, int flags = wxXRC_USE_LOCALE, - const wxString& domain=wxEmptyString); - - // Destructor. - virtual ~wxXmlResource(); - - // Loads resources from XML files that match given filemask. - // This method understands VFS (see filesys.h). - bool Load(const wxString& filemask); - - // Unload resource from the given XML file (wildcards not allowed) - bool Unload(const wxString& filename); - - // Initialize handlers for all supported controls/windows. This will - // make the executable quite big because it forces linking against - // most of the wxWidgets library. - void InitAllHandlers(); - - // Initialize only a specific handler (or custom handler). Convention says - // that handler name is equal to the control's name plus 'XmlHandler', for - // example wxTextCtrlXmlHandler, wxHtmlWindowXmlHandler. The XML resource - // compiler (xmlres) can create include file that contains initialization - // code for all controls used within the resource. - void AddHandler(wxXmlResourceHandler *handler); - - // Add a new handler at the begining of the handler list - void InsertHandler(wxXmlResourceHandler *handler); - - // Removes all handlers - void ClearHandlers(); - - // Registers subclasses factory for use in XRC. This function is not meant - // for public use, please see the comment above wxXmlSubclassFactory - // definition. - static void AddSubclassFactory(wxXmlSubclassFactory *factory); - - // Loads menu from resource. Returns NULL on failure. - wxMenu *LoadMenu(const wxString& name); - - // Loads menubar from resource. Returns NULL on failure. - wxMenuBar *LoadMenuBar(wxWindow *parent, const wxString& name); - - // Loads menubar from resource. Returns NULL on failure. - wxMenuBar *LoadMenuBar(const wxString& name) { return LoadMenuBar(NULL, name); } - -#if wxUSE_TOOLBAR - // Loads a toolbar. - wxToolBar *LoadToolBar(wxWindow *parent, const wxString& name); -#endif - - // Loads a dialog. dlg points to parent window (if any). - wxDialog *LoadDialog(wxWindow *parent, const wxString& name); - - // Loads a dialog. dlg points to parent window (if any). This form - // is used to finish creation of already existing instance (main reason - // for this is that you may want to use derived class with new event table) - // Example (typical usage): - // MyDialog dlg; - // wxTheXmlResource->LoadDialog(&dlg, mainFrame, "my_dialog"); - // dlg->ShowModal(); - bool LoadDialog(wxDialog *dlg, wxWindow *parent, const wxString& name); - - // Loads a panel. panel points to parent window (if any). - wxPanel *LoadPanel(wxWindow *parent, const wxString& name); - - // Loads a panel. panel points to parent window (if any). This form - // is used to finish creation of already existing instance. - bool LoadPanel(wxPanel *panel, wxWindow *parent, const wxString& name); - - // Loads a frame. - wxFrame *LoadFrame(wxWindow* parent, const wxString& name); - bool LoadFrame(wxFrame* frame, wxWindow *parent, const wxString& name); - - // Load an object from the resource specifying both the resource name and - // the classname. This lets you load nonstandard container windows. - wxObject *LoadObject(wxWindow *parent, const wxString& name, - const wxString& classname); - - // Load an object from the resource specifying both the resource name and - // the classname. This form lets you finish the creation of an existing - // instance. - bool LoadObject(wxObject *instance, wxWindow *parent, const wxString& name, - const wxString& classname); - - // Loads a bitmap resource from a file. - wxBitmap LoadBitmap(const wxString& name); - - // Loads an icon resource from a file. - wxIcon LoadIcon(const wxString& name); - - // Attaches an unknown control to the given panel/window/dialog. - // Unknown controls are used in conjunction with . - bool AttachUnknownControl(const wxString& name, wxWindow *control, - wxWindow *parent = NULL); - - // Returns a numeric ID that is equivalent to the string ID used in an XML - // resource. If an unknown str_id is requested (i.e. other than wxID_XXX - // or integer), a new record is created which associates the given string - // with a number. If value_if_not_found == wxID_NONE, the number is obtained via - // wxWindow::NewControlId(). Otherwise value_if_not_found is used. - // Macro XRCID(name) is provided for convenient use in event tables. - static int GetXRCID(const wxChar *str_id, int value_if_not_found = wxID_NONE); - - // Returns version information (a.b.c.d = d+ 256*c + 256^2*b + 256^3*a). - long GetVersion() const { return m_version; } - - // Compares resources version to argument. Returns -1 if resources version - // is less than the argument, +1 if greater and 0 if they equal. - int CompareVersion(int major, int minor, int release, int revision) const - { return GetVersion() - - (major*256*256*256 + minor*256*256 + release*256 + revision); } - -//// Singleton accessors. - - // Gets the global resources object or creates one if none exists. - static wxXmlResource *Get(); - - // Sets the global resources object and returns a pointer to the previous one (may be NULL). - static wxXmlResource *Set(wxXmlResource *res); - - // Returns flags, which may be a bitlist of wxXRC_USE_LOCALE and wxXRC_NO_SUBCLASSING. - int GetFlags() const { return m_flags; } - // Set flags after construction. - void SetFlags(int flags) { m_flags = flags; } - - // Get/Set the domain to be passed to the translation functions, defaults to NULL. - wxChar* GetDomain() const { return m_domain; } - void SetDomain(const wxChar* domain); - -protected: - // Scans the resources list for unloaded files and loads them. Also reloads - // files that have been modified since last loading. - bool UpdateResources(); - - // Finds a resource (calls UpdateResources) and returns a node containing it. - wxXmlNode *FindResource(const wxString& name, const wxString& classname, bool recursive = false); - - // Helper function: finds a resource (calls UpdateResources) and returns a node containing it. - wxXmlNode *DoFindResource(wxXmlNode *parent, const wxString& name, const wxString& classname, bool recursive); - - // Creates a resource from information in the given node - // (Uses only 'handlerToUse' if != NULL) - wxObject *CreateResFromNode(wxXmlNode *node, wxObject *parent, - wxObject *instance = NULL, - wxXmlResourceHandler *handlerToUse = NULL); - - // Helper of Load() and Unload(): returns the URL corresponding to the - // given file if it's indeed a file, otherwise returns the original string - // unmodified - static wxString ConvertFileNameToURL(const wxString& filename); - - // loading resources from archives is impossible without wxFileSystem -#if wxUSE_FILESYSTEM - // Another helper: detect if the filename is a ZIP or XRS file - static bool IsArchive(const wxString& filename); -#endif // wxUSE_FILESYSTEM - -private: - long m_version; - - int m_flags; - wxList m_handlers; - wxXmlResourceDataRecords m_data; -#if wxUSE_FILESYSTEM - wxFileSystem m_curFileSystem; - wxFileSystem& GetCurFileSystem() { return m_curFileSystem; } -#endif - - // domain to pass to translation functions, if any. - wxChar* m_domain; - - friend class wxXmlResourceHandler; - friend class wxXmlResourceModule; - - static wxXmlSubclassFactoriesList *ms_subclassFactories; - - // singleton instance: - static wxXmlResource *ms_instance; -}; - - -// This macro translates string identifier (as used in XML resource, -// e.g. ...) to integer id that is needed by -// wxWidgets event tables. -// Example: -// BEGIN_EVENT_TABLE(MyFrame, wxFrame) -// EVT_MENU(XRCID("quit"), MyFrame::OnQuit) -// EVT_MENU(XRCID("about"), MyFrame::OnAbout) -// EVT_MENU(XRCID("new"), MyFrame::OnNew) -// EVT_MENU(XRCID("open"), MyFrame::OnOpen) -// END_EVENT_TABLE() - -#define XRCID(str_id) \ - wxXmlResource::GetXRCID(wxT(str_id)) - - -// This macro returns pointer to particular control in dialog -// created using XML resources. You can use it to set/get values from -// controls. -// Example: -// wxDialog dlg; -// wxXmlResource::Get()->LoadDialog(&dlg, mainFrame, "my_dialog"); -// XRCCTRL(dlg, "my_textctrl", wxTextCtrl)->SetValue(wxT("default value")); - -#define XRCCTRL(window, id, type) \ - (wxStaticCast((window).FindWindow(XRCID(id)), type)) - -// wxXmlResourceHandler is an abstract base class for resource handlers -// capable of creating a control from an XML node. - -class WXDLLIMPEXP_XRC wxXmlResourceHandler : public wxObject -{ -DECLARE_ABSTRACT_CLASS(wxXmlResourceHandler) -public: - // Constructor. - wxXmlResourceHandler(); - - // Destructor. - virtual ~wxXmlResourceHandler() {} - - // Creates an object (menu, dialog, control, ...) from an XML node. - // Should check for validity. - // parent is a higher-level object (usually window, dialog or panel) - // that is often necessary to create the resource. - // If instance is non-NULL it should not create a new instance via 'new' but - // should rather use this one, and call its Create method. - wxObject *CreateResource(wxXmlNode *node, wxObject *parent, - wxObject *instance); - - // This one is called from CreateResource after variables - // were filled. - virtual wxObject *DoCreateResource() = 0; - - // Returns true if it understands this node and can create - // a resource from it, false otherwise. - virtual bool CanHandle(wxXmlNode *node) = 0; - - // Sets the parent resource. - void SetParentResource(wxXmlResource *res) { m_resource = res; } - -protected: - wxXmlResource *m_resource; - wxArrayString m_styleNames; - wxArrayInt m_styleValues; - - // Variables (filled by CreateResource) - wxXmlNode *m_node; - wxString m_class; - wxObject *m_parent, *m_instance; - wxWindow *m_parentAsWindow; - - // --- Handy methods: - - // Returns true if the node has a property class equal to classname, - // e.g. . - bool IsOfClass(wxXmlNode *node, const wxString& classname); - - // Gets node content from wxXML_ENTITY_NODE - // The problem is, content is represented as - // wxXML_ENTITY_NODE name="tag", content="" - // |-- wxXML_TEXT_NODE or - // wxXML_CDATA_SECTION_NODE name="" content="content" - wxString GetNodeContent(wxXmlNode *node); - - // Check to see if a parameter exists. - bool HasParam(const wxString& param); - - // Finds the node or returns NULL. - wxXmlNode *GetParamNode(const wxString& param); - - // Finds the parameter value or returns the empty string. - wxString GetParamValue(const wxString& param); - - // Add a style flag (e.g. wxMB_DOCKABLE) to the list of flags - // understood by this handler. - void AddStyle(const wxString& name, int value); - - // Add styles common to all wxWindow-derived classes. - void AddWindowStyles(); - - // Gets style flags from text in form "flag | flag2| flag3 |..." - // Only understands flags added with AddStyle - int GetStyle(const wxString& param = wxT("style"), int defaults = 0); - - // Gets text from param and does some conversions: - // - replaces \n, \r, \t by respective chars (according to C syntax) - // - replaces _ by & and __ by _ (needed for _File => &File because of XML) - // - calls wxGetTranslations (unless disabled in wxXmlResource) - wxString GetText(const wxString& param, bool translate = true); - - // Returns the XRCID. - int GetID(); - - // Returns the resource name. - wxString GetName(); - - // Gets a bool flag (1, t, yes, on, true are true, everything else is false). - bool GetBool(const wxString& param, bool defaultv = false); - - // Gets an integer value from the parameter. - long GetLong(const wxString& param, long defaultv = 0); - - // Gets a float value from the parameter. - float GetFloat(const wxString& param, float defaultv = 0); - - // Gets colour in HTML syntax (#RRGGBB). - wxColour GetColour(const wxString& param, const wxColour& defaultv = wxNullColour); - - // Gets the size (may be in dialog units). - wxSize GetSize(const wxString& param = wxT("size"), - wxWindow *windowToUse = NULL); - - // Gets the position (may be in dialog units). - wxPoint GetPosition(const wxString& param = wxT("pos")); - - // Gets a dimension (may be in dialog units). - wxCoord GetDimension(const wxString& param, wxCoord defaultv = 0, - wxWindow *windowToUse = NULL); - - // Gets a bitmap. - wxBitmap GetBitmap(const wxString& param = wxT("bitmap"), - const wxArtClient& defaultArtClient = wxART_OTHER, - wxSize size = wxDefaultSize); - - // Gets an icon. - wxIcon GetIcon(const wxString& param = wxT("icon"), - const wxArtClient& defaultArtClient = wxART_OTHER, - wxSize size = wxDefaultSize); - -#if wxUSE_ANIMATIONCTRL - // Gets an animation. - wxAnimation GetAnimation(const wxString& param = wxT("animation")); -#endif - - // Gets a font. - wxFont GetFont(const wxString& param = wxT("font")); - - // Sets common window options. - void SetupWindow(wxWindow *wnd); - - // Creates children. - void CreateChildren(wxObject *parent, bool this_hnd_only = false); - - // Helper function. - void CreateChildrenPrivately(wxObject *parent, wxXmlNode *rootnode = NULL); - - // Creates a resource from a node. - wxObject *CreateResFromNode(wxXmlNode *node, - wxObject *parent, wxObject *instance = NULL) - { return m_resource->CreateResFromNode(node, parent, instance); } - - // helper -#if wxUSE_FILESYSTEM - wxFileSystem& GetCurFileSystem() { return m_resource->GetCurFileSystem(); } -#endif -}; - - -// Programmer-friendly macros for writing XRC handlers: - -#define XRC_ADD_STYLE(style) AddStyle(wxT(#style), style) - -#define XRC_MAKE_INSTANCE(variable, classname) \ - classname *variable = NULL; \ - if (m_instance) \ - variable = wxStaticCast(m_instance, classname); \ - if (!variable) \ - variable = new classname; - - -// FIXME -- remove this $%^#$%#$@# as soon as Ron checks his changes in!! -WXDLLIMPEXP_XRC void wxXmlInitResourceModule(); - - -// This class is used to create instances of XRC "object" nodes with "subclass" -// property. It is _not_ supposed to be used by XRC users, you should instead -// register your subclasses via wxWidgets' RTTI mechanism. This class is useful -// only for language bindings developer who need a way to implement subclassing -// in wxWidgets ports that don't support wxRTTI (e.g. wxPython). -class WXDLLIMPEXP_XRC wxXmlSubclassFactory -{ -public: - // Try to create instance of given class and return it, return NULL on - // failure: - virtual wxObject *Create(const wxString& className) = 0; - virtual ~wxXmlSubclassFactory() {} -}; - - -/* ------------------------------------------------------------------------- - Backward compatibility macros. Do *NOT* use, they may disappear in future - versions of the XRC library! - ------------------------------------------------------------------------- */ -#if WXWIN_COMPATIBILITY_2_4 - #define ADD_STYLE XRC_ADD_STYLE - #define wxTheXmlResource wxXmlResource::Get() - #define XMLID XRCID - #define XMLCTRL XRCCTRL - #define GetXMLID GetXRCID -#endif - -#endif // wxUSE_XRC - -#endif // _WX_XMLRES_H_ diff --git a/desmume/src/windows/wx/include/wx/xti.h b/desmume/src/windows/wx/include/wx/xti.h deleted file mode 100644 index b35d093ee..000000000 --- a/desmume/src/windows/wx/include/wx/xti.h +++ /dev/null @@ -1,2102 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xti.h -// Purpose: runtime metadata information (extended class info) -// Author: Stefan Csomor -// Modified by: -// Created: 27/07/03 -// RCS-ID: $Id: xti.h 52488 2008-03-14 14:13:05Z JS $ -// Copyright: (c) 1997 Julian Smart -// (c) 2003 Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XTIH__ -#define _WX_XTIH__ - -// We want to support properties, event sources and events sinks through -// explicit declarations, using templates and specialization to make the -// effort as painless as possible. -// -// This means we have the following domains : -// -// - Type Information for categorizing built in types as well as custom types -// this includes information about enums, their values and names -// - Type safe value storage : a kind of wxVariant, called right now wxxVariant -// which will be merged with wxVariant -// - Property Information and Property Accessors providing access to a class' -// values and exposed event delegates -// - Information about event handlers -// - extended Class Information for accessing all these - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- - -#include "wx/defs.h" -#include "wx/memory.h" -#include "wx/flags.h" -#include "wx/string.h" -#include "wx/arrstr.h" -#include "wx/hashmap.h" -#include "wx/log.h" -#include "wx/intl.h" - -#include - -// we will move this later to defs.h - -#if defined(__GNUC__) && !wxCHECK_GCC_VERSION( 3 , 4 ) -# define wxUSE_MEMBER_TEMPLATES 0 -#endif - -#if defined(_MSC_VER) && _MSC_VER <= 1200 -# define wxUSE_MEMBER_TEMPLATES 0 -# define wxUSE_FUNC_TEMPLATE_POINTER 0 -#endif - -#ifndef wxUSE_MEMBER_TEMPLATES -# define wxUSE_MEMBER_TEMPLATES 1 -#endif - -#ifndef wxUSE_FUNC_TEMPLATE_POINTER -# define wxUSE_FUNC_TEMPLATE_POINTER 1 -#endif - -#if wxUSE_MEMBER_TEMPLATES -# define wxTEMPLATED_MEMBER_CALL( method , type ) method() -# define wxTEMPLATED_MEMBER_FIX( type ) -#else -# define wxTEMPLATED_MEMBER_CALL( method , type ) method((type*)NULL) -# define wxTEMPLATED_MEMBER_FIX( type ) type* =NULL -#endif - -#if defined(_MSC_VER) && _MSC_VER <= 1200 -# define wxTEMPLATED_FUNCTION_FIX( type ) , wxTEMPLATED_MEMBER_FIX(type) -# define wxINFUNC_CLASS_TYPE_FIX( type ) typedef type type; -#else -# define wxTEMPLATED_FUNCTION_FIX( type ) -# define wxINFUNC_CLASS_TYPE_FIX( type ) -#endif - -#define EMPTY_MACROVALUE /**/ - -class WXDLLIMPEXP_BASE wxObject; -class WXDLLIMPEXP_BASE wxClassInfo; -class WXDLLIMPEXP_BASE wxDynamicClassInfo; -class WXDLLIMPEXP_BASE wxHashTable; -class WXDLLIMPEXP_BASE wxObjectRefData; -class WXDLLIMPEXP_BASE wxEvent; -class WXDLLIMPEXP_BASE wxEvtHandler; - -typedef void (wxObject::*wxObjectEventFunction)(wxEvent&); - -#if wxUSE_FUNC_TEMPLATE_POINTER -# define wxTO_STRING(type) wxToStringConverter -# define wxTO_STRING_IMP(type) -# define wxFROM_STRING(type) wxFromStringConverter -# define wxFROM_STRING_IMP(type) -#else -# define wxTO_STRING(type) ToString##type -# define wxTO_STRING_IMP(type) inline void ToString##type( const wxxVariant& data , wxString &result ) { wxToStringConverter(data, result); } -# define wxFROM_STRING(type) FromString##type -# define wxFROM_STRING_IMP(type) inline void FromString##type( const wxString& data , wxxVariant &result ) { wxFromStringConverter(data, result); } -#endif - -// ---------------------------------------------------------------------------- -// Enum Support -// -// In the header files there would no change from pure c++ code, in the -// implementation, an enum would have -// to be enumerated eg : -// -// wxBEGIN_ENUM( wxFlavor ) -// wxENUM_MEMBER( Vanilla ) -// wxENUM_MEMBER( Chocolate ) -// wxENUM_MEMBER( Strawberry ) -// wxEND_ENUM( wxFlavor ) -// ---------------------------------------------------------------------------- - -struct WXDLLIMPEXP_BASE wxEnumMemberData -{ - const wxChar* m_name; - int m_value; -}; - -class WXDLLIMPEXP_BASE wxEnumData -{ -public : - wxEnumData( wxEnumMemberData* data ) ; - - // returns true if the member has been found and sets the int value - // pointed to accordingly (if ptr != null ) - // if not found returns false, value left unchanged - bool HasEnumMemberValue( const wxChar *name , int *value = NULL ) const ; - - // returns the value of the member, if not found in debug mode an - // assert is issued, in release 0 is returned - int GetEnumMemberValue(const wxChar *name ) const ; - - // returns the name of the enum member having the passed in value - // returns an emtpy string if not found - const wxChar *GetEnumMemberName(int value) const ; - - // returns the number of members in this enum - int GetEnumCount() const { return m_count ; } - - // returns the value of the nth member - int GetEnumMemberValueByIndex( int n ) const ; - - // returns the value of the nth member - const wxChar *GetEnumMemberNameByIndex( int n ) const ; -private : - wxEnumMemberData *m_members; - int m_count ; -}; - -#define wxBEGIN_ENUM( e ) \ - wxEnumMemberData s_enumDataMembers##e[] = { - -#define wxENUM_MEMBER( v ) { wxT(#v), v } , - -#define wxEND_ENUM( e ) { NULL , 0 } } ; \ - 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) ; \ -} \ - template<> void wxStringWriteValue(wxString &s , const e &data ) \ -{ \ - s = s_enumData##e.GetEnumMemberName((int)data) ; \ -} \ - void FromLong##e( long data , wxxVariant& result ) { result = wxxVariant((e)data) ;} \ - void ToLong##e( const wxxVariant& data , long &result ) { result = (long) data.wxTEMPLATED_MEMBER_CALL(Get , e) ;} \ - wxTO_STRING_IMP( e ) \ - wxFROM_STRING_IMP( e ) \ - wxEnumTypeInfo s_typeInfo##e(wxT_ENUM , &s_enumData##e , &wxTO_STRING( e ) , &wxFROM_STRING( e ) , &ToLong##e , &FromLong##e , typeid(e).name() ) ; - -// ---------------------------------------------------------------------------- -// Set Support -// -// in the header : -// -// enum wxFlavor -// { -// Vanilla, -// Chocolate, -// Strawberry, -// }; -// -// typedef wxBitset wxCoupe ; -// -// in the implementation file : -// -// wxBEGIN_ENUM( wxFlavor ) -// wxENUM_MEMBER( Vanilla ) -// wxENUM_MEMBER( Chocolate ) -// wxENUM_MEMBER( Strawberry ) -// wxEND_ENUM( wxFlavor ) -// -// wxIMPLEMENT_SET_STREAMING( wxCoupe , wxFlavor ) -// -// implementation note : no partial specialization for streaming, but a delegation to a -// different class -// -// ---------------------------------------------------------------------------- - -// in order to remove dependancy on string tokenizer -void WXDLLIMPEXP_BASE wxSetStringToArray( const wxString &s , wxArrayString &array ) ; - -template -void wxSetFromString(const wxString &s , wxBitset &data ) -{ - wxEnumData* edata = wxGetEnumData((e) 0) ; - data.reset() ; - - wxArrayString array ; - wxSetStringToArray( s , array ) ; - wxString flag; - for ( int i = 0 ; i < array.Count() ; ++i ) - { - flag = array[i] ; - int ivalue ; - if ( edata->HasEnumMemberValue( flag , &ivalue ) ) - { - data.set( (e) ivalue ) ; - } - } -} - -template -void wxSetToString( wxString &s , const wxBitset &data ) -{ - wxEnumData* edata = wxGetEnumData((e) 0) ; - int count = edata->GetEnumCount() ; - int i ; - s.Clear() ; - for ( i = 0 ; i < count ; i++ ) - { - e value = (e) edata->GetEnumMemberValueByIndex(i) ; - if ( data.test( value ) ) - { - // this could also be done by the templated calls - if ( !s.empty() ) - s +=wxT("|") ; - s += edata->GetEnumMemberNameByIndex(i) ; - } - } -} - -#define wxIMPLEMENT_SET_STREAMING(SetName,e) \ - template<> void wxStringReadValue(const wxString &s , wxBitset &data ) \ -{ \ - wxSetFromString( s , data ) ; \ -} \ - template<> void wxStringWriteValue( wxString &s , const wxBitset &data ) \ -{ \ - wxSetToString( s , data ) ; \ -} \ - void FromLong##SetName( long data , wxxVariant& result ) { result = wxxVariant(SetName((unsigned long)data)) ;} \ - void ToLong##SetName( const wxxVariant& data , long &result ) { result = (long) data.wxTEMPLATED_MEMBER_CALL(Get , SetName).to_ulong() ;} \ - wxTO_STRING_IMP( SetName ) \ - wxFROM_STRING_IMP( SetName ) \ - wxEnumTypeInfo s_typeInfo##SetName(wxT_SET , &s_enumData##e , &wxTO_STRING( SetName ) , &wxFROM_STRING( SetName ) , &ToLong##SetName , &FromLong##SetName, typeid(SetName).name() ) ; \ -} - -template -void wxFlagsFromString(const wxString &s , e &data ) -{ - wxEnumData* edata = wxGetEnumData((e*) 0) ; - data.m_data = 0 ; - - wxArrayString array ; - wxSetStringToArray( s , array ) ; - wxString flag; - for ( size_t i = 0 ; i < array.Count() ; ++i ) - { - flag = array[i] ; - int ivalue ; - if ( edata->HasEnumMemberValue( flag , &ivalue ) ) - { - data.m_data |= ivalue ; - } - } -} - -template -void wxFlagsToString( wxString &s , const e& data ) -{ - wxEnumData* edata = wxGetEnumData((e*) 0) ; - int count = edata->GetEnumCount() ; - int i ; - s.Clear() ; - long dataValue = data.m_data ; - for ( i = 0 ; i < count ; i++ ) - { - int value = edata->GetEnumMemberValueByIndex(i) ; - // make this to allow for multi-bit constants to work - if ( value && ( dataValue & value ) == value ) - { - // clear the flags we just set - dataValue &= ~value ; - // this could also be done by the templated calls - if ( !s.empty() ) - s +=wxT("|") ; - s += edata->GetEnumMemberNameByIndex(i) ; - } - } -} - -#define wxBEGIN_FLAGS( e ) \ - wxEnumMemberData s_enumDataMembers##e[] = { - -#define wxFLAGS_MEMBER( v ) { wxT(#v), v } , - -#define wxEND_FLAGS( e ) { NULL , 0 } } ; \ - wxEnumData s_enumData##e( s_enumDataMembers##e ) ; \ - wxEnumData *wxGetEnumData(e*) { return &s_enumData##e ; } \ - template<> void wxStringReadValue(const wxString &s , e &data ) \ -{ \ - wxFlagsFromString( s , data ) ; \ -} \ - template<> void wxStringWriteValue( wxString &s , const e& data ) \ -{ \ - wxFlagsToString( s , data ) ; \ -} \ - void FromLong##e( long data , wxxVariant& result ) { result = wxxVariant(e(data)) ;} \ - void ToLong##e( const wxxVariant& data , long &result ) { result = (long) data.wxTEMPLATED_MEMBER_CALL(Get , e).m_data ;} \ - wxTO_STRING_IMP( e ) \ - wxFROM_STRING_IMP( e ) \ - wxEnumTypeInfo s_typeInfo##e(wxT_SET , &s_enumData##e , &wxTO_STRING( e ) , &wxFROM_STRING( e ) , &ToLong##e , &FromLong##e, typeid(e).name() ) ; -// ---------------------------------------------------------------------------- -// Type Information -// ---------------------------------------------------------------------------- -// -// -// All data exposed by the RTTI is characterized using the following classes. -// The first characterization is done by wxTypeKind. All enums up to and including -// wxT_CUSTOM represent so called simple types. These cannot be divided any further. -// They can be converted to and from wxStrings, that's all. - - -enum wxTypeKind -{ - wxT_VOID = 0, // unknown type - wxT_BOOL, - wxT_CHAR, - wxT_UCHAR, - wxT_INT, - wxT_UINT, - wxT_LONG, - wxT_ULONG, - wxT_FLOAT, - wxT_DOUBLE, - wxT_STRING, // must be wxString - wxT_SET, // must be wxBitset<> template - wxT_ENUM, - wxT_CUSTOM, // user defined type (e.g. wxPoint) - - wxT_LAST_SIMPLE_TYPE_KIND = wxT_CUSTOM , - - wxT_OBJECT_PTR, // object reference - wxT_OBJECT , // embedded object - wxT_COLLECTION , // collection - - wxT_DELEGATE , // for connecting against an event source - - wxT_LAST_TYPE_KIND = wxT_DELEGATE // sentinel for bad data, asserts, debugging -}; - -class WXDLLIMPEXP_BASE wxxVariant ; -class WXDLLIMPEXP_BASE wxTypeInfo ; - -WX_DECLARE_STRING_HASH_MAP_WITH_DECL( wxTypeInfo* , wxTypeInfoMap , class WXDLLIMPEXP_BASE ) ; - -class WXDLLIMPEXP_BASE wxTypeInfo -{ -public : - typedef void (*converterToString_t)( const wxxVariant& data , wxString &result ) ; - typedef void (*converterFromString_t)( const wxString& data , wxxVariant &result ) ; - - wxTypeInfo(wxTypeKind kind, - converterToString_t to = NULL, converterFromString_t from = NULL, - const wxString &name = wxEmptyString): - m_toString(to), m_fromString(from), m_kind(kind), m_name(name) - { - Register(); - } -#if wxUSE_UNICODE - wxTypeInfo(wxTypeKind kind, - converterToString_t to, converterFromString_t from, - const char *name): - m_toString(to), m_fromString(from), m_kind(kind), m_name(wxString::FromAscii(name)) - { - Register(); - } -#endif - - virtual ~wxTypeInfo() - { - Unregister() ; - } - - // return the kind of this type (wxT_... constants) - wxTypeKind GetKind() const { return m_kind ; } - - // returns the unique name of this type - const wxString& GetTypeName() const { return m_name ; } - - // is this type a delegate type - bool IsDelegateType() const { return m_kind == wxT_DELEGATE ; } - - // is this type a custom type - bool IsCustomType() const { return m_kind == wxT_CUSTOM ; } - - // is this type an object type - bool IsObjectType() const { return m_kind == wxT_OBJECT || m_kind == wxT_OBJECT_PTR ; } - - // can the content of this type be converted to and from strings ? - bool HasStringConverters() const { return m_toString != NULL && m_fromString != NULL ; } - - // convert a wxxVariant holding data of this type into a string - void ConvertToString( const wxxVariant& data , wxString &result ) const - - { if ( m_toString ) (*m_toString)( data , result ) ; else wxLogError( _("String conversions not supported") ) ; } - - // convert a string into a wxxVariant holding the corresponding data in this type - void ConvertFromString( const wxString& data , wxxVariant &result ) const - { if( m_fromString ) (*m_fromString)( data , result ) ; else wxLogError( _("String conversions not supported") ) ; } - -#if wxUSE_UNICODE - static wxTypeInfo *FindType(const char *typeName) { return FindType( wxString::FromAscii(typeName) ) ; } -#endif - static wxTypeInfo *FindType(const wxChar *typeName); - -private : - - void Register(); - void Unregister(); - - converterToString_t m_toString ; - converterFromString_t m_fromString ; - - static wxTypeInfoMap* ms_typeTable ; - - wxTypeKind m_kind; - wxString m_name; -}; - -class WXDLLIMPEXP_BASE wxBuiltInTypeInfo : public wxTypeInfo -{ -public : - wxBuiltInTypeInfo( wxTypeKind kind , converterToString_t to = NULL , converterFromString_t from = NULL , const wxString &name = wxEmptyString ) : - wxTypeInfo( kind , to , from , name ) - { wxASSERT_MSG( GetKind() < wxT_SET , wxT("Illegal Kind for Base Type") ) ; } -#if wxUSE_UNICODE - wxBuiltInTypeInfo( wxTypeKind kind , converterToString_t to , converterFromString_t from , const char *name ) : - wxTypeInfo( kind , to , from , name ) - { wxASSERT_MSG( GetKind() < wxT_SET , wxT("Illegal Kind for Base Type") ) ; } -#endif -} ; - -class WXDLLIMPEXP_BASE wxCustomTypeInfo : public wxTypeInfo -{ -public : - wxCustomTypeInfo( const wxString &name , converterToString_t to , converterFromString_t from ) : - wxTypeInfo( wxT_CUSTOM , to , from , name ) - {} -#if wxUSE_UNICODE - wxCustomTypeInfo( const char *name , converterToString_t to , converterFromString_t from ) : - wxTypeInfo( wxT_CUSTOM , to , from , name ) - {} -#endif -} ; - -class WXDLLIMPEXP_BASE wxEnumTypeInfo : public wxTypeInfo -{ -public : - typedef void (*converterToLong_t)( const wxxVariant& data , long &result ) ; - typedef void (*converterFromLong_t)( long data , wxxVariant &result ) ; - - wxEnumTypeInfo( wxTypeKind kind , wxEnumData* enumInfo , converterToString_t to , converterFromString_t from , - converterToLong_t toLong , converterFromLong_t fromLong , const wxString &name ) : - wxTypeInfo( kind , to , from , name ) , m_toLong( toLong ) , m_fromLong( fromLong ) - { wxASSERT_MSG( kind == wxT_ENUM || kind == wxT_SET , wxT("Illegal Kind for Enum Type")) ; m_enumInfo = enumInfo ;} - -#if wxUSE_UNICODE - wxEnumTypeInfo( wxTypeKind kind , wxEnumData* enumInfo , converterToString_t to , converterFromString_t from , - converterToLong_t toLong , converterFromLong_t fromLong , const char * name ) : - wxTypeInfo( kind , to , from , name ) , m_toLong( toLong ) , m_fromLong( fromLong ) - { wxASSERT_MSG( kind == wxT_ENUM || kind == wxT_SET , wxT("Illegal Kind for Enum Type")) ; m_enumInfo = enumInfo ;} -#endif - const wxEnumData* GetEnumData() const { return m_enumInfo ; } - - // convert a wxxVariant holding data of this type into a long - void ConvertToLong( const wxxVariant& data , long &result ) const - - { if( m_toLong ) (*m_toLong)( data , result ) ; else wxLogError( _("Long Conversions not supported") ) ; } - - // convert a long into a wxxVariant holding the corresponding data in this type - void ConvertFromLong( long data , wxxVariant &result ) const - { if( m_fromLong ) (*m_fromLong)( data , result ) ; else wxLogError( _("Long Conversions not supported") ) ;} - -private : - converterToLong_t m_toLong ; - converterFromLong_t m_fromLong ; - - wxEnumData *m_enumInfo; // Kind == wxT_ENUM or Kind == wxT_SET -} ; - -class WXDLLIMPEXP_BASE wxClassTypeInfo : public wxTypeInfo -{ -public : - wxClassTypeInfo( wxTypeKind kind , wxClassInfo* classInfo , converterToString_t to = NULL , converterFromString_t from = NULL , const wxString &name = wxEmptyString) ; -#if wxUSE_UNICODE - wxClassTypeInfo( wxTypeKind kind , wxClassInfo* classInfo , converterToString_t to , converterFromString_t from , const char *name ) ; -#endif - const wxClassInfo *GetClassInfo() const { return m_classInfo ; } -private : - wxClassInfo *m_classInfo; // Kind == wxT_OBJECT - could be NULL -} ; - -class WXDLLIMPEXP_BASE wxCollectionTypeInfo : public wxTypeInfo -{ -public : - wxCollectionTypeInfo( const wxString &elementName , converterToString_t to , converterFromString_t from , const wxString &name) : - wxTypeInfo( wxT_COLLECTION , to , from , name ) - { m_elementTypeName = elementName ; m_elementType = NULL ;} -#if wxUSE_UNICODE - wxCollectionTypeInfo( const char *elementName , converterToString_t to , converterFromString_t from , const char *name ) : - wxTypeInfo( wxT_COLLECTION , to , from , name ) - { m_elementTypeName = wxString::FromAscii( elementName ) ; m_elementType = NULL ;} -#endif - const wxTypeInfo* GetElementType() const - { - if ( m_elementType == NULL ) - m_elementType = wxTypeInfo::FindType( m_elementTypeName ) ; - return m_elementType ; } -private : - mutable wxTypeInfo * m_elementType ; - wxString m_elementTypeName ; -} ; - -// a delegate is an exposed event source - -class WXDLLIMPEXP_BASE wxDelegateTypeInfo : public wxTypeInfo -{ -public : - wxDelegateTypeInfo( int eventType , wxClassInfo* eventClass , converterToString_t to = NULL , converterFromString_t from = NULL ) ; - wxDelegateTypeInfo( int eventType , int lastEventType, wxClassInfo* eventClass , converterToString_t to = NULL , converterFromString_t from = NULL ) ; - int GetEventType() const { return m_eventType ; } - int GetLastEventType() const { return m_lastEventType ; } - const wxClassInfo* GetEventClass() const { return m_eventClass ; } -private : - const wxClassInfo *m_eventClass; // (extended will merge into classinfo) - int m_eventType ; - int m_lastEventType ; -} ; - -template const wxTypeInfo* wxGetTypeInfo( T * ) { return wxTypeInfo::FindType(typeid(T).name()) ; } - -// this macro is for usage with custom, non-object derived classes and structs, wxPoint is such a custom type - -#if wxUSE_FUNC_TEMPLATE_POINTER -#define wxCUSTOM_TYPE_INFO( e , toString , fromString ) \ - wxCustomTypeInfo s_typeInfo##e(typeid(e).name() , &toString , &fromString) ; -#else -#define wxCUSTOM_TYPE_INFO( e , toString , fromString ) \ - void ToString##e( const wxxVariant& data , wxString &result ) { toString(data, result); } \ - void FromString##e( const wxString& data , wxxVariant &result ) { fromString(data, result); } \ - wxCustomTypeInfo s_typeInfo##e(typeid(e).name() , &ToString##e , &FromString##e) ; -#endif - -#define wxCOLLECTION_TYPE_INFO( element , collection ) \ - wxCollectionTypeInfo s_typeInfo##collection( typeid(element).name() , NULL , NULL , typeid(collection).name() ) ; - -// sometimes a compiler invents specializations that are nowhere called, use this macro to satisfy the refs, currently -// we don't have to play tricks, but if we will have to according to the compiler, we will use that macro for that - -#define wxILLEGAL_TYPE_SPECIALIZATION( a ) - -// ---------------------------------------------------------------------------- -// wxxVariant as typesafe data holder -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxxVariantData -{ -public: - virtual ~wxxVariantData() {} - - // return a heap allocated duplicate - virtual wxxVariantData* Clone() const = 0 ; - - // returns the type info of the contentc - virtual const wxTypeInfo* GetTypeInfo() const = 0 ; -} ; - -template class wxxVariantDataT : public wxxVariantData -{ -public: - wxxVariantDataT(const T& d) : m_data(d) {} - virtual ~wxxVariantDataT() {} - - // get a ref to the stored data - T & Get() { return m_data; } - - // get a const ref to the stored data - const T & Get() const { return m_data; } - - // set the data - void Set(const T& d) { m_data = d; } - - // return a heap allocated duplicate - virtual wxxVariantData* Clone() const { return new wxxVariantDataT( Get() ) ; } - - // returns the type info of the contentc - virtual const wxTypeInfo* GetTypeInfo() const { return wxGetTypeInfo( (T*) NULL ) ; } - -private: - T m_data; -}; - -class WXDLLIMPEXP_BASE wxxVariant -{ -public : - wxxVariant() { m_data = NULL ; } - wxxVariant( wxxVariantData* data , const wxString& name = wxEmptyString ) : m_data(data) , m_name(name) {} - wxxVariant( const wxxVariant &d ) { if ( d.m_data ) m_data = d.m_data->Clone() ; else m_data = NULL ; m_name = d.m_name ; } - - template wxxVariant( const T& data , const wxString& name = wxEmptyString ) : - m_data(new wxxVariantDataT(data) ), m_name(name) {} - - ~wxxVariant() { delete m_data ; } - - // get a ref to the stored data - template T& Get(wxTEMPLATED_MEMBER_FIX(T)) - { - wxxVariantDataT *dataptr = dynamic_cast*> (m_data) ; - wxASSERT_MSG( dataptr , wxString::Format(wxT("Cast to %s not possible"), typeid(T).name()) ) ; - return dataptr->Get() ; - } - - // get a ref to the stored data - template const T& Get(wxTEMPLATED_MEMBER_FIX(T)) const - { - const wxxVariantDataT *dataptr = dynamic_cast*> (m_data) ; - wxASSERT_MSG( dataptr , wxString::Format(wxT("Cast to %s not possible"), typeid(T).name()) ) ; - return dataptr->Get() ; - } - - bool IsEmpty() const { return m_data == NULL ; } - - template bool HasData(wxTEMPLATED_MEMBER_FIX(T)) const - { - const wxxVariantDataT *dataptr = dynamic_cast*> (m_data) ; - return dataptr != NULL ; - } - - // stores the data - template void Set(const T& data) const - { - delete m_data ; - m_data = new wxxVariantDataT(data) ; - } - - wxxVariant& operator=(const wxxVariant &d) - { - delete m_data; - m_data = d.m_data ? d.m_data->Clone() : NULL ; - m_name = d.m_name ; - return *this ; - } - - // gets the stored data casted to a wxObject* , returning NULL if cast is not possible - wxObject* GetAsObject() ; - - // get the typeinfo of the stored object - const wxTypeInfo* GetTypeInfo() const { return m_data->GetTypeInfo() ; } - - // returns this value as string - wxString GetAsString() const - { - wxString s ; - GetTypeInfo()->ConvertToString( *this , s ) ; - return s ; - } - const wxString& GetName() const { return m_name ; } -private : - wxxVariantData* m_data ; - wxString m_name ; -} ; - -#include "wx/dynarray.h" - -WX_DECLARE_OBJARRAY_WITH_DECL(wxxVariant, wxxVariantArray, class WXDLLIMPEXP_BASE); - -// templated streaming, every type must have their specialization for these methods - -template -void wxStringReadValue( const wxString &s , T &data ); - -template -void wxStringWriteValue( wxString &s , const T &data); - -template -void wxToStringConverter( const wxxVariant &v, wxString &s wxTEMPLATED_FUNCTION_FIX(T)) { wxStringWriteValue( s , v.wxTEMPLATED_MEMBER_CALL(Get , T) ) ; } - -template -void wxFromStringConverter( const wxString &s, wxxVariant &v wxTEMPLATED_FUNCTION_FIX(T)) { T d ; wxStringReadValue( s , d ) ; v = wxxVariant(d) ; } - -// ---------------------------------------------------------------------------- -// Property Support -// -// wxPropertyInfo is used to inquire of the property by name. It doesn't -// provide access to the property, only information about it. If you -// want access, look at wxPropertyAccessor. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxSetter -{ -public: - wxSetter( const wxString name ) { m_name = name ; } - virtual ~wxSetter() {} - virtual void Set( wxObject *object, const wxxVariant &variantValue ) const = 0; - const wxString& GetName() const { return m_name ; } -private: - wxString m_name; -}; - -class WXDLLIMPEXP_BASE wxGetter -{ -public: - wxGetter( const wxString name ) { m_name = name ; } - virtual ~wxGetter() {} - virtual void Get( const wxObject *object , wxxVariant& result) const = 0; - const wxString& GetName() const { return m_name ; } -private: - wxString m_name; -}; - -class WXDLLIMPEXP_BASE wxCollectionGetter -{ -public : - wxCollectionGetter( const wxString name ) { m_name = name ; } - virtual ~wxCollectionGetter() {} - virtual void Get( const wxObject *object , wxxVariantArray& result) const = 0; - const wxString& GetName() const { return m_name ; } -private : - wxString m_name ; -} ; - -template void WXDLLIMPEXP_BASE wxCollectionToVariantArray( const coll_t& coll , wxxVariantArray& result ) ; - -class WXDLLIMPEXP_BASE wxAdder -{ -public : - wxAdder( const wxString name ) { m_name = name ; } - virtual ~wxAdder() {} - virtual void Add( wxObject *object, const wxxVariant &variantValue ) const= 0; - const wxString& GetName() const { return m_name ; } -private : - wxString m_name ; -} ; - - -#define wxSETTER( property, Klass, valueType, setterMethod ) \ -class wxSetter##property : public wxSetter \ -{ \ -public: \ - wxINFUNC_CLASS_TYPE_FIX(Klass) \ - wxSetter##property() : wxSetter( wxT(#setterMethod) ) {} \ - virtual ~wxSetter##property() {} \ - void Set( wxObject *object, const wxxVariant &variantValue ) const \ -{ \ - Klass *obj = dynamic_cast(object) ; \ - if ( variantValue.wxTEMPLATED_MEMBER_CALL(HasData, valueType) ) \ - obj->setterMethod(variantValue.wxTEMPLATED_MEMBER_CALL(Get , valueType)) ; \ - else \ - obj->setterMethod(*variantValue.wxTEMPLATED_MEMBER_CALL(Get , valueType*)) ; \ -} \ -} ; - -#define wxGETTER( property, Klass, valueType , gettermethod ) \ -class wxGetter##property : public wxGetter \ -{ \ -public : \ - wxINFUNC_CLASS_TYPE_FIX(Klass) \ - wxGetter##property() : wxGetter( wxT(#gettermethod) ) {} \ - virtual ~wxGetter##property() {} \ - void Get( const wxObject *object , wxxVariant &result) const \ -{ \ - const Klass *obj = dynamic_cast(object) ; \ - result = wxxVariant( obj->gettermethod() ) ; \ -} \ -} ; - -#define wxADDER( property, Klass, valueType , addermethod ) \ -class wxAdder##property : public wxAdder \ -{ \ -public: \ - wxINFUNC_CLASS_TYPE_FIX(Klass) \ - wxAdder##property() : wxAdder( wxT(#addermethod) ) {} \ - virtual ~wxAdder##property() {} \ - void Add( wxObject *object, const wxxVariant &variantValue ) const \ -{ \ - Klass *obj = dynamic_cast(object) ; \ - if ( variantValue.wxTEMPLATED_MEMBER_CALL(HasData, valueType) ) \ - obj->addermethod(variantValue.wxTEMPLATED_MEMBER_CALL(Get , valueType)) ; \ - else \ - obj->addermethod(*variantValue.wxTEMPLATED_MEMBER_CALL(Get , valueType*)) ; \ -} \ -} ; - -#define wxCOLLECTION_GETTER( property, Klass, valueType , gettermethod ) \ -class wxCollectionGetter##property : public wxCollectionGetter \ -{ \ -public : \ - wxINFUNC_CLASS_TYPE_FIX(Klass) \ - wxCollectionGetter##property() : wxCollectionGetter( wxT(#gettermethod) ) {} \ - virtual ~wxCollectionGetter##property() {} \ - void Get( const wxObject *object , wxxVariantArray &result) const \ -{ \ - const Klass *obj = dynamic_cast(object) ; \ - wxCollectionToVariantArray( obj->gettermethod() , result ) ; \ -} \ -} ; - -class WXDLLIMPEXP_BASE wxPropertyAccessor -{ -public : - wxPropertyAccessor( wxSetter *setter , wxGetter *getter , wxAdder *adder , wxCollectionGetter *collectionGetter ) - { m_setter = setter ; m_getter = getter ; m_adder = adder ; m_collectionGetter = collectionGetter ;} - - virtual ~wxPropertyAccessor() {} - - // Setting a simple property (non-collection) - virtual void SetProperty(wxObject *object, const wxxVariant &value) const - { if ( m_setter ) m_setter->Set( object , value ) ; else wxLogError( _("SetProperty called w/o valid setter") ) ;} - - // Getting a simple property (non-collection) - virtual void GetProperty(const wxObject *object, wxxVariant &result) const - { if ( m_getter ) m_getter->Get( object , result ) ; else wxLogError( _("GetProperty called w/o valid getter") ) ;} - - // Adding an element to a collection property - virtual void AddToPropertyCollection(wxObject *object, const wxxVariant &value) const - { if ( m_adder ) m_adder->Add( object , value ) ; else wxLogError( _("AddToPropertyCollection called w/o valid adder") ) ;} - - // Getting a collection property - virtual void GetPropertyCollection( const wxObject *obj, wxxVariantArray &result) const - { if ( m_collectionGetter ) m_collectionGetter->Get( obj , result) ; else wxLogError( _("GetPropertyCollection called w/o valid collection getter") ) ;} - - virtual bool HasSetter() const { return m_setter != NULL ; } - virtual bool HasCollectionGetter() const { return m_collectionGetter != NULL ; } - virtual bool HasGetter() const { return m_getter != NULL ; } - virtual bool HasAdder() const { return m_adder != NULL ; } - - virtual const wxString& GetCollectionGetterName() const - { return m_collectionGetter->GetName() ; } - virtual const wxString& GetGetterName() const - { return m_getter->GetName() ; } - virtual const wxString& GetSetterName() const - { return m_setter->GetName() ; } - virtual const wxString& GetAdderName() const - { return m_adder->GetName() ; } - -protected : - wxSetter *m_setter ; - wxAdder *m_adder ; - wxGetter *m_getter ; - wxCollectionGetter* m_collectionGetter ; -}; - -class WXDLLIMPEXP_BASE wxGenericPropertyAccessor : public wxPropertyAccessor -{ -public : - wxGenericPropertyAccessor( const wxString &propName ) ; - virtual ~wxGenericPropertyAccessor() ; - - void RenameProperty( const wxString& WXUNUSED_UNLESS_DEBUG(oldName), - const wxString& newName ) - { - wxASSERT( oldName == m_propertyName ) ; m_propertyName = newName ; - } - virtual bool HasSetter() const { return true ; } - virtual bool HasGetter() const { return true ; } - virtual bool HasAdder() const { return false ; } - virtual bool HasCollectionGetter() const { return false ; } - - virtual const wxString& GetGetterName() const - { return m_getterName ; } - virtual const wxString& GetSetterName() const - { return m_setterName ; } - - virtual void SetProperty(wxObject *object, const wxxVariant &value) const ; - virtual void GetProperty(const wxObject *object, wxxVariant &value) const ; - - // Adding an element to a collection property - virtual void AddToPropertyCollection(wxObject *WXUNUSED(object), const wxxVariant &WXUNUSED(value)) const - { wxLogError( _("AddToPropertyCollection called on a generic accessor") ) ;} - - // Getting a collection property - virtual void GetPropertyCollection( const wxObject *WXUNUSED(obj), wxxVariantArray &WXUNUSED(result)) const - { wxLogError ( _("GetPropertyCollection called on a generic accessor") ) ;} -private : - struct wxGenericPropertyAccessorInternal ; - wxGenericPropertyAccessorInternal* m_data ; - wxString m_propertyName ; - wxString m_setterName ; - wxString m_getterName ; -} ; - -typedef long wxPropertyInfoFlags ; -enum { - // will be removed in future releases - wxPROP_DEPRECATED = 0x00000001 , - // object graph property, will be streamed with priority (after constructor properties) - wxPROP_OBJECT_GRAPH = 0x00000002 , - // this will only be streamed out and in as enum/set, the internal representation is still a long - wxPROP_ENUM_STORE_LONG = 0x00000004 , - // don't stream out this property, needed eg to avoid streaming out children that are always created by their parents - wxPROP_DONT_STREAM = 0x00000008 , -} ; - -class WXDLLIMPEXP_BASE wxPropertyInfo -{ - friend class WXDLLIMPEXP_BASE wxDynamicClassInfo ; -public : - wxPropertyInfo(wxPropertyInfo* &iter, - wxClassInfo* itsClass, - const wxString& name, - const wxString& typeName, - wxPropertyAccessor *accessor, - wxxVariant dv, - wxPropertyInfoFlags flags = 0, - const wxString& helpString = wxEmptyString, - const wxString& groupString = wxEmptyString) : - m_itsClass(itsClass), - m_name(name), - m_typeInfo(NULL), - m_typeName(typeName) , - m_collectionElementTypeInfo(NULL), - m_accessor(accessor), - m_defaultValue(dv), - m_flags(flags), - m_helpString(helpString), - m_groupString(groupString) - { - Insert(iter); - } - -#if wxUSE_UNICODE - wxPropertyInfo(wxPropertyInfo* &iter, - wxClassInfo* itsClass, - const wxString& name, - const char* typeName, - wxPropertyAccessor *accessor, - wxxVariant dv, - wxPropertyInfoFlags flags = 0, - const wxString& helpString = wxEmptyString, - const wxString& groupString = wxEmptyString) : - m_itsClass(itsClass), - m_name(name), - m_typeInfo(NULL), - m_typeName(wxString::FromAscii(typeName)) , - m_collectionElementTypeInfo(NULL), - m_accessor(accessor), - m_defaultValue(dv), - m_flags(flags), - m_helpString(helpString), - m_groupString(groupString) - { - Insert(iter); - } -#endif - wxPropertyInfo(wxPropertyInfo* &iter, - wxClassInfo* itsClass, - const wxString& name, - wxDelegateTypeInfo* type, - wxPropertyAccessor *accessor, - wxxVariant dv, - wxPropertyInfoFlags flags = 0, - const wxString& helpString = wxEmptyString, - const wxString& groupString = wxEmptyString) : - m_itsClass(itsClass), - m_name(name), - m_typeInfo(type), - m_collectionElementTypeInfo(NULL), - m_accessor(accessor), - m_defaultValue(dv), - m_flags(flags), - m_helpString(helpString), - m_groupString(groupString) - { - Insert(iter); - } - - wxPropertyInfo(wxPropertyInfo* &iter, - wxClassInfo* itsClass, const wxString& name, - const wxString& collectionTypeName, - const wxString& elementTypeName, - wxPropertyAccessor *accessor, - wxPropertyInfoFlags flags = 0, - const wxString& helpString = wxEmptyString, - const wxString& groupString = wxEmptyString) : - m_itsClass(itsClass), - m_name(name), - m_typeInfo(NULL), - m_typeName(collectionTypeName) , - m_collectionElementTypeInfo(NULL), - m_collectionElementTypeName(elementTypeName), - m_accessor(accessor) , - m_flags(flags), - m_helpString(helpString), - m_groupString(groupString) - { - Insert(iter); - } - -#if wxUSE_UNICODE - wxPropertyInfo(wxPropertyInfo* &iter, - wxClassInfo* itsClass, const wxString& name, - const char* collectionTypeName, - const char* elementTypeName, - wxPropertyAccessor *accessor, - wxPropertyInfoFlags flags = 0, - const wxString& helpString = wxEmptyString, - const wxString& groupString = wxEmptyString) : - m_itsClass(itsClass), - m_name(name), - m_typeInfo(NULL), - m_typeName(wxString::FromAscii(collectionTypeName)) , - m_collectionElementTypeInfo(NULL), - m_collectionElementTypeName(wxString::FromAscii(elementTypeName)), - m_accessor(accessor) , - m_flags(flags), - m_helpString(helpString), - m_groupString(groupString) - { - Insert(iter); - } -#endif - ~wxPropertyInfo() ; - - // return the class this property is declared in - const wxClassInfo* GetDeclaringClass() const { return m_itsClass ; } - - // return the name of this property - const wxString& GetName() const { return m_name ; } - - // returns the flags of this property - wxPropertyInfoFlags GetFlags() const { return m_flags ;} - - // returns the short help string of this property - const wxString& GetHelpString() const { return m_helpString ; } - - // returns the group string of this property - const wxString& GetGroupString() const { return m_groupString ; } - - // return the element type info of this property (for collections, otherwise NULL) - const wxTypeInfo * GetCollectionElementTypeInfo() const - { - if ( m_collectionElementTypeInfo == NULL ) - m_collectionElementTypeInfo = wxTypeInfo::FindType(m_collectionElementTypeName) ; - return m_collectionElementTypeInfo ; - } - - // return the type info of this property - const wxTypeInfo * GetTypeInfo() const - { - if ( m_typeInfo == NULL ) - m_typeInfo = wxTypeInfo::FindType(m_typeName) ; - return m_typeInfo ; - } - - // return the accessor for this property - wxPropertyAccessor* GetAccessor() const { return m_accessor ; } - - // returns NULL if this is the last property of this class - wxPropertyInfo* GetNext() const { return m_next ; } - - // returns the default value of this property, its kind may be wxT_VOID if it is not valid - wxxVariant GetDefaultValue() const { return m_defaultValue ; } -private : - void Insert(wxPropertyInfo* &iter) - { - m_next = NULL ; - if ( iter == NULL ) - iter = this ; - else - { - wxPropertyInfo* i = iter ; - while( i->m_next ) - i = i->m_next ; - - i->m_next = this ; - } - } - - wxClassInfo* m_itsClass ; - wxString m_name ; - mutable wxTypeInfo* m_typeInfo ; - wxString m_typeName ; - mutable wxTypeInfo* m_collectionElementTypeInfo ; - wxString m_collectionElementTypeName ; - wxPropertyAccessor* m_accessor ; - wxxVariant m_defaultValue; - wxPropertyInfoFlags m_flags ; - wxString m_helpString ; - wxString m_groupString ; - // string representation of the default value - // to be assigned by the designer to the property - // when the component is dropped on the container. - wxPropertyInfo* m_next ; -}; - -WX_DECLARE_STRING_HASH_MAP_WITH_DECL( wxPropertyInfo* , wxPropertyInfoMap , class WXDLLIMPEXP_BASE ) ; - -#define wxBEGIN_PROPERTIES_TABLE(theClass) \ - wxPropertyInfo *theClass::GetPropertiesStatic() \ -{ \ - typedef theClass class_t; \ - static wxPropertyInfo* first = NULL ; - -#define wxEND_PROPERTIES_TABLE() \ - return first ; } - -#define wxHIDE_PROPERTY( pname ) \ - static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(void).name() ,NULL , wxxVariant() , wxPROP_DONT_STREAM , wxEmptyString , wxEmptyString ) ; - -#define wxPROPERTY( pname , type , setter , getter , defaultValue , flags , help , group) \ - wxSETTER( pname , class_t , type , setter ) \ - static wxSetter##pname _setter##pname ; \ - wxGETTER( pname , class_t , type , getter ) \ - static wxGetter##pname _getter##pname ; \ - static wxPropertyAccessor _accessor##pname( &_setter##pname , &_getter##pname , NULL , NULL ) ; \ - static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(type).name() ,&_accessor##pname , wxxVariant(defaultValue) , flags , group , help ) ; - -#define wxPROPERTY_FLAGS( pname , flags , type , setter , getter ,defaultValue , pflags , help , group) \ - wxSETTER( pname , class_t , type , setter ) \ - static wxSetter##pname _setter##pname ; \ - wxGETTER( pname , class_t , type , getter ) \ - static wxGetter##pname _getter##pname ; \ - static wxPropertyAccessor _accessor##pname( &_setter##pname , &_getter##pname , NULL , NULL ) ; \ - static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(flags).name() ,&_accessor##pname , wxxVariant(defaultValue), wxPROP_ENUM_STORE_LONG | pflags , help , group ) ; - -#define wxREADONLY_PROPERTY( pname , type , getter ,defaultValue , flags , help , group) \ - wxGETTER( pname , class_t , type , getter ) \ - static wxGetter##pname _getter##pname ; \ - static wxPropertyAccessor _accessor##pname( NULL , &_getter##pname , NULL , NULL ) ; \ - static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(type).name() ,&_accessor##pname , wxxVariant(defaultValue), flags , help , group ) ; - -#define wxREADONLY_PROPERTY_FLAGS( pname , flags , type , getter ,defaultValue , pflags , help , group) \ - wxGETTER( pname , class_t , type , getter ) \ - static wxGetter##pname _getter##pname ; \ - static wxPropertyAccessor _accessor##pname( NULL , &_getter##pname , NULL , NULL ) ; \ - static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(flags).name() ,&_accessor##pname , wxxVariant(defaultValue), wxPROP_ENUM_STORE_LONG | pflags , help , group ) ; - -#define wxPROPERTY_COLLECTION( pname , colltype , addelemtype , adder , getter , flags , help , group ) \ - wxADDER( pname , class_t , addelemtype , adder ) \ - static wxAdder##pname _adder##pname ; \ - wxCOLLECTION_GETTER( pname , class_t , colltype , getter ) \ - static wxCollectionGetter##pname _collectionGetter##pname ; \ - static wxPropertyAccessor _accessor##pname( NULL , NULL ,&_adder##pname , &_collectionGetter##pname ) ; \ - static wxPropertyInfo _propertyInfo##pname( first , class_t::GetClassInfoStatic() , wxT(#pname) , typeid(colltype).name() ,typeid(addelemtype).name() ,&_accessor##pname , flags , help , group ) ; - -#define wxREADONLY_PROPERTY_COLLECTION( pname , colltype , addelemtype , getter , flags , help , group) \ - wxCOLLECTION_GETTER( pname , class_t , colltype , getter ) \ - static wxCollectionGetter##pname _collectionGetter##pname ; \ - static wxPropertyAccessor _accessor##pname( NULL , NULL , NULL , &_collectionGetter##pname ) ; \ - static wxPropertyInfo _propertyInfo##pname( first ,class_t::GetClassInfoStatic() , wxT(#pname) , typeid(colltype).name() ,typeid(addelemtype).name() ,&_accessor##pname , flags , help , group ) ; - - -#define wxEVENT_PROPERTY( name , eventType , eventClass ) \ - static wxDelegateTypeInfo _typeInfo##name( eventType , CLASSINFO( eventClass ) ) ; \ - static wxPropertyInfo _propertyInfo##name( first ,class_t::GetClassInfoStatic() , wxT(#name) , &_typeInfo##name , NULL , wxxVariant() ) ; \ - -#define wxEVENT_RANGE_PROPERTY( name , eventType , lastEventType , eventClass ) \ - static wxDelegateTypeInfo _typeInfo##name( eventType , lastEventType , CLASSINFO( eventClass ) ) ; \ - static wxPropertyInfo _propertyInfo##name( first , class_t::GetClassInfoStatic() , wxT(#name) , &_typeInfo##name , NULL , wxxVariant() ) ; \ - -// ---------------------------------------------------------------------------- -// Implementation Helper for Simple Properties -// ---------------------------------------------------------------------------- - -#define wxIMPLEMENT_PROPERTY(name, type) \ -private:\ - type m_##name; \ -public: \ - void Set##name( type const & p) { m_##name = p; } \ - type const & Get##name() const { return m_##name; } - -// ---------------------------------------------------------------------------- -// Handler Info -// -// this is describing an event sink -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxHandlerInfo -{ - friend class WXDLLIMPEXP_BASE wxDynamicClassInfo ; -public : - wxHandlerInfo(wxHandlerInfo* &iter, - wxClassInfo* itsClass, - const wxString& name, - wxObjectEventFunction address, - const wxClassInfo* eventClassInfo) : - m_eventFunction(address), - m_name(name), - m_eventClassInfo(eventClassInfo) , - m_itsClass(itsClass) - { - m_next = NULL ; - if ( iter == NULL ) - iter = this ; - else - { - wxHandlerInfo* i = iter ; - while( i->m_next ) - i = i->m_next ; - - i->m_next = this ; - } - } - - ~wxHandlerInfo() ; - - // return the name of this handler - const wxString& GetName() const { return m_name ; } - - // return the class info of the event - const wxClassInfo *GetEventClassInfo() const { return m_eventClassInfo ; } - - // get the handler function pointer - wxObjectEventFunction GetEventFunction() const { return m_eventFunction ; } - - // returns NULL if this is the last handler of this class - wxHandlerInfo* GetNext() const { return m_next ; } - - // return the class this property is declared in - const wxClassInfo* GetDeclaringClass() const { return m_itsClass ; } - -private : - wxObjectEventFunction m_eventFunction ; - wxString m_name; - const wxClassInfo* m_eventClassInfo ; - wxHandlerInfo* m_next ; - wxClassInfo* m_itsClass ; -}; - -#define wxHANDLER(name,eventClassType) \ - static wxHandlerInfo _handlerInfo##name( first , class_t::GetClassInfoStatic() , wxT(#name) , (wxObjectEventFunction) (wxEventFunction) &name , CLASSINFO( eventClassType ) ) ; - -#define wxBEGIN_HANDLERS_TABLE(theClass) \ - wxHandlerInfo *theClass::GetHandlersStatic() \ -{ \ - typedef theClass class_t; \ - static wxHandlerInfo* first = NULL ; - -#define wxEND_HANDLERS_TABLE() \ - return first ; } - -// ---------------------------------------------------------------------------- -// Constructor Bridges -// -// allow to set up constructors with params during runtime -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxConstructorBridge -{ -public : - virtual void Create(wxObject * &o, wxxVariant *args) = 0; -}; - -// a direct constructor bridge calls the operator new for this class and -// passes all params to the constructor. needed for classes that cannot be -// instantiated using alloc-create semantics -class WXDLLIMPEXP_BASE wxDirectConstructorBrigde : public wxConstructorBridge -{ -public : - virtual void Create(wxObject * &o, wxxVariant *args) = 0; -} ; - -// Creator Bridges for all Numbers of Params - -// no params - -template -struct wxConstructorBridge_0 : public wxConstructorBridge -{ - void Create(wxObject * &o, wxxVariant *) - { - Class *obj = dynamic_cast(o); - obj->Create(); - } -}; - -struct wxConstructorBridge_Dummy : public wxConstructorBridge -{ - void Create(wxObject *&, wxxVariant *) - { - } -} ; - -#define wxCONSTRUCTOR_0(klass) \ - wxConstructorBridge_0 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { NULL } ; \ - const int klass::ms_constructorPropertiesCount = 0 ; - -#define wxCONSTRUCTOR_DUMMY(klass) \ - wxConstructorBridge_Dummy constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { NULL } ; \ - const int klass::ms_constructorPropertiesCount = 0 ; - -// 1 param - -template -struct wxConstructorBridge_1 : public wxConstructorBridge -{ - void Create(wxObject * &o, wxxVariant *args) - { - Class *obj = dynamic_cast(o); - obj->Create( - args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) - ); - } -}; - -#define wxCONSTRUCTOR_1(klass,t0,v0) \ - wxConstructorBridge_1 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) } ; \ - const int klass::ms_constructorPropertiesCount = 1 ; - -// 2 params - -template -struct wxConstructorBridge_2 : public wxConstructorBridge -{ - void Create(wxObject * &o, wxxVariant *args) - { - Class *obj = dynamic_cast(o); - obj->Create( - args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) , - args[1].wxTEMPLATED_MEMBER_CALL(Get , T1) - ); - } -}; - -#define wxCONSTRUCTOR_2(klass,t0,v0,t1,v1) \ - wxConstructorBridge_2 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) , wxT(#v1) } ; \ - const int klass::ms_constructorPropertiesCount = 2; - -// direct constructor version - -template -struct wxDirectConstructorBridge_2 : public wxDirectConstructorBrigde -{ - void Create(wxObject * &o, wxxVariant *args) - { - o = new Class( - args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) , - args[1].wxTEMPLATED_MEMBER_CALL(Get , T1) - ); - } -}; - -#define wxDIRECT_CONSTRUCTOR_2(klass,t0,v0,t1,v1) \ - wxDirectConstructorBridge_2 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) , wxT(#v1) } ; \ - const int klass::ms_constructorPropertiesCount = 2; - - -// 3 params - -template -struct wxConstructorBridge_3 : public wxConstructorBridge -{ - void Create(wxObject * &o, wxxVariant *args) - { - Class *obj = dynamic_cast(o); - obj->Create( - args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) , - args[1].wxTEMPLATED_MEMBER_CALL(Get , T1) , - args[2].wxTEMPLATED_MEMBER_CALL(Get , T2) - ); - } -}; - -#define wxCONSTRUCTOR_3(klass,t0,v0,t1,v1,t2,v2) \ - wxConstructorBridge_3 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) , wxT(#v1) , wxT(#v2) } ; \ - const int klass::ms_constructorPropertiesCount = 3 ; - -// direct constructor version - -template -struct wxDirectConstructorBridge_3 : public wxDirectConstructorBrigde -{ - void Create(wxObject * &o, wxxVariant *args) - { - o = new Class( - args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) , - args[1].wxTEMPLATED_MEMBER_CALL(Get , T1) , - args[2].wxTEMPLATED_MEMBER_CALL(Get , T2) - ); - } -}; - -#define wxDIRECT_CONSTRUCTOR_3(klass,t0,v0,t1,v1,t2,v2) \ - wxDirectConstructorBridge_3 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) , wxT(#v1) , wxT(#v2) } ; \ - const int klass::ms_constructorPropertiesCount = 3; - -// 4 params - -template -struct wxConstructorBridge_4 : public wxConstructorBridge -{ - void Create(wxObject * &o, wxxVariant *args) - { - Class *obj = dynamic_cast(o); - obj->Create( - args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) , - args[1].wxTEMPLATED_MEMBER_CALL(Get , T1) , - args[2].wxTEMPLATED_MEMBER_CALL(Get , T2) , - args[3].wxTEMPLATED_MEMBER_CALL(Get , T3) - ); - } -}; - -#define wxCONSTRUCTOR_4(klass,t0,v0,t1,v1,t2,v2,t3,v3) \ - wxConstructorBridge_4 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) , wxT(#v1) , wxT(#v2) , wxT(#v3) } ; \ - const int klass::ms_constructorPropertiesCount = 4 ; - -// 5 params - -template -struct wxConstructorBridge_5 : public wxConstructorBridge -{ - void Create(wxObject * &o, wxxVariant *args) - { - Class *obj = dynamic_cast(o); - obj->Create( - args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) , - args[1].wxTEMPLATED_MEMBER_CALL(Get , T1) , - args[2].wxTEMPLATED_MEMBER_CALL(Get , T2) , - args[3].wxTEMPLATED_MEMBER_CALL(Get , T3) , - args[4].wxTEMPLATED_MEMBER_CALL(Get , T4) - ); - } -}; - -#define wxCONSTRUCTOR_5(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4) \ - wxConstructorBridge_5 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) , wxT(#v1) , wxT(#v2) , wxT(#v3) , wxT(#v4) } ; \ - const int klass::ms_constructorPropertiesCount = 5; - -// 6 params - -template -struct wxConstructorBridge_6 : public wxConstructorBridge -{ - void Create(wxObject * &o, wxxVariant *args) - { - Class *obj = dynamic_cast(o); - obj->Create( - args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) , - args[1].wxTEMPLATED_MEMBER_CALL(Get , T1) , - args[2].wxTEMPLATED_MEMBER_CALL(Get , T2) , - args[3].wxTEMPLATED_MEMBER_CALL(Get , T3) , - args[4].wxTEMPLATED_MEMBER_CALL(Get , T4) , - args[5].wxTEMPLATED_MEMBER_CALL(Get , T5) - ); - } -}; - -#define wxCONSTRUCTOR_6(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5) \ - wxConstructorBridge_6 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) , wxT(#v1) , wxT(#v2) , wxT(#v3) , wxT(#v4) , wxT(#v5) } ; \ - const int klass::ms_constructorPropertiesCount = 6; - -// direct constructor version - -template -struct wxDirectConstructorBridge_6 : public wxDirectConstructorBrigde -{ - void Create(wxObject * &o, wxxVariant *args) - { - o = new Class( - args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) , - args[1].wxTEMPLATED_MEMBER_CALL(Get , T1) , - args[2].wxTEMPLATED_MEMBER_CALL(Get , T2) , - args[3].wxTEMPLATED_MEMBER_CALL(Get , T3) , - args[4].wxTEMPLATED_MEMBER_CALL(Get , T4) , - args[5].wxTEMPLATED_MEMBER_CALL(Get , T5) - ); - } -}; - -#define wxDIRECT_CONSTRUCTOR_6(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5) \ - wxDirectConstructorBridge_6 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) , wxT(#v1) , wxT(#v2) , wxT(#v3) , wxT(#v4) , wxT(#v5) } ; \ - const int klass::ms_constructorPropertiesCount = 6; - -// 7 params - -template -struct wxConstructorBridge_7 : public wxConstructorBridge -{ - void Create(wxObject * &o, wxxVariant *args) - { - Class *obj = dynamic_cast(o); - obj->Create( - args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) , - args[1].wxTEMPLATED_MEMBER_CALL(Get , T1) , - args[2].wxTEMPLATED_MEMBER_CALL(Get , T2) , - args[3].wxTEMPLATED_MEMBER_CALL(Get , T3) , - args[4].wxTEMPLATED_MEMBER_CALL(Get , T4) , - args[5].wxTEMPLATED_MEMBER_CALL(Get , T5) , - args[6].wxTEMPLATED_MEMBER_CALL(Get , T6) - ); - } -}; - -#define wxCONSTRUCTOR_7(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6) \ - wxConstructorBridge_7 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) , wxT(#v1) , wxT(#v2) , wxT(#v3) , wxT(#v4) , wxT(#v5) , wxT(#v6) } ; \ - const int klass::ms_constructorPropertiesCount = 7; - -// 8 params - -template -struct wxConstructorBridge_8 : public wxConstructorBridge -{ - void Create(wxObject * &o, wxxVariant *args) - { - Class *obj = dynamic_cast(o); - obj->Create( - args[0].wxTEMPLATED_MEMBER_CALL(Get , T0) , - args[1].wxTEMPLATED_MEMBER_CALL(Get , T1) , - args[2].wxTEMPLATED_MEMBER_CALL(Get , T2) , - args[3].wxTEMPLATED_MEMBER_CALL(Get , T3) , - args[4].wxTEMPLATED_MEMBER_CALL(Get , T4) , - args[5].wxTEMPLATED_MEMBER_CALL(Get , T5) , - args[6].wxTEMPLATED_MEMBER_CALL(Get , T6) , - args[7].wxTEMPLATED_MEMBER_CALL(Get , T7) - ); - } -}; - -#define wxCONSTRUCTOR_8(klass,t0,v0,t1,v1,t2,v2,t3,v3,t4,v4,t5,v5,t6,v6,t7,v7) \ - wxConstructorBridge_8 constructor##klass ; \ - wxConstructorBridge* klass::ms_constructor = &constructor##klass ; \ - const wxChar *klass::ms_constructorProperties[] = { wxT(#v0) , wxT(#v1) , wxT(#v2) , wxT(#v3) , wxT(#v4) , wxT(#v5) , wxT(#v6) , wxT(#v7) } ; \ - const int klass::ms_constructorPropertiesCount = 8; -// ---------------------------------------------------------------------------- -// wxClassInfo -// ---------------------------------------------------------------------------- - -typedef wxObject *(*wxObjectConstructorFn)(void); -typedef wxObject* (*wxVariantToObjectConverter)( wxxVariant &data ) ; -typedef wxxVariant (*wxObjectToVariantConverter)( wxObject* ) ; - -class WXDLLIMPEXP_BASE wxWriter; -class WXDLLIMPEXP_BASE wxPersister; - -typedef bool (*wxObjectStreamingCallback) ( const wxObject *, wxWriter * , wxPersister * , wxxVariantArray & ) ; - -class WXDLLIMPEXP_BASE wxClassInfo -{ - friend class WXDLLIMPEXP_BASE wxPropertyInfo ; - friend class WXDLLIMPEXP_BASE wxHandlerInfo ; -public: - wxClassInfo(const wxClassInfo **_Parents, - const wxChar *_UnitName, - const wxChar *_ClassName, - int size, - wxObjectConstructorFn ctor , - wxPropertyInfo *_Props , - wxHandlerInfo *_Handlers , - wxConstructorBridge* _Constructor , - const wxChar ** _ConstructorProperties , - const int _ConstructorPropertiesCount , - wxVariantToObjectConverter _PtrConverter1 , - wxVariantToObjectConverter _Converter2 , - wxObjectToVariantConverter _Converter3 , - wxObjectStreamingCallback _streamingCallback = NULL - ) : - - m_className(_ClassName), - m_objectSize(size), - m_objectConstructor(ctor), - m_next(sm_first), - m_firstProperty(_Props), - m_firstHandler(_Handlers), - m_parents(_Parents), - m_unitName(_UnitName), - m_constructor(_Constructor), - m_constructorProperties(_ConstructorProperties), - m_constructorPropertiesCount(_ConstructorPropertiesCount), - m_variantOfPtrToObjectConverter(_PtrConverter1), - m_variantToObjectConverter(_Converter2), - m_objectToVariantConverter(_Converter3), - m_streamingCallback(_streamingCallback) - { - sm_first = this; - Register() ; - } - - wxClassInfo(const wxChar *_UnitName, const wxChar *_ClassName, - const wxClassInfo **_Parents) : - m_className(_ClassName), - m_objectSize(0), - m_objectConstructor(NULL), - m_next(sm_first), - m_firstProperty(NULL), - m_firstHandler(NULL), - m_parents(_Parents), - m_unitName(_UnitName), - m_constructor(NULL), - m_constructorProperties(NULL), - m_constructorPropertiesCount(0), - m_variantOfPtrToObjectConverter(NULL), - m_variantToObjectConverter(NULL), - m_objectToVariantConverter(NULL), - m_streamingCallback(NULL) - { - sm_first = this; - Register() ; - } - - virtual ~wxClassInfo() ; - - // allocates an instance of this class, this object does not have to be initialized or fully constructed - // as this call will be followed by a call to Create - virtual wxObject *AllocateObject() const { return m_objectConstructor ? (*m_objectConstructor)() : 0; } - - // 'old naming' for AllocateObject staying here for backward compatibility - wxObject *CreateObject() const { return AllocateObject() ; } - - // direct construction call for classes that cannot construct instances via alloc/create - wxObject *ConstructObject(int ParamCount, wxxVariant *Params) const - { - if ( ParamCount != m_constructorPropertiesCount ) - { - wxLogError( _("Illegal Parameter Count for ConstructObject Method") ) ; - return NULL ; - } - wxObject *object = NULL ; - m_constructor->Create( object , Params ) ; - return object ; - } - - bool NeedsDirectConstruction() const { return dynamic_cast( m_constructor) != NULL ; } - - const wxChar *GetClassName() const { return m_className; } - const wxChar *GetBaseClassName1() const - { return m_parents[0] ? m_parents[0]->GetClassName() : NULL; } - const wxChar *GetBaseClassName2() const - { return (m_parents[0] && m_parents[1]) ? m_parents[1]->GetClassName() : NULL; } - const wxChar *GetIncludeName() const { return m_unitName ; } - const wxClassInfo **GetParents() const { return m_parents; } - int GetSize() const { return m_objectSize; } - bool IsDynamic() const { return (NULL != m_objectConstructor); } - - wxObjectConstructorFn GetConstructor() const { return m_objectConstructor; } - static const wxClassInfo *GetFirst() { return sm_first; } - const wxClassInfo *GetNext() const { return m_next; } - static wxClassInfo *FindClass(const wxChar *className); - - // Climb upwards through inheritance hierarchy. - // Dual inheritance is catered for. - - bool IsKindOf(const wxClassInfo *info) const - { - if ( info != 0 ) - { - if ( info == this ) - return true ; - - for ( int i = 0 ; m_parents[i] ; ++ i ) - { - if ( m_parents[i]->IsKindOf( info ) ) - return true ; - } - } - return false ; - } - - // if there is a callback registered with that class it will be called - // before this object will be written to disk, it can veto streaming out - // this object by returning false, if this class has not registered a - // callback, the search will go up the inheritance tree if no callback has - // been registered true will be returned by default - bool BeforeWriteObject( const wxObject *obj, wxWriter *streamer , wxPersister *persister , wxxVariantArray &metadata) const ; - - // gets the streaming callback from this class or any superclass - wxObjectStreamingCallback GetStreamingCallback() const ; - -#if WXWIN_COMPATIBILITY_2_4 - // Initializes parent pointers and hash table for fast searching. - wxDEPRECATED( static void InitializeClasses() ); - // Cleans up hash table used for fast searching. - wxDEPRECATED( static void CleanUpClasses() ); -#endif - static void CleanUp(); - - // returns the first property - const wxPropertyInfo* GetFirstProperty() const { return m_firstProperty ; } - - // returns the first handler - const wxHandlerInfo* GetFirstHandler() const { return m_firstHandler ; } - - // Call the Create upon an instance of the class, in the end the object is fully - // initialized - virtual void Create (wxObject *object, int ParamCount, wxxVariant *Params) const - { - if ( ParamCount != m_constructorPropertiesCount ) - { - wxLogError( _("Illegal Parameter Count for Create Method") ) ; - return ; - } - m_constructor->Create( object , Params ) ; - } - - // get number of parameters for constructor - virtual int GetCreateParamCount() const { return m_constructorPropertiesCount; } - - // get n-th constructor parameter - virtual const wxChar* GetCreateParamName(int n) const { return m_constructorProperties[n] ; } - - // Runtime access to objects for simple properties (get/set) by property name, and variant data - virtual void SetProperty (wxObject *object, const wxChar *propertyName, const wxxVariant &value) const ; - virtual wxxVariant GetProperty (wxObject *object, const wxChar *propertyName) const; - - // Runtime access to objects for collection properties by property name - virtual wxxVariantArray GetPropertyCollection(wxObject *object, const wxChar *propertyName) const ; - virtual void AddToPropertyCollection(wxObject *object, const wxChar *propertyName , const wxxVariant& value) const ; - - // we must be able to cast variants to wxObject pointers, templates seem not to be suitable - wxObject* VariantToInstance( wxxVariant &data ) const - { - if ( data.GetTypeInfo()->GetKind() == wxT_OBJECT ) - return m_variantToObjectConverter( data ) ; - else - return m_variantOfPtrToObjectConverter( data ) ; - } - - wxxVariant InstanceToVariant( wxObject *object ) const { return m_objectToVariantConverter( object ) ; } - - // find property by name - virtual const wxPropertyInfo *FindPropertyInfo (const wxChar *PropertyName) const ; - - // find handler by name - virtual const wxHandlerInfo *FindHandlerInfo (const wxChar *PropertyName) const ; - - // find property by name - virtual wxPropertyInfo *FindPropertyInfoInThisClass (const wxChar *PropertyName) const ; - - // find handler by name - virtual wxHandlerInfo *FindHandlerInfoInThisClass (const wxChar *PropertyName) const ; - - // puts all the properties of this class and its superclasses in the map, as long as there is not yet - // an entry with the same name (overriding mechanism) - void GetProperties( wxPropertyInfoMap &map ) const ; -public: - const wxChar *m_className; - int m_objectSize; - wxObjectConstructorFn m_objectConstructor; - - // class info object live in a linked list: - // pointers to its head and the next element in it - - static wxClassInfo *sm_first; - wxClassInfo *m_next; - - // FIXME: this should be private (currently used directly by way too - // many clients) - static wxHashTable *sm_classTable; - -protected : - wxPropertyInfo * m_firstProperty ; - wxHandlerInfo * m_firstHandler ; -private: - const wxClassInfo** m_parents ; - const wxChar* m_unitName; - - wxConstructorBridge* m_constructor ; - const wxChar ** m_constructorProperties ; - const int m_constructorPropertiesCount ; - wxVariantToObjectConverter m_variantOfPtrToObjectConverter ; - wxVariantToObjectConverter m_variantToObjectConverter ; - wxObjectToVariantConverter m_objectToVariantConverter ; - wxObjectStreamingCallback m_streamingCallback ; - const wxPropertyAccessor *FindAccessor (const wxChar *propertyName) const ; - - - // InitializeClasses() helper - static wxClassInfo *GetBaseByName(const wxChar *name) ; - -protected: - // registers the class - void Register(); - void Unregister(); - - DECLARE_NO_COPY_CLASS(wxClassInfo) -}; - - -WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxChar *name); - -// ---------------------------------------------------------------------------- -// wxDynamicObject -// ---------------------------------------------------------------------------- -// -// this object leads to having a pure runtime-instantiation - -class WXDLLIMPEXP_BASE wxDynamicClassInfo : public wxClassInfo -{ - friend class WXDLLIMPEXP_BASE wxDynamicObject ; -public : - wxDynamicClassInfo( const wxChar *_UnitName, const wxChar *_ClassName , const wxClassInfo* superClass ) ; - virtual ~wxDynamicClassInfo() ; - - // constructs a wxDynamicObject with an instance - virtual wxObject *AllocateObject() const ; - - // Call the Create method for a class - virtual void Create (wxObject *object, int ParamCount, wxxVariant *Params) const ; - - // get number of parameters for constructor - virtual int GetCreateParamCount() const ; - - // get i-th constructor parameter - virtual const wxChar* GetCreateParamName(int i) const ; - - // Runtime access to objects by property name, and variant data - virtual void SetProperty (wxObject *object, const wxChar *PropertyName, const wxxVariant &Value) const ; - virtual wxxVariant GetProperty (wxObject *object, const wxChar *PropertyName) const ; - - // adds a property to this class at runtime - void AddProperty( const wxChar *propertyName , const wxTypeInfo* typeInfo ) ; - - // removes an existing runtime-property - void RemoveProperty( const wxChar *propertyName ) ; - - // renames an existing runtime-property - void RenameProperty( const wxChar *oldPropertyName , const wxChar *newPropertyName ) ; - - // as a handler to this class at runtime - void AddHandler( const wxChar *handlerName , wxObjectEventFunction address , const wxClassInfo* eventClassInfo ) ; - - // removes an existing runtime-handler - void RemoveHandler( const wxChar *handlerName ) ; - - // renames an existing runtime-handler - void RenameHandler( const wxChar *oldHandlerName , const wxChar *newHandlerName ) ; -private : - struct wxDynamicClassInfoInternal ; - wxDynamicClassInfoInternal* m_data ; -} ; - -// ---------------------------------------------------------------------------- -// Dynamic class macros -// ---------------------------------------------------------------------------- - -#define _DECLARE_DYNAMIC_CLASS(name) \ - public: \ - static wxClassInfo ms_classInfo; \ - static const wxClassInfo* ms_classParents[] ; \ - static wxPropertyInfo* GetPropertiesStatic() ; \ - static wxHandlerInfo* GetHandlersStatic() ; \ - static wxClassInfo *GetClassInfoStatic() \ -{ return &name::ms_classInfo; } \ - virtual wxClassInfo *GetClassInfo() const \ -{ return &name::ms_classInfo; } - -/* -#define _DECLARE_DYNAMIC_CLASS(name) \ - public: \ - static wxClassInfo ms_class##name; \ - static const wxClassInfo* ms_classParents##name[] ; \ - static wxPropertyInfo* GetPropertiesStatic() ; \ - static wxHandlerInfo* GetHandlersStatic() ; \ - static wxClassInfo *GetClassInfoStatic() \ -{ return &name::ms_class##name; } \ - virtual wxClassInfo *GetClassInfo() const \ -{ return &name::ms_class##name; } -*/ -#define DECLARE_DYNAMIC_CLASS(name) \ - static wxConstructorBridge* ms_constructor ; \ - static const wxChar * ms_constructorProperties[] ; \ - static const int ms_constructorPropertiesCount ; \ - _DECLARE_DYNAMIC_CLASS(name) - -#define DECLARE_DYNAMIC_CLASS_NO_ASSIGN(name) \ - DECLARE_NO_ASSIGN_CLASS(name) \ - DECLARE_DYNAMIC_CLASS(name) - -#define DECLARE_DYNAMIC_CLASS_NO_COPY(name) \ - DECLARE_NO_COPY_CLASS(name) \ - DECLARE_DYNAMIC_CLASS(name) - -#define DECLARE_ABSTRACT_CLASS(name) _DECLARE_DYNAMIC_CLASS(name) -#define DECLARE_CLASS(name) DECLARE_DYNAMIC_CLASS(name) - -// ----------------------------------- -// for concrete classes -// ----------------------------------- - -// Single inheritance with one base class - -#define _TYPEINFO_CLASSES(n , toString , fromString ) \ - wxClassTypeInfo s_typeInfo##n(wxT_OBJECT , &n::ms_classInfo , toString , fromString , typeid(n).name()) ; \ - wxClassTypeInfo s_typeInfoPtr##n(wxT_OBJECT_PTR , &n::ms_classInfo , toString , fromString , typeid(n*).name()) ; - -#define _IMPLEMENT_DYNAMIC_CLASS(name, basename, unit , callback) \ - wxObject* wxConstructorFor##name() \ -{ return new name; } \ - const wxClassInfo* name::ms_classParents[] = { &basename::ms_classInfo ,NULL } ; \ - wxObject* wxVariantOfPtrToObjectConverter##name ( wxxVariant &data ) { return data.wxTEMPLATED_MEMBER_CALL(Get , name*) ; } \ - wxxVariant wxObjectToVariantConverter##name ( wxObject *data ) { return wxxVariant( dynamic_cast (data) ) ; } \ - wxClassInfo name::ms_classInfo(name::ms_classParents , wxT(unit) , wxT(#name), \ - (int) sizeof(name), \ - (wxObjectConstructorFn) wxConstructorFor##name , \ - name::GetPropertiesStatic(),name::GetHandlersStatic(),name::ms_constructor , name::ms_constructorProperties , \ - name::ms_constructorPropertiesCount , wxVariantOfPtrToObjectConverter##name , NULL , wxObjectToVariantConverter##name , callback); - -#define _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY(name, basename, unit, callback ) \ - wxObject* wxConstructorFor##name() \ -{ return new name; } \ - const wxClassInfo* name::ms_classParents[] = { &basename::ms_classInfo ,NULL } ; \ - wxObject* wxVariantToObjectConverter##name ( wxxVariant &data ) { return &data.wxTEMPLATED_MEMBER_CALL(Get , name) ; } \ - wxObject* wxVariantOfPtrToObjectConverter##name ( wxxVariant &data ) { return data.wxTEMPLATED_MEMBER_CALL(Get , name*) ; } \ - wxxVariant wxObjectToVariantConverter##name ( wxObject *data ) { return wxxVariant( dynamic_cast (data) ) ; } \ - wxClassInfo name::ms_classInfo(name::ms_classParents , wxT(unit) , wxT(#name), \ - (int) sizeof(name), \ - (wxObjectConstructorFn) wxConstructorFor##name , \ - name::GetPropertiesStatic(),name::GetHandlersStatic(),name::ms_constructor , name::ms_constructorProperties, \ - name::ms_constructorPropertiesCount , wxVariantOfPtrToObjectConverter##name , wxVariantToObjectConverter##name , wxObjectToVariantConverter##name, callback); - -#define IMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name , basename ) \ - _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name , basename , "" , NULL ) \ - _TYPEINFO_CLASSES(name, NULL , NULL) \ - const wxPropertyInfo *name::GetPropertiesStatic() { return (wxPropertyInfo*) NULL ; } \ - const wxHandlerInfo *name::GetHandlersStatic() { return (wxHandlerInfo*) NULL ; } \ - wxCONSTRUCTOR_DUMMY( name ) - -#define IMPLEMENT_DYNAMIC_CLASS( name , basename ) \ - _IMPLEMENT_DYNAMIC_CLASS( name , basename , "" , NULL ) \ - _TYPEINFO_CLASSES(name, NULL , NULL) \ - wxPropertyInfo *name::GetPropertiesStatic() { return (wxPropertyInfo*) NULL ; } \ - wxHandlerInfo *name::GetHandlersStatic() { return (wxHandlerInfo*) NULL ; } \ - wxCONSTRUCTOR_DUMMY( name ) - -#define IMPLEMENT_DYNAMIC_CLASS_XTI( name , basename , unit ) \ - _IMPLEMENT_DYNAMIC_CLASS( name , basename , unit , NULL ) \ - _TYPEINFO_CLASSES(name, NULL , NULL) - -#define IMPLEMENT_DYNAMIC_CLASS_XTI_CALLBACK( name , basename , unit , callback ) \ - _IMPLEMENT_DYNAMIC_CLASS( name , basename , unit , &callback ) \ - _TYPEINFO_CLASSES(name, NULL , NULL) - -#define IMPLEMENT_DYNAMIC_CLASS_WITH_COPY_XTI( name , basename , unit ) \ - _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name , basename , unit , NULL ) \ - _TYPEINFO_CLASSES(name, NULL , NULL) - -#define IMPLEMENT_DYNAMIC_CLASS_WITH_COPY_AND_STREAMERS_XTI( name , basename , unit , toString , fromString ) \ - _IMPLEMENT_DYNAMIC_CLASS_WITH_COPY( name , basename , unit , NULL ) \ - _TYPEINFO_CLASSES(name, toString , fromString) - -// this is for classes that do not derive from wxobject, there are no creators for these - -#define IMPLEMENT_DYNAMIC_CLASS_NO_WXOBJECT_NO_BASE_XTI( name , unit ) \ - const wxClassInfo* name::ms_classParents[] = { NULL } ; \ - wxClassInfo name::ms_classInfo(name::ms_classParents , wxEmptyString , wxT(#name), \ - (int) sizeof(name), \ - (wxObjectConstructorFn) 0 , \ - name::GetPropertiesStatic(),name::GetHandlersStatic(),0 , 0 , \ - 0 , 0 , 0 ); \ - _TYPEINFO_CLASSES(name, NULL , NULL) - -// this is for subclasses that still do not derive from wxobject - -#define IMPLEMENT_DYNAMIC_CLASS_NO_WXOBJECT_XTI( name , basename, unit ) \ - const wxClassInfo* name::ms_classParents[] = { &basename::ms_classInfo ,NULL } ; \ - wxClassInfo name::ms_classInfo(name::ms_classParents , wxEmptyString , wxT(#name), \ - (int) sizeof(name), \ - (wxObjectConstructorFn) 0 , \ - name::GetPropertiesStatic(),name::GetHandlersStatic(),0 , 0 , \ - 0 , 0 , 0 ); \ - _TYPEINFO_CLASSES(name, NULL , NULL) - - -// Multiple inheritance with two base classes - -#define _IMPLEMENT_DYNAMIC_CLASS2(name, basename, basename2, unit) \ - wxObject* wxConstructorFor##name() \ -{ return new name; } \ - const wxClassInfo* name::ms_classParents[] = { &basename::ms_classInfo ,&basename2::ms_classInfo , NULL } ; \ - wxObject* wxVariantToObjectConverter##name ( wxxVariant &data ) { return data.wxTEMPLATED_MEMBER_CALL(Get , name*) ; } \ - wxxVariant wxObjectToVariantConverter##name ( wxObject *data ) { return wxxVariant( dynamic_cast (data) ) ; } \ - wxClassInfo name::ms_classInfo(name::ms_classParents , wxT(unit) , wxT(#name), \ - (int) sizeof(name), \ - (wxObjectConstructorFn) wxConstructorFor##name , \ - name::GetPropertiesStatic(),name::GetHandlersStatic(),name::ms_constructor , name::ms_constructorProperties , \ - name::ms_constructorPropertiesCount , wxVariantToObjectConverter##name, wxVariantToObjectConverter##name , wxObjectToVariantConverter##name); \ - -#define IMPLEMENT_DYNAMIC_CLASS2( name , basename , basename2) \ - _IMPLEMENT_DYNAMIC_CLASS2( name , basename , basename2 , "") \ - _TYPEINFO_CLASSES(name, NULL , NULL) \ - wxPropertyInfo *name::GetPropertiesStatic() { return (wxPropertyInfo*) NULL ; } \ - wxHandlerInfo *name::GetHandlersStatic() { return (wxHandlerInfo*) NULL ; } \ - wxCONSTRUCTOR_DUMMY( name ) - -#define IMPLEMENT_DYNAMIC_CLASS2_XTI( name , basename , basename2, unit) \ - _IMPLEMENT_DYNAMIC_CLASS2( name , basename , basename2 , unit) \ - _TYPEINFO_CLASSES(name, NULL , NULL) - - -// ----------------------------------- -// for abstract classes -// ----------------------------------- - -// Single inheritance with one base class - -#define _IMPLEMENT_ABSTRACT_CLASS(name, basename) \ - const wxClassInfo* name::ms_classParents[] = { &basename::ms_classInfo ,NULL } ; \ - wxObject* wxVariantToObjectConverter##name ( wxxVariant &data ) { return data.wxTEMPLATED_MEMBER_CALL(Get , name*) ; } \ - wxObject* wxVariantOfPtrToObjectConverter##name ( wxxVariant &data ) { return data.wxTEMPLATED_MEMBER_CALL(Get , name*) ; } \ - wxxVariant wxObjectToVariantConverter##name ( wxObject *data ) { return wxxVariant( dynamic_cast (data) ) ; } \ - wxClassInfo name::ms_classInfo(name::ms_classParents , wxEmptyString , wxT(#name), \ - (int) sizeof(name), \ - (wxObjectConstructorFn) 0 , \ - name::GetPropertiesStatic(),name::GetHandlersStatic(),0 , 0 , \ - 0 , wxVariantOfPtrToObjectConverter##name ,wxVariantToObjectConverter##name , wxObjectToVariantConverter##name); \ - _TYPEINFO_CLASSES(name, NULL , NULL) - -#define IMPLEMENT_ABSTRACT_CLASS( name , basename ) \ - _IMPLEMENT_ABSTRACT_CLASS( name , basename ) \ - wxHandlerInfo *name::GetHandlersStatic() { return (wxHandlerInfo*) NULL ; } \ - wxPropertyInfo *name::GetPropertiesStatic() { return (wxPropertyInfo*) NULL ; } - -// Multiple inheritance with two base classes - -#define IMPLEMENT_ABSTRACT_CLASS2(name, basename1, basename2) \ - wxClassInfo name::ms_classInfo(wxT(#name), wxT(#basename1), \ - wxT(#basename2), (int) sizeof(name), \ - (wxObjectConstructorFn) 0); - -#define IMPLEMENT_CLASS IMPLEMENT_ABSTRACT_CLASS -#define IMPLEMENT_CLASS2 IMPLEMENT_ABSTRACT_CLASS2 - -#define wxBEGIN_EVENT_TABLE( a , b ) BEGIN_EVENT_TABLE( a , b ) -#define wxEND_EVENT_TABLE() END_EVENT_TABLE() - -// -------------------------------------------------------------------------- -// Collection Support -// -------------------------------------------------------------------------- - -template void wxListCollectionToVariantArray( const collection_t& coll , wxxVariantArray &value ) -{ - iter current = coll.GetFirst() ; - while (current) - { - value.Add( new wxxVariant(current->GetData()) ) ; - current = current->GetNext(); - } -} - -template void wxArrayCollectionToVariantArray( const collection_t& coll , wxxVariantArray &value ) -{ - for( size_t i = 0 ; i < coll.GetCount() ; i++ ) - { - value.Add( new wxxVariant(coll[i]) ) ; - } -} - - -#endif // _WX_XTIH__ diff --git a/desmume/src/windows/wx/include/wx/xtistrm.h b/desmume/src/windows/wx/include/wx/xtistrm.h deleted file mode 100644 index 6bc902b4d..000000000 --- a/desmume/src/windows/wx/include/wx/xtistrm.h +++ /dev/null @@ -1,429 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xtistrm.h -// Purpose: streaming runtime metadata information (extended class info) -// Author: Stefan Csomor -// Modified by: -// Created: 27/07/03 -// RCS-ID: $Id: xtistrm.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) 2003 Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XTISTRMH__ -#define _WX_XTISTRMH__ - -#include "wx/wx.h" - -#if wxUSE_EXTENDED_RTTI - -const int wxInvalidObjectID = -2 ; -const int wxNullObjectID = -3 ; - -// Filer contains the interfaces for streaming objects in and out of XML, -// rendering them either to objects in memory, or to code. Note: We -// consider the process of generating code to be one of *depersisting* the -// object from xml, *not* of persisting the object to code from an object -// in memory. This distincation can be confusing, and should be kept -// in mind when looking at the property streamers and callback interfaces -// listed below. - -/* -Main interfaces for streaming out objects. -*/ - -// ---------------------------------------------------------------------------- -// wxPersister -// -// This class will be asked during the streaming-out process about every single -// property or object instance. It can veto streaming out by returning false -// or modify the value before it is streamed-out. -// ---------------------------------------------------------------------------- - -class WXDLLIMPEXP_BASE wxWriter ; -class WXDLLIMPEXP_BASE wxReader ; - -class WXDLLIMPEXP_BASE wxPersister -{ -public : - // will be called before an object is written, may veto by returning false - virtual bool BeforeWriteObject( wxWriter *WXUNUSED(writer) , const wxObject *WXUNUSED(object) , const wxClassInfo *WXUNUSED(classInfo) , wxxVariantArray &WXUNUSED(metadata)) { return true ; } - - // will be called after this object has been written, may be needed for adjusting stacks - virtual void AfterWriteObject( wxWriter *WXUNUSED(writer) , const wxObject *WXUNUSED(object) , const wxClassInfo *WXUNUSED(classInfo) ) {} - - // will be called before a property gets written, may change the value , eg replace a concrete wxSize by wxSize( wxDefaultCoord , wxDefaultCoord ) or veto - // writing that property at all by returning false - virtual bool BeforeWriteProperty( wxWriter *WXUNUSED(writer) , const wxObject *WXUNUSED(object), const wxPropertyInfo *WXUNUSED(propInfo) , wxxVariant &WXUNUSED(value) ) { return true ; } - - // will be called before a property gets written, may change the value , eg replace a concrete wxSize by wxSize( wxDefaultCoord , wxDefaultCoord ) or veto - // writing that property at all by returning false - virtual bool BeforeWriteProperty( wxWriter *WXUNUSED(writer) , const wxObject *WXUNUSED(object), const wxPropertyInfo *WXUNUSED(propInfo) , wxxVariantArray &WXUNUSED(value) ) { return true ; } - - // will be called after a property has been written out, may be needed for adjusting stacks - virtual void AfterWriteProperty( wxWriter *WXUNUSED(writer) , const wxPropertyInfo *WXUNUSED(propInfo) ) {} - - // will be called before this delegate gets written - virtual bool BeforeWriteDelegate( wxWriter *WXUNUSED(writer) , const wxObject *WXUNUSED(object), const wxClassInfo* WXUNUSED(classInfo) , const wxPropertyInfo *WXUNUSED(propInfo) , - const wxObject *&WXUNUSED(eventSink) , const wxHandlerInfo* &WXUNUSED(handlerInfo) ) { return true ; } - - virtual void AfterWriteDelegate( wxWriter *WXUNUSED(writer) , const wxObject *WXUNUSED(object), const wxClassInfo* WXUNUSED(classInfo) , const wxPropertyInfo *WXUNUSED(propInfo) , - const wxObject *&WXUNUSED(eventSink) , const wxHandlerInfo* &WXUNUSED(handlerInfo) ) { } -} ; - -class WXDLLIMPEXP_BASE wxWriter : public wxObject -{ -public : - wxWriter() ; - virtual ~wxWriter() ; - - // with this call you start writing out a new top-level object - void WriteObject(const wxObject *object, const wxClassInfo *classInfo , wxPersister *persister , const wxString &name , wxxVariantArray &WXUNUSED(metadata)) ; - - // - // Managing the object identity table a.k.a context - // - // these methods make sure that no object gets written twice, because sometimes multiple calls to the WriteObject will be - // made without wanting to have duplicate objects written, the object identity table will be reset manually - - virtual void ClearObjectContext() ; - - // gets the object Id for a passed in object in the context - int GetObjectID(const wxObject *obj) ; - - // returns true if this object has already been written in this context - bool IsObjectKnown( const wxObject *obj ) ; - - // - // streaming callbacks - // - // these callbacks really write out the values in the stream format - - // begins writing out a new toplevel entry which has the indicated unique name - virtual void DoBeginWriteTopLevelEntry( const wxString &name ) = 0 ; - - // ends writing out a new toplevel entry which has the indicated unique name - virtual void DoEndWriteTopLevelEntry( const wxString &name ) = 0 ; - - // start of writing an object having the passed in ID - virtual void DoBeginWriteObject(const wxObject *object, const wxClassInfo *classInfo, int objectID , wxxVariantArray &metadata ) = 0 ; - - // end of writing an toplevel object name param is used for unique identification within the container - virtual void DoEndWriteObject(const wxObject *object, const wxClassInfo *classInfo, int objectID ) = 0 ; - - // writes a simple property in the stream format - virtual void DoWriteSimpleType( wxxVariant &value ) = 0 ; - - // start of writing a complex property into the stream ( - virtual void DoBeginWriteProperty( const wxPropertyInfo *propInfo ) = 0 ; - - // end of writing a complex property into the stream - virtual void DoEndWriteProperty( const wxPropertyInfo *propInfo ) = 0; - - virtual void DoBeginWriteElement() = 0 ; - virtual void DoEndWriteElement() = 0 ; - // insert an object reference to an already written object - virtual void DoWriteRepeatedObject( int objectID ) = 0 ; - - // insert a null reference - virtual void DoWriteNullObject() = 0 ; - - // writes a delegate in the stream format - virtual void DoWriteDelegate( const wxObject *object, const wxClassInfo* classInfo , const wxPropertyInfo *propInfo , - const wxObject *eventSink , int sinkObjectID , const wxClassInfo* eventSinkClassInfo , const wxHandlerInfo* handlerIndo ) = 0; -private : - - struct wxWriterInternal ; - wxWriterInternal* m_data ; - - struct wxWriterInternalPropertiesData ; - - void WriteAllProperties( const wxObject * obj , const wxClassInfo* ci , wxPersister *persister, wxWriterInternalPropertiesData * data ) ; - void WriteOneProperty( const wxObject *obj , const wxClassInfo* ci , const wxPropertyInfo* pi , wxPersister *persister , wxWriterInternalPropertiesData *data ) ; - void WriteObject(const wxObject *object, const wxClassInfo *classInfo , wxPersister *persister , bool isEmbedded, wxxVariantArray &metadata ) ; - void FindConnectEntry(const wxEvtHandler * evSource,const wxDelegateTypeInfo* dti, const wxObject* &sink , const wxHandlerInfo *&handler) ; -} ; - - -/* -Streaming callbacks for depersisting XML to code, or running objects -*/ - -class WXDLLIMPEXP_BASE wxDepersister ; - -/* -wxReader handles streaming in a class from a arbitrary format. While walking through -it issues calls out to interfaces to depersist the guts from the underlying storage format. -*/ - -class WXDLLIMPEXP_BASE wxReader : public wxObject -{ -public : - wxReader() ; - virtual ~wxReader() ; - - // the only thing wxReader knows about is the class info by object ID - wxClassInfo *GetObjectClassInfo(int objectID) ; - bool HasObjectClassInfo( int objectID ) ; - void SetObjectClassInfo(int objectID, wxClassInfo* classInfo); - - // Reads the component the reader is pointed at from the underlying format. - // The return value is the root object ID, which can - // then be used to ask the depersister about that object - // if there was a problem you will get back wxInvalidObjectID and the current - // error log will carry the problems encoutered - virtual int ReadObject( const wxString &name , wxDepersister *depersist ) = 0 ; - -private : - struct wxReaderInternal; - wxReaderInternal *m_data; -} ; - -// This abstract class matches the allocate-init/create model of creation of objects. -// At runtime, these will create actual instances, and manipulate them. -// When generating code, these will just create statements of C++ -// code to create the objects. - -class WXDLLIMPEXP_BASE wxDepersister -{ -public : - // allocate the new object on the heap, that object will have the passed in ID - virtual void AllocateObject(int objectID, wxClassInfo *classInfo, wxxVariantArray &metadata) = 0; - - // initialize the already allocated object having the ID objectID with the Create method - // creation parameters which are objects are having their Ids passed in objectIDValues - // having objectId <> wxInvalidObjectID - - virtual void CreateObject(int objectID, - const wxClassInfo *classInfo, - int paramCount, - wxxVariant *VariantValues , - int *objectIDValues , - const wxClassInfo **objectClassInfos , - wxxVariantArray &metadata) = 0; - - // construct the new object on the heap, that object will have the passed in ID (for objects that - // don't support allocate-create type of creation) - // creation parameters which are objects are having their Ids passed in objectIDValues - // having objectId <> wxInvalidObjectID - - virtual void ConstructObject(int objectID, - const wxClassInfo *classInfo, - int paramCount, - wxxVariant *VariantValues , - int *objectIDValues , - const wxClassInfo **objectClassInfos , - wxxVariantArray &metadata) = 0; - - // destroy the heap-allocated object having the ID objectID, this may be used if an object - // is embedded in another object and set via value semantics, so the intermediate - // object can be destroyed after safely - virtual void DestroyObject(int objectID, wxClassInfo *classInfo) = 0; - - // set the corresponding property - virtual void SetProperty(int objectID, - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - const wxxVariant &VariantValue) = 0; - - // sets the corresponding property (value is an object) - virtual void SetPropertyAsObject(int objectID, - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - int valueObjectId) = 0; - - // adds an element to a property collection - virtual void AddToPropertyCollection( int objectID , - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - const wxxVariant &VariantValue) = 0; - - // sets the corresponding property (value is an object) - virtual void AddToPropertyCollectionAsObject(int objectID, - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - int valueObjectId) = 0; - - // sets the corresponding event handler - virtual void SetConnect(int EventSourceObjectID, - const wxClassInfo *EventSourceClassInfo, - const wxPropertyInfo *delegateInfo , - const wxClassInfo *EventSinkClassInfo , - const wxHandlerInfo* handlerInfo , - int EventSinkObjectID ) = 0; -}; - -/* -wxRuntimeDepersister implements the callbacks that will depersist -an object into a running memory image, as opposed to writing -C++ initialization code to bring the object to life. -*/ - -class WXDLLIMPEXP_BASE wxRuntimeDepersister : public wxDepersister -{ - struct wxRuntimeDepersisterInternal ; - wxRuntimeDepersisterInternal * m_data ; -public : - wxRuntimeDepersister(); - virtual ~wxRuntimeDepersister(); - - // returns the object having the corresponding ID fully constructed - wxObject *GetObject(int objectID) ; - - // allocate the new object on the heap, that object will have the passed in ID - virtual void AllocateObject(int objectID, wxClassInfo *classInfo , - wxxVariantArray &metadata) ; - - // initialize the already allocated object having the ID objectID with the Create method - // creation parameters which are objects are having their Ids passed in objectIDValues - // having objectId <> wxInvalidObjectID - - virtual void CreateObject(int objectID, - const wxClassInfo *classInfo, - int paramCount, - wxxVariant *VariantValues , - int *objectIDValues, - const wxClassInfo **objectClassInfos , - wxxVariantArray &metadata - ) ; - - // construct the new object on the heap, that object will have the passed in ID (for objects that - // don't support allocate-create type of creation) - // creation parameters which are objects are having their Ids passed in objectIDValues - // having objectId <> wxInvalidObjectID - - virtual void ConstructObject(int objectID, - const wxClassInfo *classInfo, - int paramCount, - wxxVariant *VariantValues , - int *objectIDValues , - const wxClassInfo **objectClassInfos , - wxxVariantArray &metadata) ; - - // destroy the heap-allocated object having the ID objectID, this may be used if an object - // is embedded in another object and set via value semantics, so the intermediate - // object can be destroyed after safely - virtual void DestroyObject(int objectID, wxClassInfo *classInfo) ; - - // set the corresponding property - virtual void SetProperty(int objectID, - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - const wxxVariant &variantValue); - - // sets the corresponding property (value is an object) - virtual void SetPropertyAsObject(int objectId, - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - int valueObjectId) ; - - // adds an element to a property collection - virtual void AddToPropertyCollection( int objectID , - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - const wxxVariant &VariantValue) ; - - // sets the corresponding property (value is an object) - virtual void AddToPropertyCollectionAsObject(int objectID, - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - int valueObjectId) ; - - // sets the corresponding event handler - virtual void SetConnect(int eventSourceObjectID, - const wxClassInfo *eventSourceClassInfo, - const wxPropertyInfo *delegateInfo , - const wxClassInfo *eventSinkClassInfo , - const wxHandlerInfo* handlerInfo , - int eventSinkObjectID ) ; -}; - -/* -wxDepersisterCode implements the callbacks that will depersist -an object into a C++ initialization function. this will move to -a utility lib soon -*/ - -class WXDLLIMPEXP_BASE wxTextOutputStream ; - -class WXDLLIMPEXP_BASE wxCodeDepersister : public wxDepersister -{ -private : - struct wxCodeDepersisterInternal ; - wxCodeDepersisterInternal * m_data ; - wxTextOutputStream *m_fp; - wxString ValueAsCode( const wxxVariant ¶m ) ; -public: - wxCodeDepersister(wxTextOutputStream *out); - virtual ~wxCodeDepersister(); - - // allocate the new object on the heap, that object will have the passed in ID - virtual void AllocateObject(int objectID, wxClassInfo *classInfo , - wxxVariantArray &metadata) ; - - // initialize the already allocated object having the ID objectID with the Create method - // creation parameters which are objects are having their Ids passed in objectIDValues - // having objectId <> wxInvalidObjectID - - virtual void CreateObject(int objectID, - const wxClassInfo *classInfo, - int paramCount, - wxxVariant *variantValues , - int *objectIDValues, - const wxClassInfo **objectClassInfos , - wxxVariantArray &metadata - ) ; - - // construct the new object on the heap, that object will have the passed in ID (for objects that - // don't support allocate-create type of creation) - // creation parameters which are objects are having their Ids passed in objectIDValues - // having objectId <> wxInvalidObjectID - - virtual void ConstructObject(int objectID, - const wxClassInfo *classInfo, - int paramCount, - wxxVariant *VariantValues , - int *objectIDValues , - const wxClassInfo **objectClassInfos , - wxxVariantArray &metadata) ; - - // destroy the heap-allocated object having the ID objectID, this may be used if an object - // is embedded in another object and set via value semantics, so the intermediate - // object can be destroyed after safely - virtual void DestroyObject(int objectID, wxClassInfo *classInfo) ; - - // set the corresponding property - virtual void SetProperty(int objectID, - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - const wxxVariant &variantValue); - - // sets the corresponding property (value is an object) - virtual void SetPropertyAsObject(int objectId, - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - int valueObjectId) ; - - // adds an element to a property collection - virtual void AddToPropertyCollection( int objectID , - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - const wxxVariant &VariantValue) ; - - // sets the corresponding property (value is an object) - virtual void AddToPropertyCollectionAsObject(int objectID, - const wxClassInfo *classInfo, - const wxPropertyInfo* propertyInfo , - int valueObjectId) ; - - // sets the corresponding event handler - virtual void SetConnect(int eventSourceObjectID, - const wxClassInfo *eventSourceClassInfo, - const wxPropertyInfo *delegateInfo , - const wxClassInfo *eventSinkClassInfo , - const wxHandlerInfo* handlerInfo , - int eventSinkObjectID ) ; -}; - -#endif // wxUSE_EXTENDED_RTTI - -#endif diff --git a/desmume/src/windows/wx/include/wx/xtixml.h b/desmume/src/windows/wx/include/wx/xtixml.h deleted file mode 100644 index 92407dae2..000000000 --- a/desmume/src/windows/wx/include/wx/xtixml.h +++ /dev/null @@ -1,106 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/xtixml.h -// Purpose: xml streaming runtime metadata information (extended class info) -// Author: Stefan Csomor -// Modified by: -// Created: 27/07/03 -// RCS-ID: $Id: xtixml.h 41020 2006-09-05 20:47:48Z VZ $ -// Copyright: (c) 2003 Stefan Csomor -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_XTIXMLH__ -#define _WX_XTIXMLH__ - -#include "wx/wx.h" - -#if wxUSE_EXTENDED_RTTI - -#include "wx/xtistrm.h" - -class WXDLLIMPEXP_XML wxXmlNode ; - -class WXDLLIMPEXP_XML wxXmlWriter : public wxWriter -{ -public : - - wxXmlWriter( wxXmlNode * parent ) ; - virtual ~wxXmlWriter() ; - - // - // streaming callbacks - // - // these callbacks really write out the values in the stream format - // - - // - // streaming callbacks - // - // these callbacks really write out the values in the stream format - - // begins writing out a new toplevel entry which has the indicated unique name - virtual void DoBeginWriteTopLevelEntry( const wxString &name ) ; - - // ends writing out a new toplevel entry which has the indicated unique name - virtual void DoEndWriteTopLevelEntry( const wxString &name ) ; - - // start of writing an object having the passed in ID - virtual void DoBeginWriteObject(const wxObject *object, const wxClassInfo *classInfo, int objectID , wxxVariantArray &metadata ) ; - - // end of writing an toplevel object name param is used for unique identification within the container - virtual void DoEndWriteObject(const wxObject *object, const wxClassInfo *classInfo, int objectID ) ; - - // writes a simple property in the stream format - virtual void DoWriteSimpleType( wxxVariant &value ) ; - - // start of writing a complex property into the stream ( - virtual void DoBeginWriteProperty( const wxPropertyInfo *propInfo ) ; - - // end of writing a complex property into the stream - virtual void DoEndWriteProperty( const wxPropertyInfo *propInfo ) ; - - virtual void DoBeginWriteElement() ; - virtual void DoEndWriteElement() ; - - // insert an object reference to an already written object - virtual void DoWriteRepeatedObject( int objectID ) ; - - // insert a null reference - virtual void DoWriteNullObject() ; - - // writes a delegate in the stream format - virtual void DoWriteDelegate( const wxObject *object, const wxClassInfo* classInfo , const wxPropertyInfo *propInfo , - const wxObject *eventSink , int sinkObjectID , const wxClassInfo* eventSinkClassInfo , const wxHandlerInfo* handlerIndo ) ; -private : - struct wxXmlWriterInternal ; - wxXmlWriterInternal* m_data ; -} ; - -/* -wxXmlReader handles streaming in a class from XML -*/ - -class WXDLLIMPEXP_XML wxXmlReader : public wxReader -{ -public: - wxXmlReader(wxXmlNode *parent) { m_parent = parent ; } - virtual ~wxXmlReader() {} - - // Reads a component from XML. The return value is the root object ID, which can - // then be used to ask the depersister about that object - - virtual int ReadObject( const wxString &name , wxDepersister *depersist ) ; - -private : - int ReadComponent(wxXmlNode *parent, wxDepersister *callbacks); - - // read the content of this node (simple type) and return the corresponding value - wxxVariant ReadValue(wxXmlNode *Node, - const wxTypeInfo *type ); - - wxXmlNode * m_parent ; -}; - -#endif // wxUSE_EXTENDED_RTTI - -#endif diff --git a/desmume/src/windows/wx/include/wx/zipstrm.h b/desmume/src/windows/wx/include/wx/zipstrm.h deleted file mode 100644 index 77766a981..000000000 --- a/desmume/src/windows/wx/include/wx/zipstrm.h +++ /dev/null @@ -1,574 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/zipstrm.h -// Purpose: Streams for Zip files -// Author: Mike Wetherell -// RCS-ID: $Id: zipstrm.h 53135 2008-04-12 02:31:04Z VZ $ -// Copyright: (c) Mike Wetherell -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_WXZIPSTREAM_H__ -#define _WX_WXZIPSTREAM_H__ - -#include "wx/defs.h" - -#if wxUSE_ZIPSTREAM - -#include "wx/archive.h" -#include "wx/filename.h" - -// some methods from wxZipInputStream and wxZipOutputStream stream do not get -// exported/imported when compiled with Mingw versions before 3.4.2. So they -// are imported/exported individually as a workaround -#if (defined(__GNUWIN32__) || defined(__MINGW32__)) \ - && (!defined __GNUC__ \ - || !defined __GNUC_MINOR__ \ - || !defined __GNUC_PATCHLEVEL__ \ - || __GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ < 30402) -#define WXZIPFIX WXDLLIMPEXP_BASE -#else -#define WXZIPFIX -#endif - -///////////////////////////////////////////////////////////////////////////// -// constants - -// Compression Method, only 0 (store) and 8 (deflate) are supported here -// -enum wxZipMethod -{ - wxZIP_METHOD_STORE, - wxZIP_METHOD_SHRINK, - wxZIP_METHOD_REDUCE1, - wxZIP_METHOD_REDUCE2, - wxZIP_METHOD_REDUCE3, - wxZIP_METHOD_REDUCE4, - wxZIP_METHOD_IMPLODE, - wxZIP_METHOD_TOKENIZE, - wxZIP_METHOD_DEFLATE, - wxZIP_METHOD_DEFLATE64, - wxZIP_METHOD_BZIP2 = 12, - wxZIP_METHOD_DEFAULT = 0xffff -}; - -// Originating File-System. -// -// These are Pkware's values. Note that Info-zip disagree on some of them, -// most notably NTFS. -// -enum wxZipSystem -{ - wxZIP_SYSTEM_MSDOS, - wxZIP_SYSTEM_AMIGA, - wxZIP_SYSTEM_OPENVMS, - wxZIP_SYSTEM_UNIX, - wxZIP_SYSTEM_VM_CMS, - wxZIP_SYSTEM_ATARI_ST, - wxZIP_SYSTEM_OS2_HPFS, - wxZIP_SYSTEM_MACINTOSH, - wxZIP_SYSTEM_Z_SYSTEM, - wxZIP_SYSTEM_CPM, - wxZIP_SYSTEM_WINDOWS_NTFS, - wxZIP_SYSTEM_MVS, - wxZIP_SYSTEM_VSE, - wxZIP_SYSTEM_ACORN_RISC, - wxZIP_SYSTEM_VFAT, - wxZIP_SYSTEM_ALTERNATE_MVS, - wxZIP_SYSTEM_BEOS, - wxZIP_SYSTEM_TANDEM, - wxZIP_SYSTEM_OS_400 -}; - -// Dos/Win file attributes -// -enum wxZipAttributes -{ - wxZIP_A_RDONLY = 0x01, - wxZIP_A_HIDDEN = 0x02, - wxZIP_A_SYSTEM = 0x04, - wxZIP_A_SUBDIR = 0x10, - wxZIP_A_ARCH = 0x20, - - wxZIP_A_MASK = 0x37 -}; - -// Values for the flags field in the zip headers -// -enum wxZipFlags -{ - wxZIP_ENCRYPTED = 0x0001, - wxZIP_DEFLATE_NORMAL = 0x0000, // normal compression - wxZIP_DEFLATE_EXTRA = 0x0002, // extra compression - wxZIP_DEFLATE_FAST = 0x0004, // fast compression - wxZIP_DEFLATE_SUPERFAST = 0x0006, // superfast compression - wxZIP_DEFLATE_MASK = 0x0006, - wxZIP_SUMS_FOLLOW = 0x0008, // crc and sizes come after the data - wxZIP_ENHANCED = 0x0010, - wxZIP_PATCH = 0x0020, - wxZIP_STRONG_ENC = 0x0040, - wxZIP_UNUSED = 0x0F80, - wxZIP_RESERVED = 0xF000 -}; - -// Forward decls -// -class WXDLLIMPEXP_FWD_BASE wxZipEntry; -class WXDLLIMPEXP_FWD_BASE wxZipInputStream; - - -///////////////////////////////////////////////////////////////////////////// -// wxZipNotifier - -class WXDLLIMPEXP_BASE wxZipNotifier -{ -public: - virtual ~wxZipNotifier() { } - - virtual void OnEntryUpdated(wxZipEntry& entry) = 0; -}; - - -///////////////////////////////////////////////////////////////////////////// -// Zip Entry - holds the meta data for a file in the zip - -class WXDLLIMPEXP_BASE wxZipEntry : public wxArchiveEntry -{ -public: - wxZipEntry(const wxString& name = wxEmptyString, - const wxDateTime& dt = wxDateTime::Now(), - wxFileOffset size = wxInvalidOffset); - virtual ~wxZipEntry(); - - wxZipEntry(const wxZipEntry& entry); - wxZipEntry& operator=(const wxZipEntry& entry); - - // Get accessors - wxDateTime GetDateTime() const { return m_DateTime; } - wxFileOffset GetSize() const { return m_Size; } - wxFileOffset GetOffset() const { return m_Offset; } - wxString GetInternalName() const { return m_Name; } - int GetMethod() const { return m_Method; } - int GetFlags() const { return m_Flags; } - wxUint32 GetCrc() const { return m_Crc; } - wxFileOffset GetCompressedSize() const { return m_CompressedSize; } - int GetSystemMadeBy() const { return m_SystemMadeBy; } - wxString GetComment() const { return m_Comment; } - wxUint32 GetExternalAttributes() const { return m_ExternalAttributes; } - wxPathFormat GetInternalFormat() const { return wxPATH_UNIX; } - int GetMode() const; - const char *GetLocalExtra() const; - size_t GetLocalExtraLen() const; - const char *GetExtra() const; - size_t GetExtraLen() const; - wxString GetName(wxPathFormat format = wxPATH_NATIVE) const; - - // is accessors - inline bool IsDir() const; - inline bool IsText() const; - inline bool IsReadOnly() const; - inline bool IsMadeByUnix() const; - - // set accessors - void SetDateTime(const wxDateTime& dt) { m_DateTime = dt; } - void SetSize(wxFileOffset size) { m_Size = size; } - void SetMethod(int method) { m_Method = (wxUint16)method; } - void SetComment(const wxString& comment) { m_Comment = comment; } - void SetExternalAttributes(wxUint32 attr ) { m_ExternalAttributes = attr; } - void SetSystemMadeBy(int system); - void SetMode(int mode); - void SetExtra(const char *extra, size_t len); - void SetLocalExtra(const char *extra, size_t len); - - inline void SetName(const wxString& name, - wxPathFormat format = wxPATH_NATIVE); - - static wxString GetInternalName(const wxString& name, - wxPathFormat format = wxPATH_NATIVE, - bool *pIsDir = NULL); - - // set is accessors - void SetIsDir(bool isDir = true); - inline void SetIsReadOnly(bool isReadOnly = true); - inline void SetIsText(bool isText = true); - - wxZipEntry *Clone() const { return ZipClone(); } - - void SetNotifier(wxZipNotifier& notifier); - void UnsetNotifier(); - -protected: - // Internal attributes - enum { TEXT_ATTR = 1 }; - - // protected Get accessors - int GetVersionNeeded() const { return m_VersionNeeded; } - wxFileOffset GetKey() const { return m_Key; } - int GetVersionMadeBy() const { return m_VersionMadeBy; } - int GetDiskStart() const { return m_DiskStart; } - int GetInternalAttributes() const { return m_InternalAttributes; } - - void SetVersionNeeded(int version) { m_VersionNeeded = (wxUint16)version; } - void SetOffset(wxFileOffset offset) { m_Offset = offset; } - void SetFlags(int flags) { m_Flags = (wxUint16)flags; } - void SetVersionMadeBy(int version) { m_VersionMadeBy = (wxUint8)version; } - void SetCrc(wxUint32 crc) { m_Crc = crc; } - void SetCompressedSize(wxFileOffset size) { m_CompressedSize = size; } - void SetKey(wxFileOffset offset) { m_Key = offset; } - void SetDiskStart(int start) { m_DiskStart = (wxUint16)start; } - void SetInternalAttributes(int attr) { m_InternalAttributes = (wxUint16)attr; } - - virtual wxZipEntry *ZipClone() const { return new wxZipEntry(*this); } - - void Notify(); - -private: - wxArchiveEntry* DoClone() const { return ZipClone(); } - - size_t ReadLocal(wxInputStream& stream, wxMBConv& conv); - size_t WriteLocal(wxOutputStream& stream, wxMBConv& conv) const; - - size_t ReadCentral(wxInputStream& stream, wxMBConv& conv); - size_t WriteCentral(wxOutputStream& stream, wxMBConv& conv) const; - - size_t ReadDescriptor(wxInputStream& stream); - size_t WriteDescriptor(wxOutputStream& stream, wxUint32 crc, - wxFileOffset compressedSize, wxFileOffset size); - - wxUint8 m_SystemMadeBy; // one of enum wxZipSystem - wxUint8 m_VersionMadeBy; // major * 10 + minor - - wxUint16 m_VersionNeeded; // ver needed to extract (20 i.e. v2.0) - wxUint16 m_Flags; - wxUint16 m_Method; // compression method (one of wxZipMethod) - wxDateTime m_DateTime; - wxUint32 m_Crc; - wxFileOffset m_CompressedSize; - wxFileOffset m_Size; - wxString m_Name; // in internal format - wxFileOffset m_Key; // the original offset for copied entries - wxFileOffset m_Offset; // file offset of the entry - - wxString m_Comment; - wxUint16 m_DiskStart; // for multidisk archives, not unsupported - wxUint16 m_InternalAttributes; // bit 0 set for text files - wxUint32 m_ExternalAttributes; // system specific depends on SystemMadeBy - - class wxZipMemory *m_Extra; - class wxZipMemory *m_LocalExtra; - - wxZipNotifier *m_zipnotifier; - class wxZipWeakLinks *m_backlink; - - friend class wxZipInputStream; - friend class wxZipOutputStream; - - DECLARE_DYNAMIC_CLASS(wxZipEntry) -}; - - -///////////////////////////////////////////////////////////////////////////// -// wxZipOutputStream - -WX_DECLARE_LIST_WITH_DECL(wxZipEntry, wxZipEntryList_, class WXDLLIMPEXP_BASE); - -class WXDLLIMPEXP_BASE wxZipOutputStream : public wxArchiveOutputStream -{ -public: - wxZipOutputStream(wxOutputStream& stream, - int level = -1, - wxMBConv& conv = wxConvLocal); - wxZipOutputStream(wxOutputStream *stream, - int level = -1, - wxMBConv& conv = wxConvLocal); - virtual WXZIPFIX ~wxZipOutputStream(); - - bool PutNextEntry(wxZipEntry *entry) { return DoCreate(entry); } - - bool WXZIPFIX PutNextEntry(const wxString& name, - const wxDateTime& dt = wxDateTime::Now(), - wxFileOffset size = wxInvalidOffset); - - bool WXZIPFIX PutNextDirEntry(const wxString& name, - const wxDateTime& dt = wxDateTime::Now()); - - bool WXZIPFIX CopyEntry(wxZipEntry *entry, wxZipInputStream& inputStream); - bool WXZIPFIX CopyArchiveMetaData(wxZipInputStream& inputStream); - - void WXZIPFIX Sync(); - bool WXZIPFIX CloseEntry(); - bool WXZIPFIX Close(); - - void SetComment(const wxString& comment) { m_Comment = comment; } - - int GetLevel() const { return m_level; } - void WXZIPFIX SetLevel(int level); - -protected: - virtual size_t WXZIPFIX OnSysWrite(const void *buffer, size_t size); - virtual wxFileOffset OnSysTell() const { return m_entrySize; } - - // this protected interface isn't yet finalised - struct Buffer { const char *m_data; size_t m_size; }; - virtual wxOutputStream* WXZIPFIX OpenCompressor(wxOutputStream& stream, - wxZipEntry& entry, - const Buffer bufs[]); - virtual bool WXZIPFIX CloseCompressor(wxOutputStream *comp); - - bool IsParentSeekable() const - { return m_offsetAdjustment != wxInvalidOffset; } - -private: - void Init(int level); - - bool WXZIPFIX PutNextEntry(wxArchiveEntry *entry); - bool WXZIPFIX CopyEntry(wxArchiveEntry *entry, wxArchiveInputStream& stream); - bool WXZIPFIX CopyArchiveMetaData(wxArchiveInputStream& stream); - - bool IsOpened() const { return m_comp || m_pending; } - - bool DoCreate(wxZipEntry *entry, bool raw = false); - void CreatePendingEntry(const void *buffer, size_t size); - void CreatePendingEntry(); - - class wxStoredOutputStream *m_store; - class wxZlibOutputStream2 *m_deflate; - class wxZipStreamLink *m_backlink; - wxZipEntryList_ m_entries; - char *m_initialData; - size_t m_initialSize; - wxZipEntry *m_pending; - bool m_raw; - wxFileOffset m_headerOffset; - size_t m_headerSize; - wxFileOffset m_entrySize; - wxUint32 m_crcAccumulator; - wxOutputStream *m_comp; - int m_level; - wxFileOffset m_offsetAdjustment; - wxString m_Comment; - - DECLARE_NO_COPY_CLASS(wxZipOutputStream) -}; - - -///////////////////////////////////////////////////////////////////////////// -// wxZipInputStream - -class WXDLLIMPEXP_BASE wxZipInputStream : public wxArchiveInputStream -{ -public: - typedef wxZipEntry entry_type; - - wxZipInputStream(wxInputStream& stream, wxMBConv& conv = wxConvLocal); - wxZipInputStream(wxInputStream *stream, wxMBConv& conv = wxConvLocal); - -#if WXWIN_COMPATIBILITY_2_6 && wxUSE_FFILE - wxZipInputStream(const wxString& archive, const wxString& file) - : wxArchiveInputStream(OpenFile(archive), wxConvLocal) { Init(file); } -#endif - - virtual WXZIPFIX ~wxZipInputStream(); - - bool OpenEntry(wxZipEntry& entry) { return DoOpen(&entry); } - bool WXZIPFIX CloseEntry(); - - wxZipEntry *GetNextEntry(); - - wxString WXZIPFIX GetComment(); - int WXZIPFIX GetTotalEntries(); - - virtual wxFileOffset GetLength() const { return m_entry.GetSize(); } - -protected: - size_t WXZIPFIX OnSysRead(void *buffer, size_t size); - wxFileOffset OnSysTell() const { return m_decomp ? m_decomp->TellI() : 0; } - -#if WXWIN_COMPATIBILITY_2_6 - wxFileOffset WXZIPFIX OnSysSeek(wxFileOffset seek, wxSeekMode mode); -#endif - - // this protected interface isn't yet finalised - virtual wxInputStream* WXZIPFIX OpenDecompressor(wxInputStream& stream); - virtual bool WXZIPFIX CloseDecompressor(wxInputStream *decomp); - -private: - void Init(); - void Init(const wxString& file); -#if WXWIN_COMPATIBILITY_2_6 && wxUSE_FFILE - static wxInputStream *OpenFile(const wxString& archive); -#endif - - wxArchiveEntry *DoGetNextEntry() { return GetNextEntry(); } - - bool WXZIPFIX OpenEntry(wxArchiveEntry& entry); - - wxStreamError ReadLocal(bool readEndRec = false); - wxStreamError ReadCentral(); - - wxUint32 ReadSignature(); - bool FindEndRecord(); - bool LoadEndRecord(); - - bool AtHeader() const { return m_headerSize == 0; } - bool AfterHeader() const { return m_headerSize > 0 && !m_decomp; } - bool IsOpened() const { return m_decomp != NULL; } - - wxZipStreamLink *MakeLink(wxZipOutputStream *out); - - bool DoOpen(wxZipEntry *entry = NULL, bool raw = false); - bool OpenDecompressor(bool raw = false); - - class wxStoredInputStream *m_store; - class wxZlibInputStream2 *m_inflate; - class wxRawInputStream *m_rawin; - wxZipEntry m_entry; - bool m_raw; - size_t m_headerSize; - wxUint32 m_crcAccumulator; - wxInputStream *m_decomp; - bool m_parentSeekable; - class wxZipWeakLinks *m_weaklinks; - class wxZipStreamLink *m_streamlink; - wxFileOffset m_offsetAdjustment; - wxFileOffset m_position; - wxUint32 m_signature; - size_t m_TotalEntries; - wxString m_Comment; - - friend bool wxZipOutputStream::CopyEntry( - wxZipEntry *entry, wxZipInputStream& inputStream); - friend bool wxZipOutputStream::CopyArchiveMetaData( - wxZipInputStream& inputStream); - -#if WXWIN_COMPATIBILITY_2_6 - bool m_allowSeeking; - friend class wxArchiveFSHandler; -#endif - - DECLARE_NO_COPY_CLASS(wxZipInputStream) -}; - - -///////////////////////////////////////////////////////////////////////////// -// Iterators - -#if wxUSE_STL || defined WX_TEST_ARCHIVE_ITERATOR -typedef wxArchiveIterator wxZipIter; -typedef wxArchiveIterator > wxZipPairIter; -#endif - - -///////////////////////////////////////////////////////////////////////////// -// wxZipClassFactory - -class WXDLLIMPEXP_BASE wxZipClassFactory : public wxArchiveClassFactory -{ -public: - typedef wxZipEntry entry_type; - typedef wxZipInputStream instream_type; - typedef wxZipOutputStream outstream_type; - typedef wxZipNotifier notifier_type; -#if wxUSE_STL || defined WX_TEST_ARCHIVE_ITERATOR - typedef wxZipIter iter_type; - typedef wxZipPairIter pairiter_type; -#endif - - wxZipClassFactory(); - - wxZipEntry *NewEntry() const - { return new wxZipEntry; } - wxZipInputStream *NewStream(wxInputStream& stream) const - { return new wxZipInputStream(stream, GetConv()); } - wxZipOutputStream *NewStream(wxOutputStream& stream) const - { return new wxZipOutputStream(stream, -1, GetConv()); } - wxZipInputStream *NewStream(wxInputStream *stream) const - { return new wxZipInputStream(stream, GetConv()); } - wxZipOutputStream *NewStream(wxOutputStream *stream) const - { return new wxZipOutputStream(stream, -1, GetConv()); } - - wxString GetInternalName(const wxString& name, - wxPathFormat format = wxPATH_NATIVE) const - { return wxZipEntry::GetInternalName(name, format); } - - const wxChar * const *GetProtocols(wxStreamProtocolType type - = wxSTREAM_PROTOCOL) const; - -protected: - wxArchiveEntry *DoNewEntry() const - { return NewEntry(); } - wxArchiveInputStream *DoNewStream(wxInputStream& stream) const - { return NewStream(stream); } - wxArchiveOutputStream *DoNewStream(wxOutputStream& stream) const - { return NewStream(stream); } - wxArchiveInputStream *DoNewStream(wxInputStream *stream) const - { return NewStream(stream); } - wxArchiveOutputStream *DoNewStream(wxOutputStream *stream) const - { return NewStream(stream); } - -private: - DECLARE_DYNAMIC_CLASS(wxZipClassFactory) -}; - - -///////////////////////////////////////////////////////////////////////////// -// wxZipEntry inlines - -inline bool wxZipEntry::IsText() const -{ - return (m_InternalAttributes & TEXT_ATTR) != 0; -} - -inline bool wxZipEntry::IsDir() const -{ - return (m_ExternalAttributes & wxZIP_A_SUBDIR) != 0; -} - -inline bool wxZipEntry::IsReadOnly() const -{ - return (m_ExternalAttributes & wxZIP_A_RDONLY) != 0; -} - -inline bool wxZipEntry::IsMadeByUnix() const -{ - const int pattern = - (1 << wxZIP_SYSTEM_OPENVMS) | - (1 << wxZIP_SYSTEM_UNIX) | - (1 << wxZIP_SYSTEM_ATARI_ST) | - (1 << wxZIP_SYSTEM_ACORN_RISC) | - (1 << wxZIP_SYSTEM_BEOS) | (1 << wxZIP_SYSTEM_TANDEM); - - // note: some unix zippers put madeby = dos - return (m_SystemMadeBy == wxZIP_SYSTEM_MSDOS - && (m_ExternalAttributes & ~0xFFFF)) - || ((pattern >> m_SystemMadeBy) & 1); -} - -inline void wxZipEntry::SetIsText(bool isText) -{ - if (isText) - m_InternalAttributes |= TEXT_ATTR; - else - m_InternalAttributes &= ~TEXT_ATTR; -} - -inline void wxZipEntry::SetIsReadOnly(bool isReadOnly) -{ - if (isReadOnly) - SetMode(GetMode() & ~0222); - else - SetMode(GetMode() | 0200); -} - -inline void wxZipEntry::SetName(const wxString& name, - wxPathFormat format /*=wxPATH_NATIVE*/) -{ - bool isDir; - m_Name = GetInternalName(name, format, &isDir); - SetIsDir(isDir); -} - - -#endif // wxUSE_ZIPSTREAM - -#endif // _WX_WXZIPSTREAM_H__ diff --git a/desmume/src/windows/wx/include/wx/zstream.h b/desmume/src/windows/wx/include/wx/zstream.h deleted file mode 100644 index 8f7051312..000000000 --- a/desmume/src/windows/wx/include/wx/zstream.h +++ /dev/null @@ -1,146 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: wx/zstream.h -// Purpose: Memory stream classes -// Author: Guilhem Lavaux -// Modified by: Mike Wetherell -// Created: 11/07/98 -// RCS-ID: $Id: zstream.h 54688 2008-07-18 08:06:44Z MW $ -// Copyright: (c) Guilhem Lavaux -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_WXZSTREAM_H__ -#define _WX_WXZSTREAM_H__ - -#include "wx/defs.h" - -#if wxUSE_ZLIB && wxUSE_STREAMS - -#include "wx/stream.h" - -// Compression level -enum { - wxZ_DEFAULT_COMPRESSION = -1, - wxZ_NO_COMPRESSION = 0, - wxZ_BEST_SPEED = 1, - wxZ_BEST_COMPRESSION = 9 -}; - -// Flags -enum { -#if WXWIN_COMPATIBILITY_2_4 - wxZLIB_24COMPATIBLE = 4, // read v2.4.x data without error -#endif - wxZLIB_NO_HEADER = 0, // raw deflate stream, no header or checksum - wxZLIB_ZLIB = 1, // zlib header and checksum - wxZLIB_GZIP = 2, // gzip header and checksum, requires zlib 1.2.1+ - wxZLIB_AUTO = 3 // autodetect header zlib or gzip -}; - -class WXDLLIMPEXP_BASE wxZlibInputStream: public wxFilterInputStream { - public: - wxZlibInputStream(wxInputStream& stream, int flags = wxZLIB_AUTO); - wxZlibInputStream(wxInputStream *stream, int flags = wxZLIB_AUTO); - virtual ~wxZlibInputStream(); - - char Peek() { return wxInputStream::Peek(); } - wxFileOffset GetLength() const { return wxInputStream::GetLength(); } - - static bool CanHandleGZip(); - - protected: - size_t OnSysRead(void *buffer, size_t size); - wxFileOffset OnSysTell() const { return m_pos; } - - private: - void Init(int flags); - - protected: - size_t m_z_size; - unsigned char *m_z_buffer; - struct z_stream_s *m_inflate; - wxFileOffset m_pos; -#if WXWIN_COMPATIBILITY_2_4 - bool m_24compatibilty; -#endif - - DECLARE_NO_COPY_CLASS(wxZlibInputStream) -}; - -class WXDLLIMPEXP_BASE wxZlibOutputStream: public wxFilterOutputStream { - public: - wxZlibOutputStream(wxOutputStream& stream, int level = -1, int flags = wxZLIB_ZLIB); - wxZlibOutputStream(wxOutputStream *stream, int level = -1, int flags = wxZLIB_ZLIB); - virtual ~wxZlibOutputStream() { Close(); } - - void Sync() { DoFlush(false); } - bool Close(); - wxFileOffset GetLength() const { return m_pos; } - - static bool CanHandleGZip(); - - protected: - size_t OnSysWrite(const void *buffer, size_t size); - wxFileOffset OnSysTell() const { return m_pos; } - - virtual void DoFlush(bool final); - - private: - void Init(int level, int flags); - - protected: - size_t m_z_size; - unsigned char *m_z_buffer; - struct z_stream_s *m_deflate; - wxFileOffset m_pos; - - DECLARE_NO_COPY_CLASS(wxZlibOutputStream) -}; - -class WXDLLIMPEXP_BASE wxZlibClassFactory: public wxFilterClassFactory -{ -public: - wxZlibClassFactory(); - - wxFilterInputStream *NewStream(wxInputStream& stream) const - { return new wxZlibInputStream(stream); } - wxFilterOutputStream *NewStream(wxOutputStream& stream) const - { return new wxZlibOutputStream(stream, -1); } - wxFilterInputStream *NewStream(wxInputStream *stream) const - { return new wxZlibInputStream(stream); } - wxFilterOutputStream *NewStream(wxOutputStream *stream) const - { return new wxZlibOutputStream(stream, -1); } - - const wxChar * const *GetProtocols(wxStreamProtocolType type - = wxSTREAM_PROTOCOL) const; - -private: - DECLARE_DYNAMIC_CLASS(wxZlibClassFactory) -}; - -class WXDLLIMPEXP_BASE wxGzipClassFactory: public wxFilterClassFactory -{ -public: - wxGzipClassFactory(); - - wxFilterInputStream *NewStream(wxInputStream& stream) const - { return new wxZlibInputStream(stream); } - wxFilterOutputStream *NewStream(wxOutputStream& stream) const - { return new wxZlibOutputStream(stream, -1, wxZLIB_GZIP); } - wxFilterInputStream *NewStream(wxInputStream *stream) const - { return new wxZlibInputStream(stream); } - wxFilterOutputStream *NewStream(wxOutputStream *stream) const - { return new wxZlibOutputStream(stream, -1, wxZLIB_GZIP); } - - const wxChar * const *GetProtocols(wxStreamProtocolType type - = wxSTREAM_PROTOCOL) const; - -private: - DECLARE_DYNAMIC_CLASS(wxGzipClassFactory) -}; - -#endif - // wxUSE_ZLIB && wxUSE_STREAMS - -#endif - // _WX_WXZSTREAM_H__ - diff --git a/desmume/src/windows/wx/wx-2.8.10_from_tastools b/desmume/src/windows/wx/wx-2.8.10_from_tastools deleted file mode 100644 index e69de29bb..000000000 diff --git a/desmume/src/windows/wx/wx.7z b/desmume/src/windows/wx/wx.7z deleted file mode 100644 index d37f823c395d72dcd89d6e87bb2f77bbdb9bb287..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10571634 zcmV(oK=Hpfdc3bE8~_7z)vk*zPoV$+0000b000000000As7MM)g|Jp~g9ycDT+5!eI>=k{z-=$HHgbM{mC@Q3^kOP8iSzHme zO&KMEx;j&Q@0T3v`iM&VkN0U`PqZ^j9xJ1lOyTGJ=H{b{*grLkTN zOJp|V&Hsqkq4cltT7wDT&%aZc{B&%=11v0nYP^ z*{D-KOz`G==4cD6+wokUAP51#5gx~4*{!<9aYVW(nI7EU&H#BjT*T{o88M>wIpun- z{gyWBOCaTIvc&*)?9?JacXsr91^hBaPm5Fz08&b7)J6>CQHz#ttX|?j3EP7s62!V9 zXL)m&`7S<>cnNo`P*}Kz7^&T~;qlBW%4SnE|Evi~tLECe3pa+9z?k1`_`g|dEthOp zsdsmb`zsNXJh2}i^*edg?y~neX6*|M|5r>G*hX0t4I{H^Sf70Nlhmgr42|SW(E#SR z85v;>1gX{YIZyixG>*v8d?qb$N>tAF)Q=hvC-hcTJv(GIjDBpHa)X^C$K8D2I8-&0 zQeZ6Nlb9^t;d5vP=zB%D?^6}?j)>EIvDj!+Yh!nMAXbQ$>olpqP8|DbBh>q9dUK2O zPBDgdix9z#vpn|oURfNIRK-hHk`UAm@f(rTX&lxo=ZJ2}%(=HulELq(ZSYCqH>%VQ zPhca8P73)W2v+6r?3s!^M<^O8c~>SN{q7W#(yH}Z21tZoSCeqbeZ?QS_1H5iel^a@ zSPActO+Pyek9qUqzAWt9w47dAuV1RehT+t0eLF9ED#CzZL!7q+1zw>Z_v96(GuD@9l3q9*!A8ps2@q`VgbI_-2%rKl<##K8TP7Ty9Hk z8sLwls~4DU>4pbbBsVXKYNzAedy7st0aq~9gI7UG!XpkjK#0zhA?)!bA#=wTPyJ~Z zN7~MM@T5^L!-@=Ewywquy?GciC(zdU*%bMZBf@!R@dr9zi)BQ%A)C%eD@?C&sx6m| z@m&JIQC`cqQ4y*oWDJjM#%9U`T@e3%p?q2POy zxv*UN!!LrH$0554hD~3j4W>iPebSGDQ2`1D&e$o5fM27cCcBNkA9lgU?I%Q>w> zTsQUtGj`ITm$xjQTn=#&O>-)R&K%0CEel$217yR5I}n--#8sUjFP{aTnp~t~esWlQ z))N2hJvRBQ?zm5%Lm}^?n`snHAhaNW%1#2C-Fuj2Qrn8Hu$h>$LN{qEYDh#*Bjd(j zphNBYu$8%fPiyGx&4SWYfoFyucr-exh4^okjiZ(PIFC+l(V-|as1daPD z7-3wS3_)OqoE`?o!JB5!jTwR%p-+i1@f55?`RAoXLXrmRXs&;fem-J?jCanT$+x;1+HT_Gh# z4PI-hjNKu7vi#dqGg@#JTQ{0fGPNGu`IF7UlIqtu4$_mYGhHKR&|rq(Fx2W|!R=YD zvgR))ro(EZvrx>=kwo<-SASe>Y_ie_Eme&`g}8(~mR464 zztXK^6JdS1J}8T?sV*HXO!-d6L}*E;;K!2$dw*5?*}6&QlXJ6#wdCd!+*v}=d1hFa z4@_>0bz8(W!#ln-U~NxSlw7DhG%6l|8*c6CMpKj*Vi!&04YWIf>6gdl zR7qE2dMi#bFfc$dG3beq!NE5pVb@@q9&8m>b{uR$MR_A+w#692m5qCb&&`#_67l>A z^DpvoZDijk27 z^_&zh14(!JEa47~Dh#ECN{vJ6q+h$MKw7O=G=VvgLBvkE`?yWsC zKkm@`pL6$ad5&o5up27?@AogJDzpI0g`@7QED;P5W&1d8Uy)*VZpIZp>q-77rXL=g zZYA&YaGh-Dv<9946oj#sGWBU%3e0niHs>5EP7or56|1@y#Co9RRqWe`u7{N^-9TcP zk=nY8MoTh@&>$v1meTPq-5E@0eg?}EmTKqmEZ=s<**X6s>r%tUoZtv?XF88YsY__D z6|buIKc&hsKB*~G^8g&1^MRJ;E`YvY3%2wWxX&3a4si#wP}znQo+*}ExG7mXt8F$L z7}lLAYOb1fh%|wGla}1J3VrgjV&*=1qTz65AIEn@+^#**_t_@^L02D1AbvV_L0*8f zd_9h4LI^wY6p=%`&<{qsqaP3$e`8QBH{+hsA-Q`|nOeC|{m1o%-HypEJyl6_XJuit z(4(_uU)m+MERP5OmvLp#cyh8%?B}L0c-9Ndw2(Mce)AC-3a%vct1D}gJsfeVNld~) z`;#p5C9niB6*cbk%J5L zuNADhU9@r~?}p}PQblIgzMO>v&!eO$=qGQn?${$B-ugXW&s=O}QcPI&y(5A}a#y?8 z_H%jW{fd@RoWA2nuF80|LS>RjscX?lEwcl>?%tF1o3Th^W^%SOO0rW`z*XV*gYw23 zf6>2Xn`Z80ui^Qm4}RVSb21|ORg0r7ZyZ&|KlMAHFrT?U?O(VI8Q5 zpNBT*)nx;rjM5`syKeYvnCetuVQf-=oabEJ2@<6R@83vg`C3OSMbVsiW4XW(x+idP z(T@V%#^21IS95Jx7W&)&!c%!pj@6#Popx)wD)fIa(vM(7driwx`6`u)e$foE0Bx;h zBji~tG;%>-o%>_8f=$KTS<_|aeoA2zUtc92b3ZO%`_Q|hD~O~9F>*7;;O^tDeayD4 zf2Y`o#0@vY$4}Sz9K7r=@=u}1>C_~Oe#P`;0)SezJ5u5oEnDIC_u0x+i$s>)Un$7F zpvhd6A`kGOC<(T zPf(~qb!Im=j@9a(2EQ~`lNfW!VSgDdQU=5)^C+N4lfKLL}tMb1M8YGK}dV5-GQvU z2dS10U7UFlBB0rNP*nHg`9DBxp_=>sC=JIeC>vdHHL>mVXZd~;SCa5GT^OODZKAdV zWWl^Kg^NKP>AhN*i<8=oBZ7QUU21((*~o7_C43StL0(|;PGJd)fI*$*2R-UUa6hFF zMs!`H1_LovAI8an78O{q4C2&C>@@fis6nhS4CrzW|6NRjfM#DThORO`oSHI|@gZ}ccSDMfF z0{_Z}em1)^gq=I9_-env;^kk07uw4K@&0}bl(riWQ>urM*e$B~2)12kOp<78THND? zS4K3~OXcPqt3<^=fo~ymX#5u?aGxFnrN?}&uf4R4fU7xwR-3<2xfIrsYgdKd7vDe< zy+N8_hq240&$RCBEEM(u`qz=HE0Xq#6X>-6$NwDce6m#I9O}p3*x{LRfR;#D(008+ zJ8SZpMX@!~G(VR>oHv28sl6{)TfO3Z+7OA^1rXS2NsW2h8nw z`SbhN#l~;6R-sKOSRmkE@-R$`B(JJA1r_ych-I*69L2AbN;e9mO>rkZ@LbI02ld^e z{hcdd4M(*i_{#~t!RhHb$M-rhGrVz!o9bg>*32Q+1hU6NBdEBL(W6l6taPv zx184Ym5V%~tCu<*Z`!N+1xx|F?>M~E#QEwbtKYYBP>dz|&*~i&ru%t%=0T~^dGDeK z0Zd}O8sGt-or@VY-+e#u2uZYezW$&BB2`hp-=Nj_Lr>c*TvX@P)9Jo}jkfG2Y-EHaM@K+ke|K71r`9F@eyxNckvZ{SR0a*fGWeNoYZj?*BkJ4Ddk>l}^!KGri$}GG zj(faDb}n#-%sC%oASEA`p{{eNXIjV@3=WfIToRT5>ya2{`J;3S4*^Sn7fw|oX|K5; z*4U@+WINz%o=s zf{s+974he5qsd?>!7`#yzVt9kH+_BxMjzdjnE%nMtf9Z(lwc%R%M{cz@i!2oXZ6?A zI&4wF2go|;dX-^N|DRPZywUqbC6iN7l|*YAb^@PLscghS_y@07=@t za7l@0JsDiM$gUGZiIAg+h(~N@f>A%Km<}QpeO;y6d{l-|(Q-jV5ItFV!6?feeDEE> zLZxQ;6)|9s3^uHv*`ftvx*u27Ii|U~YBuzlU~r@u+9a&u)a5X>oi#RofpSG^B3CAp zm~Wu}jA4)7K{KrUC$#!DdzXGcj=X6zb$Xl*9{#JiC;hYv>o{DbQA0W0Zm?!kfv~|B z3?F{WcG#d28r$k?%h!MCs|mcsgOoxZX3jiE%PRB`I%v zezMj?9u?5`A@TL9;-<^eh2Elj&)uMkFOWkev9)^}PU?cZT9%R^O2oF?_r>fHWfcqh z8rqp>kbF*LXRLAj2F0R1N9El!8{oL}XNM0AU+|-E4Q4(WS$$MZg>0|)7={E;2u8uy z6_rw7_=J(A@cb}T!F&+ZRzF@b026HcE)vvdYxx$hl#Ms38M zbg*~DEfJW}3(jdD0~5|=PSOaLC0-ndd;|1wLeu6)N+E{{_>j9hx@P+pL8vn&LU?am zWAukskXD#bJIqbYdnH;yX`XjGL&~b@n3-;TLYd4pqOA;HQ&ThRsV;p=sc$7_EsXfX zpH|LIhX7a_MIk{5GnQ_#HP&Pq#L!ewx|`v98s<9Y(AwX!$n3jg7szR@IYGhh+Ra$7 z%r)nj!vQpsWbGx_j5MluA)Db2JbOqM?(9fyejh|xV@>`^$iN1G74Ro)oC#@z!2*CLHH44$Qp>^S_z20EQ+IXAhiM1%liR<1VCL~RD#iOOwB#dX zI?I|0F^hXy6;7;ZFSQaeDB4t&Kw(_T3-_FTsae`Ld`0twlzx;1&mfHItK#CyDYWO zJ+j{^`W6aE$M{At|L9cpkGRPp$&XVo#RjXJE%-qG63>0X0L) z`Hf<7AarZlU^P{J@tp_8$aE#zr;%$((;GXBI{_?#%DldJWc$t83lG9-uKv3;lZYZl zIhl_dEOcZq3p0s}N9(H#jv(m3qNP+(!T$nu#r*Lpk!n>V+8Gd5G#d9GbV5jVR4gJ? zcXX97@X5bW6iJ0d-}_BZBn3+B)CH0n#aB$cyY}*H3*zJp{vryaY&E$fengztWK}?o zxFz^|=Z200<_;4|`7``94gxGi>@U7L{k+ENi0GmzN}+btmTHxaNS{f*%Iq@a)au5) zi!zM)FmXzt5hb2poIC`@g3kUIwq+MYYI9k6H2yM8LLFt-29(V2P-!$9$+I%TOEvni zRa3lU-|Nn!45ELae+J(0xph#u*u>R)s62`Abns{n`&(ElIwOB*-q}dI|Jxjg1*?BP zZNc7u16?Bq3qsU_H>h$k&a<2fmp{{7hGo$|IVtjzLnEWns#fU+Y2#aJ1Azy*0Tcup zm6awDGPd$T4&NXoJA>5245#Ra+B@5&7E>;FsbIXcM|K!c-qB~Yk56X!Sm(Eh_vm<|IB_$o1Ik#^fOvBdP-gAC%% zpoE|4%g$d(+T3EJm?$t1QxY9*H&{tWqleZ33a$-NQj2>L&>lC9!>D(}*9ClB$(st^ zMO;}+Woi5l7J>cB+5X$leHc*dKaB17*Pk;OKfzcr@rR7xzA_Ah)jRn8=u_R67p~t3veXgM@?!;{IwbM=eSeUwI{e7Nm<( zKfZ*AXqQ&tK!9ktx&eh=^`oD3d6+r1(=JV76GuR zi0r~@uj&z6mvc~x8aYU>CaF@g31`S(Aa4~8GP*WF%L280QV}ib1v<6Be%8L^=`PGH zd&SkaZg;<}wdo)!s{xA-G{JI7CEMJ$-Z$^}>cQEKpb-F#+h zO9-(QvK(Rgo6KBX9LXc>AB7z{1dii7%er3;S7ib`u*oOFz5TgB2$bA0S3_H4kSSqJ z`72hlutggv8it^rtOx6qEkb-yt??})_Yr7uk+D>Bp1CQ*2is?s;gZ~926sQeU;dgZ zX`0sPa4Gaih{D;Gg!DlEnHy@x0yLk1dL(+OJ4L=;Tn#^)3*ENFHGq1@K?f!8nGA81 z{xtxy0AS8KO?Nn5oNSVuRt_WEKc)OLUysp6*L-KtS#aW>9bTf6bj` zkvfeifoxOfT8{2N*4-q+h6D7CjwQdr)+B(uS+4>8H7m&ImQeh6uj7X5D|TFcg=Ls8 z_?Re7-8=0c!2SG*y1VyfSRfl8cCnx+x>VfEllzYTFjB(0+mVE{+vU!7LSgHe>kliY zid&i-P#}6UfjRP=)@v#aZiJ(1D4d>%<(E~bWAmf`^`U}uVo2;n>F|eDi&8-#AKwm0PNXY7)exqdW!tG+%sy@N?fUR1O5x#OH#n9VWm`82*&m4cu8vfCQ`#kqcS;df zBko(2LwsSRBBCKLDAstUss5QS!RNG+@KuJ=t7t|FmThu*cUDYmO_bg!HIdWt%?{cSc%DNQaTQB#n+aP%w^aWJKSM~}zk%4}s(PgG$fI6uXAVin*2JblBm@al)k|mIw|D;jjQsl&sjm#AOxe-@Q$Ew;)HzMx()oBsqFcfE?LmQP*{i zPaPEf0pe&Hu@I^B56r0bq7U&em#6?HW3IAz<1OhyF8(R_mkX(>WdBygjaBUV!m^D( z=}O$03cC(#f2~n0i0U#C(Z9Hp-l1kNycex9={dF# zK}i&j-Ifb{m*jJlL~RrrVEKLxLFsm}pjGGjOBRI2aDyrjlHs3`^7DC+qmYI#1eA=x zh=8t9lKInDwG+$NUy(pP+j4+*|HY<^;>3=B8n@Y7ki<;DEfvv@)`&x9{JZkuR^-6o zpzIX#{uMLPD}j8iPU}*iLT9-`%dh-uBUYZhVVA+05>f^6z`gO&_bbRUuGZ6mU*-)d z@)()H3`T#gS(myHIVq}{Tl1W+B3c-W5-Am}fmoDQ5N`KtSvP5521sC$!2oax2gmC5 z@k>eR`>Plby`^wdZ;$)m4a<6Ik>^VwQ$VY*z*yS915oQu(W$C@Uh^0HqLf4VMRUUe zh+5w&NL?I>gx~&28$i&I$lTFS`&~m{mo&I$BS@H0`r$ZW46sfsykGe{?4^rbs3Nej zMavRCPm@y8=POV*`gV0~m~74r@~);ke=~730SI7taaY|N>o~TDd;~X$Td_x~3&yA! zqznb%&BTfWdcUR9`s1(9wn&&r@Sp0!nNrt1g&yoI7R*vFM5KMaVc$dr9It>qg~V_;^lWXl!Mx$7dnH8uD2~9#6#tF(%Rx5vbquRFT5iwOKl=gHdHPVYWOme2+zNv}Z2re_OGTZ<9{wF87wg`#=^Bz;DG1JYd zZFm{E9IMdStFA}`r$B92MyL+p`%A(7D1o=!!3YyHgE5!Gr<`RNKAIh9EQ!BnBfc}9 z*dIzvj7?Ci@22uy)jA8N;`}IG%!?82QCRXcqJ|wgZ0BElDY7~+JJeL`ycN|^+Zox~ ztn+Fm(%m>M^yQtb#A#K=Zs}oni|B$#oDfYula4KA!fd0`(I@qd{L_4;XA| zs)0VU4$q^CCH*Xs0(dzeoHvu@{;Du&O=f^V$jvd*01K}|++l-M1lG$@*XkV0Sa<|K zoHyGfu%)uLc-V)Uycf8(nm^gM7A2>y$Z9&fxm&P|obuatT74Db@{#cyW(Q{|VDcjV)*R39Jb-nSF}Vi9$=SF->ATW} zTd^PWywIS6Ch9KzcntLW9KJ=jxiDd-Nq*49x!tC^MtdhA7%8Q3-lZb4`Nm#-$h2U~5N?%d(ulSnN_r+UqMRvO8^t2?V%g3F!<$&VNwO5-|LhGy3^8QWtzW7kT>^5k^(8<_x|02xnQ>cMv1y~5Nh+j;hI?~&|S zF0}$rP&^x)>3ttS{jzOleJxm6^H^*;$av7%m4z%vr2V^%PsfC|54-hxcCW)f{|@V+ zT=?e`9jVLQfYBFBe7L`sq8Xvb7MRvrOL6U6uLOXceB0a+dsSaWAlaDeyy7g>oMMSm z=o-3gm5ht`+G`ALw#b7)(z;@) zu)S!n`t1+YWNvJ|BxO`Rw<#)-n71gQj?A(UXtuiLf~b`I4q9zToZEbu?r|;%lwNbo%-7$ zr&Ds}#g8ki+yuCMoA{#deeA1IMY;$rI1Vwlx0-_RqXQ8r;$2>&I2gn$mi4uevpCp- ze5$+(Z3`$K^zc@bg?$8@PXBJs;+P6DVOtp-#}8?ee@PsEitm9)$-=-*2N7H)zw8z5 z|N4p`b9`ZH3&ZoBT#Yz*L#D*vm7Xj8ua4w4DOIouR$lg195R>YiJ}(I;LH%RDa>A^ z&#nXYZw0d4dx<7SqOMVH*M?aq$e~}CB}`HOYhpLeapo0>fXj=w@LJdT-F>EO3?iibrXf9 zB+?ok4_cdM_++ZHW9y`1o}DQV&ZF;G;*_di-Zfd8T6xKp>!WRruu;bE&r0Q@AYYzG z7_&5Y!0rj)(!6F^E2DqI+S*p2Y7kJ{&_YE<&u3+)CoZOi=_ZH;sqhKc}- z<6@^8?~>14+wqdVHhnpuHgUtLR=XvBR9kC8~%9{Qtej>_y87&(;N9{!WvL*7!*Q}Q z1?i-!mJA=;ZXCsI6V$8ZtE3YrSz#`L_M@P8AjoA+7WU>n6|NO*fEJt`R8|ginj(BU zCUj>Uiiw-bAC&#CAyF;4Rga|OETY~fi>4s4YgBrB?h%?Yv9d@g%)Ny%N_{HyFSxh% zh6Q2EhApBL>V0@<%6?tuIrvO_<|} za~F#`_om03gGl&ow5Es!rq4{KEI2S~1KIS!0*Kn${caYLRg5 z?|GX}OkZpFW&0mw4uY1dh>4#ieZ}`V#%WxhkYPy%Gro+ye_Ck55!Yh`+Y~gtj(nV zuPi~~8DsR+7AW@_>5W(JFR(Fq&>f!TL~TUyMd2X-(OVz=N}bw-O&)>p%nrL`6SC1P z^W|Z))OO#@47AhZ>e6a$7l0n#5mbZ0Xu~jmH(QDNOALH$Zm$oo6%<}sZXOiC|7dt) zBnA5$%G4^0Nv)f8s@Ql_wDO8gE&vobp3=n1f-)h_otFlYMceC3-@&Sr_t4fSAvAqRhQ$8S01|~c;#JyQ<92w%@u|HE;HwIk=jt1+A0QH7Kr<7;&pL8X~=Ma?~Jz> zWr6$;Ucs%R7P;MDbBve7=B4w88gWR#i%H_chMN#hdLV1tidb=GhH@e5btplv`%FW2 zY&ULxZ(KO_(kG1B2Tt!JW=8MvknqGamim#NxDPu+%hM305MSXp_>V-actbep6!9(V zY$Dz)X;8^~RmfWAJukHZ(H4mq?Moob&Bs`Ni-oT zuW7{iQSuH^J?7*XaRtH9CrGX}i$;8{^6JXUMH@^8J=^9O1U?&xi?Pk@9ykI{o5bm9 z{x5iPo+0}dt}=yAP&;j&@RDgdX(f>`T&SqYsX(QxM~n?SPDeuDIfdwc?Jb;BNyr@9 z=z@of?0A;+d##D2abNipxptNWKO4rO3dep>S?oyEI3J_<2FA)#_{z%V#@7yx?f2)j zg3zmr#g`bEXv%deJ|7olq$D7_F0$&qe63qb>tBi9#@>$AW)<`V2h92EDIB=7SDLsF zUX>0);jgTfZsWMADftQ-I6RI;L!aw8lH|VMSmFk$dKU#Jg$Gk>6BeP^N!61cG)5Ya zD_&D=$zZ~$b1@;KddKOLqJ^MF(i&o)e6Orp3Bkk;iOw1r+yZ=nCQ$l;#TPWUeTo<4 zrHBuTPuVCjwj@NO-3kbfkY!DUyH^-Ba}`t|3?lQeT=oxAcf4`ig_h9;zaPtXlHv|* z5WN0mPFhY09ELgJp((e*;jNL6{WH7M_B&S5xJdg07o8?A;;24uz?{+8Qj2N??FMTn zC^1RfC}gmM0mOOuTSL!5u*h5f7)n0Z8Vx8BlubbI)QJV@y@jH6=?Su%9{&+c2bYvT z$?rtfqPwECia78+FiMBl7QWO>C|> zi#%%a zBBoS!3=wFxk`+I9Givce{V=Ec{CEPVRR5mG0~J}HhOChPN+HifnA^Ikreb@Y&I6Jc0i28M17bw zT}aPmfDe8!aUJmSMj|59vVP-3IkEMg{Ye;Z0ll0R zau;uBP!K!7?Tnaao-zB*6l#_a6|FM!a$_Wup>rN1$F8p{K`R~<)x`bWD)?ZHD<`TI zuP*s7etyUlz(~5i+sL`BYnesJ1=YqGs$esuR;>u#o2)IZm^hPZm9UvN@45I`qT8tj zzU`JCX|SXO2rk_+iGPphByxs&j z9rr1OI_H`%azgFie~$spUj4HgJb8R;b)8;ImLAcciK@FVL^5i$hpy-;wPPmg2ou&Q z1_38>GU7V$?^JU_nV@VsgpD8je6E+#Y=`a<<@{BnS;pM`AF)o%Lc>d{3Yh3VW`m5F z!;89Of;6R!V6{~|=;i04Uh8Fc$6Xu)htR99joDZ-JsjiTupDU+c9}6hwFpmH?<)!e zg}T*!nP6BnDuH&C4RUN1`M^>ZTk(EX=mKXaLmCG)z+u|LOI9U{*R70Sg%r_=)2r

^8jEK`4srKWMs>-s?sz@OMu%QmHf$b2fH^0Xx0`Y%N} z^xj}jlR1Fwl?YWCX>Jq={ti5K%u4gq+vFw%jnj7%^UCip$CY}M&hi)jQCx)dm5=F2 z;FDs=Nir?;YK@e1g2v$%wq=K-ny0c9iqWeKDEx8~Fc@#vG@EZ1SC2C>kC|hzhNVBY zGVHgXPV8)1XKuD7bzp{%X8ophlcVnyC+NP)^ zYJ^EhL+Z@nY@x-@qq$vCwM2N71rB2b;qZP2Sj&fHty+rl^mHQItm1*C|1KeTGkOTw z*XK=!uUD0V4!d|N?+(<3OR%Lh!nk92c|YxMYjrhgWdQfH&_{fay&`S%OuR*~+}43W z^cl>Xs)%d$xGR(9S9y_)yX2ryZ_HXxMb`iO#ZYR}=AcH=p=Dq_ngIXq;*YqpIKNv{ z2)J-43xGM|oXE_YD3ovyh)aSsfJsOnXU$T9?do=)w^#w#HOeoPKPL zIEuWjur6HQS8F0LrV|j~yD2Z3F)dh21T{QB0j@B%KY%&63Y%&@W?tW+It&eihVkCs z8k~s(c-u-8(hhi_n)}!&gVEXU_>^gAf0*G$ddQJ^>JmE%?B`hEnxY-9*uPlpu}cVtz3}p1w@@kejnZg< z>TFyx*>a6xewKf#Omc3Rg*Cl+iP&!@-mxkT<$E%DfvA&n0albm#U}*UHr>&D!WWwX zs#HT(-00UPYVDo1Ag1I(Bs6 zN%HQ~+^jzukKuJBWUD>D&_B*7tHZEYmcskY2zVP*+iBKYYr>BVM9;W?sphsrGsA+H zF$6a>DLpT{Tb(cw!g5v^e{dV(`c8y5I{2{QY24*Zp(Rt?pTB8eul0K4mAm|N55!XZ zoZ{2ACiO1YJZ|PKFXa904f#}*%^KfSRel8KSBA#$`srgn!>L=;!HQvOb zD^?$MYURLkm`i_?3KMl5CMMd$;SDoqp)v&$s2fa@lz?={OgEAGHG*w}B|^ zMjnv!dGwqT@-IYd?Bws=xkOWj9nI-diOyAZc{!?-FbpM3QcRnpys1!Bk)r_+0o-Ge zpI)-OlY??O9)+#Pny38)gZt83rx)6nwfAUN`f|&Ez9xFSaeka(e9vJejUyC3$6NW8 zE_m4KQ{`Un!hRPX_nv!b3L9J(nGyo>784@>S_BOFg)O*%|`gzqFhQ!FZyNR)H%2U5@cspYaFx zeW_3I6ct3?x&wMgOBmJu!nD&34ocIp|2kWA4^ES!XpR1VK3?w#-i{Y~?gHK}(IuUN zS9&s3*207ARnDSMFhUvTOfehs-DTUW8`v10%}nV;1YoN-9uCeAMCP%it49ATOWD4r zS>1<5%IH;H0~VUH_&vBe=qX^g*$f<8t-sgeo@&%d3e$U0a&Iw53QJtr6W_;3VKXd} z+Sy@rd;}-Rtl%bP;4VL}OVdxNbhV1SkL+IWuf7Km&>%xTEtMRs3St{Z~&N6c{bGtEB8rXTRv^Y?T&Sh?Or>@{!V8k6M*RF6sIqKC_;it}K>* z;1$>&|7DAN$b7ZM4fF{utvUn<`A|-Wt@I@tDTjYjEcP6`=4y@ezUa`1VlLD*ug_89tWXJhRC}cd{FzQQKRnj**gQAiI;>>s zjbFcY4Zmds(+{Bu=WpwZ`ou>wObuov&TxAvq#^_wX?YOCAMiS=#uS)WS2=^z;LApn z&I{d!%4dn70{hIfyhG%YjA#&6OuBBq=>Dm3KCt{?ML?+ZMX6t>{WH>VLzCA=6Q1?Q z^kF8xMmev4k)%VicCx^^pt&^k_|LZA@#K8DH0SbY?C(;}-+9x3cfpxVkIINw>V`uD zheluXRRD_E>bgK&rVW7n-2MV+Y|CF~- zB7-(CIT8i}`I{vUDhXm0CE4C2U@E$%f?MnSrr?+QF1*{?be?09lXavN?l^%iZ$pIG z_-G9|zeE{HhtmdnRV+t{%8qv{Ynm%j1awG-+aNm$ZXkka>Dqpl_&;1L+aLNMWOOla z;uF5tk%%$AnyIZ0 z2;2EzNVfT_Y*OyVvjW==1bu#R*CUCW@gO zUA_qqC?>u3fQ+OaKi{2%B6H!*KCP!}IPl0LZQ|XV5nyB1YS+uDKxbvYI)ej}N#|sh ze85KzF4Ja!Sv@mj9dx_YQwbCkg%K*wl8TFq< zQN+`JhL+AJalScT?36%_caoP6Y~&E+zN!V~rgsNBjx}p%m%5`_i7Kb~?-_kBvfA8n z_>-GMn3O!!UMbYw6m@7C&`}Z24`{1^s~@MYKv#5svfuKUq3>B;Qc#2r4!>Y4OCKcR<9GEF`e3?M?w&GPJ>P_=0ddQG!mLrDsd5<`}r zM*Arup^o?d3{91nhhWGgn00q*C?#Zpk2xr;AOf@@7++rjpzD=7vQlpDszj7YJP zc1-(vF^7j}ia?=lzIgDJQxw=JUek!2CB|GBzsW!UpTa3(QkpVBKxYQ4&}2N(LQt*h zp9E}#L1-f^dDG92^FVfE9Dv6_jcdsj^wdV+p{gTnvIn10`bk~()H!bN19ar%v_EYX zGPqB^$;Uj9Q8Lt{v$w0{B^*IC#5_k)$tbA~UzvbWst?%O4>A4aGYe{!Aqz>BWXH*a z{L4S&S$%}8d?i(7>i@1~F3hAK%PPSYHbQg4?X`*}DM$yq8n3@I)%9VR$0W+Jc+w2*>*?17u z$Na;^V*fFKE^Vo96!l;p7FY7>^bH2V6Lox#MSv&U=T$Z!_v}826W6hTq?#St+BbO4 z9b{%%yXmU&@M?wGQMKvs#MvO{PcQRLR?X1>6l}HnE92Ezvhlhk9iy(unJ28f&9icz z=zIh`!&Ici@+4W1G1|B|`li8y3;8#zk=_Df_doL4N zbO*~kr?3hSBMDiN6VA^?Ff1LH@O=@8kndOVAS={EovLnI4a}M>(Ju%q%%_@}-lp(b z%r_GbuE_tkuol`E!BDz7k8<7XJ5|{JoyIbaxvrnv$4%eS|3>VFd=fc8LYJz4th8_D zrVJ+dUzROFyoy6_p5YXF;vFOPOR50b^4Mq}1{Hh!5 z0L$@98{%xAdV`vkAZ*auDKkUG7@AX6-tXn2w}_o~$hUsOjXGdrtt&HzyN;+mbfnXN zCQfRy&d5dKzzAX=X><@7rFBu)L@8UtPA+$~gKs;yINy%|m3guHXq1F98UE~It>(D^ zxm*hce^@^=|5<6jOt#B4sEBL)-WDdgD*!D((!c!n8|%FHD3x0WN*;PEb~MPMS|&X0 zgB}-5&VAiCh+U*s5MZHOjYj0GpI!V>!>a*})Jp-R~JPL{ztP z0Ku8>PiCZ3lm+wD7_qCWm(Jg{bE2$-gZ*N|3wLgEmoSwq{VX|$nLoN6hR-W!RXNW1 zKM=vjBe;admg&#@TW&8@6PiQ2#K}KpZx2_kRodUw4z|tjx#K@}*|G5zRO7<}7U0LW zH$VBA)|F>x^>yb1q;YbcV@gqLZ3MI zZY7rk&OpUT?mL)#<4?BtepijmDU3g9hj)NN4gs94YQ?vcR++4agw>_Z0ihu zb5yyan@l*qCNkdlG)SmTm#5sg`!BWCO_j*OPFo4tw?874%eu&6xS^T%lg*6_D6Q25 z7-L(f2;{XyV0-c}3zW;iTjl--S!}R?{~v}gKpS4Ow1aEr_nHMlc%ksn6#uDHQwS>> z?!A%~4P-a9Hi*n4k@@!d=!pcFVD!#8HDk1Zd?mEy|D)G{(>h9y2UfNzcQXzR7_T04 zJ3Y6LRJLcVS=T&uo86q^{VYGeAk&{$RRsURQvR<~T&EX3_**M-`pCy-a zT%Yfo)@3;W&hj6kofy;_P0htl9-W21j_>U~;-%`sDr^jV!A|}KdqW21!rc<%eHPv< z#Cxewz}*kw@=J57;8JnpUfYy{U9oP82*se};1M};xF-Ux-(bN|9qFQ_r_XE&_BHcn zv~`}3>O@~|5dH<4lOowH_=HsIs@==V=qLeEpXsjWX$|*~avp#&n^O^qaaKn9HZG&lqWp-SQ|T6f@;D z;aNnggj9yiy^6qxz^W>E%4L`Z_n$hAZlk{sXt+}-rp`Kgv4oVfz3A>}-;sMIAZ!`9%F z4_#@Iv_DC5-oEC*i#K}qbaykh5>NT&cHHia842n07JP;gv7E zX zC0SXg!XvKn9WFW^@|Bx-vNJ+f?Vd@e!;^kxoP!~oIxt+e!~T`w7}}lT8>J)-K^E*b zO{RW@CD;R&6CE*~8ERM7>P6#BK0f85l4kUFKR>_8S2wPUzLkAX?`ZPJFWJ7N{qW~q zD)i4_#$ZHioNk6pj|L6t^qBAUdH3_ZLYj#|BD4Hj)*9p&#?~~MJZW+YO!t>;D8**c1zXcs$Na2! zS%ioO>I9|FoM>M1{uC{lf|Hp}Uq+7sgfDH6Z;ei{5-NmwO;zQHU_0xkQK|biC3R92 zFmFLCkDKW*-hJ)TmQ7H4B+pdPG^UGoZQ5?*)jjR2Be^uCpJ)b(hlBrQ&xt~;WQ@*v zM!R4!8ZOKC;kh{Tk$G{T`*WB9{G!M)>^B5(G<{8DlR-NtBveS(-fp-$U zY_PGobo0-QdoF$<%>@Lk?hjp7v+QCuFi)KfaEJz>*CML%0X_ZtF}Y71yA}*rK{N=0 z7q0^O8o0p;KfZ;|Y;CQ&dZrQZZJ~HN$J&L3XChzF4{#sN1BKA{E_7|#Iql%- z(n1G<-7g+`HWw@qNcnm_YOiyIP@uSPv7|J2hfK^Q?MIn_r9%Bfg+)NsZ)zK%vyWk_ zr-+MEN1H}+BqmI2($yREm5aO5hF1y8Yge5)S}5{#H1lOpl*(_zP6^-B?|~0d zrpf~jC&iQRI!8T)SO;C8n8K_wb&M+-3=>^j(ua5)hh?ZQ)UKb^&q1*}M z_6!K8dp%7ZNMXXJg@Yn`^*U%2bBcsGOKkCBL%t8x&$P_^B1XAcWB;VH!lUn|&w_b} zI7ho(#MBMEOfx(ra0@1ABOdOOoc27f9wq^>6&p*HkCS3AO~@quIs+=8Dt7q1y~SjC zC~|(n>zjbQ_WixKb%L_0dtU`|xTlsY30sGo@m6dsO4ka(o00}GN@|-r` zW}||?{3c{(YDI^cWGbB-cakP-ELr+B{Q{M})Dc|i3;dh-g)9;GW}JnwhKw{+3+^Fe zX!0nBRcCK%KIGp(lo~-oj+5l$6&s(|w}>dWy%9feJ16|ws=j!>D1yLdBh*P1-e^hx zXf#nW7!lQ~oWG~;a*WpzJ{1qt$OY-(TnTL-=3&7D@@K18oxXEw_nVX3XtmDG(Nioe zNv6yvd!C&e2`x9uRs4ygXys33kL42cCLoCugnQ$b=nem8o!XyvzaY)hq@#MGglenh zct@Aa2aJOQ?sW|1h%4@s(+8l>EU|_L@>+FV$JMMfkS>i^Ba?9L`uGR-T9Yk_au}QN z0Q?M1LpOw#^!!zYh~9i57Xi=tJ^A=L`h3`UM|8Jp?XK|=By0xh8B9k*KXXeYct0|Y zB&zJi@zv0OijO>ZZ1M6~BVPTv$lM+I;*?y`@X5G(hP@`P3PzZvVC@#^%aFQ9Voc`X zN?4&k0I-TfiEDcrgXmI30)-zR$GL_WA5nI;pltx<6LFq7JI<$yxlO(>Q?Yh6UgM%x zDu9i(x#qT*l)Q(EhT4s$kp`&zHh0&+dji&0H*@Kj`IFkxfSNeyU zL;oMMmX$cg?C!N&8iNS*!fvzHlXt>q4^++Jn*sDjg+`nOJ(nC(&|CEJ4^ti9epYA7+oy89UZlw z*CNMec@p3jaCi~wcJ>zsi$2N=7(ZQJ1>22?Ze;&-gH$86d}o$?1INGqc7*pA`B1%j z!T#Bz6nJxyKv_pGDp;I!|9|0gGC;av%q8QduYIZsD8Z`1Sc^Qp?xlS)olxQM^g_jt zg`N9FPT6cV?&py2$0|xiyL%H&)RG^~{Y`aFR$-koPjnOU5&0T_vIWOibvD52YP&<3 zrB7s?Q-Grr+L;aXbzgy963e2}P0rvU=?~|)Ih}qpOyFfA7b66XJuB5ici(&nKEkD& zL>_M%x+fkS6+8wx=V7FVIJ$3<0xbtE>Aat|XLH4@wV9L7x%2 z>t5j9sHgB2rN!(MV}Ce&xh?w%la7b+$1tx=IRI-PA zsYD+9+x<6ghB`S5G!Y(pU+VnM8pgO<>RUwhM=$Xnyo=^SC@kh`brMlaJko5K0el-L zFkR@KN!QA1SBSIz-q~Si0bbqeYllC)UDJ{|MqZxY7{7JFaNR)Fy?B>+>d*Vmmd|zc z2yIC{=`qi+x%DgLLx7a`QVljyUH)^B_{1|^XN^J`CC-=7%M+45na(7Iz6aklbk4A& zO@`2W@m9^D!P-B5DApZ5)>09`i-Gs<-qX_@n`jLPrwV3O1-h^y%3sCDpVuec8t}5k zc*rHU;I1(xL5V#pfnJlAbL8YPlTeAYbG9SJ$Dd+Gg5_yK>zYdlPdw5a+Q3~GN1@R< ztksp*q*j{53q`&$u{241Td{gV)|kP9E-d?_;&0~+1>5NZ9jcm@;0alWitx(8e=q-E zn%4k(Gp+8@P*SGXFm2p16VoMx`JCeXICmOsfJf*-e7xnP=n6R5L0%p-SokjShgRiY zbh@;n@lGwrVzLsDVn&uO_#Z(a0fa4EFv96`a{v}sSDn+bX5w+Kvm}@c_oP`}jmkMh zv4jD}xSfvyIj-{>sap)?I>nla3$d@E7lxT+kqzBM3@0kE()?9t6HGpv+_T@6>PpLPGd|F1sF$CJ(f=ED(b~096B9-qa$&SY znsgxVpOoi=!=@WoM$)-rIRz<;eyCeOx+Lt>3TLsr*(;PhUn0CO^W5h4qpj;RzxPKxRdmNp-V|X+EL52}e>jWn&zxdGzW#nj zP;;Mi$<-c9o8sBO)Dpu={k4{UCgRh1IRerv&*_jyy>Vp7Rirhm#jXqTeUp~qU+-;w z%SSM)8b}i_H;i)$2o18|&=~b_JQY`!m*5e)EWx_dpZt(0k|$xh?*u_EWHTsI;rFWH zQ*59~IVlV?qxVD_2fbrx-`W!wLVA2` znZ7}-;RYX&F;WCB8)m6Qkwub>uQ%A;28>G#)2r)40iKW>1rOXWO2dW?cl&Dk^YCT% zS3P+kqU1bvn3euI0irmB=mXALfR zhJ#WVugQmL6_#fJ0m^h$GyEB>o8s8e;V|IvPL16mSAB6YHq&v0l+;-3MXBjAP5HE2 zEANM&McziE-4-l%Em3X7>NPu%T7%bOC!&*ILN&-OuT3HRGA2k!iG`?A>&J6n@i$aK3ssP2|1qN-A%eAmKA<=*K_q zt=`xA;v>3tX)Gfm-knJ`ujAG+=Qp9#eF}SnszjSW-lgwT4TkorrM>lo@x6+h6EYnh z0@CE=H+9qJAc)%Spx(hc1eFIy%-TAdhCI;bUL4!DS6vWD+=ZjxEWtQ0Mhy1oq&W?i zKc1;}6saH7U(n)JPICYy_8T6{x3F3UQ5q-dG-}z`I(a=KFlpo1wa$AU!wI{2JcySA zN7FEzyL1fg+5ZoHSZL`Z)$fWOGzp>mRaa6p`g6ryp7?fBuGxgHcn9pftp=SgpAPhi zU8lXW$dU`>mR|OeZu{4aemIZGzN)2M5B_o6kqh8gZO)6!O=74~HUk&#cT)z)>+y($ z);1@mCIxjyO(Y?))+XT&#b%corUu%%{yusWyxKA*TcAIhPgS7UKL`qce5*#hv zMp3PtE!|Ok>n>`6QXTQH9%N?jdBFa@e`8;j%Z;1Qyqqa?LlL`~Z;You31LOGmN=oi zJ5h%NHnMcgMJ6A1za!q|;FLL+N=nviVy@l*36$XNFI4Z%$$ZB9HZL6M+kJjky+z+* z?UmvUf)W&@(LJHAsaGUuTS?|QPW6{|gWhCn zwoL8SgLx=+|FAY|0lVDCj$p|VU8ttD)z0zW^V zLuc3`S~=#SxhK?RG*G}3igPM}CHl)8^n#J-rowi54nU)k=m>_jOjhN{``x=ul9Rqs zDHt*YJ3Zv;mN<7d5Yoo~=j9W$GH64S__a%{P{j1z(nB4w#61e59KyLbjoS|ZWHUVV zlMbZE#GDSuL(!M1OS|Pf%|8?C>!k#{-hp)HJU0Y!gi|baVZV zqC7&6VhBOEpDbrcohQUIvE^~O$U|&MK)30ql;{APa8|cex_$CjOpE;>6*1g)HXbT3 z-XZ$vg-xCJnWkh{yAb|DPal|n`LF~b@*^ld95I=sIVSGJjw zd~D)Jw3rk%V-hr7Y!BSbpsW22Ve}1Ak-v|Q^UWj1DZMBA&Cf;3Sq7!kZ zh$iOK!Lc;75BnAO%xO(MbEd8>?ipT5K7ZSE81n@R993H~zZ;4Z@cS|jyJ?9KQBZ43 zRTqJOg!Y~bVDx6rBOrV$B=6*yhCUC_$%KP&Kx&nQMs4Yd@P9-$z!Z9^+{SB7n()yF z%t(C;cGu(j0}3t}BRVaX8%8*9{skj>^ioO?tz?jq$4di*nx%j~@d;@`ax}T< zuO!c6*8*nZA55g{dVK0V3yl?x)2fz5amZtX4>ei@xIrHKvuRVUkNXPl4H;u^Ii8|E zAkK$k6wDSklxS!jbhV@+52d$28Qg#E6~MWK6w9clLU9{?43z&0BO}&R_gDpDbCXj5 z*j@c>AuY>9(egJhl~g^HkW-?Ga7jr+urMg0{<=h)VOLj&_Q-Jw+0!{l{rtHr$xUCf zz9u8hvtFh~hNsVUMLBPTBP$MJz_`+4;R-#nSxyQGSUr-Y&-jGpP%4Fa7_sgaEZW-mU zj{(GoAcvtJ*)I1+H_fkNsXL-pGxr~xo^=WZJhg@FLaD>3twK%4ZH+ITAV#2|rWcB_ z=?0n2`ZS&{eu(o#?!g#T8gsTd7U5Mg!XTh$+z)dnIE}5QpahgmK*GktH{f={4_4r+ zwlVH98J3|}e+G@crAwtx6*E?#I~GjIe2~dCC^J)5+eIgAHq;w$sC@mgQ;Bw!3b$lx zmdo0opNXO*Aw@0JX>=ZPK%6Q(Hi*a?46_1rcL+5u_5X4MB^ENEjmXbhY{W`a&8>~^ zF0l(PomA{4gzKLL(p5w3`kN)I#?@Uh64>0{=LX}QZ_mi6_I;~ z1lQDWxNg#<`>lT#N*RfcvjJHHJ7whG=g6g9W_v9&|Kpmd!DLjb0oP~)5goBSSpV?^@PFw~1)9x*x?P;dOzUni zL}6zG^_YXE0728?lWNn(Z*bL*x`-Hyw?Vx}Mc$NHCmp8PvK4aEACa^>#xsxq5whN7 z>ta_#geCliHY6Qnl?zrI5-Mr+&`WCF527qe(iSFd-+!uQU7_Y&W+p(;{+!7&2!9ji zL#n!=Eg0m%L((=rRz`5WHbce2k`UjL&sf+MI2ZJX)f@>({CQbRnQD{z?2}4GHb*k- zV>j0Cq6M$pPm<-&5mD_aq*Wk+-#-i}2mug>`qX%T$pefa7W)kA*}!w@cPrXiB^BdtKhXIXr>m5=msR-JOA}p2^Az|a~(`$0!P9Z3PvQW#B+T(g; zdXeqbSK(;e2S)m`+o0;*F)H+-BDi_Zguq~UE4Nr`4IdYsmZbo){ZY{;bRauuRhM14 zs_3WoaQW6TD7kahY8WxVlg?l@SEuhs%3)0WEG)LA9;Ug9#u-vv`^mac(`egs?2%jd zJ_z(%nUf}CsR9n@vCsy}KpCNtvKBWNU>IGIbm=$3s9nY4g!El#rntUQmG8qjDUHLSWKo|s5 zNK=y4F1(wG%PcT;?tUnU`M($kSj}XD))(ii^n^lH1Bk>Aq?wq6*G6kyV<%Uh`oY-8{If%bpGPi&kDmSgY^HB+Lw_85@aP8B_ii>6V{*u$#+x8U#6aJe@GkWZJ-tQ)8OB zV&nv9NxggGW%E z&dy%ZxK$t3eAv|?zaB8+2mLJb0>vuZRvK$IrjjvMr%+;g;6(0$p(&bgf7>_b@@J1d-WJ5Gg%~IRC;oyddS$8-@P2qu9&$M4{C21h z*rIb*dn1Gu{2VW3rTg*70#KmU8N&${afjPkY3Ut_)-?^nRjZ0Qqz>Ezv}r5ih|hxJ zp;+^ZM2(l&zsuO2yq-bYCt4?}x*3=KNJ{oE~iZZH7x0f*!+a}M=TyL4+zv(2g5 zq_w1=u39C7bWLnpv?=@xqF&G*+|M8d-!@&^FYswenQ>x~`Po3hk_$CCfN%hTJVgsV zJ#JnL?dpxkIA??&3}oU?UUF*5pjU%LWPS8nZNwtUU&m0hT}2l0DgK-f3}e6%J>?7u zmEdyhm@Do3NpmSnxk1W!>Cc=6%cz1#9FCOJmHV?z-QF!S-LtiA$Sv~~j9GmaTH9N&t);?XVJfO@)*}%i{&YAs zEXX{IH0YrBmlj|C8Y&wD#zNy&Suq?~TIAND`<7}(|tBJcA@+}tYt(wCK0cL5hmiw~scTvw%SHdWWSZHo&mU+WV(80Ox zV4q6tW0~~z=DTCNcV64|FrH15)`=N_Q~quwpo(Cl`>`cn@o|BGSAV&Lt%1EFc_K`_ z%U~0*fw=&D^CNpUr8%yuEMd}6j0Z;#Bnn{o zD6ZLj`!Vr)Kr|$FR_?^W?LZ*f612YP024MEdvv##|hjLocs>0}a)bMjHqb=|nK0`_u?1@z2DB^$EsSIm~VCAnx?i@$} zx=33bvyxYe+Td2KHz@(j-0|fPH#Oujyk!Qdq~-zTtF!P~1SB_$=<}~T!#H1KqR!iF zSz0#xQWcDeQ-TRY3cUd4Jdch%aCXO}UquJmvR-o`0q*9iC05I2n!d1o?zAWyAG?_`1AKU8nggcER-X^|(f-n;Bxu9@4gdZpS= zW+WGdNI0!>hO9?;uff+0dh`bi>rrk?dbPNwqA9CdvAp9dwtqIu#Y&L7*i;l)BD@ce zzB8<-pPStBDMOC!^_Qus%omU(L3NS)++qwy(je{eW{Jszz0w16}z)(;7Ry2PkKm+&a-)kvwmeG`$p#qP!5+KQVTeXpyJ zo<5XO_AAiuS~`+*MMlF<$LuDU5Ce?A`NOaUo-HA8kDQ7lxa|D zr}a6zK3CV(dT#$6A>)F{o+`Sa7QT44eOR3qdMFoXF`M=?CMy6Qz#~1WkWe&wyjL}m z@x{o#bHTjx9sOBX(G*ed9*K{VSYKBp8V4D=p6CqM(>!DihbQ}2MH+)9gDX4)#T#;ne(Y!@S zRAp)P*f%R0O}#OWpM`75Qf9Wm0tcO#s%odS1N)?%jHvZa;JP5Umd+WoijixXfqGYbMI29r+QqR}t^-T4rCp*I`xm9B z9>XC^Dw(hxiY(P4HWx-kkygD3DgkRHMq|$?s7BtaY~}khUyC?5>n@EGn|4$aVO8wn0-z>pbcez?Msdl6_Tu-82eM34K5qF(j(a+&xfO~lpd;=|}(-P?cg`T4?VTsPOY_TEoV zduM$_h+5)8GGe%jPc9*Kc+8SZ@L8DgJf}6rDC+)z&}-sQbvk{~lwne$K-4F4W=f4@ zC8CZMBjk}~zeu^F!6MXJky!u^Kh&t$Je}~jzyA~Ff-OG+$FWq)YAd@LtBNl{$#P%v z@mq^Nu5w!3PWZPA>i`twTu3wMY9C`mx+pwvIi+L*g|{>#4$+v6mfmyTU4^4p+k-Bs zgqN4#|J`4G=0DXOEk1`DD!B_dfBI$$a;KgC`QPQ!jRscjbb&s=d)xwRS|0>{V|~IW zcp%dF)T)BlXZB8K>JDPT0RP30bk(tW4`O;9t(`^q4e(;db3kIU7^%?P9XYIP-|%+K z6Tu3CAc&=wlBZN{F~S%JQdMXKO=S{n*ZmW{eu%nNA8P=nVLW%&H0Y(^)jX(k4{7cV zPnN}QLQal4G8m`UR)UEo*mSm;I{@>nKq&@3yI*`2{Ft%%)#MtfC6@{wc=#)113G+u zC!?~qQ}F2uEx3Upvs4TyF<_u!;4~;dTRqQNR~|BTq%BI5Jvk9Y97e45y)iJH!zu*zXnvdBz?*>TLAMhdPfi)d@|LQ zepq{7>frZ)x7ETeo$r4reB+UN%S8Pzi|OFV6U8p~q6&nO(?7UZ|AXg{{cJVATzC3M;`CTmAKDv$zJS?c z10ZlGmF2O2QFp8&`c0X|%aZ!^vo0DrT+Kl<1xDPEK*hrs{j4Fy4prwEoj|3M6e)G* zG>S(*6vcGW*=`u-sc%7rqWok-gU&jLo0^3;+4p|_+Am}00>mcj$OeY7V9nS!(O`r~ zY=qeZR~Yha%d9)_$9021J9;z55fGBmABlgUR?d~!HPWRro1DLtq9!~5yv^?s-2Ua(wAX+8xr^|k3;MrN za~S5+MT%tab;SjP9~kmO{F$6Qp}o|hI_%@aG^#R?!GHz=i_cg?7jlnpDt7vFa!NW} zPeV+gSC9UBi0Z2bCJ6*QYg(0}I(vHgMT4zi1AVD$1$v(R-NJR7{}?+#Z95Eut?mrK z&$kqum~jA&>5y>jf2{CFGj+mRp(d}pyrZz-c*X2j^Yx@T_2$WOcd5|k1TR+6yI-)G z(y42;l#hmhsv-(t@*JHRWM99Uabu9vC_0eod_%FrvX=|ufau(Mt-Fp@dKRMC9{=_& zlD2uP`_HyM@~50`S?T6so}Q$s#ls-S(PIqgCOrSRuDF+y3is-t0!*qViFS~`>1WbK z74eYA0uajE6Jo6s5^;)Le0T=sNXRgWy=M(&T5RKY)Cex79cIO|%QWY4UsTlQs9rkY zD(_6?n!n*=a%uYK0S*@6!=($UfOhY{bg*MD*jeGN_JL^xdNPc(0jdtwEA+}E%K^j5 z?H9#uoN5m#P@Uq#lJ)T`mI3HRPdK$aot^f^bJr?Q7*318EJq))N4wus>owI6^$0mD zqY$v5g`nOf>eE~5qZ%y`;8LIn@e;DP9le>QsJfdZ78jx*O|LzbxSq-%gTy@RD@f=F zb`nUPSx}c(+>2Fp&!%P#?uS~rOk~D4yN{&Q^6Fl^AbL_SCl?`zJzCQ>u}_-`D`BFG z4X&B$cycmL7U9e2ChW_1|G3QXb>Yp(;OCAX-HZWyFm}bBYU&v|jmuU~^(h8XM2N0h z>FKOt3hS}-mO|ZfBfyb)w<2T=&e;xYAzUb3mj*#cRtiSVraLG+$!@iTWADCJX^~d+ zF|4cd8I;rxmR1#b!F&ulJ~?A5U--oG{Z;ue{vV51D$&wuu5&>sR@UB64(F*UhbRPw zf=_G$Dtb*$n*0H4;wJ4Kd7$wv7R|!yQzaDO!#XUYbWe8PD1A1n`<80%hI|tflM-+x zuHJ=0Z>52e9B_&*-4IJfXoj9=Mb#%9VxlQ2#pQXcY&UFBks^Gmnu_QZ9Qi>(ZmCeh zB~iS*qM&zYh=ML`algA-O|+2;4~)6hX-@D;;S+8U!&A0DMI!8G#8}>bBZxWc03k&n zvRv&0=TD~-Ehc|VEkc>XSo9;}yCW;nV*tg6qfeN|d~JDgSMQI8YHIR1^SyL>>i+evJTa1aX+Di=A+cJp2b`|FY9TqU^cj=TxFZ<$R#VV`KE1j+ zY}p!PHDA2lfd=ht3iQHNL>0&&6A?gj>M^NR`mykNbnhdsd>VPxZp zhGcVRDFCm0L|m7Zb!k)Qd+fWscww<3qOTb7iP&RCNfGC_;zv1Jmz<4pdam$-vt+Ef zeu;d-XHsVBIH-PpM7p&j0`gq4@D3YdHFFyEV-(ekQ1iW`#9Dkxn?ZJB-JfDknlB>{ z!s|3taO5#H9(w-v#}kTNT{+JQGSw3-jSosn*NXpE?d^A(O#t!U*iw;jyG#i$-R6w7 zXPYFG8#NO@<`n>M#Vykd>e%pa$Ijm6RrF$($2L0IO+V-W4Y~OBDEsr8sa0!#q?)zP z7s_C=w!W&gF>wo~%@CEDpl(1_2{~UiN?_V}O3}T*Z=XE~9g%DQ8FAhYDNVyaTYz5~MjH~;3CFrQY$-_6 zq%xcjw_DyAHEQg@i(l#juKynl`WeU^G)-yxu^MlwxT>I%1YAmu0>k; zCd;ZJ6q~sL9VYH$s9m0t=@VW}&m~}f*17y8!#laghl>fz>(Mqcqgmk?#wcQBB^D+| zci7#dp(}&7@59ysO*9pSHp_#{h53M$uW4!ocuZ{*?s;Yul2OXeL%HBc#_+iohG=BG zU!{a+!&O{_5RsMrQI!NIuF(U+L9M0s>f_dHY5&n%h~|bg(t-$HQ!40ETBEo27?#@a zMwlAli8_cfA(0j5F;>4}kWX`Tw`C%ws7hKV!G_VnB|}K(1wRu=7^6RNk9b38=+E@E zlebxHGYbGiRa(dqi!Y|a-P9 z=s&QH+Z}z-RN{;x^glUN7)RmldCNerq8XfP{L7z4d1W)0lta z*puWB3jla%g@1k<{9o5;3(7%`ADXqB!(fOJa8K!CcId2*52v5mG6EpBZgDak`<`xB z;ZW_G1cyR#y%=`aSTdw;jLuQ}NYC0inasLUEAHa!FfvwaHZjgSn&DnbwJiS_+4QVU zac0Y-;84x`ddX)lzj9hIV^=(@-UCB@Zj>;f?$@0#*&I z2$k7AEcDbJ55HTLXjMsTeTAh|v=sr8?#RAkvc5nhF5f39ZWD{oCSVv*?igFn5Z zjBs7X%ZQ%3V3O5Z1&eIkUhXrgHK+2fd_lYs4>OzoN^-Xjm%sUHNj(Xr?K8BejlyLn=8auFcDhaoTWL8ERt6TPjjkbW_Xc?psY|ho(uJwLU z)L)Xp`fM9|2k0H^ELOBkenMtj*wpBsLLHY-#*{pzeU`@;$THku{&t)=64N!si zV~x?08D_w7_jgp4Od{Ytu@|$t=(5OyCRmqi(vFQypeu8IQRhuHWZ>~W4O!_StmUw+CpK>fMniLX{3#HFFT731r-U4vi^D5SclAebo;RF?_jX&7 z=!qVzk?ze>PXUQi(`~w-(i63Gu)Yk%2Fqz442bjmFBi2eQ?+Tg?xuVI*{Kmu zk+DOlZ@b1gj!E`3obMyDW@8T2@tf%r`YpA!5;15*z}~+{8lF&MjWiWE2}ey7I@--` z*v}Z3A?| zw0OKb$8vZy%;op<`)w*!?aftQhXhzF?PBF)jH0|)zqg`pWzk01QRj+tOTS*$GnD2r z(ixx?jVs=&KB{s7DX)9Z;+xo);vucf+UkIu+U^&M$72wqFBQvi&?v%_a{%U3iR?1= zNxd~?)mh*59@6CG9|XDcj!;!bU-?|jV-mPiqe!k+{j)Sdi-(Bfpq?540M~nCRsKmG zs%R=85j^cO3(MqGF8*dMj zOe6pq9H@bHToZ+2^b`~`87ID@1OF#hZ=iL*^ZJPW<)#|9fiUKcAv9_>?u4q4Ku zynchktB=hH&{X4UcD3n~gd_t^+Y67Q6 z$!C7Z8TB`jGo4|Q*aNM5b{Lo}wB6+1w7G*%+BM~R0HK}CkOs9xR4|(I?h{`j<>%pD z=gi?{uSg#zn@snRr4HJq`NxV@kLgH%^s*S4DV`!aWKkNIObpEIa5!u&j#BbTjlRH;*+pW-@sQ}|Bz2V}mns1yeG3*zQ&Jtu>v z@A^x!@xt2q)en=h0_wB`%ML9lMPf~J6?f)D1_ax$s7`Cg(hI~7MgpjkB4(jYG%USD zQHz{Ee|zd;_BR{lttO}@2A~ovzL*`e#;(>>n0gc!4M#`22i@CmDij|P9j$=wnk?JX z9oB32V=AxZWI`8pSy5bZH30<5YG-wBC|q^)_txDLMXw<|iKVM`3ff8@d1-oSJFCR> z!NCH*foNfRDT)mBy=2tfK*z#D?bO2soWNZ!5!j);zOqK-_r+eJzsc-3jdgRkx$v40i!M8B^CaTCJDa(7EpEg|Vi>l z`>zr&c<%&`tl7x@@R;tgelqviIfbt}%h#P6MP z?w?C6^Py#R8ir0fM9N-I@a*4WQET4f6liRr%iVTxmezeN4cP9OzU$7&{?=SGdyWmO zJ;qAE-b16)=mo7!;~nzzWbrfi zpe?OlI3#c2K#{yHk}GS5P*ug$5!SjN)D`gKM0Zm72I{y&a$+Ri!RP%GX@2Bh@ToXjNQngn!kr6g@dv8x zCA^3|udPhlIhh_0{XkOu7*Yvr+a7Sy^y~2H86_4Q@+eZ>fvLLpkVMY#weydob62Wms?}+6vKT z=6abW3S#G`Tp|vTx%TKo?qz_{@ z2KfRBjgxD7O%6UX?BaUOrThvcQXm(tpSD;D3*`;Mi+RioKp9j*ZXKU=99Yn-O=OI7id8){#)Z90EEC;1iAn@`z zd7Jq}J%M`Ur)#zvYm&>W%2xBn1L~c!@y+zTh^vd^WYx=a29PW05Yvy$2vp);Ob`?KFJw|7&6eWW3v0aa@MU;D`##bnT~i1iJcO9;Di|MnfhBCo=1cE4Z|P|}ualxtDbdV2 zZha7n0XB%#R$UM&V5@ALe$2S;CA5N?LhO+#a6n^v70CuheF^RByo?C}$hq_^kMP;N zHi1_8i-EHn*LR@DLr*+^s51wDB5oExX9`Xp=tGA`WK`_@+HuwKtP2S(nBDK~<5X^7 z%St~#=Y&qLhQDX6((^{VwNflLoaUKEq@T2DTIS z6o`i#yCY0#PN zP?j0fYi(0Z2}i@n8Ro)}c3*`!b9m0qTbY#58&*+*Q5$7WA9 zWRax5!`;uTC`Ednt|@6Lyvz+-4oJ~@-J(@;yJFvOaLEIAEpdu(z(e8kLH!Y&6bk2vYHi}&=52r+aIcKooq!D<60luW;IC|IknW!AgwRLz2X+6u*z zOsm0?M7Hl^+h}Q-u^mXIm>&6_LFGk=hT2IS*H}Ar=R2%jW_XGSmCoXsb(#s{5vGkV zfOyU?e7c{^yd>O0(Q)!yjO6oSghKA&^g4aDjPO)cq!o!w#d5{qZxMJO5m;|AA-Io~ z8{pHnlThQNqE*Bd@#o_pnCltGSd;kch5xqQ3cDAhuFbKA;lH?`!DCsV%6W>oWo+u3 zw)vE~ijm%>r#lKiQCR7bN6?WA zP5z1lVh(oyd};4!t1${AVU9$Lsr!q+Efbb;ha+JU2dUhEj0_ma$0VkVI&zhb2B!my z*%V9{RKQ|%ycZlHFSVJ$qUDL~(_01&h!@t^WpCTW+OJC~raRSVLln&CH%h4OlJ z#67FoX4T)tGVv2ZqAJCv zk+!WkFT# z#I6uaJY%B2$tWxU_|8ERED#}r_bU~eY{CzKiU;Az2Nb(pD7N0qB?#%zev2Lq%e{G} zN%j)=_-sinSL@dP!%-1U8(qM2>lZH9-c0`2$E^)i z7Kz8SApQ>yYIg{^+^d*ERAUuGewsfzc^m4^5j@E!9ydmYEA>9+skcJ^nYvnwKcM3a zDJB$C*9<9GSq+J!Sr*tA{3-@IDf`VX8kH{h+K^`>(3P5o-QP$+ik{_;5)t10`Jg}$ zEH+Fgjp?Gkum8*9k(RmBo-qpiZa>HIIf}T`NMbrVbK)CAQAlCIT&*;0dk@KwTlQ_&o=3r2GCIwtfbQMl5Z@4t1KF!x_|yR zwmZ(~MM0PcF5XU#xJR(Ie}6%Eqx%R$Td#sFFqx=)K{RTqs4;VK-VQR+Ic%l2|LP+D z6ZQHgJW65DY5@haf?=_A9+Pg}Yzuk$t^tGaEA}m_-*S-*VHhFI%?) zYKe(nl6Y1u0IBiMwc)TK*vieOn=!LJ7CUc4nybxuAfWA3Uub}; zWU@WGv2LmTzC>`%x1U=so9kNFyT=kS(l}k#A0%((BFI85`l053PH$MoZBj0y;8c6S zI#K?H*gzO-9*6{X@rK-z)J#9?#$8MB2%ulSybf)u1V4ua?6XH;_vq5Fd^O3Rm&c=9 zQ9`!fn^c*#MI&y;tn^O!nefKy`_gsU^UgUktOd9BRLblGH}HZ0KRQS!Hh6@NU1m|H zhwcnIf@g1?-$%Eq1ev-nbneDqSyl7erEE`PKg@QG_9teUX)Osg6cQvci`{uM#fls6h+ykMR*T;<4fn_ z{@{!D2vSnoCA9hNFwIc>zAe;*`M3mP9BQ>8vT$YGX2Y#C<a2w!Tg<|+jE@*|91 zX!IsPL?8*TL*drO0dc3GPMQnrkbt`i(K#2OmJ8BBT70H^9z+H`%yaO`0oIQ7!%HD% zCkq-G8-%&R_muPm#jBkB)x)KZIUlXn5>w;8?nFGo%l)2uHdzW zqo#?7-{08XQ5zft^(U z>B-RB1Q+zoc;DMVT+}Isx++m*-1-8H32zqhW7#AH@loTy!j{r^)|!kr$$z&}g%M!# zm_NfA#>KncK5^bxrN}T=TH1O04H~9yC-r`#S_p@*WITlivJWBVtyayijD+J>KxF&) zQxVN2YiI#4)$seI0%Ad7Etk;@&fZZq4kilX`WRG{_$k)2Boqnh{TJxuJ^`&0>P!>jS%9z(zidu!5yf(@PT#q7|+COwWFAjf+CB$w|TP+Jw2o{^s!f9LSY+*(V;7vh1a-D0zr3(cy_Pp z0>I3r_S6dinHDNJ#v+Re)_D*6pj&$`D@IIFu_^jX#qDvQd#`0KPAgEYit6UDcT~eg zpZBMV$gRii#or@(pwk$~c9J;(Y2=fVy_km&HmEMqi08FxZycuayhlbN&B?dN|Ev76 zn@jTX4YcV~1>!haJ=)ULUv*S(VPr3Oz<(bjZxw*q9ZX7|*US`@q^BT>EtSJf2RH z`+wu*Mid3N9^>PzSQh9fQku>=F>L9C@(gzRljBBzsQ+op;nK-IsJnv?Ar zE|Ip#UYp5q8Ogmxf-8A>(EY8Zp_`i?eH?>I%6j6w968;d4>HM9SgYCaF=67Ij=!b2 zxf7s#qJZLLjscm)X9gv6OAV@h9aq=bi0X-?rlOl7Xn9t0M;2+5ssh%8zW%e&ojwBYsOeq~cm}Vrf^n$c_9m0b9#HcB7zsz1>hC!4qcwE#?IU3SKvVWh^FlrUU5{**z;X<^BG%$F1> zMtVa|q|_w+i#?68S)Kq{0*mQA<;k}pexNnDRrkRz*mW!Yfz{r+PyfY4tB=&EmL&QH4 z6`~_s+sL`NRe(1#mPqOM2DK<_HB}WlFw2BOp9c7LgDM4khW#LP1RCg2hI&9HRBYhy4!me*(6r-x$ zQVhvW5q-cu6jFTm2gp@Od?Xus(x9a8|L;;>gBNl*IC;t>lPg|WIeqvg!wVPtHLR5* z>*Uvagc`q#9hP*RERPOTfwX!==4R&413+CCq%h^$z#N-ASyTY%&)?hWf*$mxiGMDf zhabQ2N|5KM%rrK+w;Qm}@>lS&RXQZkon*ZSEBZ@hQx1}%GcZDp|<+ZD$9meBcC z)UT9e-W6lAH$+}^aY&D_t1(zT19E&9R^P^c(Lew=k+wL)(izJO3q81^sglPIchk;? zIP@%cI1O??-W7b|wt{bEgLWm7BEx% zbmpN}9T`avO>{#~bsTn8Z4=MkQ?{%MV=Oy_j}(25cNi!#VFm7Wf{7si-k5!PuDzsg zV7w6c-6@YQQJ`b)x6{q^+w*VcdfPa=NFTGu3O>O(VQ z-)+FYSfaS2%YZro{qaXo@|OO@BQkThop+qMI|83K+g;_^&B=1t`X6bdKb>W7G9DCL&=OZ8BIwT+$i;3FcUA8T^+2fzdM6hx?i zQ4j}L0--O|7eHJm*dqJ#8DqLb;3&f&SsP899+@Ywx=HgmA9LRsZLYPvc^mgbn)_}c z*LCoB@Q90NLTH#867SeAS3MT#!i7f7(HCHsg;_q4!yipJNHtI;uF7Zp7*vcqe|_{l z6+ST`(<$Y*Nz^yowcuePP7nK4)9?=m;t*S_RdhmF*; zJ!5C;TZvhG6)eU8?Gr#-R&q(f7@P!6db+Yj_*z990|gDT41Lz)=UhMW}Aojdr+ zVnf?dJ*JFJ#9elef0DXC077|59gr97N6Me;`tUj?$08Z2arAJc_$j)@7rfq)l2~v` zm^e#DSg_qd)Wdzzbs@ZXyGcV~Zq2BpocU;6q`+BE-t+&eFz8uxZ^p%N)W{%$;|*S1 zZ*A)CU1E$I$g(1IKC0-2AIydhpVTWy*V~jr#P1t0Jg2I`uGB;|3}YNppUQn1T)v1n zGmQWI!dp(LPk|GQ#@@~t*8UAlDJzYDh!Bqx=r)c=tV+j-C4NJBWner2HpQ6`92!lw zpqqUURX`qya&os}v=`I(-#paa;iKSrF_fB>&fAjn<0ZT{_A}c-N`gDANqnA@hniQA zY6_4Zi2sc)kEA887$l@r*%xn&xmnY!Epc%McUtxx91E^~IP?oglbi^Y&>Cv|ypiayV2Jf|`C>5sw(C#nBTF+Ef5A`rb zcqLTVue6azT~k*<+;Axs@;8LlDo0+3@FFt4=4-jMK3zR}HWbSH%=5cKUTg$4Vk|B@q{;sLS;aqdUOB{Dt3@F;Nch zJltv;zXL6y9%Z~|&^iGJlPNf=KI`(c?nn}{a;{^@=|O~f!;Nr)hUY<)Z`~mKD{9|w z&-X`O?#ldUr)`!}sMJiJ3^rR}og_RG9qunZ=*6zsUG|DIMACHo?wJOQI6YCB)f@`$rr7~dD3-YqZDKM25kUTLGwn;f-(;;dX z1bzz!E6=z-0OA$8zg>)m$hRhsqQ`$LQtrrvc3#VMCYE$!4cexeuk}C5Mebz0ZLzRt!6fQi56HH({E$*b1{CE3CwVBnu3Tg>3uBcG zF)(zPII17aRwqJ-1Q7WAZ@*xjE%(qKLS>4sX2WroWKr8n$I3m{4XUtN;Ty)`<&kY^ zQ_p}Zi$vx!M?18%)DlJd^r?=&Edl_evZl5r6k|twPaW5LiQw0uxavlU4LrZCRianF zoNt*njh?$q_bI%-?Fqd6%$f*r*4|P*dLSN@=9#@UMtR*aE4(b*z&iQ-)KrNZi%(=w{=mBm}kWA&?LD z$d%dWTh=ZKEwIPs@Y&${ODOB0MJOVy(z<;e9OE-Qdc)VHU^JMIr}&hU#RmjSjZc88 zKurwg2FY#TCuHTqe~U`y&Omm*BPM)>)nthF>!9-DcxfC9H>)&}MowYwFjkJS0a~=( z&hjDn0J~8;zK#}aEoilrLn>-H$!Lc7vo{B*H7}o5)YZjUyxH6keiwDep^RGcnJuPG zI-Xgxrjel^O-FusNG&$hMp`%d%VQHJ#3pRF);E(9h!%g~!_ za&o}c{1R*X5^WPd9N9HFeiG1EGtg1tv1$qpa&Dn>M9=qUwSBx6cf{VosRuw_xQoho zMhCP8K<&c5vq${$rMT`-*uP1%5;N&9cd|jf&Ag}CY6O@I4L=a zZ!V~|G##9%ARh_OUqk{~_xdNI`+&KiH#b6*ro%1`ETk8vi*E+lYASwjw13-JQ9Q%K zkp0YaU%?0jSF9i=J_{d`X#hhB2>ebgu?HB0R2tm-H9pFG$h!3jKrPEZ;sgxt(OI4& z&x2r=Qb?iQpViCK*;Yvw>aP8|10G^^<01>E>Q^Acp$t8DO?pa#2WVj36!@>nj5WHq z!{5S!9EM+9oP#m>1?d!8j)HbH#T|Z#k~8*F8(K@?_bn!5y6+=_VYH9OUe_S06a~Kn z>?;yNo!WYNoEJIYrj9JLPr5l~At`_@6SN+i7S=DUd9bq&-96_GEvEVrx2GHJ?TF?Vu!xv*4VTqjU3&^(?Cs`+vb>a+G! z5Yu_7e))X4V`bB}@OijI&!l*>r2=o1o`HA%x}X0K_OSg z?3(hVo!@Xem?(O`cKa<@UJ`fAPi?L9kx|!P*YHS~PO-s_%ZAXHqp&$=M^GJ@rK(x3 zwT$zM9yuT>p27v;u5#xK(vWW5z!S1_b4c5&^mIcfBvou_EGp_^`fiM!Wwn>GJIRXb ztXul^xJj#=X>UBEJ?OIg-bCVS@CJn&1m}@TDVJ1GiUuEd=nF6Ywx7N0@!pqy(3P3I zT~myKC>`%jsXld=NQo#tVJ}z&J_NETTpVe3w4V;+fhGaBK95A=(N9jmzuzb*%juJFZg zEr=;CM7m|$?#Hp@o<5c=S~lPsX4{qCWTUIAhxr?=r^P6k=vZ?X2FJW@zgH`NA~+TM zRlm$B4Z}#pe>b#3I8OtRQT&^YR)65qhhQ=FpM>FY zN>e#}BJ;zjZUfkk_uYGR=V|uUHV_r$%VzqsV?KcgY{Y<&3s<>wBJGyQ`@hd=syNd659m@sJ8 zSh&J?$8=Hp2-!zvf4`H0l=;Hn)mqMTt0}grg@R81>qp#6tV$1VpQ?A_H&@{yb$I$$ zKimWw_b!MZHrUPCU78=YK_}OICtSKmwMHqNJn8}MBx1G@YNnt;zm@v0`Bcjmt$NzN zX1B7f9_n$~sTz2pwGez&xoUi;T@^|5)O$Cw_SqZmOzE2JgYDg4(F1cT93d0f`J1TD zPS|HPYuG3MAlooxCB@`=Rlq0)*v0~0Y+ZIf0t#UN6MY-Xmyn8Vhn5#%Q!!njkbOx0 z_Y&9+2r1u}F7c$?f~-NIPqTy6TOFTHjB_gx#aL>@pGwEjOZUzn;>S5AnFqYh3;-@C z12%R!E4vjWe4FSwT@;8a>~{r?XQW8ZL$RJ`nP7J|{}dvkdWwU=OKA%%zj~y)R%MqV zM-L&EF6V>f&Q*&-wjYad)xELu4L@uzgB1NkxuiJ|XCp2}YEeWG@JGMYJ>u3XNr5?% z?b3!yDA(CZ7%;>%owF1_v~NJT>Z8=g2 z?oj_&3k#xv!0!h$i2b9TSv25U)?&$+C|ICoReSfdfw&?`@@L#flH;vl(|?8;@{&w- z!d!z-`syQCvz1nE^Q}RR=TosbwTBqfXfHzf)C-tn*8-?n)X4az_)x$^IO0Pk1<{>t znnmRpM6OJA_~b0wN>j5g%GQxSOOsv_e7F*9$Ih<5=V5B)*o3aLo_!9tw!xay#lC^H zQvcSnds6#DBVc#7f?x)dMFVz@=)ypr_gbH|NH?b@`G#R-hM(pG#;>QhAbcD~>rxc0 zmOs1&Qr7v&0nS~+mIw$y94LtTOBd@KXXNrQ0dWlcABL}he;w|kZhdtRtFJJ6o@WLm zd3`v!l5Q2|Q^?H(W4x=E+PkbGTW!Aa!r`z^W~a4YfQycd8FrN%?**fdiV;qalZHZH z(|{ct652EQJA^*onBfXmfh&5uXHB*zwVXSqi%eV$*zLB#hiP!_Xx>Z#FZD1feCbPo zQOhX3*s|@FE0r@>))i|e^m?DaI=yz!?PC0I)&uY6v}!-_-1Bkx>|He;N&s_4?){P% zU}OctW`d%RD*NNyOM6*BLfnh)wT^I-tD87}fvj(YdYKQ|kU1Nbb7gDZTwPK^#6VWn zdOQ7VgdqFtx_fdp;GxE4tluSZ={F)#t>G^1>{q zhHvu4%QI^n+W3sB$Gh_~?Xj{g4n$us(E2@bE+niwarby_S&IxRLS36nfb=iQ7KQ!M z#eAnQ**97SwrI`()^=o#to;cLnD9{vFXML+f1M-(rN5FG#6=DQpKM{36b3&^tt;65 zHm=K`-Niz~x!Gxr!u$G?Wcwz?^rC0x|2sIB`3eiU+Ot4~zL=i!S$WRL)s?DIwaWbzf+s$7`NA&U&1BBYQG5)y@2QD3GBhI5 zJ6p8h%Hta%Gm@N5v}mk$NIFf7S64tOVD<(FZ#>4I^Av+Eyae4s`zVP zHB+!t>I<=8rZj*4s*{%+f9uUmvWSaDv2Zoff$+k_GdP6&il7Jw{rwKe%)x~uQCpOu^t7)I?9~+7X zLs%gcltckUtX!qrn;t?Ey}Ig~d&K9j|6TOn`$jZJO0Mw8_}%AVC~Tn|BtGmASa>yy zk;zsXa^xeDNq2_yPL+MSzzGcxTO)dc+hB#&2|R(_nhly%HLq!nb1sJZ_khfw+3JXd zO%wy7Ei1+c9P=pA-2*_8qGCZfD+W7ri|H0bR&~@d5KegvMGqpkg%+{Mu4)&e&=&f{ zfsK*WuG_Y_6Q~OU@e~$g{~SJE#@5vV;|b!MFY$Ie@-_3x5KH^Eik|1jaO~LyJ40LX z2?{`EqV7LjFeU1-D&3?-WML}<8}}m(4fYDZa|my&=F(@hC=|~7pji(Mn)k~d(OmTv zN*SvF_xqx9lpDpXj#;{9OcUR34qZcHG)-2=iQG_V0P08*gjf0@lU=FiU}es5fO8F~ z5;0GaYro~mPfJY4GuJf9-=H?b+ku&0;3#xuUnh@S5DV1MKUC>l=m=j8Drj4mMU^UQ zN7#_h5P57Omq(h<_!=^S`v_Gco&za{u3Jw@5Hook*-n`4kJND@u`Q$5+jp4WYwT$k z1IgUIp-z=5r8S20>^KkeI>0Vc^M@qolNXB}EP?D|9K|rR<)HNRvei~RHZ?+&M50cg z9})!~)nw(sUvbudN3N=xB>P{P-{(C7M7IX!;czUC;#4|9ofXP%P)|!wFTv)z%Z%CI z%R39f+F(Em^hx^C<(KU{Vmk=5!;-qo+DBUXVIOh38z93xSF2R6_F-X^-SVCsW@-Ir z4woDJv%IafJ-QMQL`WTts75JiFVt0`RMc`d=AD$-c`C%zcVk}O$UHT9D1$p0MQmCu z)OFv@WH3CFOZkWp2@JnDRaN~C;QYt+m;bPo305|iAT)H+meDuDpHX;<6Y+Kr6rdC> z5;aCtY+O?fopJyv<0utvgaN9H&RpGOF`xC56kmI&=xx?-)Xj~hJ*)32Ex=w#b{gsI zxJ&FXGobb54)t3x`DLxR1PR)=>g*{L%)&V;Bf9gwSIY+65|jxdb$!{PYxPjBvrzcw zpdSOj3T3qDuO(iKG3!lG-v=M*K6({ROZ9P)wAGCD&<2O~w5-vz7ZcA)$h)?J#r^ zSR+KucrSAXs_!cKXKXP_?f1(sC4jWX0Yk7Ur;=&-qxeU9jEx}Yx*`=h&rAXAXekQe zn~`aCc_9#LNU=$;qvvmj_&KfAZH~IE=-48liE}nV&)>d3FkOx^Zu%hp?6S#+ebfDP zWe3cj16BpkEAve7VGsQ(3ss9CA4ZJGA?>$V3rZ@eNB3A*xVzWeOjbf~?;fpwC4bed z*m3b}Gh*Z1)K&-3^f`&b9wSg?Ki~A-dj*#8scw64wHeAY5eV|^#%x9MJ#JtX>qeZ< zt?&FVS@%LdPhdCLjKhdaT!OuD>-nM)5oDc$g$&-F;n9T!tn`5|9|+`88~gpxHmtaW zpuQ)=-cG;0=_y;2^n-sCo4kg9JBlikY0gf{sY+7Otv8>Da{S~iR5gGP!XzK>e@g)F z`y9HIUkL=E589FVc$;zVj#>tz*QE1*uKh^|7ODwWmM}`MlBGb(Z)*O;6*iq8B88|A zb%>=$R4-3@d&Xn4EGXJ^1$`S9umiZq#<}`6+8v%^AjsQ=v6=WSCRoJ>Ar#O37> z`SE<4?u&MCw9HoD2n=9&Rr|H!j~bU-vA1E!pO)_q0^%s@g&3iy;IW zn(4puRIRg?I%3$>k?KZH)oO#4Es(L?%P??zfD>PCoZ(&>DpmyC*KY_hAr(;H@c1P|9wWNut6e`JNy_%ZV;0cKbrg?QI*8SvwL76I?BSL$8;bk5=?f&A1+YH)(XrlG>l#h4 zgkJH1a{_PpEBTH#kys#8aED^O$UrpO@?hd6A5G!eLs3z;cmHM$R&$P9;x^~S0Fr>G zM1qkJgY%d5Nct(l8%V=`htb4*rCI<}U1jq+!J+h)k9TD5FVmN+qD5}8MI{5J_#h4P z-Kl9$k1n|pWt7n(=$VwOq$ZQZXZW(2HYUiyCg$K$>h5oi(ss%;`bIb3CQB9l5J>aH zkO2U5(*NeEki}fP=H4?ZTe>+-LXExpBh-ker|g`;eIKmdkyNb9L{?`j7--1D@5w%y ze4mYli>Hg}(WH>RKb@EDAFL-7W+TfDaZs&f^}EL7kA21p*(N*Jz!%g;HPoFF!rZe! zm~2wN@3;z;$`(nsTxnnK2t*NFxC{cAduxtqhhMcHd|ttq@u#QEYT%tFu(HE3<<1yr zaf>C5;SDvb<|3$wJn@ccmP3Cve&~kAPVZgBK$kx<3JP0iSsz(%olAuCOn}LYsFV^` zi7Q{+6@I+WZEK&f!~sb13HRfZWl5Xkir7iyhxn19yEKgEf!u0WtD-=b%T39-Ql7a` zU}&o^+FBSH29}lSp$y(O)IA=zkif~AVt$nVz+x!R<}Nbtcu6s56TMT!#c4vwPk=L0 z+KViur(VH{6eDWm^l3d5aDTwibl`J-EKhq7MY@ODA!>+3y$k?5`MS*`trsRFZ}4N2 z$an(H8`GW#|8aCqq=A)9(HGU0#7mPfoZ}(0IGIpLZ_{%6*pU$8c}q ze8u!k#WJ|i$95`Qjo_FCAD1uYkJ1p*)Ag1+=28qwlYZ?2u=k_D7;1K;XPm|taqYV? zph{*MSE$bt7lFRw(nTLZ9&MaDomGhm#X^fG=#zb*MTu^;5Kw>k7Kt8S)03c`$2+ke zy+rDZ2y>uQEha{*uWs|Hham8AD#7s`tQ;nCnelMm^iv0_n$HMXu{=K-g;fl1yn^}u z>9P3!ZzR7hk00lf-4`M_Rtd+fvuO&EArsEu#Hp2&}3Z=~g zOo6^kH|V@%1=0_q*d~2BKMNOzG1v6K6hl{R@u(&Ir@5vjLA6vj9qoXcYmeb*9A;$w z;HX+Mrv~4d49J#7YYCQ#BQD+oN4=@2R8y@&T(dsEc0Y3~)(iIiclKRr_(5_d&tBQp z7dJ72Yn_bgzudWBQt~ZIv7ne)Lg!9x_@%zBnJn(Ec7WtxBEO+b&=x)9mGY`T=JAm( zG9gq=0I~)&#Qv)Z>Txl}D#9nHmJjAMX5$YxTbr}`RTdvy2sv4>3KeoY#&i+tk48Q3 zTccm#T+3EdHtcope?=~~f&nZl3@dF}7oeHmEmDm2u9&Xn?+(dqkK(0HZ6jeKew)7o zQa1cIe2d>&Byabq*3x@CanJdFk9WZFuOq{aOArfA!2?k7-E4Lxr+UVcfQn1tPyiOU zHvtT3+NKPo~)}F)}aZ2bCF|I!<+imgW(wBrS)mb zVB{u+Jv5#Gzw?sX(0rH?e{c#@$+dp=Xf6M~!eh7icv?;VmbZ+HwL?Tsf5SLqfx+_) zIopfGhC}v%HwDA|fjv!-p7a4WDjC_RC3&$4%w>ZVCZ^>IM)%oEg<;2wDWhvNaDsAi zjqvPC)tK~aNDcmCpb^_08J)%x6VcnfhU`kTJi|oQ7Xf<7M?;->^RkVtHzV6;)Ax>x zQtt;is4^*wv)7a{NoCO5Ipxi}zXlQuPXfU;=hC>XCq>E1=gSsY%xu8-QE{v{FC<)+ z5?=qZGnUqqnnspnlY$bkxHLGkO32OJ;F(&l}5@3ad)|b z8VkKPTl4mxAO^+g%=qu@oxroe;(UCE^v`GH{o7Njz{WpEi_%Ni-rNV3jV6^ZMdw*< zl`@+~*DDNIQX?Hb*r|q5(3}~2{JerH>L>RYEt!*PdEQXO<7Q&`p$lOPx~)dVL>dJS zsPfgDWt?>4W&U|H2LQ_q!h>j_6DvL>LS%FNRtK2|8V$f1y#6a_9`l7H=&>E#y`Jgykm@H`%c!J)^N|BqC!ijk-_I`W*^ihT79)`!6 zc6ld>i<^KdeIxM4zU?-vW!W*NEb}&o*DM zQc`^gL7G6FOCn!a1e2T1B6rgKl6rBNUtMsVa)a-+iq2YpN(Y+n{ zv5wjJZG2R?$7WQOM4}01Y`bz2_xCu)-mIosX9$j5d##7Xa153-*%KO)>+%#Q((zl23Y^X1t_6|yk#u}Oj{TzN<(#4;t>wT&6R?Q)FliLv3^DsKMM91~ z%De$_Gi9_8?el{=6lls5ERGc`5m|QJn&6!?Wik04WKDqCJ&l3%wtn`iMA{mC&_u9j9;79=R=RL7{^;Yhug!6+EJ0V@Sgqy+R=a*vSF)S`As2Uh+bC7R~M1l9Cn2 z*_4i(yq+MH_+2CaXHFn_WSjdWhAR%rcJcopG9e4AhknSfA+wyXef3<;s-y{@|3zwX zKbaxDL41OM3X@07mUahrv`q_;(~#GHz{9Sie|49}KhVI}r^SwrzPMVjgjqIA(cAb{BP;65P>eQs7R6 z>&TTvA+PZ7-ro%dK3ik8o~;g@VKI<8qZPi(Y=!atBN zA8{c*Ws`O9;l+%7h;OLU`};m#^ghp9wV|G!cTZu*j<8_di}ofgphM$}%qAz60DP&| z6h%BLZJSAC2?uv&K2FuPeQDvDJ=QNB(*zLHtDjpra&8rL}P5oos=-kbvR61&1ISg1RjB3Ia0M;fT` zeT=^87Vjy8K)(EV6-Mx&aBbGaf4Ux{lM?*oJmu1c!?-e&Gy->cTiut`7BEe0RUx^5 zTyUVOZfJHZ7q-CW7m2~w&v0z)|G*Tr>X(17i<^jby$z*BSKd=~tjwI9 z@!u(5g#*9MT6pYu?^RNjg>(gAT(}#I_nNA=8XURi9_*%CsOb8NPBbe_^uFa#&5Us= zMbg!8tLy*+jo_&xxd|=-fGgCyn5Eh&uKHq+BKSv@P##V`%~il0)M?6&Ng^Gr;&=AJ zft{AR;J-5Pwpq(5m)>o)odR<&9qi4o=)o2KW&T%}kCcjp7q9^#qb?gUIRRODHhDQU z%&zBi`GI&@SlnZ?1LKHBV#ZG@>js)G?mrzt>h#ERsj94N+PTNgWDh~JG6w>zlDF6i zw9nV0w_aRUiT!l2Kz6OBz)9mvGOO3zQbnaVllD(5KS}uZA4~$BUqb8j>5y&ete-&} zo-EUQkAdx$&CyA?yTtVw63@aiT>UgydM!=kBy#YKS0$h8W8z-7p`gK(-;~Sx>HwC# zwRiCg-!WU=-~T%e{aPz7w@9DHMKw0i+%pAmyEf_3~l;Tv83Xz6j|BlyDM@0-r=)onN&-HDmJE@k>=+#0V2X(Dl;OE%89Jl1;(u6)?7JuHB>mW_%k@=mNH(A6JNzT4V&A%<5j3vJ(E%UN0zCTdeJnY!l zc9x^fea%(%GgkxOd{Wb(8NNFT@nz^7yYqW3QfJO^JV(}GCZ?VD6E3Lz@;qT-vgcKS zP!8hM81Rx@wc3kgBE&Ow?3gG9_5I<^<|i#C@bbd-g+Mi$IcgR`454DOD4Fe@uB$s< zrJXtR$1Wh1egls`kf*oIKBtw4`b8+w{k&Gr$ZOZ~RdrTDrqRKx`~L5Yi@^@!dHnxo zph@HW><1CX7-EMOiB&?RHokuu0`unwASw`oBrEp*ZnN# z*ovR_DAQK^v*>#EWnUOW2;+wONSz}>pnNywFur=-?Gxj73dv(>4_wLhn&y<2Pze7& ze*4;Gqk*%)atRCiMCS>}A^X8Qw3Id!@%-#1+igJMllY#|KjXRAnzs%~l(YE~wVh}Q z4tZ@*0GAkQz8L<7!cQU~E~duKiIU{T8LT7)_{?InPLfwag4=1p!uueVNfA8=#1M99 zLr@|HFKrrUss-?!dg7}V(*QX4kOm?;QM)K)Q2u<4da|iAVJQp)1<*1s8;eV_V}Sq7 zq_5Mv(6&EvB8)4nah+?BIwM%o4|e!{)~FehTNcxxS=Yj*AugF!gK~duU5wQx_C6u0 zls)1Dj%?;Hi5OZ09PyJ0)5L^0E=KU-D2FtoQN`qhdPa&Kd!rVnZro`VS8f`Ps2k;H zf!7PewK1Gji{|tJqTgnWdbY&T&8evdZF?(lRdI<|tv5Xc4QLIz!deLx!u2 zB)(dj`r50vpCv{<3+7m=wo-Z9iDEk~iS@9uv}i%9zrXCC`2}W#Q2Z+YrTPWawJ=|i zNr_5<7P5d@rpXBOLdi2}S@VfFe!c=#rDy8gMOOt^)sTpT zDcdnq|K05qzw}h-lEov79OET6urk&Sef(h<_m55(UNVtBIm-LH@4rP|(>MFb9wPIWZ_})c7uK~Z zVhk5}K+_WYdp!HoL&=UjAw1x=MmQQYnJm5fya-Td`y*)6em?L~tIoLQ&C`q`v}_g0 zTm3s!IT)w0KN^wx>@cR}(QdIXJ9NXG7WIh<*bN)EON{3Z=wPI9qWd8o$7KZJtiEo8 z$^WjBjj(S?fx7~e^#NphYq#(z^6J0&=^+!2;C1WVpVD;92rLOMou-i=xW0}0d?JmZ z&C`1Iy%MFd!8U!iEuX9AB?AHhk-mw>n>UoWZ!^d~NQiKKB|ag!q9t&YWY7B7c|shu zk=e(;OFxs^R_t5&Wf6g8{7sI9L(+lj1$VGoF!92m$F2|b2DZ5Bs0^dR`mh2-;A zhMR`R6ZMjd!*@=N)vt4-37zqX%ZL9_*fWG)1f4ML2>LRw*4aaQPv8Rc;$v4ayZ6_H z0SuDqHjU0>5DystWFXwdRe>e;+-?}vf)KDd z<2MTG)=l9$OlpDLK3Q`5EQ%f;_dq4EbD%AGh!YtfUU}ODPw6pc%A_z59IQdCw4#_3 zYa0p(%s7Ijau)2m9&A>0`Dx3GdypK`!9U%_^T*fqSUR}66%cFrDG-Ry)f^o_FfD}{ z>v3loKZv43*{f$rbFV1VSqAg!(ltmuQz^Ii0cUaL#w>M-6uTjVtY@2~q1tIZ-cE~r z`Z;NrYk?1L^H%Y8sq-zvBHr7@eKDi}bH{2pOMPn#W~`^Q+R>5`scHo`Y*Jn)8pG;! z#iyo6g0j{fd_7QOzzW(lq~B30#NkYIJplV`xiQO*DkzqGc7T(Zm@<^g0}*9IrK^mT z3i=k~vR3Owq?iES#3y@pcR zFtos`HWuX20uLa>5`^L`Mip2!~9Ad!8`CN~XpwQL_e;KkN|pYxKP%RKIX&7eL?V zRtdx89~eGpRa-YNCbqkwKZdtTh1Df)Uov=QfX#n4X@@S+9^dB0?=8w3}b-CV9HPPQJnKb73jH&2RgR8k@jC&yfLqNR0 z4}WGCn?7sYYjv75mX0s2?t>QG_Sf+Dgg#jlDmadw<4~Z{YL1uLMjiBUm{r9~I<|Pd z6+%QzBZEF_V03?uzpdcW)PNaUE89Zf9;%`RM!U!}2q->cMCybMy=eQloEdibVp*%t zW6dS(qxS*_PSs8zVtTULP7`UVg$SJma-FLn{0=6x`D>=;Ih8Go|NLbV1c^#WP^H@| zlasKp0U36r9{u1x`C?fIqS#`W57eNsr^-t>d46xwqX=^y2U~tvP>>~P=mKcC`4VkA zgz)J|?~fBWke10(d^y?AH0?Npx(#A3f!&<4>(&3Ht5n$ElHS zwp7emO1AN24A;4#pUC(4_F-!advU0CBw|_$WshQA~IDL{t zAJi|UYmHBI(-{qkkrygPxM|&sDVwX7ylP^`bnqtFeXd8_{+GDPv_fk^5XA#`%4NiA zHV#T}$0k-Zl;_jF#bNKsA?hbpm$QlH4`ald2a~7(XJ1cS08G39OwKZ!WrIV%9u_Or zFmtFA?xc{1AM>~lb9AxZ+|muFX$TNG3!{0b6!ZUv_3MM_=y}D{#nT{W8{#VmQ8&qh zEAjHpTub`Le>yqp^sU^-&2UivWW5C#x4TY)gIj%0y{V?GH#5Kt=);Idnk-v&GVYuY zUj%gSYwFfh)TfVGa3j#Twq_xJuZDo6+eR{AgQY0zB29~isda&w(d<;9G3$Y!6GNE@Y=8d3j#a3oDSeAwlVw)y;1P4{ zdg}B&X^O8YVx^ZmOd$?x;mT1SVg2yV5tE42ke#>RDGKB3DWU&++-_s7=H$%!VrXd( zoR4N-MD(JyH~NN6f<+jbhL38R>q=5FVJpC%?Ow4KdcISSDfe8}p%$O)+!jQWZ)FxG zu{?VpW#m9ul~{I-T(YMYitl12fr>xD-%JAZRW?|>;PTsYYq=IR%pli>CvnwBGTo!_ z&={^ugBM4WwnSC$k*qDjhidfx*qK>iLRw&%djt~o8<@q|#tt`A27Qve(cUTgr3bnw zklxr)H`RDwYx{Pa1tVS@ZBPgXgMT5^#czWe{x60dHHa+%$&I9dCx*Zu@QmGB)e+09 z0+*H@qsY8C-1JU_>pJ%1qq*oJU*pxrRq>kz(3g)W_Zo6CED$+WOB}3;;@xJ*#bLW} z1g9<*zHVf@iuOq(m=X#}7}J5x|2oXM1c(=FfxBBz_lHtrHsJih z|HKTnJ)XDya6kg}Vk)Ii`)G3=Xq=#MIjC~gCrY00ONFd#JZ zSV}9jW!&qhd$@Q1z9y8`Mr|&LdfgMcp(BeX<;GNy3twB2kd-l0ai0VBEihIk!D0!P z!z%Vft7wS1u+TJy!f8e_fKo>Iz_=S3v+^b?INB#~T6O7^%mdG)COx_O^Zf;x8&0AZ zQxSDR&XPO=xwd_(@sS$(JdyKXlf1P>i5bGyFY#7Wf<5-S&j~(jC?^Y_P1rqq$ z$%ntZ>Kc$Q=h|+xwHgA>JhY{$@~Jbj=Efx#;|$P2CtJw9X_{t0&PgBhf+iIJHTF)$ zG+1EXk}zc#Kkbk!cQCMgQBViQG?4M6fR2^6eg&VIn85K3wbt8Iu}dAJc|YK6YevBs zrVc;F;t9}IsnTClJ^EJJmz)a868~DPZ0vlFKsEx3Qga2v4GlzBHxLMs6}RnnXnbH4 zK+#00!ut_!()GAxpy=Y?gzjPKvi7>!IJv zT3#iErYxN-mGLGfHGHiHmwKMQ%Wj&51QtpUf6>(xOa{!d&#Z;_Vpy+NxXXR1$C9fu zjcc0N8PpquWZ@o-KM0gNlTST{8=l?n7^=FJXF1X!Qoz8<5OS-aO~M zSMR0ueDN$@JT>>lxHK?Vv;KCPm}724`3a}lfUebg?yMPp^X2Bs1M5BwtO-t{6<3|Y z!Are5^MW46Ri+tywfD<|0s-dmtB{*dSTd69<~SBygbAE*q3TPx+OeK{F=`I(0Y1?5 z>BW6Nsp*gTBqkuSSvnWgz40C$4KlEn>txTi+X^9|%uJ`GC{gxQUN#^zsjsJlN9?X% z5yGX-hkI9CzyYVHobPYOJJ1=)J%MO}ZmwW&fmpan#BV&4j1ok-jZ7)Q@zdCx7sGMm#Pke7I#MX3Y(a;G#-9f?31cw4>*W{aN61O}Nv zj+I|27JXt#1xJr34vo2&Qs@ASchk@lX8`1b5CcaZCy!0vnluY6B1fXgy^R;Lf4XJa zq-j?Lp2AJIvWqZGR2k14#eiMT1MO@-zzRKxf>u&@6OA_c@B;p9QQ$eJ0hNi3Plv9K zN`M_&!@~QoNAS|Q(WyNHtJmw71VQ=uP^JSX|9b>&H+0wP*Vf+k>G>7RNBjE6lE2`_D$>4p#7D)kn zK8Eo}pK*nCY+hGbVY$r!?JMuJ=I}`jus7Riu@L=)z?H>X5~mC@r#mjn3UmuvZP{9S}~8!}ilr^Z1i+R8p-dN?@tB?N7-We!L) zm~T^;hggtG?F9vHvi3?U3yMp3@ z#e*-tce(%@j>#k%Mg4#FV$#XpcEXHvSbdiJFRsqYN%NUo||e)8Dk-2{hXVR-GHpH~aPGf{t%sDf5n7C~YHk)q6K7&Im7N^d`+MJ-hoeL- zhMrmXN%nAQRhg9>_49Y+A2fJ*GsH1SKq+v?$A3 zy^~y9d2r!$cXy8oPvxtp>!M|+>knh7=YBPo5Dn`KsvLio)UEF5+^x3BJ<0=Kjcds# zMr-;OWU`T%I6!6L)bW<@>OM&88Y`D6n%9lB@boV}K*!AE74Dd&`uEZb`0wZ6Ux76& z397LoT)EB4`_3mVq1FB>7c~BxJm=Z#jERoNwf^gVcaR$MreEDhO2vDDgGh@o>%~*K zZU$yF6O@_eaeIHv4y@OWTnFeAbkBv_78jtk- zg(%!ZUi0j?RFhaXzaVWs7Kzez49rjYiT+`w|CC-$Nj$J5!{^}2t}2KP0;75g=6Y&= z@as?tAL^mE5xZi?rGT+90XUHVlp zM$o*1=%-z&$HVvCpQiP;(1c8kWOd_6YHB^F6#9 z%H?i(y4*DXr)IObS>6AOSVhSf6Fb(1V7;3y`u3Gu8V&w%rRp)KWHNH$SYrve!pTSy z;)0Yb{w~ad#INVWqZEuG(1LlTcLpuX?ealV=Ej5tagWOJZR*H$Z`ErFn6dBqjIl_v zFN8vH6uo13Q6zc+gdDGm`<`|AQeT2Msd_}{eu92G1rK)E&Qd_|cpHmW&_HFG;E>0$ zfi!6+P@EGCJVbuJsUq6isjSQ_#_VWiwHZ0QKnV^BNwxM32Eo6erv%gVh1qUmwT&$$qRyXGzLSYcTG?eF5{w9(0yM1BTS^|4$ zd!Xl$00w!WNk!2c4uMb|{>B+LU%vA#_Ps%qaF0>$R1XwJ786<&lb7pk47nEM4lf!6 zh7mSYnY;6t&0{Yui8qFvOhPZyq?jI*7$k7TGNr!Xrz@d)D-mOEC_`_HEH*j3RWr%| z00%@z!~I}2992Be!C}E}wLI0pHBn(UxVbwNk!9a`cl9S?{=Ye86aAJtRfY}LtTdTX zgD>`^)qdhol9@KT{ngvb0QHa+#-|zX*I$DUQswM@G9SOX0IFC{i6Qk=mvKM$c&w>x z`S6UR325jWYV)pshWdJA9p3PR5}jk~=H0KwM6%$K%XW^M3al6MRoO>bhRE4qamKU; zud*MNNzfJjbfw5Nrq(7%nJTrU>a7|0Zv&0Z{YS>I;@4?z3|HuQuFK~ot>a3Z$Plk{ zmn|%<^9e}s;lKtzriJMLDN<7)Cs)Rt(}7@XKn^w)!xDrsow=f1QcYO##YO1jM0>ZE z($^eeWBDUy(pXGs`HvC8n=-!xi@rlvu>G)TiAAr2WKFTt=56!^lb&*;SU2o)?28d9 zLhw_^U&tH2JBal+*Vbv|+VDl&&ps~P(oE5TN&Ag7+X89EQImv@)&c^%{j@LN)G}wn zHt3a{Y-WLQ#^f6#i?Zj4d{6|CJ5vyZuID@OYl^td5p>I`JO`8VSw7BTv zCTfl>VfPs3acT}>ep1yvk%kl3fTNIYOXIP^rp7?)utMrZ(6hhetvp`!TP_WAep&UY zr7{i>^~Izl8840Bz$lsITk!mqHjdb-u@3hZ<-o}jyM;vLm11<(78IrW7<2cL9@v9_ zb>X|+GS}2M?ga}dba3<@N?GQX;+D!am*KDFVdK%1H(|uG z4+H7F#XK{X3=&QsWp(%7UT*4;C(I8BK7>bu1FANCwE3C3ynE3b4l30*bxZCfR&;1K zGF-p9y^)eJR)fnCN&t7RmO1ll_t4?6zZ{R@9PT{ z1?`~^xTBQT;5CZFRa%Xp>0p8ZFJgpGw-QWIPDzF^-&fqIoEd^-Re2O+kLfsRfj(vb za?}ac1;>3WmI)2YfRn@N-&9M^U%A}JmXf9KrqQok0qf#HaIuU1@A>bNn~6Izxgj%$ z)*a(9!7#(9St>)BiaTE}AFU}W5wQ<)dwD$(i(FDrhofm2nxb=Lkdgov=(FNjr8Rkx zI2-#p(Nj_^6> zw&14Z^&&97pvh{N*95-Bs9ylARxc8C`YlaXfhwZZEr^$_J(<8e4J6WRGEQ~W>r?)t z*-&}>e@V$`a0|R1*2N>r*27dHC(ib}j_pnRbS=W-o>+ZwnZEe}Ei3+EL<{L|10+NS zjb%7Gy&`FwmlElD#$eFn@8;U;=t74*9#^4F%OUQM;Yc){dev9{N}zh;)c#_JWSRzKPttEa$jc@ zfQ4uBiHciOnM_b5EY$QP3n?}^+T{Xxc8@}5q1=-L_2Q1VOy?*L2NV}qh1SLjjo-E!u+Tkzv3D5e?L?C-Coe3 zC4D9o z8sMhyYgE_Te*=@E?2G6RYze9F(B1pcgb?4?7Uos%sPFnMT;Lq=(C3m}zCaSlm=KF; zw3(_Bu-`V^T~%IoC^=_1M{HxnTcLix(pCZDPQHst0pxZ76((S6_%E2-5iOA-ub~}_ zew@=%y%S#0-S#n$YE@3_#fp!rg}G}KyiDqwtDkH14df@QNtvW+I07(liJ&QCk(Tl| zj9bek`%9xT2nNo;N>zU+007a`tCQ-!i!r-Ht2NZ1>@ADPsNr7*kd87iT9{V)V~cWr z7;ht@C|v<>oJ&l`R80YCKI~lX*I%ST4wYyh=60u zQk9GgRhIrL$SZnj%Fq$1fQYjX1(wsB@kODah&bpks&UoEg`?qVG|*H}*L<%RDj`H$ z-hoVOIJ*$c8)bVhU$FWis$!w{b||dKwIQBP5Cj3D_ z0sQ97^ce7NUrqt3&!)_QVIcBXC-?D16j7l)HbYLOde{4vgV7R%zp=9?uI!#cGoGL~ zsM&~OxP4=;V6X;>hKoJ-%G@SCpAc`T{o*yvaOV?^TXR1AJ$|YcY44YNVIza$3xq3B zUpqv>?z6(}*Q1R~X@5!SaDS!i*VV1o#&>yq^X(Q^aVK3WPxHHdiLSu8(A%KP63uz5 z_V^;SLW65GnPp)dLR@HyUa@eRnEJjlgO8THI-r>o-(qOU_NZz7fDwdfvbiau&~M4o zHfvpq-^DfbrpM-SaIE+u5j|tEdR~fU3QFc_OeF;@NT_|FNg_-~pEWfU8WL)AuMj8Z zwx@F@`(~o*l`+~gW3L8M>lJkzgChDxqt2f~+Wg6b_1T(fPF@pj%*#vvD>@$b(s)0- zulu=Z@f#?bti&x7hOvBE5*r8gB4JbPVXRXAX&?NRX+JjVQsCAhJ5dvb${x?(l zng|BM`(Ono4iAMW{iwMd5`}okrw3h-g}g`hAfF_jbfQoE*ZHs%Qp!PyY#Y!R1=@yE ztrrEY@x%!&BE{~J5Q{UmXFwW2`4^{mijmtvt}WUa^eajP026&h7b7RYcf&pf zPw{^R=zWfg9ij5T2kRbHz4IP4mQlQqS|0Zu;rm@K5inSnMX*n3|Crox%PXLDb>q+q z$f29L(P2hls)t|JD|X0IMj45n##?(ea`{o}_e#U0SMxamhp}a&D|N!cKz!~=?Wu#j zQB%y$*)SW4F3T$?uWJ{%#PNDZ9E(95bxekIkW#Pkp3Q|L}D@Pe1;KA!udw zitX3$3>Qm4$-G1cwGUfZCEGScE3o%g2v8zYRTpR`&zJ4gGmGI^IqAJ|>!Bp$J_gNT z^AQXMVtB{+;EuX&DSVB^E;n`!pV&9sjfRr#T}Jix{0Jnl2bmA7B&q%!iJlU)FYi~v zA}j$h5Zw(0JJ9i2H^+11XLoYNsr&UoCf2C^_ZDbVtfC zT@s-}L~s_+INCd4q!cJ`D9cS%4e=6V50|e(n6Lr1_aJ^4%uP_->fK233!7)qI2Se0 zqQPDaC&d8}9~_6YAz>vg)=|%HM8g3xh)uIv5pp}~gFF-}6YY$TGt~Zwo%m3VL@{xV z?wXz={ps;K(C2pifRmz~9pYco%?lP_;g@BYvf z6|onNWyg10d8Ss%>Scu9UC&n?-Zx|RT!zXZz8LO7_pB2)Z7nuCH+|$bqUB5hThG>`n|5WdWWB8t1hpxK9pummdppbVr zqHell&@L@hbb3`LBaX>NwO3ol@l|dRGB2@j@!9DIeSkOchrF=~(%~7ZQ}*R1!gYx3oQcCw=Gp`K$r4qs(1cGwP5j^G{m3 zyf?NnGMU)K3D=uu{hAVbVs2;EpjI#O^@^;swUR;ba*wV2>1ml6YxEC^s&+sUkQKcN?0+mmtW z>i|nWN}J`V1=>D^OR#_tcc2lXYAw(IucV`*Jz14&)5CIZ!s&%im+&X)vHL7QEx3c0 z3M}^ID`d>#j+5@5>3n~62R@EwSEub@!@*A>SeHAy@?{)Mg^dve_^+(@e4$u8Y6q|5 zbv)6aZap6Kc=tKOr*wg^kJ&cSwQDy4n?#qtKNS#%B_fS$?ek;II@A0Aw@6hXD$;I| z{ueq%Z0Yl!{fu?@`l$dlB&V!UwLpgqc_uZkMsVK~aRZJ7 zD2s14$JmLzwPb^Z;wv2iK-p`SzaJNH9!+a(VwNjl2+*RBzIk(1DH`W|M+rxSNBNLi zs9|2+AkOK1zxPaC{W+iLLS0n=mb(Tl4wI$UDmUWiif$4Cz$CQWNrK6sES?PxkaU2_>fb`*~<`!-v@1Z-hoVz4tS+T=Z z2ZL2rEt@UaCdA>JsMC5_R*u_OuH z7^#N5p(7|6)H6s9;QHoYW)l3=j0%G+4rB4>g_mX#a`&C`13KgNq@)X9BI63a@a{+{ zNNVBrzB6YQLeLm^!%9V$6Vx8nJc7_3B1OMxHp%}^VXdl4=dYBng~@ABxd5HFyHWDs z_&iYPM3Ivmur(1vg&Za7=mGo_F%ixHmYXE>6sPJ%l)sYLk&83t=+mB0)2DxhE_iE! zZ$haUP#U4S+G|Iu8w`cLGz+S#T-zQuXdm3n9wKrY*OwI3npo(MWlvU4a`h;^c~;pI zi3G~-+MO|}b0FTX#1q8F=Bklu`pAi-38tYgDJ*dl%P9*p7K}@@#55gZNn0T)*wD0s z7xxzg>ECZ20{i+l`G5TB8|h-I;#62yUHO;Q*Q2G1f9_C5mk3(kC6}}cdrI4R%=qM} z`wC1pzDfCr=22ckOP(&9nmwo!%td+*vw^+1&a+#;b~_i67se6oC(o)4pyjusyT->!&_)Hal2>zbM#I$qvgUD%odM5VZ~D|)kq_ebaN}u zouFOn(t1%vLvu?8F&w`~Fj7Roc{#ct$HI*{P{m@|F-`8t|CA&9_^|``;2IpJ>i6Qi20D6h>L7sg{=aIyT4`j0E^^fp6Q-5c8`tsv+s zkya`j)z&qmxaVK!S?C}GgG67|ObJnrb zqQBupKW|n-Ys0|RNdXq}$yC_7-V7{T$EJwUNtN(O-;wJ{x8(zs_7{Nn`jiOs`9eC` zUA_MVH5w0Kbzer<^u1a;-IVQWcH#@jK2!Xk!FSa!4Yn1x0^PVL3a^1z!uFI1u6 zT)s(2&>7GxTQvoeg|1?BFz_r;yHf+216?Z+O?1T6akH6$U|w3VIX$xLMp=K;U&sOK zoj~wN8gxp~13!tpqH2s^xv`M7oJ9H^b1(j<0C$c;y#@o3(VjMpff6q(ISkGPZ4 z)56`}AyVA@b2tw|0T{`5_$JRr6AXsG)m!_%Xe$elf=gMxDJZr66KjyDGFB!+*6b}h$Bxul{I;IZoGLX1yF#8r(boja*FN8@SETEdqQR0& z>Ch58mTZ{f242d1iWh3XQdRCeiMS{(Qz=b=Px>%HA;`7z)CLpD)YB+Mt_kK6w~N!U zS@K~13ff-qBf93D5q3GY$G0H%B1!=6!OTzF8&11#1tr9vn)d6`*~h;*zT%-zv4(mh zsfDs~I%(4lBwcNfYZNVKcY^9bJjrgMP-tw>JiFOu?M%S0=p9*JoE}}Wx6)v1TGk$= z(D_>DR7qx3!ZMH_t9WIEl20S)yZ7h{640DMxo&LQlAQhdLKBrBx3h_*_}2Y?!F2S- zjcS$R!k7-FCP0vO#>%l*!fe06~R zOpLt{7e_k2rBDv!29RZ4!EeFB!UNfY5-}emM!Lpf0XkGuem5^ z#tl5B#=-?p^jqAzpnpW800c5h4|NAbxqjqnGY3LnPv$jLX7r3Yp!@!r8s;&+0x@aa z9m!UWv0rO11`^S6I5zk0(@ZgQbKP30e*r+?VPmDvBeD-Y;mHhhK*57{Y+D`4*u1NAS#SP?*)J_n zcUIvV97Vye@7+_Q-RdD_dTN&*-;Kn?yb;gSy`0Y9z&w@I!Q4wD-OY~8U!R&uo6<_) zKxhItbpNi;tJpy41)metUEO*+nkX=Q-FzyIzAFs!i%7^)Iaf zb!kxv^U$#4y+&q{1@a!XY+kw0xb%k82#om&an>5g ze394U)f>m%z$5Non|3bZtzUY64bV5itAUTpT%w2HoQ!gbCMZe*&pH~6mHz)y7&Io4 z*RIm;02qJCwp*6lAT4Q+!pHqQs^mf5M$A%stDoQLHVZpQVzAhE@MXhx8Tgv*TtoFY z+s?ylF=ok@7pgNIQ`wZ+%2;>5ubx;rPnSJL1fO+qZPcRIv^F$ zJPf#>5V12#!Z>gxTu80QK;f$Ur%i3Kta&4RY14Sr0YWsMiIeoW7F73``i4EkRs@Co zs}pXKSV8-Iq-a^mMg(3k^z?1~;CE06#GsLZru_FVMa;BqVv?M|%gI%4mI>4hW~!DyifJ?e zOGswd?AQ|dg@}5ZlT2z0treyiYyeW;`leX-G+&C)&8);&GZoauHwNqt{l1PXEUvps zyZ`T_u)>NUIUgJ?iV)1OHhn(y%Q**Upf`E825t{QbU9HK!;t+UjxWw4lIg9aGMeLh z{}3*~#AyxBz0VK3bkrrl6n8mN4+xT-F|)umyV7K6LI(c>^J*60d|e@!+Uz7h`747r zzFvl~LFcE)l}$CRFXgL=|EA#Xz$U&NI(|^ygXors)lQ12OdIpAky+`v0-v0Y$oJf6 zHKNg6ul+7p8HoA{(B~;7@;z3F0tk6Y$3beN2dAbIU*r~>;kJA*%~!amyQOeCY_(C~ z<8n<TRl>KtD5Ym>?zv_n9|ZqFtn3Uk~=oSxIj-2|M_BkNQ~$RpzkO6#|BG| zKFqwBt(0l5<_Ut*boh=$Rp0jQx_xjgUa1iY7qkzOK+R;PkF;`D%;|jk^6a53$_=v{ zNeC&Szu9^yR^#?#(IR@~tV4(+9v~jCLOC?HF7@3xNzffF8{S~xI|U5~f~qlG8=$9h zV-;xiETB|}(_$ZUosr2`x!Uyxp=Gc_ZT6~O{6hHEo+j<6$yXbSh!tulc;gSe=5B)s z9KVPS2a()t)%`Ds_;s?~BOtOtgq8z2a!Z8_6t`C&*laz%`0EZ^3cro6WsIAKryenl z>U+4Gv1Tae+CPi~B);G>W;`n(;;!E=|KjXTvSuXTDKTGC+F>Q%Ok+4z7|~?H`dR&^ zaE~j~6(%idqKAN!eRVN!MPlGa0@iAUD6PLdWuVwV4RO$a2`d0^0N|8Ju~kZF1OjRt zzeo)!z+F);Uzg5}0Ay>bB({|^X3A&Gn^i1{3Nw4 z9|2=^_0cZtVRLF1!tY$pAtNS88Q}PY%jRWZ_cmYQmQ$$}R(^N9tg~!iKb3=jsPLV= zlzwlcio_q$ngqH{1%exh*|*0BHdj78=7l(9Q3_7aZChq?nYN*O9k9c+qz;T+%13OQ zbuKE`3yJe2((_&wIB(7HZO(c=lPnd%rJDSXI&-UjJxf1lAu) zv5HK<^L0TE5X-z>kyq52p>h}rcMsB>T_331ZQth_i&F~O`OkCMT%fdmvtk>Y4Yd3Z zrr5IMi%9~dwohck+R8IMrKOepWCks`w|wSExP@l8r+ydR0SD^U)6TK+0xNilwgxKQ z>ghP+at}Cw;&-Hn&)qWJpKYY7yhGvB>hm6O()rIE>ZN$_y~Wr?Nx3G8LJ7-_=Eh}I zCIQrfmA!{q=g%8JGjqq|Z$QkIzuc6tiq0n)NN%UV*f2ir{IMn5>?;h-_wuVDyBLq* z-(_ZtY)Yn41bJrqA*N9C0@RbI1_VFK@J)TwXmSDV{j;|G-s-)dMv^6a?Xm6kq?96X z)f1lGQ;Ri21OmL3=hRBV>SU|-cV`^loEJ{ji|ZLyIbP7v5P(UDQMOeA*(2mV1m=OE z)5-%IYmJqQm|Kee7_ZPK_S?##*JPhLM-%YB6e+d+d$;j=vF0oE7F`_6oEq|jetv9x zy7wTw6pAAXqJ8>0#nDkPtT02>Nu?9CZr*rfh%}025tNd*uGj}RSk3l(-g2elag)wJrA3#n4bP|BWxA@)b1Xb?GK9qt zoH(fM?8;H(l>nMCkM500-S4lMRw}fDS#BC)JKg%DaPiuA-LfS9&wR|2LZ(h`1Dfpl zcD;cU^57T&Zmdo!e4CibDrsHipBG(Lgvap z;cL0f!SXGClQoip`u8xKTSGpMtM4bWSR>M*r!VuGOhPErz@d{e(2n(%Oi1H!tk%c% zl&ysZ3x;#@)Hj;Xvma{L0vN3{2o7oiiOg6(iBk@8Up^R@UeHbtr7r4D(=D_%I{=mtn{bfvqXnW+CgDP? z4%foP#pQLyTl*AOiYYJgbgY6IMj~tJf4L)2*L^YvpqL*}1&7Mq6|dzB3%F)^heF5? zlZOKOm${tjGe8i-(wYNLQ8^Hqi9)OcM^WCEP0g!f7maJz}!XaJFv-Ue* z7X+G>FiUG3{eHe^e8CHfk{e#BmtDHdsr? z)E2FtN$Xu(W*8W90dwCX18zBJ7e~kDRjY5V)i`VJc35ljR(0xOa@_|$VIeyR&y)+0 zknfwWj|CZOO-p$>ZEF*A;VUY~RkL`5!T+^cBU`+Y23?ZPWYTwd6%jg{^A*#=<)No^ zdkR;x-c|MWcw+w0)jyBG&i1e3pQxAE1+dj2W^n0uE+cPC{h@(w?3sjmX$}8z8d&j2 znq>3{kIe{A9f<|&2~kgmX9bv)zaIB{*rCy@c>q!~MYm;FimqEq`%7eG3u z6z(YM600(_Y&!8cu8B9X`0DwTz6ybm->u#u;}MsrFXRfzJ4GfJwD?XLfCx_CoqnJt zRg*^)Glt{ON2&g={j-zzAMfr@z!;z=na$n&X5G99sPKL}y--qH4uuWKtUtI^m3Yar z9er@EluDCJ8?5$lnDofNj;5I`3#0h4lpWHF&6so2-e`{`9WdF-KmsOqr8%ECnV)Nmovgz zQJ?5a#JGQd(UEY$p_ZIl38b6f4qRfT{7n3b3os*3n}cVGVmlcK47=i<+82=La()+c z8U_`+RK;tS+%$7t1T3J*blcJOM|$=K7N06&#SDZXb=)oR`D3R)Cn%@+YGsL=nD@D6 zElfLShXn^pTd2_uc3_--OQgW9)bo4P(0_S~t=KlIJ3|q_uebb;X*y6vv+#eF`L30C zq`{GltX~EMA^J9!OSp-oGpzucaiJ&pMadM@qRllW9-)@Cn1GZ=Rl-H4$EhCYGfc!T zo`Z_54aOMkVy0UD3k~7jh0Bm@;M1?U^m-#=CE#y9(NvpA(ia>Uv!H^&u z4|V;<#ifk`WqN2B)&~lt7liL=flT?zaMRnU3{cZ4-V)}h-wq}#;Q{|3e*t3bJE&iZ zAQRb~dxv$EFkPwue!vrmAI=07hp+bhxQaq-QAK6&qk84zSf+TU%Mp@2Nz#>Nx~A`*Eo|!=57AJ0b}HKB z*jF|Wr7OFIF}5_s8ZxlBXXz* z@~`nHj}~$fBM%pEcp1}6ds0j$2#rMD;jR9!JSxx1)WY2itnT5qe-exPCdbeD1|-e{ z1!sop(KoS$4EBFwif&*L*tyo9@P(`_CmFmKGaXvWH3{~Un)LmY z$peQpn7CVW@fAC$Hk=gA(fJlG^~g1i35Yt&*&r!Tj3-{P91CdD7cW{Jh zJ={ecs@Dp?Om@t5V19@F+{v?__sZiVm&^J=2z8>E%9jxbeE~X?P#0 z)?;dU*l@9M6nX*o*{HYL9X0S(P5juoe2=HGc!g~a^@qI|RBQr`N_Mc&3ehQKph%E| zhA_Id>wNTqiiQh6MzxHW6#2fISjY9-K?DfIxS%=|ek@uT4X*T|}dVXG?kb8ui zdq4TsC>K&$haR0DFZfB%rhmxW{ZQi{Am@-N-Z<3JoqKovZb9aqK(xH2A#WVs#Sb}G z-DXclj^swt{ZjMDmn7@Z3AlIEUp&iY>gwePpMb`{AT7!UAw?oBhRnWH!WDLGq=$?_ zkBnIp3m2V>Kv(e|yw|hC6hB!Yu{ubeAmf?QO1i50K9td_?^jrR{^<#hUNacZoqdx1 zaZUKTj+516j*6+jm9SmWjxENH>hV5359?-bmZmjo>)Mg)Y2U`*qDslp&mvkaA%#{Q z{x=ba!Ky^$)=ZaTXhdAkFHnZ?7azcR?4V~>Xt{q`5p>yf!EcwqD;ZVSo0qClmWo~9 zB|?3n9qrcRUfECcAlB9#6vo)&wla(@HyoGnTqaWsgA|sN_M^Wa&UOk0yU$V4J`;id zvso^Xp0ApxZ?s0APBNJ&Tt(PaJuEe>#YK+J@p-sZqOxDi(43+S=2M(2@GrC}Ml8Vm zBb99dF8rfr5LNeekE{{$%p$t0<-=UwIH?Us9UXjs0i(y`A{p~s5XPp?!)$2pBU*qG zjlaSn-t`)*cip~v#!tb);Mi-z=3irY?U($Dc8RUY?l5mU|CPB%ld^_oV7y-ry~Od< z*;f0yo+7T*Lx?ObZVFpox7pikW1(T+ryHS3US%7U$Zwj==r0cMdL*)9IlC#@_oD-F zSD{S-#{&>yR%aHbsj4n18BUg(0ejF=qjh_y*Q;#Ph4hUNB*@vE7QlsB#Voddz|HmejEV<=N0GY0qV)Q7>>i$Rlyr$f-U-Q=qM|-IK&Hb?ITo29g+`Q+ z*-DweI`MyTckb%ItbXYU@BGl*)9l}WS9NlvQJ6l?t#&OhCr9G9aR-@5!&=|L3>s@Q zG-X?thv)L^os6ryh;B|d)a9`N7%lPkt80I^>NLgtH&Kotm4UySr0!~6iSI60~q}ZZlv=#QusV9X`pdzfR zYMvrW-p2Lq?61G=&T}nNPFWWgvtVDm)!(v@hiegz^m;pG%_`S-{Pr55%sRTP7{B2A z8ue$cd?2O;Xf|}BSpw=vW;G+}(7>&&oQ21lBv!j7#K~(as^ZWP$|BQP8-FCc9q98uJCH zo@j{|yW@{|*P&^Fzs{hmiqF8r&m?s+A6JFMFv?y=S|A;ywy=ey+=*W;GL#p%tF+wN z{7MtgI$`(Jnuh+)v!ZMz_bfbC62l%_n~mgFC?O+g^Erm>XN^~ko&9av_GSeg7(dGH z*JeZ=k@ns3d$O-IPrwxBY`kX}=OXJ%fBzR{he<(5S&=Bh#DW&k{wIN_;Qz7T+1bi0 zw9=OMNs57Jqm%r-!c~tT{No*z3u281@pdh#GCsDF@eBOFa9il0cL};dNoXeYL&S|J zx8k{97tH9Rc=s$~9Lxt&hQT*gx40f-rMsGWDj9K*AKH{vS3J|qm=l=IRuAhkf9(F; znG&0|>BS?Gm{hn$a7{_09d@=9f-a-n45h_O?y_!Q^h93DSlz(}M^q{=(XOD1H~Cc5lNPs#tGyozNA=QKrB-UH zZn)mXT>hy%D;aN(V%?8*Pc|8Nj;)uR>X58dbN_UP(%>pnj*CePueO`@Mr9qgxhwyl zJEzU2vev{CooE?L1Hpd7iiwWetoKuMw#$i(euRzFAe7}r!rU)VzNv_8N}pN&zr7)L3iDoSgN|3K zI3GiumdUH5JeDyTZ64^Nnt9pr=y#X=PSnk}ve^;_Wl0f&w=CVT%wX zHh@}j%@1D4CCVesb%DPkC2fP}_p#53?p0O+0Ey}e7@x!X^7R#={-;SM1uW(XLN^jA zLiuho;p{>vc0X4!Ar~sKs9^(!o+kCPwF4;;cG%My!J(Pu&w-tN5SqX7ElKYHx5Eeb z3|$>=!mZe2e(ussXZwEPO@W zQauvJgAi)7o~o$R-=+xgL3GxzmZ;lcs>k9;(s-FOTO)gaaTA8aYRC%@ofIkyfWABl zUAwIQKEtrBg~{3cJe1(;93o(FAc-A)3)i9f4Q6cGy(is%C`Oz!E;krjeUOTZy=>JU zQM8f#fz7tjuLN#ZKY_J#`bPO!Z^-(lJgTOVjrZ;eF6N2k3U~=j?+Nre5Utq|#+G6J zQi<+1K{Z6047nnUDreH4!8#|)6>#B&P;c)MqV;XIFh@;$GGf|u=Co%rG%C|dwSAbW zm1`F;(g27(L}Z^Z9jMu2VkSqY)WcJCx9LB5WLyxTE>}$9q4vP|EB`e(fl+`Vk^SgG zX-Q-Hmc^-?hlbHcHHCel%gz`qye2o}jBQ$26JTucZpvj56m_N|7VyoBx(T8Yf*Htv z|MOeXkOwK^C9X7gRjM6)RMD{nIOy&6gj4;p?&o+{3iC&4#WL6+X7eE9D9DWIe2?oj zcyO%$lVFNe6TFvVJ>0gokSqBG!08L>e~193n`S}@VG zh44O=B{SQQd5xm+IcJ)JtSMne`?7LE3FIFlfIh!1%x4gXzXZ5X^k%96#EdXL=vm5IDUXIS4uJ=9K&ZOBos*uCG;4zS z1;QIdP(JmjEtun#d%j2N35CL>%|^VwG*?oPlGGO4O0z*G~j`4Gw(R0&Sxg zUHy`Zd$DPN3xF<82s&)?AqZS#Kl>~4lG-_o85kprN}lAgk_RqaY;0chEyFf(dF$UL zL)6jr3@*xm|4+m7r3SB}KZQr&H1XM&#|4FkJ$1t9u9uF5woRK=?zoIsgv`?LukrT_2QY7e+pKNP=o{d zS1+C%b78W!U(1&SYFD%?3|*R(9kY3v z*bOY!E0|ryJK8{_7%8|kqp%wvSDa4mQd%5`g-(k4I&}S>XKhYIdg6F8Zfq<#5X!gt zDV`yK!Ssps>(2HFkbVj3q5;yEGS3TGUexyw%d44F9bGRWB;kFmGm(dd{~6(_;vG^9 zTtp8jV*(+E=eblGDeO&FV(scMoQpLf9bzGmwzouGGBZ$kth@up$vYx1e|Hl{zThdG zmzOkV#S)~uitUQ)CWBNQS^QF@;yh8aqBWD0U`d`2U>4H(6|PcIAdWae{M4`8Hn8v6 zqH;7HX(@1#6F!4AQ}GkB&(EwGXqYK&!}99lel>W?p9xr9eT&m}c)Dz!EAPw&wlCcE z&CS>>!#L#Kh2ufP7B}Oao{ypn7<{9>D-CNO05A}Q*g%H^E|=sAc7XR<=_>VfsV`>n zB&svbpfY;PI{UD*3WE;XE`#J`Xu)mF`X`!=6c z(*Rji`OcD@24`2?(VnC&*GBAKzdW|Q#gdX#TYBr}L;zwWOO<5~AcHq8a0$8G8m_w= zoU%3DD2&UJ6~PL0S8V$1C>;x^Hwxred}yOv!8s&mA{@^%&hWw z6-jyO{^mim0ISbs9z;~9sN$3*3Q674@NaUcdtjIwhj2@`xrc~}RHU|&L*dfb8%5$D z=_>}mU;NNd%#eN~h2JwhsBV%g>8|V^v!(75az$7tN~$NS=jME#2hsX*%;$J{q@B)Q z{%;BZ2e2wY#Uznre}y~}f#pHh)#Ppi5IjAvZoa?DHF|*$sEnD)I!#*`-PQBVvh(+L zKFX05WrEbHcs;_529;z{)moIWOCWIJi!-1LV~};O`BWbdhKXUMSsU}La~5Fe)W63u zMe?Sc10$J~4L7~JQCr6K`nVdvK5g^fF6Im%dD;JR9`zctGIkGIvu1-Q?p?ZC$-u>d)z<^%no5UY@#OGRSt=aiyIQ__A># zHbxbSBgXF-l9$N0fYC5Mj^V*!8@mRgvWk5dF5h?VzI4VoMYA=oJ5sOyXOW`6NY47C zLYZ6dlbi*2bG}vl`!xnEWpUyV%EwOD`g*&f*Q0}<*U5ZiZ#@~;R$tH|Zk zu6*b0j_c}Co+VuQ+?f7}>;V)iJdTs5P&eu(3h-ul{?T||Kjz@L%l==nd_ej-V`y-; zB?IT=L{h{8cux+FPZe>q_DEIKnIVf;Fx@rArF-zpk$hj}5+i72>1Y&U08E;oJ}*y| zA1=r-aLGO8ZCaGhW9`?n<`8h0e@UYUzfri8>d> z?QIm94D{#TKCq%Dg}YVi>azG9bHR6UQE+Hj==)unxoE1uT)u$e`Bi;ip32s~0A*4> zex27dV%%D3Nb26D*ZZ97H!p|6jZx=J4v$tWiM*)~GnO!THW@J2Ri-_$plGwY?^Y21 z9{`j)Gr5%mxor%Q5?#A5SX@BiW2{THs9F3U?M z5W^xPbScy<8YtZkCd9_TGm;dQ_=_DakWwtGpKkFkS zVq%!fO5jp>b}7AF=HuZDeg!?QY~KfRkOUuF`nmV_ta*;r>+o6Yz$Z=7ZX0C}Nh#rRLUoiA&5Mz>twex!}xoNZ~490?n( z0FljIC0vo=>4xBzu|e02VrM{$SMdT#O}sc+0?W29X*)a~qI<6J54hvf9zU}Oec?JY z(9=foN$QSV=mrztZRV!RzW=|K)>bu$^PoCF{>g#s`Y05IRsjVvBzvx(MpVV8x-v7) zLZW{BWdX+b=qoxJRs6_hKOqTU8q^5(CNdzfvnec{tjtHd5T7nAqus=7#Y_a9p~+>6 z>{R`xE(xkYn~O6yl)u^-5gkdA6xpG4y2fgBhcWzBu%ww4U8W!PCa9hNr9YMjq?OY) z(=(tmOQjT768UiQLJsy2_swxclDl(d6HvD)=BN4{%5$G`xI$%iSjv?xNr*JN@@f}U zc2RhKhF*1HzYEJ;pW&KjfQH)I$UF8gyKl!zc=$<_c0;>$pNVisOBW;;F=IjcE( z3U6%0Qh^ovPH5bM^s-3#YA?y3`Y^@38W}s`Z>aG#2vqrkRCKZiO_Mk6Ah46>5f@8R zuUfv-P*FPCG%!s0nY(K<7%sfa7gzlhiA8*T!LO@oO$Zp8iVd{__YxY@SzY z@X|v#P)h-yV5lcsljffNuZjiLH(Gd>?!aZbt7FQTx@La{H1cwnir&Amj+UvyMx~{* z9krc4-9nbjOFo7QLj`SW?nOBaso<^dAswvowF&;cL)(W%<3oX*@QYXsmF4@4 z2!O_lJ;O?1VRfo3i=&wIUVhdpK3V9AY6k6x{bKh)QL$8#ec%7vW}(Ar;%8{h^3iZ% zz5%!b#oR)Xmj6=9|9ZQl`Z!76(o32zlm)ot-J3q}?iffiDr8_6^YBsBW;}J0Uoj}* z;AMeQ_A{HL?4KZ1S_G~jrWkVJW-n2bJQtXMBs8(t5n z*k9JeNxsuq67LUflnsZI=7*ip%@x#X&V!!1edGka8mUg z#*=+H(z8($bbp^_6c0&Rdm^M~$nJa`CkRA4%=LlM985!U!7SdFTvpQaoD!G^Pz|pc ze+?@3$3nU5h&YnIRbsqBk_ByKMFgO$HXF43TyQ9H8NhB=2e9};Ni*VDiu-RTmIjng z^bDh2o$8OyX>wDm8;=HY^AcacWMn}p z#VATk0Bfh`WR@O#7v#VM31D>P!Mq7Zd~!?!@Ah}Ejej;sta^qc?1F5hen_{`;UE_E zsa-vr#_Ov(G)IOIo=@@~uMK#$ZRpz1%qUAr_u4Y{4H-^dDEj=`8C;jD_(duKHMlM9 zlQscJoJ8L$JV{x1K#vwYR1}%K@ECZuE6eD#UN~0AP8ZFI|sABf1U9oKzlknDdH0udu*k4;EY0#YT4zD z)sM~)I6D*t^&Y)rqVx{kk3d&!o$|5CZ~@2#$uI7$sj$NJwxm>29*!wcREUK0dY#xi zv=9Metw1*F-g}@xPBGwT)6-5vBS$5hww9|XbDE9EDuP9w8t4KdIXb}k)7WT4!+2db z5->VKgc7e=}XxHMRQyW_7pP0Hys7wRQF(zGomZg>Z&a0TS8F_k)vS)^=R#g zNBcowDNLXJA|@Zx$7=obcM5;`d`TIuMZIA!DrWUI?tj`|X4VDn86)?t3jfZ}Sdv1W z+n4Z`?}ad=CpUp~Vwy z`4}#ezE##z3I+s!OPIXqZ&FLN$l>J@0|Ee&?G%Kf`T!VysKVaxQN73}!XAisUlVrj z53hDcZLh2p&zlz&VA{dy(8A?aHSaY$WG;VqLlvpG@=Z)lCEPiSZJdojhwWv@m>q7y zGJ59Nm;R(BN3xxG-_=-1MiL|f{g&Hl9Z8s}U~?+`CUM7Qx6XIJ{gi{7o z8o{VSM2cvZB;BxVHwfhIwXWzMv!lF$wcN;cBRF0zvJ`TUZlaL#;46L@%I&~NCRMf{ z^$!3AjeIy!GR`K8u~BUg)Ff0JpJ7601<49{SlCAkAyUZ&mQ8}@6u9n@4m$KWoy?nX zR!qBNa6h_pPRryt?HRc*;l3}65kbKpd;Z$4PE{;Vy{_{*q@a+FpccyVZG{LidIPb5 zPm*)sdL{QoZ}mo#?dYMA>zFh{h8M*VJq^ zYpY-+*dO8o;I6?%8`!KQUyH}S`_EBJc+(2_IcyM0nnh2W*F%;>{X*IN_;oVu?hph7 z5Z!owDY~0#*;ZX+wAR2-lsi5j8r`L-xa-p9BkwH1fXxxWUlsZ;pdH^xGm)xQVbv5D zMH7Cy6fYX7RVV6WdFo;o&vIQGoI~xx1ojKt01DT7xxvZkJ4W4Q3pD~H?bH5VDZwdH z%xlq_c0FoEZxG?T75MDDnb}r`jqCF9vbLKofUfw9>-f7^5tNhQUNM7M9%v!KTh&2{ z3e;LazMiW&vymb;w^yCfO+}u5kmRgV3%#(`)K40(K43JT?D1gZBd`&TM0T-S#}M?yKbOa(8VgNWf^NChzDmpxLaFv`vM)P@ zDRwrrPy7uU5?0)gV0C39G|iXtF#dBsKWFM;(fOTf$+2SYm`bTi@_tpN6pnIA&6vXDn&URE4Ls4+~?R>ttlMv)z8=pL1Guv@S&E{miW ze{k)Wl8b(;4jYQYy$2({3K&K=cC$|^mTINRuBqjwwp}7_QsJ7DnZ)4lQ1bfCp%x!{ zQD$IuV#N(J?I6r>>K4^|_P=qYWr{fnxO*PAMq6&+_xob*SP?9C60x*mF5t$@VPj*~ zt)Ot+-OO-ly+ZDF%sz7YuqPcr|JPqVy|@1`)Vz}%M$&A#IqEQW7nh0`33j)5j#0M& zsAP>fnSsXaQ{Fdp7x29waohv@hxsyj2?_3aQfarlRm{g4WHMuw;z355+Q)&LzVs`Y zXk-16u`neyozZ0Plp^f{!=nw4e(V;c~|%5EvYp-!Z$i9K~4P0sTWzx()sm~I9tYB zj_L|vU<%_)gZfgym5_9?ZZ|AD_BjeTqf1>~9P*{C2}-2nkVG^7sV1(v)oK%^EHW1n z0EBc-ETB-@dRZar!~;b6 z*wyqC0dq>iT=~)x#0U+(Ji3lU$ovWj?Mq_33!}>uE~1}?I|^vtNatO?^Aequ2A=h4 z=QC;pk{HK>{1XwvAyBma4(9ntLYX#_j-ia5E4-XQ znavb)bAK40;}k}vy4Zq1Bei*Z3y28JM#DlNS$-H-c`lw-VtMlki?O;shUYPat{&Wg z5)6pkRJ?SbcNb%c;9#(S?tsP>dS({6A~${*5AL9($0>K$sAUmV5560Q|IYqkTRilj zUGKG6N;`%dLY^cwzDw0$zLM~#zh32Uc9u6D`%6gYc<;O1YdQ(72i__1<(9iKJo(X` zTGLqS6mo^MgkDYGR4WIz9hSbjmE190^C4wXU%TEkN0391{;uYuJkr(1D=@7djjdKC zJ~q)8Pa85aR%)Gbuk~DPb@X@vvM{*8O=Sgh&C6ygilW!yEy36rsQa$;S73y!F;HCC zrcfpp3@GEX2-6*{_!dAs8e?ah5K7L z6f`-btGv=*c@R1&vP2B31|Lb#un}l_&>h1zIsdK2emrQuDLxiKjGMR}C)2nsbIK{1 zchd`36Qr*Qh7pO7+^}r%>?7=z@^ev9@pn5BVXW&&K7-XJCW8>8>4n)zWC+p`e2jQ+ zF;>PYyI^#f+zG(4b^Jx(`u?e8GN6gIVEq$a(7ow|;VJg=(f*ukMCy@1$9tij*Wk`5^F+c0%ah4<^}cdlAOk)udCGj6 zbeo_K+e^LJe8K~BP$76~W8kTAC?M__(Ek-s8830vRBnQ79Z6da`ef z9NWVw2;V?KFBSnO-H8YDye|L5e_?zVT3#VB>!YHg_rx$G1&hc;_Ri8hrzh++2eXAn)slW5Arw41bWdeC}G;ve*eUG(Fp~sh} zitfayOc=1BkL|n!5ramX35nWPDUgHw?&0du1*tC%U%Cg@T$#7mypCJ3@XuFhy@K+o z4OD(%NpHcGK0H>nCQ3jb-WI;%{RRnIkQUlu!>o5RF5CLt0VZ17J2jk@wKROFQmQ~H zylF{76sQ`p1peuQ=D95Hq`6TO$Mg}-bX6t1H~E_I6_C=mNKJYU+y_LC7unQ(1^hfn z2x-ix0?ul_%lyb=@Lzx0I#~cHmv?AX096Wl>3;yqwi`TB-f$osr&KU>POGg4qT!#g z6&Wu_##+)S<;Ogvs!iU&+am(p>y2cZN3CblkWn+@22&M2)IXell_^6Bov(ZIU6AKm zsTPE`1~0o}HA5AuOB>G6GiTZ8uibG{i1lv={0_2ub++Hfc#z`$V7?QI`fzr@VE*=UOdRI{la; zY*z-Xi3Y+=M(?j_Jl4M0?PkV^n>(A4HcMZdWJJCR?R3lP-IDD>J4Y=`zu~ugSrxC% z^5+{kYfLc>Lb<}$u<0mH$WAAQnD6n7J$jBmGJAl=yy&$_<)bZBXXzW(so(L!__2Qz zm;-Cg4)G6oBqY+Xz~N6Yt_ASz=~{SZd*{%%0Xx78IxL>Ur`)Hp*XCrQkB?Q= zRQ9avFSSN5ON*r00jY-9Rnf2O+by83pKUC{nWU7_q6t{Z@48rc`FV)12$%Mq-hMJ% z1#wCQ+t9jrpY~2*`n&!#be>DtcksGKLOM=vlPdCr^P~~W;*|_?)=a%q^cCYQ5nfL5 zU=?34B!HwYVW3okbhde83flMAjSDbbttI>xLA8|a!1ycynV>0XqvhNQmFuzXlEgfM zeq#G_NK9?pX7${=XsSl%#^iq6);QB0BV?&pqFU2zpG-^cx4U$&ri%zT zD3*(8S>X_qmwCmLLv?lBl{*o9vL>Y@-DsW9yx>5U$a4*Ae~3>^Th6Kfi$mp|3%s15 z>dQFTk`kZf9y1TXVEx4FnP10`QMIs6q?6qVae$UUfz5XfscqxJB&nB^=Dn& ziW|qQT0f2=4f5EEhmiOSFiYbtl9UAZbP$>hD@6SIcZ6=iDp=FTYLD3>)N9lIl z88^u^%?m?kv1gKurVIT+ncV|*oOy{}J8uOG=AUrY)5)67HBkTzSe0EELnxUJ?{Ox@ z>VrusI(x(x12pM4kXt6s-<>-59X9bQh*s#L)l z&qCrc<^Q6?*pO&)z&?KNSAZ}GiZ)QpsOl57Pbb*11}upN%20G&IVCxI4n2VX*p^DaOrUOZ zUYP0NO*#pjK2mrvN2ZyAU2mRf z{kb~}MpgdJ{UglP-rNHxU)5Ed#-^2@bqVE`Q;fiYo8;J8x>Rh+5_>t9%*9i%vx^D?#F%Ee>{Et!99q2zni1= ze~T$UAq`1$K{FaIT2x=aqRDEkVr%v?wEUq?A6%Bo_{KsPD{Ka)(ueLqmhia*Q>LOv4BkVk;+>f?mr#Cuy5-2Z{#y( zr(mHc$4FF#RjB&tCy#&muUW6O_z*ldDN4S3w-s0!G)^DO*Fb47Q_w|P^&%{mq8)gh zNrC?e_ysMQ%sf8z!*J?|EOJPc|IRuhZ7Cd!$prJZz4cFu?_^sX`0nw^H@mbVW6)C-A^Or;d-3i@}z0Q-i*Vp1XYP=(OzQC zGtZ`2;s2}tjkZFh+Y3RUMzewgu00cXVJT>(TyzHuxpHI%U*mRaFPCRP(KrJkDq0?)k{A1!i8$GLCq-+fo95(%2jm zA?$*^BK_HfiQW$M6U^(x3}iY%rw_{27}-tvf_hFkSi!N9BQ)d$98Rv4XVJA^Ukcy|AW#CKU=(dHa+)>%Lj0n15rAyZUQ!&hl&{}hTRNVdh~RiATgQM`P=0v z<*ol^eaiqXg~8K8d+wQs;QLr>Y&tWbrVOL2<^e^OhD(!2)D{XtLZFO(^mvDwbrRo! z!fRM&CFF2`aR6d+I45eotZy*eaGjWoPkWi|5vW|$B`A3GlmDM|!EAtv&^ktwvWqwlNaJe7I{~L;>KpQagsj<^=&jcq;ivMTtNQAt5_i&GSV5~@budp1Yw z^gxB7V@G9WtbyIl>`3KZ%ZU6EDVGLXXRaAM$2vy4+DK-Uy!fS_;#sZTCDX&(6{YUT zZzU3RL3!eV&Qx-iVLxArB7SenZZ*{6rZN40+^y+Y`P(qC580&JuJ^Op35vak#yQ?c zsV=#+#B5jE260FrI*-&s4V5xNoWs59`cxG)_e+grfN+z0IRx(E1DX>>(!~EV?>084 z;ZMHk>I)&L58Zm?k1|o1@h`MzgtO&13 zM)qRsMb4qpXN(-*t6Xet+z`zoaKT>`!(y#asdLU+^sx2qQX{;3b5oyE$zO1;9f32*pN+){x*C1GR!=cmIS23fF)`jpf!YJxQc z@U!w$_&Hlk5wxXw)v#*S5lN7^z923AEHU0x9zodEM4c+t0v^5c%!PS26qy|$HOORK z)IP*ao6%?2_iL*JhnNB{)m``qu?>fqv;mj|+}v}uD+wuC6}v#JJjnHL%wH5u&W3oZ zpUcHICmxH*O4k|x5b$%hSE#bi0-6{LKjF)Oxz9_f}Br0SP7H2P?U=t?t`3 zy!@6)pb60dPDsSw7lJ~RKJ7^W3t>0xnSEMMgikb5f(*KnBX6`JFti0x!9*+(bV?U@^rKq7$D?ec_ zb@6j?gq%f-If}d?4(!UIt1E1q+b!&i_4ei~Zm^A)26maF6sdokV*`cc|5KRMGbux? z0#eK*Zj+$Z8!?7-Vz4VW1L0YMz{9_x)usm6*J6P(L(#($*h-QUEr5}F=WeM-se zLEf3#B}ACaCx6XR{*-TR%Z<}VV1+rIYb_H(*fbEeq&7>!0o+{1zCg@x#6<6JslAWe zLROmmpM6ziY-i{>yhD6M>6e9SSWPpUcWZDx3KGGD(W^~>)Ah&US6^u@4#9)heYwU_ z#j~hJmX?P*;Y_~h9N^w7M>ecNPb1?)$-zK>gNA_% zQK$CY*SEY7r`u%|tZ^3qWMEY#q2*egTv`=B0iOt(d{qOFc(XCbSB5R$>Q*vNGaXIb63pSp$<0ea&j>I! zCR6S}f72uopd}zQKg8u9Ut0=6XNKt!FR*P_RoFOqf^h_O%{r>rtg&sfX@1SNHCMA~O+kM#sd_=-V)iNon0q%3Lod23r}p zg{;w~Bv(nNjX*1AIypGcxc0=R?W||7tT0UT=6CUK&O_BRoU%!U-c4v9H>3xL$G^YF zR#4rvC;Q!Z>}fO>ngF{C#N&y%WvtUHMbs(|v8a)zl^^O!gCrijX1ns|nN*L8WaUUT zW{~MzBJ6*tO)y$Xb&UD_YuwtkY>`Urp1?{fngG+(wQ7A$oIy35lHkvuWE`$PQWc+k ziJavwTC@IOlV*2n(BRFB&E~W=QtP?Z=Het;g7!wwHZaqvLd97%%Z7EY=$hJ6I}iOs z!i#()@FVv$Ae!mZo>#ZIe-7*`;KG@oK&wPj^AiXGy{~H!=r_n!n)i56Y3UX%4B06` z=L&iZ8Htr=38J1&&ufK)K;nS}ZJQj%+czmVjlv~ZD;Ej1(es^1R|3;+KJ4mnhGInaXJRfs|wsZU8b858(z0j<>xCDiKp9 z#Pvg!h)gdU3*ffU?lw4KIY=IB)~w0ouZjCuXSK<`5maJG~g|-I1#}tV#VmhM1 z+&n=owLo7kz1u&qB5)`1HRYp*8mm**i43`0T=eg2_E2Ec#c%yeJhAaTNKzQObZl$6Bor&T6(dKo-5FrPk%MQe>+dU@W;f2xUR`5Oz@V$Vh_(WYa<#(3Tq#EyJXbf zxq_-;gyM^sg2mi?;ND5x+zEyf1|1|h!L<0*X{}%*OOj>gu;wdSD*D49>2=B$OS~6T z+rAXejK{18vCBFa4}g40 zss+AkIZ1kja+>)HvEz4mhk;S3hDoU#os!mrqMtT1A0AssV|AH`JM?_YPQbBn*!F7< zKlD<4BSt!4FZNvke!(AzninDBXPTznWVvxQ!;h-L(Z%-MHO-jOs(n`}9^u2MWFJe! zK5j8XJHMM56fa|^;%$E7REXzpLr@GDb=*^R@$;ikOLDew;|cQj@Yh0!hhq^fF5||EAj(7%!1mCUOn> z@pH_aL>xJRH5|q6lg|MpmkGu6WDygeuu89#iOZ8E`EPK>L_}YaFi3uUP+FU}x+A|o z@uDR7Qh=3#3dA_O0Yw&7^QyE{cBSM{s!=Ol5t0s^A~jG1!j+;%1Fd1&{4{nYYT{JV zZdtb!&I(wE_+62|Y3%;5nh17OLeFjka9~6XMKsC9>K7Wtw>jbahcW@d5RyDh6rTy= zY{3qqK(7RU{2MxZg+!UM5kKWf_O_!1`8{k5Fm_Sem5F4!1|J(-pLph-$amVe+{IhH zJui*cZ59b_)9RKY>B%972@!NiXhG~Sdj_9vMC0mk#7~R z#s--8$XS!kz54spyxrbdv6aNKT<;lsD@Ne* zbj$5{i3T9O56U-J5@D1fLeO2?^rD+z5yi?PG8@oybW7lBlw0m{1o1|6T3Bm+M6Dn~| z{_4L*G_Pq2pb^1m7e3EX{)sn$iz&QXyDUaQ`?JupoeiP?$^ z!a2$u<*U0U68*cSPKaP4)F_jKZ}f^}XiF8Yv(hWtSy!90(|)u>sVXzlT$Wm>D-tbo z@MEWwygA%EFI7uwC9fuYW1~gsO%McXer{oi7)nuyL8+gBhq%{7&i+f%Ggs+g1=tlK z*uHQbrV9Qq6y`TV7N8)_q>pB;*`b2p+mUDzxx!i%z&dsN)J4nyOXbizmWjKbM08|~ z4hWrlH|PGvV)f;zEG}cpUBrRK;mIYaFDgg#V#$MRswm<_{L+vXeWlGv6+8ToIDZFdAO!vvm~U|T6!-PAbs5T zvGdj4QH7rn5Dx1Ft4aq?i8?hao5_Pw8pAnz3>Wi^9smH;+7>KzZi3HxNI8re%zf~@ zqy9F8YI37j)-s~eCCpXty)8i$_wC-!u0L{4tfE*6@?(Y6>sRqau!s}Dif{)NHku;`XuOqG|tf7)dr(zABq z``G3K3!dW*#2!8uLwyKWbfk^&xZ(8a_H^YY@j12~nFY5U96vtbh`#` zQ{epCNwk8|mSHIt2`P)aeYsApkI+ZYIO(u!+}c=c$4rkZdQnZlz0CugA<{TPt;8HF zULaBT0b-KmaGP>JH0ga3Ef<2pKX%>YmywC2sd>vQjB^0AND(*2q5T7AMnF)nrTCqW zW>d$_`QliYvVT@LZN@PKt_d-hb@UGDZPW6KDDz+E!nz`s@A`GHv=fPms0|(~393ps zSVs}8tur#Wzbq$xKj9xLaAyUJK-ZIT01jWlJZU z!8c45mT9!yKEF#l?gq!>CTvdN6tx9G5W)_drR2PqQ-lKkyb0$SrUc0*(bRt8(6ZzD z>Rm>&0{5hRKg&7(7sZn@qWAYxdtVPPdxtXin9$Azxj%h#-r=V!a&{ZJI>W{zrTLWU z7_o5fWhI5@(M0uY?QBO=m{B&MMn=T_W?*O39S%*K}Hy8p}Om7c{1s;PJ>%M2} z?GsBjy)4S^H>-2CTwd1e8J>j*&PVkDaZ6FzXEgC}Tgb=|_<=N92}DQi^p!Mn_Y&Ct zuU2|R(Umj*F-90a;H6M%^3jOQ-)J;*EK=!>44r)OkjiBSW5 z1ej60qL>LbGD7m|XYgrhn5yRNWAPosjQXv;IM(fZY6SZXnvC_Mv&D`zzZ)tN=^;a$ zL{AE=M^%Gfkq_Cm4kO)j&o|y;-Xc&Mri{$9A<9Q(y{C}oZ`F#d9m&`_r=zpM1o2~K zgooIRCZy9367d}p__^88BVJGl^~^PQh}_Q_#zCLq((O`_fM{9*?#Chn!XAjR#BDx{ z8Rb+mNe8b^7y+&7i}Jam!|!_JHa?&00YhN|^77HHnDJA&mjQ~iKz6~89NfizJ}V}b zUUBOztSrEm$b#6Oyu~Ff25^vh=!I#bHAUuM3xTG=I4VI0Idh?KOn1q~s`)sx_r~vU z3wDu~+VNyL^wt|(D34n)qf->s*4T%-1=`Y?;*F8$@>T(Qtaw@451m`4IYTOqrcF~C z7e(uAwI|Jor-Ht1P-v=N1+ck|$rL_DFT#y(!^j~R-g6d~uAG0AGl&vO>BdtXjB!4F zQ8X?UGEA}G6WZwIikkx2zRCrj=Mn2mQy`9A&@-b6bQzo_^W0GAyG=;3#Ttpix_Rs+#w3Rj{A-_ zaa>$YOPe1bMgy-~3<&4uxz#X+(UFC6NB@h#8Acu2{*CIX9RZf8*&{ zq6Mo9V}`c`z!(>Z_2ZEX(hs|gawGRkvjhk-*b7)vo5@D!y^rxZX??zrg{re^HJTMM zbok1X@#?k4yqAocitqdnIL(8zB&u{d-3l52D?rr0({xMnKQ2*C1eY)UhJkdt!;@yl zinR2C{pFq_!QWOAhR z#h6=$LwT{z`{4A&dBHb`I7n|Dj4^9C_&nJRmDae6^#{i`WfEeo#G2^_@LSZmK3aXI zs^h6pNqW2qV!N^k;@jQt6{LYw+2P?Gp>Afk`8?-Yw5?WSiW-6JMEOOeBkILZZ0=g0GLO(5x`&iIH$-lN^Ss)#Wg88U9NPZmXDpk27JSvT2Lap$D}bImAos_u$=>Ve#5d6y&`f6Cgcuy=9}s_W`S_>w1N6$*A_ZrE1fun90Cfkd*{6NUD3X}}L#R8O6 zi5DN>qenysU?HiAC68Jsmhw@C#*C#TCI#2{msYdrPB)nab{9HqQ#)c)+smc&lG<^I zRo@49(nW(rc!_?|=(bd^fcF@9BG^ZYmman6*cE)D?D-giN zMK^tZZD)UZPJkIS--xeI=b{^YV}|VrwKFW!;jva<1^1zZkzkp!BB*s^P`1{llUkU( zQUaV-n03n3!s^!CzUI%*+Ta7LOIn6Y7cx=iJ*1YjY~0o!oHqD?MYxr#a)H){)=AM8_I8Qqe&EDTs5PPfV>p zlld7=$ODJfMX`&a@=9!h&N|y@@9rMg*@|O2iSHyCmVxZKx(M?9;R@v zECS##EmU@GmlN69MH~1vO>3&Ei_#nOq0hN6o{#VjzfD=C^OC-mi~}Gog7xddw;_{I zzc};e^}ISo3?eGd2%OaHy2J3X27+mB!0Eo7)*h>YjWL3NVHZ5nzUIgm56J?G@Vm;hv1B%q5SYs|8-Umot0ZTQ*AfeL}>YXqylaX3vL(am<^jGr!pOWR=56+4 zgMcy1_R}pYRWbaf+2`r`r^vcK>=#Y<%z}{h-9HcLLCo36q%fh=?t#i-&RmHaR%z?M zyFUZEnu}UiSbp3hUNV>vf+0~qP0-Te^A7fTQ0kj6KZ=`8SuznAEbw5eybPUAKT0m4 zhdU^4{cqEiorDO#s@T&+0h;%HPjCT~GnJz$x~owm1!&J9)yYdY9v}t@kYsravSf2h z$T6e3dUEQu7G9kRpy;1I4d1mdGS&hwV{n`Nq|gb-lX)1AA zpWf>HBmo96#wc%R>x_^qeu-oS&WTsKeYAj7DE)HVh?z(nCBjW{Js|Bn3~y$xY>J%v zYh5U}zt?n;>K87$=4+Kn4=z2XgEb_&4f_(&?UZ!X@`LfpJvJCH`bUu`w(l%%URd;!55P+>WneYtx;)t`I1OiJ?)!bdNqjOXSyg5W)l&W1)R{M|2KGRcHZ$z!8j^4CyLwww$5FRq8JO=+v7Ngng< z#~ixs3*_OU1%{Or<4VLdQY#H{Dq70eNBDqWK`sZmb<9T(lz!JORP{FLb zbMBZXtyHeLZE87}K;D6&gya!!i*^HXi`Cd?m>Mi=oyR&mt5vI7u@mheosMk59hmPT z>Boj;z8)c6-GK zTe5ZqiJpE`mT!QYj%Maid@VsFi*p|2F)Ssk<~H>fy)odMu?6q&OEB_!P>b%>4ZJ&T z{_8sqI`=%OI_fKEV0uM_=?WX)t;LAj#OK&Drmfo=(r0KnFzgrNC$L8H3*ieE-*KM$Ok0dsUqR-1N=Q@Zj zXaSN*@b7ABA1pxv^oDyMD##s*;dVyZS7Wr4Y*d2#D$;a zj8h41`k3dl#95E_ax+ez|ZabLE(+PR9Px_&j@}jRHGhY|mm{>l#Qf)tm8mPa&v_{;B~?>@`Ph#2d(@7Dl0 z)eSK+y1)Gu7?X$5o7#MRxgL!rG_4vGs$F6#OJD4B~uWt`rgYHD#g64a-R4Ga&OF=N~`7J9`8`gP@HMGrB3oKO`qiHg&1%JC*@pJ%aaw zm?fXpF;GpLM{ahM`52Eo!E4ozlrSjvr^v!~D{-VOA=|6j`lF|*q8IfQMju;Lk-&bC z4&wbnWABNw6*tE0E1F_mR|-uHsG;h6$iPf_eLHCiUy+%99O;pmJs;OZ84+EtL_WUB z1JGoJy6|Y|f`ei!A4_IyBrWICSHzUgvV<+~@B7ZzAXVx?$|izNWQ*>Gp|UZNOE7jR zS-Irnd$*7q1N;g{TmYpe472DCJ>u`hbR~W@pFB_lA=bZE(-)g6@<~l%zYB&dp!sE) z3c2iav z&r9UV@EzEUq_5Tqnl6{vc_2)=NN_Z(-t3O3)mf)9^W|zoZo9kxiNT(Q=Da>Kk-GnJbsOK&m1X9ir@+~QK5NbI`7$Ty-rdAvw9K-Gqb)S9;`7{v>=F* zmXy!WqOR-oE!fU5=`cGpdwaYc)ftp}2b4r*cb25);Teqa`iQ&R@)ug-S+C%2CJu_f zc152L@UGP@_t%$-{xKK)ZuNJ^r_- zJLhmjhzhyojhqgq-TeH&SOV)vDRD7)@K_kK|2WZ!G|WO5cQP#p>yJk}1jvB>$Yxm< ziQ=7U<;>p%*xTkvY2Gt$u+biX%ic+G2%d}H^7y9Ulb1~Yr<#>Z-=(j=SCS_D@53+U zi#8ZKpX;sfX0LN^4{8k2D$+GMxkz83gYm_RNE_fLzBm-64Z-y`m0_NE>x2NBcl!V4 zv2UQguzj-t6oh@qrkHfihW-jRmPvRySnh3JZUOIx(x?0d*#Fc*W0#z_Y2pdbTpU1%0$BrH;XvfmSfozIE{ zk40)(l3Y5 z`+11KB<>iu+?@>(vy5V}^;g->b%QUVA>iG5)4@zRQG1eCqeVU?hr51$RJ>ud*(pxN`@YVbG$U4Tg?E|a2UJNeZ=UtD3XRH6(HmK(Q|Q6~+3lBP&zwqdJBr{5 zV(ZCL#nj&o2X5>`qoX^*MYf+)e{(i#u|9|ow~OdknIDb|{8-sQ-jPl%AXVj!^7rR5 z=6v2~GZI)vlAIJu+FIMTl!{+5kjSDv+rlk1v54(j$;o?H79;pG%pN*~i~Y>l??T3Q zQZ0thu2zZ-sUDY3E3$CTYsFYHRmj(u=ksNPx`7?7#8`3>grU=Kpl~~G)L-}@v1C=I zpG=zxi**x52IWlyAzU`<(g7Gti{8xPDr^V*eU`yGcMl|%kQcjB6+R?ms$9~t7ezp7 z#EVS%UE>I}9CcGLg01_4;@2q6?B_f^T*&GmxYu8Tow1T&vAqn3EhMv0ItuEgb+jQL zgd|P`FsyIR6lwrs{9ax$#!;%oS+4w*XJ?hKk23(ekrWByKUt!dB=oj@#zx{rA=t2U#S7{O!aw+J4N+>*%0jOc-i{- z0Y`TfO7;3x`U|+2zRt-X{0nV zbO~N`=DqFpo$nONVt_YL&$Eob_4Fj!1S5BjE68*MX?BG}nq)n${I&XX?GY^6>yA8fr22U{CX{6~z324eVo9HW>#aMSAim zAkbGksGi={TroEWGge~`bFV#lCt^XqdQ*DAE%osM!&I!)q?{~Eqqr!*Mr>|829g-tV-LxPJto!YaGLyJo<&YjfY|OE{!>S#aF-aQz zGRGu#=9|O*OeII@n}rWh{*j}4JW?GNXAe~xR<@wyL~|+iwXm$Ci-kiuzEyByMCHHWsu`AwPn-S_0pp8JachmZ#Sp-uubp~I z>`ZiyxK%ViPQKPBzzXGK+h|@+rqjoA1#v`Y7@jT@{s%8z=cctIpC=z=2^1JayJ{$o z-=cPdz*})8`jLT}A>!afLFC*<$9(m}s2p2WxM%mjB#f`!a1iFvrSCkn7#@wax>+}# zmqdOuxx`ruD|d>SZe_|u>(Q8+IiGAtaAAG!q5Ap$i=suwhlJN$HJ{;kynpv>$#J5b zk1;UKXkkRFaoB_~7hcJ+U6B=rCacbZ%)8!ZBhh^U@Eu{VF5=9KP-%u|f3MT=fvCb3 zHScLFamE~g1ilQ|0)fu=T92uY25*fhZXWst?$OVoQv$PXp}wsaVw$yzKi1?L zkn2O+sDz~NRSIIz3elo%yy+~;aQ zz3!TJ(5wgc+Vf{|0%ak=20jdQ;XdBqCzy?%z6!V9ZaQcQ+im z;U1VAKcF7S#rcX=;qeR%yDSf@=&K54F`o8 ziI7wvvv9^3>#kn}1m%0ZL&wC2+Sz%}0-vqPk|V5K{c1g^zaMWs zo{P9EE1R(Zy-UN|m7qSs#1?2KpL~B5u!@B`svuNL&8R>0YX2aP4WcY4s`Xnr{htMo zWWDqYl(1F2)>XiDhG<2U81QOJpyS~WWBYKWFw_Ox$Fyk8q(QT*;@PZ$N{i!o*Gf^g zNuMjiZH%1{z|9n8M= zKh$9yHY=yN=3;0dRxwa^CAqR5Y*%h2sv7{JHZNua>KalI2aj2V@g*QjXYZ^Rz$!?& zhEgsMJ_Hzt3K)qBoDQ+r!xNOfNI|R3K3x)KYsuza#NqavbMjZPWL;u-|Vkw3s=09~-;8L6ajy@9esKGSR=P>Ul9l)lp*d?I7=iG8*^V zAdM3v9HLWRWyDlbfo0+VhhB=v{en&GL#}wA-lR9N4N_(76IH4S65+vTg#n?HrOber z1M_zL4h+JkFSwb5b&;6-a)_KRqz?}#rz?2zx|#ju2B1f!8?Wgut=u{q8OA?uv2~3z zDjxZwvyc6r60{tn+~BV=6`>$-p?qC<=M8K*K?C$u(3-DfS)}|y=0%NdvG=U+oJ>B^ z;0ZQ`xv}gZLC88IAt1f!Onn-Y6(FmzY?vi7s2&@At)?hDZ7@i%8&tsVzC(lJao=z>S}A;b_>m$X7z;Qc;uuB6#Fis)zOC%? zlVRg^*?#OFJIN3vErlg*hE;Z%5tS#whO@r(ggtA%%s&LbVWu;hcjkaw7G|`b>i- z8)=3*DHX>2($I2B$ir1aV`@tZ%NoSY;t4Tl-)zsO=;qkLeqVbW=1mWJ_2Tk4tC(4d zE2MP|{FA8DHrB4_G&%9>Ni*81++FN;1r@sMC5%!sAj8#I!6d&OlIbu93AnAr%ZKm| zO1>MuUWH>l?_50PD`?DVyt11=RwTUoLO!b}!+k4r_gCn+5%C_ly>RKFnd}G}B85;P z=g#9b1w~U5)k|8-Y|jcXPR3dNJaTXSELESiJOI!%P}M1c8utETjqL#TQVnT|8J$Rj z!6~LJtg^zE8E2!H2{+VM0lnJZ4Sqb3d}!GszWu36CFJ-rmW3(03e_)$LziQ7ox&PD zYP-c&)S#7Y)4SKf^}Jf;2|J3jI?hT}pIoE<**r~VdyC1a%9QbYWH2p)@e7OwZ`MW& z>bKY^rbOun*$_G-y+h;cHTWjZQiO=@K`gcSX^H;j&%Bn!_6rw9*i1X|7u}Be=6l5= zf7JrX(!5JmB`XK4k0KJgfN*cJA<0aj->%=kb33WMfyX?K@CrJA318S;?Q%{lCFvVh zbvMZ8^Il-XODmNP6#TXQ5iKr2ld(Un)ew0%)Hl5_(x(Y5ltUC**LSpxS0tNi+lyUe;)+vESX6%6C3Cje1D1reag5YOeB#d14252-%0G&2lj)rnt( zW>2)R#vqZy#&n%;)G7C$Fj(kd!ICQXx}@(u`VEw!Z*|}Hz@a8NGqyS3_Ng)L_g|Ym zT>JwB;S)IRx457+_Q+W%PJbcBSeR%y@|OxM=yO9x5DpKf;sGE$9h7eSKBjw+oYMnG z<={R531rkf7w-M20aeOZS?Xd&dp+&(+X;;b6N|?>a44Q?rIs_30)z)VjSO=V6DW4Ey$kgEReMMDM8uq;|NU)|!uhUJBM8Foj z15Y7xbO?FsB#DF+1Zn8YfxeFId&FC_jg$G4CJxAh2vu0L&hg@1R*H*A2e6tKLsp}G z>t&fd(_o&(y&R&3*97okhqKyeJ2VPx$v1=^~l z@-gA=9u~kb|BOK4V%U!Kt;x!Y6(;dg;PFGcJn?Dw{z!WYnt0(AIFkn_(2)==wgK&p zl$(k@5nOFIP>_XY*O5dWe$R&=bJVkG7$2hVn^ytLHR^hdC^B+BY~{yw2Jt{YtFQHm zf>@UGU)D;sKKjMoc3Xn5^+Ex9r157MJY571RuAq;2W3;f{Ihp1iFKG#wM5L6eBb3~ zMXn_!5qPKauwG6fUo|FEg&ry9b|KLlLP?cbpcAq29ojLLKVYFIIzj468iX?e^Y&tm5D3 zzE#n*zK+ne<)bReF6#)d%IZ&^ger=uO_Gp?6>GhKza(*k-}(?mx{+hY)Hp(~XJSR> z?iukwq;MIs_~O*uT}xEEe?4uNLwtadQ9vq8VAtu)7=ygH;s+IntG(DD3_L!bZ|vBC z{+G3k$yTIkiG-@y(l_tkq7+YW&iyDaYhemGWyCjDmtLOUARS}b_n=n{vP>nT9aDcy z622&^Efql;D+(wqJas8AT!Ec(-P!Cta(Fo=(RAOz2nt6hGOBw{=4@9?EkbmQ0XLbQxj;TM z(zdPDs^{Q^ayI3#Pvm~vGsb;9l$*^{-L;IH#$GCF+)uzgUy+d=jd1=L`-)V3N3K|g zrxYcDYb2Oz+f>2lL=S5;gT8V?B-zNRS#!&H*Qk0>bNKOB$utDu%u0Tdyim9>MRiUK zrOY3Lo%lW>Px`{2Uti4dPs7)XFUYz;HV;7ISgO?j5^Q5#G~EF&7?n>-#$Li>zx;iU zRgthIR;jA<8uLVId8V*bk!udchG+DNR8h^dfoi@5pP{=#8-*og5CcU-l5(?xkxm{U zoDn9xHtBFmzewhK{v!sNI{#53z)NLRsj?k64-wwTEqNP*OvPq-b5Q4_1~7fNsojg$ zC?4;P0@0aq+NRAd))MNO`6ieK_y>-QF@DNSd)Cr{1X}`RM{w!wN5%a>;8fn#A&C)c z)C@23*>KJ(FWVjBMi#1>u2WM8wMp7ztT1Z?Kw95Mnv6RIU3l&>J1JPeK& zc~mC?U-(IfgE{BT_7^ra z$8dm}OkD@1StDHN`afYi7=zqBY!kxY^dU%v^pEi^cq6oP+h4_^&pj9RddR5j>|rzU zFi&5B{?31i!SghF0kZ}|W1VxDcND2xptl9a&5c>UVo>=La|~c@cVHQ#O3A#VP}&ku z4#>ZwGcs|RSV5g;DWGcDu&vNeA^?sxR8?5u7Eas&N(;M`03YeiGN#0 z%n~-~rq6-5U=KziPwq$UT8Cv+*EV z%ycgMpiJ?l;R9mNP^BgA)FUv);L)2%WhTgsgAT~0H0;S9g z63&UYZzhD_8`_Dz^43tU0hmn|P1gzlVlkI!Gf7Hr0Pf<&N&6y(2NNgv&H;#aSX@T8 zqp!UQ)Lh$L7imBFi_`{^Q+DoLDE zAdT?cy$zoFuN}}+VNk)%cn}{RlF$V~Mo`^OLHW&O99z!e6(TzR&PHW0N8G-7GvdM_ zngvchvH^i{w;{U8sMdi`eYk9~*?$`Ru1x^3XSQ#Bt7*FAV9i0#k)Cs*O?TmZPK zWiD5rzom_3IyP$a5?b@gtKqxJHR0f_m2@}X-la6!RDdj+?pntk>qF4_w+;QU8)tMw z?7emFPo`LK+jxZ1yJnD8Qk3j{5N+=D>T_clfmVaKJ1eYm%T`eWP;~uEE^vGcmo7LA zw4ft23icYrQYwh9e4N49mI^$TACpJOi1fNH#pHwA^BhIkcX+=i3FHB~Sf!u()cz2! zIEsBZ?c19DHLO9`qbFClW&u`=Eo?4 zXRE0NegBY~2*KkD1Cm1Lo#hY}o56>h0srC;Trt=Lh@i;eO3S{(ppUIekdqbVVGGK( z!p|P{6@nli(o`72COLDz=%?V=mb%FQSIcw@|A&k}8w4j&b;Kv~X?|$|m>rmI$@u1J zFH|uHt{H44VK}gj@zN9)=yK7?BLhm7=*eSIW?<%YE>?ZLr(^{i94pLE^`X+~(An6u zu3WZkx&Wy^?|x+axFPO%fcWT$xFAnr%7m&7RSD*zATgkoZI+k7t_(*hCS)`(&enie zMCiYI6L9wSw-F~gWDFcERcFn?!|B~n=r;RGi#qWbadGIXW>#h&{TWh_pJn$89~>rS zT^!EsdO1P%Z~V~679SiD-y`!Ppu5?NDHN)kDHSF&|0D09bVGc@>ShkclGR&tCwuPT z!x7cF&l23eu^l7P0R!|z|Nh?tw(5brk5q=RXj>*H02qf)`uPe}zYeL=*mE9n^FdF| z?6`P{j;p}c)4C4zPD#tX6hWDp^v{mRsYe4MxYSSAUpEU$@PW3+KEA=QLSucqE5k!N zb^mlivxF&51)c~V?0?{|Mt-f(xF(|exLZMWZ|RHVi@Z;E;of$C>NiEV8QeG%Q=SK< zB;eVhb-L(9BlhYi3m>MR*T|F;1AQta188o@+q}1&c9&);nqKg$MPVo-Ynn3*kdM|) z1G+7ic>d&_-38E@%G!j(d4KtI@ZX!88yp#8Fd*73b3OpN3<5kE3i(IggS;j*d!AC{ z;qvj7Pd%9G146;x2jQvD2g7V@{mmZMDFv{ea>PWQEd6Z^s6UL}=A>}P$oJq+1rC|D zQy}HYiy4De7$@T#RY&skR7Ox0Uj7ZZ4`O30wr`Rf90=-fh(%-J6r9Z8u=mBbJ7cOa z=J;%bgm|rQKA0eBtF|s@Bro3i2AF|NbKMRW14m}=7F4yy&(uK>zkBD zKoKAo?FiyS+SYN)l6*D@Sr|$7UqDEZGPJ98MchSXSqh^LR1ESb&DLXGK~rk5Bh!9U zIgtBAU|wTSz=GvF$@>xJH=^llgCx7n zBGmYbE)1)b|23@bm(+3d;;-|)K6#n-QL77)XaH8#%gfsWkYg}%D6%ZnvaO%Cge} zw95`D5*LxIXj0=}2_q_}9-+N;hNC2iJ}u`reX~}y%>#?5{?70@l|0Tr5vVHwAUbcqW zIj;_S|8*_#w{}xMJ7`T~s9t$W(UM6L&!?*=z2nf>nA%W8C zX{9ef_H;R7!@QjM+8fT|V@w$CO(R0a*_eDuAgI>(b!$E+XB0{_XK#MS)6wl zqx!3GEwP^%lKnTA{m41x!|*H3iE_p5v=l697F z+hg$>8@ozePrk~T)+bwj2PGvh>DYxM*bv{uR>U%2afAk!Wp}=t1BLf6 zMFv1XaP^`5+B$dIjpojJdnd{x|Is0Yh!6c;E}??*kL-xG?hTW@pmZ|4{od44^IY|k zpUP(R+4bbb&ODS^NqLxk+hdiYUZFw6wrq{aLYk(1+C% z&>iUfgsaAs{ilc*(~~g7|DBgdh+YnO7^pii&Xim&s0DpxLndzGp%+mJ!b&0(;iaCG zwH|V>KOtNXwBpaGtX#Pxz-cojM^YjsWg0G4l~}%;>)71nE%McyOQEiFt2YTq5wfm& z&;v$sh_qz?2QmRyGDel*2MypOQY6RWkY-y?D-D;XAqZ}d|c`V z`rKl4VfF)RFcP<8Zh>31aCswC^x0+DS5Hc)=?CV)z6r^%ve5yO{myYjgxS9x2-q|P zFdR4wB4s_jV~33Kn4o@0<@99i;A4E6Oy)&dgTkmcEHsOP?l8~7VlaaaJu5^B_mp;< zadF}36wz@3J}T*%ROGe~E(3I8RS%$?0XD|?Rmwn+eb^NyC(r@>hwa-nF1O(!0dHR# zB!o@X7bE@>#x_eiKQq`2?Xq0MA}W>HbGR6fE6I?6o}Cw0-ob0!}pZ?{SqD zTgF=*VE@(GE-@i7W2BsA*0ZrIv4?CtFAZyt&FOM3HhL?x^m+NxE0;FU-2GR`P5~0& zoy26Bl=l`JQ`aj&si0b%OKzwr4jknX27yQGLw1r|c#GnF(l9T22uRPVf&&fJ`Pl$x z8uJLanmgz}R&yRIwB~4@VeG`Q#74Pb6DeonyElMRSsZv2`pT#1X-nHk9zN}^uXgYV zdto@Bt!o3_*UGOod_cvpiQ6{Lp1l{xT+)XF_LScc0wL+&QE)pep(0qfOb;fUvHWy5 z&PTgg(?fBj0ihSqHFzH$dvtOC;zy<9j_9h%lpj-GaK!G$pb*(~;~JrStG6|)GhF6b zkMhl3^qZ>W-?)#wIg7+|3ZB~0#lJWJW&1s`q@pyr9X>;c1jcY7Cfevpl=~9%l1hoSu6r^PEuKIU zzLfXO3=C~g#5AqZXJm+%N8+jqtYANd)&K(&(1<|O{|452Xdf{cS9W~U?0wRILz4W}nDFE1cPm`+N-X@whYtI)CrCMMpjWP%js+sZt? zbN}lYfp(in3cjU~FOLVPb2G0&ud8lL&$zda2otbJ zm3~&60t;De8Rp}L7OYgVlK-H`{l%MEt+Y$^P}j;%R$z&h_On!<71VW27jLn)v=-gM z{P)K;g!e7-FA*@%P&!C2_2<*j>x>dA3U_>Xpys0EnT=>l1uZyG;*G^MG;*@2NLm6B zH5fyBzXpU-K5Ce+Vqp;bTPhqGTLBqEKVy6&5@{g`kUgBu>26!lDJFNT0DDt{ArH1h zpQR0xB#^Jj;N_LYoy}!-fV|^3tr^GnXJ8l~W)pC~VU_$x;OSGw-4&QbcsLf7cEma6 z{n39ljzi>zpD=mQhXX>k2@bF9n}X>zqBp}c?YQ4G(3-KNeaJyUS@r0@*n~-;b?D6T z#UTtnx9R^|ku%jxG9eZkAVp;G+>{m~%VO>+pMqQ+0`l~5w7LWFUJj_K_R4M{Bs0^A z0$*S2Ye1tl*4`U%f3sw#9Q~MS{fngCJ>M^#kp< zw|6#VFM?!jrQlF5%oL8#JZ166C$@;v43c;9@e=&|R_>_0>rVpmqwtyLD{v(XX72w# zL>`9TM?Xh&COO6a+9T*M4$vQJzn7^Id2jcP^U_(W)ZTVQx1Zm2?jC?{J|KBzGG5x!EmoM8VN1Ny>S+w~bT}m_7 z`+%hz0x+m3+RE|Fin=h%hxwUe(yjYMb2oL4X^^awQEF1%O%s?`xYu$h;xtQX#!r?I zO4ed}eQy|U8d`7n)kqx-%Un&?Ea1}+3T7P)u)(EoK@WIb*K0U1wSu3J10DeW(PHY{ zloTI-Sz5xEBM1{P%{tPvx?%-6?|JXKXXB}-2(nTS3ch|5RRMi>qA1x3(4)?Vg~E6N zW>l65#g9|BSRz_5#_)XV5ELv-eySC7WBBE?j?$|nYVqFRI9hx__Y;YjF=#hE<53>d z8e`OREnnIOl_1AL0Lx-JGeC7@+6>6+uK+Bep&7nn#`$U*?~rG% zzNHV~C%^iK=7E{C$>C~7ay~Gn8|%xUh!V)0sx$H5p3qZsSZ4nNBnSM>7;4k>fYV8y zQpj{?>sb6ZrkzUP)j+0KI%(idRQx5v!!-ODrXk)hj#}N8pf;hH@&dkv@r>G_)hYS^ zKliN04Ceuu9xlRL-IYKZPAks{zYrnhQGX0WY9RR-?`9dC0!-f|0F1TGLkrny$!AFc$To3N_*nISBgjP? zDBDoW{rg#tOuR0@O|a7Ig{?MoqI!z?0CY1lDRe2uWdv(NKxxTx^SV?(sx6QbDr6Sg zRTQCr9jU>oO_3s+He{|(>F+6&V6X(#85)wq;ipa6{sq@O#2_TjtUs`7S;h7RVE9^= zSElns=i`9-)Vv>=4PTE0{jjwj*z-{*;~5|jGG@@E1Z>E6YV)}=-;=>QU2l6jWo<8# z;q@N1AA)Qya1k>_pS|0Whw+0e*r;mv{R7m00koE1_3Ctz+xjbm*bUx}u%pz3Z)C-u z`A_R#n`PqsdvceQ|BnD-7{JXV)5S`Ii=JB=(eUoRkTS$morf3q=v^@4@L6-~$G(BA zGLRy&JK#{>UTmdYch{dC8I%Yrmt|<3`wfC4nZ#;vE%c%uaOc(G0s+0=!XBaM1b#r^ znJ2ZcADH0GH6};u41T?X)=Jd)w*8IP#J#_WqOtxz&e4_w;H9(XBIFbGp>lcRD;O3ao(Qx!E78<6Z!Wy0A%|lJq?jTKW54h z%DKJFrc9SK)eZ)Cj|001j694`|+IwAp zluE?+A>=Q9yiG_B%$S1$Nco4w$#_1}$r6LJpxKYy4S80F^=!kR_%FP{3|NK|kMbec zCoqjVC~AzV&{A3hwAHt?Tw+arlWq*)<^Cij&0iJ`TRERUGbj&vDBJgnR6=9TIk0YB z=C{hGKdh5FaGl5}E*lbLEr7r$_X?`fRDJB=dm6c83}J0+P6dzsIR{>^WkP`C#W#xH zqmvQ$9T0}~nMA}U+mJZGETkM8nKf~g9OReaX`_&`ICNyFUEj0bT=<#mrF5e0+$zu_uvglvM7_75S-q|#qgk(H8-dSDGxO?RN1!SK zaSoZ9>@}~xHN4VV6-E+r^?v&C3i-d}1D~#vmuX39<)QTi1uiNye?fB1KO^z|9A7Ky zkHj;AXX+X`OBFs{kv!q#Pt=<9g-^cEy2o+7BkY$q3U=r~Yo>E_OREtQEKezRUDV1PB` zN}ijrpC3>MjUhX>cGHB0AB~HrKw*%zRH`M&_Xk}zc>_pn*BT;a>esX>Z%yb65SYA| zl^}O9YRrHa9wac<9VE3V_~XCORxElYteGt+ZpSMk9ejk_J~ub=Si-+ZqFTx|Rbm87uVd${1IAkYf5z_e8xnPMYp=)Ff)r)K=)Z#{(4;dv zT)THtEi>qMn5kj=eHqq%ZVfF96F7=sfxrs%T zD*SrT265!VRYeT~#hgKLjOQs4BvEdX>l<-9sdrg!8v2AVffeEz3Cym3I)yn{$XMuU z`*k78xKt@Wy+N4cDYXPufs~kFi%}rom>2iR`t($_t-L{A&K5UXDmU~qGLK-yysAZ1 zII!kX^flo_ob$FnkKwTMm)*^cx??B9qa^nxIcIS-?gC^&$%5)~FOz=ppYXuMOOBW9 z9FE6l%+;dDcOe}y7FDox0Bv9?F|5zI-h!C;L2X2scKvmD3^M67jyb9FeDnEvHik(w z^lPg6{4S`zrQo0(VXu5$9JqZmSf`dR(TjWEN!7qF@l>~h$TW{Xm`u>YermMod+PJD zV`jTvRQ#n;cgrkkbtXd=`BOWbYw8b+9=O;Z!n>5K;U0cO1=kQyg}hJ4(iHLb%Z@v- zLDBsO+mgRATTB^%^)*3GV;~6oMd*o*RCuPJCCIfjYL?a@%t;j2##RuwhGn(dmqGC$&XukYr;AZ9xsla73%^7^{gy!?qa z#J8!YKbNQ~&Qy=O#AWJQz(tAI)ZHYI?VtUV8#Uc0Z!TGP{~sAE?jwkOB<9k6TBkBM zIX50DIs*r{15~?$=BEL)>sfFZm16_N>D4}llJAPrB3qjDgn^R=x3EapWzTz)Ao+P| zWSim}JE~w17U3@Y|gbwARJ^+6RrC zi#uwdzcMQfkQhZA;HI1*%;g|indCnAsPeaYRrV^@h*=ehHBTs|PJ5~!@dr4_?KniFZ<49hrWc7weXm!v!P*7@n*$fuK zGD9H91K^$*K00~AGGAE|-(y=z7Q14g46C+#SXxuwDJV9mU>RL;Ndd*0G92|Lrsln} zzA{e7FaIEv@sK?Xtix5Ed>ViZn4$6P${?3jODnZogY305pA|MbRUlH8-5PV6I&a!< ze3#wtQ9VkKAc0g2yJFbDu0RU~6-Z80bG0J5$Y;bJMux&wq^M>YT}`M&{iP!is^=Ji zn#05~y4Tb~c-`f>+U;4@kzwSH5>!|&n(r~`Sx86~qCD9%+t*1W%`!{6HwhI2Dtg@0 zH#_shgWg44y-YtoT2|!+my}n~Zb>czDp70p>CC?*zXZ1sT_e6kRUgmOCuP~L2Mp2U zt|DEEtFAgHQeVlt*u`W6RzKtKW8TMaVgK`X@*PGQ{v`Fy&|qv9T^I}_OY2YpC8I}V z3q!VUfF%N{T|c}f^Rb4z{!JH{BJZMLEik8`mn;Q|KNPbyS?dYx4iXP@gBU^qj<+CEu zEiO1`1TIGQ91F0WMCbzb17xjnDC5fIhrzn7&68eR;^6Oz*AVzJ^jA@eG#q{8jd{m~ zkYApYg*x0^I8o0oY&Cm%c9^UHrg+j|j50M*0_w6hm`}6yBaKKSP8gfP2T|62hR9;G zVR6w}E4Yp78VG1POV#lHI&+>m3AaH;cVz(pJ3z$01kq|Mi|}ulgg?ULfW*J(l0XyY zvObN2FtVXlIc1T04fyBoDrj1#_APk3f}Q~unoukiJlu1?~w#xXWxdQP=oiE>;c8;3P6*-TR7sJrk%gfu| z8!n3ilqK|kd^deHUuTMuUz)e6aLeWZR|{EQLS~|Rxf{e$8`f~mC@}%L7Q=?g(pdot z(0s?a}=HB9ay9C@&rqRZ&rd;wZew;4--JuyrzFQO^z0!^wC$T`mX%@(7*p ziy>jrTj*2MCGX0RgWSce`muHNkE?Uw%1W5cxp#PtoI$Itn2!a=(`;p?2!@|GhHTA> z1}M0YYe9PZ5V=x+8uN)5YAD04p!Dlb4;Dv(e~2<(YsU5XPh-{DY@y!Hi3m3V3$H-M z(Zf>kmq@9D5(HmQgpW#8L(KEx1JYY@crm%hPLhhftr1BDrTpAI)Px`00{jA)mCJOh1pwNM0~ zC$Oz@aPlcI)gfRs>ZK8=)}8l}+`~;bB)k%|m)Vc<5CaB1_#%GBCfS*qADxv)!= zit`;u48jb#P>)(w>55Pzf$u!vOEn?k4+5ra-uA-Bc^`X8?|nFFI5k-%pcl-%n!*XZ zt=66sC)z+J&OW_exc~`{r-mppRQR`I(m42l=Q+@9d5h;`3FH|jv#LKToCJ5T76x{w z%%(_s`HoDR_=u5wMh0t0uq4U@_l(h)te2kHIOY?ZKt~4OD9PheCM379JN$xA?!11R z@MzMp1Uv>0xPL_cC|YA_vMayV2l~ELp}x!I)Knk<;)i|ZVl5_Ty-5s_qNfo=F$|fl zkq_@S6^Q-$hb1_=yj=27P|o7tYz^Wyw!o<{7r4eIgFdibP>!w-+8&EYWl}CVUZn#u zY7y0&Cpdqs6tuiieMT0Ryhh>_B<;mOxZu58DI#&>jY;3~^m|-jJ(9@5hR|pBK5H90 z_eikn9_K2hqN~kShl5Ffc7RQ`(W(3JcL_Rvhbv%=?9~ee10|uTz+}N@Q@KqfY%`-( zX%X#N!Rq|#cnX+-eu4Q<{dAmrZkc{j+;g7Tlr#YBeT`G*$mQ!&IhsMge>5OYSzbPA zD5Mm4`CnI{1aWxiba<$dJXwj#lQM*Z<|zKefTJN!2Tym@qqAI+cD!it{(}NIu3QaI z0K^EoO<*FOeV!`gT3ul;R}u47c|&US=J5sC_t>lUtUxwce0kF*zIemqA$Qrqa*sT? z8RJKx#Ef-w!m`RIXl7Mfw#dV1IWn`F>ZcpB{k|NxNWQ&S3&V_OL+S4+l4G_#bTYoq z;+|`#|8p4q<6Z|aaL>M&)l1;bCIW6 z$-{>3pT^WPF~K+2Lg#K!^t!o8nUd)Es8C#CWq+C1~;$7BQ zLc|ifIKXy%-lY%#_8wd9E>`@-x+Y$~i>?|G6&;K)ZjwtoY@yxnyV9Zt4N#^yX_$b# zmN%|81bf&6E0B|qPC|0L03d3I2n{->Jg~Z3%0;1vJXX_EXDa3V*`Q<#HBpE)ueAGX zO$+U*)@Pe3^C*evT=ng;uWg+vbzn^uDsRMgSa)!mAKC}}$QJcdy-PO`OC zv#W|mojXphs|IjoQ9VrUa8jd0ID4h}O`_EoF%A}U>6kt^z|rJCmaC?+w^t%xO>h}C zMHkxY(BV7W4S#INcl4Db+%J_2UIL=g!8T%P7=CZ<3r9&TqKkHplds+(b=mHfpwPD9 zSOJ?916fib5+4;ZoH4{q@r>eG#vFEi2`Fko8CF^wj=7HAEeOtjJAXds>{x=lZ4~ZK z5G>qP?fbVsu>;XnFlEzCpNtw(wzlGkGTrSxHzxMGlwA5_;0|Y!_ydv_;2^`uBXLJp znN^=?njqYquDgi{yf5ANnGgVJpW=(#je)B z>s}{)@80vo6pqu<^>}4Q)-+s1T3JtBB1B`ibXio40+w2#kXRFBoP455N}`qN$vO(G zdG&xtPMUpa%B!sY%_rt4CQt?U!zd_3hg<>x{5P<>cKrZ3JKaVi$izBCULN!_dXhEG zB0Y&5maWlOUem2slyvmXan{_yr*p+s>V?ljg#8t+WO?J9+R8%Mzs)U*9cqdt?-wVN zYOHN&JAqM==#Rjc%7yhAh`M_o@JNZ@Bt*AYnAqPnh54f{ROuhdG99F4(>!u2pSo4&AD6HMPJoV(V02xtTM)Q^Xj~g)cR8EivK~9=6iD_9ejI8UZr0+oBX+E0; z)&0_qZ(eRJC`TxtZFQ~Pd5)6 zl{3wV3D%rBt-J;=w7elG#< z3?cLtdlyHJJ3IovdF+|l-)^AP>|)iM@SUp8{3pJ+hDrV}pV6ICq%&6~JX+&kFYL{U z5GBvl5=lHff50e-Ru%w-jv^ysRE7-Q4md=|zNC-_UA{rLwnsxR1B1A7X7kAt68qom zcPo!@LybepW68de8~RQ0!p}UA=wybo;QzgD`B>c@z`;kn-M5dixw4TW8FqK`EQffO z&-%aqLoPr#Hm)OCMs(&kp47j|VL=yE!#287^vsJ`zk1rR=xd9KQvS`B)Tnji+o;cC zhr_U2q#{{9=}QvBp0RYwx-sl*UQ<&5aAyll-Ito6*Vv_7d<_9=`{bITX@a&_DL9dI zoWwZ)0DdQ4MnA;aG0bSl$US0jN;947Zdi)HZ&O=;#VKv%@=tHXMFm{toG0_f;&(9? zN@9lY#d!0lc0Wr#GBV{lWbKGK;CVhpgrU#OX>>8!@Di(jKVK1_w{WYYmHf$e30(V* z1g@qO3(Oxx#c@NY&hM;pT@Ug7i)s)%il1)54-rvI4jiLpH4MQ0wpr<{_}`22CAjPno4V3XpFMbDC0|qk5gffhvg^wc}q}MqiD;Ez0LZe>0F6@%x`7>^yPJg zSsApeU~I8GjjFQYiivR1JfFyJGvDSY`cS_Tk~#F3F9KX^Q2JVhlO}XCm}FC! z+c#r{O@7sve31Y4(7wJ*=WAv)L1e`p3M4>xw z2<9;@QTG3P;FIyvhR#cn@A$7=3(|IJ#9{t&my&f5S&h>px_4p zDrCC#B1`PMD9?4*aQNKu257E(?Ie|7EH%V4Cld=q)!di~)16W*Q<}G6adz|p3Tz5_ z(8MJ#={3#t_^9B>DkU#C!wYjW&CPbtEfKcunfA^1@iRRKBjd7kYfcO%qG*S!a5MWk zU3FhQ#ij1xSG@jw`T&uO*>v2^DBYkD8)AA+qd82l5X<&ov8R&u;GvC_syPRsyPG1Yp*3h{jM9}Bc=$xK2|0s@De{;^Q&>6#i7#-M5hCXKSNfKFwnD3PTDvLT0+Fu7 z-?YW_K3SBIFn~PMxwsM~DM<%$Q?Kf6mtk4=a%AOBe3u-6`dF1l_7~v^Bpy9_gy7uy zal4#~ZoV?SD`KJfi4*Fus6M?_I9eUpM^+Y7^*cX-yZTqw9^JUq$H;ND5u#8uvI@V; zdqG^uoBdP-1CXRE(}15i?ow9<{s%ji!Lhc1*qTAnUY``GhFrkXnjlQsDdZ-F>L%~g z?KtglB1i~1DxjfbDIlq9N7_ef>8_Fit4tJ)xgeTRMS}V0dfc6~9yzVr<2qa@L2 zdR&RDZ-dqGXZCr9R$rJoZCU~iT8omXTKNq6v8YB@mF7Bw;|Zgb1Bk-o}LTa_1ZeQ&`v|G~pD7z7(F z$qu%X-JzZyaZ_}eQAO$6l;yhSCxbw9GgMrGVDb`QQx*#3lXb~FX*Q~ zJCQFbx0%fJ`#U8*TA#B`;D0EoNu4(_!T6`|jS#OtZR^_FA*52%*|0XbvzPlwzHm=z zhtp;j)Ky^>J4uK56^69bXjbeZ@UiTdv3gl^B%Ye=vMRAGav`||yi}hVNKIvjB=nr< z_)_wSQ$pxM>ivyzxz-jhDYM?ZzUFddXEQHx7=IonG9GkeJwn>!1fiO72JKWb$t-Xf;= zng&{?cv*Ho+B-A|jnAdF8J#1bCo~oZ%dVRqnFgMs)ZR+Tm3Fl#dI&H7 z?Amsq)k^1pmBmx(QZtquLDjVVjJFU(nr_==4DO9kHx9EWR^Dgdf$LIDkr~rs6NVdh zU(yQ|0pJ97#k#6DbqlDVosh6N0`QULD}-0EIscQ9pvybybHvB2e$YSKBv}t}whkeB zzJAVN*~tK8UJipO-$ft7Hi?iU(cQQt%5GN1Q~(UjVwIP!k*vjysI35m5Ovk%!Im^I z)3!`jj(Ft9PKt8(r^>3L70p12>XtzBol}>d-FftGY2#MwR%PR86&}=*jvyN$0pU`X zMh!-pR1M^Q%3=P_@n_48V?|sn;JgH{Mkbgh@W&J6xBSu{>!}#O)=)rx1vun-ddn?Q zclkk@;5bGEwf{Vw@?`OFTTeP!=Dd5s&Pf$ata3MYH|AmIsDcAHG7-8-41D#M7H8wl zLXd==B`MmiKt|$T2{97~BCHyo^kH4~Jc9RjQD{M?^#va8I?Vyb~H*T3H^B`xaEH<#$e?C`+{b z0hf)P(PD8wPk$)lfLf&Ieud;?sNN!^9cP1n3g`E8qiCu0FKIorU$YR6wFxZFPR{ZQ z-8z-$*&WOaXRh7UBx1}^aW1>54k=OGgGS@!r>kLCzB2~dHLTvLEa4ChX&cqD(sEqqC1$R z8&sy-1O#v4MN%cO?&9td^Xodp#REg(enpw0Cog3b=HZfX>cW0?@NYpG8w;;~P2CtBx%#WY zBVLv3=e$|+-QHH};Y8EU2y{3%1Mm+R{(-!Q>K^YX{qWFwC*%kXeK->pwFcZre?P#e zS(t`Trr&}nj(i0P9bnx%%V+N2cU|S{pe+H9p^V-jL_Ub$f=3q8)u_T0?+qq~< z6fL@a5d2m2h{N2iPT!UJbHfSMDjohldQGk>YSmRsJA~vJKrnfP5hn~wNcjA5gQTvj z9ygO0dgA~UzFE~I9(Pvpa0ql(VIP@^~^-w3COghNO(d{anVv^4e{;uHbviI~KvUg19*>I98 z6f;B9&c*uIk1JKaW17Ie7)dP!U$(sNcZlABI^ys;MDJceSGo4>RTElPp@}*xe%WA9 zovOB~3ZrC)1U%b8B4FM2R_|!kUxGX@ZK>8`vq=)FM+$QkYtvaRFuCDXM{|^B!wjs! z)pW$QryY8+-Ej+NnJ?aP`%o0jo|R%gAUhTcKRz-bnZg#aehbg2#DskpUinrqrf;I& z<;=IlikITMt4EZepE{>hSi7!yE-lk-Pd65ums6R{8P(ZSr#19sM5FgD#K!7rRmOH{ zi#sPT&?TB9P(^3inMCuE>l+Fz zuDWf7`|rl>q7Hau>KO(E0-qwW0lnXk{1Ko|>Ow^5KO~N=Mq?#cTmcPKmk&_&MQrQ4 z!5&hvT5#H5@;+n3W~FQ>KeL1Pu?7o;z!lcHbQ(mVx}fpkGG-&?eF5jvCnXBt1f<;7 zi0M5(o9TE!-q?3ZX(<=2x*?iUuAO%6<;Ft5J6A^eil#N=JU-rZDnDrh*9>k-*X4eB zgvhTdhl%PZffL$t)5CN{H}$L!=Py$%hb*7=pb42LgG_>KA3Fi|ID{z0HQIv!FLwRp zg3}bKNPUj6RVAzUcUbsao%&zvsz?vG|n!))EAs zDelaS3fDt3e=nC;pYv0(ZE#moEdcAY#;acvKqbsPSC}=AO|Rlu320@BK}Nh{IxX^DNlDO&R1)O z%wVeVn%@Ay{v$vyTHX$7laflMWJ+O z;a8i8-V`dEuGdXJiCF=vAaNe;_1hmY%c>di;R@y7XRxCd@K&@q>DtleUsJWRGnbj* zV8H<6Km6-gKj(#lwU4(ZyzgM!hw|oDc6@UXCw}&seG-ZyQaX)MY(CJ$5566*lE_U^ z>mdI8m6!;}YwBC!xVaeO|xPVh9o zYGmD&3iAxYp?ku~;4ZMdD~wZ_Gg&Y=R)M%)R7=!GF}mN5ho@nsGb=}9j*LSD5dJ_W z{rpj|-dNKYnXux9VdX=R^;{2dfm`YCX;)fjEBl-2R#rG0iEdc{w^B=bm<6ubqW;vz zb1I&4dHd3#t`x@PzE{0!aqF%1yIVwVx^U&gB3u=~e8joFRV2={?rs=+mPFdEEKd~T&FqCg$>6q*H{itFjOmdkJ``4NU`JYM)JY~itZ?E-wmnES;0Qy zItILp%gtFlJ$k33%idyEFi!X}=7l05fY74(KP)m=3|kpquZy1j(%@++ul7Qnad7y6 zndYq)!2t`g!>~A&4m0xbA@+kOTuUs-aXFt0FL0|j%#f&fHe<5&w>WAs1H^(6*tYBV zN;+px%6RE)eP znR@CrlQxOXAev#skz_D#9iopEg#n*}+T=y-Fgc_3%~_bNTGm6otHf!i{clGxsIwkj zb~dqyY6RG(ytCSj0Hys~_O^8_HB0epEK0r!WasYfQYN5AAVozhq*v0xNv;=tnD>3v zWju-F;A$()>6pb;lzj}^=^G=YT;xuCp)cVNg+9f~0{(vfusaaUc$LgMzY~ibFnig6X2QKz?i#sqUd~l@N_f_|T*Fk3dRxmENR=#C z;kg`8<(3Wg@(;VSebBp;SOIjrs^v$^9JK`}(#lv)+QhOk4D#yGwyfOy#VL6t!gwmw zu6$DD(J5QXAo@AQLBtMOzIp{=^Xe8}qwbWc^|>f>gDY5fNRAeR@j=D>CUdAwXsUIVAWZJN#51s zYwD?@ZGY!e+$m0bUwqd z6<{0Uc9yoBacEHNNIE5nl1S%f1DfAKrVx|%0p8sP=~`M?Tzx&eOcVT>5bo{llY~$6B$-c?mn)m#U zex?o5STe4PbYjB$3Z1&2>JEzcrW*2rxdX3a*W?$@?n!ag-P%0pCSxMpJjvFyX3%)| z@?nru;S&Sr6x8X#Uu*jMPiENV$zkEdFL%*b8kt2eA_4@EoPXoldK~g_s1CMgYm#%~ z)Fl0k2swUJUjI3ThCS?neLND(z{4veEtT3Pgy7G#r;+(Ea`ER+2^n7nkND#fSv4HJ zMX8MN!*hc{Pv%nDi3`VjfC*A_HgF^ty-5|2tQqyk7E%tiKheZuOgC$r*PSGbbP8DN zEM<|#BeE;yYzH+82v7q2nxGRV|Asmqa`*VAAW*`H4dseCY+mqTqMO-Q($QC&;IB7} z@eYkWBfTW;SpYSzFP@>W{Md6K44?A`*X}!qWAugI= zQ0tz+a>~-tUY(p53W6YApwzBiJBKebb1-qCpVp9WxEa}iBQ9Qc? z>*f;|%6LbP1DJjN%$V0kt}XZX+~F&08q^v#2oMkfG0OPVt**cIwx8NiRnA3&s!^pn z?piAI!gA#>ZEgO=jsZmujOF3Z<+%@N&Fke=VeE>a#cjMXw2?oCKg1$yxVU(*WYByW z-AA$24K3v+S84e^;|>lk2WHj#Wo3N&gmja3t^WjcW9Zq=NWHP-yI44}1GIIBrkJ|USLJ{UTs4mWO{&J5*W>9!^RMb>2y?J&xR2F`Sb9`MDGB&WbbQ*v z`xPwMUz}{jZP-ERXvV`hV=My4wF{Qwh*O?dWmd%hwrQ@jasDL%}VQf`nNk&XX zV)Hhz*#oz)6h~IDqPkOQ)rm=H4vey&$cvX=b$!Z2jCW{KHSU%19-U6SKp^>hr`$;O z_pOrpe`j}xrrROS32*z$*8j7_JsPIXJ#8^OmK2tOB{(&El(kkgDQm?4z`!(OZ3{4! zrsQuXL+sO0s&LauV_(VTGE}Zz05Hj11$KO~$Iks2?HZ>6)b1qQnMI@lIZodWJI=2J zzFP)4F}?~|)QHCVU}vzM9etLea-T?x^a-OyAe%U);ni% zWSvFRzZ1?v;I&Qz_S#+TEu3hJQveV5Skpz5ZSA+MR!8RV(EaaIi&|qJ*gm)hGMEbT ztL`&2>EWSuPSr^f0CyLdzKpM5Cj#%=|MLt$z^%z55=dg&pls(g?;+1){)&XBD5a@r zuY~MW28!3F^!Xeu{u=%(AaqJeVd~UP>nz^^+CR;jR~y_OsgPB<+)nY% z=?GDzqhe`GBD&_+&Tajb9*YMQPx_`R_BV?8OzNTc)6`4i!4Jk@6~w)$_SLzm-!gPz zkaIpCVL?pI1ku)I!iiOuMM?@%=E@Te#zNi#_(qkb4m9UFACZ2&xSZr<@&QiVUn{gbeY}-9nP(B$Jlr9(9 z9O>-pHLrckX{ra5g}lTG7t90@6_bhw1_sU1TlEsSH>U`_Vk4~RghFE;7F5VN`pp$C z&bV=qY@>lOBvhF-y#Bg`K-tj5uhJ8p6=;j`mCyL7No$7&R>a4#OyY%)Xm$DeM4Udc ztGrA(n@`qT*OtVaYo<6@e{%~=EiuFhR<%*yIotIvXNby~bWzu~m+kme&3fWjbh;)c zE^(n=k}$VdN?wvYQV*)7lwHBPBGwk$^t7Q_>EVXUV<=`i;wLEHrck3B@oc>4=Bs)@-uIpgVi*YSN)y!063@I|S0l?*xRH_{q&qXon9{OdiWpAF zi!W-A0l^xN{Gu-ljFZ7ZMx3j-ZKJzsWI}ob4*)*p)CI9y$kVc)T_G8ooonE`DM|~b zLd^#X!`}A3~cCHItud9 zSmefxP1|$2VpzHjU?=hM?nh-DCbOF|Sb@sJr2NbC>y|WDjsuQ({iX;wd{?!ILjPz@ z(rF=bY(fJ%{CNPIQG3eeEJ#$78BUHgZfibeAuU5KzZkEz0if>)g+43+NMbW7j=w_8 z6imsexUcoDUPC#&XspzUbq02#`kDg zj4p>=XXf-h`UANBl*22OzdkSGi1?Ko^S9n-|Dc34cF{FO*gZS(HCs<7^cuh#NtaF+ zLOr6;^wG-|ChxBvFZtrcGli1O#v5;>kxuM%1a1(>*h;D3-6)0#T)=V)+h>|!#C{a} z0V`!lP>!iLn8_~PX0}6;ewm)a!1hdj{PTT>VC*oCH106fkL0j*?%HSN zFxuowI86!qkopSZZZ>Z#s(Cue9`B5P=`b`kfs5L=1?}2bI75W`jEtT>t(o}c^}{o; zRR3y+HVc_mm6_g9z0XnYR?})Qjo-rsuCB^dT8Nlc7b8}uaBxIkr;7|E<`@6UUaM{S z)X*vLLmYY|6-uqqdW}UITUmL*ERO5uz*k zYESe2;fQH=D*(%0w-ao1J)MuquMX9Db-I$wyNY7qj?|w5`%X7I2qPC33IErQQCo_+ zC2!(qJ9!M+$MFF0+snVg_SDTkp`L^M<6w-d!Q)VT|8)q zXUhWe+SxtVKY%96ua|Qw2+}4rH00g|aJs!{1 zOP^?qD)5l~E3R7OwrC03^hqb)L810S3X+dPAGqwmj`Bnlp%K~;ke5J?g3ut}yDAVW zGKB&qenYD7Y(RXaf((Bic+nLJ0vemMdldFZVP)y-Mq*2#qYol*Mxi&AM2`mVY~qae zV!8#rHp7k$axS9Qgkw9`vJMaPnCz9k(oVCecJ9?(uAc`wAjw?1-Q7h11ZS?R5zb^; zCoaOwN^2nO{R{+%b-|Z2OzaL*nq0B~Nm^tkeRj>kY0>5K3iMQ?^GT-mKN~pc=N3`^ zg(l1Z=#C&NORw-zTnUAO!s2oHt_%F$A2R(OG!Xj zkC!<@g~3#eQ@}CU=EJaNd;&ir=V9rolL#}BrA43E{!&_@qFjYETE)RQZS5xuZOdPX zM30(1A!i_+k7D08Y`(nh-k0RATGs+fZfBSlxxH(ELc1%tBzv z2*tDC7rPUa(6q5{R@CtAE7rFjU;si&b^BB*eF|Dy{~kYQ4ZLI{r11V5OB{hq9ZSO} zok+=SuBfM)&C#BoI1Ckj^Gs7PLS0B*0G*}+j+1*)#a8NLjyz`4>!-OmZ zw~h^xo9IlOCxk>T&6yX%`IljJ?CsLeDrTa#Ecj=g1h*?K;GPB=sE37V#+A9i`1Rfb zGZn=Zv4^Z;7~w4ZaE5mX#*92%%tTR!%}HbXram)Q72@@qV5ujZNI%io0?J3?1KMEY z8Qv#(Y{??d4@a|r2)+o`Zf9z$+RcMS`u^KrB24WGSe>Vmm1@&rch8+WL@(z=g@AyT z8e9>{Vir2R@iZ(rjtT8+`ElaLW3l!1U)ZD_{+X6u9(^E*Ke zxx&K(h!L_vp%?sL7i1Y22^BB#%+2-8E~p39v0Dd7-aEGlL{x(-%;0vlWT0!*I3v6=WUF(S%}A0HT&U4Zht z9=LF}@wCqUjd4SaXH3PBKl^lt4~e1h7BUqxAW9vtf($RNVa_;4cS z4=o8CupjHIRFL?=F)bj#3$%?UUxlI60{oG|A@kE*8C6~tZ!vu_*mf8+s6gZE(wFSS zu>*DXkmj=j+B7-zN{B`r5-nGiAJ*_}`zH`L|8{Aiq&9h&z52uw2_T-p%JgtmUCO~~ zFO|3i#OXU_Cj?P)&y6?eXRpMP`QdK3=jCDg<+KtWnSqe=3iNGMaKP3BH3%8<^HfVF zS1$@Ej+f9b+Tt)243)O(UGz{q^tvy1YWsGq3s+V+Ta2RNemv?F(zD`=TKaA}H$$~# z0Kk<<1DOlSmufg`YCzvTVHY|EM!WhrMBJ`b#AZt7{AVTTDBSaU4z9`MOSmnZv{7+s zvJ~#_EFo&)A$L{Mk;VU8L`hbJCg=A!J$VSf(svrg$&9ZZQDRB#v-)VRY#Dbb49V_* z5NmBaDXaK{D43DUZYZJih^9IS)5&V@(ok@)S_%IP<4O4KJv!}viQ#Kha>A=o{VXW7-BTer`M!dE7A=D9p`O6UXyN zFp1F?$8x(P4$x<4)9}?Ds$%`{@mm!VQoXAPQV|w>o0C`cGSI)BxZ53PF7u{9$9P`zzVueO~t-CIOg(*T^3d1+BZ!$T^1PKJL5;PhG*Vd;^@tz)JZO+4~j< zJi(EQ+x-HOH?IR^!cnUP^RH`RKSXHujYxKZ_|B<4(cGe(VEc1@BXEn96y+qJ?jh#F zgZs2e2_HG~Z4|yOohhWy75^suCu=?tIpq?405SaB0q?z?g``MbO9!)Y`#uf23e+Ir zkZ7e$J+j5^DC6jSg*`^$On=NAl1<<-+u?(MxI9O-5W^YEy7%5X@aW z$`Cv(O*4u5;>Y&B#}-Fp4R`Qg!v!Oye?9ivbM(uVn-Rz|MQzGTh15cD@ zYW=y5@%Gmqt;TaHWy>3$vtOAlw8LRQQ|<+OEQq8-Dz1)t z7X}J#$azpZrveI6cEN?lf%NfBQ6ewfg&e@}aIrlDZVGa$-x* z0=aI09hQwBE{3j0ER^hOmal$F?Kx;(+yyxM&I$_Hu^m=>jpx0EF;=IdH5qhi2Ks7> zh$V(J-(*)0}Elxjb$S7n3 zwliKdA?_yX9)9aO0J?PSZ+)``tZZ4!rPz3bWm1}%F0iydw-M7v1VZZ<=c8&p$-<|K zGea#8Zl_1ILWRWO!C#95caYoNn)jO?MG}uSFVa;jVK=gdHvrxL|I#Ku7$6hhNkU5M ztZ8k%1Ut!H&$FH&ESC~I!e@gol@-AH*)&yq_odMAM&aA)*~-QilXYw{U?GzB)-5g1 zK)WgerFcDorrnadlw^`A+YAe}eX?p`+vCqf8PAtG#i7zsdZYEP3_MMwf~G&U{-tJi zT(Q#0UHOSVCqKV?!I1gBM`bTS0M3$vMO}?>Qply!|0DPZ5jB;BYnXVJpt~nmF?|}h zEAIr=H~1VmR(yP0&e$|lQAP4Bf^v>q%QLZSnCO9i2$i+67hxB_ff5b&B(K%+uWvxIAM>1AK=(a@13{j^DBr5Fm%@d#A){$SJ%KeHY> z@0D(Q4@uW#`1CR`yGk^jdP zHFB8(rFMZuk+&k~%#%7N%nO4EZ4m-9?^3tlq|{rZD{>0+z&2(+{r>vbswn&`6)N%h zD|sHZm&bp=i3R67bdd}r?99G4wL~j-Wc+rZH_lC^U2wv`u`#*`7;=9evy^UIEhw#` z@5wLeOYaDjLD(1<4b@Cg5rY)dm77PBlx9kuB&uTi^C-9*dEB%-Itm=RbxnDVwJ(9|=mDWVY4Ua7W@KWATV=8J_5*g__10f0e3<+gE2 zj$+(a`?;Tu{1?hQv@RA$O@e1T+gc;6z9mAV=QRs?yAP;gD;24B41g;=lZr^N?r4Wr^oA8qeQss@kP)5i2h6~+=ByRklSs8tJ-m-5E`bgitT7Xrl`Ra8-yS^#6*R% z5hg;8bCN7l-hcJ^UdOzLaJ9ku7Za`gPJ|X0L|WXB{ehVc7_9d(6VJ(lIrh1N0a%s} z(swfqo7205-*1CJ@kP@|JPv3N-j9-G#|r_9>@ua)a0c2s9ggSqxxHV$4;IS1AtwR_?`I3dMKjTwP|Wdx+#w|@KwP%bq!AR|y)nR0Y7`9d&VnvQAD82gu zrZ0Y({pY4}qfKCIrfx;;APY)W3QvW6fhu(re#CEGlec3X!-B3$9KDs3n*x{=B&qd0 zS3#GQr8IJ1)d@8YYAl>qp+lJaNo=9XSa=C$;fk1Gfk=yORU^zF2)@r4OmXBf9j(Kn z3l8vY6 z?qrbo>$ofAD8nSQf(;}_6veHT+C7~y)HyEvWfZuuG`xZ$cF8*Dbkjqtq>wRU%q4F~A&7jn*J@XqR zA%&s;y9(ws)iHx$BoJG#N`i73H9tap5;!FnVc^d>SFklQrH%=jD8WIH;gI^j>(u|- zAQ-+ANsMbc1@@I9$L6Q%u|4CYu#?J_Ixsi5>l(6EvZuPVXL*GgITCE{IEz32-z9!# z=_aHwIe(M2Z=*Lm6vR9?unV0j`R&jHIUv~gNDY+LhSM)8SB!~#6&0HRKS030wV$WF znS5tXnYtA69yy>9NQ@cQMCQHTd^bN_t*PI>toCum$Q7T)wqOrwY$n0{_m@Sq7(ln` zo1uRLZ5IUqryvPXAUT!3eQY&bvXW1jc)|`*+Y~87N^%VQShoj0imofCV(ywRzC^R& zJa7G9mvM@z85x{G|36khmfEWLP#>L9UEU9JYLuxXiZv@KX?HGc0$dYa`3#Y2&7PNR z;YiBQ`~F1$6IIU5i%~Ke+NMlRk!IfN2D(;%upx7SOcdH6E(Ymre*I92Eb}D%!IE!- z+3EOILNt{BU1vM43|GnvF3SB&!}iI7A+e%uC3NU*-(r^l-A2s{)~jG1V2bxLafV`d zsh(Vi!W|+i$KqNGl1UQ9fwCtV6G+nl&lR7XbD_5uTs-F61nvC?P#af!tu8EM6rJqd z-^2Jl{Bt+Uajj5(B!}rEx^^+1pa6}aQQ%b2h6g-m(5eto*wQ{myyk+eGU!2LiYkgg zp!B#a?)f6uIY)k`X8vl?bv(3JNx^h$c93-Kol^TQWtyut1sMRMd;(pXZy$nciRG{4 z&N13y-+NTo12%q`;AjNZgf&#-gbq}RjdBBEGZUyVjT5yN4&0ESpD?tmuSix~S4&pj zM)rRxEgs0ne#qR<^RZf?^4XEFoqZHTyQy?2tA)%a?sIt7x^(5|#QJj{ zKXnQ<{X!m^o<*CIo3NSYKvuaA|HfY7a~g<@UTa&jQ;=WcNpc&shc}+Bq89)sRF%9b zPs+E12BZ5D6u=o8yQ@7Bp4y+7pQK_0?d>1rJAOjABerCT;9Bq=UzC+)^6!F*mxp&+ z=jPz0cJ|niK^x4bP;$*?GyhomMFb|j+s)p|fMzy(&ggx)%|ak5k}YZjytnspkc=Cr z|5yYF;*)@|TQtedfil3dfpVX4gE@?|tG@{RI2eS;8g04m3a~%QJh5;19&GR7j5J&V?gJLj)do3PV4T( z%C%lz2D=Oz;j)@0H5(mO@tx+BpL%hYe<9+uNi6btEOItyWo40VnuJC(pl|FmGQJM7B=?eM^uhCAI&rr zp>ogE)lo*SxR{8@z;fXNbTHK^^ZrQ@*q1&5<^nm{Mt|gNIFC#3URL%tu`|z~Vt$*) zC!5Uv-B-T(Z(?zj6h1>P5=*9A+HPTiH;D&3+{jv}yvmSbNw_J!M1qB8N6Bh0f7$Do zIG6@=81R^eOVohXoVt z035Ytp2Sj(F@UXsmt|u7#}yMUX@7$)8Wze1OvC*={j+Po5rPcKk>o9OmW$(a9CPz> zH=oCnB#Yx=2e7Ow#;bxy$DX8VA`W5ys;CD+O}belaR_nydAX~_W}^uzN4C^wh+A6Y zfzeQi3^kS@3$1iUJG~mtdjQ+;tmeyjW~M8L23!)ZEFT9Cz{2laQBX8KkfR&V7Ujx_ z<9;4pz!s8cE|m$xXV%(XV%2lzz|gDs;DgS#XXzSUuw27M_OZgE`tNn7XTHSi({8)0 z4CtxDL4cX(v}|tK@ZYutrBBN^e+bf58MB>cgzAWDYUH5f`hto~rWbjE`4XZHR72oc z#kLm+H+@{gwF=0J*K%tBPdoT#vr=Y7&JuWBHbixz3I*+@191j*06XJ|5XEZB_-$() zTEBJ}kPv#CSQ9;KJragt(;P_R?G?I|W{fqdlb*|ZVc2(B3eC1~2ng7Ldvy+TP)!$1 zV3g`gy4gwAdahI_z8-~H1AS*2b#F|U;w1pK9icB2`V6c+@|UAh)=g55FfEHBW443o z#r#ftR66SjCiY$P5E{LQ`B|GHAb-v)o-Q$er|C!LgrEn0hDn?^gf0eYKZPQ|&};XY zLXw6YckFG`Wy5gH!vVU()XdCz1^#t@kJnn6V|z6uqYq&J029;c6kHFv`~nQHJ)U(I zHc&m-$&68zy;C1_^8y|UOL(x){m5AXRw*05d>CK*CHeZo9Pm^zo{ThtVI9N>-6cw_ zE#PYluRbV2y~H3ux96?Ki}9SoE*>fhZTBao>4aC9PK&m#FFLbugcNxB>{oDa@Fz!3 z(1Npl)jHWXTlA(&Y{P7qr<-=L&!g>O`8pPrdV$A`-Sei)O0qppsl5Zw9X)Rkm{s`^ z5R{R*>^C!^FL@ezXnrnl%pUaW6v5G5WKp)la#2~MA?subM|tiVXQNjhGxF6gQ61PF ziXg2Qn6Sj}88A(h2cZqEPl7{|zp-Z8CU$CLvH#~8GoYsN;~iFKX2Lpo(J`WNIxjdS zb+{{`SQ{Ff6*Iht$!`sVKk4U->@?ncK&ho}gDeXuh9i@N0FOymXWK5NHj5S^lj0S@ z2m=JrB4=kXOhV_wb2c5B$(?oS2g2|IL?v3=@&1ShaJI$X@vCa)CDCF)X#BQNw!*+X zg!vfiHr~g_q8QGEJ8;#ShXo=(#zZ`t3*SFP^DW|~BlVaX1M8ChKnV!p3a@Zdv zc;4FQA+@3xAG7h&AJJ3`{col%4_==fLTUjcz=?QpYk@sPBhEeOu2kDnS>Q&!_0L& z^!2V4sa(D=1Z z;XqSWIZ4?GnP0@kuZ~p+ZPTq%G+fnp;c0!Yg_9=GgC3%7#3byUMPW!*2=VP+E5;S?(iWAe|CjX5h{a3F&i@M=7yL};F%9ig4*R6* z@s(kEEEPOn4T&r8>JD9K!lSu!7!4;krJ4y&dVt4AC_J7cW|*IHLp`nt3PUFNIVNEl zmJu9Osi?s;3+_F%SIG{yx5N6+W?^4vugX=Jn5v|aHIlqS@;xQdVK2UBrQd4@wu^3O ze|{Q^5#g-rWf-+PoN+=LlXV^6HJE|>HAoBdq*D`~+~jyJ%t_sw+`zes!Ja#dcN27V&iQO0SlH;aTv1vOG>-we}TORsD?dM9r&Drh0|gLk(;i1B56mkf_{S zi@2yL^n(UF#{IBcMfCjtq~ck!d*eO-u<{O*2}M`LUX!^cBH(~ipfE#HT{0EG~gX63ABPgxUnr@T0NtwNVv5=QfkJY&&lF9jC zsQ9x-<;5cXSmmVaIBsYnDk70jE85gUVyWmGND;~aU?AvduTJ#QD!Z)mzTi-6JWo07 zb`E=F8hHb)4Xgi%sejDQ|cA4u_#V@3I9+cwS&UUuEji|Gv(SG17eHR-Ly7DYLX%5zA6^*A? z`DX?L^qH|sPqCEjGnLPUbZ3YfGFC;?H2d1<+1%{V?8;6Z{5|GHXvp|=v$4(pk**Tb z2;G9ug$jVZkBArkNea`;dSJ1=6 zBO&clei6l_B!g;mtulrC|99O8aW$K0*%EH5lPV~-GWL!NAg$rtYg;N=->iJCzxuvd z;lI&nAkGt)S_;K20J4UbfmL8u9k=GDEI}@9vc&N;b?Ex3lbfKOvp@C-w^!ZH0 zic?@dk;+-Xt(D-G+gdJ7(vc9q_0@9l=ld!R<}M~4*{3QOS=_weVx!>=aH+=D6nGW* z?*iNrl9(zd73I8@!!NfFC70ZH1!Nf5sp<2NvR|4Du#N34r%(H!3n6f%(3T zhYVV=B#pC8_~%~pzff*mslV_v3O5btSy)9BGLb$vb9D8c%ISl#XQ>-ZR8UdHnK$%7 zE@ca*6h-n-ICRVpzmUo%p-hG|L3EP+<%jx#Nv*ZZI7u1_sd2@BB#=r+psT;D<_>KU zSVGy9%MM`WfEd)ohX;7=4#+toQ>^UD*Sr1W`e2;rLpH&N$_b*a{%@%gPyNmJ-d^ODjLrHZ~fbyjas0%PDiF3Vo1XQ@;civ}r3t@l_6ehJ*3e z6by0IVpuNrnb@o1&2jumaSo+Hxu(!DY63Nqj=HX0erPEYi#g1r<%EiCOp~Ziyap@3 zYdr*i1-K>U>UJZ-zZ1U?y~x(Kc)Fc4K3=Csj-;!DbD(S%XK-!WS`QvHK>+T|cj$c%$T z7hq)}!~b}eN#s9X_@!Z!K4nes(Vu&L&>&Hed8v(c3|IyTpA?8L(_Vj*j>6LDLlc^%lvzaApwzNEG6 zF*Yyax8o}>Y}uA8!Dw~Z9&d^+Tzj!mzJK+{r5h}vL(q9V<*T$Dm0miAUeq5&ob7}O zer8w)FmrUZ@lcOw$ZX2BUt0Ei4{QH&p@sAILarR6pVr#W6z-O04jPwm4Njzem;p8E z8-R+4xsP~EdjmWhr1U>^9343QsHL&vC}VZQ&4cbJaohMNt*M{B#Bf*N=fL$i9`tyR zc+ib2lf36Cj9+?2>XWOG0FM3_uD;gmurhfC1{wT+$myEf-6r&IGklm zh;A`;fUXpW&XuSI^|5*%CK#L7GS2klVXwQtC}6=mF9`VY^OMyXaWxG0XzoCW}f>WME#jY1{`Z=u+s z@%i9<6L;m#CJVA$VfATOM=S{(jb>0~L=hB%DrO4jET7Xc`RX)eSP{(r`It|w5vX~B z+S%k_VB`6RJLT;!9ibFIRBEn9sk#)wd|w?T$3@9BK8Wwmcx^l=m1JJSe3G+~jp5o2XO-lNxjZ@=+1T-lmCMjO^oQ20Z-^+GrO z!`W)@2MC+Rva7D`l{Iu(ZoQ!8HBW58rIGb5Nir4llnJ~m=5y5(TtyfZRXU{=zY1%J zDowkP#3mpXE;T0Fq>M!hjV?dGDFH_mO=~BxGsZdk65Y@$$&v2NFCl))v6DEo^ zHPIo%)$18yl*J@_HbFNl>%}25qap#*r{H= zCcu6T_nkO*J0!xvd%z>CK1B~~o*U}s$o!r6GB8~Ni2bFWRH)(-h%9Ghfvfimy>5U7 ziQwL-_{{g0#L1!N+1>DPcf2ah3^0f4H8P3jT!f2TLp`yt7Hp7V#*NyXT&)rI{Qa;) zrAA@-G0ru!)h`bQ`TNuF>WmJTp1H`SiAPCZ)b5()yY<&T|7rtE>c*3`X@PQ!?4=WZ zf=)sQ@V(B&4aIPF-p`ku`$wXXsVnFF84A(M*w6M{1JeXj+y~pd_khU6(N5+|5kJz} zhwe4LWV&~f8ULN~P#Y>-H>C0{=e!i)j}mG^dXci|qK){{# z)sIT2Q0AQa38rL|9TYiT_#xMJsOm=-<#1J&X!zJ@_)vpu#GHeTYp99bEK%xnmk+c+ zYwALyr0a!;;;am2m+T?`pEhRQNdqVVc2$4f=s z@FZ+ZTefFWZ7VGRPB9LVK2Wl83IE7E9*4DYa?3kt?u&~>3|;)v&kLq#omkN)rvsSPOabZQ6%L zb%O{$BC+_3L&{E-A5Cm)!bFw8xS`SXID{+bW3UcM8CP7rS%w$0945Vs= zG|P7JZ5Bsjcv+W^QW55+-DfW@h>w)4`2UhQ7*AnCGZ(8Cgg++XlNv_5vaI@LY!bF1CmHn6=wda-2w_yl~Vzi|Rf3ka3_!CQYl2))MT^+x$F7|$G zid3QoQ#D6{*Q6N#^#X7)ExMnQr#6avVQ9ET0!?EnL`^;Lg_&{B0F5u81$7ZQ)sph0 z1vcs{>|{#dtbvG%I$5S>y(O`4 zXB;x)c8lq?Yu#DP-x^sv_-U3w9n(<6-k-trpmy;kjk)`p{K-3A61D**CfO%h?HLHjyPcwB8yQSy@nAzGu znJ;W;zn^r@A|V^xd!1RQsMrt)d~+$s7~x z=w(gzfRv!gTwV83@~629RVWv^?HcietuW%wfDk4#vs=UjYqv+a(aJu{@Zg>btnfVR z*1DUWX5KQ=%jvN1YUjzEs^n6qmJ1ZtyQYS`_Xr#LE}3Nxv<5B7BszxiU?t`aw3^Mj zKqnhV8Xbd+u~Av@ZBRQa{O;&C0mo}41fAp{2$|!l5qd)ajLYgkOi$5-Wc3U`FcsyYK>p2_VF=~<%)n$&O5HBh|M ze9!QOh*{TIUvhA`>5Gb2YkXXvf5^ZMg;f}{Guqx&4{w~q!0MPHYN)TVfYL976?OBufAVLB`GN42I!{Y5Xq?^s*;hTWDu^$xU3P@>M z0(Qat^jvoceF5R_v&#O;yHTR;S{dF;BG$UJh)u{0|F*zvhKjy+2Zm?Q@*aJq=TY9DvKdQY~UP>;a*I zw>D7nM9I(Nn->=G)lW8_2K(Q!MeCI_b#&eyzP{2^Q@^N@x_QHjaiY*SXu2$*fldSk~#@If>u_Zwe9bKE*hOnrtS}DZC$2p zw##~Klq?L1`ac-Z;28CT-%6^I!Am^cpqaW^2J;M#pvuTA!tzb|63KVnXT5QW4yOL)${84j-Y?{T@wtM^6n0-D*F337v&G z6jW4exd&4*z}K~NWbBNmJ{&_q48|R%=!`TS-5*Gp$K`b4A|Y52r_S6p94;#0*;;)Z zn(T9$`%s@yks!kH#qW-a8^(|(C@CObh`~=Jy}?EZ|C}B==wmx5B13legA%f9J=TQ( z2=b!nl`W!$X{mVBhzKQcyGs&1IXQY5z2&CNplTEwy@VoZx{M(S_zrec(Ii7)=@D!Ryd)*8WK1->+mngQC3<9oR&fcY z3Tk;x>@>8HpO)|+nQ$aHjnJG$+-DkZ6CY>L{R3~Y4dLogYJ-mEYqDz^?~ES{=R~5T zfuoXF_35wnFZ1&6CGTl`@x0!4vkkxqozB=L6R1jAkiFJT;gXLHAW}RA_5p4^q{U`t zb4OE0VWhq+LYL6xdy@f^2_z1W)3+eWcspPwHf|&mW7>j zF+R+H=ZN4pl4T5BF>J#UdEi&Hf0x!-=#rt?^tzTruO}c&A5OpcazLR6s3&EoK?>mI zN;#%KuMzMOMl;>z%WkM~x2{EmCbStD{S0h1qW`}7J*Z|pV(6QA5a(JvBMfLVjn2Xz ze_Es|^wa%aLNBJBy%dp4cC_aMKe)Jrg?i$6#b%g&wg{zJ1n8xJ0wD@ji$fEh{*s~H zTR`FyMW0w^kFQiVvrWltwBjaAa=j=*7+jl`hAkBJU~Fq<>YClHa$sHuJo%D4w;_!fSC zEyQ)JcAI9MM(1P0$pui&KvHT*n&A6rjfURT$Vy`IY4Wa<(1FYQk|R6_zR%;ptg=9+ z>41s4B8P9cE#@JM;)K84P_yqr7e~kPGQ2JquGg|gNQosjt-zY3$bo>Bw?z#MJ_GFa zZVrk+Le?zS3Svh%(V4fZW3Z=&Vi7jS&GKf;YZp6Lu+B>)1{s)IUZl^B7E>O>>&wxb zY_Zv=lgjnl_R>m%evk@g1zA_E*sX&3x$~ErTlz=v8VJ`^hyD0y*}=US2@E$RZS1Kq z>~#;l2L(Y-<6dP4keJHw3D@-+4nSvUWio=SI+PX&AL7g-k)zBxf67~b6>TVI@9vw# z!>c^YGpgQO>vaG~{gSr%9ztkuS=rF6tyw26d`{;3AdU5eCcr*&8JH26XT z8KeU`Z@Noa{o8kz28kx((g?s-D#t|* zhPF3g-q1*`ZtHEB*Zeh37mlDohtBj?$`HIo1}}`&3iz3BY%!gjYLm)PZ2M0c1Gue~ z_(^i-27IP>gAF`%wn8X|w63@WKk*lv>aWGP)KW_Pb_bqg-^1>B{|793TJAXplMM4h z^TKq_W#N0!V7O9RzLt9J^5|{=Jc+#!^lTa;TR9!_iw29Av z9w3Vtv2b+6Lu@YlZ(SBEDRtO6?YddVb8i4^!!+bO+vAJ$X5Cd=#nCg;#rptptw4_a zT5*OChgVXI^Jjg`i`^RhT~l?p+p4yZaC7A4Ac!Gc+DBxMOe-Xmy5}QB4%$~A@VDUB zpDybI`rTbKYrz>NBG~DLXK}|?ZvH67fH!T*hu|FFF13#*cp&f&F}glKF|=V4{thV{ z6e>C##MFR200jw}ha0UUumKpFY0WWlzfWbC9KAK?)&di^%5-da1lfKu3qyMWRUfcw zK3ZPuTS%Wn49TixIpWcEM9n+D)BLJgrm_rE=cu2nLiJnKGu70K7&ju`f((_fvc{Az z0%HR7MhPEAe$p?*{FdO_<;guWwq7B9nrBe0A>vaN`o<;?HS5~Xj=Vr4feEB>R%WpS zuujY-Rrj>sPD!tx>yw2h2slCJiO?NJiEPZ3x++M@*(VoC9(1I|;BhT6Kw(cP^JsfNhx1OVQ2mZk0B#gfW2A9wt?9PkLRT z+VIw0?~0ta|A5^wkPTHQH%u9#NQC0~M(xj687+~-2&4Xzvf_io)su|*FQQVyvw+5S z1H1MbGe1~6a09X0VpMw+)VE6yY#mEfy@M-ZXxyuI_I8MUcIj#AWAL0RUb<3+Os6h~ zbC#F)b##bX4CcnPI?t6}41pE>o^uy&;Ns&;he-GI5@-&1P_h%9x(rz*q5)g@0VObP zmXia;N27*Bi`UBTOlIg*r8uY1ZD)U+jgQ7hL|6^{lnMq)?ApYuRr0cb>7TpF9$=K) zMNz9M@u=0`vyCQ4YgkiAJh05=;{2_lf}QUDjbfk&+Xzp~QH$W520&afBEYA%bMsET zWF^XlB|5cTrV(0pta!(cEZooz7kRzvaL{;qNzhD{c2FqHZnUC`z_YKCt#=OxDWuw2 z%HJn=S0jTpii|Z|ECiGM(c)h9CS9BL6cO^Twi^gv3By<6Xw02hi6?pKW+1P}`giyG z*WlQ+Q&kwkg`TYa{~cC;8LhyWFMJPrV+@hr^WuKKt31LP1|7%EZZgCoRcz}l)h70; zd2f!qMJo9rP;^w$Z94Kv>;LzDXKoXKrdCzTC9S(m2Y~-o<=%X_Px4MBCkNRLrqJA& zo+Ej_RtZn+8p-Zv2iVw%l?iTCyg&!bEynt)C0`wsro(G%mOk>3T#-yeCgKxx3&>sj zpbyog(>p}voi#y4XgUiGIn1@u%v@067l-LjfeI;1bo$Sxs~AVmu*B%gOx8az&MzZb zrs&cyWsB>3dfqoqdxU0P?Pz=(GQbAQIn7t91DHHAk(nS2t03nh3Wz>36!~G5c+ZSi zcUA%EUV_J%>^o!Y&4 zJdk&U^jdphbjQV=Nk*@Y+NX&|rZgbPh;H60GO`u&KWM2gL2XS^CHj!=rEfBlY2g`W}Y)AsUyP!{3I^mViQ+W zX8v^A{?#ue?d(srt<8?%UwW>*m=KUUqI-fD!bKK-JO$k$nBM_|5+54{B1ganx)3n^ zMl2AOwx?>hIrz*~rM>n$km8kz`c|xYiTLvq0` z`zGi6+VklZme-($-i#P2U}WYt50RJ!&ZP{0915Ug-=bB3;(r-QZPnvdwiyV}5xx@s zNPG*s`_Gy#x4aYq#(TCSaPw-&cm#DIrnrqOaA@UjxY0$pnMf0ipXq0nZ&=M*B)F%t z)EsB!-st8mZpp2JDWg>exrio~z4&bRPT5=Me^X)-grPs%s0cx1+*?H`IL&+Bn@r8T zk5boQK+QXP$LA10oPBInLXh&qoOL*)lB^5>H1TBk-dj4lttlkZ7LeM3G~&WfcWK=ASRp&yoa@{PH$#tT zC18wvm_?9g)GFuhQ5rFwF~?|OATUvNg~5ts)pj`dFYBQMSF*Uy8vdlp3*q7vqbv9 zyQITx7^;bQ2T~gdlSu@M$)pv3JxccJEfCFm*66>qGn=2Ni?H`0m5e~s-%=Cn& zw+j%mKMk^(jhL<9ompA*M5>SSquWTBe0lr}IQN4%g~GVNyfZqiy0tfuOxfZ?tsnOW z`W|l(W4|{37mOZzPd65IdS%jc`~|G2)iRQMC`P&{u*%S;BxG4rvxBFY>Towlo&pwA zK7bn?Y4}}I(~C!`HOu@rxfQm|E&(x6VR> z_zUtR!Te+#GMrzea8hgr+PgXEH;i&m){W`aI)Ov*B#Cm;f(2m0f?NjnwLpCJ4j?5m zH|I^EU7K533zunTjXy>-9a(Vn80B6+C7Ax|S8b3?4E|^)N&K8>B7e!ForM^?s(Dsp zPy{(31S&g+(2I3*l}A#RZ?8$@$Fb?+sf?tB&Svz=6-d4f9nM&q`e&0+WVDr$%k8CZ7Vuni*@6&0FgU z7~nm%#9erCt22L*)g)5ki6<07a;asvJ)%K?gpi)v?Ry+kBZ92K{`h9gjHYnl0?7LB z^&U*tQrr$E13IVXB-}=bbYMU$ID$uHZ40OHb~79)%yJ30F6r!{NA&&(v#P|3i!pJ% zMhYPvaxU@Hfy)x6oyt06fj&?Hi|c=|Qp)Oa^(qvoxUKd~(#nm!h)(a1C*yF-?4qnV z$$nG*955%mA-822*CG4Ngjb~S$SZziB2kJMGc0(+mLEn=exyzUqg_@WMkJZ4pC{q+ zW3lK1H&{4O#Yfasz}Qj=)$mg>0_US{GX;ac`7$4~(7N*$s%vI6pu;)DJ!$5^aqZd| zlSZh>4@YJn>YPI&AD`nsh45qTz2YutA@y}97>p+!bnV;z*SJ@WO!{%9sJQ$2hm4J> z!-MOkS_%1w_b>iMny7;_O2wmN(8jEj!#2=!gPJJQUFL$Bz+QR=KZ{y#;;l8XbGyzL zD);KQ9faa$X?{y;7&XEEwvAD*y~8K`c*-R8WBi-iI)11D3Uj zc9u7ExJsBz@-S)xXKsgej)<%?!L4e!27ZB5;HH^}o zYFLS)UnbfnqmU>t8CNo8{Mr+zFz(mgKrpbc)>>L-XXzL)(c_w++55eCuw7*p?NDx3 zV+dE@u{ML+L5(&Z%6V~meNNQHfW!dbl_KhCZF#N9;b`u$gNH07kSgo8Gn znj)wNts)+kJqwiK*(#I<#fHoGKQ{qTLBP4~;fKx}Ehb1ucSM_sr3(4d-ZA&#yk7c` z*o;3*KrumG-sWWP@@@Ui)Yp=#37GtKxj03kw-1e!X39KFEM)zyf5VCrZPkg%#o z5V$elotZ=O=MaHES*|UAWr+=qCVh=k*5shWVq+>JF`;_oA7YZ;wW2zNEF(po@N`T+ zA&Zx78eFmV(KG*=7Uz#-V zX2u-cYK5KXqWBYimV65-a4m5(DwTt5*tsP*M5^WrwoA5m!ldq(wZzS5xzRS^+Xg5q zC_<}o6;qr;Y+Q-gf)RJCetdxBu2x#8}8@O59jQF#VSW;uP*DcYkV#YX6pE2(JIPov#K2n?deVd4;`Cl?NXp{iLzN(1i`^mhZZ;Cm6epcv z>0#CB1pKm&k9P?j%+yX?oe9xD{Yh z7}jX`azCSW{#WcjC36PKTl>)Y$O)OcO|$UadQ`b7yeZcHe1eG?|#|3xyxF zuwJ)Nu+{e%)_GL&pMKg)ycStBcl@0P$%FC}w{1>y16)V=xB`ZCf(mF{E?(@amH_=L zcDmff$vPGtCOG?*FSQDjS2M-*_x>c>j)tu>)XFw{5F~eA?zrEiFU?tAGQ5tN#~t+q zmJ?C%_s@so7ZxO~;)V2JL7}1%-$Zpekw#N5a0wpnR!5KL?(VcB`K=#O2)lWmWYmiX zs*YCR@9=>$RQWCe@+PQ@hNH3=7FI$x| zG6^xusd4{g1B%IG_-=&svK!AQEF#QR%MPDOxDL#puqW9w8H^)?XNV?GWo-R*X>w46 z`x|Cig^kVS5~9uzAo@UK%J#z;yU(vSvj_9(7%{@p>aH1!oz?(U&!Lsy>nKz>cf!-4 zR}Okj4>!IHGtnRLSEx8#bm-3-uYZhl!PX$FAczjMT*+8c^=@$>{79agV&9*qR;OaXh16WW1U$de5TdE1yS$1dTT(gT?Z9sN{nG0X@S)$T8GA_YNN z=e^~wOd->h;Vf@^kMpaTaX%1Il&SFMIRaQ7fxG-oR&{6dj9!UzLq6|yp)`(s^1`=h znrrz-Yra-^<^(qXoA4h;o0>2s7*)5+{9JOql2C-|nvX^vCBTtd6U(7n)a9|qWGlp&?=ES9qnqvhhktdfMN{V)# z!DJgdg)(YEiB-%sd6{Th`{n5D8zj0w;RM2N_?ZO9%nGmww5@1Bb+R7y*^S4T)<`PN zH0G6nRR9bUA*+#gsTpV5F{Teb^~V%^IP!z@)a+>J4MQxQlT)`}nhaiZa~bFVKw#dLrUq`pN7 zwDz-Ej%?p0uoi%q&}Kh+Qms=HS%I%#`Es%?3xW;#CZO ztc+eoC$R{dL7nE%Ovd)Q$d!VQ5%%8lvTh8$D0K_I~k(NnE7NDR(QXVCiw~5+z9bQUqj$pbvY;KvljS3nx z2`7Wxn$I$rjo}Gpiu+Vwv!kDN0Hs#~5{a)H4J5Vrhdfz#N7+dAN>Yoq9X% zD7k_Ue&&6%2}0Fby^z|82&oI+wLFh^nL`IXB<-M%xbA3AXoF1p0XVS(PA(|%Mw>zX zy=JTI1?G$EOby(kl+a5!t&AlCMVyf!Ftcm6j%t4N<;~Mg7N;p4X?~EH?TyrJyPZ** zI_w{(hGYHi&hsFHflkEEt!Jn-Ey-fQ^r=UmxowGz%yps!#S2*tt~s7u&4efE3)+TD%NnDY;A=XywfaR;?zm z9HOW67_fn6u&8pjHNhW=nMT zpj^*roF$~;p8}HNXq&Ott#*4nm>B1!cl8&m^y@U#b|QzldVFd*eMfHt8)nu?9h3X^ zrH)yYR7k-UWnCnY_OMhU2`!|Z$A(rSSOrWY!GOQhnOon5@Y zTVm}nx4*%=$Va4{RVcgbrl}OUs32f&GPB8?K}#AHRj==pPhq)uK>8B1l~7{rw&+N6 zXcg0rfy-qXjux!z4nK0WPmx%`kai9oHPcySh`y|LF>7fR=1d*nTWzQJmb5r3UwbiF zJ4%smRPHSI%@YHAH;+!E?bGFf3E0{(*1-?N$fh2!Zl*%9L=zTDjJ>Kx1ixbSGlM=R z^=iR4e&rzfjn+w&a*5&2iJNHUHSD9&`RqLpZ1BPKu$D3?w^YB02p}58uRG%e_F?d*|=GtC|QOlA3bWmrUC+?Zds0n7tk6r+(#Y@8OX%NMLSAu-b2_gFp$ z-OZ`KVPG}TuDfQOR%86N4Ig`=lWX7Kp&NVqglba_+SmKRmb^^hlXiq%r0PG1x>{rq z&=c>p!>m+}%SZ}If3m`l>1tOz{M5$!d+>3*9=ftG+H>?Vhudbc{L^ytKyWM>M;b$H zOQ5?;o*+XVr?UeVnPVnr_C!OlbCh6gEGM47FxSEJW|jp=bhc}SGLiZVF}8p5IZQg2 zvHyOOe&Sivs8?k)Wh{Fc>Wd;VMIUTp+f9oBEKvh`k78lmGJ>psMmlY_Vau3lur2eM zSz>1oQo$KoIHNmD5ZQUn@0P-bXWN>Sa9q8KBJTAKBHAQ>Ob$4XiJ7P%`TDzzMSISM znU3()1!Pd%5%Zv^n3ra-f7>yL-L;lf&}GQ=8{8=P(S;rS5~PD`!UDi-ODz4AeU3!^ z6I39eyrl)IO%kDWL;7R9#5jogzY7txCFA?x^;*p_DAH2;#LS6!@R=N^KAVfQ7ZvSD zU>fLj`VT^(GFrQUS0^1h)0rXkn|0ACbOq8(aLPG0;&;xegmyRhDejlliPa{fj_=5& zEPx^Pq8ecAZHP4hLqNR0x>;k1!9GzB%Q{5pw`oV81^tfOO9wg2e_yp_Ral9N2RJ}f zf&IoJtjO#r(9gA@T-p|^kVE~k$TjBlNjC*=7pkYWB7(OvB2_F~5HCpfc;mL@HSQ=| zG{hc*r=4RZw!uriwLtSI91;{h;C?|sW;A`079}j5ta~Xf0i7fUU*?74=KDDLBQ%?r zzFaVSyV`wI8OxjVk{??LIU)lFQ=p~v>u7_Y4&vzK9Q%Pm;}8~$IF{VT)nqzKZVrJS zOz1S+Yx`@9D9bNZp=t{7^18HFp#67p$vz$oC2{;JI4c~6X=S#{+dIYhU*{tP z=FwC?ny;K=h#{DV390GslXpe%QWK z@@HZ>bRpZ(MZV5v@t(lnNZQ7}=z0Ix)A=q@d#lAv+N>>T=)JYoU`4!X^TnloSloNjWT7$hW`(;$Jp`24fiXl+0jmyT`tezAk;Ma zNsl@K>E#hj(jh@zQxK_BZ!9U``vy(04?=B!Az zR1{rkF7c@DLH&XZEr#M?TTIASEe|e#;z_cwf{kD?d?e?`au)_HX~Lv>RXm)n=DR`< z%X)UiluFGjDZT$E$t8f2)W48-gX~T=Yv?tQAI+mQ&fG1xZwDF%r|QbROo<2vJP1nD zsa^8FfW0ZzWXy9Hhp4A+W9p1Xijj?>F-(h5(6MwAqP*e zMbJOVcGvFrGLf&ZKD`1|`LA5mS~$58q9rvQsY8oqr$RB4D)lD*RsyKopBI>rk2^nv z_bhRY6_sWU5hBi6;}q1$)W`vlt?K49#@)ZEa+rnS_|dV9yc%59#^_ku8dHZk!UeF- zkb$K=BW$^Kbg}=pN%bMHY2b(7CuGmlJFV*}J~mFrE)@&E{N6H}seRJm^g&3|)+u%% zN3R>5ou^x|*cF*X;u(o6|2vD`91V5Mxc(o>)Aw_Cs*a7jf*)v)c z_RUc()8KMB-*Twr&-*ML-I*B0VGN6~Mx5?CTQQ*r=KdZYwSAxa4G1cc#O)!lDuDdZ zBX|0cL&|&QQmbGIZ0>YQqSXVoqQXI5FT&#RK@amf@C8mnk%AaW{lX>QjQSSxbSTg)No-IHp`~PsX73_tl+!_L=|=8zr*T~ z2>&3@M$d!yojiU2OT5^k2k&jTglw2(MTmPx_K{P&?j!|Oq(kR$F91||83o+1Oz_8` zvYU3zpuVywR~HINfJ*{SZ&k}y9G z8qRJv&6QI@B~=k-XDbhZU*zxjHz7N5rknQA6&P9N?zn?`Y56Alp*i~8U4Q&QSghO5 znL&-LLUEgU2&Mx?YNgO@;nW!q)!`qbR2D)U{CLxZ;{$;`tklb8UA_@E zIH4yC10v12UV=o_i_ciFru{+X{u<`WTWC*?6iI~_ZfZg+rc3vHYZL9F991A+Gu(6l z46jynH0$?o`Mv)hS!|^jKOxksd`-=Nea*+qNvF$j2rGDx5`?4{=T3{Q&h~^&%a*(#i2bT$-&MfSBp-jH@Bvo)ot=1}%t#2g z3Gk1E?M4rieY~j`WK^I|Kg*={c57~zf*V);Dhg>PTy8v6E;)|Wi$BA@iP{4U7ZMWZ z6KCIEQikoi?Ji#(v;%8)%(jWa;_y@na zmd2jo&j0YcXeP}70zv9%06_(vyDpNMp+FuvIB%Aim*t`Cmth6np5Q`{DM5sLkLiWX zS>4IUlnLWj#u>31?`*Wve@IXr?)3rEfCX{E@}xTEvp>OaS&+y596WxzM$Oq<=09^d z53ibW36KLenTfMh{czKHczNUQF((NMe zD8+;hI3y8>^8kPr=U?2WxGxe4G69oMqImWdryJKt!tYkPU1NW2A`3mrBG`sK_8d=MZU9T3mE}o z0OCD&9xP3-ZqBIf`_M&#J<2^B+=G4T)a!+(!F|pcqv4UpcrFUO)*@n>JRP zn)T!`;RX}Y>?EE6*v23daB0VEzd4`sha;5K`AuYF294s&IKwx1^RM@2Gmdk`?8Fe z#mHWPO+~MWuREY)7!(5!Cd+O=q*uvAov}vBE1W_^dGE#Dy{=SU&a)qpLU~#|^JezbLxQeK!PqxA z3vpIuS0tNx2pHPWI+#Cm0+JfM)gBaL*4cKGtKyB3TRf;haTWPbLyg70VVS>R)JOPj z-aQ#A>S=BnX6#|#GWu2F-KC?scO4|jTv#yD0oltIMPEB+zbDa!b49aWYQQ6z|< z1$YzEd?f6U!j>F#d%kfOyOf9#1`#V#4s$hAwI1(GD{9K}g2HXFe0td3{RUfQILL(v zI=}8-@fNp8M#vSk2pf4cL)Go=#`cg*3D2NdAu3|l*1D9qCu6vooj-dR+UJ(W-@6&z z(+ojU82@vI4T475wX0nQ@R8xc`;P7|pu5IT0U#X$xer!-(C@>%NF~E7Ln3x~;LN>& z%7dmXYL{q6bS1p&)oDhU@T*G;23b+y#CDon>nT7fk$m@oaGPtDKn4gP9;xD1c3Hm@@?^R`it-r>7e3@FKvr_cK!oh zZCTFY{#tw<#hNoApL+55ICa1te21M$HzuAAT4ll(K4kOjG7av_1s)T8KrYo7aDwTT{^=WI$MA0P&Z`{~-OCD-;+?;P$aEVu&c(FmQSZ37xNG6FoKi zto$#(NfHeIb2%TW3hN}l_jD>U6sufBVX1gD0(~KG5A3lU8aEhnPKXAD)5}{$l84K| zz>jfinkQ{^!bmecnY|zj0p#|~vsMe>a(ttvWJ1HOnm>9Ehi)6;lJJ}K#2DpPRnz}r z0-G?cGdZa3iwu{$(FA-tN*y%F6@wa0(?y*!P$RN~%C_0DC1N{;hK+5JX|m+&uK{Oo z5N;+y8~w@yqPc|x$L_LOA$EEKF4=efp$U?%dj#4-tW;zvh$`v646P7$U9UW#x)xG9QX*8H71L3{K0sgGYzSg64tU?=gKCVoj>ngpc~QDU z9E%q+4i23R|&YOmtOR(>b%zJ+h{QnEjq@saOY7v5LOor(3zLp|b^i9T7HkgQ#@yDyDS@Hyh4o^6urE-7iaiSHUJuLZC( zQ)>m)4%-ZD(=YAOY7q@v{c`X6cu%Q2sP~3J`K_Q-fCYtp!cRb z2aY;eD8XLQ$`?ii&DHhb=jYtP{A8@b=h004T2_NSbb9xA|lrK}>) z9EgS>V;t51CEgnpJ6Rfs;64LyQK%{Yr zEcus7T~!QnSU}`1o#<;5y$WK##fX;@)e0kAqB@t*r1aUq$K$Hw-}+y`Q3;AuophWy zPA4!eCRlCfNL+n@tV3W^3kmq2S8ViR$}#|5&lujplIDmArBdJdiCXu zRElpk-tqSveAzg?)$9l%1DUza#ggwo2Dg3)Fpqf0<=y=#9zU*iEmlj(8a7DB#BdYp%xR)(EN7xaD^{yx zd)Ogh_|)e&*A~w?tZX;v`^|aqXtXEy;qWQ%o4Dq%>v+$eyF_Sa4el&AAPuG-%h_Fc zX4e-WS^sGTl5)-1Hi%89+3H03il?GK3%YtYeh~}UrmY3UsSx+rh@V&>c4s{v?*MR@ z<5LBkx^+%9vs*!l%#FzdwZmIj3~aoP#aI?1Q#OlsTg=V!is|tBJ608#zcp(;`O&#W zX(D#b#P24NgWJ}7x9@s@&QITPid)g!(3Lp(X(|8)MN^TrN zBF}C0jagM%)%+ajfIAFEJcNXKL3<}|K>~TW;b`jjin3PWv_pvkQ@}2>e9en$Ox zQ8>}vpZ#T(1J_2`e$e=f6ASMc!A@R7r0IrPdM_z^1*gPuBF0St@N)S-3ssq+#4PVE2@ z0dn(#=xNAhY=={7a1#X&Gr*^)w7ZD8zFcY%Kw3mTfSn&3+}bw3N-s{ptjzq1)>Z$4_;%N#l# zvfD6hkTNPdMzvH0{G*%nZrtioNrnfVrt5In11^Yw8?lkAUD{=>pmm3YlJ?hB(ezx@ zk(M%Lw`K!Z1Ljz+yfi3m$_Rb-)v=#twK;syShfa6UF0gddQ$0!Q{9kv!DK>%KfRD>bbm`p3z5QVB!)#fNgPV_t2WG=m z0KP&QT7NAvmlzC3o5P-C;qJC}CgIaBIBvc~Q81QvHDv_FjVpyz(tn>L9XwGDqrE9o zD;-TJ=uuEqS54DC3Y*{k1>Z5k3&1fI^DlVB?UX7}$$II{?99Fhi5H)msajLR95F}~ z2niC7QaR*s<}wVr3M|gHl35obg1;V)7F{!DHwZ^LTGNE+Rcse9p6aIs;IcoO(hb$AI(h@;DbG$D_7_#PB^nslf{#33 z%f5`2n1t?sW2d%LJRLrdRD&{m$N3520xdK}m5w zGu4TrxSMl5eV<3>y~a*xP+DFM>_H%H)JZWJB{s@zDfQGGL)o*A|8eQ_ z#j4|OS%F`Y=Ql`(g}1DusuO}`qY^U`Zfg0j@sB)^Y~PB#q3Do^k1MtNl6#TC?cdrR zC4R4c!bklD1~QkcGxv5&Mx%cq5Y6RYe;7Pls^xVgt4$-z+ zRr{-HW&|STPfg^R=`ej8Yv;RGZMLlw6F3eKYo{%8$cc3_INQ{zs$pEA#vPwi7X{D5iRe6S4(^_piDx z_C@{<{@OG&9R;v+N#VZ^ygY`5wN`bOO0D;6lB2lxAFLXGRP1)u1ns1HHcW;1v+Y3> zn?HaKI5s_sS|Bf_mBugP3}2ZiWWTGEB%uzILeq(P>#UmzH;h&b7=s0ns36AR*eVtd zg%H1NB=WJAn-I%U{gpMh+&EfVZX=qx`+Z0WJ;5dd!@&4C#NxX`RS2^)OEYNp$RMVg zOI#3OlF(ZXkds-e1eFo;xKDOR9tM#0>SY)#nv$8C^>_?Cx%aq};}M3n^C-75K4%sg z2dKbf7SRlbY$q4jxw2td2P}liw(2b)`!cq}ZZWV!auBDlrPlWWy~9NMM-%4@q|VKm z81NSEnDFR0y3pIQ5!8^uq>+XIssB#0J$B$lIfXLnpjY_bn*HI-WPqb&c~Ya?l50>S zO<`grSOS8hR2$Vk6Z@F)VorkNE+5lyoR4a{?q#z&3hVWz^*iP0Hw50XXfooaQ*o&) zUnxCjtEH;Fk!FH>)O=j&k8TqIc8X!o0pqu5V!i#}u{G0+e>mb_w`%shj8V7(7&7~h z!vO~pnsdjM1w9SvM{yg_5Gp{ZqNe=mHxCGkhBT7o5GD_&-0wE>^=rM7``B58((E>r z_d!&4AEekgSOwN0^iZ&(+o4c(UsW&D2;Qkvkmxh$?a}I?*8^U^&p+jzaD1@+rOn+* zV|gaA=|vBQbX6Qh_QuVcbYp@YQ=$e6L&r!SF)M4Sxbb(S1~7gO}n<$`?U}UPlWz!a4nTx6!=0FIRJL$Esw9y zd3*I>Tq0A}hw*y$BmTuMQ#u%%NOX3MU$7iZh(87|hv1Z<+S0}7=dO`f!E3?A>4C>Z zJ3mdo$DLxanb*cz6?nWizfmZ7070z}(4Szfs6TuY1@&;h9(tG7s8*hPyq_wZC0 z;6vt3s5;;@zeBx2AlgVtBk|;XRCV(BD5mNN60<4sJ=ZSp8Wbh`)XHE6RJpFf$&5Pr zyZeSG!~&-micm-@-2Qs%xeuQWk6T;baajGVH_foW*FTh(@-5r3gJGB0n8fO>51RvV zxkCb`&g~0r9YWehdY}^vNS;6twOnZSOvK9Iv`6$?463~KnpWY|ACi8lh`U*{N~@2! zW3CiuG4AJdQd5ALLT~WNQXMGU2O~*vQu;%e0yy zJwNxUIqCy54d>z;!)Y-U9{?k&&AR&&ezNX>ymE*Q8dkqCm>Wo)>5*QxFZvu-jXT zj%%$!w5SN|Iy#io=bNp<_?0#T8MkE&fs1C8vq23axA36o=dfP;XQB~HH@fI|v~Nt@ zCVc$B?efE_>M60=ZQaEncg;L|y2Zxf3xl%B%sIygU5sr5mErJy8Iw)D3hyCe z36NXBllHmuS4U;@PhIN-9*o0YCUm`Q{y36ox(lg)(OAa5k)@+?( zm*Td+`_6vYyP_m-MKov!wha@`>;-ywsHDc_7p^V!_ok*tj|Y^c>dzo2QmIkYeoROz zGRrCW7-i-6~r$bOezMIkp)WOefpW9);-YBEi)*px7j*i{1C5#+X6z8^lY z-RsFt5!+hX6!cX3^V5!yO9iN)HL~GLts}WnlPQO?-hWX*b{=Gtf?UIgOYxD3Fy>h^ zU#>urbDe`q$O|Bem@lLJJ*B?{ zZpH9|ws-V0TeQ%J2IT@a1-fYmX;-jz7^==pH7+M$N+gwxEB@+KM8;-FCLVfCqzrjs z7+6*i#B^=JBPM%?G?UB9wZzbSt~$Q050b>4oZ1mgQNhCHKXUjR|EMOmy{}?* zIu4?Pv@0DNS`ii;Q_F%Qp>BR9Nc-Cac-NNUn196wPf=Ay3$siPMpARak}VI*d9P5n zCoJ-O7?O9r5siZaD{SOo`RsPo5~bk4 z4LGe9{0-xIj7rW`yj!j#+wQ>(d$W6pUZR_ct5TDCJ-xY@N`x%Ci`mUDax~K*qJsym z*8Cg*K*5*E;-OCD)2yLeMz7WXfrM)n1r8W{?)|yg{sYmR2>Q+%s=cd(9Vgs76!3 z(_>BTBf@);)sRfdaT-Ef%`4UX*l54bf@6e`fBvPq-zaQZx8kvr-fmAwsgjTeRMDtm zxwVnI+V3dJMlpUu`M}{%fPW|Xku6iVs<79GoaRCk*%b^j)^tP8l;>b9Np1oCPl;{% zta7f)FN0Hgt-zi1-tTHj(Y{V3=$$(|6YRvv^d+uNN}9 zb{9axlets+rfZ#3PQ@~VoiK8d8bn^ebILe>*7GBBk<7U?EZ6kUENtqv|I*r(T11!V z@>*Vm;xp^i%4Xuj1~ChRS)cElQ{_H^?Z z^wNekUuTHVr(U=w)^jOfZv>%|p0H3rm=7aD`k3fr@eSLOuk_4&>_Lo(04|caiTLm0 z$SjJpXKyYgx`+mirPTRhC3eCgA6?M+JzuyoeO6C_W@j-yY5c0wzleVrub7PvWE6jS z=10d!*mJHf7M*4msZu72?Z`i?h7px+;*@fX=pnDW`6(ON-Vl209w$xpf!Q2;3bZOt zv8OwsT+0{U!^PU4P@a!6RtybPoolw`ij74+6aIUE0J<1}YLbTL3*OGVsGh3zY1p%ZmvRG%KQcq0_PHz{9>9H;CIYUFuzI38nM0|u{$#6 z1;2<7)3iUM(C&!`IE<;-bEE6RwW+U@URux9|5dI{l4W$9kcznCB3AaMsGM(Ri6)FsUCl!v)a3cQ#6YZ9orCvIQSykIpw1 za(Dt)`_Qy_jA2)m}aeq0* zvqIICFDOag>EPYLi$M3a%$RTP86n)`P9IokVfeSzgY55BxVZ7A_&teQb+oq%f9Sgp z1D$DlB zTL6+&d6vn|s$}ALaSXOTeqeoT&QzsnKYVt^o_?C1^mssd0rGpvqyI8hiky4NgWtq3 z|1cMu`TCs?TiO*^bRTIMpP1~|7ln9Ot;l=qwL+w@0&!btf%j~z{BKvUH_y1ol50bH zH{m?AMyUbQTt#)u3Vvpg<~u7%zRGE3kIrUsQb&Ai+>N@^ucmj@wTO(7w#I8fF5v5O zLipJI>|fuq=1(P2;K0ZCSpOvyDRpy%uH%=Z&Ghq{0Vn-qXqUw7+qX;2whEj>m}52S zCDe((Q4hOI7pO|dIdqf{Gl8(U4W5}=QBQZN=BtEsMA2O%v|Q;}H4B;TW-Q=?SrzDP zh?b#HM4F-kj?E_8u}oDf-9<;Gy+>~cePn38!cvK{4%K!1j|(Bc#NsiSMmA34xtBUY zGHQK6T6`4v10f1QnT{=ttm2(~I=UHD02@RgqT2qtvG7Z$;3^6_T)R4t$IgWSj(=lO z!yK@?5{j@^7=$m^sGCt`#|bY;5k7c}?CeSeeA)Y0Nvm-C7lUX)CmmS)@li=bqHbwl z6+TqXL3UDb;yKY$gXyh&`1uJ+8NaAXgaluHSKC^9Q0LAhRrUXbLq{{tYZ4#F?YYHv&cEh5S5_!Z>Cm~>WSA+T%O38WCO**l7bpY2KY)p zkd8b`4)4sSQ&Pzz0>bR1JxCoyu~48EPw!tA1cbH=dP z_Z4R7Fy_C5REtZKN%+JFpDYs$PdFhPwo) zF&&teR~%&{)|A)^BwG8Tn`9R;zUh~z2_9^YV&Fu*oxR|_4Ie}raJ)&p)kP9K&Ita5 zodl3T%)@T6bqF*L!Vj_Sp=YaB88!C;;!_b1mZO61?9bMJBp zN&wfZC5t4-z@*($kxNx0wuEQ5Lbm~7u-cW z@(xz`0vB%*;d)PYPGj4I1ogcIi;!@aTxsY#l!&-Jc@T8wr!ZJPI>s5zoR~1x8{LIv zX|gx^rcsgH71b;tCnkO7>}tY@(TuC5vgv43*kDZKme(k%wWvz-gSJ{;3x6lHcv@k; z_KLU`siZ=x@H{(8Kq*J+*mM%-QWj^&waI#{=B_e^`VV{nx*|Pwm<&zgIX2TgeC6zN zkCtjyBaxdK=KPSO9@j)fo!opxpvny|el`rYIeu;5o7=lc+8_ICAEvurWE_!VtfxO` zbD2&}^{+Wr4ZO+*E9!)x{?6*JP|Hd+9SwN%fG|hjl7p86qIFZ%!Flzy@hdy0w(rjK*kj>@;TPW_E{jyJlnB><7bPx zrFD=%5{miO@+Y~!m{8I<`w4+40Ldr=Q)k5b3R>yMDS}&V5IuY9mMbZw3UXN$GvXts z?+-jw&@?SGKeBI++h?YjL3eL`Em%r$Na04cI!4T3Y=6LVYq8NJc)Su@4F50TWgz!Z zH6%pN)t&PaYFe5b%&=6B{mwU^2Q(f23VGA6m9`uN+ux+S{7;P_CdCkenB%M*%OKkn zzvcRwEkDio%|iZWNya4x>uM41Y}kYJO}CsiRDqv!N|}pwTz2Xp^3vRAgo#&txfug{ zA}Y7%5-Q0@v$SV%_XLPsDcrm!Q%Xzpyp#H_Lbb~U4U~0FlUCUBKCSFsPmQ@HgypHe z8upidQ{+x^BE0{`(GTJ>YgDd!!Rf zK&s&}3MTPCb4CohP{MwpJa-PWZT<2hs|lUwD)ETA;%uwqGNhAx+O-+sda7JGeJT)#se!U0rCNx^ z$r^QfkA5nNQfl@Rii&G3-?}iN3$@WpjjMtm7R}YVTr$cg9~ZkJ#8CYE7slscZ)mka zpa4{s0}F|VKbZQqe;gail;R| z7p07?n&wmGht>*980!ER9uBSO#Q1-`aFA*9>?e_Y=|mTl2$x;*RSn`{CUNbv47a-H zQX_m>AVk{l6yNG2G0W>h-8CZ2jXao9<5?*mU7(eNI=pr#69~ z)AKbC>ULx*O9jncWw}FTr&gK+<_3WMnbL_4p)^GqUWEcmpHz@)_)KR_S-d3URPIm% zexJ{QWEjX$KTl%apDxC2bhpgae8zP71ujkFVNKL5kw=P8{oo&#jrnG8vXT2})MnEN zIp?VJUvM{FI~Rw{Ls7a?yMO6BTI(OuAMx)vN&o*{_`c&R_iRT=>G;=2xq>Jsf~@2C z(b*VCLxe37u|~(*ZX-4aXFFpZX*U*0&FO8}18o$>vov@aQ8K zWRwOD>u*78P=Qe!a6G}HsHBq&xU&t+vLZzgkRaugJ32nGKNf}>#a&?zc!v&5|Sdc7?0>ZkEyV6FnvfQ7Wg@PacY8OL8;>K3%!c~lTWngGTuGV{_B-D}%XTsxa!WIo>xF5sw?o!?gFq z+A9Y1zVMs=A&Hs}D9X`zy9kc{Z8aQ;X}(ip{D+ouBPdO(Y-xR{)6#aj1ap5>i7BVF z_AD|%T6zJSRwFMQ)Sf`#{K@icJU09Lz!5`R=T!n0;HHCuBZw7O9>5r`cM*~eiiy;I z&Z~kJ|9$+7IsCdW4LkH(RE?``^X`JqHAHLnxnwT-FjyAq{SM?)8X0^s&B5%Rvi}R3 zycQjZs{RszfmwXl3B{2kfM3sYHBki&89jV*RcWIU2s{=wa%tG-48f!hB+L-+NkP68 zhLUgBT5~14JO;&n0#KHzTyp?6Ur;0B`zDr?QFf>zgQT02S)w<*>@O?V@(bTmb;VNb z$_?%mNL%c*`QPOfNsjK;fLn;SWBDV$pc3LCp9fN2&e}$>KhAAfKesUgUk8x z(|}VFhDH33)Z_D9O>3d0_mhWmL|a|$@W35_OkS`6xAi4(j6s!Cnt%Q z2M$EKsL_&6lLkPf zkp|O0mJve4pxDdEPoU!oM|tuqHyI#f!m-DSBU}&XabyfX!1TroFBlKx#?52 zqjKxB-ilD!MY(9BYz1`2Q7r0@8jK4`&x=JKtN$|1H$S9IZ0xlY13*k*F1`?j;b*X5quxqH7TySuFqVml`Xemn z-hy*yR40jDE(V?R&(OEunHwlSN^(NeYFNm0rXttPYRGFD))z57C1-gDo>O;_#`Z}g z>Ti{n`!UzY#Azz$hEpQxO6^aadE1LeT}Y+PxL!+p>u-#tDB&&Rj)8cE@h}hiDen`S zoex@Y;b6M9L0dzpmq>-GTF2{z2g}raKHHoh+!Z7#UDhH?NObcx@DN5au)gAV-nzuQ zJjkGdTSvfq$5m=Op6QSIyNa68H%Yz+qyWhM%Mu;vf}!WzK;<^8o0_+M@d?(pHPOUB zXPZgZ4YovImO;&n077GL+H)2n!JMWqV<1q)lBe4;w<-AJ&uDBjVLC7ks*ctz$jsn0 zJiD}cqkX7KG8^^oL^BXPb~U3vQk{S`jj&4lE6uBY_4=L&<+w#DG3oX}|M1bG*_-`Sq0HbRda z_D4##X`+m|FRGvvLh^Nzdq>K`BkH{z=2u(vLS<#ndco>8s(?x5ybr35y`fM+KyOia zvFsK{qMs5fxu(nlr%fu>p>#sTz%s0MPZmrM>YuWgKw8VRG1kTmGOA<2c@MH)tt?_H zuthYLATCAlQ;`-|EtxQzxkp?_$upXN>GK&-=*O_V2E`iIuakFKd&aEd_Hrwgi}va| zX9S=l6GELqR6mKhfy4;h#)u%3<{s-u(c=o3)4TV<^cOlOfU+>^Ptfb{)cx}sZ(v}S zR^d0|pa6JG1fvMEJQ&Gz>fKJzgW*Il^sG~w8ma+VyB@sLiWT{}Gj8F#%`cX1Hz=`F zoG_czPpKR9dgI%p|<%Me+?_H&?g;&f9C4$2tBSQYcY;zxNkU0lZuD_w}QYC5Yi0b+duE1f` zX*{Rc9PtSzEQklZPRxs@i&+8JRVpsKq&4=COR=<*!H*eNZzrqT7jJ30B#TJ^92vUx z!gygu{rGlTIjh9*SD<}z?eJ93EwP<#@+YTzSOSghjI6V`KL!hm-dA;@zMBMbY?6DO zlE~)UR@xru?iO_{15BZs!hwj8??@l7J!qZ3L?bDZl{xDylV~M3t+znPC?oB{?S1xu z*T4s!GlmppDVfNo2pNBTbhxBwm9wvcU3OiaVk7@w-o6*k^S3+H10CUPS{Dd8z#$GO znL&vAt6PInU*U;E`&gL$J)KPDAye_C2ql2DEvTvGNJEa>PGeqGQX1T}QAQT*Pk^wc ziX1kmsf2>UMNpu?4|jV-j5=xOJj}i@vx4U{yw`E>w6lP=Pn3%OcrhvZ4lfx%Ty2*0 zmvX8O)lz4yi4@}fesQ$r=irP=i&Lkz z)TdU?S;%OcqG$Pot+SMN7J9*r{VU^HoXss(n4kckqhzSm|7Dt*EDruUtXPwS?nr@fEbp!CuZPH)&vX7GPotdv+?kKwE?t zQZ;JG0Pz|o@Mswmx|Cr0Q@RP58Ed?@H7UdZiNpV z=hDW+$;94>_<zKcWG*B~CQbev?=nV9CUBHJ;+~&vT<9ZAf4~N`uDv~YpkZybyt5pmv`4GKQGl{0EEjB&n$FO2(Y7iE zvvW?Z+IUqBQh9NGWyU|WM*G}Oak2Rq&`&(&2uSy`PQrqxtXCPXcwq$_Wd{|%k~Mn2 zs=iKOXKTPG?O!T~{yMv&0WqQiF0NA5&g(Kq{sxP?%og)qp$}Nq{3P>{2)sa;*%8M+ z?+|$NF;UFsNd7TY>|<5;4SR>Qi*iYfjXQ4XM%w-uAyR6>hhLKG(5kXVV*oa%G%(DZ z#w2u~e@dsTJY!*5DmxzI4P=&JA@8_UZ_a)Q)C$a*nW+m0w3XLtJ!Ng*(Q~7X~g^?JA9uQ_^_{ zh?~jqjpN}IG!9k?!Tw{Eq|I7ary&j6iaEN540y+V3c~xE6phq3T--9F^8zd)ew#6Z z@PbNObKbs9VHms zLGImf0mR)lU7i<(&y#NGGd~I&Og~~ng&S1 z`%P*|`2|vx<7*4aw-+_kuP%o+0tEhKgEw`=%bDSVbE8K^KVuI4V`|WQ_b!6+I5vln zwway`Wa-av&iYRuOc7Gfi1L87>4l2>WhYk9zLZC%|0zLo?I!?}mpwa4TQkw+0Hd+! z#mSAOk@mgx^y`!MW=JF|C7A?>vmEPv!nOZbNvn!Gutzl@VE`Oy3zv_cb`SQVk{F5# zzDQjkhcsC|7*ad1NIe41cmhp$1o5VpKMBHl;hTHhFRx>NV4KHyOaaOE!#?O@ zD6Gps{_lU$4bLT|M@qsM^7&y6obs1$f$ttY&#U+fM5iW#xpTu|p)5gyaRCq^ek%JC z4``yI>bdH3?GKKFdaj=gE>d_VY5}4F)00O96_5$1h$LLKqW9;O zk5sR0vuIjJ^oDB`jW$}qT`+&Lu;?hFHNQ#98?WQ)S>88Q@>Q!aQ{1q9d)Ps3RNgV9 z?>dbf>#l{BBJJqkJ(abED0vu@yp#WqeiQBE6?C6y*b$jksVINTOpcdwKF>b{_z^i7 zz0pBG<>N$lYbkRfY?LPn&~G#EVN4H$I}b_>Dt>SPIpOCUu)xF~)M&LkV%QTi%b`9n zULhC%$4fFL=jj2Mq9YX~vK8JHShK{khlrxNNqf75hRMkjrO1M=bCE`QWqBO(HV0`X zRq5aC^QYK#i+JL?@xe6z*j{Fvz=Su~ zHM&#(GlD+Hls+J28rJ^;Xn)u=QjmcYuD8djID!Pyg*gB~@z3qz^o{AnR^VU!uWt~J zO`*9K2Qod-GUUyY@u`7bpdrUS;87I=HxQsG&6t3=p{ZW5aS=bhyNc6cY>RnWz~=a_ zx5`XMyyCunFeFk}CPxM*^nk&w_vfPys1hVQI`Kzsdg|)_tMh7;NeB`If1(B`)j(Cd zda_R}3zlk%u{~bXRLS4=pTlIj<2CFQNckQLZuP9vg17vA&_Jp*bPYnWtRj~R2{)1weRminUHnZ`2z<~KtxOJo6n)v=MF+%$ zO`7*~_P@GoV1$;4FiDUIda|IDKqBgp+Xiy1l*W`rnLZ-S%bv{34JZ01J2O8QEOlwJ zWU8PZHopj4&ya)X#H(yj?ZlS~e!a4Dksl8kUK>JkCwp$opvk2XwnyWfRjaBh*Vo7b zP8f#-ar7{8P63~)J9d6uvt=ttgP`U>_yTFth&;?!2DhkF1>v`$(WhKNWslWQ2bQ>& z&wd!z2C2QD%?UIQ#k~=t1KHpe+BEe4YHTlm?7+b+G1;{bqL2^D?>A5zaXE~EP}6+h z&l4J3gyjB5aX>?+s@)QBpQ{Sj3S^{0y2BA^3+HO$+JGe6iEoS*@E1dWv@+T7$7+_P z`8dLgn+n3^kxO zBflYh+A;IXHa;|zq<7PY5l$#9%6Eqww4%zOGd6U@ZgQISdt#Pni<_As8WAXsZrYuq$ZjE>9)4=!1tdvd z#dR%jnh=%LiE6Ge!W!hf)Y_MouLbvGNq#G&W9ov^3eI`w78m#sR2C?fxvbKJ1-rq2 zfBb6~U7JdKz9)zbWtz^xhFl5`(i>YAI&jT2Y#K$=V~RJX0oV1 z23e#eY_MDzg(TkMpkS(U2ux+aq6Ic(3WWSphnuev96U;|@MyzOMp~AZEkWrpEG~H( zE#o6v#wmx>>}*>`fKo?bwtWy_WJQAWV)La#(B%7{Fjyf3J4@AP2*XVgp8F(Ip!afd z`p{7yKiWrpiZKi9rIQb`O>?Rgt@xh- zslG!u)Rp|fcVG{6hDf&%hCoI?^7b*4RvCDX-DzT1N$%QJEXXm(ss^&7>c3CUwU(s6 zSAt^ruGw^OD6R!20xM_nt1im%UEJ8g3*#fNtCP~L$`4U25%A3UQPA!6q2YwhD2|QZ z7HO*Txix4_Kl9rLB5VGl2*xVy$&L|fe!J+@P3{nphk2q!QLHyE1v7yx>v+8LeB^Za z?kvIMS`MS+87j`1_QY6=8?NSIn($G=G%Ld<&~;;@{B}q9i^9{ONN;z~>Ki`%=&Z!F z>U`nIH2UK#Ekn#`oD(;oU8YB>TRV4rn&y*x5 z`4?#YM4cmJJDeEaHaLRyQ!A=r4@-QbyN?&ypT7GWz)P4+yd;6_meOP3u?R=l*!e>5 z2Q*IUv1NpG->;#b*e$BXhRO&$+9VZ0-0^o?Hlte_3_cra*M`cu(K15KQqe#C2<%)a zTbqOR0sk}JSVT(no|XqRR2HsO}Py5FDd%ovc8i`*}-b%S{L`jY`=<4#`P z?|~kJN96SDv@*Fl8vu0wluV*sS8Q*<#CfedAREY*#0;MWzrv)y>`3bu#yLd^`8U`& zV$9sceCxYCi4glcX9|D?j?M$2Y(c+G#hTrZ!u1}bH-1T{bUdIdRn*2QUy@MLH`L^U z7=pg~n`C|82=|=gs@nd;VwRL#pwICbBQ`XMe$VKVOsVvkHW8Pu( z)g^m2?uMQeAnC{R3zrw9^=v<#9&MB$U1TF(-rxBp|8CIc|0QZPq0P#LTOve9R9+E` zX-{N;*xozWe^|MLcn#rbgMHUu<$ajJ5s;=GdqFJPJqKUB1UqNMIPo+PZC;`&b@=_^NubAv&Y2VJ z68i{RHZk$j>zg}QQ<(*$2v~3g0@&Zv(JOhOe*?KfPz<0d$Y9=LtD2U8i}ydK|C^qA@u=1bcw$AYU-+25T^wroSu5+6`-B|0qg2fi4(N8 zzPFitCN3k=Uq9X~!HuFRH$j|*x4!0>5UpUHH z`U35vS)DSV-cUrl{u=1{!D-0Y>3T5ClBZ%%4?g6PW2b=A3tP!X_-mS%w%Pclshq8S z&cwI-nS>hpNJ#z2isE!zOlzY}0+%)<@qvu4af+E%jUPQAfv9duf5?j9p>6j7AH?HC zPLUJyPK$Evh1W2PzogM&n$T|ps=)bikk2zii1I=djHf1BL#W~XVFbeF6`jF@%e5b$ zkvVE3HSp>7g8#TPR4_49Ys;e=qc~u48hP2XRBadw()^6hosOj5XpgXTKMD9Oy|N~W zmB6E_kqz@IL)zkBHVFPM4kXYjsPm2Gcb580ODWScRhqcI6HkmH6!7nFw`_j_!@8tL z=${i4od6vcFke4`5RT=Gg{iaOCUVv6SI|a(x|BDV?`tgy{)$!U_yCiU#B@a1`|$A% zVe+X~=Qvm9P305A@s>}eSd{VSRE8CUAlGf-?L!J$aPWAgdosJqMNY~bZh-UT^Hvfi zn#6+jzgY)xm)25@(-b@Fs)oZ_4GRrVXP-m?56`VF@FlSnUst^D$r-c!V<8z3u6NLz zl-|*(1UYK(gpcg#=L_7y6J`%lV?)tMhB-s$&k31%NF| zWl?$VLn6R6oaEX!hpNgFF~6SRfOR@-h|EGn$d!t{ozIz63hJQx%>IT|I=YVz^gtkf z|BtwS{Y0&=f!qVza=u>N7u|SWM{QCj`B`8^^t9?PgaP$;buqK2xr(Le`N1>s@Z}QT z-m>gPdSR@9cSbjyN;&Za);;l5gTettGDYf+yN7kg7lo0&sEmg;HbV$!Arot*s^PLW z*dx6QPtC~qkEJj3z}w8zd`!Rld9n|H9#ZJiKQ^D_Lt5ZCe9#?hKGk|}P!2FuV%}CS zfUE?7`pPTpb{9pyn?>7Ni5D3ss{x1XyTm|j3iF1Y-H9NL>W5zq8DIT;&Ol*soBC^z zQA2VmRa1i$Tr4-JIPHrjQ2CbNu)w6?kr_pC-5PFkh~xRi^C1!FC&I7>0iYG5^L(wGju?xQxY6xAUqCK33dEqzw_qqNouX z#(lT*pu-BSpAdvA=GBmsH?SusMJtpMJ7&=TieENCjP}1npa1eobIH!88?$c$RJiOG)FN1Jv6P@Q36#; z{~^u%e{rrxRT)+tfR>Z0b&`f9(8T;LiWkxfuHhyxb__pGtw8oFh3}dIaQh*Ph6RQ~ zocQ-^i9?)i{I3dA_ygl(Ma9ylvF6OkSExq0e_dnGg;u|)!-dXL6j*G9MN6M1mBNl| z0Epf8i&c^;fJlJSivtXno!m0mUu)rs!JE5IXv$WT&N#UmyT{9@$@FeqD4kn8`TLtu zPD<=LSb_|3c;?{P`F)F2-)Nd*78L-lPN83N#f(#hf^ssl5D+m=bCX zY}>hAia(PGky;+sDY@v-1mPh3F>%}1u7&pHeo%*Vl9~KJ0uC42Ow*v)hxs1;zm(ki z-NB}|>XC2%nle<5;lM!w{r~{5z?@J79p1F2sPzmL@gqQZfuCTVOq_Id!D06}L~~%Y zkYT!W;TCxRjYa$tA9wo{YF%} zYc*Ow%O~Z_YND>72MYpk$gsx%0}p3O1^8ZJveg-roOnt(D)gFCb#P8%*`c=+9wH4W z1$Vcy6AfnTOFVwuNaWv)q(v&NeFuk)k5ZeHF?);G>LO;irQcH8W3>XPk+J)`T(Kh> zoyDEi>0OGE)~#>4Va<&+jK*&qMroh^+d{52HMXE;&t<{&$AWHAPCNe;x{x%08v(Bu zdYL_}Np4Vx;Bd=PW?&KmFPQ9t@;cQ}dR~t`NAqEPYmk$TL=e(j~#+o22VG zuywpM6wc+PV~BQ@z-xYBapw`p*HiZsJ?hR4R=RF%3N7_q;fXm!MABlJbDba>a=3@^ z^_Sr8Af}q0?DlOd^d5vA69p?r<&Z}l+L8p_rJpDFJFCqB4h>f`&IH+L#*n&p%{M;B zH2p$;H^z0iB&@)+Y!wxxdaO@N3PT!)Z})du*zviUo9p}6f5fgi8*hu*f#rOJ@+UG0 zeA4>QYdF>)UMB+Al)Q&) zF303PTPkfoE6+haR3iTk?jc)b z!#$kBJi*IlX>FWNhqO&6d^72#eSBSo9+x^8l%hjS1^tA4A4xT4d8*$d zVcZaiXAnWoziPF+6*$3veSCGV*`P4lfWcbq2FwT154u8ohYc-)x5)fX)IcX?YJEn> z>}35;Ob<9hjTBU65@~uIWCL$H#OU0$5~+h47mUuwr1Pc$k$?qECSs&j4lUdtgpRj)T*;t@Ei#?@RT5?SA!Z1Tj#3~s#T;%go zOE1Xay3bN0y>oen^I&<}6*vSd@7z(*T$CUE9i}@8>|5o`B5R=MvEVSR^ z)1(Az(P}Z0q!X5$rb7yk%-mD%L-O1x17-OicV_JT4h~r5vZIBQDo*s|8CE*n<2cTm znz*~f5hX8vclT18HMs zV`hcvyDsbh5Exf5u4gu^Rcha{d%NfV4Mxvt)m_y(Z_k2`Z+3{I3*#3J>hVIu$H`4v zv?AtgCVPiI9lW|5n)KYu_VFTp2)So*jPQ6hb??~U9$Jx(yF|QXT9>0Hw_+uwh53jv z{SRvRmI-;Dgj2d;oth+t@Vb%TyN8t zwL6U;{ilkTAM%C^EXMEd1=r|87Gt!_kB(-Mz@a7K}IOr1QS>6(Bd``q5&onAR zWtIt_s|uI^RhpcEUA8;(%*DRZ*!tk2$!?4K!XprUF4!W6{8d0L_v@%lsm< zXh$O*Y36hc7Vo7M=QHAd$)<~Rb99AsPgkryX$54xTPbfxaaH`7rno0-WKZCmqx!MguXypT3`gje1y2= z?l71->liLx!+N!bWy0Z=?Na#9Y4-BW-a!fYD}*I%a=gvBrafj-gMZ#r;L24iKT>~M zvFex{D_qIKd%NKCkMvy=q~V3Cuug}_lt#Ig%enK#@K)YTRCv!L#m;T>^dQ+VlE#kG zzg;pi$#4b2EYkKYnhvd|8A~4!8qVJZL-?Q^|s0q4I3{OD1~VWY;6W+*C6`c~NU zaWOdQg})aVEZ(f6if4fkOmDn64#SB693J4?&#U*luZYp}Ny|I0wLeXBGOwMCP=C!M z5X->3ztqBWf`5vMh2O@3jsfD_=Ncnn7X=lf-(UbuQ+o(tbkauMh*Net1$E1sH6Uvr z77*C7xkTqFS63N%vn=CEQ7==7nSlwo16r-`i$jw-sXp3>HI%kPkUeUXU2r4;iD`=G zRZnqttZ-QP{`NWH{`Z#{+^_H6e2g8)?2Ni3hu$b7W}FX0wd!a_a;cfcM^-s`zaF+P z$?KjGv9muP^pu3ldMxbctOxJw*nG2ixfPrdNvl^0A`)6K0yXgtN=dwo;T~3zv*f={ ze_Dp3$D{f~&yeqGRJfw`n^@VFx&k?ILLMGwpZjCh)da1mjlMoVH-Rd~JSD%Hwn&}? z^#|IHdm^)0cY!~)sO^vya!!HDqh>A_&KCBrBumy>e~zabA=IJD0pw9Jz`4VV*%{zM-V2JaTtE|oCE z8Jj_pdnGS0&-&htfm7j#cT#TxZgD%Q(7Khz=n41(5r-dl#Zh*;lI6$OR-l;Qi7xa8U^1epqT%Ti&Y24D_B__O}#&n zL32P#iGOr9q;%0d*iae?9ag(pG3NY=Bp=H|TAzROsIpcaK+1}$9swSVKrmBCZ_7O; zd+NoSG*J3{?$Cbh(q%}p9>HCG?Z@@!apd)Rj=w~fZR#I6hw}_CrlUT}=j%NB4HDJY#}xEmKkTp};=E4#{`NQEGayPrrs{PT_9AninJn~kvTlW=EyTl(}5(Fry5GI?ca>(I*WbbY3Z*W z$@?W7Rw$Wg@2jF-AQK~H0CIJ^>O-Ka?yFel_b+79e@MT&>s%39tM;s8PN+wmtwbl- zKjbc$2V`s0n3JsmX8j{lr4heeVq`iQudLxY0yQ(eh4EjulTolgB7p^7t<%S1I6Up% zPDtW3`>)LSZ(Bdn3F^Fkm|4SFHuMuB`fVv0XAiyJ_I_Fi1md0}>5k?}zt|i{M!Eka zxf^@U5Vd|Krm6r&QpEA5Xwm7`B4jxWURZ!-rFindL^w=3gWoz$6@ClI49k4$hQ8WW zaQafje0&`kstRh+_sI_h7;){m12%O3W``z*1=c_KM8tE*VnF+SEVROaT#eE!Es4?>OZ%32I0ECEshp5=_6uG$VN-3R4w zhme+-#y2w-*JXHl*Fm{cGh4f3ZH(2W@w$3O!s_Zs@DditFY6MX9UGZRA@BO&iDB5? zY%J5nA@a5*8R%$shfv@{Ubl|Qn#Gh_Ss;-WlI4HPUh&u-@H38su0s|a-b8Lvo96q3OwRgse=~A)KUP#l^-eOv+VHqWqiKL8D`Ka{Ua-Tj zMm&pdb}`49LTNH|3id56p`2c+ECtTw_`|G@&QAF%*8hMoR=U@$Jf$;1gf#e3*l}6p z|GMNQMo}5Ru~5ZZ9D81cBIhAu{Q6b5zWzfeK32)`?7EX?;rS2xhpuF4Bz0!k{vhkr zX?5TOKecxB?Cg9RehrylK_HbdE$-4mgB7T(yhB=DDt-7sFZLQ%tz^Ow6>5E(pF~8* z;!udl!E6M{VsMF^xUew{1|VFALO|z!AZpz0_kvHmtyD$!v8;$;9^^y8eAt3AKs>SK z=Bi=^8Ss+REq{1@G!6ALXo3@2ec@TyXU0gR1nR$xEXBK|Cu(Za@dx#Mw0OSjH~CO| z6p`hb?Zur0=Z@gG?Jhp{u!EI0?p#N#Sp?XOhPCFN~>% zels;T2ZmU84QR=2PLO3%Qn`vyu`3mhuT0KhbN$(TT0C_aJe$??9t%-P$KT*1&1)5F zPUQbU+-($f_$uY6j@EzI4RM?jySzA;&rDm-Q{zhqF{|Ns5EK#8my5FRZVRMF2dWhB z*)&mx4wA}gGEr_ZS;5^mz-@xE-ejkWT7QjY8rR&>zk?p=h^BbBjKAOJ*(3cvjhSuu z)Oci}$`#M{a%0Qk=0|z#2u1&nUPSuOnZ9XnH+3yGcUW(A)ZjT7^@#3!H}x%81K9w_)XkqF|D>?QkXAk$O2R9MtjY1I7u0`50f@0;rY z>U0xdOd;Os`OBfyT_Qdp|tj?fa#D~_p$ z`IbaDz#2EXX<$P1l76%tDj#tf%wsEU7nRFPh02=wF({8Biqurv8S4FD_KtUrWrdHQ z*wOCq-%JAJD#wsuiXzfqs$R6=-UAhTPrPric0CJKG-h_2Jr;Yd4l z-QA(#ll3;Mjpk>JN2~L|wiI za@8rP)Qs||^4+b|pfr0P?0wKmaN)2?8KZ}-<2e5MuOiPD0`|+F@)|~P>QMEP6+%o6 z8-hY8p?DTv@3}}nCU=?T;9tZ@;%`{=8%)1NU`Q3Ql*P~~@q2Qoq3)Nlo~{9B@yRZ05V@0jw%K zo7Y@=NQgd(A$>E;CCPH^fxYVI6$kW`auk6DY9n9zRQ^F**1eU>74X~IO2}r>Wg4A) z=+c*U*Nb{EQeNyuwSshMo28t}1m@;2x1QQU7wm4ynHg;{VB4D)0VOLROkM`MS2k+p zOCWp;@6iA4%OP^q?#*{Xe4j=#n`QCoNv83?oc7A9K(~24*Mlf4(ajMG_5|AcxS?{pp6dtzrcSU@er7&>2!{!a0D}vjZjDrY3t~5t;7-;#jd#S$4EWOBugl zI{xS~#ZAf2`|?y-V#RRlJc6m0;Hy!>h5V@5@+MMb#dO9$ThjEI^7-~1D=U<>5Hq&RZi4g|U%0L|(wno# zR6p*;eBanmelcUOi`!%O)<(;`^bz7)QX|en{bnN)Kpmiq5-A_(2Te#nF)IgaqSR(d zWLg~Fgr`t@Fb+#b!scaH?P%|WE&G>gLm&kALezH;$gPk38i;!{0Jj*K*Q5lcHX7Fl zIuHrTB{iVbF`+@+KY{lBW62SNa=(5B`gE^8mnzHp-<$6I^N|gLWOMZf_ zZdx|PNKYv9jKUcItoW0{2jD0cE8;GuK$ztX_vHR_JMvxRmlc_^H4EzFq6;{0Q38lx z>#yGt!kKuiBn>Z)Rv4NmRrn`sL?vC6HGPiQm9F?cfZ-x9(rsygisPMN+M)B-pbSdb zophH&!Gw0WffnmY04z6O@(cWZgwP}FyngBiIH3POCLJK(`thaJN1*BY~Y6 zKErxe?odx!*BE3i-vT%`>o%h+ipoIESFfpJt%-rQbmNB+%LSl%_dV`4+1phUt@5l*X%4a+EfW?ykq93(J{TU`SZnC8 z$wOV+B5(0s&N1D|vk|Cg$OLLi#QcWge}f{0nA&UzX$1pK66C?a8{hXF%Op|m?64mk zuT5A42%Y=YM%G?k5Kb}AiI(ds&s1^Eix9m!<1r|5-GO6AzEP-3n7F%rtWKO7p&I@W z5eWu^n;^uRMAnii2!lf-v@lch8c#Jp`}hKkJ@y+L6Ici4Nv2(}gof?m@51k+0;nth zShoYk4TyH;gCaHCxFa4mB^fu0*@q4fI_<{Bp*zUXCvTS>8DlZO8 z)Df=f9k;U@^4X}R?l-xw00}YrmN-CFh|WG)#<=Jc>9C4)nMsImS1XEHmoKWGQL7Gt z*dtVp-+||PnB7`Xrdpc|Hb|T{NOrmNnB0WfG}=i*X_I%ZRoT8J^)Y#7uV404tP@1CYAI$-Xbc8C9IRCh*QEr7Vs@m%zK&tfT28${_> zhpOsv!K=5n3ZAki*+P%u-MTj7n7GJX-gZBWVERlr{%#~>$;qp*!Ev1^c4b$cy^!An zwDfp<>95J2s7Ml0WcU5w4A_vqRLfx>*74!_rj~Z4)1sidc1$W0*(snvfF2GT?obl9 zf${Z6RqO@RqoJiGQ$Fbh0vQ7e2~9urzTRyV)#WnoRwjuX6`L|g{iq;oI?*7-U(?vs zS@HJ;4_b=MF_#*pq7Q;S`pAPug@t)`tR%a*_D+u{#(Krc$Lp%iuvg?d58tdv_hITA zPFG&_wK>Dx#my=p^)kr0oak4<7@eq+)|vY?0Q4PkG$nmaE0#CMwrXEbBZmq;^OSq& z5)Tt?e=7!Wa^rkul@*_RqH&hjKn5MrV}<9uuLv=|U+-m=nXx^VXg;Td9&MN>6}h#= z7l7KrAr}c(N^oMuAy?X(zQX^Y#ZgSP@g0Ueq*17j>%`MrC(WTTP|LU~IyQ`sv6_LE zXcYVZ$b=Dld!6zJ|0v8Ezy_bwdHd{w=F9+(8)e48B$wiGk~{J?&s?#0tm-L4su1qp zy;OEfWT8rA-}wN$pzH3N5^wv2qbMA)br=g+Bp%>pWtDIS7~4xt)I;Exwe9Sy<# zV4cIhO*A5={E^+@zuIHWhn{9^9XR~|FEf&50o?6no(DQB zM*+_PTcD}LoBgrMsp(M=7Q9SZj)p74c#O-M(?WjD`XMC`YqSo(Ii)p_Ld`fb-HK7d zGen0jQ$VIF1B5nK6B;beBB2cz0QZ|{uR7C3YJ=JTvbFi;u9T>A8H0zQc^l-8B+b6I z%mg7&%`Uzin9~6nXUQvvrFc0VcHD{?FkQnwj@Hn`uVzcT@BTaeV3@I$kkBefP zvvcZvfou0+@V9a(>|s*fE&^>8%&i$F9PZZvX@UquVb6ARze9!l6DD&K>X5P zG@-5UJayY_qLbeV1t)LSOeknHw*f`XOzJ1$LyratLbJKbU7iEY*yajZ0XOMkBQA1}kh5H(XzdbUw&;)&Px}c^#KY9SYu32X>pQ z0jSFxO}G!-GF73ULX5I6$@0lRNIA*YUy@IfltHX_< zK`sME2GP3doNdPl+EjxI^|KbNrqmZb>#jB`)f@dCS$cqauFRSA%eCvcA};pHaD8Wd z11*v}I*4_nL5aJ2LYwj6Ju9C8HAWdPaOTmwE3%-q-R~JIN!DY zLJTke)9BEo_>nI)iJC;z@YgI%JN}#PkR;Xwqm50PjHJ3+^{b1XAmH(~)sixJ>RS0p z<9iZOU0&y(Qoqx_i#|e!REg7SBTLdk1vzGJOJ>0p@+KWl+2NO6tvC^ph&@dQo>FzY z5IwsjZFu{y4dvkF^75I=srvvRH?ysDJOu&Xbvjzt7R}fMaiQxbEb%&*OP^FqCF&r4 ztRS}zCrMR6KZtvAh0CL`;?!&IzqJv7(rFM2gy$>{+nUKxADT|CHvwOty(d>0QDH`X z8FxXV{}pWA`HHP4}5WXPlsFpy4g&;z}r zB|pllEOIlFn@S^wk0TFOMaRjGhz7df<(3f{E{V@7ldGDY0w z`bxBJ-%vz}P7uU1M}UGhwBxdJFQ~KwU2${jOe$wb#8i>~6br0V?Bw4qEmf#j5$Ekp zO8TopGN{y#su?LI(%JaoqQkc|(C<0lCr4U^j6(`6ddaMP&g@+!WhQZXlCR>Mk!g}3 zAvwX*XKKt*x6Zb$o<>K_@aQUy{gw|?49O<|u+^k7a)6XzuP*=gdi7a;L5`<2!2JJp zS{u*JlBcrrdvNNFK?qacRNd zJF#%D%O|ew3<7(y>SNEy_~TslrF8MX^btZdhMh_%itK{Iaup+vqhh1u4QyiPdl>Hu z;Q-0jqaWQZe5$ z*HL;Z+UCfTiyNX@Q4@GfE8J3dHlNIaDO$#Ku{Ex3bR#)ro7-&*h{tHHtQIPM5LJD6 z@EEo!ec%c@t@rwU(8Xi3RNg<@+6bIDL5SY*ZOQj0J>@C+loJ;ZH#mGGW*`+)7G;p1 ziPv<|3&NmTBzPt}qjW zxtbrujCR;cC%F@yu7sXvq4DSFEyxr#H_N&>u_M-Llg6j{Vw91^boWcFg5E@V(GTZe z`8x@R8K?|Y)lIwF(?s}!dzzK7Qz^j zy^99<-<>XNGv<-wn#{c>Kr;+x?_uoS(Z9dl?`- zk&Nit%}EsHVL?GgP6kfJ8n(ZU@_l;I#R&L>e#x8H_=`F2DRK=$-Cp^k)EZ z%d^5<(>PSkOdW4@w3(O40um0+<4OTPkTwd9uZ@tEU(v~QuFC-yO+7>-?C1!Z&E;6Y z5Nam1!AX)cDN?^YXUfRRF~K6%+}Jy zA~O^8Ka@>WE<%D^fIceG?MVCq2~9|+a4YE|1ye0lO0DktRl{Gh{}E&$z?tMnG6+Z@PP23Fu>FV9e z{2QQ>ta8dmpszKn=@u#&tWJL0fzWtHtt@a56Ps@>iP3BO7yV$rH<#2nxcnF2^p|$X zWjNFTkJD&Lb4l`GbVT0(@V-3~?H*eGIs12#5m8v(Lb6^1eF5q)>d{9TUL(UDrVZIk z(*}K+690=!pKa0|frMNZuX3_{O_CLYIsU%L-T~y6)+{}fru|`PVvNgfJaZ!SRl0d7 zlj!tkY`wBub42=Vc~d2j5>hSLJ*I08H(0!XpMjh`6q+eu9Kv2~@lFAra3?Sw84`Kjs?GNpCEa5~z(eHbT z$rtfCcibgfnr_48K_GaoZLLKVjLl$5zQn11p84sw5BVd?zbrH#^~C#L)8R{b{pvRX zh@r|q-cMI*`2~nl`l`|#mfAk%7x4);R8>D{h55eav&8h|K9i$<{1h!oSmYV)7rk5= zdDhq+_pmKYPTMA)Ggi%#PuKgdp|;c;^54Nlu{WDrQr*+txu>IWh-V{j4%6^>?Wa;X zsY7RUT;S^y_D>H7nxgOj&FR3b-(%VJSIs93tbo{ip+1qWYaR3@mGj&^14~tqp@znS zN~RLutUWiMpl=0u9h~?Pf-N#2sNAe?2UV{Z(iZ1Y_}@fjtOG6WLtCixS*_a(HOX4a zC57`1J#QQFEx`LzLDk>u97OIxRaoSb(+Gc# z2ov)FZnW+$a8UY;1^6%Wnay9jMj_*-9MgVIGvm;0pJ5;_ifZTNJTf+!fMa=5jk#_^ zg{N+qqgDxThNxEM zt)$cID|+L6YsfyWA!z_?n)O|)rOy$?*YQ7dnnqp>hq83YeibM;2-7>_yPD|Ku=P4Z zImYTZ3)qtVJ_J?&HMbdba-8C0^c>S;98Xrlphs?hj96~SyA?SGygKr1yb2Xd-Q*p= zg9ke|^%QrlHTyrfDZ$Nu;fPp_nFn`-H3=7(yM=-0YBf@;U{$F6^NASa zm=KMp4<%v3CIDGokY9^Sw@ucpk)6K$dP}KH1smc%0pGChF&Xu; zklEdiSUshi!I3FwjxT?}wHMiVZ<93%vBE?z)~}mpPp*{(X8tsf*+i;8GMehu^qkg+ zSjX{KYIg*#YH(1f5B4qhG3ZzotOVXvPX?C>5i(M}-aqm_C(J=fv~>0XB(;38Vdbr} zE7U8!HbBjY*k#GJv0RC3P?3WnBK2th^3RN0?z>m1+j@kO#b~ZPoeiAzGVnl%FjpD$ z+w?|b9a>WLk>0t2(bLYAbl*r#<*+hgV17@60<^g6q^Kfo9G4uiiDgV+M|mhzVd>GT zKne{3Sg$(_FtrFwB9cy9KaHnOGs=&zZbM})HRfXZ-|)Wb1wf|%I8DdWcro)th9sj~ zi#5)rg-M_MjNM<$5lK4RKkGTTLq`d*Pu;@T^_8)dNoqbIwZrPGS;!*=R4}{rF_%i- z|M{Sc;hT_%!Tp5#&?U4#((Z;gZgKcaO9t2n*Dgeh*B{N``81P7)rqFCM9eri+vK=S0gPL3a`Q;^L5fu~KN2#x zQir|OicWuYv+#sVR6X?-Z`^0=iM>R^{uQ6|Ce(aodqBw+i+gfhQIyB4(LwqK#N^ht zBAOWENd0D^8j%$IANAa<7khjUrhc?k8K>q*T$|3UM$nDu%YhfF7yJEr`FA|A`xu-T z=ZtM5u2Jc_HTEHQmyCB2P}cR0NRa&-C_b>70GRgjKlXy^p=K9(X@Z8E4BS4yyI zgnELvVaC$oWmXBS;!;#)&1oGLP~I`Ojl|;BvSIgETDxPt0l&yA3&>o{dgIKCgzA0%*8)9 zfM@`c#N6a`>ygipdfnfxc{Ox#SL0|R7imhs`ODIUO9m5NR=d;`zbV1vGJ1q->1H>d z*Z9>bvsDtnbG78+EW7&Mam19@>aJd?+$h(`;APMC0PM1cni5d78KjB#dmY3m%h1%; z=V1Q-n}7$T;Bw=sCK)v4d@uQ4U)A!BhD&T+MA<*Ixe#5IH@}Mh zP8b2?7B^%mh`ff{qEhlIl}lEkxWVkqu0V_Vbfe(}twVTOs2xYA^ zDb(NM93aM3*&0Gmrrfd0g;DdMJ2S>&Q1{z1rUP;I+l|kKc{uU^$a>;kF!LM-Z!fWF zn20h;tKW@>P{>gG5la+XUZ^+XLzzXiB0d9iIjr=InONg%NL(`M=y%$+4n`1DXX{2j zE8m<-?2b$K#^hIR7!GV-N#HK)L~Fux6B=|hqVn0-k$sV*wBZQz;2zPYz*Xd%myN}p z+p8O6MhQ2en1_6wL6q<-m!=}<_)7*yx#Zb?Q;t;z;bS}2?6w~thB;#{eRjDH2naJ)3)iv@y)qD;TxbQ z!0D?=5%{*yFck8@FhLiMU$wt;@Tj$9NWYK;FC^?%jrwN`ML*eM2%ec8w8_ddr+Q~N z;p@w??qIIJqep>b{;z3rbk)xOSB^`U(4^HhvGh(A&~;6iXYF+k*iGN@=Nwo&DG5Dr zQ}z*Cxc@MyCJW3BlazXH%}Dr5JpCcly{O=oP2fjuY*tsWDAI8RriESyPY zQ8H3V)5c5XsViXv?kSm?o5}vYxcuCb9#?Vjb6xJcRFQd6|gMJRn=o1y!r2qr?gD&(n7f_ibXWdFLo>~?vjF=9y55&q z>tNS#d}`MD)6J+v-jMVGOAb?^h_pOzI_^HRG{9+Jj z=?GE)E8gTRR#`RxwbhS8k;hRBTtyZA4NRbI=0zQKXa@S<>U%ZgdsFE`Bdb_GbE@s< z-{4s9ui5}jo+ghLWf69xs4A?w^50irQ)&ss>HL?iV+9LnMKZ_K4rj#oPapMvw zc$AxLAc+LK^=(y+zVd=`;3u2LU6q~+CU>VFNNT&9ddy0R;Qp)Q2K&XD)D}B*B1Bf? zwe_q|8~e#GO;;OEN6XGyDUf3fvTGaB9tWpBS6OXnPmZV2>M`z=Jr=R#^#QTt{QQ$= z1;2dvxG?U!{{oZ6<_VyLjDoNEqkbVe@xY9yG9%ehq!vJdwno+ehrPv^@tNWZOqe~F zXp2ehSf+vVG=|@G@PcKLtv;;}4@Xf?f12LTwq~$-EMBlvwx+4+WHr4yMJ`QLB!?L%9HA*QWGtsW^Sa+Ik6)k zSY|g=Xtwoxy{mt= z&%^*V@p~$Hh*lrv`S4%BV27&EmvuA*mLE^#*vYw~FZhvNy==Un;3joIdI33^oR2a6 zn?V(pTATuC9v)aHN%?OQfcksuiQ|?RU&=WHswpL}MxoDi1ZFD`{DX%R0Q0i12S z4I<})1{8`fnkkCJF-urp#Dn0TNO;Z2^DV!5eehQa`#UaR{g=licF~njKaNdJl64O`7z7Y^uz)VvTs(1w`Hcp1|xL!dbn!Kt)S zIJ0PK1;syU=jZNmz|7druH2a2eUp14S@A8+*{UEc>9mQ{6VLglFoYAN{gLF(ledEr zi@M5i4!dsR-r)LIK&-~G*Oiq}HD1|;(Y@Qy2_RUXL-wEXyaV0tHYSQyEhRv+c7YP* zGEayzv+4sKF;g8CWgp*)ma=kHI643NZQq6VS3{67JY4o5MEEz`K3xCzCSGQ`TO2*F z=%z)-W2W=|VQ1?jsFa++iq40PE1`O~e+@fT8iP~(u--p zG#E;=*M%+9Qm3P?1~jb;{I7nPCkmRo_J$}{Czz|j=fk|K^y?LV$7iGU@gDHC>E68yFfrWYwD zAjD!B{tEuyqdI&YXeIzu-tnJrRdaJ5nJ%G3O-db7;0249F55`jvI+tm0wCdU?pS8p zeXA|gJfU)&IE8Ak4q$jlUMZHZq2|~*68zq%4qEsOIDX2_ux@Sb_!CwOub!|8(orll z{R9Xu#_`8GU1h!p#$*v#BUbcSeB#+hc^<9##l`gt`4*xgcd)aWG%=Tm1vA=HT`}FD z>Wb|RCcW^I$WB*^G4S0V!W!JS=_sv=la2)zI@g6U_fw>x6Ap_&;7b&cHJrM zb=4%Qz)4}^B}XuZI}@J!aKDUC4n)AunO*Dlx%d$X22xhE7A#1!ghcuM%jL^&8Q9qe zU2y3yo96}B5VR0mR>;<9ejDl)mY^fO>2Y2t+zi7vmTg}ug@Ur};_R*KcTPw@-qwwp zPwVZ8kvZqIb*r9b%3QTmqIgNdHar3W*i=AE=|e6IQ3P)+rIu_0SPP~vaX+Hbfc?_bEU~U791`+cXVy^I3 zl+nZdoqfrbb*|7Eq}!~q&7hPI8QhvYU~FC*>K7}5cs^YQlwZJ;#`J>QV=P76C{!ZJ zh$Gq;kaVES30)gMvQn(b>8PVQ>4SKz-?Z@0+h=uT`ZYhYOpZLm#cw0IJUv__Ev^{? zDIH8yihOe6b;=TkI?-8n>hf+<8NN)e>| z;A+=`9B4s#Q1{1F6?o_bI?|9~I|h1y#}qoS5ze%>yD64(rJVma3bmiLnIcY<^&n6P zyi#-1HAP16Lhvet38NuVVC9P`2Pe1(34s7wyavU_zIRoQz(f{HwTr(9q%azMS<_TK zb@Y5iIeZ6envV$QlqU_Oa%yi85VeX~TRhc};m#F?-lCS}JM1VI-?8&l>jClF05?CggjzAu!+T;4N}bd}?}1(eQSDt1bclK% zT&PLZro#x+vfle(XHA2ZgO$hG!jocnjAPurG}DxKyjSZ?tp30ovp_Lw$5xE5@V8;+ zrXCi^`mwtsdBc%%Iq*i_99Y46Ll)NuLG8(osjqwc-JxcBDasSJQ zjQCSc8A}##w`RvFIP~IYl~Vq+jLwF*`|n0ol$T{hzqFE72`B!ptUhWAx?WJS%1+5CsFH0cyTpm}k$4MI>PoAP zTR-t6il*`XS&}iAC<2-2uh&#N_^E@RE;kAZ|pw2r*_#;w|yQM2H0H>Q{Bh)03pp|1iiDx|YJir{a;)%(&C6LA@xKh$j4tgb3W5(uS zYCLwBDAAvK%hf4rPeymN`c{=Sy$f6Hf^gJp%T$f8VN_Y-$b?ppG|*6 z^IQ8p+nj|=zih)`EuA_XtPI^dFg`%`*sr_~JbDZs#BZtd# z7G~(6&uomfY9FIMv?!=d@gw99270;tY{jUm`D_=FCv~TErLV^>Gx1jTd~a$l5)y*N z0#cjGlxYIR-^u3w=BeJ!oHzl#nF-fYOto!^AMjJ4X4pwN;vGyuBZm9 zj8G1xue{qiTLfSv2dkO%R!6wq9U|Rl$d%ON)-wGYe<7B$HfJ|xIs;pV*!O#ElQ#>5 zR8TYe0h*$2s*VJDi=(8BGkJx-kBRTZ;k+veo{VG{8$GHN9g!e2*>zjmarL85*pHm@ zA-0w85thrPNG=~EfpSIRGk0c(!FJ5B8ghg^-?ZD2}F_&aTcU+h>sj(YCEn;UFGzpeis5H6JH4X8|<9 z_Pe{Xah6z&h*mvJIRm{fa2qzFN|dcn{b*!+F=fCMuq-ia=eGk%>}S(s+2_@TiO|Ho zyfZIN(V13i=fLxlv}(ye-$+z|4_YpDn;T7GCTz(llBx$qyxF9@y#_cmBEgArciLzJ%p$h8pSOhEQH|ywUI52;v5;sVJO*zkDq(AL{g?e1Ss7%FtfVKx zg1XcN=n~~b?F)35*E{G9;@2)4Os$Y(lnl#-6hrBC7X#09#Fw|fhK{yk(ILs%Ru18a zZ4*m}Nm>fUn&682OE*jE^FS?8Q~=0-9nAi0p_u_*D1XDB`*(vD7n1@PKvgN$1#OVB zv)kgspp9$937^bMJgpCqR~4jTHT|6hC32oFL@a;ysq}>9Ri=P{D5&7?f+$3H#DiHq z_HsH;H%X4Y4X}Q-Pd}Jsp?0_q_?I7F%M3Rl?7(kZe~S4A%#4B3BPcbg4pT2QVM9yg zW!V<5xN}ml?jl?{OO$=qQ-z8&VnShhsVv6T#5Rg}4rva>yIZDj92_ue#!Q>=T`w2F zjlOW&-2mWL6ri?L_-)(nlV(4weKHeM5l>>^&X@BKjGNXoHf@_F$=(HhJ-dy?QLn*7 zZo=cg!$V{CxQ}J$Pm>Di)`oix!zfUrY;u)&O7M6D$pf=(q+$eA0Q^FRB-KALI0z66 zu=%vF7Ei1kv5+h)e{}P%`Lz%kw-#E`I#J$hk!}hntb4P2zM zEU|_e-!+CA0P5XL+c2a+0Ho|f7m+^TL#0CqM0YVr7+1Y;`*hEqh3wv}k_j713(-c| z=r0VjuZDgTk-O1DLI zQuWJhY!!|It8A;_U^2^EC*9(ovkXjoCPYsSVAU-zTz*Q2Xh4tF$VSMVaza9i@--SI zaD+BUOR|h=1cfkg+w!*0D5rM#zRt2Mq zd(#=$;x`i*Uemr(|6%0KmSBF|6p4)m{005Oa8OkpDtvWLpT}|2@X@Q@utqPl!OP)qD7s(*zY_x9Y=h#Tg*RvfZzzi>&AbDE3oZ~joiC+`eqGqe5HSn- zZLNrVOoqdkf3CdRW{wo|`CmJ2cQf}u_?~L(rgy&=g;k~VIh)F@Vg@dz?QV8CPvjw? zwK9n^WYIh4&Qq7z7cU9RVt8(0@6E)=ozQ<0A=aIk_gZvLj>PWi*P)HOMu@{rTa?e! ztz_TzA)H536Qf0|5bv_~zzlbp4kIuT%;~a&(qkZ$-tuR4ez6n3M%1rI0=C-y^htYw z$$xC+0W!ZEj-$4 zbo=SV2s;hY-XZ|O+(^g>_N?SQ5%D#LWk6q?N5gu-;Ug#s%6o-LsQ^Ktu*+3Vjh{mJ zc<*t>Z3fmI-Lj0Y?d0`Kt`ttC`TR0uthl~6=*a?14^>5){?*&Jqc&c$6ud?+k0k~k z6q+svr$ry!f3^1IOm9K(Yl?is*0UQ#@hvFa5C#F17Llf!_v{#Dc3J#?6|=5uU$Y}q z-;=6*Mar~VJmc)J3Z3_hL}dFNFz=-GyPiq_$ZIRlx-soMUar^z0VO=W(ca9gAzVo9 zjbr@n?LF4&nmTU<_MJF;sWh;6tukiv4W!`F zSY)o$`6I~3hALsKH`FP|u=j(TBEu3!_cKuJ{rtdAaq}tOl86a>uTG`jdzg=zaB?ST zq0-ki<_T?@bc~bm5_RkL<;kt+gaFnr7c}yZY{IA1w5enb;-3@30er=<^O(Q+B;;q6Rzfd zX>Wwm{i?>I2ga$64;r|9Vql-zbH(S|!jO-eQ%uji z6;KTAhn8cUDRfOWV2M&LQk@vyfl(>Q&NPv6FB3@Zm=o1SiC)Yqz=t@2cZ1x;jazk+ zkNS@_6+kNU6H5B8I!?;11(ZsdYozZX&KO)POxwt{36P&lw4L*MSU8R2Qvo_(Uok2e zVX$f@)tKO;IlGlO({+QFl{kc3)e91*WB<~1uH|HAaJ_wMFr%Rhk%sLd^~^YV%?Oyz zhILE{>yEVMJl#HT?OJD1xHZe|51A+df7(tk76DA8TV;TbRfUBObB1%oJv6*h^Bh+l zSLNR8H=;xv>wri=MYNNy=8eicpN9_tOx3Y5SP+_u!=*Cf6Vn*NdFxA}u(W#5 z)A3J?o?akJ*DPf}Hnty-b6brftd%^++JthYVuI&oC}`SFj?L6vbgjt#+=)NeRq5Tq z9e9u#h}=c2w@Vlb4D^&~8Sv`CpFY+0R+!EN>`dI=2=3VQHt35%9h12C9$mM^b8_*^ zTYkH(ZcP)MkR!Ho`ZcB*2zbQ1dwm5PQ9Sk5Bj@!5Fl>;dkky191-Y2k=$u^C7C-z} zLg91L2{uGkT0`p`OBM;^E^MtZac|o%2bEY;hXWb+xwvYC%4$prFDm)0?U}8F)Gl<^ zZ(i8y)$-2?ZM*)pK3sa8+}uUGIBEz0RGtg8O}DfK>FjDu$4Q8z0iUxBuL}7fAHZ1c zc97X0kaeH8S%Jx@lK9_{=816nAF5<-WxeB;8kCi`nfmqV*G=c6{gttqc30#fIZra; z;;X+FKXyL)#m>Cdlvzn(K{pk6?V}@^*?|-tYX)p{e(X%0#LrSyt{hU|T7=T-cUVF6 zA}+6SV0XyR2W{Ds9m8nJqiNUOKSolQoU5u61=_6CE8;EgOOqH&HWr@;O7Gc{9G75Y z+O$7pJ&9k&;nFR^K@OXob7!lVgZ#KJB0;?oMXBVXnbr>35DgR5hJFp;BE6+1rs3x3pSKzk?pq;n2A&;A+wTQEy0mx$iu6&0d0 z%px1lWr+UVuC{1}{>Ok1_POb<3*+4AngsAkJzi{)s;`4QAGet&CDnSaeI?I>2 zy_OSl1(Z%6S;9^HK?NaX4P#}GvHl=XF7cLTC}Iaa$~FM=%f}#T(7ulAY0uq`K`{MD zyb*O*xzr7lBG2|*Oe40>PxMQ=A?*XIqrxhPT69N^jcg=chy^R7tCn8i-yZYCa{Chn zmV3DTyxF*oy962{L4p=ic6UJX@kc3a|H8ocZ7?(oj*waLIVh?P)oGq;6nz%caR#$j zOg(8)Zgz>;GPnMMBFqAv%S4YAl z8MgRkQ~+G10hyKmMY@dDLk(tn-O~_pe!{SpUbw8jrOA&n)vdD@2Nx z9K` zk}hLhO@?Ei^9G^>MC}zL3BUxS(r#G%+ryh3`tg@@5a}jbw7U?Ty(5ScpY{|bXUPVTS zIriolNam>|f&>$k+SbypDdM5G@NJ2KSOos6N;2~4Z-S?VQzM8Sg?j|uQvocHxN9Yfm_MK^UbazFH(00Rr-=q)sqO7>!zN|pOUKAp?_TyP2=Wro|k#>Kh~Dx#>- z0%G_pV~WA9W*9-dh5XyvZ?kifIvG_iOzahG_J@y7AiU<3?)&5iI2p;DXsa19g9+@3%}3pQ0y+|eAIZm zin#ul5~o}loNM1yDmH;RVkG3E*w~y(J zK-2P{i2l}#EoFDghzB}|EKBNqwtJqd{u7ibdVDqaAl#n zX+1>hF94E3v-bJ9?T`*u)k$ZS!x(mKk6tqx5MjkT^g#DN$Yu=*e0 zEe{*hTZf$LZTL$xgE#7{#Xo6Q+i75lqElo}^`O&boQ#s9Uf95juqslSYYv{`dbRMp zgp8aWKud8B|L0Cz3Ve?tKtw()WIL@4oDelpK~XOel#xfV-~@~zC5}4=)6vM>D_|#@ zqw%l?lFX$W&ruHP)0Uhm6lXPl*26l+g6sB$*sI?>(yD#vI{(J8+DnKMDWJeR&q&d1 zU~;pK=7ZR!$7B3Yx>@qf&8;v_tvl~to;Q0M=4r;TwDAj%^|~hbk##fzEUARAJr*2c zDTuO1HjDTA9`ub}cPsZ;Cv8DSSm39{|2zs!FN^1uS)42%>>>8U1!sk>%#I z&S!e23vXwJL}TgaS2hY_cwII4<@5uK*SFm zGRG1~An%1CF71t(Io_0aIk|FSTqsW|nu_dG12;YBZF4T-@v1TMR??xc6zvVNcE7|d zVW@Ba$ojw2SxhBm6Gm-l5|7!%HFJlQkp24?QyoOi`Ou1^b){%1LR&3IGHi$R-2sJm z-+(Rw0c08olay|9=XIKM@Mhw`Z2He47NX~9$;qHlcF z{cAQZ{_cDUQxMf)OJu8(Z|C9vT-ejuonrhZ5m5W|5L`y3uNQF&fehP6WlB`I>4K-| zdrZ3uqHFRzK>{(XZWAUviU2_(2=o$^d2LZ*rtEnjeI)0rc^nYes>w06LK^=adR-yE z#qACT#g#pz4||nSDl=ks1Rgh$)KFvCD&Ay+`-P7+c+m3au=MZw74WvmaO`W0nqorw zkZ$N`CXJvU&_3JGlZ&MWT`>mc^$Pb-O zNx~{AwCQ%Xn%o47%__~S*`^nPmRc>+b@|u#HilnL^q|LVmcJfN#n2%1pe}QCt;30P znj+w!y?h}pT}2><66M;#ta1Q&?U?**JkLq}MW&bDO|B!>;wZ%`w@j%E^L<4OsTFLN zl1nBK0A)gTNb9p#&fk(*nnMdg);8!$dO!hU&bO(r58Bw0*a#YRBT`fzsxq-@*(Lhx z$lxtmDqRMMW5JPz2r4az*?Is;%HvlPKi72q;%J)8t$M5%U*DQt4{8thI?m(OU+Lds zfh>$Iib)+S@4OHZpu-rrtW}9D#qjk};-t|JNN0=2(}Rl`7~==fmzhPj`uGzRQz82r zz~lsWl^;0g;}g0)mVMujAe1_esj6e9oB3sP5KJ>Z*WKtU->sWay>D8L*J_V^Y<8}6 z7`VdP_N-O3?zbteZ_4Aa=1hi9Qfme$fkW4qv3o&_4mSO%BS>1|SeUyeCM5sn%udSi zCwS=#J`z8>tQ3T{pti^O|dinOoB!* zX|u!?ho{o$NvBeHoHf@~iwD{cbSUNG^`tF38CncH!iNX~8soy0`vO{0P%BVzj~PNk zHbdEN!>z*ay?2DzUUmz>Dob*2kVyo$C*N$YYU7&yk#6L?{nk}+mhXaQerT8Yx(WCj ze+p$@W6y!x>u7b|rr^G*m=$G&CzPgEN<&TF6n2RwEGmk*&1a%uu+z6daga-U7q~DC zk{~}8d(Y5s5G#b6S6WXgkX z11jpd455RuEjnB6Ate26#{cm`X+q)QTC`Qv{e!GaK7@&!*jCB~p`W49tE1SBQ5 z&U)E+qgio==toxy2m-r%*JJgNEH?=XJr4Ui6Ka20F48+eACK%BDp%q(>ped`kUl>8 zO4mPJ7kbX_s3=nHY2Wee!lVga_5d8}jJzm}_T#Xi{vrxt%)1ix3* z#@i9_na?GfUI;it%&Q@sr1vb87gY-s+wRRV`ToLiQ?rk=s~HcM2J0dhlQP4)c73VX zI%yw`qtR=~{G0oN}5z+yDSGBlgcp;n8J+oU~h&qgz@z*@Uc+@ zFjWA(F&X!ywnVsOt5*-{OHI|sx*CKQV$3+XY1e4LmA1qpiMO5?)FYn(gy&r86zOt>h&XgT-MQD`}cNN$X|-2 zX<=;WQ9$~UhpF*@`>x=SkNM3LL11S16n}gN zWSaQq7jJl_gG6)00HYaAkHO^>6UeOWYAtGhU^ok~!c0}`gnl{!0y~Xuzm4 zGek&VpDC2g0F4+#IDtYN4~o7m;cHk)^$D#1w0xf7cOb)#I<<(^x*Bn@HRM^g^cwB0 ztS5`qOie$DT%vsP)7l7oCck!Hmftt67MA$C6ID8*qcVxvc33LbLjRtF==|ayrZ>2$ zf8!ep3Rbi;a?4p5hJQcS6iEdr-PVxsJFrzejl~i3_@%AmCRIgqV>rWV2A*`IfFUhH ze!w5K4nt#poW~Ew?Hs~k*!yLUeT`YfjH4!w887Mtyd_?ZT?7kq0IKUz_@OXUk0GE# z2bvGv?Lr6MeSBf`cl5)OB9I!6>7;Xa(-Ik!@&6;*kRrhN`g~{&5$Qv-t^cO<9Igq% z4{*p`0^p8*76Fjh8K6N!)^RBqIact9ROe(4iutM5#S1V;YJ?zeTsG}*lTLZ!U8HjWz8j7XW`D0N*pUz)9t$01H=F~= zZv-gDrc0Op>Wq;2^yv1u4c-?^>|X)0xPeBoRb$L3h0IP8w{0x|@5q?D)}WR?v%~8? zaPKeq(XgoMZM|=LuIE&{Qg;c?)pZ8oO_n~Og&uh_y=!pvS22_{O1fwR53szJ6$wt~ z#j^{ICEzcFF&c(S63PM@lsqVJ@%oA@tR56)^gv}FQXA~4_ag&=B^Q%rJ4rC+7`HWm zFh$Afj~9%M7quL8ZU_*|HrnLQN)_33CX3alb@o!*%Ph0#42s*^an^dx;C zf|5B;Eb6~?)kw0D%u*Y@9H|%s+aE6eMK`PX5h0swA-H!H*}aIXY6I0xAlMy&UG74N zRb4KHQVARrf;DH@$y#qa#?{w05u*Ft?_7Ri?eg}|~DA==SWp(s;7{=mN z2Z{D;i*=G_a0MxVAnsK_#8gzmOX7L&iK%_v!|eotPRMf~W9=RSZV|xNW8}$sLWOFj z`ciaizRsA|T-wd`#BSK|ZA~4m_dXt$%Kl)sL_YPcLcRHOm)fUuUDJ}=6xT@O#EBUT z9$4H}I>s8^S{wU+x*AA^J%+RD3)Bc^2tj5kmT3Rtd+|p}eU%e={w@RiI0o`OCzsEJ zWLhN^GXi=prM61P>gQ*;X?pjz##W1*XG`YVD62W80RvHxk2 zE*#FFpiIHS$SkKQ=ftOC%pDA>y$!*lV0|aQ^r@+eM3i##eGg?G9~DRPKLd!H z=M(<3!0Ra*bfCH`0a8}z&sSYsv({{xSQRG_RlZz`=W*uOtYVGi{YIGk{1kh~Ll25h z%%7x49&qhhmGS~0wVN!XIt|S8K?-Q3DwyR51!i!r7ieUviwb~sA3@I()}@9 zw51~Pll$6nN$1=hzUa`{atz@^Tr%xEzcq#B9#gTmb%%PcQ>$aL54H@nhaXs^tos8G&z) zeWgbgTHwKjKtxubEahKa(&B8mSteIDgQMRFr#tksc<6ahCXz^xJqBW^3tDHK_HO{U zU@t1Vo6Ndas!5 zvpszlQIyF{Nhe2N@x!(e!nQ%cHw^%_OP89J&$91+++sAWhLG*Fm`-Kk&RRXTS)Y4t z1N0ad)fnzUX80xzA7#ZRGz1hVp*+KCToG)My4>)HeAuW{m|&Fw5E@NTnhT6NC;39J)>b1$JD~3IqZLKNlI2SS!(q@+hB|aT9JRAGl#Sw>j`B= z!{ZqYcnlAVZg_3NY>#P^r|{qz62TmIUe&qQi>bSw^wSn;)YqU!c=C$H{QjQZk)NsJ z*m$c)nZmdwkLbrio93|`MHRJ<3C_EQ>gTfkG-so91ld_fm+U}ME$*^*8gIzWlYmJl zSYobNVs!^mV(E4qiT*|79c-YSV!4pA#_AZI3_Qc6MbrmxoO`Jjma2?}0|968vGXiU zuW|%5<$$IKKT&+*6+U21S1MS1@{goq$%q=Tob%PLr61Uf93T%NHwg1!`*Sh2tw#K$j^1uA0Cj{_T(H&j^~qS z=uyh@2b2lwx(nI{_j@EWkPac8I>c+hx%jnRS<3KF&|#<|=<$Pp5hJW6+uA>N%o4(g zIM2Yz?%rypEHKHhJ_}_%@6SPDzn9rA8YpHM5G}I*0eH5}R-@ z!Nu#LE)+!HMTX{y28+NtL5tL~bJ~apcUVJUq)t{m)=ABjuJQd`Mdqd;W$vU&WU3^5 z>8A3cTLXky7)U!ue!xx77dC0RIBnh|A%uk)pLaCz5V%5qIc`_7e((~6iEF#}WLdKM z1g~r=MyRzB)UiiyqPbw&Vqm=D;yb@GG>e>1o(wRHcsa1QGMSjJ*+}Tnu3lVM(J8}RSk5lUsx3dp1h~HmE9{NB@jh^#*{-XzpT+(VBB(;VtPlbx_0ZB*gUUusf zw@s1%qH}G5;6K%wSkt2;w$>He=SzyQf@nlcZy(+$X&9c@ATv9?Q?UmrxX$&~03Vwt zW>nZm?l^i@tQ+-mf1z;J5kuQ-x*?vqDxLDi-S9m$x6CIyfpY4W>jWLLQugGm_=GyV z(r2q4JxG0F%;^9A7_Ro2%J+GzVtzMZG4TC}iWXg<<%4q6zm{ry$AHQU1*^+>J$xAs zS}u?B39SB9*rm%}tpU-}un?Gl-}~1j>)?EV0Ckl6vJw_oz8-7+*aUpRPN#}seM356M}C^Uk&J1xdC0IehOPrG^fvzJ%?BBILhhs68< zDj@~IR=jmWK%c>&b*c>9Nb=X1=xYRhZ@ac6Pz75%rKQF=GdrRYf!`CBVYMxiZBo=(Jv_WNz(+wcEc8}O{&#iG8h*okoa0N7PH#@4k;;CpT5tiz~f z91ATGZC;13+J1+8MZo>o>kdiNlUYJ8LN;fiVm|WC4n+EPX(v7ZuAY)vxmX^j zIP>YTytgTYmZ(++4K7?S@GYwPW_ZzYGvJrj{z;w40HE_qGcj=WxT%(L#~R~zVG+ZD zxyFO}-DX>)1a`iF7JZnwy>#WLyOts!ujWAW@ei0#9$NGwhKSg>F-m0u@a0;6TpD~1 z{^UOQa$vFg8m}dl^7Zu)-J$>!scE70eFleeXMmkk9G{m4Gc7>&5gn+9QwEG&HUS}e z)gR%9ZnhsCahwg|#|=l5kdMx@HQax{EEyW|iSix^B1fN|SBs{|V9xHIxa?8VN#S@) z1bh%>onHJPA5E0QR+D8{L6AV=4-~$64WC)u?gE@~BSbZx&zWpnW(tSw22NM7NSAZl z3|warcCN>g{~jSZu1xUCB7^v@9kV=yCv(79=BZj9x~fs-gdm|04a=vFc7ZY#7fkzW z-sv&)aBo*#OC%Sp6$xTf>UN?X>GnbKm?0k0k#9z)8gvN@P)oq_NA8qdyj}O4O7*)_ z{up-DPA&!#Fn34LWiCiJ>7&J#9P!B9vlsirF|R(O{7V#^3gGRs%ij(p zIpSz3@$pM0ED)|Gy$Sm3vl;|PN{{m-q@|E8@N_hq(41KA7}odI=PmnBi7GV^MD#El zN+e4aGwH8r3jEs`c2QO7DLM=d3YmW|Y4o+!c(e;)M!Vu@hi$W4`!~k=b=q(nec9%h z9z=|G^%Z6=zPuS-YKSo4f8fD>b05E#SYd}Cyj+}Zv$;k{ikb4N)`)!x-7%K~7w4mc zRGgbWRL6t5jZ_uX?#i*3h{lsIVd@}LAu(bfUFTFA`Mrzm7YYFo|3?cG+J&o~z@zlN z(pOy_>OgtCZeda}S9#Rf7MWLUfF?(8>psq07tMnQx|F2=&kB6GXFOpK64$2VILDLj z5YZ2!mVERG${$#}3{^iu*id@VO!saW{MkV3W~I?We3vAoNFcwoN6z2kHveig6vFo4 zh4;mhs;$`VJ&-a{+)&)|9-=uAkXUbprluCCB3vElG@JbGd73=iCl&$VSxCXPieS-I z=6b84mEGGVGc|3XBQ#2{#8CK(sm;6H` zffL^IfwFJk>hvpP&JX;8KtGu)XVE>RxbR8f)bL1j^U=a>LEJz=}(y_&~0`Iii|0J$I} z3*I}pH*SF~7nzqOub=qvFxqZ7zGAJ=ocmZT?L0#E;>StvtUFe&6LLFS4MX8ts{(Rf z%L7`NcHzXuaV5pX6xdIjofz%as4zs&C0Tr_Cfe_!MO?FDoB(rDp-)(31wQsOzoBcY78>hpwP z_e6*1OgJZ5^&P%>u#?5R-}bb)AmnZ_z6!wu<%C|6P9=($VRrFLH33F2giNBP#JeSU zLB_KlXYNqjTueQkDBj>O_KQ{`TIheiKeZ`S5%eh)O~(~iAKHNW-K)Ot$Wo%5E-y&> zO}yj}e}w4!@&m8w0VhTJE#@j0j$HP9C0eV&Pz(<;`-e#+v&c=B&#_1gC+8tLb#ewU zDnueH@EskvWmK3<9?$8{X2rGEP~eLCcf#bBna97(J$g>B2M>wd@qi9MXg9u3SCj}Q zyZHi+@y#;Oa!7PXFB2ew+=}`?)Am2@_XgFK>iGIndTn@P`D-nhPx07i42!S;H$ce0 zkKR`gyAG&0;U)|Reu9X60u!a^c`CjJR2+19OL!c415Gvy+<(uDT)O;cD)DlCxC^O| zX^uqZ?2e_;w>><~F0BgXHxG-=ryoB@3J#fH26&?KqR(n?Ptwhf8VA#!X-(GL3X}Pd z)dLy(h(fGodzG4~4|_#MKB9YUUSK)+^XG;3cbM zY;V*8`|28B>Df7CWnRHxRX>-OVp&HmtwWC5$jsSRB+W}l`kwhpUnCPyEZJ|+Uq%+Z z2~~ApoD^0;j>nEwZMRef~hE{#xyPF;OAkAjwv^@_Or{U%E^NuwH;veokIzt6&hSDg+{rI4;;+*ms>AV2-Hi^&vmuU}8ygj^Pb@a`#sTpMr+vcJ z)e=3+c(uZ~=%CrQnoXED8RmYS)Yd}i(@4n_KPe%la9q!V_&@gCMhoet(x1lNxk}?n z^#i?B50pc65zsJp)dzlFv8K#F;dL#YS$S3tB?Nb{sJUsxH@6fZBxrf z!}WnFY}X{=jB2%eqEm47En(nIOCQr~`NJ)nx#tEr=}86{uk77hMz2*eyXXn&+A+UR zcc7{Jwxso9MlyhpCBe~6^hgtMSjI|JJO_#8dWA&qiEWK`hf84Js|fBTEp% z;(_{wB1?u*6GcIgw8rZ4F#VNng_D-Wo;GN{CI5!L=72Acrzfd@Y97{fSxrOE5eW$D zS1Fk<8t#79um8@bRX!7Pf*ssiE}nBS+e*IA30G84vQ^M|JxBssv{%HlPjw&>x`b5` zdf3d;<3P;AO%`=_+ocHTZFp0{b4^DKciDhLmfN^KaffnH>K$v65bI0f?1)xgJ;m-z;pR%(}!E7VD*Rt zmfD6d9~9gi&KrMdbS!cwdpK8LvAT2n3__6?&IYK zNt{c)KabCUH)!A})j?V=>{CAZBI1$f$9NootJyY!y97A$2s{W>oBPcS7?|oD-%XfV26W%ZqjXN5<_6L-Q;61atdg;Wq1m= zBzrT-CX?H-_+#sTgjiC+N|=uzZ1N^CG|^4&Z`3gfF<(4wdr`9Q4nG@0cqHLCsTm;4 zfEbvWf8M$y2l9ZXD@Pm%PY*SK&pPxUyn9b&4DM{#M8NEe4a{u4!1S!xpW#1kbCF@_ z^~|sCw?Pfb^%{sOyoE8S0kBQHT%@}p0}O$#mXi$JL9m3P%KP7(8IxSU)XsN3mfhjPMx8g zcg4Bh^g%ouPzT&Sty4!LjU9*N2ftc))dC1w)5VRQAZ!oCY7_%!9NgK$d_1Ww)w0ox zg5FCS@p}pXiddM*w*0>-90{xqe4*eL?jXvH)(ty?;A zL*VKv)H^)M_WssDOFrw;;^!*e&aIg>{FJdN&Q%#-2y`ND*GMgPGC~ta!=^n^ymgwy zKzn6XmtaBKSVRH(NXlIJ{`=%fCw$Pp-5moByzN|VD%zO6`z9^$&>$l%f;oJ@T0;q- zDX8manCb`0-}ZU3W9vRJYJ`8_wiIZV z$qKBW7L0w7}$2OEcx}ypB188H_`y}9`tM}nxSOnDZ>*%Yxv)rbsC(wHce2|nl z8?{2#zg~e3=exd=hpO;(e?^E|64^CV#4(MYjs7ym_Adi`N+eB~tL%P;7RzOF<0ee* zp^=Z+mf7NK`phodinwG{aovLPH~rSp_*xvbm1^105H{fVaL~t-M(iF+h1Pjpo4zAh_X-GW8%9&6sFsItNAm*Kr%<8 zd69uIvVn=2H#>1n*}!7>ZwO1wg^(?JUs~dpLnPO#Ejj3r6@w|kqW}o35a=^CZibl~ zy{mD(eay$`iT+H$oHbjFpQ0X#JsH&}5|pZ}u`I78P~||R=b~lQw86-sIJ2tW74X`sW7~QIT7qmPS^ivZm2= z&8$XXct$EImtIl7Wv*OFdwo>B|V{-h6`& z_eFT9NUTV}S5fVfUO0a_y_P^mgHtgVr}4R7!z^idxsyfVl*38RHx5nLfdxs7`(!|s z(7veCV}0?%6o9av7~PkrK^i=H4vcRs?S@GnM6K7vmu0#&)|A3H*ar|xHvZFTqr56) z&9H~U@N%a5up6a)PE-15A1X!4UB5IcJuxNW_dZVqn1of(6b7NA>_r0BM9fm$aFVskWjTn4W zVV1O)RI??taM4edWw}h_?~*&&r4W+*1oOMvb4~h6w?Ao($MrdN+_h(A93w}H)Oen( zc+M{(#u*!SRk+ZoQ5o6~nyxwC4aaf682+PCwa-ZT!PpXhIML9yZLAN~b));bqrQ(S z6W>^3YDX0m39&Y9vxCiJG{@mDy>En}50)aBf*@=L8oCoDVCGGLf)ZKR-o)3R-|pKz zK)yYvDpd#jv?6MtC}*v)@!_cc)&QJ?EX)l7a8?_8Koqr-B_FkpTY%V%k;*)0 zht>V1**-rFZd>KJKsJTZ#J{oZ(1NjaSaU&Eqa6HAf9=GEJa*%J*Fbg=^gp&CFloY} zUc|9%Y3aAsgtU@bhk&f(nDK~=0*bG@5qP?#HP+&2sP`XcQY2vx>!?bB$%T_$KCSzn zC-R(u4I8RVovqK}m$hEZK#GBu6e*FR({aL-wFa#cWI*rs-_`n@+Sqe-^Tly8zK1A- z=TSSriGZu`)5%(!-X&KgS4gb$)B z-n)(=)OIiCvxy{?aRf_Ql)DX0^9+e|eNd9zloZggq>8{K4*Sl>{ypx#%#YdT*lga!$LI3;&7DXTh_zcTC04Jm>a&JR2@OiVTbsXVjiTGXvQZ^Lbt!%hYqQjDVb#jrFe zF6aQndE2yFlKi$nx*xoMy$B%=d%PvHSj|k5G4!)B7BM(T6RuTw)4m0@aU?O}%JYld zD4%6KTL`JO;lT%bCRMk@_9Z2#poKl1z6RwE{y68|$UVidX(=22Z;WO^;>ujgN0l8! znRdRDB}9qn8#bC{1b6R^%mNW!kobhrpxLR{&^RwJWK3mR(5(gUJ_cgQ&vKqbEb(nK z^K#%1NoLDzL+{fYQs4k4&^||=W@y);=_JKUr90A)c6XL~k+D?W%;9J6WdrE4j4D^fp3HMS(B6eOcev$>pW@;q9WUb6 ze;-Ni9{))kc$!#keiEG z7YUsr2!#-`-X@D=KI>_wwa>Rxy>ow9sqX8%b{6uKvf!Ky;%@Dg2fvJ3K`tmz#Q|Bv zN5aDEy|5k+sVa9~jC(n&o|B}VO@F$!@*L4vBx9i&?{W#snJ@pxIOY~j_1RNmyR|a3 z=7M+P87n|!k^dMD6WHF>xd6!mYY7}$Lq^8rI$Ypu!P4k*F3>T$0gE{WMq9XA3*=f2 zd@)5GYo}{95xL4SiJVmC*3QK!y1LqmWU$~hARKdNXK6GRm2SqBdWs(MOum8E1tMm} z&`72JV3;NsuVe9bb8i?;HXsR5g2@sRwEX+tZ1een-f)oP!F>{e`foH|`CPhYSU&Sjz;dDV0g^;cz%mailXEguy_Xr7Dc{ojVXg z82^-kIIB+)+`04A(7QDYDJDc$7s`aVU_!zeRop0c&sT~#@*2R!y@|P>aWUY^#U)@4 zQDwYlNvacqsbAb%rh~Mv~hF-UkxC|Kxr|BTM4fmZph86lY)76Ic zTI$A+!=yUiYqU7|wHKVH9NH376dD>604508ZVbb);Y;3a}Il!2O&41@7WyNSp!KP9lF*O%f3zP-bb(VAHQ zSjN)6%p#H>z5Y3TO19{stt+shPg2QW%`LWF0c9MJ)~1 zw#cCXOySEb>~Va$y9lv)_wTpALc5xZg48?o<3nFx&X&8RfaShfOvery)w()b@AC~w zZXF~`BWjs(Kx05_ABwLGowf>lWzJO0M>cW@1aX05^{?c5Q?ORLBNjL107*ezz2d@M zxEzrLR_4EYYtNHT$3Qsk+bNJ9eno(caI;`%^15Yn=m4wo5hrLy5XgOAE1bUZy=km_ zhQ7+;@jzayU>!nAeNCIS_EuG7a4&_1FEhN{cSx6mD5);)m=-1sz5?b+{64_~tn$i- zqo6K)j)|lL;Bp+UFT(!50xE}7MfJbYNdq9{lGUo*V+w#?6^JofE@i_B%}(Hq)7he> zncdzViO*y_e}-~7Qx0pgV`b+B7^MZb@@N~{S$AxP6M<86 zli_PL-YyFpPRIVI0b3?o-B%FS>4uv_dSg-qVY?L(JB3@IpM{o+7FoT)@Q8;T8PPR& zj34}zI3{UKe$#X&HrKy#)(Tfq*P7bOjhAfx;W>D?L|-o32GxD7UD|ZfdH@>TdE@IA zVZF=1hvI|f$HKrZ*Hl;@I{AT{-cqHhhtDg3E=ylGfXoL~WEV6h2d3XF4P)n23fn2wK8o8K7zZ4bPgM|RxtdY^SF3(joy1192i=4V2 z1?pLTpHu|9yvEwt)`84@Ufw#(vUD}SY#OwVJfBn^s-uDO8Q-r{8p@7Wf1G*=IV<~l zIA(171ML?_e3&EbPW~PyyQJ#o@>mIC|4rL$a?3|gB zY<3{j0Ldqgb=3*?B%`5>v}R)ib6f!UolEcF%#@+@pPCGnIRVA=m! z=|9T4Is%BQ`g~?AMpd&Mxm9FT;l~&dIY^ znt7~@A^dtX%9eHI!9IIddCEMKSoGlbtr0_h1uAUi_sMhAA!oI~trlowMnGoMwvlY+ zTlwTJx7D@{r;s$;1T#3(q57rrrXGPn%6%|`R$Gl#xBgxuyBVh7<$oN}(2m8TmG%_#=}mgMUv zA>nqXwYOYz_5U`7!Y2$yDOyL1^8)F1g5N4++ zLBF*tP$p~OOfY)=DphcZHtzW{ByP>JePqIQ&f&=v{(Fx%&~if_`bU5~2bOC8gmY;M z`gmax!X7&847fyh#}2)3H0Hwn-qK4(Dlax$eG8TAPROu{`>Yb?dd#7%(ejhe(Tb?1 z{T|qas0(A6S&Z%AaneZOO=$@wpKvlPD5OH#hE!P%P0lBpU5L9iG`Cp&F{&XeF_%kb zIC1IpYrH!RLBy@h{hs|(+qQcf+#sN2N=F0Pp){jrJ>Cyie{)dfRDfsM%W>C-M*}Y( zb{VMy=Ha+-mDLNU@{IdTP5ievP4)_O-)#H3f(~v4Nr_mB5_oZ%xWD%nooTAm-c-m2 zs!M)()>v2X-XwdpNq{7Ey`>_r7WDL+LO2Vtxsc#`BYNmJt>jjZdY<-ZyizntE{Xh> z^o9h6XV?$r9#!nf$qHa$0gWJSefzWpublfH@i%T0?{oKg!c6fAntfo)#Q@c-xOT&g z{(YnJqe$cf(T!U%qARtvuxWoA*~2cl8pemmmR^K1m5c1FY{V; zilMFDrHWYL|Gl3)W*OorOJo)8JuG$B*Jkj&3yR-n6S;ARfN;LdNc z^N3=P9+8g96=Av$3sll%yZvpLUH@NWIO4qVB~-Q|kLYhHrclw3k_Ts+`Ea6=SP)aO zc%*A&5WSO=qWh{ODHzeP_)lN(x&b=GR$= zyHs%TEqh3RhrT!-?KhxZ7;oz6S$13xvL2Si|L`C15et+ePgp00$|&Php?|J}Bf7*g ztD>}Ot0btRjugWU!AAYZ0`JePqbU(>hsEK(LWWUB(x_C1x)v3PdxReu;E>@HgR!os z^w=H0wn>g|ReXn-O<6ifc$vChi0Ou$FH4LnH-_3?#_v8NemyD!kd(r}&_dF$Y~2MT$j=n0q67lylaI zI>keN)qzgs0$l^y0MDts@e9(W&J<0Y#TSd(FMYN|pp^J=o`p?ne<SJ>iQPZn|SXiUegL;$-@#(t^IR#TR zP$f%V6;uoa>lEyFo9yPSS90EQo5m9lfGFFWZmai>5FGfb6&6h&?fwIt|ERuU;#!B0 z$ab9n{u;dxUUf?qIgqhTy%6tsRZ1v$CL%X2)A31I{F*3Oy`SmBvsBbGas;FH!Xn<` ze$6qxP)SQIj-4G5Ulv+*Z1brq*&R42_?Na;<D&ph)lzls^arS%J*)%5 zyjcI!hAbKCyZX<7K{;w2YxRZact2a2t1S)1K^(pJ53xG9)ouDfT9v6ZpPU!i)rJeb(hcq9tMg?H;x;iAs3Jd#3g0cEo(;xo{ea39Nl28OB5%QU-U3P@ z8%MFWF-q9!(r7X-;MOkhrZiY(({b(mA|S|-Au;9LH^30>#S~_UKN&AsY}Y9Iv?X(h*XzB77jEWL!B^*?z|ML;?#8SFN0k zvO4JOwW-%uPY1A)U`x@atxg_?(qMl;6RgsXxDcG7?Z{~O8NfQ?#W9C$?nChpPIHI# z9f}o)w3<}f9(%k*hln+Ii|Fhk9pZQ8B1=Mep%}1n+;&0^(f_L6H*x5ve~=SZr||Ov z>|>|!Dxgvr5>is=JT(SVfHndAuk;~}-wsf5|0(m#Z%-mhKcEtfr~rtyxp|Xgte$iJ zV!uZ-HiDNEOP+elT`i7m5Vp>duN0=v3n=SeKQ<&#|CSGpOAVC;#|fQ}az6{}z}fUx z?m%Iad+7woRMZEKR;2r04f)Tiz;oz9j^+|TAu?Ra1vCd(iV#TFRpqVa{2}q*0*N3M zEJdAp{@;L|yqWVg%^1WI69^E*8nWfR8dikzd5<<>zyF$^DGX7~A2KV*7k#`ahzJ9MN9}2_+AIZ6;1{HFm86>JT}dmHa{^U{s`(Dy>gJ>>q2vY zto?}3Dnz&^GsOLcO3K}%+%9JiJ_V|TN7Hg=IF7eoG}t<`g$14IL_opPo*Nm{NeQby zB4^NVb`_@JMaEiZIAM`#R>c%f=7bkyL(wEa*|}f-#;=!@PcZ&8XBNOcLG>1!0a@n@S<7y$Afv?*V) zgj<;%Y{Kn@0g-~Hvh-I-{zUMN1c|A#V7Bk56IP%>4P@>$ zCP>T*E}yYMmJ5Rbd{1o{4d&bb)8N{eN%v~vuBDCVG9W?ADWs@SNHlLw93JsMQ3b&t zxJ8=1i;!B!Q|Q|@d9N`uPigHyYcn}J=8sff7jL&%hrvD>DY1+{5EQc4@VJ`!v+JLj zskA2>!wmLKqQB`F?8C&A$+qYl)2cdCf{$l*lv+xpjj%8!ZC7POVg7%gk@0ub(%eC( z#)E_J@F4JnQ#cF7kLAt(0G(27;_}*?K1h982zufsC3ukZJmngW!dpsa-DD! zHj4;3Cy22^euSV6lKG?|@KLW_jO}*xOd1GDiY&a39tUVTQ;Gh>Mdd)RFpR9}zT7`gBT!jB zV3os4S!8Rf!hn8}Uw8qw6Nua-Zc5tcT-`|o%JY2_1Oiu@s0s%HvGb`at{)oF8UV&{ z(wP|Oow%v+$iYQ*1L{VgAL?uANG%jUslNl^dKvVNy5E}#S68Xe)vvs9EQq6+J3t@ zSCnK(k-qRgp->9KV_g{Qa*$a7G;&u%vW&SL6My(!_4Q&>n%8N8U~k~@IdA#)-K=YQrRTCyv~atOw0{711o=*{ z$W;l0qOhJ_9klqI!;1f0lK1rl<^zkvzVWHOflj|3`>=(RA6Q-XMiqvAMdUK`^BpU{^djYtI(F;M?0+l$1MGGGqVB88GOki<_=x)1+8#HQJ5agN=n8Qx@@BbK5OG zXfet-RC(1Z531p7z+%T5F~7-}xeYn@z>-Ty>E-FV0B5PI0zcO8)6NVtw)vrFDBJ(< zNCng@K5KqE38Ji2;ZEXnsg6lui?9n^1zigg2Wt1b+Ovw3Qha98Xy*%@t~O_)@(fWZ z^MXvSiP#0jZ9o1O6&0fl$**z-Zlu?Nw;KRz&u|~n|D2GI2WXD;eM*e*MKho zP?dLPTWs3?;rMk}Lh$S-`g5*_)^<5xC`% z4T^nfICg$85bgp$Ujt#=#XnXc(sQVg^-&4Xcw`EfbgTw)A_Axl7mqg|h{1eg@2BQ< zwtVVbS9Trqv=%Ql#Nr0|9gXrZA8dLHc{!FlI)uGDS|u93{4Sg`2{r+$#&S#27J&|@ zG+R2ZSAuZbBlV&56%g9qGhXjgaRaE_A-oZ`WbbB-HdLw*nwFLq;8o&d^p-`5nal$# z)wpcya%kTXUCw#a6Q{$Tiz6l8&6tSx|>qj3+wb z=&AueGL`LDn(z+}&5VUp>mrfBq@QUII~_;@wm)Meio{T-I$}Jkr3|Z1EkHCKgnGH7 zy(c8nkO>957&FdY{0?hgI~PFxC`bGuLi_yqPRh#bVhJXi*kKb}4A5IvDO?fe z{AZH^N(N9I<3y*+2HJe;TA9AG(Y5pF9pZ6fc*S*Qejn@HwONltz3Mf>m2(Wy_!A3`(sed^(T-CEK*9+_bFc zZz^VO(;1^L?(Wr%J6Ey3X>_AD?CxT0J{M=iiC6ST+7v2TdXb@Pm51J3Nx5J}J&)6B?04yG>%!YnccmsB#)t>joAuEx3 z9e>|t4eryHeK>s%qgAz{znDv7uc^gLxV3cSoPo{q>E;f0e{Qz?qAjI<&rlG3bQ` zKR3#I)}_gaZI~`pCCqOqanJDdGm$+3UVGvAqqm?&d2xGkJ#aIdt*ziB2zX=I63MO55RX9*{)X1p(|KFAML zLkeiJE6`qZROC(24G3k^&#?WGIZ5!L93s60bXOCQx)q?DNTwen8flM=lTRvkxCo~X z!vA9Nu#HI^m2W<-GH-XZiBAW*4%)iOU`1I?37Q^eouQ{7n6LJx6?(Sl_6s2Y2G83e zpBFC?Q7gQo@9By&I355GvPKLsY8V$ta@o_uL8XyWNt!<&3aKTv7Gr-)#xeivIf@YN z2CBBv-RM&dba(?GiB~>liJgRczVioAn!juN_bOV=%3}tTYBSh16slEF3Y{L!1EfUZ8R{3SnEp;q9NB7A1p8RhP69+`_Td3FJHRP$t!af z1HVf&3KmS}5OKi5(!@t4Bt%|vz(|lL-B2ZucXr@4dTey+MSm$U0{emd$cJ2DKMFpP zSx__c5*R84Oy5(^Lh+k9hr@9b60QilwB2J0K@X7is6v|P4n_u?S**AIPaQA^@eE^l z$HE}sK9E#skO|A^00L`sVH8n;ghK^wWg@-8H35T>k~uBl$p_~FukPRcUw?1}Fb&92 z&gg>8a4~M;>ReK@Ktc{Bx1Xk7(V#J95POBtP&CCqY>Tq+Cm85E=8W4AoG$?vu4}yFfwsX0Cy~z)wCxhYRhL%Z3qT?$oc~tGb2~IVAi@i{#V?+l!6V%XUR%Ri(R!-P}ief zyGespciK3xfWDW*X5P(^>;Q?F9FlJV_97~38EgyTrp(0vuG7?O>uTH;K469dJYJrYXm;02Dq>_a$RN%TE3plgukem}Q*i0R0V zM&fuHT7N~-5uU+s(Zb)PU{eghpIrf7*Y7C7FTw4LTh0g2PkoB?V|8rIMY-2gd84F7 z-{o0VN(>hm$+gb+1G4th+#rAIgsoyE-G3Dr9}Zamii^W=bEW9~pZ75!r-F6=wET=b zJPfo5-Eco@rZgyz0)hFH$4bd)E53)JnuSuNkE3qfQ7*+c!EATE`$PrLPt(a3oA@QE zQNWH&F-JWh#U3)B<^@rqtm~y>g8|bPhLzQkU-nr7>zAyHZ6D-~EcRt!Kn@9&vf_(P zyfs7oSX2m8{|1TGndWgWo*giKN$tdH@P%>%hmF1VKPJz3@BC4rQD)9WBSA#F4TuIq z0(~1mFf@Ny;$%T?FZCzCEr45%ELCeZqrBg5E6E zL$=U`wJ}W%(Bm@l;|CpSO}%U9%Le?jNJel@1$hC4ZG%9=3TZLu~Z9~W<~x`Q!-95cYTfT>$$ z<%aiqMS>0}*ZlmcFB*5IZq)_m6=Zmq8_Gh+6SkG4ATGS$22R}QV5R#84P9|eHd*7| zChCv{_#~VWdvbg7YoH(jQU#jZ6~-d9g(0S5oIF00v(y}2B34MO?dl&Ut_O5+49DA@ z4u#pe13q9~M)2rDJSG?=Qpv)Hn%42BEc(o_$sjyvkR46-4WDKQ)2U2!sfcg3)H|&{ zDZ)u;jsVxcq+}0DDl#dpGxzi#o!?_Y94}P6fV7&Bu*UY96XVh;r}Nuv62Zhuqh8_8 z{>;D)hbvhOGk#RRGuKa8M@PzkCIh+{h| zG0AZLqrc%?`2_@ZflAj5=$o*kOtwQpVbF^Ut~v3*1@{w%^728j+#Q>=!gHm0jWN@oaf;}()< zt*9LAFsN|Lo49kwzHQK)2}0 zu*~@6`NnCSn%`3s9tLu-I-6%9b_QqB0Cp6*W8ROYcs!N;>c|9o*c+2Xb_?R^FDJFL zY;uuSRDmcvaN6}N{9lPe+@3i{FS>eYr_)48IbK1(!dT0UOzygB!&7JP{HIgt*T1S^ z1r%Jc0xJdDs3^`Rbwn`#{8JSxaKQ!KlZepEky;0$rx`4MON#zu<@zI({@NY(XrBu} z`pg4UX>k?GmN zW|b0MoajrtgctE4%H>v$l?)Urs0CN++jNufK)Ig}#=db=rvU80 zf&~1&w!nzmu1GbAPlHMNC4VveY;LjUZX(1fJ@<=gy$us!C#Yw!E4o!p$RqHXo!K;k zo+qkZs^`{(vou?Qb|WwNb$=pq@T9_Q<0ipW4DKY>6r|mVCz_6OvU$3Xq1Kgf-$R=v zcQFd#LlC2qs#A4%(B(hu_NrJ0WSwWT`C3Np3b2*lkGey9PLDL!-{g=p7vHXv6wbj5 z3pWNq{o>SgSEFLHf2qs>1FAFeR9(+remP9n^PAS0{bTK5J6IFI-R3JoCI$JiGB^y( zN>~gUl$}dvidS2B9hg?uN8$i_Nh3Vny%>KB^KC{9o?&z;rOO?$zkME5QPzCxfIR{x?4;{By``%-639_uvKso8ImkBk6jjCM87Q$ei1<;4ru z;kO*cQI1WSX9|GC_(Ao+@d$Fh!$U|r3W$IhN$R#P2W0tzb|yAuJc{16mw-FKa8$$s zkCoF*+a@Z@uU3UWT0e36^R%kMcbY77R!m;N;D`lYB-REhGf;j5Sx7}>3Ij3+JON=H zexYNx+Ep!^2uacd-Zi27dep?L&q5HBfQ*aa_r$dCH8*B${);>w&)V^FCDUJqBZZN2 z7Z%Ka1%BFT%b;nEmgvDxnityC+KI>c(=xJJa7IxvvsONwJ=JC|Nw!t>7yQ?tY4Xw_mV+01+#*+SWeQqAY>Syynn7+KsXMoldW-_a8gKWKtwb;i;yq+cF+1eZ#EB!lI z9JoQI&oBIM3sQudem$q!A8eW3s~YUkJLC`7ae)P=Jg{W$&GNM0w2RguBv8ikGT@H@ z3!J`1Eg@J6B^$Je6VQ!f;kQ?cll!cr-=sYA{Zp%ad9+Ut(dZygI$;~^9A+W1pwV<} z7ON`8tV<+yR=bxpRaD7`vTw)d58G;%I({qSo1Ip+$tFT0zVk7hUB5;Wps~-OHaVA) z_vtNcaRv@Q?Z8GD9Y&q`8rPjYgs-;M=BlrRNF?Px$r>V5kO zOQ~QHEo0?n`Cjn|qY7lgi!S%iHrq5>&gAc=LX|5zg1i~t=au<2A~c+^#1SWQ*+)dG zaqHN_%QyW~dRd`(jS&H7y|eL{wr-`zc^o8^A{L;t>9=~D-!7@dLZZw$9%LUXn44kI zSV~*X2j0!7X@`9>x}oF*gH=JeXEBTh@*Wfz^ka3Rw1x+aT7X&f_M>jON6G zWxCr8INIrRfT45XGpN1O*hddiNHlWm%C(ZS*=XDGNS8WgGmRg*HWxJE_n3(z3 z)$}4d6t?4n8+qIB!Q`bpGd$MiB#I+hGEnE!LSPf`Sp-ESXMUlk`JW!ydpt@(ddROj z|K4jvRCoC+@~M64go{2wrBk~SpQC$A*MeBmy%UeqNtm63tcFn67d4e(WxlD6j<_%| z6IY?})wI7@MTE-De}-Y@yJ{^BQ!NO21zzo;*tF8$cfL!P?PQc-u2hz(7r{T4&iwKb zRhYX`wDDa*;ShOAR(wKz0Psbo-^KJ0zQig8*UHKl{}If54duymE6uyz5(5lg;r*Aq z#~((uP9WO=NkF#0ZBxOHrXM^#Dh+xK08|}Hx<+R_^Q#Fq8Nt_7x^DGr+4PeezxZxz zZ5dCqnXxTv=%)+kzbQaQ?< zlLv(0_*POBu|Zdaf%c;`OcxfKjMQK1C!a%0TktSlly9;Z zNDCXT+!UXEe~XUOkI=Fb8Jk{m`wF<~a_LzxJ_p&X|3YS~g=tgU)^zA_eiCC|YWL!f zWmvJD3uYh~gf~!Mn5ay!hs6aKl#PeWqrmLsE%**t4E!pCo*xP?Fzg$0XNL=;!)YPX zFPI~=`)8x8xqd}gZxb!S$!EqCL<&Uls7Ov)lY%eCt=;1+B2(RK^CV6B216<~x%OzTq@oy|@4AV|u#nRk}=5~p+7VY)Ql<4vAx`Z#@n~}h+by8XL zbvgfCeI9vi_!xV7;xmu5i%Shnw!{nSnc{A*%Y7#NVurhDtU?n!X3%En3d?udTt0-0 zJFg`(53&kSco+Zymi=hQ7lwv$hYkKc-2!h>5t)5ess*tO^CVg>S4w|yMX)Swm_OV$ zVT|77I%zm%zvl`og#_+-yytAa6HbwbqQcN%IV|~E%Anzngsv5JJLG%c!M#&sU0qJK zig35h-m&hp;kCL?9nF>PYL$AH;Fhcakbla*jLKFJs@k)80oNq&98^^txIvRbYUr;n=)u*7=?J!b~)o8l2&Y|Rf|lLFYA z>z`nXzZC$?QKg$bX>^2YM#6q2EGXt1kN>=K_qzLgOM2mXNt0cx4aq>)rpj$Pn;Hfy z0A)|-hTMz^NagqhCv2+;S9y6_Mh- zr@I)}$)M}9UNTv$^RFrqIXDXH?%Lk+_<1*Lb2q^hP`|6Pg!7;!txW)dG;(XIv13VY z-u45Q`7aTnbowIo?&GekGFvX#|HrNE25SYp*5a7thW74 zN!_30A-UK7Y}vdVhc-ZaNHe+2d4)SHV168+LX0{^k2mjg>%AC25tQr3a3eFm1EWg% zzY?NbBmU;yRqMN-6xP~30xn23?2Zjq@HJ<~>DrlXi;gPleD0-s>ZRFF#1WzXPwb)~ zXwr@07>Lfxb<=`cbwVNolAvU>G%@S2tnG3ZXAtRWX8@ydc`=IdiG!Lcsw8(bC@E{7H_Lc`VLD0}!W zbtL?B(I+J=6!vq}vxxQzZa2foaR#~_TI10kb4%8$V(0@y>Ib8|u=2K<7)tM&9q1{p zY6VwUd4ffeb*0tuB#*uoKUK7l(O*3GELR7pzb%cXswwW<(id4f3{ zGIWTZQ(!c?xW)R0vrXuVEXC*xvq;vjEVYr*_1h=gb&;Gp<2$xEmY~x4?i(lxJz&5W znINfPU|AU{pUG5AF*u@TKSa68Kj($_EJGEnoL$p;<{*NBHS zi*-_FMJMZ=h`c_K_^W^rBOx7v7<_>oO_2Eox5V?LP7W@sqNKqIeh0-`(@YK-R`lo% z(1x`)O%rRO3idLn{93F@BOsO#;+m7L%SI{`sbxfMR@Evpyfg0ujWpbTf6vOVXtKB#Q;$YxQGa53OhPzxtits;6Q?lwZ18y}fLWyXS>iOjfE z*?qs|l`Y~l+8UN#BU|nhdiVPEG)tJ4DS~M!m4rt9HS6RQx5B~J5kV#F6XIJsC1#CN z>2MFTE&dd^bBdFw+Oq^^gL%;yvn^q{OQv%8Qt;|!hGd(3JesUY77-#WK2h#W!z@i& z!A;g{mQ=rlqfgafgjOh#A5ISAu&0agwPaJXa&2LGqOxmgSATk@$kTqW;k?zSL2Xhj zGSsq5eA&Z)Xw~R$940`Xosa2WXF?XzZ#oG&8HT`x;~TbsJBjyXJ@nltkl0bfi&9`G zA=QUStc9}(m}`CMy_D`1+iGKA%KU@a(u;dI<`%m;&QO4Y;TH4Ee(Uv|+^}z1i3`jf ze?KP40Fred4{lv8HXajdxg3(ua79!RDobHW^$`Ry3%1M3b(m2}=$!SDfp1s+IS{y% zSOi(=xG?s}h8Yo~ZBz}R;u~R2V=HH0jd301=U;#&>;+>-YQ{qk{i(x9WQEyhwlL`a zoAG6UK{~PsBL&w3F=#Y!f?mCmCUG=6+_pMs`y)LNxlI|)Y~9(tnU=fa%^D*V)>zAB zf{w1zE6#pEdoIlBI4f1Hx7owCYI)Je0hjGCebA9|Mx1%rbIWi53`v@Z#awLM(-7F& z@>dOj6lMH#lu%^v>pA(~v7r8!21A<>X2c^=Iop_Um5nwM4RK&+iG;^9 zgGa;GBGuAg%Ug4YA9FhyS02g$4Kh?|Xt;ki2uj zWMU9`%QGNxc0$_G>%u7U11Y)zqWB@O#PnyAb)rcWoYy~ zS1CEoIqK_-UL{kA?0YZNe;6u?ljYnEYSS8BJ1p4jksaMP`&c@F&j?mlfJ%`UL&hyQ{$>(bAj5rfQ6(Ke z%7ecO!K%>Hbf%xs2fmq*6dfz%87hTI8;|#dS=f`Z%`(7MKBod9=-LOZSrD(F-ceZM zItk@3jl_>D7V|&)z9A1cXH+B6WsY(*F9719Ne0N&`K)QySY#6VKoshz`PQAQk@8b} z`D()GIUpEm$cDi&_lr+_8XS={#*?ZN$AQs-SN!#mUJx@)wUdXCnYO9}T7jJsPW`&2XTAm( zfW~9+gM)=#G3aYpQEKMDv}2!tQPD5kTx!w^8maQwu%=HG|M|dR;{zltnRusF9iy|= z_}Mb+x_>IFdvSCo$))#pSa;|1r>qMP)sJ)-g7Omg<@zDi1N}; z3}m9-9=9qAl$^+(TU1+85_NRny@6ef=xrqK97VCjO@_30)nB= z?u5FE%4X-hPPI@Y$pEF^@8j!yny%+QxMg7!qvqP!{sQ01qZGZa$sT(2XKP{NnB=$b zbf)x?h=m^BcGCxOT!K+NMgY^&fjt*G_YEGvC)e}j`YeU9ggG$)g4g7_+^I|K&l*cU zGXA0XSM?UI{^-Ys zhA1B2fJ%_24cgm{Z%Hu?A@~gf9K>OENpW@&^h*3V%0W?DdkV3xU%&!BppUUFBvS-( zAwV?1AvuC+d+Bkb_z?tK(QRs{*5W}e^0j6li49x}UpuJ8WDyg&nK(=rwy?T4^$=>W zSqOu`Zbm)7)e7)}HL8v@8Q7auBrwq>y~FYbjEX3#{3V0@BP_ zk&SPGEiEB1RId}PP%50Je4^snG)u+bSK0D|8;;5N5;Er1f~|AjuFyYsH04eXqdgn( z)QCTp>OW-LnI~>)qa4q_UUi;2wcAW*TX!{(zI)7~0{yP<3CXVBJTWAmY{lKh{W9Wm zv2@w};m&oegRZ!&$}6O+wqZ9(^#6P&V0FQ~sMo#R@Z&X$caUtqFSYYVvtT)YsRqbq z!_zgr8aZrE1EDn>GYnqV) zbO<$i3DKTPn=yCfTO}cQx8mf9TW#rNms=NW;`wt5i22E5&u@Q#dk2stvHKvJo4=KV zH#tYX(WqU=PF={U|^9(uNNNwj!=ikQ4xN3kr)Og#$X51nD9+NPwH)gmqvCX9@D_5hF7` zZ8@9uY)Itu0yRv|0+x7ENnPkUD}AzMVJUV)V90($?E|Hd!9~54IMA7yV6T-uV81vE z%s*1N8p|~Q;&jXPm5~j+tKgceryKSPbU+XH+tibDoeH#M<_hmLw=*LFvgi5A_gO?8 zE|l~SdAzRudC5`D;ZB3k5dSB`BT8s0oIXtaA=7wS3$xkMpN(G*kO$Q4JD`n10<0BfOr zHP;-sLds9vpW&4F8g31LewT56cwUQ52T-sEpb@y!QOU>?qz{*fjsWoa%&M^~gbYBG zVHyasa;!sY7anmX!_%X_02^>z`9Ri@Kn6|eb+JcA)yV!@GPSL!ol6(2PqChz&#s&W zVu4Uo8;da7vRyXOUqE0Hy0}_PWJHxnI+B^PBk^HQtQK6bJouJrr*W()+#a<30xszQ z_%Cqk8dm})Q6XYM>lU8H(9jXCNOUwxuT1>CuU%(D3Yt3<;8^~dM1>l`dxMvcIom6f zM>CQQQy|OU;o1a&0A<3RIE>i)aCQE2hxuc+S6te_yf@M7AagMt!Cd?3`g0@8o9V!H z3oCGi0XW8dIXA@wd5rRG*Dk`I2X_(w(_{P5a*Ydyt{f5;-BL{b&&>~;FNj1E;_^=2 zcVH-#rAxEw>LA&DK*LZs;`!k?Mf?l=7I*R9TH*P|prT?$%6}M?m|g6#JP%7EO62g!rT7uVaklMD8=8O@i39>38>N`DO@R=4su0AOoSB zs4nF8<{%^kxr#OE`(lb@&G!{q%qjkUXsq%0aQ+GVh(|~ zN3nMC)Oh+Fo^Fsx6=g{#YOUKVTsa70fB!kI6*k*`d+Z;o(WV?AGj&&z!@Gv~K2a>d zTsbz@q(gl`Qm>6ZuY3GJkT4&ic@;_8B~laTU1gCLEMe3tXxZnlC<2@p3^Vhy7pVXD zg0Ip#V@|sQy3z|CcvLs;LiW#pXm4dJMmZ_nDIi3|#pZhudPAlz=gW+AP?nSqX;7Tq ztBpS8x+fRIc)ZV&Xp=Ew3UCFqSw4*m=l`*AV!JQLD(+fYpoL-##>5PI-pOGb=so%2eFw@!#tmRCnsD`NJ#Afo+0KNj^5FnJAM2J=sDyA|Pvj z+W38nm$f>~whMWspx{k6tB$i1436naIIN)#_tjhOf$0|ks^(guK<=LRPx9mm(7{?S zv+e21OXnBg!THm>h#odGmW1G$OA7rw?10;Ii7sV~gT5t#}KSF13U4Psv=7`Q)( zDdR;78MEFp6vYZ<8=Nl-yO6a1D!BhEu2dY$`){bx&AF(+Bi3ruK{&oZcYDbFQ%t^~ zLV?83Lm*heSBGgQvl_|#QaMT}yW?J%nN`fPgJ=J4)G#z(^}@)JLzj;)lCS6jv)|6U z58w(o?`J7em?z}zdcl3tNUCxP`Q5)#84sc`{b`kVruojDIFK@Zx1310CI}iW40bq| zL_Oq)d|UZmyR$;@tC;E@CJAF1A9!e|ZcYvNt}M5)(`AWU>PkRYYQGC%vJli{9=Z@&&(_AhUi3qdB! za$ZZ_{U(^Z##a;(kgj6s$09~2%aPQC2Yry^=I$!gekT{6%#ck=;Ke1h%w76Ay>p^g zO;y1{b|pT(qQe_ELGg>~;Wmd@!1t00rE_E?i%*NDN^(rL8O zxON!-pS&MdF%N?yTx}4AD5MsQ!Z-d}uY1TL0CvhZPP^R12kQ=l2iTa2r0n4di#b2ucA4;M9zEpw6l$tdh(pK73>08N3igIvL|n z!0T?r#K%oFD+W<1|LsFs3kFcWsNNw(#larBd9c z711692;HJ62Q&69ySt$Fyx@#SRYp7zOtdrQVds|-++94$#QBZjFDKvjL23aAbHRBYWSTlqVb9c2Dt<u{)iTxYPiC9xhdY*|6~aiu zmnzd%w1dzdJC&A_-Bxh_KD|GSD|t&zi*XW>hBZxeSCS%&4khwGeENTtBrrH6z@c?0 zf~}D}k)!qi`9cuX9rmE^z3!1u{WTBct6NlCNc0q)Ne)^xZXZl?pUh)S%2kVirlWXC zHkm%x9kWjVF*Kkl1CqlCi8OV7G@*u<_fU49^1v515HfdM*AQ;i{msPhn49X%-F{=v zW|=3II*L-ba3gYVb0}NNgGz6uv#*wW#plSZ&%S;vqUYmas70zwu(5u#A?x1j=it0C zRw)c1;Qa^v3)G{$o4^s4gvco20giiJn5~DX3aQoJZKaE(Me{Ec64ZpQ|2V;YFiL5m za0{b^K#5u#{oGpcEN~|6Y$5XV&eT`ep;HXi0QTqzc+=kOk%VZ)DlpblHy$DUA=*g>h(>b(_@{rMStUy#vq#zfDXL0*PZGSwfc zx1?h%jjw88ogyiUtPtPmT8O zS2)lI`*1k7h$Oyj9jQT09R8T3uU(=F;8?TFAl1nD*U0WToTn2u<}jXEeL*S~n%NMV z==4_R-f62PNd$jXZk_TYv6<46-ujR)30sR-kvUE}p>#b6M8nK%F@B_2QIb5Zm?0Bo z6K67#JzFHf4oraAmqq;&!BZpL_8A3&%?nQ@?bFQ-Z8Vu_5Tq`F;GK~yGaWu>C!2gM z33OVE2HlX#eGS8pCd6>>!*jg#iP06YR;H*XAEcd17CManDVUln_iK8{7_Pq>aTcj@ zcJ0V}Ch&&dW&#e<@XOP9bVPcPd@jFgr~R_k zdSL|SsYKfAJ%UbWGy06+IN{e5!L3e$jwg7I;`BQLcw(l&Kq=^pu73dLpXB_FpDxkqTb6^xe&kxjb_a84UfnE z$}-rjazf!1{=^+5j&2Ln1Q;v4WgdfmJqQ+)jSA=6_6^?4uiMS}@OKL-_H%BuUlL=k zfhveZf(7@EIarbEHU&I}O9@CzF9VFqV6<`7#9Q`4iSS4GTAnIF_G+?h8aoC z@0CGH*za!Cp*dmH)U)CyS1O~dmN7kXp5V`^ma!*}F=V(Q3bT@p5W+|<@`Q>IP ze7kBkAK$R@q%T_O9yvB^qA z*sQV(JY$wlSEocl&i)0%SP{j|5`xZe!*aTEbY@nJaKn{WckZYbxNWR8gD?!g@{c(9;>bkfzv zHj?*C2BmHUZ*h`#A5%Zz^vEp6_;vB3knh>inLIW$(C4kFFbb<*Iw$-T{&?Wj@`xw4 zdb$vH^)db?|FSH}I!3U9O*&cJ&I13wyNT3Ey zEI-=A;%kmT{)lw=u~yJMeZJSfK{b@+u-SGbk(XD@xkP?q;qzQ|ENj)ZH^Ab}+cgI( zaUseTBqH;;MQpcPMhveUMkr@RkB3(+_*wy&@~0w}3I!eac`N0UQTk=N+@~nEJ}|~H znrGNwLNOrhS2LK^F+(g}?`4XJCk^NF^>9Qs5#R3=3bn6c*>%H#1hz<9VYaZ%u|fBD z5OOF8(Q*C#e)iPI@&;FO0(2YzCqe+Z!U3>7)YDVmH8}igY*tGiLrPAcD01 zkf5esDyKwV`!b?cvP2J z$X{aYL!~kcB9rhc5;}ZnJ577Z+9DS(Gqdey5C6$ED5~6xb&y(#mv^OM_2@6slSmkZ z>D`kiKJn{-Wi>nhHQCVCcFyDElQ5N&1x15_HyqT)lgPYE@#&tuT zFO%0;hi~ApZMEp5SRCm9GQ{uBRUDUcT=WIqss{=<`23|P_m+Iwo?Eb_lv4e@!{$Dc zleq6TU);haI-X6Pc$Y?CxZib@zIi?G%s?&10qa9+rQ*Zp_tvPqME6VGE1NNXruL1( zDt%L*CjQoODQgqapfGHrngXLiH|Yw4-t{qq0K~UAqBC<-!%UO2zcj!0!iiE|QwKi# zZ+jrrZ599@b6W#NMW^#r%iGW;GOy}xW5eMh*SqQDn*1xw)rOt)=t8I!i@jTJW# zw~_L6KJ!A<-jSVpV)U=8#Z*zflV2(!Uj46DuLl6zKtTD3-mfYQkbpD=?vl+vO$_$b(Q!e72&TA&wYhZGNAe=LEU|PofVbeapD7Jr-e<9bg;Wvla|LdnkSjhvf|?=Zj;)fxw?y?8ezhNI3>vIm)`k5;K1mXOqi= zCxc_=hq0D)8G;yo?3-E8022adjp*LU_#EATXAHwCvCVanoOwZ&>o+fH*6QP$6xu#^ z6~&;kp-eTOIy6)&ysH0LzCJ3~2qaL4DXKu|@>W{V{4d<>l(k(_Z{7+&Ru`|obo-Am zh|J_6YVcWQ-G9A5Z%m9CWrg&Wy4`zPyye+o%kDhr(9v83-D}2;9M`4jTk0~Zj=y*S zi}u+cn-a)MoQubUX?JoU`;g{MUv3`tk?TDMJKKIe1KAYQY3Et$5=GVEEPI&Ig)fVR z39+J(){!v#hCc;pP6m7p1vUXCsMq-aumA~vHO~WvkHYt8XUZbT$4xeh4-RB4+^EZx znNLUr+bXn+(=a{vVzqG5X-@ z{gG@(%F38v7-Gv_5hV+i zq5uO$ys*d}?C_sM8sDZ(sk|3Iyf`wgT?G8!%s)>zh=Zvr*=`!ql#m3L?AhAwy@ja$ zF16R_Ompqhp~8JPuZeEOk$-I$ORYVWNuGLD90W23Vq!Ib1TsF;es{#-7qLQmAq`&W zZgeSt{V-A^jqJ$F3B!>7my@X(nr&mWV%FeVC8gAmQpmKgUNm71VG{OZ!|5EmZ9H~& z$YnhV!csfVq@W?O`8uOk0aYK2>h_hifzE%Qk+h@9@v;E1e_=w`4JX6@V1bR-DI2wS z@I<5hy3h>b8)QRSri1g?u!d+Yx%JwsO`bN0*^YL)-9Q#dY=r9uBwE#Bml?B8PRFg=_lp zlm9X&YVjfpw7UYrg%4TLRMKWuiihX)G~B6fOVs}6n~dH=FNA{qRU` zBZ_&D>auHL5FJ)@k@P`(uf1wH$KkG^0d6Kp#Lvx9m)F6sN489VEBu-KjESUDaII=t z08hFw)o>cY9Zu}N>z0XzIjFeB@fpGa9O?N)K2r+IgTwH>Kp@OcB}w{+A88qj2xzw; zW|fr%Jk{cvF+P6rU3f_GVPHMW2Fj@q*xwsI$qP|i;GOgibbt%r$eGi@Ei`u|!5Jg6 zxum2$JT@`Auv^Eoe5NwEzTcj?Ewai+BtpFZn~Lr?XwKJCXg0=BDD{ow0UG0or9Alc zC%%0=n>Qesi;!-!A37Pmu4z+EFBoisQR}}FoCD#(lHizs_l~^zSajR|FwA~7pt1N+ z#4-McK<3d>PJ?5zzWDJ|$U03&SiJmFt61~;ue9KI+oyPO*UA;mlo8$&cOm`v7e}g{ zn()i*(^Npj1i~#Osf&NIe+bUVxfn7&X|%7%gMRpdh(1{Z#{?l>msoX_|+$B5oP$@}8#yP_*V$PLTnc34{4wzek|M zj^rQsmBQ%@NWGwfXlRM`R20qfaBlKwV&sm&Jcz*`P=+huNl_>AJJCOJe)+}u=4?;41rr8xo*ZRN-{XkpER#eSMx=Y8@g6SZ9o}l4Enq)Z zWstC%I~IY1@|yvX&IBIHw-53{g-kr?oc(CDAGHS8T`|?iWM6zwiXSSAj%c+vD7K=8 zKU7yadCIHVD?UWgX%qYo&G7$ z*;tbblNVg776}=Q3lUcV;BTeJtBbW&KysY#M2q}ffVzM@lzxZc>b zSAC2m1qjyrA`-Lmej{w#Sfw>7U%6>3OT#tiS+N~YYn1tYco1Seb;o%{P>x9hi^^P# zc$sYIp7~~4V>A=s)4(!<#`QqO#Z)pH=#$xsv>fs}uppQ9js!({a9C#+($KW)g@b&a zRu7m)VtQH2K5NgVzn`2D64<5@1A3XYGEJ5-=Bx52+S86sWmMQLOoCHQC!j8qv}g59 zrpj5j#f|UqAS@Giy9L6fGQt+{8VFXQ{6`Zd242a-oZbxK8v*GD+t$uFB*{x?>Q%Tp zMd^N;q%I||JVN7E;zGIwgl)3hj1~);>PLrOycQ#-q`#JI zq6NMjw?b}3&y5QsEG$&aEM_?rsJr^l3Qsx-?R<{w{Bl43UOUyP;xRdmPF-q3O!Y`n z-5|;w#XGZG%kkggf?(@YgwJx-;|N^4&a@%)(znKiYUN-i)InK`qC)!V$oCIB17q{z z^B#wW#T%mArxq%RGeXYnYC{Kg;MFv;>qGBg+uyjXBr;6ZPc97p%L;mlL;Qr@Am2#6s+k2<(}hq80PK$L z&LDY)BIU++Vz$71LL1^^~U$@VF# zxNCU(Tn@EcsE-s9?U(8{Z5OjRAgFiqS+KW1<2TSHguPmGh)M%HWHYTY5P3XwbcM6X zS@CWM*ELO&#y8E^FgvsdODXfOyJec`ka@V9eNVg1PvWa|R<`?|!K(A-xQmUNm_(wN ztMJ5NUHNrug<-f2a%fTQk~*HH1x%8Dx3X|!TS!dhsh6U~9AgQ+h|Df*P{;ll`@v4)yHS$q*Rjjj^Tkl3C? z8B5drAjLFh>h!4Fom2Luc>F##v7gqQ#~2DwxEdLhm3WEMfK zP7a|h#22^AGh;XnbNrY7Gdj@WXwKoYhCKZer<-jM3>ktml zzuq(SJ5Lz&e0W)B(YbQ-#Wc^_tNbIl{=-yBOB6w3>VzEq1F>UusWH z&P2fPM+h1f7KUm>_i5WpOeOgwJoN-lF8R6fe`Re6wV%EL)ry+<#-ZK<9ZawE$r8$u zj`OFz?{vk@=fljaGJw?TyX6U++Cat+ZK+AKv8EwlFQ>ow4*MTSCe`30^mQ^Ik5!i@ zEB)Eb>i;h~J=Jpbp<0)a50_DW=-(1M%1`-}!Z-d!IJ&_4juVC-j8CapF)&QK(^>LD z;jRGJKGh$Qj(3_?Sd8Y*noA~gOjyD-SOPMTB@z2eYW?--r*mLPWJ;kGdh05EN0O*5 z;ad;Czyqg99pN!GvwjjZljL~y3e5#>*AP+*I6a0trV$@k6Nych!+f3SL|Sv@Hd}}( zk8c^5Y}A>0GyXXrtt5l5`8L@lD93YAqq7XnNBMhNH|_ekxzS*{>r=;wSwS6$H$O>^sZ-pze&(zglYQ!tE6k1DW(HnAt#af z6amp}79=l>N*6X;GBaER%!hCMTL^XVr0EbiJ(Mj)=k~WUm^`Q2zCpvHSXVdZ<=7}2 zt>RcY>}dpfYC$B4A|JkbLqPv{vnBNIyDVQb#pP(rrK_|FRb&Dgy_-1|qXv%a8-)~^ z$nH|~VFLFjnBec1Zd=oDW}zeMVFNKUITIl#Y7(Sbk5ln9HrI^?@Hv|dOG%EsD^hrn zMn2+qc}85;SZ>L-Tc)FRnuIsf1G>#wy@~bzYNIcg4SY^4b=vASTZQ&Re=O*$HHQiA7wKU`ynSW^$vpWN?a00)BwE#9jF@Z(p3rJL59LC3x};v{Qlz7PLD!c8n- z(gRaHmD?he3j6ov+<+vph$gq(q^=D0$;m%}tjq|O6+;|aq$1U}-f@>da?o(aqo_n# zJK|N9hZ{=V%j*e4??^+Kquvv*o^+3qwAg}6Tbs%THB!;W(3wP6WTCP{$w>AXUlYWX z^2eP$@GWQQxunFjvMOX`$1I^HNDI=u7D7dlYy@R!he1BvWlteTdS&&Oa&f|4WJQ@2 zgqV^bUts%kDke+-1#hIs5;#s}0)l9*bH9x~@7kYt&LHPNuk(fh3H|ePbC#(g6HVVx z&3NhTRVMo2D7hetHjsyNkKo^Aq7UkCQ_R?Vu_Rtpd`grcFr!MOuN{Hg$51vNy0gn| zcPiT2m2&XaiT5%dX)}zH*f4o|?4l5(nudaoK`*jm@H=Y+>Ys7?IbR;CQ*>1|z9I7q zV1VT$2(XtXTC`IgIETUOH8DdAUT)D0m93pag&|E3qnA-1xlr$%l)y2!?T7p`;-we0 z){{pMQl_;Xk~1dx6bDONH-wS{%|=ish}+0FeTeHl@$HsCpD?k{_?ZzgDmD3IV!kMr z3lqeMl2*=n6ypNzW{z}ZdVw9Lh;`}3#%iMJ6xpZQ(8x8SbK@3xkrk0# zz-LVI}Ns@arVAQIX<*U%L3RzcA|7Pg`BeH zl9rxwb!&ot$(D%o3k?R>^&&>|AG2Bm!^wow1bkQQU}nUUN#~?H)A9f^kBI6KtQC8? z^WoZfOMDUSCr2KihV@^SnjD6Sj0_` zs3r^K119trHzjs5#!B4eL~oR~y&n*fIL>QLC9L#}CfCN&6dbjMLEQP?RU3fZ6onkf zFG*vLX?>QFE7Ou=%8xecQOCSCP!`$8%husw&6FQ?0SS8DbseIzAunNEz)z_a6QHg% z7Vr&;p+lF2lma~-GL~%-T`zycJ?erbGE*`zW)^oQEuIEAyJ~uxFh)WYQYHNRs6A_P zYsg|D4NUtqow|Bsg*>{FOMWoTMIE9k4%JpA1jhS;{m`Au)n(b1WSP)Ujm&$ zqKbS3LUm@lD_e{eKM+Y_dd^1$$Tf>aaTML{sl`&0EQj#EvX8(>b;ro&CP3YlZ=>_o zlOa7({{t@Twc-{SA#AJFeLhdE9m^&$b6aWZ3Tlx7_&p^r*oy8)Yf*~vL`_R>+>7<1 zX{i~CRTjNvCm@tmlsxd)O7*`r8h%1+92a#S?OhA!P68csH1|pvAi$YB6EWY8UzHkY zV+0_bW)+_LRg-3SC+(fsZAE8qLB9m$3k%lvtFw)8weLd6c^^EaSR8`T3Hpir&E-Ab!dRjmK$0)xLiwzw-QeLjE(J6a?vm5Ya zfg-yma*lfXn{WfHtMMDKyTQyw)ZiLYCY|4a`j=}Vn-^imM<$Y`jTpHU6!utw85mB4 z-*}2!uVBjBzt`T8h#t1sKSs|;gwRQk#+VIVLlG~p(Vg9|cRE*bn^WUrui z#ESNHGyFeJIW9JHQxfKd{s~*g=!Qa(a~V$Wb za4vD_y=W_b7`pcivS4MPoq< z5dNGz1she{DL2m5_wn@G72~im@`FMDH~|=DYYadC1ou6XAc|IMykcERphjHdMKPg4 z+QNF}M!iW2=V7K^Nu60^7tC4PwiH}5dh1TvevV(CM(k=Ys+P5hnL`}mONe<-G0ANpx)nw;&}zIqEuvi zLR1OEFr(s`$&l{S?WyctHriVHn8Xw<{#16eqB!hxydLKVi<#zIsjB-|0#&8(3)wh1 z>%v3L;FBZK0i@QBhf-DLF2Vx5nO8W{HPb{mhLhDOEeq1ch$(To>|t4$pMnkeB_e!* z$Xz!jyX^gHg|KKqQUYC0FKe)aAuuLm2J@DoqWeuB09x*Ob`o4w*$sZX#prU9IV|$% z;zR&IW@1ffJGn*O#Agk=>S2Sj_c{J5c7uAUl^YSgM%#IA*Vc-6YBLpK0cRD)EAt^k z&Wuczm3jvr78}%Gceg9S`w;WY1Mmc(6Y#eX1jwNmo0GIIeqB-$?eDPrf28Dq*Sld) zfY%qL-W_?jPf>wE2el`UD*d3{$Rr|f_ncA_sdMuLJXdvMh7tzi1-h%<$1jj6VQ0HD zwDsJ>!q24u9SnFr+~9cNNI!yPKI*C$V$4`niJFZNDMG#7lz+GabLyjXTfxHy75p&C ztjE&b`6qtekxbO+W6R%!(v;*Uo5mMH^os5>?y(c3ob-&+wKz{X$~$a6qH_sQnwCec z;|R0koL9aKpnJfMBmvgY3j_fjG#T6y>xp@`GdUXso@r*gcIj_`;mQ@ia2NAMgactB ztjph=!qs~(QKG^u=@W-gD-SIS^qmX5DNas7mT;>B!eLwNaN{fK%Ct~j*gWL;Vtu}p z8U1rWfWgg>QYN`K+0}eSU7E%0ga3$P%>ugCF*(>wO$jKxN!5gm$W**TBG}3M!`C)L zlet=?yjJL15*b#hg}i;sl3UEUdOFvAi9p(P(PD-huc-MtPIvC?!0Rz?Q<%M;h+$Lk zy%U%O`U?L4J609n_(3JkDc6+|zM)#`-fD2Z;aOYS?`-=W_t>jVG-?rS-*}E!2GRyZ z5S6XJSc~PA$&i9~jb;~Y`XgTyiv~KnGl~yA@xugC@Q^nU-|cdKH?R8yaMutaB`aw zAt^7wvj9H{#8XgOxTHtsIe=(T|GiUpkc^WKO3Mr%@3HPgKnrLyUZ7Gxt`?o`hky(A zCa(&+Ky5Rp>`?T|N0mBkK?=Z107kDJVCW0!>q8d+Aj>0oCU;)pZc(|P)VeK9ckrU5 zTdGRli|`qgCT+BLh_tSJu4^P7UAZ1!Q?a;)r`ipE|I5wC$Ii>_@Hw>IjYnmNT@3LM zbdna4iOYD~90_98HN|||S4H!B?2@5BX64gWGEq^dTBiG8^!y$g4dicuG6bPJkim*z z$#@S`=t(N_C?vx=N*&FvJTiwY8@(S?2>)TFE^*udah2OT`1(v06@<>;0XColi0uuu zpu`s$*zbpEEOL2QJ9piH9tmE1v7)GMbhSDlBFQbi)a_2&MhZ1?k~5|I7Pl79Ae*vQ z!lrY!2afp`J*1pS8VWGwLIr$KmPQUQQOwyCWFQTaC8NA6;q5p;&t4UA=xYq*AS=2P zEEX%ZDLWc2DEYm^9>;bW)PIVZIyd)KWoR^qiR@coo&=w!5rL0`?c~sgu-*;NV-zY# zxC;Pm1|{FhE49>U!PFx-_cn}=it0=|-W$bzIe>jC@DoC?)?1Ia$t$Lyp(KY_&jQZCjBI|cHVnOAU=k%a{1gTqRHWb`a~`)J{HrrOEmbvu}} z{LXjtNw|V4{&tH&__irNI8g4wsy)&gxF%dBqn8MgxxIbVStFRq8)8$CC?u3ryCOo( zG|WtgKxf2l$(0Ju6NM~8PEr5Oyth;KWrR4Lk>q4^Bz?S`-5DCQSXT}$%o>48y%r=9 z5yv#DxrTQ(+_Tg72tKgn4a<)F#3XHgT|!w|?8B2So(AAM)$;3Jk`k*zA+nl^$n>rq zN(%Em-X>7rEdLY(7W7(rnwqZl!rfP<)Z$HIJ&ZZ{+%58z;!&C8=X4%T7(H}LSLD&n z(02>^wccf;tJ+*LI^_WOnpNqDIyKH;V4(7vHpSZDG*OKZtGvTL?nJEVFw9M!w7fQO zH=0BAfen^qKIWti&Tv0>R*wZyeqo`iwI!jINj_;Ob0ZdW9re*g!X~^sA4R-P6o&>a z9c;gxDNZCk1oV6Zfem>Hc|<@`gh51KtajhA*O&tA77&l zROWvOltf1I53c$*4#K@xYOyvp${TF;BuqOg8mt?I2Kjsv`!nfjhuZDm>7TTf8c zWo%POMG7yoA=dbVuCCxq>0a>8{xAPup8wu`8hW}l_<0+(3yl`w>@p)aY2?&A#JDO0 zn3ELIpSo~8!hDoKgm%q9`O)#v*5D-2d*B;JLi1AE?)JlAoJEnaz17RICR5vCJUj-L zbwxo*;w?1+DgZjN^W`EiEo0Od=9l7)Q$7WK{i>+3$~;Q&=i zq?lRS@F>}xoR>|L9U#!!oHHy9x4sPKwjHA*kzB(Oirm9F4(xJUw(Jii&1UWU>qmAl z>E1q~J}mv;cN2MAx!|~%3>kkducg3mJhZvIXc*x4%3!+>53_4N#$z?Nz{nXV5!Z6= z%oa$d0_Ph!D`o@Qi1l27@g*y4yJx1f{0W*6QYqjDo9; zc0g`Yw%a&@Mp5-gq?cXML!zhu4>R96M12#oLUCmUiQt8O^wk`MUFUVSd}2&P0II+7 z>>|p=!R~`$y9HItUm93{2<$Bdg_=mf2Dv|1$V+cZ=;#@>sG-EWZ-UUHL%nLfr!8NS zm0jkpuj*EtCY@c00umC0y-h;0%cf*b{1eV=M{J>D4^E z;Zh}>pqfaRF&S2l4{yG98m)A+r^-aS*_HBcfsDJh`QOOy_0-lCIGn#Z=-i>Q0 z537BMJbs@FNE~fLNg)tKl-B^l92OEh5d~wMx66Npr~9cJ81tmPE6d~bASv$%f9oZt0pq8_Bcipw@p9cJb0oIViY zE^mNZzd3b{L}%_W`Xrl|Zmj~86Byb|y`J~(hcWxpDnyfnaS%3WCHLEI0zz9$XFBJP zclLWRrxhK6jUFbrOGTm30lP*M7**S8XlN-F+YqQ}SSQSZRc!r%+$m=3c_6|Xe%e78 z1R_ynBqaw~(jZ_zb!A(Gn!t^k$xS{`_j-uxfyCOJwsln=Ih0~sOOz5e&Zz{yKzkpG zhnFE`9}`>NOMT}W;9E^KrnSvRYcjV2JOfRGjbb{)ZBF!GgE4|2=Bm@!ym}^JJ5``= zyr6tZBCJT7tcfk8crbzZJb7_#7JZ$pwO8bertorI@C8l)(PUqre3w288PNj@ft2-H zuLM8qhWnb!{Ph-tq5<1V$6*VLxQH!*?{Nm4 zL?OlSi?@*@Ex z27$(Nna1qznvEc$zWA?gcr>K`n}otc#r%6@@cdj<8(= zg!3YP@ztt2&Ay9R0_fs&N4^#~U%&MjEk>&My}9y`=A(PLDbdjg2Y#YnFldk{HqsFB zZW~PEG#VHDKZDO`<_!#I;KLx#)j>I1iBekhA6Mom$7Dnz&$igST*z9ZU+q!BicH9_ z*)ytCAPQosc?3!3Igp{+^l~R#+*!znK~0rWxTl`uBlONggp87)ET_kwQUTg6W6PYq zy>vx7SDT}8EiopUy1aJgt(@7EHP-@k6V9`-f9yVX^Rp0Utz6C^ns<8!ma9UKmZzrb zB#Y(Bpaj9Jp^Pv4*ocVGSg$6NvQsOdwos7LL#Na2>!vg8%*J_VU-I>L6-L+1%O@+O z4{d5$S3Co$T_OZK5l@e9_L7Ru*!YYl>w;0oGHYhVRw%Z%j6#Wi^o+A7E@62lI~5C(+}UAFSR5)6K&X#OL-1V<{26X7RDs1q zjaII0r`_krF3AoIVJFwv;S*m)5#h9xd~PrUTpIDV?!xFUSx!#hJ|!5SaJ%CXRvAj- zM6570^YRs6?dxi{bD)m2D?c0w1B1#>LoNV|7#bHul$q#X7r2FSi|sx(Zy%g|!Lkvb zTrn6O9X$SLZdneVmM~S=%I`7SGsg|C3J;lc>nw|C*T)IE_o0<(JF-|c^s1D`Ej8DDI zXn|-Jh5oh~mo0=KJ0hXbfp6OG6ws90_sI~BS)O`eXtqtZT8xJG-)U^^KJM?8KYB#2 z6m~=qGr)@DACNvf<}i~mCTRvhNwY+m2Z1rbjJGb2Z&%5I)euG5g%b|EEx_NfF#QBE zCyv9+*6=w<0QW#O6}{3lRF+;OwE)jWFwuMgMm(d-DXozY{)5=c?k#NZV9G80fW>T7cM8*$-5eoYn@Po$Gc-Oy;WdfTI`@!Zn#LhXG zA%lSSCsu9pL(b~qSYIfD7DMRSK(cJqYv6&{XuxRIR&r^F98_Z{O-9SbZr*8ie23M^ z9Ja?GMGeuH8vytoC)TG*ikM7Y9&`1u6bn*N$99*aR8hkTQva6G*{b(lx+~qh_gG92 z(M=7ZZNecW;GWvB`f;v&itx(Vlo2ZjotGEM20GIEmKO^8?%@*s>)(BB?9EJSo4)`= z58PO*x7+Q>JiYNyQ1LDFYZqb;3O$bc%mkIAjgq59-N`O^l7VMK{Xd*5c3gKmiCjA@ z^!dBpuQ?PdxZb2lhZ-72O(!htNB`8}pbntQmpsj$^mPP%K54-HmrC!m$(=Bf)l%nV zxh9N%F2crGslJ0)35h3Zeh@ET3Bqj4p2n7W#ZoC>b`@+gZn7nSZABNvrL;5>knsF_ zd?hm2%}BPy7OOy%F&27LAhS#ga?mKcnO! z_n{WSc8Oc7u2AtvbQVd@wP(~vP;IP>2v}!h)hV)DSp>*`j1QbIaq2@!PK5ql@|`0H z!1GtD=a>1PgH7RxfbB~9%ae={`X(3Gz1W$DUvmDX`rpp#k!U)5_^o+DYpt8RJON^V z3p^@1PDudD@7(AC%R8U_TGm@aRaxuj8YXaV4*A=N=oNK;y z9r*AT2GZw7-rd*3C%#4uW2wJf^B6wk;PgXGDJp@N0|MKsrkJ!v`V-{FDj3kt6V=E) zO0S4dbC~TkNP$V{IlGEq4L@#WIE{pmW}E!4@yjA%K9^*Den8kx4*U&>{l~9cEw&_D z0(+tqMbF@kR9siy`^BsSJP!=4xF{eN2)%>C(XwIEAgiFARgE#sl+2r$tZSlL2vsSX zQ}863-piHH7*1`-vQikVpYGoT^?VR)nCx$6V0sas1c~8K5Bm>rwX?U8wN()(OxD~` zmuvk@Lvy+roQDk{M^iw3 z{p=GK4yi|z)v{R-$3Js}lgT7nYD+t*5y&xyed9jyUhNE@3M=2wO@Aq$zIyx^Htp-0 zif2t~^n!ZCT3zT}%{229)0Y>9#98o$IB4Kjm74u7rZTx932ROJ4qqnx=rJm%ltoDo zkDYVV$P6~kR@G;P`Wrlqif$Z~VcDI#qGc>O%~-k5)@@_xP$w6v7q1d=EWnX~>O#&A1+{BrGs+ri{(E?E4GeIuJP2{*tLw zid&h1!ZL?uJ~~Z44xZLcKQYrA^87)1Z3lRoX-l^a9_96!-@8e(*|y14a`6@&_s&)f zG&a}>zlI=p2_uYBi0#!-gvP59WS$&6WH>1_eu1sRz_JMmWo2^!<@f-22e zmMDv>(x)uVve@x-rwpw)t@s3BgShFS?~fIF8#-B+MzvWYrx+J>^PF{u!(UO6X;!yU z!kgmgS+*uX-_LLn$n0Vc1yX+V=GFufbCL~~#b2AhNmP7ud=&|#?M0#2Y>)tg% z3Z6c2>1izQ2XQSQ3p#W$s*_w);ZFR%r|e_wC-~oJ`}2I8POf25iBD+)`<>kn{O?dTDWy4*=HFlV>>}^5 zK$`k8`9n$*UmkHIB|78nkTz6(Ndo-luK&YTGx* zrv7ME_Y|hKZyVXlrr+fVTBloK1yoYKJCr6ce!vP*v(%<*@h;T9yVq1Z=N^qyo6cL% zPW(Sv$0c}V=|7o^uF3@OyDdAvGYKLvW7LF{n5p{T=t(Gze6iF_}cj>sLPPWuE;=g_dP z=e~UfJ1fPk!Wur*X1s|{r}1d_(g_)c@hQi9VWX8|e43%@2DRgmWJ;+c6KabT=Pfpk z00E{>T5c;mJZU?vSQb5?i*PHq50n_P-k$;0)a=1^CD)X5ah4k>yt$zmWbTDetZ#*h zJN5N~bwg=N<#d&Q+M*aHj{oo`oj+qD!NUX{rE0@F`coS~piH|?sigtN$@%&SIDzuO z`Fjel0w7X)*#;@tFC7Vx$XTH1d`IEXC0^5chqS$ityS&|w%9}!!RUKvq1~xN_8RoI zEcV2gJOErHho{_%iE5}4wQ6vB2pKliK%J?QNGR1pz?~)P04ep;})$_pk$IJlvXEfpaq!0AWM9Lv-~To>)%$vtyPnLv}2kp_IsE?R_6LEIdB zdFbF~$1IzZen%Xr$<;V|1V^kEgaoWFsHCNNR9Pj9o1)V9Wr<>j9w0MkEn#)v91;Lr zu>&5hjsHobOXt1!T2BYBB%i|GacLBKUg2}ohaf~8UxG#Oj+ePb&`ByvvrPO0|A|8- z@N*~>fZl&TgAR-^F>Ti;Uuue2s|{^ZdYYVfD;8=>-A~~0LfsB{;WMLl(;H=wOZPtS zgD<2u4ZrAlnY_n^Ctg=O0;kRYv=Z5xXk^d{ZrE~Zt-FM+iJR1CH8UawB>w*ZU^R-3 zRRR6*!U~TuZOK`Hmnie(Ks_?IkZU$NVA>Y4y_e|3OKvx?sVMf(ptF*KHAg?`vsPRf zUo6Y%u1W8oy@0g+bUDm|9J4SMks)Z1~QZTQA1*%1fW{~ z+Y^-FYbm z7#z-jf$<2l3w_3fOv8xjk`^u$*eIPm#)jXBVX z8nWw9c168>e^n?UO2?{>rRWaJln`J+wMMkHJ8p*@pVfdFo;WYDp%gcnCh1csHf+f6 z9@3>?N+c>#S%MmWry_BV<;KU>5wgHd(()9aD8JR$xUY-wVC;_6u2`?t?1U30UWMoc z!h8UV_>C_2LUv@2q8Fh)EKCZ0hOI3q-4on&EIIJ-nPzljTc3lV6x$_h_cQk+yO)GA zB&V`t`MQ_a-~{=9t%U>x+}I$y);hcutpKY{elW?x zoZ%8+38%MGZ0?(}7dY?m@@V>(hNRHQUZJ#}A1LygbbY)rJo8h{RBV-qr;)+$ip1{oXaok|#aI>#ct1@Kb&}!&3*0 zZ7MAjx4S^Kf=C*=>Ca7l6pr)&cgc>YW*C`omr>H7zmj%zCG^#)6d((`+(28eO%fm;>mN3i9fXaB^L(;F z*${sBsQ%K<{e(U{zajJ>D)Myi zUvFt(KHdc+!vMzJ-biMAR>L!ZUQ8Z4oOVaW6uy$z9Ei1A9F|wRx(av1cU&`A9yN!P zoX=q=;g`5eVKp>fsp*6}Q}mJOK%;hoYvP^sdOc#`@CF{=w}J#9=kXVGa|o zI-zouf_cH#^HXAqycqTX-4-~}tSB=8OQ{VP3eAwJXe#Lgaz*jRs4!QB@NnOak91`PNGy#URq3oAJTgpWpqehu;4Rj9_R{%-5ZO|;A#|Ux@|D{ zdytwr=u0hFUj64Y1#g$2m@ykyGgMbq$`MO}lqmAq>^Y|ToF4?jxHh(nc3Tjr1Vf2s z#|aj5^}`t;b~nB92ZQRvOqG@ep0d^E5r~|{hOvctA>2k#D*_QE^flMdjCwvki+R4< z%XU#RDQ}Bo2l>u#L_@EfgQpp0%L8hZEr&~5Qq#W%FNZ!kb3fJT283Q}kNo~{&2gZu zTKz|po9ku9fi!MdlD_-`vd1e3>o<~V*mFNXYm8OR-w0Cxq=2`2<~owM+q|vz!J#@a z6{IuJLg`mST$GVz@vtARoFh#+x)B3`)qv>dj2Nns)I)y0^Y7Y}3N^p|e#y><7n92U zcz+0Ljb66mosDxOCI$SCaP7ne*{b17&d)PDo?$jjlzwBE>#2Cf#Y`xa*4*na)pUPvd`zTrxK(Ti7vgM zC$^BR`k$c;%aI{M5fsQ!d4|%w;cGn}J2ST_l64zsT}b7PpU%qi?KeUYYH`(aAf2#5-s8q5}1e((r zd{0tz%bW`??wr^qZ8{g4x#AmLg>B)Cf3?uUWZeh8K5%euC8i@jg^Gt@dz~bIw0~Tz zsbjy$gF2jKwAA5mgEGGYT)Z18B?7 z)f7g3f(kCeU-@}us5Lr%-V|^c$S<9yDvLt+!-Sm#{UiyqEX0f*7rok-Jt#0<`11iT zfO>RTfkwOMS-p+5xC>O}0?_KUDMTpxIh4`e?Mu-5E93xGZpdHpXc!E^%UY!{L9umd z?jNaIYPSLRBU1wfUg|g#S5sxhkOn79SX$q99s(|lAru#~JCV#ESX2SHNrw%1R0oG9 zj45TnNvJ&@c4G0LwI0-u{e_)4sh>4eCMAdIUif@wyC~%#S%Q*?`!VMe#|f^C3qw3Y zyoRLUQG!(IPdDwH=5f@Ru z5IN^q`B=*ac*8qU?+jX?YxAl9g~`Uty*+iX#JnAs;nhcb%~RCi3e$?YVoO{kIDiMK zc_~%e4DU9=D5jnV@Ak#Bxiq$0wJg-nG^?=T7Ez99SmXN|HV=yw5Ph*|98shHNQ1S0 zNf*vOuO_p}`kbN3@KSE4;0bj%=z>`Pq>eWgr7ucdZgLG+S;abi2d=k`h8;lH=b;MfmfFwUG`a^# zu`?u|gaAouXF-441s)4N!Fg^a4yi~#(o^Sk*;C_+*jc8g^ZGTM^=TnG)&?`Vz+KuC zfhEsbp7n*XjrF}9=$tfzVnbi(WTh5gT)YtUDlfRK&HFNei`KP1#dpk?Y_M$i59mG> zq)=yih%0W77F_oRWaPVRk=ECzHd!;%elG_3WPNFlcPqtvMZKz~+r$Dpv7oaC#8s&0k^&guPIwkqw0dlT&z4*Lx@jq9d^N0lQxU9@)bMVfXI0nu`dd#zrLpe-{@o2#U4jwvcE{A@$W>O-X1G; z>8Vv__U0r@nN{PMmMDJKG(`CBDu)V`e5Cdy;lH)n@%<$b*t0qvVzImBR(QtZ_W_I$ z3B4<{GZ1r-8Ua9rF&ow*ASjPWW1;)>ZVHKF%0aT;KR7g>CfcX0yJgjdl zfP;aE^A`+-nr%tCKGXYxkYM<5*jYlh`>E+bC`eZTrbr|?_4)({Tz7;`v+Fg~)@i4T zdF)KuU;KeLc{5seI@Ix9kD}|PPwf{GX^r2h^q`91cKQ++7}!e|%grTLZKi26cln_= zs}?K^B6x)wnjM57R6vwq%O`kcG2rHzj+KBdT5?HtCU3V5L-}^X*-~wq!Mwc(xR$A< z!YVREByi9j3|!5tq~ae?o9qP@=p$_E2D)IdUAh`2pPyG)Dyk-=gt?1meE%Vc-Om|C zsT0w2!YZxQiiZQrQWXJ-HZp$2XTY%{T1ypmj!RA#e!B?!pFsSNk9^E`&%3XFknvC> zShhLdh#^S*^C%p6=nva^fJ4bS+)hh%FA8XV2Vo#5N*{-V3#5P(M?128c7WW^(@3k%HfD zxS^2~v%()PqkkN?-&!Q;f_{VzkC>@3cAWa-HP%qWg&Ei@LVYQ*Xuq23qMlZ*%8W)v{(`C|cmnGdQ577N2|Msoh{6KunxX{`GIC z>U2IUEg~c{?S3#%xez_2!+ETjrhW0=+jyM{*w9?h``dA`y0`9p`tzkM@sXKJX)|SW zpnJJ(4(Y_>SrY3JsXkal7B!+qB9CYXxwuRpR}vYWWJHok8Vgf?Uq8)uQyEnR^F;w? zp6bjDy!96naTGUB-@|yNSPB%bgKnC7*U5-RR*lMbu_0vRI~@=ZxyE@%gcA&`D3+$) zkD2>iiRT|bDWqr`Gi_WB>*VT}Ec`?$y{QW0gW-wyl7mGXfYF7fh2Q-w#r{1Z;k!0RIMNN+1U> zSji;3l+;BgFLz-}*xTR!B9VbG#p~iT)|u+Fg{r85%Z`FD!umxMk+7HfKqc3LP=JUF zwIUpV#It#Utg^T!+v`xcv{UI4`CWIPe$Qq+Uq`w%B=c#_OH|r&8)o;-JD$)m>ADjk zs3LkH+0hR3Q~=qBgk;&+yZh575gH)PIehB*jpv{Vk+6M07nL(j?$@}c5Ze|h;Lsq- zLO4tbLQjcy^v)Sd&6VzEYUjt(a=3@i^y~{exjppe#7bR>#?;C%L`Wc#tX&S9i2i@j zb341^dFrv`bi{Bpepcz%&gP_~vWLsa1DP)~a!^}i#ZZ?&3b%60T!WBN+7)JFF5FCA zfXpbSk%V4>9g0Py;%ekGWmkR3pJ^MN9O*p@5Esrc#nn>`5BQqg<_g{6Fvn>d#Mc+n z6TXm?s?L<=e7kQMCp*Cr5%RmAbrQz11(HPXMapnc)46UhQ`SqW79oGYcAe-H`&5Xp zj*vPJkyY1~l8PlZDHt;oWj`wFD4lv_zJ~Z#VEy4`Wco?Pnh$rw?2V-0O(y+-jKHoGV)^rB~f9X2zMwkdYM&KLesleE+uEuW%rFERMq2JJD!acl>e(rv>B#eqV zCCR(LiHCwxX?JoKbrRU6Yt<=ktYXAPW@71uU*gQ9Y1b&5UNSugG~borghx=A(9+lS zcQURF-kDU%C}n^>Jg$)|?j`8i!yS8=>Y4s9h_Pwa2~S5a9h?xET;ZWSEIy;hxRuHR z7`%9Ab8P2rz0I)?-KvUMNk%7RH$B+Oy7bfkL>PNWTf~JTGPtAzfnI^0>^US~NN!=Q zi)Sn{@8}3tB8@rN4DFTps*7GFVAU^YFyy z(Ook)hQ&_7Qo;I6iRwb&gux*wH|C91tq=<)gWfYYds{fvOMmvI zjuI?iQ&x{e;biZ%~0KTm;+hC90QQIh-ia=>e zc&RfNaq72rhT&~eV9Uq3_9?`W2{!5ouQh!9d`JocFhVU;l?01Y8EGzni?DzSXLDNm zC~dS}A=fR>4oBxoKfbmsPQKm>A&kZ()B?M+zATUyOc%aQ+z)x9ZwHQth;$JQz9nIj zVnQl}yRPWwL`0g9=rVw7Axcehwlk^T$?NpLSvs5JKPkZIl~7+K_t#mS`BU+>F6nxpnBp+NJV)gM!3b>{0fEeQd1x=S zm3a*6AxVGUQJrMyG4;a=jY6_KTS%acdniOUJl@1fT3m4{N2@B6GrIsDRb*8zU}tpK}yW<|$Ayt&8z zix?O@R>+!zwa)!CmdvJaicflLcvTA$7G7mee|Fge7Mj{mv!KGuRVdVhV%yIW_bxKc zm&DzNUw%LoIWw&FZ3=}97~kr93`zM(hM!BaUIMpu(CCiRp@LY=t1z0k4ytsmuuLN0 zoeFoW^f|eBB3Fuecqgv63?sh^oZ=^Dxmh#q{2L__Qgjxd`Ft4tXPe^{fiIhjtd=q| zW+}{s@+n3_U^B|Kn+_Nj#kcDY{CI*HHDXo&9)Wm#FR;3#cE#TmgR8>r zHUrmP$0y`nHLh=84#ezX&$)ow7dfrr-4@4C{VAJo%-(STTE*vaf1t1Hww0~kxPI0= z`Hjh*O@?Jvvq#GHp2KVes+S|#uo3&4GL1zpp4*O$c8?~a*7=JFO53RhT*;P{Ns2Ed z(~5`VW$l|dI$}JCoU&_Q>e7P|;;o<=2Zrf7ne6#ql#d)B8^YLiU@#;tW=qDn=T6Cv zgjnstFaF#zV!_A})@ktz|8e{pvz*Q#=I{@Efl}eE&s>Q8j(9gHIhRO zuxs+dSd|RFE1U|D01m8L&bwY_@b{ZN%3)G20d<s@>TGuY$kEKIf70%OhQJR4M2%#ebS2RDrm)Q7XZy+vaM91dTgDP(nlL8dy%mgz`?63xU3Q*KJc3JoMt@*ffq zJ8ZM0Q8Y2<@?-8Qm%<-_y{@xLcZx2j^qy&Gs^8rhJXZ|Ke2@(b($MCJON6lR*LgTb zgQ7Bco5839ify^f=r8wt^gKgnNhJDV-SDEzw`e<9Acs%el??v6#B?)1?yK+{dy(0w0L zjDJ;cEmMI-T*aCVDL8T5U5rs&DU!OvyH8D-i`6y7sLf7p6AkLG)l$lxFu~{frrkVh zxfTEU4IS#fLMh8&eg=ETzQsT(01<2<+p59uJ)w^%9bz<6q<}m31~sw1vUD^6>0*k| ztFE$Gs3X}NTLPe7^bkD@3r6|Ab@cQcP!CU*_18wkcR*O9_63+qRU+h zC&{hsQOAL#kv~6p_1h8%BA1FWv4>f`#l9Av;f~U}nG8Poa~o+jGNiLmu9+_a8L4x^ zVgrvNoumc!yG{ZFtbMA%o~nffoEa=B7u}(9H=uDeB-FU;UpnS=AyL zHIG~q$4A)?XC`9NF9IG+*k;z`DDYOE$$&iekR2YN+s5tiBfWD!p*8$nCLJrDWQPs+ zyA<{m8!@zAt+NZdr5C$Oppqr{k9Q~>@tVhrvnUzyb|cEWbWRv1$W|r#aXlUDTv&cM za&|Ql5@3#lOE=p7u|5N+{PC(9$hv2n0qK=Z2tXo8lyx~W&y+5)g_IZ_sW`3J{=ceE zzTl}{nW_o*M7j^H(ygl_Qd!=}U59>Pt@3&xX`4IHUjcuZs}3te@@zq%kW~U4cd-h$+QzI(fKSg-g;ZtV( zdg0;Qk-W4fMYfrT624SMlY1R?BE8W>)1_|f4`JNQ?G9uffx@bp(uD2RWS~^pgqeIFWVMiZjAVFr1lIz zzyj&xnp0zs+6wn>KRTwkf4g&K8wpos1 z+NGCaurz?F4~5hrOXAxx`|wYx^wX#2wuQwqyJsWW1G~mjUjNE7Y?#(;hef?sAC1=F zq-ny0*WU_Dv~bpH!f?Y9|9|j8$VsekoNLscVUL=CHpKLKJ<0T!r-hSK0priNr4C=| zuhPyX9dxXsbj92-{09F1F-ep^6b2Zd`>r@t%=@MY#R3duFbX z_$KZKH%HR*A?Iyt2}lZ+)Lxcn%4u+^jFV@(6QrnM0_AVVih#eZ3DwG z0OKg6bBq9E!m)hhI1G{tVI!SpI>>_xuLbyl`&;l--jg&NdNnH6Z&tlO)5nQ~xc%jP zWq~-@9)ePq@+!T#obZ$9{}NVQPUp|Y%V?66kxNHY*a15UsAqV`4$(OG zdMyNkI}0XD*L>xHe>XRx`O@BGN5Lw-sy4yLEd~1wr$NlG(KAa6+e3e=0T!W7j)JUxUIV9Oqa`>xJ?+XcL54sH|rYhw|Mn#yQ0Es+qP6MTxiV0WJwh_q6s{792h3P4fGf%XQ{fDWtFV3@r|a(Ijh`9E_N_b z7E&USwda1cozA{3f;(hEe^loPuN7n&*cspQ&Jfz|v2Xm5_DU-@_bB_(oo^}gj=KL? zg&qWJubvCfNQMrwXn6y@g6shFvJ_i29B3*rT`6_o=D?^Xp7m)l2=`TE)5Lv*(fI(V zJ{q_bb(j7YvNV*aya9_|Dp%8wHs|`ZKMgBauKtq!DgmRlJRo=HAb${UXuReS^${Y* z)CLSg%<%9*V*n>oq8@}^w>ja`7x|x*lxDcf4qrm0HCi*z!egxZho7})`1qpiFgnfP zNchXgZA}GM>FJE#KkIxbyxDou!}BfowtL%BqSj*l)ie=eHZCC5#h?bQh5^7D(e-1- ze8~igOXC5+@m;5tS^vIuYqivBeDXvr=KC@*_AjN|jhLM~Q&B13Fv4T zo%IJ5eCE?<7`ZfYZ=?bc=o_$gxusXT*7f(2I7Uzj?ZSLLAG`W_c(<#A&ae+DXj^0$ zL3fc0OxbCwr=Y5X0NyBG0q}>Eem?yOJ2jLKsxIHWLFEj@Y;vN z+-ddxtwtd;#7*!cpFO|tiW}zE8@RBDhZ96NDeuEPWgDM2qg2T3Jsv&%J{JK1`V&Cn;`ZtoP*f73-~+ zUiAl|$2^bE`Gm#y^`p~}U$!>|$AQOot-ce5(X!$D&r6zDP@HMH$-P23ia7F4&xFx2 zVNaSjSv)Pn@J8EYwmfP}b7Im~aU(fU9$_CIEU9cwQH-Uj?tz?d4_&7Hf$OZnU-sb`*}&wl0O80RHI%rv^n%;LZe2t-f!A==2yvK5Oh^;YL(TB}Yd1wk79> ze)D^aeOnw*H(XaY>fp1*;;Y2;mVNK_%Q8KcqNbVGf1slbidsiFL5U#vMa-B2C844o z;vPTtXA5U7F{9Aa3^dd@N|IneNQ}l-UH3bfq9n2i6->L+<%}Q4jh)1|?0g#A-Wzn2 zuu}of{IoLhI!0I8JV>}a^jZ)B>FyPbY0~OHzJLGjAcdGX%Y>CUBJ5-Ug&VxK*c+ho zw%5MOb#c1_ttNx)!aMJ`#_Gar4RNWgi}uZutjDB6NcxYZ2KqU9qAc2j6^#H*p5vT# zI{82fGK#gvb@Xw^hA|ynD%%Bsn>PIV0ks^5*o9K&LYJYp)PTO*xXUT03Ek8KIcrP< zFuA*uW5oFquCKdr`Rr}|d^Li#J?955NSFxP zhF6o;E{1mw!N-3RyGRUGb50V-aK;vJH0W_IjBaky&Od%h{<%mM)1<9?4@rU9-tt=v3gKVdLJPI43>{>J%d&i(i>Vc*}ae27VPlm9yDr zfvL9|QALV`AqmmDF_0y30`TL8l|3!6Cl^|Ml3Ox{Fm(?FgW-6KW7*hmV{l0K;sG0U z4|x1IT^~hz*%^QjcdP*hpUdSzKZdT_G?QfvXZAxI3%clC>U~nlfku>)gmzUaqi?hC%~$Rt4<$g!AVx3vEsB*6?MxG1gv3b8SfKKXMtp1_b4&TIP@JZ zM&=(H7uLjL;{*R}+#Mus2GLuaBqq-vAl0<2G*mruy7MiEDUk0oFYm(NICA!=iKl(2Y%G#}K-ZF4He1)2&F(2x69p^sYFG3t+QcP0p*17Y1QmH^WRnwV_&Mp2%ar6w%0;~00MQM zmsqIdq8pA#HN^6SWbmd}??S^0E9v*4LTd9qA@-?!TbV>HCrUI>?NTpG6 z-+51&@~A(MEYLyNG+ZlW;dv!rx)}?D>p%OLV1yKk@Z@bFit-8s3U78!z%v`o>*;*i z5Ch*RQBn^|*1TJcGb-`}I85v5=DhuYJ}Y9H%&3`wo&!8R3b_J+ByS@fCnuT%`ml4i z^otA#>2;I$25mJBY5GNqMW@IlD}yy{B4H3pFVV(O($P>JWKBuL>f$0i5so}gg`~2S zhB8#O$O;Ga3cxEQcy+s*QXNy6NO$vLdz}oy-)^ganMC$KR1VpHLE>>)As#B>i|pca6mG|&LtF9nlhf_O_sJ(#@ zRPzKq5E(BKFHsn=9!o%HstI9 z_1rxXChdxJo9CTO)c{sQHZUNG1b$Kk^2Sfo+QWI(@WfqpoHy3Sx92^^rf#7NvY}i7fu0&3&%^IF1%#H-Pw#lN|}H>o1*nKRkEe@;(*NR zd7%;RR3~YZjGhPQsMRPj$0w`r^GCCWkQUH$*pA`yD(8i-|Kg-#m(|}UH(16TnDAyH zvBSOiJnx0p|FM`B?p{-Bti03g6GA%weVQd2nIu|k5&>$qHro3soUz;TUxB#S^P=pYB#NqAZLS^X%9q$lq7*l~AH16?JS4i8;v1O#Y6lyGm+&K5k z8OYd0qyV5dj9BHIng?g`!_XaMc_|=)5xt}qeea>cQ6=Rl$qkH0Ct&B)o&30I>0@V` z>wjF=#$u)KRsazU3r9=&G>w<&-|$$DX5cJiv6Bj;RN)prAA?k#(qr(B+*Kg~@msWMX+#4?C=bt`O`m+1&$UeXXxy_Zwu%+9jH=l%*s2i6OMb3p z1nfP-rSsM>4&lAR$H$Q}obfDd{qq=63)4PEjZxtP)&%371d_{`)D!A2HWCj#l*!5! zMxJ2`d_j)U)Uii6L}zx?xm9eeK+AUcEDhnEsX)#;bW+T1ZVrj(Sj8*wc|osSW5SgX z97tx8GS*BO1?qN9-#ziPR#>myHr%90l`;2?Q*b#0&|Pv*PSZaZo{bszg!smlJ0m6n zS*BZ$djRcez))KT%X`JRsb#u0?M~~6 z?(ixjw!uRd@sA(kA(fCFLEn0R5i7&$0Bc+KR9~TLKe1zbV~s*es?hn6K-vJO<2z7_ zbXNxz0z(?l-tFLXE_rn*4HZ6@)GKO?G;{$6qq?>*5Z9$g5y~ z$MKn>fdWt(4y2TVBPs5EKAJNqflg$`lA}NELNFlMhoSm7N)>hE(mKo8Z=f_521KXf zlO>Ai7Em9MM%m`+%Xtd7yYmzCK57;<8Z7_`{B*M8TTPm$P;@Vp{jV=-RYCo|;jU(K zY?YZQQ_cBZ?37ndtlVlpP}dfl;L9~Y%(6j_xVYRMM#J)FYtJ>&8H%N&EKG$e>}gIC zjf$c4$ad6}c`YBS-b6}UO)_X1w% zq}f=yHTCE2af@wKP;gSe`6<%Ey}4W=W0wGD0;dT@YK5URmqbs}m%J+PgiHQ`ez*&&}(3_DnRc|JNY{^?=64iO2v>ZVvjc zd@w-%`1Y4>4?h?S9sMFGQv^7PEc&p4_X+y;e0SLw#hRW#F8xJr`Kwb$&!dW z#e>lQQz%mtU_k#5Nq*uWvPu=1a7UpfNr4tr)`E2R(1(>;x4?|G54_X=O3p2Cxiq5r zJ_f*5PqyYgKOVo%Hqx$lL!`nev*Fu~36%*<%m?Ngv+VlnV~uDM{_ql?GZ2$CB_0x` z_^!@uliiz7Z$;60dgk%{l}uj69ki#2r+yjSgAzHMTt)%^TD%rBvq5wY$4Q*K804s} zX!T!db?fk=#6Z>9L$<_4Pf@WJ^8>JF4doGkGvgr(+x^4d0zgGkK+c-&_Wl|ksN_8I zZVj|$8?2>ttHwWVsahK~8c3%JA<2btLBJBC)2oanVHIj{@!y7M8%EAf9mr2z_Mv3U zIS$-Nbe`C>v?b?b0UakcWav!G=bKG|s0>@*S)pX!NqA?kx_fPXnx=XHggt2njy)^( zt88$QimW!Z74|V+euX?be*b?4@8IhrxD++BZAp~kQ<3ur4fgGA+!)s3CS=RMj0G)0 zp!*Qy%XKY#X!(85)5EsQn9PAa;!86_lS%}AqV2kATr7_E(gujH!U zxkuDzEYOm2nQ94|Vf&;C^r{a|4Rd4JL*}=6SV(7VT${iWSSPlyjD!HG*wXino9U`Zf-M6{XoK2yl5 zz>d*zEIrA_V<9V;VKoagg&FRs1r)*1?le5irJlIy-W``xByTrQ$!2gqOKU5~poW5Fnai&IHuRNv5-GsW^fTl%~vd9JR_^FFi78lR? z0*%KtVPOg$0P*VHV<=!f#LL*MvOW5C%kz*_Y~n?&-nh--{8m~1K1!9?ExkKlyxkT> zTw$FJ^_p&IuRL5C@vcbDz)xpR4a~gv9C3>6HW>&xyx&{B$bfB|;c3n|eWIN5k&!BHJw#}vUTSI4WJS+ z4I4bbC}PqEpEV=OZw2&3dsm8Z&kqN>PVF`5chRLZ?~yfdozVEj1d!K8%%-sEZRNb| zkJ!zG#RO3Z_v@P(o91kKDQu)ejxAD}hF7>6%PcRgR7f$;TGhmot2TNgN~##Dv21+~ z+LF{S8(HK(q%y(@&?K*A-8fu{XK~JHkMaEH`$Cijw#(^RQZ&kxU6GY5>tnUAuW>;t z{y9Ia2+%t4@@$y4A$_lgtFo`qG?nbH>?uBYQ`K;4!kyiHAr-<_48k5@R#VUzQVb8B zSg#TSRweF% zSg#2;FqBrrch=0>Lw&2+dwrK98$uF(xeP5af5C*Lb}_`pp&nN1hmIsMSkpF3(qVH; z!vJ00zvS2asH|^v{(%9-5`dtrxKBuZQiZ2z%1fm=DCw3xg(X(1biyb(k)vY~MH6Pw{s(QR~Gs9wx06sVv~M+{EbxP1I1mSuwut%zP? zO$P1G(ydoS*NnBgfq{%b((8mk4UYzyfAI$YmNqgN$&4Xuj?4;0)=Pw6!4od3(M7n& z1ul(L3mti4{^+v1wE?FC=D;;-O`*>B!aEI8zRlWfy++NbBdQap+0Ns};-7@y@qEa~ z1(P7kKU-!`b2q^qdQNUYZ{ENdWVq6mq&7H%!1hf3XbdUCzUgk?;JgP1X^4+3HF~hg zZU$y*JptgKhVDV-S#5&dG4oICe)K9O-8k4OOu+{+=&#R!7qhjdcOpTp1utG+7tXGk z@4cJ!gzC?rJN)`D!KP)zpp_IU3PN`SE;CQ6dIqovm> zK9#7us+%4!cjFhfTe01Dbs?wZsW*&296$dIlfyW8piN_zlqyjW<&k&A3||-yHy>1JikG zxHvv{7}6Ad{bl_JZUJzXYgJZy^58hTj-BEX^0K-I;IiSva6A@1y3f9BPbh;qf0M&? zQBH+OjAmzR#Pfh#>i$q@i<(%jgWp7c^tDt)Hx?G+kZ0p<#Wu7L9&HM-oB(I5bxoRV zE^6HqpJ>F_@?fj2egIOC#FkgQvCRC1A zxuUk>2j-vOVIaiU7c5Hfl%BABzmp*$n~Wy(nAs^tWV6p-r*1`wHZ^(Km5xjBAozKu zwg?H4_4C{&OGm>&lg*BkuWs%*$6@ArovsWIb7^w?jYO%GL@B-ZS#|9UIfMT03t(IcJR;_ql`5Gk!Ojqr`HMf8Z0`^yx%NHC}1i_kr(0zj1 zGIG%>HA4wm=PSRYXW>Km5{o4uNncjpkyGP=&#knM{PZ(8}I!PPS zN;;UA$eu7WEFLWnf(rasilqg)VzC2|zAbHIY@JNagjP4anZm%=s9|GZ*I(NdiK@yD z@<+WOWk6Y)Rpr0i4#`nX>m4po%GGje^04NU2an7XDC|_S&YmdgZ*v#xtg=Y7#;-W9 zWz!x*AJFGT4Xna6+z3*8%`=jC`FDemn>UH_2nn z3 z7WfRviUU)c8jzISj*7o{NOBRu^mSDSr#*qrSz}Fs@%Nw^h?Yef<};H18LQC#4IPxm zo#;<7EL6}MA%f=tQ*u9#*R|CFG1u;1u&Ot1>n~Xm;@4v`>P1w1E@l%~-$_zh=)im? ziSDzp3-a}IiKk$EMlMn%4z<6qNfB=oRIe)`Oj%QbH!{y9ZKQbTifiG06Sw_)HKyNh z-84aB2xj|apYs%bwl~TXIq7Oq3x@2AaFINWxH1HqMKdKu>Ic2wVoyE9DgPK0W5&9s=Z|0YZJyU`ZGzDOt-(-}{z`bze1O^(ht+WMayJh1`E7K+h%4Z<} z{hNv=TOZ;CQ+D3f^0?9~3*J9ok0VPPc-_p09HLvfF8>EVRNKr`fMU0EO6JC&sLJf+ z8Py{hp%4##R2sLDF@MXLh!-@py9oTCO#(jzywkK8IJxz(J~qAKJhG?Wv#AAnpX|KH(sbv3@;`&3@ z8m4Fe4kvWU#J7)SntYpKt>hwsYyTKxLaXz?%a`te&alp*NruC;D((rUJ>D5lq7`np zFsq*@$wP^VZnmjj_M&dH_l#7`=`K$1r&%(cbU_kZsfocqWB$|GfBPXegW z8S{Jf!6r9UU*|8jU}-VHgSX=(&QWoVclU_ysVNsr%=$75=i3^!qs6P+h(!6$b03U= z1PKvyte6kr^5$oKD?yUpQri!+Z4l1QSI**igsS!c%{giaROFOe_tB(n3PFHZ+rolp z+Ub^QP_NIPvpERYeN4U?wILXF*?1z z%*MjA2~eY?{7T)k(_N0Q9H+A#ItFaL|6f>Hk!%~5S|C_|1T*8%{b5)p;QYJ z#3XR{ogV+(xUW^jM*jkLPLB4xv&vgR*Nww6A01I-rz_Sf>$m*b z(;4!kxxUi}+{+s5{*}(@?cqtk#s~8o&Hgl_JBEouQfC=mU)ba&9HI!uI{c$KJ7K8) zYsIvCx}g-Wf<0h@spBVrZzNc9jdM3f0E{vs?5AS7>3OonAXy7^T?B<^E~U=}+}b0$ zJC9$?>F#d(6UjH{h7|C9?cmc#nGC#iXU-ffw=z!}m8p!-&>g)2*_Dc-INCYtteIm5 z-hKUAUxUeyTJ6KqVRLJpMY^mJmH_;;BW`J2^jU?!#15sI*F>+dO;PJLE$k(0ZYbeI9I&Q}f+M_8 z+4}^wuR>H9feZ{4OY4z`0&0_dvn?LW1QLv45w$-#>5>n0fUS8Mai&<#1(}>>eA1Um zF#7tywb+&F0q+9qQ7w6kXlEdYz^z$A)C8*LF ztda4jJX=Fqm<9)RnFvqd>b|EX;2!S`gpwjdNl7yO zVJm&|6i30w%NJBQO(h}9RJT*R%7l&7_@g0eR~V1Rj1=YjHJTU+z#?e0+0d7J792D2 zU3+AbXto&Pja;~cqd;H(oj8vbp+FA+tL4`%<6l@|qE^Ba4=)WMOX}K3ZSi>zeSoC(FeVq~U#Xkp4> zE=2dN5{DHPO-$R_=fWT@HS9m6ea5zQq&r$6)4MO;*jT*w%IJX@Y70?}6wE7lzBeJY zzNp*4)8UR7SOvMJn|Dif+r#6@qbUC*a(EyaZK1JZ=P?dF!%iZ0)vyq$XM%yQOv*`` zzqLFJ*FxU;C&E~9_I*J(OS@1aYHG0Del>Qv$iKSF(%l;@!<IXa#wd`4o8sSCmyBwIo3&T3(Jp8+f8kp-Cyku~tOxS3Q?RKIK@HlqQW$WlLgOA=Wlxq^5YH#CUtg`FR$`I=|O<0)lJnGiOlv~Qt}VJ|b60Cy=6P;cz} z-7zpEi=TB`CcQ0YaL-yjNaui>!?|xfXAHkZ#Y_YI#|bK1TK0jgsadInOp!2DG%yg) zDy*2@*hg<_o7wp{0E9%{$hH-q10mK@jKA5#CB#O#`0FEaomLp&isiSI6gIpS z`-d1n_+!6xqHt zHdLP+5Rl(Ic?n<6GU)DMc(#2OrPDQH7O_TT@>Wi zhx51O&L=(UpXP7a2zpC$cDJXwX-J7x^WtBOT z4nd7M#e*gh<|Q_wCkYzm^>!-$2pDjnv;~WyDQ&F+-Oir)!2;@Zs7cdSc4OhNA%O@9 zS{pt$?rx&yYCsb~@?;^#y?7@(tk7Hz-)PB?jJ}lK&JW+2i>VT0a7b_vWMtx%XpjEH z2SEP#@3Sj9S_szdqr-le8s>jc#JiWs=js#O6^*xC;(nx9xRgp#z)7tPx^@2EbJkic z#D@0>$aR><#A&J}2Sz<>oWnOWbvH_kUc=B4sA{o6O_+3aZ@T~L_ zmZHq4w-rCFbV_R(fAJi}U}TK~>uG#>x*qHpZHX~>%nG8%+6_z*d|?|_fHYcj28awD z?PR~^QUPy^`GW%!w#2+gv5(a=yUmj2{?wq_?p=tg%xMid8}M6uBRdTj93AW^X8woS zB`q{gVtsHD#shZ~Su4{f!Nv*VSjyRr6cPJ-NJ8P|q$Va*(0fSvisEYN0S*p%rJuGM z?646r1YMuPX0#7^$llDn1dP6V=vX~D$@<+Awx4t&%U8j!bhIY4tjPU+Mx$SU zvTf|PTrf|cj(?Yqo1KVml#D=f!~!7>x)STs)@2>A(<}lez;9@9ET>IuBST5(;4^o+ zAsq?rFGrsj2wn~pCy=j0=ZK?^6vOG?8+1pA$M}#H4NrZpD;~m~<7fGjM6=g{oOuR) z_LUZDH2>z3)U0-hMY;0Ga&FgfnZ12B4kuv5MxHWFDV@!QOkVdsMNDBy4}sNa$cUCstOXDGstIqpo9K`hJ;w{4xG zgEZ;P6D6(Tlkd^VDt9e~efK6}v!s%LVSU$C%Hg!gtaci_bx5CL%oH));P}X{zt`Rn zuV#5Lbb8dv{2Sr0{LEY9rbvT2zIrcJa107;7Yd!vaduV~yJF&=x4n*mo1{GA;c+hS zlwWC!5}k?v;XvIC03VE4McQdVPaFI$q7`Eh_(%3}C+hZ1Blm$7N3G+n89Q%ni>&%inCD^IIPjApJT?K2jcGnf1aCE1}JmD+o zX&gU1EQ%(RG^J!FSlj*hwm-u!+-sZa;@L{}Gq*_UOZa=(b4d$&+gmm@-zpZD!XNh( z*UGv8gFT<7xJH!c=)x5{w1NIYzYoa(omNH_)|iuwDQ>@5Qte(i)$c>6t$etuSAE%> zK{Vcj!GMO{f61)3JQNN4seCFE+8gDi-oXX?()r+wM7(jAp>J@sQ;yzb=&NPNuvJ~EjUyzl>Ssgo;+juk!=-T;wZBJd!J9YX@G+IeY5hbR`9*%2 z&Vm6MDDd*DMaV{y`bajZ#giKszza1th0_6T_j&&45vUGC^w>Mj_TBf)Iz&ioO zD(pfVJptef5J1mXNY<0F|MsJ;GF47p(AfqMU_>?dwWT{XQSwADti^5za?T?$rRI9~ z03{#Pfk)5Ryq!QcfjbZt3RKFjj4EQ)G@E;BMz0;K2_bO;#5}|2dT*Co<$tEhN1Um^ z4eAla0*2d@Gu%BS9zilE|67p@a=0wAh7GM7@c%^YtVSf1o}8KIrUk`#n{alAYZe?+MoqQy4J-I%eyNF!EqQExHo%tmpR z$>{Gz*(Pq_Lq(r(re3=FX~fzW`Y~Y4Mnr1rfJeBJSr*3KzrJWm6&g@= zG}xBifs-K#DP&Bw&Vcx(WQo#}58DZD(va-rr^3AN!iZ{Vmt+OPb>Mj6zL9fUUy=^7 zv@#$;IzmvK+J`99@GO1cX#vc;W6w$?{yW)VJb$0q>}Z3K78mHG158Ltw%lJ2`W=F* zdh}j_EXN!{tWvlOWRwKQsSGutn(~a6$rN<&L5~yeO=(+*Vd%OZxdoPcvNMQTr<<_f zn)w1g9LU+XVf63~7xw&__!_+S3Nuu?G=J~cG|-6Yj+OU37yBJAAktoiE2dV+wJ+|l zObY@x52p4akuc#R4h{OO2T9?iF7Ywi4^ReQD#STF;@f3?H;8LHqrX=w2x5z7vC#jS z^b?jSX~cau$G=HN+v6{JdefQsdRTnx0D_~17CMSZj$f0rXhzILusOr&Fs#C_Tiaa6 z&yCSv9-4TXQ5>GT6!_2v>4yoB@W%-_hj(OFFc8Asb#5Rs3 zn5te8^FpN~W=b22;%u>V9!$$S&0bUc!X&r_t#HWmsPEvy7embT47Z*8#m zr+vEKA+W2YrB|?^fPm8=`xX^PI3GBhp)rJ%JOj#h2+Y)9)hL!}pgA;nPExf%fKu8f z0CZ+z;R_8FIl01J83se^$5@p>?Us7l&5SeXo>x7Ssx@mg#B7JuK_!B2%;t@FMF`So zB^DVDT}Wo;0G86SL(r#&+JeQZm}|YN13?%Tl-V9eE7PI1MFQH|;7x_v9OGZPE|S~D zb~L8&NWk_P{vMl4_|S#YUqCa6V%P)wz}!3X5=sHE959uMX}QIjWF}5{d`DYS zVwj!*a#72UiY#LmZUgOOqaKPrMcVMygS86vMVXrj9N`GojNiIjelc?bM5RldqJR;B z?TbhA5x&og$6qQHgSEv*$Z%-(CudfBD_EQ{{bR{SXwB-Zap0Dc8q@n>(%P(M02_?H z5PE|NP5|r$4I>U|{>m=%kz%+5a!xKlW-bvS{-$^;LiLTyIKtqvmY!p(9Pl!}h5dKF z4ir1RLdp-&KFxGK7yr|*eJSY4-~d=gOs}s_b4$id<@=3j0lPz;(DS3xCH?8?WwORS z6ZIC7&l=Tsl5?UQfCZYjQCKlN9y7wTu78Vk5NluMDe9fJu~eJS{1maq512oo$bqrtGrYcY!_3ux=1OnAW%TV7ONYY?a^UEI_$Fv;CFreAg^f4vwA5(0 z&pawp*v;r}PfAdru(EStPQ``pw#n8)%+ozvDTt9kemSbjyCgn0{fQGfJ%djy2KJ(z zLP^QaL%k*!(LgYNYrjI1d%}O*(Iu*GJH1tAu2~?l=s$#)5WmC*RMfKIkxaMY-9Tr^ z$Ds&lzfRye!d(9sSmmO}I)z>DT8=6@r<8SS>LKZSlblDcP>N>f!*aqDBbyO(xao)p z%i;waVPj2m2sVKwwWh1#ye7YQ=3Shtnp^ejg=|xmi##xYxd=27B3h{yRj=vX-1pI5 zdL5tQL1#|w5!~&UK`g*q)Go$Gw8RY*EI8i0@%Bw-<;vKI@(tm4=RdV~c-dUa5z%gx z$+28QF9ZWDjAizcM$?(XV7``R_K6x!r;8WP(-==a(nvH_nk#~Jnrdj?pEHuW*Dz~A zMcefWwROj&-mxGH6k_>2{ww#b)fWD1DreqW+ojrU*v~DEPu9|;v)6hQXb)Z>l-w^1 zJB>XpkL*lXx;_C^%cWpPQ+M8sLtV3H3k9L)d@+RSFLrxrTKYZud}`iMw^A5dt>~W^ zHOyQ+*z?H%yUDr{#W3!o3jjd_AJ){Qm&L+S^-R)UBEcqm3)~PRV7XtK_qUCTw3&K) zQoi@nugPAwrzcc~p`-t1_<#L8=V2#biL&wdih?1wV#%7K}$m zehSjZt3dPr;9blYIgy<^B3(gxKXcpSFFMSd>p6!(fSSGF&O-fE*=2)`gXg6$WKZxI zwAkh_RI0}$46e&;3uQ8-s0fK-A9k4`Neihk^*x|Sw^!VP7$7%!Q3ad&^4WKhP|mX$ zX^@m{o#VtC9i3aD-d6X;Y}f=qNP`~t`t8h(RD|9rqux1 z43N+$3(TKw4U+3<)q0KYpGK?^X~l+-FXzu`hpmR6V6}(5!k)i6jG(I#B6ilF0iCRx zsHS-`xewIW z?80fXX*hn#XAx~cjxmfZTa~=bknz~JwvobQJR32O^Lh6tqOzFJ_X~SqXQ>R`K=lW5 zATV?1!XOsugeuG4OJ*7ih3*72oFNg$PkWlE=ATRNNf*?i>*=%uIv3a81TVWjsr=__ z!Mp|{pJ8$`JFSvca~0H@E6&B+@e`xZyj?Xtl?nF0T z{*?*86>4OTr29B8xRQxydu00C?L-7=e}eHBJ0Gf@lvK2q zkPOF5sBuP56jqTzuGe}94W$}NkCE7XIh_^t>5Amc5tOHC0t3{3%bO~gbTCw&l+6M8_@t6-W&Hy|bhw~7H zi0MLdPsJ=7kO^;sX%tyY;cA{el5 zE*VQf0nou?BYL2ce}P?r)T{~_JQMK?O{$2qD}jix_e*5OF9As>o0a^AF>uO~WUmbm zK(XW=lCp2A-PQ?Nq|A}%^{tn#+WA;^E)RrXzD7|0Na9Z2US@qxo+nw?oMdJyGHMc{M*;VDMs< zwFNUa{%i4~qkJ51ID2DWw@@woqoRfSy+R4={S(nSp$&Ti>np(}|pAFTC zD4YriS}w!C5vH%~f-w#eYDrEaTU!D16<#xLl0|K!U(`|`to+@VhaY%^#D(_OL6l{R zSeY8b?^X_?)DA*+m@^0aYKA8}d3@kw8!LN%BqX!>5VGn~;Ie_)2#3RPkyjH~g!Ke^ zNi5SnPLStSuLFLpc657FyfrLAdx#YVKX_3C;U>m4;v63-4?Gs5jQk*~=F#0F|$xIa$h z`;lg?6?n%lO+m<<28LYo4{M?PWf|p$SJnp6?f0}(z5^>&Bpg8k!%-vW-7*m&^o^Aa z+0-__dot$>sJ{1*%6V%Mm1+s}%L5DV+#p}9vk`{X4StJek&tH9x?q?CtUyM>NQD z=4CyRAoihvp(p>1rG_R^fqQy?@?uIIPvzK>o70Wl4aNkwOBc!?a~?338wMI zn4ux=Rg4A*wo2~V^LA2zS=1NTv-a38jB;_LC;;8$!NFX941ABrSWMrQ6KRqJ=J1dH zdK|U?ryiT`0IPI;h>bUzHYz&=qqy)09%FykZMgaS1Ezd`6meaL`6n=r;{a|V9yQ=@ z2aY~pXh~|9+t}drv(_$AJv#FmV|yhUU!}cw|!W z1)QPfhNc6UvE;c`zhR4wcPHUw$a^r;PjXW_EYorIaV6hZx!jMC_9~@f8>M^KVla98 z7YhN3A0JWxvyWaL-PDPgAqhn~;}bYv?4YdT&!1ObyL;&|6`+)PD|yS{b(U#s?paU( z-^Clg$1@4B4yps!&vj4+H3?h54F_<=MUs_zOCRFQGfUKaC2&NyWt`oUl8s`%n5t%T-zxHcz zsS=#of172}pkIsVRgfaCtFaKeGpL4;F%7t3%677-3zz%IFFiI42)-)JNPPLt4U>oW zxh-l*0!dfb;_sIgcIM2-2_fo)YZuiBy|M|b|7`a5Zk~*!fBv)18*JoJLudzHQDI}< zZ8aj!IpFN8vR?@u{%(Bht(e8X1h$=LxADtY001K?m9vCWc&L+ufdEdI4me_VSz#dCGD# ze)RBLk)Z##E&XtO&dzDZb*l|CrUQEs_>)_Xe0#&rwTp86Dn3m*k&8(EUuoQth!7;5 z1ljD}U`3mdIUIIwEGGdP74=`$IY@d_rI4@*jlFBGCUyfrPrhf^ru%>|qVqGzNWdfm zr7d?I*gT%Mv&Gfqr;in~c5sPwSPDedgG`QjS{Gwa&Z^;Z*Zit1R1*fqPrTm%{a0{? zYI&H8LHu*L>h8QDYoXAn_Ws9S{XI#sR`xiiD-V`vV9HOelUI0ne%J{4$y*08#Qe6V z1%3rl#+->IjAw>Gc6(-@c86rZI9gYJPPlv~Xf{l>SPn&4PP-YJs*cu}-0`={!TB3(= z8H0~eeVLv3NiTWz8qR_!r15Lmwlo8>H=`HeClJ(8F z)>N(CV6wd66`Q+&4p<7$97hmtL&)X)aCS5mTIH3rVr*8)*Vk`&#{B@hNvl`s#tYEV&H%w?V zvvUIP5>Zjs}pp7|diUTS&?}+8;666t81w+I3 zJccu3GX6Y9*Icg=GYFXJX;YA*m9RZAQ=^eWM2Byld=AtffOh!cJHZE2k&df8+3Y8* zfm*0A3JZ46#X@`pKVuJk6q4lF`L>W2oGC^6k`-WmQZ-!8@L4B3YfYb;}2bu-nee<_@Hg%WY`b2#eK4j%tcHL^pQ~?^^3-|F5h8Ad`^yWwoVwm zL4Zl7s|c}wDKzmpU~q#J zsG9~b+c0=3&IgNz5=`@SUPriQ$uiBRRJvXPmXQ5WS%Fg-Jz+U}x_B|Vf|k8apou%% z{83P&??L~x+_R)$`xOAapKfNU7*EuMG%isqara4Wsgl$f@LKLIdi~bKsYGH`qz6pn z$M9!V0paWR4A2cvPt(R~7LFEGfr6CJiD^U4EEX8Z)>>xrGC`}qt+U|Zdn0bVr1B*$ zJC=HXQ(Ng2`G8zBW2F$R!nt@%-)gIrSzu6&5+FB1@5sCKbys@zs)GtGt23gJQ{|{@ z#CS!`BAr~h2XXvD#VdOiOhAFT=@VVu|3$Ch@{m!Cj?YRWe@P+>FPeeFGL$8o>W#Y*{jwbBMIZ_*iqbyTNZlmcQr!#OYeJ9eM zsvRyZt);iJO41VS;!%6*p*cO8S(fhmaN)~w_UB!z6QjP`KAb6nV+K5lShtQ-aj=Tc zK9=ZUD`ErA?4TPhr{||u`k$47Fi+J&&9;9<9~WuUs{)gcubgBhkU&hYIy-)RbGc*)b1No)LHb>{^@y96@O6`Z=8piaLa z9c6zXvRH?cQ$Sf;EyT)vz`kVPpt4XHa`2?mzD6UKAH^L}+}E<}b}n&Y0YgI3i-gfu zp(dvImDolYh0#RNt2h`Pn{I#%BqZ@dWoWp$`wt(8{Y#=vH~INK!|U{MDr#LBUV7YL z5;dtxySM`JDHQgyXr_Pq_rnZ8n{WoLqG`=f1XK{!c(rdt?mZXxGk3PVSBT?8>XDB# zsxen$9>mbM;4rQ*f{a`)cbl82ZDeMABu*BhWP!DA(P4i(z2@4XR$r-R=P@)eP}q7Y zGROs{)6zIZzgIFVIquQ=O0zeoQY(f@hnbsWCl%!{ zd6`RHfWM~$uDHvGZTrRaE%Zfpw8+JHOw2lI?j$w1@QON7(j`l$7ZH|O`-W1`vVNm% zU>}#$)E)`5TF%%U?)+xrh79P^DpAE@d=n)2uk@k4R1~l+V%D)2RvNA zf8?M^fL!}WAR=CgU8UNb%#dh0Hbsv*M~|Tl8R#SbpiOPtH&SWo|Q7BN4ay0 zv4A6G=Nsi#+z=zr6Q#Aazw9WG4RHDVnaSFi7d`wwf7JD)PrpgEVkfB+sZcN&dK$X^ zOgUC!inOP_^=9iVMu{b(!C5DMr16+j|LhXoH~s)uBjs%}0u>oqwz__uK=zFh_9iT| z@vl`>&)rTB%VjxO28iFS{EodqS@_XcDU>2LOAM-}#=`K3XK-aTMB9h3uJ8$PQC2@n zoD~y*XvQ=Xm?-S#bQ!$$N4skhvVRjF>3^FH!$9alIT=0+krjF8vIkv7Pl*P~hfRFG z%uM8lax6QReggD=&O#7x;{T3JPV0R-{qM;(Q?dJCNDjJrEe6?3tDC7w3`c8y$+zpZ z&)o~cpjV2T>Zn=}VD5jUH??Ll;;F0M?o~w$dRRyPi~SI+_9X=pm`DnGnR`pvhwCQ0 z4#e)FvSUilJ~9rr7Pr1V4prhncPkw|&bpdZ>Ta;Hl0xj7^7`nC)s=lWXb%Yf3f~Ib z(TIxKz0y7lK}E}PJ+F;PzVS7?q$M(Q#n%nzJ=kY6BzU0}P*do-O0jKvH&NUjW@*y9 zc9G|>iC!vXFq*wR+Ti3z1$hTTF*d+rryW<@s5*91kXyKjydA|fiA8jJd}oL(T!qMt z!))`MMpl$n=CH3QWX6T2+FD5|i)x`;fhs98yM$jfsELT43WfSlsUFSkY$Kn>=gqj@ zt1pC=KJ5o+g6YaonOT`;a;t31`0A|U4ub|c>Di^gjBwT91l9|$! z2i;W`&Jb(mX?2R1`775~)7bl&NRqhL-PZF+07o^(YY9CVaW?SlryLD-R6~6iBwm~} zVV0;BA3n;5lI{aeJHJ^#4&>ERB~Q(|QwF%W^nD)`XREyaNV_uZb|@B!&as1v_pGFf z+D|RhhF!a?r6}K*?xbT2ksLZtmJxC|q7dbkvQOqE`TkfwSL3Bk;oNGw4OJ>)9JP~@ zWQjag)q=fsPK{-fQBSpF^>2wLmwdv?(M`;G+j`ObxURp3WO)S&B!ty#N?TCIvskm; zpKEL^4;d$Hlpot}X#>8iV5B96eczzRsggUM9mi zy#$tr_&By3P;Bk#Y<2(=arf1$uE=Qibu|zeowDp6B$9Vc8V{Z+d;eqv5H^wGO#6x~ zjYVIYwuW1Vwq~6ZF@+g)nEK9^REBcU{5=hYCSmvX0#;XFP*czJ@ zU&3iWH`yO!TC+k9&j4_egyzem0l_HOl;+xM>0;%1Z4qOiJjaLfS$n@_E9P@%Z_*>6aUN~rAxCP z&C~%p5&gu&MXH(Vc;DO=*Y&lOe9Q@Of_U0}nIz9V!L3}}mSOkP^y4`x$NcejDK77L z;o@*1^a7}gV|NdueC~E{LlaTe*;TB+TH)5^p8SNWD$lktTToq-*LNUHDJh$9;st0} zqK#mGvV?$oiRVX_Kr2#F(~s%bhd1yrJvifna3yT2^-cn_{ZeTTh6wiw4O3+#Wt++l z2cWs!oV+}yBV4Wsm(n@bhgnKbI9wx1vpQ}wl{10>D&TtnO`LD!w4NFL|Bcl}U-O~c zj#$-&`$M}{p-x@K7u{3nTclT1wr#>NW3AqUSOjdEvP1UfG>Bj#<|^HAM-~CbvE`0R zLNILKZf0+qirvx0oqzgKN*BQ*Q39ca9HE1s2P-(=VP2CHBK^eKes|Hppy)JiEt~PY zE3bwW6w9v6S^dN{psCzQLNX2pt0w0a(s`8TyoFpQk^IRpe2aH$E&*TN1eAO0GC{Cldy` zPO%*Iam_A$Fe1z@p%mY@-Y0M{+>l%}+1Bjzm#q5(kA3HDKSXue7HY)q<0%c*x{O5Y z6!3cb*|{TPU8fdpE?U}8u9moDCD8e z@e>gg4ek$KNP|_}_-fcKST6Sc3{@O}m))b)AGfqQj~=W2-{Ie1Qop3-jx~zZ9?{` zP?|_TFJH+#lZaoR0Ib%bU&*Gs(PgbEmZ-|aL|FI%Coh=N0Elmrbkuo%UM`ALy98C{ z04Imaf-kgHz~5JfjqB$C*0(z{ftvNts9b)DL|mzG7K9};ZpI*5%d3P{touFDDE}Nb zKFd??hOW~rQ4{j*!2_8mSCwY-?tvCwnf;~8TmcGaOiIQjWKgl9A!ehN{$BDDT$d-o z*sfuD8E!l9DAZWd%cq-f3ML=z!-lnYPlafwop#w~$T2)axqAB=JI-J1xU*QwVJC8o z1M>oceQOI}A#rfjx%dji6lR8tfGLcLBOkoeO#be*fbJ`ul~f?OqT#GB!mfYWT>CXT ziDlHAGRPPIWrT(%aNU#XU5vy^@>!YU%t$S$xYk>2+2Fu&@nhXy?tO39Bu*!vtRR(` zHk{%0rbuTg;T_vZaI=&?$#&Vza8g{p(4bve@4(_Y#j8c5H>1W?E*! zYElmv5pwcSC#?J2g}OhT+ul}9CdB+(gmASOXWhnQY))PzE9=t)UlYl-Fi4k0K(j$y z+`0&SdgrGEvBJvZb6BRXfuiD<74^8YD`FoFLG=!ymZ~l zig1V>&F5o&`_4g}Xq#Q&yz#f$E?s^wiP0*T8r!C~ni_eSgAdh+bj@V*TT zi}i!4P@kAYVD*Rh@;s4@*)!FQ>yX7oqK=b1$2*fJjz)J{JyLoq?W3R6ci(jHjjOVj ze!}JN*YayAJ5Y4+dfI^`h8K)Q%&xh_dL+=p-|5p!D*6!?!k{NVU&W2s4*Ht)W`P@3_Ek#KKJZ$FC6kDvS(w#7Y80{?GoQC zs12f*&nJ++OELqmt5WlUt=aogby|+C((ryi4qN=mU?BXxQJnR>0;$-A2T-ym>A16U zNEj2*8NB{!S7$C+om4bw&GJig)>l9!T_=F9*PDv+N#rh!nUm?oTzgqFHr>SN^f^a~{`bPH0;-I`ZUh zYk6$3rL36Cqq&IQKqhQr5$a2L#Zoo2tmPn1(miV3>b%jQ8mL}SX>-Djd)SEg8?MSb zwm%cpli2tTTPpv<61!q)3#=b`FI1Gx({@zR;hX(}PZe~+yr>0L< zjI1)-Pm`hiPvW6kCuprVZzFdgvi5|M>q@T*Z^?$)WezoMD$Y3j48fRfmYZ{isoO^D z#jDI^(~fMW_Ziot9B|V26S5>j0-<90pQEJM{Om}Y>mB;EB#93Qwg?Qpc&yF7B>>7* z2Lrq=s8T0|?s&!F&of(NR;l(pCI%A$Ai-hq71+7+-2OiKg=O459>uE4;r?5x!=&mE zUbokQRU*;ja=*5iR8)eHgoq-V<<2FKe&0!Cz~o~vNMm4vS8~oWJHxjC?s)8QNplKd z27pB{`_t`Y^xWu`cNt9DxX$_ZGz0_pxA-3px4D&X-J8!pjk3fQTTEt=`%SeU77B#z z_KTa$5JyGc{QZY489_?G3EN)5ec6tT<*onXue91t8bk{mp=T8tV{$8Gn#i}^D%iwG zdoqU{+)u<0ZN{I5d&eyjyb7u$)D2_9DVJ?7az2*?KWv>)6otoE>OLCiHr%^XK;T<% zWLuwh9G5npMIF90EuZL$7`5AQzg!6JXjkCYQLf*C;M0*UB}?F~k68UO_~%EQ^1)Oz zZ=*_FEey4S$XGkZ_{WmeO*gS}W$^fDYBrbKJquDZu}|C7zbh1=3An8dR|!Rc>x_Wu z?ovyuv@^?Kths~4>fASQE#J~Y)?5UZTQYvCW;p^q#YTY@FXNq5e(<5tf>q}DiTlUJ zs7jUZrSDR`Ac>v={u2+!ukWJTb&y$^(TJeSpnJrlxhB_Q^T?lv$elz!yc#Gza$};& z4az_R6X}DWoFL1NJT&aSff zB=tWhENz)k7d+ABf$~yyd)Y)K+of*c-Bbz-vKKcPnr~-c2;gi$rh)i44)wXN?XwKOUd;I9a;EFV37-~u9wVZZQS0Nf`=`evu z^Hi690EV%>F6cl!uWaKvI(NWz1q|LB>~QC(+aoqgvxgV$!0>?u?!o?h zpY{CtV-Px|8>c@2zr56cMGQ@BkZ>p4LYTY?|Ah*(bgzqrwY&Fea-rFAY@HfGIC6{i$J_$teMZ9@VYrJ_lYkEknUqpAd{Z&nc0wIT7lBxDQ8W zH_>FCPog}CQ2P%FTeGuWTj2YlkA;dyE3|x8d)mOewn3d7^QHsz`YR<2$l=6nfY;L& z6l!2PsT?)KEwP#=rDy_E0a&%A9t0Qn2$Y;45teepB9d!*5LeII<`#~0nMVK+hE%zR zpps(t&y1#&43|7nn8=R&*@xLP-!%~vV51eBmzJvlKUxhw&1V@x-?ZKe&k2DYR494n z>G<%fRMbZ41@ zxim*rjD-SW{ugxKOK+VaqVQ4W1y}e1>7mXAD!U6ne3-x`_&Jn5Ph?JA+)Jw?z0iOFvJ7O4{@33aC_U$4332ks}-w_f5$jZ`z$V;J%>Ed{jc2pu(ClfK*?yIb9eZGZ9Ma-dKai-s<8Y~ zC2gc2aPGV=&4ZH8+{5H)c-7G>ZP^ODv0io#k$+SaZIsa?6Wq=4a#2f#2iFY&Un2xmrCcW}< z#^&k|EaTrO;wOGDW3hAd_I_lu82^Uiz)$OD_WjM& zf)Vn6|NKG~%$f^yUXnhXlVkD%dhs`aNs6n&ZGpHm6VcM0nZW!fs9V=qns1s6M{+U- zYrjwBAGk#)QLIS&v$28hKF(f`D@xv;RgAlF$ei%VNWRH%bL9Q;vd~$~pLTB<*vHa4 z-5K5JZv97H&v!xsz-8e*IA^@P0aZLJyjUMTLxXLEq#WP-ezbJ;gf?35-~0Bx@(}KV z`-{#d5`@%dLdmdL)s72Ozm2ftbj0IEhkE2;6(RW1oZ?0?j<`B-R(n+}95^O`+&5=t z3ND94sNxIZ#xiEM10DqiU4EPpgP=qm$H=)ssf!9pCSG_$Ky&ZDjZPd@E4naCAJ zr51pPUo7NXl0r~azj)p4i%*@&hxby3c~J&IEMelM^Ff6o{(t%i2Z+_I%xi@q?<6fB zw*3aZP*}<;=k`6Iiu{cSwuD#YTDDjGtjx<_Zevnotm3qKfR2$3mTow8GO5rY8N8J{ zw@58bhm<|F;Cutpb%2fnGH`>Ru3 zuM0Vwvg@pb9i42S=|8q=kx0$ zXpC9&6a(GwF&twEh;Nd#%F7i7V=`%OHJp{Ly5Wyw2JDv{6-IYQ5yvaGy8w1Ep35aC zEsps_4Q*Qmi6>0GhR39=iWm^Rh&70Yw+ z|MWvMt_6;+W>k&z%x!KaDX|6`UY~!nID5VnsU0;co3+8KuR=qa0xA?mAtcX}exOu( z&)b{FGZ`D+;GF4|47(!E6Ou{e+qKbkJf4Q0i>@>0*f(ZA2~sxlzOu;j1f3N^xEGvN*nciA`#Qh^iXk$4NJ0c?1JM$}!ov~IK;uyT$oIRF z4o?-?d`^p%)KB@2)+6{O1Px*Vtp1zCNd!Mj%2^=>_A1IcQY1q>7SUf=KlYtQ(o5EZF~>mwg~}SsAFn!Mw+5_RRZki%^~?~9T;ZrpHA&ziZJkqZ~*k8{YB&5s-->q_2*%ax-T%0H^d8?XpLG=@y09h zR+_tkjKe{ymED*SSh)3No`JhPr%*Q5SAtjGR;X*N=2%^GrjaIbR8|`6k(C_Ix$53K z>G%B>Hjc6oJ8Kk2DD_Fek8^WB;;0F|C;ip?sU|l*n%C;zKt(5F61l_(ZL+7pgo0O{ zzo`OLwTqLq;g|8p*=T~wQQ%fQ4>uM7dO*Pe8r>wdmU{WthAOv; zawOjgKkt^1B96=#RvUwr+qCePc0mspv8EPs_Cy+F$xa{mZKCwSu~xx+z@Zpix^V@w zR_8HEm`PNpFDfZ5d}3WE{!YmTs-gWwPzGnDAVsJKuMWo0TPx=}^$(8|md9 z(`z0}eQ%X9rbb*mi*PfckTvdBv9 zKgjY6T7l`B0PnZpL*4(VV4LxN%uZ`Wwo16oh2<@Ygm;MCnPRK{6dgxm|* z8SQgp8Jw0C)OO;W?*tU2EnGDoq=px1=HX?5x`rI)gaF>Mb2K{^=srCN@{|-`Y-P6P z)*a4eSllXQgE%dA`svTT z6MsD*yfD~@D?UQmQuqUw7f^7`!{SZ>huffilwiVmaRseeSe(4YXq+W#@Z)!KX&>c^ z8S7~N`xRsIRp=*!EvZaSs9#I+bkhNm5KIHfv+PMUC$yYo1Z3pKFKW}L>mekX@=e;7 z6>HEL`0Bi^6sg*u16CW|!xNDXUXT$B)qXLEbLV=x{(CA#tr*hDw4!0Z+PKHNSB==z z8bOw9>VY@BSRO=N^boF6xIM}PM&@GqNlH{YWoIoHdtSE&JVbm~hG;>sjl%RZl{aPh zrR_8L`)y|9t85eD))@6EqVcggP>^f^X=GaX@~#&4YHl1UQ(vmC$^Svy;cE9{aC32N zfwn}jA5YeX)FaeZMCOy_?)Of=YH!VvN3Q7~kRjz64xMob*pe;^&s2B0v7^!KjIBo? zc6+x~X4JAVV5|LtMwKzsW1rWjcB?KpB(ZlYFq7YfFtYntqUPWC&!cjxtHT?P*iJVQ z2#N3*1^k{#5fqH8a2a>ybUmZc9{$TkEIdQWX3*AJ6dGRd@d2#UlsX1TvD7{`z+{++tlmEqMy1S%E z)-D<<=jjn1*&Qg&18A}RoU^Ym(UlhGoHuM$T>5+J>KMxwPG)c5_@N!=DXl?@k|HJQ zrI_B~m>!4&eAwQP`n&XQM5}?sbrqc30XxyU7J&@gU~v-n3?R?8J)iRf)_VsA-D|Fh zoG{n4uML$moqEyZk!pIpZ%FoCJ4&B6_pKfOh<B5F&o1ln%6T<}{CTO6i5qBTQPhxpS^IvXO)+imPt+y?DveU4@~ykW*& z>{XgH=jpKQXzp!t3+dUFBCkJ^tJIqlNGktmgD>eYU}ZT4H|0v_ znv%fROK1kYTjZy{Ed#5$M1ZiTq^&o`E)r_>l>GM~(}z?+gxF>bVr1T>qts$f7%bSJrN;J607}=Y>!d!V zm(c$lVQpG)IE6gkf2brQ*GN%-?%9}C7-AOq){v0R=irlX0+ZJ=pWXx~dq=~gXxB#- zzyTT4Ca&y_K=OLZk?&^)$U>}gm6KKR&ObHZ7sT^-4Vp=unPd~XmrG$)6|vlbm}$A_ zIAKV6sOdCX^kdbuXV6t3vKKpr{COPEZIV0ppWKQazE+Aie{QpVB7Y z)_co_J}q&O0I+})+oE?-AAQ%nL3ZEPe_RYLX${V-OEiIGzjS-L(5BVNLk&Am0GNob z5Fx!Bg$#uw73YxbO^d}{cy{%;28);9Hffhj>X-%iRJesbL0(4Rt<6y1S(OxPWZRl0 z0gK0~ZVO{-D?aDfY**-KM;)%IYqNWIlTbqSi1^O&74+w&l^G4`lj!f*g}%~|8@f|R z9FjMF3z6SrP)_Rl!Z5<2O$?jv9mV)k1HZz^t_{66rTN-u(hcT9(ngvaO#e z&gXvyL)5ahGtuhFO?8Eq)9n0bR9!1=3emv$;_e17V=3x~c3En;rxe|HswU&z-75-R&DEX*@mM)h2}W8oTk%$@n+&ZXH=JiUP;WfEcV6R z>KtJ(QG_`R8Rxb4YXt>9%Y~W%FEBT%lNER4`EA3?vH^93=$3*;` z_VI{XPUdmDwjZEDV4&!&63K{KtMTVd>0)pY2fpiO)7|}7r2mz8B9*`ppR2-oR)=;l zz`iz$zG0+*_RC6blUV8(6U67}cZ}1#4b14ig!oDCLEyJ#SDaUG3QO`{VAqB`nqB1Gmk;4kUw0tRcrjcN_waJdLZ7T>C`a%2|-aIc@J*~nJ* zQ8!2ZJYD!^acg;yojUrH#~g>jtX&_QLj|h!FjmCJUJakh^u10JFOvKh3B865L(4LB$#x1d=|V?pnI%`?cJe6DeOX>WZ&29RV%ILS^YND%IEqjE1i z4wryIl@H-0E5Jx+;E`^lHrrtlxlV`LegXal8)AY&S5B~#!<7+4ywh!5ZD)=7BKq*l z6rr>|>>M5qegWJ5esH?KcVl{%Ex0j@PV{qVH@7au+TzgO?T8o_M=;+{eNaj=-Qnae zad1f^ zLA-QY9%Y=|dW-+^M17o~D{cgd&0mnl7~b$Y=$$pa84lff;x=nW;_nX{>+R!$fKXK( z7}~+95gTY{;)1>lEzBr@){P9eGHW#4)w-EMIlB4#JZY5LFGEFjA&~~*S>Fn6iN8Fo zu>VZ}4vz@L87x3j^E7Ahr;Y&;xqU@E51VH8|CiO5-@>K1i10$<>1S)JZ#y`{vrzvU zpV@vBGH_q^^;G4>G+8)4^$n#Um!>%pVgEJj7ao);cM5O@R-F7dZA!iq!n7=R!?PdX zXSV^w8=qL;!t>`{`0$5R02kone+6f^Sn&<{rk|~Fh#@}2MypWB1H^!gK>EOdiW$Yk z(=IZs{2Fz46+l)imF3h>Kp$Vs2p#*^M+`B5#IVylY7%hp5T=`SPut*nd_XwC|8`nC zhd?zd_uQk2uaUCy4nV0ynUT_?%tVxvdyL+tkq%J#YN5eS#%1?cY`=9=9-MsIF+wVj z|Bsn^3!DBrIsYUl$m)G=pzX{v>t!-(`lK5t5$68DpHmE1=M{+@U$p9~9uebo_rFov zP<+nLi-yj!4y5~6QZ|F@aNjK~Q#utN_It1DhMWoVIkN29S5$=&11*vp7s*opxcGLE zI;vX$CCUUUNE)%ODQhKO0h!mD<&Hn8B~);kS}%u(rER=l3~-t_-(^~o;{g}Q%ShSe z+&7Tm2y|29pRM*+btilQrT@;M#5$E2ACQz)X!wDJB@R5 zDKJyPhTi$W$vq0kfu#K~l1e*%5jpN;^;#Qj46W8*Vo4HmP1v4vBK-o17{+q<6a|)q z)D{{~zj^>BZ<*~HFd>Y1#L5o``_%=7Y_;wtXb(yK--FF)DRnb{Bk}8$wqxYN?>Z(K z{GjncGd&=y^;>8ovM7!X-VK7_uEqCxsK&7r5yHB)SA=V{o zKxizv-`*cA%)?LZG4h<$7y^qDR;n5ZH8_7OhuIWk+6;*GTSq;lso*q;$~obv|H{_& zLc1TSp1{rK4BTdfB|qYgTTU6`UgLAbFtu2Ej~yIhIP>c4+yZHO|MR>OaC*gA*uBJg z3E4!q)KGO| zW1{EG&$HV}4$`j+XhzJ3?2yNFm}IKH3bOl}4hz|s*!s=n1F+u;1#aPmDuThh|4!kl z!K;cUD5GVT+CCbrt1G-1WQ^bSMxf{4HNUcVjZ$_QpKc<`7gWl8JSOFXcNsDYPiCdY&2%D@Q0p)hZ-f%B31z|RIfl!RqSh^VF}&JRUM%np@tk|bkJV1jEMaVG!(W{5 zUb^ApK>!KXrJlNd&5ubw!?gIxrwZhSw|G-E)L7gRgJb(Pvwr0(r301|6e=%~No5LS zwj+Y1fV2NBY2}a?WEKu)yB^>h_LpxZLygxV!>@P!=e-*D9P0*JJum-|ezs?{FT;?m zq(iX_e?ChdYQ!K@q8 zOE&e&1MsTc5(^x~B#~`Xxr4h`98bPaxU$b^#ZpNPeT96@z>Y5tztqIb&2|1gcSKyk zhx5ZS;WwUo!KlOw13-T4k)PVFpvl|8?#Aa02MxG>ckZH{ZXyb=#xG|oDB#k}P0SpS zK%hP+6bH%%`RCs5fBz-4#8(s2)@m6Elye+)Y^+L-4X+k}9njPH_-kEV^=U|oFK(&m zz_#*B4tTfE+694c`~WfE1Jg+SYbKo4y;qjMf857Q9JN z6W!Z|l3+@EGr2}VwVqXdXbNPHPyME`r!4lmkM5uiO4xs zq|~6xo&iFWNhPS5p&gbiW`qd9T^4IboNN{CqL{9gF;!sFnE0~+Q(&gZ;~w~9!dL6N zYWcV50v6{i2hA;1Vk8}4g2-WKTRAW&T6F}1RHK&TDGi6M#FZ)!jsJ0$qOSpAn~P7a zWSCa7jW{|t#F9hhBQOdX-Gv1K|IM7)tsy}QYY8NQF0D9G{o#&4*)M0o`&P#ybs~w6 zQuBp z2!uB~54-sB2Zxi#N`Sid{KOU$(>$gva59F&B#i=6<=|2s8K{JxxyEMWne7FO=B{evGAb%epYq@TkvIsC z>D+&-T__xZuvS09t!)T%q&19#(b$t($?NT(%~A3)5w(gx6;Mh85}qvEx}k8@iAxYR*j6Nzkoml+q?Cu z{l%kNhR4f{lyfuZy5lZj%#w*}Tm9Wtr4JDnp9Y+yfi{&U9hCD3lwet*HE0}MzaUR- zHsy+jaz-kWPVktQ8$0AcygAwF1z}Y^BU6v|SEHNI_a@jjlvY;H)jF6{3q)ejPYBH= zGIInqBmLiTVJ_$*vj1lCTa+J)Nn?5ecmlQY@5RDSUBlt44Yl4hHNzo#FvKf zL;v=I!*0V;mTe=pUhQ|0;7p1D5IFNsKUtp5Er_4N-{@N$lqa=UrnQ;x%F=>3Z%JBk z*~@A;bu2jqV|ZC?P%A&&9PX3j5s={Xfz#RRN2o=UP4a|ZhG@`HiVZk#$pA67`y-I? z57$n3k;b+Op0P7w1mMD5!qb9Qq!fA;al5Kaj2kZL^jymYXbX1CT#IxIs@QE`I8m!c z4l{Pgc3R}|)DQ7J>3sk@)Fp}k2uo!Uu6zbtkhUb6!gLH}q4+8(p%g<0sKzI}Zt#}D zuEYQX__lY~-@Q6Rlv**y0H0+_=rhgXAQBzc`u^%Yx>A|-F;!2}#xmxDVH8%ci{v?$3sDUtYN z*vYg_kfR)I>no;Bh@gIe$&l=!XLl2Y`?|r-`q^$uU~Iou|ImuWd|YMCw*i#tn&rId z<(UOmLN*kCt`|@~?+>Z#7u9lR&A^vvYP11Sce7FJILR3kE8kfH|XE z|3TJ@OYTZjh(&%nyfJ>|=YhWiIaj+8H(-cs9R9ks#~fY!6q~hHbRLdh&Su@NjV_Rb z!H20&jJ;eU#_~m`jL1gY5)FwtD$c%CiELz}Nq~*phB$nvj_?rH31^gCvB!BGi(9I| z%3OQJ@`i>lHApOb5w?PVTunuBYm<$LmapW%gG$|bQ$*nffuh`svi;3_oU)yQRmJ6r z>;C3bE|G}yC6jLde>Tapi~;au`5R%#IeLjmni^1$))s3ozXN0?Q++s?8x26CPTKA+ zbx3>)SysXRMuCJ$y9BoxMBpOAY?9xoE7bzaPF-|!wW}Y_i4(RK^J*+X@ku_pz(AyF z{VFEN>jZS`YWuj;LE@aK21m;_psyzF%VRFpP!6$4bVg9iLn7yhU2pr2ZJf|Jqf<$^ z25qi@&=A!sz%xvLw;0B=XW7ko93t7c9&yPgSorF|K}!um4v9&FNevtPVci79O(=Xj zt>#Dm%@zVYtzT|9`?%N;eoCHUR&Hk4_+>|lIEO6Z8_cWR^(%tPz>I$CAb_1@TyCjDz5iWcM^%W}tpBEkQYc zrf-W>enkg6X#hn)y1yAhg76x`KFE2p$*w6=dufy|FdI073+e<;Kq3G0ze$Y zPG(d^F6Uj)R)H;nqop1JNja zWT||T#ZqH@PKtcE0#*W)qYv(gC^&5gadu|HX8jPm9<9%1@sCIfAnU3#q{7{I({~r; z>*&kPqTveCTig-r8me^x=L*jPbq()q2sSxpp24fvr;=IT4LOxi0C}N5lzjiydO{k; zD6ha5IRG9077KUOs#aARl$Gko#|=+B;??!0E2d82@Ve-9VbehPLnoqjDo`fOV{kHE9l*ZFWr{mLPo+NSuqc8GJ|~)={b8 z10tNcnfO(NdcSh|Kh{lwYV=Ru$zY8Mc@ECTZJZurLH0o zmgk^s*&*>lOx_ga>~MjaKmUnUYcSW+@_O$7E4k*<{uL~Kxn21Q&$WM=pTf^)d2rE5ky?@xBmE004}|XxhEAyIFpvFhvJ&? z)=UZ2PIRFbUDz-@K9k4h4`Q$WN1q&##B}#Guq(lAnl-(cC7tCA?JjmxAS>x}HyE%4 zY?)dsGrWznkr&A;M7U1MBWgf3b7UNn18cWpCsDhlG#=@h8Rk?aUu`5LAZ7pr&Sv zkNmpW$APjfNC}=lbt3h42^~WM(Xm|*OrLeAoW1^!0kq{K_pV(tccJ`nD1yV_gqDMV+MZRXA%+F=g(=iqE{TjxD_7f*DTJ?8(**0bmT|D`J zB~3?>FZQ!MKZgm*!`z z=>n%((lS=HF%b&5IUT`bjeok2H-nB^sZt1{aJ|(+?@PCx3rSP?2a%G}rsV0un+6M2 zg7Mr?Socnln#;ClNg9YiKFL}y6TKs_lXQUGre&b-FVTpn}5SPai zf@lx@VQE+~e#s*s8b*Ad4I*z+q+>YX=1cAN>|sk-8OQAKXY!?r@jyI|88WD!_Rben zxXDIt6#!0?yyC&fOT7Cu1u3nVfId7YRH7}rFJQuLP8qekHXpPTAOqH)y2*LblimdoLpN%qtWKKI*})!|X#k7|Btil6Ow z>wGqGO2aIY?!s;ex4Rk_NWO1+zB1o3G8uA*86tbuMj#Tb2_}c$q;Kg8Ler~S4F~?j z;u4*EA#-y3g}xS z-2R(AyVhAE1$v@BpCoS|GtdAq+a7lnhcWfZEWP%=&gUsQLdhh=5m&*_oL}i+QS5X% z;yxp1ID79Yfx>wEAAKwh*gl{5*{*dUtd<0_8!jsyL!qAIR_u0V7%*3)4*%d4ngv}g zd+|A?kF(5ISFV7T;BT*MZzTPH^$ntp%~IedO0-P`TF$pi&ArZ`LJZoCS`t=&ihfbI z8;W#3a2KWF0lYBY9p3DafAU`2f?9M1O~P4>w~AKh5r_m5-B&PIs)fu*i}o}i)*owp z=jyl8BboaMP1s__D1`ua(Q`D}@Tk~S?+L$VC_tue%>Hu2!~F~BkIkUFE`5D>O*%jM zUaE70Oz_W0Z|fruxestM;A&3T;}hsF^Vx+yP#ioSz+JZ0fhyfi3J1(Zx~(&RPB9W$1%9q&Hk1VA- zKVgGtNN*fY^mjAmHZKRF^wi20CbVzk9?1g)VwNj_q6G5f9t6}YJUc>2A(osNz3vbT z@XM5V0|{J>*((YJ$++50tB_*09^~l|y@Dl?6&~FsB!&T=x8~uSA z45+F$!S7}0<+kq9#L*erw_K%yULBP2&5~~xg>&Ek1E9)UF0}kc^IESoF)YJ5wrp7JxnnW zK(|xtArxpKbfM^YX7wkf6wHP@);^>NIIg~3ch7|y(? z-yJhln3NA5t^Fed-v67|h5*0(>g_~uymHD1m1OY}jN+LvX%>5+$< z{oA1@Zo@*WDT7OtFt&U#lJwfarGlb1td^`&PC)Iq zRr?|i|6oIPfO*OB^BIB1trur5+K&>I|!akZrVjI1>`hqW3wGylWg>YqBfKeY`v zl@asAicsB6TgOMEqn*Ci8SMY3@yYBL2Z3SWBwcQ> z5dvY78#Nrs1F{8P*z#-h>NPM=i$e>2_~z-Iaa;&yeE#Sgb&;4f!1S<9-|uQbj3u2E zE?vZ5O1G%ntKXPUcH8v0q5AbopByRF{NRW!@4NQSxRgybT0uZn2qW%(+eU~W`8hS+ z+Y-;hBJq5*h`SstJ#CY079i;fSAutSFi~i?{a+XaqXU{tg<$}B9fXo#W&8Jw*#lMi z%;u|9zF`*$K9w)0uC-@G8VGgBHdOk_)a=VooFAlC<7(v|L)k=uq#8I#$z^vGTA`!k zUs=gDh?Z6Iw||8R8Hh70tUuPEJ7B#5MyYD&`oe{PB)Sv(H+T@_%a1dbIVZ>ktJs@9p~UME?QoU0-@VcNCTojRC&0{hvJBA;Q+xR zbLPWN36zUB=UHeavfGnt=J!*bF_%BFOOb5>Z@I2M9xOqE;y+}R4tM3DYox>8-)tz% z+$q`-dnRd6y)t7a@BRE&9t4;gOX;gsk=CRZ9Ir{sjA+ZL^r-tor=;HPCO1!`5BXv^ zxxb7BEeZ9AM{%8P9&EA7r^WRgz9E+ck!LcBB<1{D!1^Q8>FQq9OF$&pd^(;J30KaX zu}2XisL`duuHI2?apNM_+huKmF7jTcs$zgmPWe8%&(>C&s&CEuVX(iUXuWG9?IFUR zOY`a|awx6UT^;JioZTfxUYu^6dTUNd-0c78o{&)6Ge;nqeB;xa$u@giv?&U^NjeM#1S(3KB|FJ7cVbwY!l3o zq3+_ln!K08X{aPvZsSRfxe5?|qBt_vK$~(+Dj~3CxVFNHO> zSDv#0>ZY)`mkSEXvZ5sU06uc(NX{2@_Smg>bg{9WYq%T$j&Dy*u_H}&8Sri!P{zo}eW zGGP$@9t?7!)o~mmO%k$}XG1scDhnv zXlWGtle470WDrxQ|1RHxyT1|p0h!`!cNnz63>b3b1GLhpB@Dt7zT1M9lCIFl#Am~L z=e$4yS1=^3FcZ`tfei~d;!{^P8Jq4jO~S6>h3TbGy3>%Ow!*H zmzIGnQ$sp~AweIIvQV+B#<<>9H5Plv3Cgd}H+lA@ab%611PdfJwPf*w5+JQ3+M8th zi2%%9Lr#_2Q)y-KR8e(Qg)W6yUS$h8dp8p~qB69uN%kM$$WO!hAbpMVt*mxCxSt-c zOsa!`vn;h;9KJ>yt-HK3m+r4lNGorTG0#rOKJ9i(c=jZCX4XcoM55!b=SVA*1HeOI z#;^~6i^92vMTp>oe)#7Tv$d_aaiYbl$smzO%o6;-Rdm3XLTt2|WIV0jFcQxf@#4Uy zMkchH?{D4AZ@+<;=Ve(|QDY5KM=NR*Gk(NEmK=K#U=VPcsqyhhK9z^d%t?`eT;UoI zwQFwvfJS35Wi|X(uiFBNobKpD$uL_F@A)+ONr>Q({zVwdNkEyc=eQ4}MJsa?IBIm| zf1jgcs6!H7T-$(CL7PIlqk3Ik+N=ygH;Dk_2fSMl4;;!Cw{TC1(JH68JH?tMnQ>jY zmr;_Z=*xk@PM0llu4)(`a7wLKBIV|_l0AQhuGOA+zfkCnz%;Gm7;-Rgew~W6&yAvW zVZE}(i(=V6{x|K3Af;MBTgt||4Qynpt`O7LVAKE9I*$v-7X8^N%}|1(O9h?*$41rm zFqxbl5YwV&z)Bf4)yp)PcqJcd=8N#sqG@`n^5B=FZ(M;7x%49UR4cEMh-_o(%x+t9V^#pCzn5< zL6@CiXQOXumtVOrFWlcdwrl>&^!_ z2=}^9KYH4Zs`bwm)aImbk48Mp6J_IhHf$|NEbGPIs6N4bHm;L8bzG~ z@qj*qBLkhaiH^8uD4qn{D{vWZyh;Q(84basA?>TV8Ibkq;72BFCnXl#Z6bG{QExx0gc|jMyf?jYzaQ}& z!+!2T%zM2A3NLNpDw(rv9T^cQzmp7P2kANZJS*phlh+|bRy2SDNhRCvR1;ZA!sK*L6_y14>)r0v0z6u@SYkGJ`M0oc+SG^3D39E(ks`R5 zC*&FnPI5sp1zsQs9p8(00UlGGU7n`EZ@I$X4wd49d*r~Slce~$FK9kt=y8QR?RoE+ zZF)+)XZ1W-$-BnhJhqg(SLsfmT$DccRk>f{qE3ahEKpnP`ZnH7-DgX&GHW!ELkLFG zAZ-~f=oc^C^D67GTk@tK0^hT0{t0EkBs?-5om99GK*pDe-9Uv*jJVsO*d-AJ_b9ll zdDiLmT?LNrp-Pw7Lmw0e6&@Gtv(zE<2Dk!Jn-7b@pm(&+d?_^O+Z6 z2?i!~TajeEby)P(Qnvk~4Ai!`a=+&!u2j+whKpkp=Yurf?MMsd0VYD~$Ib41WXLrB zf9w=oom~xtq_PJ7f6 z2LwTm;HqeN(veoN2FC85rl4)*n#r}JW%=xd!I4*fRcZTQfb_z>^_-p;K*_lDo0rly zGY!CnW0ujw`Rw!ds-9=22TJ=K?bi&$tZ}kORK-S^KIpaObIu^MYcBmj0b5?+ea2UD zSr5w|4h1ncAz)K{1V~WM>n#=%-n}kHr*ZTdTzbpv2Cs<0ia9Jy5>9SL{+w)y)TUs) zHcwOTR7xSa``}QU7C|2!vKVkUK3qkT&VS5eGb%FW#F+y)ei}pif{-CGGV?_)RZhb0 zGWXSm@>HEAd}Ayh{ZJiJJM#5snnm3$Scm|yJbeDk zKZkMnabvAziyvhd{ZNo*0*}-A<&FPd)t*VT+YTY~Q)Q6TD5pLxMd7)?2B=1%Tn3`(@5!zK=pUglQy*LO@cgp7!5LS}dMuUB@8%EJU zWf_rduWa3TD_IO=qV;fN`4TI`w1V(J=76MEU_mLnz7$@8H!_Q*^^V4%Af9^aqX>*S zd*E3{o9EiExHWH-Fh}FyJpia3xFjlunYY;JM%HLF!ss~S9X9?k^23`Q%ZmT(943i4 zP1%3a2l#DEzv;>8fGloS+Hw^14=Zz&-0HoQ6r^APL8+?V6Ay)6>tinusTc zXlBCsuD@cU+#T=D)mYeCmX_)++J=Y{tcj|z;~Rg?_4NJbc!fsokWD?FX#j;8{wazs zhUu79xjmG>^LFV1H(EG;yc*(6-A1541Dyjk_sOrF5~3NU%?Tx0Q0PXwQ8J_iWsoUA z2j;brS8z4(TwOmXg~SNz)9QwHPpH1y;7V7yqppsfP9vg9oh+`^?t)y6BITk=K+Cns z*vtu0I)V3DW)1?#*;$2FEmiE?18&*oJVZU33WGypLC?3C2{O1PlsSTS=q)n?@@8~aeo z>Ih^+l99FO>jhaq2Q&i)v&8grZ(3(S;d)fZ-_>M$@Qn8v0$4rKahT=I z--wqMYQh~8NHM&yOvqt zQ;|FXts#K-0%p#+T?X!=b`SsJ4=6~t-oaJgsEa$}DBM)Cea4NqieBq=Z|q#0V|9U8 z#!v?!!j3@u>1HR8S}cS}DFyUj6>JZgKys{DCtjb`j%eL-QKjxZSD4$nM+!Z~iw0Iu z>|sq4hci>;!xCN8pOffYcVtm-=uSHFTF3r10=u-h2grr;_Kfj{PAPDU97yNW7Y>1P zsD|r3-Q4w$cLhI;&e}iO|9DD@YPuXYZGvj|4O`M(i+S&2V27D!TMz1W+wy}g)wtUB zP5&e96gMOxVNYZJI)NsE=KJD&M*=A@GOj#&l{rMe#5tX*G}zdZ0{u2-nD4ui>)e^n z&$g)`5EH^xue|;id$2ylgk1Qm$cKIk1nWTJn;P}b8D%Dsh{;Mi8%dp02qdEAH~V6} zTv$Yr(7o+{K|4qMlxqRikDQtHf2=&z2%A17|9AkUWcLih1!5Fkwi)$oqLg*fl=SB( z9Twb7c>_AmCr8t$RwrMQdyqCXki->00*lOdcPB=^b=W17lvHwu4(5A|{aMBW@Rgd# zR<+-PWF^CjBTvMtNP|I@5dpHtSC2vskyXYA>mp+j9*iTk?1CPOi6KbsF`1Wnk?l+p z$0X|TE!);I02IKc+o!!j1(OPi2qS<##G{R z3{f(po?d}XyC(ZPw;Z_en*(oNa6Z5(u%^~s0X~X1zEWZ_-zR_}Kz)Yii^wes8g+0? z+>3#JHJHBlAkVs+fyS@mc_K~h`h%b3w5c?fs~>pXZDpo;hO+yxV zLiB0}^Xpm8Wb5C8)DI88i?}!G@65EgoTQ-P^ib{MCq)T-MfaS}-oZ|*EYU9^?z%jP z-hd!SGcjw4YoSbNT!J!b_2vW=o3*T7W|d%lr*NtCN?7ag+BeFhEtyU|1Nez>%|t;>672&1fjD-|MGx5QbT~wQyx2UuU;l4ch(ZM zM+9+HYsuh8{vrWnzc5-DjWGI4^wo=jJn9tkxJ!DNEB#!cdwAaO^K^*>EpdnbK1wc^ zcStl~cB*=c;qdu2;joh!5|;OqtL!Y}98ztXM{&nC`oAftaOT&g_uYJEhhYVtN2QKvLZj`1ZX{_LG0c6f(N=e|Jm2DLOU%ewJd zkOIp;;k;eIP(psSBp*8XrL0_-vaTdcW0Z8AKld(yztXcr1G#Zo_}}92xzT%31`VMr zbB06IXwEl{*WXis2119iin55lrFh z!TmJ!X`Bb_^2I2b!WykPNYFcRL)k;k)?TG__cX$*eb(i$2j(dd%GEZ0NsA2!PzcK7 zuSP%OAc&t9ser4ROZYfwWsjju@z;KkT_K8DN5EkpO=vMWddPF^WuaL>dspP25#JD8 zBkk7ecorkheNkhcsfFq|!J0}<0i~2lEUxPG*A#A~*2kQMLAOcWlUrXKf+x$b!kc(8 zfRo>jpUav2r7pj;Kue7-7vXI+8TuqE7iX4o1v(3);hdzV}!8JKtr`<-Vg2Rj0ycItdZgJ1>JBeSQYtMB9Eb>{_!G zcxT?HzdtI0*;zF|gj<^Z38dqu99@s%8s~H0B_XRLB@$m1fKh;x*@r@d)tK?aMLZ#0 zI*&my=M@T069lbew9l(}_`33UqkO|)?THoFQ>yD3OVzU#$w0tak!#0306iNvdnD2= zh~yyTcK81672g`xNd2#Sy#2GmCz>z)Ovg~GzeS&CU4~}DL88hy)%f5h%u+&Jv`VSr z@c8V4sS*O+yQho#h?tbsv+!t4VuKqDtODv{Ec>I5&UKmTK+Y3xb9Fzh@MJqqKulz%=XT0kc(iV4@OasZ>zwqo}+&m*V8rdI+gDJ(3%B?T`5DB8hBiTmK&JKs1O)*j;=|F@Xp&sY)MMJV+o zYCdq%H{W_Aawt6bu;4@unFs$KMszpr8rM7E3Q`FY?kBYVtD2OOKHVRBEIzL<3d!_& zrE(<;;H{xVZ?0It10VAI)#qO)727_~g^8gsbWGYH|NB*2DA56^WUwux(#$@VR@*;R z821!9^ahDT zu&o^{t#xKwA0=or)J@*`IeW4su*YSMKh`y;}Q4hapiD}AM zM3Qva{hRcb>0US9;>~2ys-PL{1MlC-;A(Wv@ydz%kBY3&a=do6XM@~B(6{QWR{w|t zIa?Y>3D-xyvBvmk_ya(H=;ymZ_-cC49Fp02Dp)xGvdp&~`+_bAB2 zq`l_9gxRRzWf#K2>qKY%wG7(|sD~v<3+<148?Cw~IBz|KoVrO?CCK~@QL^l1X4Ha! zU{;PXp2!^2<`4vXvQ=0io*WrD?N4k}n!pIB< zZ~RGm%?I0T6ZGy4R7WB0lL7FRKOgD*tkE!(UKES?Nk-_Ae@ZfarNTO~@!6X1fmssw zzw-Vw=pc~A%-b`XMGPIfhuETPGJ0q)zSi3zYgj@K{;*;sp z20AEVbIS4*f^xts!9_dMB_xg;g(B+eOjOcFj?Zsinfh++8pqm}nx&RBau)Y>ep*s7 z?qu03Xn79fdhnT)i1@$ccI?9O11WZ5N8MPFi4O{;61l%Ckhe2URQ93espRgd6xQ&> z-um)wC?}T1GAmQ73zb&+$Tv~d5!!41nm%S8>)3vCIg5bsNjnTR#1Ht*Y)YN?s1RNY z!_TheDlp2jkySr!$q9azaL$5#Eb94*`W}De0yq@>RJbv`%n`8J74Tq0KUaoaUhH-2 z^57Yc*Unl$nfZ!hs_NXJdbmqfwsW-Bz>cI~bdzSuP;wr^W73-AH~}RX>Of1w6s4K; zCuj@tIyFuKqb|0?i9D0-drX9Vl9IgYXQwT#;T!AqIbr?knZf$MTCYwWGWoC^gYj3p z4~8O2tgQKyO$0S;NZPB#G?YS$l`&_~7ah+xHUmu-O?*r!2S4M4{jmoGF)N_s(WtAJ#p7*JAxOK|ys|$6QQrM}eX~vafK=mIl__>k zaWC+C(8rTH;Q`MN%SV1=>nbpNo>Z*#at~JZwpwA2?zNHN^FD8-!9;h3wE4%RHf0pI zMcq{a<{cZcvw29EotQ5TrEB@w$p-W2oF_JqjM8*l*8~H6!nl&FD#tHfDYf7{gIZ9mRji zD*nL8G}7zA#BSPXW^sQ$sMGHO^W_

P7(wK3kTq*a|7~#A^daWmf`@im^~VVwd{l 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

kSGNv$5M=U}4HeezbrQryn0d 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

TA{Fh{cKwMX@ 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
  • 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 z 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%0DDPp)bI!Aci8>2xua3>dR&AAAK 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 pnBj@9mMhWuOmuam~`PM>KCe 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

    x)IAFCovu# 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

    _u`?cR#tGhU42V*r+184v1kLfm@or|FY!ii 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

    fqS$gU8m;lF;l`OaDMipTCsiaYa$=8TS52 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 z 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

  • {rxs@#-m-!R$cU>q?^I;H@^LD9+$>s; z?#p!p+WOumWXCME!+@kx0%3RR`nm~wmH=tXLLSnQTdlP0dj^{%1i`MvM!Q{2HoC5 z8RQ9fM=v+l-Mz<(cs(-8Q#l1(CgUD^zg-;+Ix#tPe{zKI%99;wu9{76odg{ta)j`lK`2!6{S24~nGSE?!T!@ET zl@$obJp>FYd4iGQMWNJ*$uxW zRav$mzJ=3F*GH@c1%Qd-O)o(u7Nc&-8YIucwlDChL5qT=OW@vL085K2p1Tyi6pXH) zfcLuk34i*KaNh4n+Fj<;R4h}5rk;aQ^)>+T)KG)s>wg_B-PmrYZe>Y|eTgpUk zXUdarOKO73a`}pC)|ItlGXG^>%ILGx(w=4HeI^2~2D)MSF?eXm@6OEpd?oiEfT%-F zTrw^16@zf7)6Q)gx0@F=IWuE#{WQYeo(8EXB}Y+S5F>q7pEG4WTaIoS+}V+SZ}`JR z%vu#v%1){Ql&jULH_@MStJLXHDeR_t%Sm7^^n;4!u!mSwx zQ9TM}M8#YhF6U$*fu+kLyr%Hl_B7fIu?Ocsj8n}gs_Onb8)zCx=1+XX zQ!ew0O_Qx|MKk<=Q>3wBVt;Dpw?fgU5=ErrGxLQT*v~&|p@MOWw(F%i)m+oE4_bZ3 z3KCknh)^pX=EhwzNZ|os8Cpf@$=sKXn-f0GYX1RZ5+t$c$EiV%BM-_v4~g~q^=lcF z)*PVQKFXtd9U-DILI#S&n6XN_oO2H7kvn%5%RlUenR+;JufDIif-O>f`q6orbQS zj6Okv=F5+`mm{#7)F3)b#0 zw+`Ldp(vH+tEl>jkxwUVJp;; z0jqK>g-*4ZBLq0nvHS|wXYR5JPXW+3#?_YmG6!4tax{)C5BoP7WA5qsEsgtPlQbsa zm?rXK8DL6&^ZnSv&TaH003Q}rEQxcHo&m6)re84L|L^>=SMW}BCQ8~4_yqUOZiFtyCEd8PUG ze|@a@wArG&$DWl!7g6JuEz_7uvu-}`Uk9R7tk@KC%$w$qxhBx5=ex&>%-B{QiaF3u z%*r+}8v`FX+9JuTQThU~=JQ56L}P0!f<}kgM@wHGipLE8csqmS-@>C(STgty4yBaw zu(@{rVgHZ=8r-Lv*6a68i>?i=HR?b1+|Zm_{|%M-KvO406dR0%XkQi_bxMRO0fb7W zNQ&*2iX?DUGHGt62+OjQb_rU|unRr=c2Ez(jJGYM)=5_x<|RDVCM||-=uI^b5Ea|E zfWq`9Pgp*}RRFOgX#xe|Y6Q6`68xK!v!c5>%#|zOu9P@zrRWVXaE$UG&GvYERBx>6 zdUm|Ww~og^UZerLgR)39KRg%EI88&=BJ0vBfTCd8g10v^FIgF&%;8P#zt8Q|6kI|R zT_lxL?i;|1aZWr>Y*2~2IX=ho;b=A)&HV3@rSf=9vTXxtADDUx#nh$Xmpg!T(3+FC z=`sxXKmRz;Y{le%Ds2+$w@f)qz+N67-@vC&n=O5o>ME_DH!hN(~E)|P|Vmnn#~F)oIqOe+46nMke1wjVy?q*@5 z=ilx_R|jYR*Wpcm1k5sfPwuq#*>a9rKfBvIDW}lr^WgO%h;d4SMtauCgJPtLb;pOT zYtY~pXJK@6Vk5nu&y6V3Fy^C7(eyW`y7L6cLsJw&Y3U3$l=bY=k5qutTee{E9H?gc zlfZQSEKe9qb+@d>wyM^SvpO{Jq)(M~tt%!5h7lh6Z5y%FighxAG*+mM@=Dq5n$w+k z@=Ed1wsi&q^6mXdr+mhxkxC*ltDa->^j7As2R5sqvQA_VfSw0w=C`Y+gd#?nS;?mc zO~kR3t+zo&eX}R(eJhrwx{%vR%|iga*&=6W1M;UkHpFR~mLWBg-a2Uv>VSd+um%&n zE(2Lyx|h(HE|7+&%O3}_2e=HzINiaV2fy@yI>ouEVqT%V5oIQg02C->=AWLNzX|h{ z7HE3(+G8KVws_Td*v{y0A+48L(x`10JnIM)p)@2;PLzg-2eWor z%!cGUi`Ljz@Cao`#XM*u`H4<9bUA3eNO~IfL|VOxw#!?(B{UAVPLwv!60q`qmdzI) zmXMGSM>%H5dj@qIrT~QFo!Xlei749)RcU+NB9Lls`O^N~0d`J8*Gh8CZh3c`U?fvI zJ31;WZ^y8~y=>rN2X_E?Ca>+qxmQbG1$A@L_a7G*EseLtNDKR%379fU_kk=qHl@3Z z61Yncs8|HIILiESb3;3ut-hXidiX?D0vR z0{aHckpIrZ2Koxf;d21zHzCzv7u|ITz$aZ&ag6%lrDSYVM#}TU(LsWY`T-tyhl%(7 zD=i-6>3Fc#;5P*Q78LEUK(4LxqVD)A3!*TI+o%58@S|YK5bPk?n;v$J#ww4<`gfC?YvFo7=NK2Zacqq;5rqGz&hQq_(#yaU z?8C9mpruZc3ZF5(qAuUEGkJ`VhxwRi=)*+9;6j!G(izn4>l)`G|1Qv)MJ7#RU+$EM z@seV@n)ZAw(<^s%r~!oWko}(yD+n_^*B#q9b4e%V^w4PR_Cqz;bWP(^>X$n;kuZ z+Tz!cDuJus`FZENt!POwWr+j5sUG|&ep@kdqiEQTZV{s0gElYll841$$K2hmYc0tL zNV8|2z=SJLe?vm$4233*v}8#1Wv(Bo>@Lk6rGU>;DyZnf;*6WiO{ftH<_e;bs=+l66lx^Bqj1GwCkox0LNq zw-DSTslnbjL-(qdH_henwtTG(X;|a*?FW2B*&Z>qYFrH+&#-N;*a+cg98ozFGB^4) zM!49ST9v8)Jv0w1#e`H??LM-#tC}5S7ER`T z?IW@qs)}Jq%{;02Jm>Pm%uYHt&YSq*3&U(}kbr+?j@lNj+>~AKQGRMK_VKG(%s_1x zS_f=>({#>DnJLdiiyIPuL6P{G{ISF8rXJTxy4GzlnDq*=@bSb@3I{m?-qU@=TV z#nks1^~307KCxCJ4kehd&(WMd?ikvcnZHap5XEe2-I#J>%f1$I!Hh6?%A9Z~;7VDJ z^+#(vywbjc(Dy1`Wo>A;)|LQyF=2N`0(FA|(_7&Sjd&E^=NDUet*u=#p7V|*8L94# zt8Vy_RPG2f=NxrFVQ}S_`bO`2%T+r{BNjp`C%m~(wQP7i51Ra z>T7P&@I!Ld+)cWiSm`;?0e&M=0=A_Usq9ZBCYyA12w%BM<7-$HF>E<+{FLw*!fR0w z&7$W79W0{`P}(spsJN>jwhm%39<9JoRa zni>fiuEi0@eB12>2ygtVT6%i%le~s|3FpBrxZct+5;H|F_&su{dXd~O^GaTQF z3SY>n9{R6ToWK)8;%{g<#?gD#Rkz}{)VueJntnp3^)tzFWZFzRbB{(ek`sK|NKqBB z5ps8s;gC|-tixzi!B2;*>2h9DaR#FhWA)lkd!G<7Y3Gw-z^gc(HM7JtO9hv28s!o2 zk1JL3_IKPBXRkM*yjnBD!h;=Z} zxR@GblTTz2O_tt1kEL#JKRlb@?${G@nm2}pzV;qv!&NucG8@=*75UkC`_%$ea|N0( znt+*tohDY}ew{`h#bOm`l*u=~UyA+O<8nZIAlldY`MkDR@ENb;RsPRt@U_PI2Dye2 zPtYrF{G|PopOJ_I1zGr?fn!p94w1mdn!NCbbgepxB63xf@X&aa!F|KIXOxzlsruoh zI2*^9>G?PxEJz+(G{u}NWUkzVFi!118PAF2WF!NvwhA*GZ=1s9N7=TNqsFWDEqu!q zG&!^%swZA0!2Si)Qr3|_EfLe03UFv`VNe+LEzPtzkyJ+B9Qk4Pk*9pk80>GeT@*vY-0W3}sut-h0`03=<*dv0D~_@8k&p5d${TWw;K?AQsn0HHh#| zFJF+<54%G4q6p(LNDyM4iYAVB-a^MZE03R8&sr5Bxl_q9FIFg(-W{6M@fuHb7HbAz zD^Ltn5JCmDi-?&pGe54Dt$?{O>Byw!M{XH=GOcZu-9!~I7GqqX%Uf7gWi>AgXYrx< zrR(xdshg zoXf}@A7UpEMwSBR!bf9~Y8M7)ty`*y`Rvdr^aqj0BT^x2t@l6@DCi=eP-_j3D!1~3fs1xJ7C3ZHjbIXF zg$m9XytJ*;Nl7}dwc9JlQbvFT8l+`n8^lj)Q?al5ZA}g1M}_!|pWXG{(=7-A9*9rs z*`Vv3a7#`$#m3Xr3n)cPb+FfxQM@Le^jIau51wkeq0J*a9ye03=s{L_yYN7qn9DGV z##&$qGZ##nLGz}=&QeyWM%W%BGCZZe0oGQidk(!qE_e5;Vhzqv3rSHKtmU$U4Uc1^CYBqt-EDI;>a>zj~cFfW+hAb z-m+08r@W714`*aRl-f#cUmjmpG&us$QZ4pNdatF- z;X)a8k)^N2t?U`LFZcS%{&aP6hO4a@T5bXQD0*rOQ^eV|z8y1=+7VAZ$y6wR@%9?_ zb=_AuyPWc2nU7v6eS|NC%^t7Em0r?w_CEe{9iUeIJLR5r6z`6w9w=BJ6q64dNsxGM z%wThVh1VhP#}9`!8MYE4`3ZlLEIQ5{RX!zgEv3``ORRwegbSE?AgYz1OUK*x4Qu<0 zq%?`(F)pddw$3lpDpwNg(;C}eKOd>^*;WUgQb$D9x5?+oc@Kb9t#O`v-z8n1d1~eP zl3e6TOC>{E^<5n<6YQK}!R}S^`C{cBA;M?TO4GBj4jS8f{b7rU$L#6v+Te1)S^1M= zGE}Yu8S0T#Z7UT6T*q-6wM<6b%Oj?}n@+i-ON65CjUfdM;fB>;p~2!;Mu|10b@$&R zC@@0by9c}e#(+y`d^#dz=DCWE=&fu>wnsHn5qSbnvTBL+BoagN&eed#CB2f3$!f~F z3jIw?%RK8bv|fF(ldfz;p{K7kO(PvafI1%d>Q~#S4wmxMlH)+Uau^to+|UPIG6j${ z1D(x$dq2!Z3+}IKS~))s?zz5p0{=9v;frWv0*Q0@Xbf-V}@Q2o+aJ-1%0GBi)_- zI7`aF8T4noUaea)*`z`n-G17eol3*yGCwTD46piFGUcDnv+{HLT3YlE!G}!TdNiBE z|Jb0O-~0VosW8_{NW>thhD};Eww+XZVDy(p5v6As4Q2!21=&sU`q_2N8hXWUydmI_ z+6KdaMWv?2`S+F!3P^LFdGB>Dx3Z5Jl6L`FylcNnCBo;tT&-nieu%-t{?>USy}?b zJJ%9K+n#~L9KskFtV5_tb}W4UY#u;+-l25p`O79df_%A5Y0k%U1e=%k3AkB6x+kXo zw629!*2}J6z@Ed>5zUr3az+!>c?SbnlOrF-g@D4UDE|C*69X~|kT3&{;tgO!f8AOT zWr6Xzwjl28CYn+AUd*t#zv{D92HLQ2qP zq}UVH2nh?9s*TEG|5Vb&N<;qqKM7&g!A<7{qF=Jpa?T~ZSxF`a=b|aH8sYYt(s1yI z2koj7sH$Xjs@h-!y;2paTxwTFWfBu0B(hXO&ZxJVAg7zqP-gRog_!zxH7-Yd*whp9 zU`e)uZ&PN8I%bj{jH*v%{0(3f-2WB{2S^b$;4R>>HQ+XfGqOx3wu>}zSpG0;5&+YwdtEWr4@M=E17TJ?Aymr7lZ2M2@O8rJlW~N9Pi6K7E{SqG7;wLyu z#;+saWJS#)npl=^k>%yzS3C@bdU9<(bsb-3>Za0=i|bJrs%f26>f&xfI>r^~9uhzW znxtScM5mYq`sDDme0HpxU^rV__D_d!Fb%r`@xWG$ol4z;CQw!wTD|L@0C)<2qS1gx@y$zM=yjtzm zF0Mxi3iUW+=WLy17>PH{S1?%nq5H1~n;=LxmIze6(Q>HR<3V%?`bs928zfRZK70Q8 z*#Cyf?|;yd#B`zvYm+*^XfR>AhQvw6#OzKXfxxd$r@z|>4O-E%{j*=zwSDEw zGbYA(PS1-4=p$6~8Vd_dH#lOoFrZFnV|8g)e&P~iO2%6!-I5W|eTFBe-I}bSN zBJQO@2lMV`+Y*XWLhrZ^czRE*{2LqFN{_v}1xGcrJ8yIb@jh#7$>Vl9@kv%2ach## z@ZE%}|Mzf$+V{U_4A}o)xlSnX_dyye(DRf0a@i%=yY;ChIsJM?XxZpst|-IFx4Tro zBi)+@Fz_oECWjnO! zkqRF|>E~5XmQfVL{rSQALRgddHji!&TA~ceG7jGl{YPp2DNStm0QuZA)BoG8_n&l@ z!Xl=-k|H}Shy1HCRRbPo2go|LEz72j5R{GnEX2EDAFn~`+lC-azqS8T^lo$LO)rR6 zHV&%>5=AmV@t)~PqhKI@bJyTWC<;vfJQK!GDApP=5pMK|G%`06{W>Savpd?$r_&ZS zQ|}eKVxJgue9GxbPB#r=`PeGkVJ6eY?DL}gr?+ofP>fUVJASAN2c6^zMJc2?YvF0% zV?2p}@&yk#IL-X{$BHe_oxiw!3@3DTy{>;CydfY(_Fas|raAMH<8{NgXf*XZko?(TV}IF2=6eh4Gfis@`V#8l?Es2c!mm(Tnr@7A>QC@@G4 z3#kBaNHeKzlNlZE64c(K*irclhURhy=lUsf$#R~tz-3%9y7I~#_XDKN)AWs*v^RIF zyT0-#OMGM5qQ|#M9cJJO7EgP;hR`duBr$n@+V^U>PA$s%uOPa}X;?UajBe-Il5l1u zERf}#08RWmoMT%hCbiHERk1rf9iCtnhY~i%=&hkG^pr^??!|0_lP^kDe~F6#GHF&e zgqt@7(L?>TTRyWHqZM^FX|_EcLSAGp%Ffg$J~5wP?!-IGy7IjTciv%^sdxigk1En#;7Jmo z!Mi78N(9GfqmTkT>XrhQZtZH|lIrl&{%mHU{#wojg@HbJA|+`-PYUPYH0e5?V5IB8 z*XwOn3sh>PqbnO)me{i3ZgJUJOPVc0&!#O;H*%KEDkY+1%J}7MbM&qYHOf&7YpM5T zp6I&{kZ39(n<{cokx;!vpEC2F{i3t_gh_@d%yeaciRuWeq?Ve^mbi$+NHlvjyW!$$ z>RxxL5Eo5|$mU7B>F3h6rylzgSe77%)k@rBJe;u7FWcGxK|sF0qo{hjfwbGxU)#MG zx6uE(pW9z5q(h4iIBNB0T}~j8A8wC#P~ntnQtuW^GI9ua!JAe*HaS`YE-;pBbnS6R z^cy_cD2*}PQ$d)fjXAon4>n!i_nGl%n3l{AHhm_q;RCa`pD((MCbl`-{mj%@JVjd7 z?gzV3OHOuh$!rED%k;;U>CR^u*qC!ifj8n51)Bj)%}F(gMv~NCBzLPP))m`wN>Z3< zVORm^=7-)87>9lXpm^o7psu&B?c*q?t>Q*lOu1i{ZP|4b_4~rJ#D(dqW5dOnre=>! z&oP-NO6MDxRZeZf&nH#?%O?xQdSLFvhc;Xu=bX7Vc&>YG^Z-~Q2-cvuG zK3UuI;BKp;@m}iQj!{gQY;0%B{Ry0Vevjq90J^ga%wG9xu~4`oNfIs=_dIHnfUZp* zInVN(B;aauaQg)^I`>965UfQqdTlXjzm$7uajE^>HPadu(l0&ix-9PJ$hw16U6FE{ znuy`1(qTRR_g0L?6g?(Nez_w^jiJy2D|r}&MT(NF;cy8N!;9~8UM))LfnBmN{GfAI zB9{O45=(j_E&F*KosThT6t^Q83a!yj>JXi_wY{jce|&_j<`~ncwQlH-+>y7=oG|U+ z7~?3m(DQci$MppCHJe#$xYkea-z69>49MXOP1T~}?3-fiqN)X7CAQzAKcitB4*0f) zav>**T{^rWX+Om9Djw9x?gJagq|Z5uLH(I%sJEF9V3Uw++m6P{xUC1u z_}>U}>GFQdk#056#+|-3s;-$%i%;-eT(Vn8S<-ugT#xZwuP!AWNFcUm396*&MZ;C^ zq(a#0(V^QT!evrzW^?@#q1^NewJ0@{qvb;Af@e8f53uzkty1m`6Ef90y2*=kzsFv2 zfL5PnWio$-ps1}Q)XzRJstXO!0YaySvV2hFcP@5%P-sj`FmF`# z&^Od`^<~)uF93l&B4&BR5&0yhY`JJLR8KjeB`65{NNdfd#zSuGCtK~}k#(OmGTHMS zmxFt1ibDRX1akgyRp58Brb^qZ-!JVX0=UxEvE>u;^c^1Qp&*Zrd&qeKUdnxBrT51Q z9$Z+=8o%3N5@*c7l&i+M8ajsU=~{JE2iwtU#B zj+xyOh7hVUKnCl__8e$AjrUnPazUlW9RR!*;C2-VK&-S|AgRr{6#)G2UpJq|$J$CK zG?Hm%>v|2NESUpIZSvxy(Dja4{&A@6!$HD=Mwezl4xEDfi*{SVk2NSEEwC3^wzk&{ zLBCaHTt-(2#L=VIF86}w1`V&ZZA8yR(%v?mr)}fYNtw#g^+o$%@z!?S+sXw6hcEOoH#6g}w}nCR25O>TI;iF5IGhVk>YktYrn&kL*X zHWitd=`I1LntM(_pE5UiN}6ctW3PS-gORcAGq@)nmavLY!U#k&WS>OYv|XuAO0+s6 zebnm`?1Ee|9ib`$bpoYqB|9^>WwdEmCD}~RacBp@v|xKcgD<*rWM`WJG#!6G3BmTr zygkp-u@nDzzsbl9($kZ$NrO-3ciX6-K>W~43CUN{HHR&I{0t{Nr?{Gz1e$TI6;9nz zL~l>PHyQ;B^K2DI!fff-z%lgdGkV+rBsDkui1{)%YVACGP&+7=SG>tC8e9cMhj8lt zsBQpEs9F+OlNa9VnA5mKDqYDwnyB=3n>2}__-6{IzlWZiUZwzQ2{o;SKiw@fs|EAL z2!OM6v~D!6)%@sw(!>{ql4+tm;uEC+hgNBkq%o;@QJAK|5ml1;tMyufv>=a)-Sv`w z-4lB@IlJDw6h|iyJEm_$|0|(iiMiD)& zj#-i`rPC^JWlZV4^Ab~+$7qP?^vYrCj~}}n_6xT~2t|Am1>35QFS@32N-gldA3A?C z(0_O4S8{J?%sTfij&l#So(9c@t0&+Jd4>uwLQbh95%5?N-clbyqd2Bo4e7!tW`=ur z9QCI+i4F0_(=Bf}LHq5WdUJOYS)cy175ee(;A+Rv^FHuv#&f)e_z51@xhvVwMG zmDaGk_plY+Ja*T|3fpn9Cx@%CxJG`z6DWsIxI#Y)=YnS7hNa+sA&#O7{9*mJ9uTgg{UON^;Qv z0WTJW@e*_hH9Q}>=9M9+i1(gb`u>Re2L+*%hX#2D4z48Z&~vJKC-QX5C<^jr3$zi} z6A)hrO`JBkm@FSgt5jv8^|2U{%$VuVqxc7Nj2)5E@Sr;~{X=s3yxD2C zh2q6-(x&h}+Le3p-X-usFnf`nkF4$n_(`z(%S__>6Ltjm3{U4F09ARO$dn7|CLVYx z`hWAsS0Fwot2r^AqcS|&PjSQ@dE1n+iKHM@2UHe9n#5ByVkqan-b5Dz9;0_mZMgs; zwW8MYn=G-mEu?|CKmsfY`gXe&n=@|N+~Sy^ZkyYFw+MZ7(o3G@Ir> z8nt|;pFSmCFrSObAu6<|cTb-JO-H(~-s5nGP%(ofCb^R0WiG7dfxeHUkodgN>CYjT zf34f=NhhHuN{%YimzFtb4s|ogFn-1BmOq|!e1&q{h{sp}d@BqcM ziE?p6*wRw}+V%DU>dX%8N7Om>$n@3*`jR0Ht?QlrZb1q6ZK8q{tpg4dxmJi@pelFu z6kl1DY4vFigo_=43~%Dy{b1Dz0ueHLhA)u9Ys)SXK88alb~)-zJ%avlC}@`V81}0{ zo6kK1e87PvZ(XOm_G*_zaBE>X=|taXg$dg<|AAR(%6CM--qfS8AapQ9ddS8wNSod5o2B3K@*}Vl66v zz}>KL1g%5)L|${T?CLSL$iUyK`b&l4@B!A@P+kyFsZ-+Rtd}D7aV-J_vMBE+Q(zUt zil$Zt2oG4!JWA;(fZ3_xWQia8J~X{Bpnd8EEJn(i9~gdGP|M=>hMxe}PeG;i?&Zl!qd2&3So9{on_Pf>1}f7*un?agG~~;Y2<> zCfp{K_MlxSu+&TMw!?)moi|6%*D3Pub1)}9a8i+2*|<|dn^ z9Qb^S0{kf&pq1?%Jmgifl_HSB^6x%htZ@vF1xX7cJ#8VPo&{j?;UXXEXhB-sO-NhP-{wUB_Pc(%D6GM|LET zKlXo_Y3)e6+O$3e6agSmC!kODSrF#kT>;7ir5t^><)`FeF7&olo88VpUrKIBPWrqa zj;>5&ofQ9!4GohaUr`KT%*5Arr~<-<&JKgJzvjQ>u)5KxjO#0=J4A<6Gg5)7%7Iqp zMkv$tGt3(cW}CT^m!v^Cm0x7jj4#KIR0`pVWl%5#xx(w)sL84p#t?LqJou+?8L+Xlyf6q}jm~s#2LN!9gh~@X zq%jAa%L^;c`z~Viz>}q0)gLS@Az!>(($;<#4%b=1YpJN|eCQP`Niib^}a^3ADQ^xaC?^?B^(C-v#Z-B*&d!N}Vzlc7s zx7M%A33rghUup&ds!=p1WKs>siv+-CrCrC}S`03I+LB6;y6_@^(e(Nt_82LaiH=SB zygmI^*0_`s{GbtA_IvLT5L9$lvwQ~ar0{79SSE<>1D;jrI@3ab zQc=uR#0TEfeQReANJ#my5XbpMB$p{n1#9%KivA$T41ig>gl>@yT;0jKDM1K#?->gJ zz-BkXY9deEI%_qB!oTlI(y-=0fnDDR#MAK(5r)Hq6Mn>a{{jBOrh*2^G)l4&UK2gJ zz$b}mr_e489AHF23OEOp1N&rMM>gtjx=^&W@{Qe}jT?p$aMc7qSI!pXOVPoHHHEoiTo-FZG1n_&*lXMdd($&1l1e}v`)@Cg$Y0ubgMf(w-~qLAtC;AZdZWHEDUkSaFF%lfLkVk$aZ+eRYL*6% zs_5wd&pU=7pkiY5Y}c&Z-Zp9KWtmC^Kov^qXbdXXE2vtE*Uz81t>0j&7~&7(I@`-D zTXo`j@N%$HV&dnI0iKg^^v7p zuAQ8lI`wiTZIJLT`*=(UByducbEWBj#!8qIFi~c3jLncCxn3OcRpd%k#{28W;%3Y( zqgtr|5Usc8D?zam?hGOrI}o|LZhg*LV8N*QGenFhAv+w`hq(xh39HFB{LbDfZ28F4 zn8X)sZ7o4qW??%SdKFj{fzVoUiWU$B4qu*;Wsc)bWQ%)Cp{AkmQn!s{!8r6Ya2vx; zQ5T6Ik`(Z7D`>?dM$Uon>aN@)#x0qGwS!^~&~feMhX)`|Ru>ak+v#_`kR!@Uc_|m{ zhT(#OBuAbTd0+H=H(=ZYGDqC&*rRo|*-i2){4z5dlXZ41lh5J7DATdc3sm0FS& zT7bWoqDe{EZ6qQ&qQZ<;YzQPS=Cd%wqcJU9Kuo-L@-O3iN;2fiAh}^O-lhIglfmc{ z10EF^^Tm@ou0*bmB=eJHZ5Z2tsNos~R5y)3y()JP3|fjR!8xTm0S1O?mJN$S7CSX! zlk85NiFcL7YMFoA{eoc$lm6e3{P>&*UCx<dFa-EC&Fj+O6hi9^j~o^ zt9Y%tyhorgJTk~K%|+OKip6Z`zuYIxEUvwO~Z&|nL^^Ztc`1( zb>90L0BH|w_j?p?lw&#IY8s#ptRyGmWY@vy>1q!L{I;nD6x$iARwi8l@ym{-H^rVz zl1B-O&586_tkM#(wbqpL3{$J%?D+5?szWB_RftQohDPzkEeSG;W;hVqm8E{!e7$yf;)e>W`^j@bnku$jPSrCX|!*NV?7kkm$CzBMn1nU(R2#p)em5tsG6)2_sF zmP2lxnP7*eT;U`P{t(Cc$8sxixY9+tdI`zX$MTimPDx6$5w15?U(eZI?T;_Ee z-AM|nQvcl$!|m-FKs0x4^tq{dPg#{|;neP*FXQLv&!D$NmA?q4C#mUja+60J6lhmQ z#w_)INTFwud8rQEqMHVhEj|X$scCWc!Ebnw;GLAkcI%$^}#?$~Mrl(~}NBHM$0IC6qSv5FTop@V}zA3*=;5)YqRSgJKi zYr*m%$HAj{UL{v?SKGLAI5TMTcZNR4G&i4TL_=L@OIaow_JQZr&~Gb4Sakfx?9+3s zC`diUg|Yj>3LFT5rwq2*QZBV74a-1)>}62mt&o(gcWE7+QP09k4U#%wCC}9RYWm&` zH{$6^9n#+9V?vRNgsGR#$CqHEFNWkFkYPh75?WOR!}>+@pvR-IZ5NRgnN)&*zY%{1 z0X8Hl47S7d=hwzghEE#@%^i6B=;*`v6*&R0LltK=JiA`$=>90c!I^Hi45+MvSMGKZ z2(x7g`Rr@sG7aNs3wCTvTSJE;X=y7fzxvBg2Yx9R0uaItMDYj;fuC2dfonWJT9qHtnSt_9 z<;hw~{(O0pEG|Xn8(4rU;{-#r$VsCPjl?s(*;2aZ@`3S}!aVFwn5V0a z04ZlaNudPChFiZ6hF3T2u$>|>7XHg`#2_J_1um4@guW$6sTsta*KpcZ47u1^v8M)6 zMz_>++XOMG-tdX0g!fUgJTj!oUm#T@%GaVM14^l@JOox=0FCaQiNSKL!Sn)0yS00J zks2PX+t&4I#T4uHBhCNPXh>x9(qGkH^CH#V6DNR>3va$~G|2SjGr;vBt0BxoVD|mZ zkN-n%x`t0t#5yBjIgiy;%BKiCNRj$g|IQ80Kg1t|(7BgYbwj<3nPouoKmmh#>`Lw$zKZ z!YQE`7Z6`Z@ugY_Y3%9uZA89ZcuJEer3e;8h^88ET;Sx)9>m!M5sB=Ske)}jh(cRy z+^OogW{AObt=uPrTOZ(=Bob>H*4n|4nz{ozOO4i75UX={h^5?_00!&&BeiD0Y1E9# zP^B~iV;CXQ!HMTOg?S-qeZ+g=Ah2&YR(6cgw1bn0uV6)3)~MzNSuqZ15~rwS$4`-9LpDJ+Pr%G8VPNXAIf-r9B^=QW)`*4L*R3 zWa}0pSr;}ZTTm_TLrgyZedMZt76!EX<`5tblX5V{M7;cQlTsnp-XWQ%1?g$^zZ_@c z*tzo`%w-EY{j#b1dvplbH|6aOU;9G_z6O6sJUxO(oxzB6~wfV7`d#|e=v?wE>=yFOwPtqT?cESylt zH)(j4$o~Oai^r!~KqiKr>1e(&vt01o=LQQv4H?4Qa?G>d+?D4lrzqC(hrhgknPe-U zWI!YN*By2xoMG>U`NVMVy)bnoTpG<)Hc}*G9)B!%5o&P`&vQJ zO^pMakF#Ala_)Ry0;E1OzB-{pu7c^>|NK9gm^pP7(40x^p@g5g6#KL_G z#;`2!7{2ABD(?H4QYo>Z6VMKnAgY`>MYZ12WQN|{^aJMQ943PETJ81@(Oc)^(3Ny^ z$!b1LE4wTnpesVMIyvG?p5PLstdlh!Vgs@qgqTRqo&UT85UuWR6xDxC7=Kl(_lSuSH70U;bQAV*NwV1GM;WA6{SncJc4$5k z^mP^jhW7i;V&wq0Peo_`!7Dlo)&FAVH3pxQv_Sd@*kdux@5io1X+;#rA54)=0l!z1 z!w1$xZuvB@T>Z|_U129J@tyw5j5lJwjM+d-S<`jC_oxM0k^fmrmFA^3b0M<}R9YcQ zC$KnUy5V}734QIHi%9a~!?5~b%*iBd_@1SGDZqBvhX*imh+TazgW#*Y3Gxu?PyLXN z?E5uS34g)KJz18l8nztW$yOfI7j3Kj^5kAnM?9qj&PzDBNTNi%2N*n`)>MGjpCwD5>)ODR zkUr5r6of?K;N`g|hq&N8xqY^EWSJ+Vmh-(*i<41NSR4WiRu>N|Rl?*q-P)g$KpP!w zDL0?2x|@+1brbDE8>klRrC2fHoTSk^=s-{U*M-3Uh>Gg(^Z7{(KejZEG;iG)PN>z{ z2NL2`Df}uS+M}Svcy2Q3iiRHxP){>}qWv6Er!%P)6QIusQf4PW82<7_kW`Q&B={}v zuP9HbCxK{GQ%xR0yFb_zREZ9U&!2|%w~o;CmxJy~;}$SqXp;cq9W}y6)||d~FP~>c zwDIo{|H7l%yC~Ak_6363i`as{;7qC0-9?gK=LowjbvSi!T6Qm2L8($Dw?B$_K9x6? zSZd_R!a@x7y_%>X=;5phgYM*kKx*R`&R`*Jaw4!q8yxoh?)l`)F{s_dK@2HO!787f zuTV@G*46B!Az0SJfTM~m+0-b^Va`+ddgfrJr2LN$lYacB;p?6iJl2}58SJk0#qB_R zdv#vy%PFu4{$~GupPCv8{l>%hr*infkvn?|)<2J`^xE{~gb`~YV`jKTz(#|4Ajwuu zf#6@S9h}Lfqosj$J)TE*N%1$2@j!NAGR1$S3EXWX;VKv#voBcW?wyb7ql01-YuL(+ z*_U_xrQQ?$L;rR~K%RT$M$Ep-y_J*2%H#idKc;zbsRmMNy*X04u4x2Kj}#9IrTC+5 zz7|=48obC^R7U3mvSRGpMr&F@2|AJlHl$)yy&Na7h)x9FTGiz{YqtAu83Q6veReB! zz*>g0SN<|*rYRiR)_PmX_wFmE>1YaRM8&s4|8Q*J_y8Xc}R3>&|b*L_B6%z@5 z@({~D)u*{bD$VG1BL$(!a{AQW+>?!}O{C?>RmQ}bE}#>yh7S^vo0yS1q zV}MLJjEvlNoWJ%N+owx}RemJzkSXpu>bN;Ik&vu^WWq$8u7ei7c&=&`^gX#YFB;(@ z`_>j%{7Twe$e;&b{GI(h{Jk0#f&Y-d16wc3?NjFT6d0VsSXQougr|8>GRoV>B2-sC z_$33&RY9SUQYVF?5*HNRE@eSLVxVj=oZdG}1X!a!GlY31P9)4L!uNjr%*$O>b17?$ zb-5(09B@l|9B@hp9&GGp z-S@R-=lzX^E*8Q-~a_(P!cyy1oBOGol#Yoe;okmE!SCx6>G zDd}UGo@rC{4n}wpej_iu!hSa^u!g&1PSj6S6OoLH{`h+|-ZL0N*~A9Mm7i=3tW#z* z>LHYiNkxekLH#OX+dQ){!9j%$b(DMymmsjMc}fzw_v;%G6^_DJFH27qU4iC)tL(Vb zRpBwDXlwA3e;qSBGJP)wRoaK`i#iF63zqiOz6h}0LXXMP=ej4+|FilN9*46~-^_kG zLpt(B?tY)xlg@k|B%iVd8-u1n>tv1P9?*|*JQjgM`XZLPy-BnI@%FaE`>UP?X(S&y zCsJ-L)6Z6wtg}_eL~Mg2ZRrEK81FtbspIYLn~Oi7p@V8vGn^i%%;hbx}Ay7)!6Rv8&RaJFFOSB214>Lz?<4-JM70N=&ot zN`8+_l6$~*{D4q(z6%xajP-&_w*c zgWqA@m1RM&k!WI)Hpk$k`Z^>(2L4a8x+WhJR^AY0?M|{vYfe-8(APhRPJ7{fZAi-V*}ZSx6vFYMlFl9HKsZ%r z_1Cwnv4qw=ym&=0aiT4FjN$M8R719y(I(K9Uwy~@Y|{j3-R%x6{Un8VpJ*t3^9G1*0Wn zV327OLQX)lzS+pLuXLEAY)wHZRMAUUNZNTP?Ja%ZIqA?hU1CQV4cb>F3cV9E0Bn*Q zvf(E9@x+KXB~68M{3tT6D2`;3ZC(~xreoUW1u;ePp>7H?y_e9z>UtyjkZViqm)pkq zAediIR|Sb_YXDyqBao*Pg_w+LueI6BGil&2B1MiF7*Y@R*LXrtZFQz!5G|`}D00H| zW>a90qxH5{0fR=a(UMf_Ll7CVE^$ zCD^F}TdaYb4Anajw;+wPP_6-D#gFw+VUyw0@p0*x7&XkQ<>b)&ym`@fGCM*nUn!xX zvCb=0Ix;@b8s;>rd=-IEPBXI??n#2p4S;!WzGU{p3OK+*Jwrj-$)h8xswgBTwc8X? zkT$b{#jPrapm2%~%~pl50h6$y?iU4{`-4$)r%-3etu-=QP%YMUrw~f*YCx*iOm>hm9?;25;+N>dIur)K;f~7Ib z#LR_9Ef}?%`m=4!n2w+qdA}cSLI+#IE zzSuL#H_F>?wRix&rb852!aOB*CA?ovB0c_?I(m&Uj^N!NXr zfA*&u9WRPj2Ty68y?w@Tqf7sJcAX5km@D?{MAgCLECXt{a^UQ$Z*e?Mkl-UoS4MsW zGK*MLo)Xj3@c=anq4(Lp-x3#DO2u~6bU|cE;boOyT_VnKGILOdZzP+XRMFnRSJoH5 zJB(1aoTkQ-41n`I7yquh9hIZ=SU9y>xS3Cm@1-yggH3FC`Dxm#=p#z2y3!rmqDRBm zd|v>bh3Xou$npGIe9OE-Ir2X*t;^6tG7X#jqPbLaDcgs3oD`kZ(I9~IoP0MHy?g;v zNt)*yD_gS4SL?0z#{7~e%)wM-i;V07swGO0c7ebKQKeCAOs@=IIA~TcpvXC^w^Ev; zEfi<*BEq>cLL`wVYt0**p~antc{s1JuzJqsB%V(TBTNEU2>MN;dSMtARL7PY6#!O3 zbpoYW8{RwR_=4Y1AU2F2d*WN?=P4&XtPG4>{$6s<lrQj+68SYM~a72y3Jq`I3pmI&GBs(UjN zVpR=b0Ftz|wDUcnrI9g}sP_4fXJxmJP)F8H2Mx{BxnS|fCHXJUHpcXLGxcc)j}YPr z=DzSPVEKWN-?nLXeG+vMdY$oNmWBnPoLqj%{|v+7{=0;QqmzB6*$ceJyR2zF`TD+e zqdf7NpPv0=3FAjhTnYvJ>)x-Jk zYk!qoml123V7aSxTXNy1?@7ZN#zkGSMGq9-Q4SX!U{bOM@* z`{Lz`j(vxfTemWLAG$eTs4D`MaopmT(&o-wQT!qP2{ux*s&^4SU^br{ zdiGJy1qG$8JRa1=Gzp&t5wc(vkX!;T1}fM3xxE&r!KQ%y(V->DMV0%xmm!KN-SEz* zs)^?@S`zz|Ij}PW!=M3xJMkFVy-MD3sd&jyJcNd0c$q--WASilejLui779Ne8S6TF zFt&@F%^tC@JK0LPi=1Ce9Ckx&!9}+u(g;D^)H*Xo)lvtfgL_*KHHWZ|tXDm8ObDF9 zi)@*MlDiPxn-hO3XyIl3I`$2&M43-SuGZ+Lj!0h8m!-I()G(z)|90pGhg7;d?;wQG zH*muXXyTZKIL6>)1pe8`w}VVqWhH_dB3HFbNh4@bT~{lhGUDy&Sfm;;gAHq-dx?0n zo6-7n-Vv#5ZNXDZBWR=3BdJP2GJRaUVi#49ojMVx4ZT0mZ*spCQN>O%0;h+3w~spB zk=jj(A@Fb{Fwn8*KYltOabwzJpSNQC(uPZF&yEc>(2(dKx5^RPzz;(IP_=gc$$)A> z^zK1!V$<5NK)1UZEz!Iw5$HGWr2$7o`(>UNi@HPFir33ammB}!1ac)(Md#9Rc|lDU?vWOeV9KkJrL4+B*}fm;D9hGac>ath zzR#87S51q_Qf6MEcm8!}OJ(7liE_CKy!0*)mgCcxRhoA1CH~WOsw~qR!__60;A`b{ z2K7txzb*6OH(THZao<4KRg_H!9_hg@q!U6fqB6XCk2?s?E*#WgwCLm-yh^AIRc+;= zAH{`Q(>-H(9O9z2Ew7(&=UU_?x>%?fqI)wWJLQSeGv}bC4>O-U8{Dh(h*cF?hxt*O znz9|7R&RiWMc@B1MvDmc>UNffp?9kPCpsXd7ZZWj0Ym|GO8fW_R;$Ld6*Psh*~2pK zl=F_6W@2z=ESVE>j2fZTCdMaXG^;$c+c1)%+4=?r8h6SlyheeHRYB)fuL~&Yrwkac2{uDS_OSrf^f_hfDHU#JZ3=Lcb3HoYsrj2x88j}D z<&Pk8I83jjke<>$4*((eghW9JEVY3lgt$GyDd#(5Gc3=W8V1-D;Jub0~ckqc#Ol%@Nj{Q!aAUgswM69@b!B` zD>VmV88g`Fo_$~A;VRfCzp;GB->S5YKnN^$WNs3pM{ffJO3m;bq&X#7IkQX}kbE?{ zP#rbZ${-|S{6H&@H2S#PC>DearN9B2gs z(1}N@STU>`~xDLyHeLADd@fOAU$?2BJkuULUl4a=*gf zzv!n-Z%mMrMN)Hf%^Qf-cgbNF`LVi+0ZW=PPo)2`Oa_r}4|I6ug(O>Tx!puOK#DE! z%Ahb{B8_2Ix2)PCCCNA7e_!0L@#iBK7RNHoDi#UNT7{_4?+1~|XC~O>y8i*dH8j#5 zZlL;wrQVXKGZ2~Cp%J)bD#u*K3&IU22ME|WGs5`#_j#Fn=0v^d1Y9l^>!otd$BDWK zyCq>leJNpJ*JfkszW0#bt|O>64O+aek~u~&E)AdBClMhBMa>U`HJ^B#UJ$O;o%B2K z7Nyqnd1HciY%LSn^uewN`r-6N49$muKh1ZXQdym$LA+HGJ*kjYc)LoiFEF25Q;yI9 zJ8-!%>vV=(0d~Vht+YAsVSE>W-x8z6)aq@IP~cGd;SM>*A}Ss*t0_}-^54rL zg6C0-b`^ok``)U_r~)bRUn*!(nrKxK0uH0)0k!dZ30ktw;WALa3D;#$KZi?5)#6<| z6K9PLfC-UTbO9H#A#jKBE7)I2!c0jd`1i-zW7JjOQoEAeE6pdDK9xD+E3Z}q3^WBS z%P7(HGH&_s>n~pg%Uz2l7}7fh<2vZ>0EkxZ)f?ZvyWy zF{1jy2UNWzx~>9z!KJQ0B{6*KAX{+w1>cED(2dU0HPhme39+gu?rA7uR;5E+APkoVFr`CyoFEtGXF64sT8n(3akg^ z72P7d_UKYkot~8&fC#z?GHGBNjG-aC?Xu>ECz0tgL{u8MJ*< z7r|&n%?1ry6@Sdh#K)6=4-KZWBfCpA>g_|Tm~xv_hYS4|hMB&3&_BwQVY2T+m!)MV zPY_-w8BjaEH)V6f-WsY;Qiw_W-D5m1E$LUr6j5%0`DbT2?!Q1JftE5GZ7QU0-j31_ zz?%l2i5~DO@khRucsx06|9MxoS1}wRaWrD{Sd;F6Xp*deMgh3^5lDTw(l3>~_!+@#7jZK^pcmCX8 z`P0pGZ9_ra7c_m^7=y@ClN}^^wt#g3$-=S?j+d=^SNf3h0KwWL0=B4H`W;>r7B@No zJ<#X0&D)Q0;zlev6L)-v2dUAsk@3a7o39CIPIPx(unkb7s) z%Yv`!X8)1X*0PWGjBS(02*v7s-dHyIyTvp0@^gE@LvXlAP-;jIt|gG zT(rog{}E*#Y>f-u!Zev(I2#l&W%kEU&7%|6Dy(sDTHj&=&+P6AqNmI>b*xGp8>V+>Y1{F652SH zpXZ9{E*a_;rD`w6Yn+F^a!2B638mrWD~-A1vvL(J?-`EL-zsXYci970tT0K$>{^qH z4siP_vPH_tBgYL#E>MQ`D6%lAv(!1@T2Jxr*xnSBC}jT%aCLL)STkQ!2o(dN_+Nf1 zNBQZs8wi!YONk-smlLsKI~Y|29(TZx?ZjvvhjSX}_=}Mjkm1cBk1T`=jy=Am9Th5) z03fL3cu=U}TiVNm>fQ_67gcE%*;XMQQD|3F2A6(iuG7746-ftPkaoKgsO!Hcfm>?h3ZD9F1*W+Y?cmJ4|!e z^@>L4{5s>HxscP&_JDThPn@*)wXbQ@VV%?#x6y5k)F7CvF|gUOdW++}QU0C&2D)g) z(@e*$Z}`Mf7i_SS0t}qzZIdTdcEgT1Y*a^rJr|%NP}S~z(>TL9SGCM-%H}FFlur0H zk!gMbFC|&=a1O<`LNV*$m~!+a9}_Fu5mU z!(9T6EfwTxk#di>Q#*@?{%Ida6cr8Fk}=HsKO#e#eE-{TxEIKuk@7Jg?8&Omf!wV9jszTHeTdAM4|@+Vgi(T`^FrJsZ7C0|H_oE1 z-?vmQuo#=mg3o9hI1y>Q12auJkyre*oPr_-Tl;h|k!uq~Z7$o6?^{Oi8EoCweRZ+| zt1~vU1t#L>QEvc6!7XH;J;ft7O((<31|gM|xfKAN5Z0Nwz;;>`U5`gF=ZSMJ9#V!$ zb!GrFR{9XNr=j{jIj^fDBk_F`8H~dPW($?|JxEj_@H%Zn^;MSZemhOoSM5T{$5gQ{ z9(1Z66}rKGMJa@Gfi3qcBwq=GKup{vmPI_2sD&X`g@uUzqJguliUeF>{*p@-sVy-U z9!9I((EvX{z`q=RE?=>{Ln-o=C-e>b#;*;!EdRcBH0l1OWyFKzir7+kcX%cKGJGnw zy<|&s?VI)=-*_{c5~D9ac()>BHHykC=wi4cgcc zO?Hzvk32xV;niH5pY+huXMFs|&nc`s} z(S}f;{g%u8GR%?Zp3O0D#OcI&j@nf4gA-ITyyzK?q!>9VGc6&Irv;`!xT6F}$r$Hu zC|I!u>=!AgpG}fIb*mVoMzal8DM`ygpiAg&k_FrAOUN^$uD9o^zk#K;J@cyV{auqN z%yis(BuiM{0lZ*6A9!;OKUk_pT)3QTQ;2qs2RI(4B~AiZJ7<)b?Xgq+?9jc6Pxh|T znZ@}xHS4NgNrlxb$w`C+3*d}WB}|V3X770H+Ix8qUGDAX6| z>zGDpN>(G%JAO3xpCNu?{KJ5wA%%li`Rw17uwfJ4|eE<}rY2VTWR^(IdG+YA`l zy-LMS7ox}O)YAT90Y-p3+n6M?67m;9?~7uU>qTh3`7$vDq^ zPhg{a6JW&Ow~`#<4?zy<+-P8K>%|+yE4kz)`O|uu@m}A$rT@pFv>DmWTFjpMFxW|a z^EcH%_A6)I&o+s7f{)=kLd|c-d{f@)wGBABDzz+zY}OEDt+VPF2So>{{_bJnoD1Uv z2?-_B&T@4#y@$$LF!3-`sUK~^0YSOc2?2ly=;aydp}T{)IJs;_v2a?H{khcGxs?j$ zFR@odrnuEG`gYP4WBnuLW=|dZm?NqSm>ICv+FJl|uO-hg!bZNhj$EbD6AKfnCl4^# z3K7fg;=ms=8t+0hzr>LP_{Kh7oN`Oj^^{gB0>-0gg(za5-G(TGJkX!g##a`m!qHig zk*n?)9+iO(r&3F1Q2OL@Xk<5^KB>Cxl)g(IC_@GJCKB%$Y%vITA&R1M3M((Bs5rgQ ziF%f#T^RX~X%TeE&Tm18pB6HJs~qe!!w}|=Kmp*os4NYwV=L?JIt9!4*G7(Jx%_hh z0z0Grey>h9Ow*V$&JNeEc#mN7!j$|{q1A}g6L^I~CJrzbivQT=9J%K-B8o$e5fg!~ z)*rXej{qnPl|c7~y=O?55#W;*wpio$ZwPc5K$+J9>wwX{It&k(iABQu(hZ{U-J@w5 z=`+N2&OF0>%j}bP1~5W#P6=isL}!r=lLTj530cEGw#GD3PyeoNnw5m+xw+nVAKW$_ zm^<7@A$8@r1u7iw7|bVXXwyzGP`l5N>O-dtvYIf^hi|;c0$XdTTjfr8Ztl--1_p0{ z_>z{TEBqLSd7(-?!Bus)4uBAg3JixY<4o2yXE-k|C>ezOJ}m%62H8$Olj)|3R?)hEuh^8%8D!Na{Ev+2w{#@n3T zt2-xt^I*)V1c5F~?>vh3E+M;Y1lCrYrCr^ z>~jhm&AVCqRt6*{reT&0;AF7ULto-F3Q8V;V5K~1uaGuo;)wqR`Cj=d@YCb1SZx86 zjR))$3bS+dDC$jP?S)N?QEZ_{y)rKy_I>u-pdFE!Yx0SwlLAhdyL*+NnQ#*8RPpSI zdG?)s4Y6#w;XpNrO+&}p?nB#oMVZ`O+zZn$Wcvyv6S#K*LfG(To=%2~Zfm|$&%6?i z*D&nA)~P7L#2uzK6oJecX1=kJjqU|aceXRkJtgW1hiaS>7<5Iz*X`33yZa4aeUpna&QHS0SwdO-p5Z|Sw^r(2z$7vc;e(4;CN#o=qS31+bjc!rm+inz7 zUS&UQ6K_&)!VZ@z8`{#t;_O!MX`ou9VbU0kvy8u6h_x{@-@NcFcwE)-2pK~~Pl#E; zmjBZap*S8{A_d{Hv1%etkrBpk=t!wQBdc!T4TCk^1|e+&cPJ!oLn7&e^%|BqaxkW% zm=SNm<4t|+vJ&ysAi_RBcG9>%94OKIruB;Z6ki{IlN_!mP7~xU&@p$|4kEB^k8xg1 zG9Q-goZXs%BD)I4DFVZ91NpE8d{kxvCx{J60VgJ1go^7?{j(Gs$e{z}zjXpfjC@;b`d;MiXq;HS*3N?nLuqU;gvd&vScY2GCfjHQafHE_t|v+JzcfE?s1-}a zf2l^1gqWm(^+^RZzXD{$Ysp$j<8>v?cHh?w@bI17{YFI(9lTqVk+dY|gF4#K+w2&_faJiuI|7 z0gl3rD_#-2VNZgLPJ2=Yn7gkQUCRj7m=3ij>7+8SOwLr58AFoy?;#-PjnSW#FitBp zWJ@$aFSVI-#d9Qoy05px;0&V2T&>YIzL@qa;3^aCep8t73*K03lk`r_ zsONbHwMM9%tYP3cg(4pHm3xpyA@(GVaWc7h9r6_>b>>)=2#WgSNXL%}N{ zK>pP^W=su*^5&FG3k@}6*GyJS3lG;tGLXfwHD>U30~#0JJJeRu0MfA}WgHX}T_VFG zsw;x;k0dC}oo`~z>wP+8?w(f*%Be4|Nt=}r2d@RuJsW^k+OCr+3Yts78trx#$xIV8 zKg%SN1#Q}YA=8F~<;P=OHnJ1B3#TD%zl#QQ?tiA1MFw)_dC+@y@%E1PlNVjX5_t)} z4F`6dG5zT7SrxE~P-%epu+_mnUS(;^vKS^wEIN#gTtSXuX&SeNugW@0S^u*u2V#># zYq~@aO*d%+1E$}cf4OL^Q-x4HA(w?6+dzN|?O%8cLF}A?hRJDxCN03vYs%x6-KHiPNMIqJ+3cKj~PQ;;r$y-+hNUrkFJHEAP zuahZsyYNH>q$}#S-f(ONf^Y4B1WzoGyNU%t8@9`*_{eISHm5crSiuO!a>;xWY|HxS*YFuMU5j?w%OqzZRakIs}EhX|? zN5G3eVVxeDPXlpHdngb$k-$n7iDmFN&H68N`jxiw=R_nj2wymU zn+;jbb(ojrXHqj=HSSG9H3P#HM^E@5qOePm<&DPj9 zoHfcWyJOP9Mj*bZ#t#s-378bWFV7gNx?i&ULwBUo2J4D@jaANe*J*m_&AHO(BELCv zXl_He9#tbW^1L{_;t!w?g2gQOUOGDfv)_6bgTW6;!B}>DvOsSn6*p8xeLNEN{YRt8|vBqX=j8ew$4f2OD-P_pqV_O`-_#RT3h9PnmV z0!=n#=^&6>%ez-_3hO?e z43hJ%{ZfU;y*b1bFpHh<3u8HyB&SV-sw8FlsBDK@Pvpc|3;Y6IgmRt?Zqo~Bhrl3lI9x|gFUE7Q) z05ytzf<(@b4rR|rpMMEjWc_jbC!1^>kJ;$S_6S&>?f@?>m(u|9T)RwL>%kg8HB=(D zg_w2de9PJS(%t4tQf5+Sw->RU#U&ey^ENn#W`%;m;&igTLVfVKyV;+?sUwVzfz+5J zDXF_n%w^ZCn}~J}u{5n&+XZ5)i5}*GzRd3zsCD(aQ}`OeY^piRvXlQFh_KyM6FXPE zG1$Bx&#qv#$r~PUBc85phNpdn?ZPPHu8L>ml6FYXI`A z4I9K{jr*HXCgM0Ln84@`?S6$!55J_rtdj5sCn(+xdcFYc?c3C2m{!zw8cLOmGrfKv z|C+rpsa{TxxralYn29#7&RbPJ2>PH=U_6K2-WAXe@i#V`w~ zL0w!xt-Y+3K@>GOfWJf*a-wSrk}8Lnpf(v=;1 zhZ$nssFMjIDw%-Ymz`*0er+J|;jv#Vr%Rx@!$M|ZKZk;EIxs9Ix}iQ2KJu`{({VUa zjmVBtOitUzrpgA}l&&P=!x1*^dw?GsUu%w6AU9a6ot0MB)_5gfka5|lA&ZQP1uLR_ z=n2!2K0T-e7E4L>CR@)qF?M+*h-VlMh7Im`My!<4pH_QiB$4oG4~eMu2?dnN{a#5W z02y3Ir=mv}?<&YS0OxO7Kz-gWX))I?gv)*@q=)24Ic`wD%se~9KpfwQv=@R|aeej$0rb~MRd^EiO{h~)hZN@zv zESPr*cg3Ukl``Zyj$Av0UV>pMOy=KREW^Lc(#iD3j!gP;KZ)f{CxLB8al;+;3nK6( zGs4j+>F(lA08&*wgXGxAVWD@er+R)v8;D$cvAa_0k3-S3tBPLN%Y4OLDxQLGq2)ZR;;5blEmYTBcPi zMrU63$kpnrc)scz+~+kquG|oDwjIcAU;8STIOMy{qFS%pGYxcc!aLN`cCWq8F`Ya~ zugJ@3H+F~H6Sy8_oX{={0G8D$;k`A6Mm0kQlr{b0V!5$tiStL^t4@gy4OzSn%hxw$ zq-TETGW5aqjH4Bv zO<-(ZbY&4aAF$PLe~#J3sUbbt$P-;wqgfZ!kFsZ3!t!z`Fy@V9W0|VuEZ6Z7EqA-y zt4Qrjz#FiR$lQGEASZQwLn0dX_U%C2U!H+$&L$)SRGl0e-f2VXG-;@22>!`1ixSh3 zXZ8w}4R|}wRaqdyc<2|XPccdo-!x^0*Gt#rZHF)uQ{&qp))>&s4hAJSs$ryhL&X2i zk`g&rCNx4X4T>siiX~&f^YS2rO7`z8EW>L5*QU+oaUi*Wb%l(oH?t;_Rp8xjtb~vn ztLSxREo!dg54vTp4$FVH&-oNCm&(^?us`76ia7M4{h?Qi9|z<08W1t0W?35E)r#rR z|C{rziYmLK1ORnN{1yX8SGZy)&E(r~Qh85}+FQA}kAR*BW_RI(ViT~;i0dB>pajcLuW zO>$!1#-(N^y2f%4XDYhg-KCb!%kmnBa4d}4rUNy&K9>i76!eL?B~8}s5mcInuSh4| zU6PrL(MZei25ny3Y1@*HZUl>{tV?QmV8;+|1!)f-?bl~lu1u{lM%ZKgz2{_eKea3j zp7I9s6>$AB1tDIt_HOjyRD&-w%P>t-Fpwb^!ht|?IfQN(NA!sT#65-uD5fE5`SrJ2 zyY}KHm*h|a%Cruk?)ww6C!IZrYvI-W4BoFnPUn$DTbFQqII{i?5d)ih4Ma``SmMv@ znmLb^jsBP4G;GtMbZ?Zm_e6c(Etl-4m8`r}`f~Nu8J?>+YEC0&5?fO}#}sC6;CUDwCDa80Kcx6-Vt4XsUpbb%qx z^VZ{e6A-yj1KC8)7Wlr>-D~umR^2cDX_Az=*C3b`LPZmV461_D^pJZALU6wIch?+f zR8-W(jrgc?Fc4(%jimH~hi+h#JJM4Cn6(^%7MUXMUcvMdESopte(f%2!aC;3D3Ic9 z6vb0DhknNz8SHX4V+TpMvvuu6%~X1pi_~&VB@CEr!|h`Gb`!!!`nGEq6?82L_639b zjOcwawZv3TcmA^RhFf;Ylj6nZ8o#}P?*mX@Wf434$O^xV{fPTlHhdggekIS)QaK^Y?sf zzLaf-Va&lx@$%pVZ-$v8`*SD7D(l}3ArinQ`k%0w)2e+sfr_W3MHeQJOpC_`qdPxx zC3!~6$n*|L@U2ocuYJR&TZH+s4=k{OnLy;ZkuD6YQ9Gm9wB&`eL{dJ>>6EG?feYTO z_@~JLQM}1@cX~Xsd2kVwzR^P0L^;N8IM)A+^@I&O$1-?BqO+O$`|Q3B^g?`05X|hu zCvnQgoA?liSr`yXPYNb&!g;W~aF-0$OI~b7qrtnBWn8wQI11$O9aFsC-I}sod66n= zS^@q9M@fjfX@H;b6tt8;86i%{uF}6Nh~i?Od1Q!{k!L$@Bg79-2@u$3OmyR5_CYbU z{Ag+w(D6&Rp}RT9Kx)YZqII|qtyjv+iS}ju6pN}pCuoLwzdk=6i~wy>n)?pD!iY^a z1&zIPyqySRx3%9IKIHcqtQ%UdE@q1uTsgT-B#GH13Nze)OTkW!xkfO5$*_iqIACV~ zDA&HR6I%qDkb)kG`2>tWw}f3*UpVKj_9n%T-rXKRSZ^zJ=Pw=tB#)S!+|I`jiES{$ z#9Cvvw%;hwW*U41LBwiCeEnVv zIZ+Ed_^3lLhFE7G@c2-@YsJ(3{rA?9-<&0wB0}M(t;#~?Bvd`lPP%2FnW+St8O0^n=>D~%fr*aCwP*oRWSdV zA0VMUk=nx?aXSU$WOcOUpP6i>dFas~ zK%~p`1LcNOC5yTF3ajM}!c)94sT5M8O4I#jh&exwrjK9=VN_%2e$b~S-A{G9^3ooQ z?P;-Ec1PU6QT&}5jaVk!k=hIEN^Q{uJiC(-ECZDNC;xDXizwkGbn)8{aKm;Gat`sG z&9;fqZsL;OjeTy2iN!^OUa;*TRI{g%}Y?W>vFU+s~|n?e(^D#Fe*jP zP+acPwa?Dy3&5HU;pnIc3braB>6=phR)HK5=S7Nk-H1&`3=P%kZ{M#+ywHUUOmD0Zy(>$A60p{phb`i zF>VkfB449Mc%yPAc&~ zdwqYo#!tO0M)unRYVsQgM(^1KKTUW#R(S*D#5%0&N+115;Lrp4Afg&S$%A3(F0BXi z>}e3;x4~?Bh^8p$d)L~tYZ3KI^?==PTUuF^^Tw^}9|){P%juGM+1rP+NMGP=jAv8V zstEiQ>c3Gv|GG46dlF$UC|hHgE+iYq)*F|Q{eaVdmm8^oqFiijm#j=yy~t8qMwfXm zivV+=f47?48LO~fqia;2?=~go#v{{N&GZ;mg#%_dVr3B1w0@F8^}#uK!SD;1EY|VfZDi3Id**>jHaBTmpz*#cZ(0hr6!M zr47duo6^Imc<+S_+ta8jA-go)ZSN>#j=Gix{^KlC|MV&kC1*j0M%RtGre^`%AW4|GhE<+$229AUQU4 z95^;e&?)kb{Xyk3h}4Nq^&V>V%m)**BH;H2KdcyunF24}T1=04nStL`arF8H2A7*%*6D zbfXATE5&#d$PLc@VY*`BLmEAh+hlL&Aqn}K_yW&fT?argPLA&mk0Tn0NR9ec6bg2g z$XsYo457&WhqQguLOYMO-)C{$bYY?sr+=j<6GyvIe*Sj3%!=<`q89-2Md`c=Qb^eJ z)jPhS+Lk|3l^2~#8niIY2{BghGTSvRDY#PE>{I&uu-&6lbr#+F22elJ=ASUp)b%#E zUwbW=ItuR#ZIi#bmK;`f9l)N}a-Pd4vuFqqmW|9YCsd3G2^6yhLSy)}9ySBSPfA+8 zXe!m3ClKwXN1?>-m?U5@20CrsB0VQ?Ry}572yTK%!5SVd z=hQI(k!nO6nRy^^tn(xt9hs!XHiGt(kj5n7?j;B+GT7O*A3NhICU+naiqy`J@tEY{iN%N zZ@K^Fo?3Sa>7(7{v2nGB!PG!|O4YZZ?|kNy8oo1*p)@3w$^EHz2E~7T%y18*i1y^1 zQ7lM3;qVY`F|GPJKRj2E%o_KK?rv#gs6qN=4FP=9&UA~72) zRwD=hRP$lC#g!Pmxu~I?RQTt+<7u&fkH{g(YT1e6ilyGqz>RVmVs6(^oyJ#S*kq3F z?MqBE4+YFKJ2?JyoUZ7^vIQ6%h;7mJMpXqbOad~FY*b;JG)g@~avl-0iUrm8^7RmmQp&)+CP_k(;1qg?} zD;Mf=A5d+iBEFu5FFI#NY65f}OkLckglzdp>=Cp{t(I>SM`5TJ!<$BglUz903_0bg zAVvO4f5FIzpL{sqGMQCuStV?2yur9RDwq{k$C}k7(<#{I=S>SA^Hg^*tD08HJP;38 zg&9LZM|1-t$4QHUrwO1$K6od-X1jm}3bASpV@Bl=;^kG?2IJElH{UZy<>DlScx3gM zLLHkicrjib9|`~V5Z{NRPvo^_69=P!R+rcs7~GMgIyJ$gI!5~%Gh2Ql6bhUv2J@vn;(<`3{2^O z-~;{Kk9?uk(TBOMu3^^5C&xWVl#T8blQ=r3y#67GP*BDUA`6S4(>2YSM2;r9mKO$+ zxcXp~;}U*+_}zF1spd!!n=p1b-G?t4Hn|s!JZm&Ya4+OG+^Hr~yfxZzOCSCbr;BAq zm6kT?&t_~n1B7N(O4~Z0r_Phv(0Y1$r%0 z_oJA$$8Ks1KfkXywD>p)Bd)A89@Vku3lSJ;z7Ar9^wcd?5f&`5@Z1?lI6vPJZMW!( zIu2Nk5A{)1vK4tX^JxLPhOl7+4IMl}G@WJEncoR2fGaWEyj8iwy7GkeKE#Bu(%ayX zPWR&AO6G=CMpBhvHbN0YWc-JIn|{<7vk8VrUDJ}Wo>}{xMTWxyg9D%L&~%6>TYSb| zgY7yMZ**}W|I+;k8=@jRO{S!au^I$_ z21l_&NdaLypm(Bu;z~}FmCVh2NyY)?la)R{*1nmy;5}2~&28gw z)gpZqrm-HbQx{MYpV}siL`3$>*ZZ{-8B&r)fqro#i+BeNNojn1Vi6%N0uhf}ea6EO zgN3r2-54c9L%1m8nAMQbRORQ$zlcjYKFRo|Js0-qb=G;rsTfVEi}bBniu7y>^RqZ( zr8fQu9P>Ss3_IR-+=b||oU)1de^HnL^&(opm9J;4@J>B5K#i?=L0+iXqd7kKm3=N9 z*Xpf|hnQ4q#X#LsCC_~1)`r&O4#2jjw@qTawA*7&`+XL4i?6EslBi0C9e|9U$9fYp zNuvP}SO7uXf^&{7PHf zK*1?t#YOB{Ka8aCxoRL#`$&ZmE8_ZZ=J}mfsp+x4C~$4dBHch7Nx9(e9HDm3Y8GYD zZCUIkK<;9uoGnZ^V>TL6>9v+JIHTY{*G`p$Z@X)PeSzKx?K+Nev-1EHyS`dKsSIx0 z&r03=1SEnW&~0~Xey>}1q=`@mt41eU=LTiIny5OZt@+>eMgZ-j8L=qS)%6b?9CGD02adG;SwTJ) zO7pRlInx#w^pb{e$xM&k|*Dvr3s9kO?qr znI#1BCItz;-wA0X5mW@_`ruatnBRnAGh%@gIIntAYIx$!q*P|f*8+oy_3aer;Tw{i z8M#ZazlRW|F@!&M=u)A9$#IK6*GTPib$_?v_I+w31*%fSMp!zd9=nMgOs+FS72u!T zP=0SOzM?{!6+9T*2-OZ-&jZZ0Z^kSUAU?vOrr9TW;f6!zE5JE?aYtsDZ3|PwQ=Jd; zx82QrM#-5(e8n(&?5PuXD6rUcp4+GNoB(^X`>$BAMgJ!<$cb;<`r~q;1K~8bo$nWD zx2Ef=vEg@aalQs8ho@Vie(p04y0y4 z%idad1bz0vk0PSLD*V3(I?~;y-0+Cvg``Lx6iuLM%0NgJ4_>_;{{?x5jwD`+ILMl( zWz3UAhnjM~VUgyfO#!#Xx8E%KHQQ{m9LFTrY{aPh!hWJj-X|b4y}HX(>velYLT8Sa zuyn#5I{1JleVFc9Poe0Bo~SYyI`C6u=FL=u+2E0>mcpohc5|0ihsr{~IbJZuhhk)$Ug^Wg8*hfy3Q1aD26|x6wXgmS02l(W~gfa6G zzxbOPD%I(!ZblLl`@>i?{NiYu?+hyitfSmF$itM549C%B_W@F2gOi(GA#ULV++`yMRizzm7 zj2>+ll5VbAh#rE%i$u!AH)X@7@dtvg%im^nQ#!ADwc3S8s2Bbb1C9_0K@vgclVA9~ zLlz`j%J*y%oBxzy_Um59&=?U9jm?d7wgj_P_$gFAZsV#j%`OSqqscA0(zhZ>7DYin zohUk)$|dzR4*)(r)~huoJsR}Y@qhlJsIh+}t?QnAo_J(l43vYug{v2Zo4y6*U|R(Z zzwa54?Vv^nNkiSlKE1Vcl!u0 zSU!0CkBgKYqSrc&Rwj7YdIHaO*dT9-%3U!Wv~|49FVR}Fh#;8e1#<7gdbI=2{~bJ+ z&f}-8EQ#EoaS;^1FZD{pILZV7zTgbKlAof_b2jgeW~j4@z4}n)9Tkhdb%5lGbv}~o@ry|xT`zME_?x3U zcDdgw(!p^%MQiS#OYW6^aiwtE-G`BqjY9}|%=Cxa+}K}vE>h+i+@B5Vaie@Z4*vW) zBK3%)NbOe$6BwX9>|&wf>NC>9mV6M!#NwFqWIiSkj3X-6fJ`&s^* zKTG-h_Kz2~S|uy&mhb$Fomj{d01An@Bc)kwTZHmPIxUHI=oQ0`1%Dk(NX*D1(nHq& zQ8cKPE#Bwn9~CslBEGfuf7DW!VZakBhyc>o@gIdjs&dUxqSE}}C<+56V@GSnRtAq3-lDX_U@ubku`@!TI} z@|fnJ=Y>s=(u!2W9HV^I-s<|;4XA5fzFUS;MfY)FI|90qCDk|h!Inq9$AHKO@DS!Q zcZt=p3*%5z&OEE>wIb|}(B>Jle?51&8YKeyQ?FRd#3m_gCW)9sTh>x;ETbM?9E3p! zab2}PgyyGQUFxZJE*!A&B$}c5G|AMTl5+L%>)6Jk1V>|Iq(*-IguE!bwd#Hstg7fE zH(&O9w4;uY{B2wnHp11OlWq!zOi6wBjvCn#Cj_)TA7sV|7bgE`HBZ$F(QO8^hjvs& zCCE+N_pdS;bUIs&2mFn_j!oHj5W}q-O;rGCozC?~j+Iox_}O~)2VYIpK~bx$dc1~& zNh$e|Pv-;L{k5-hOA6E20oj_(c~@az<+w>cBRX-R*3JUe`va#cWbEa^hmA#y5m1~+ z&@s#aX7>Al;TZ7h2k{S;Y*e$(z1%zzmfh7PI66;Y)0Cw$0XF+QRNXT=(`#T-s{i`? zhyF=EJFEyL5%L$h$XB1khmygJjNc{Ps6xS8x!SX(i0_Nz?ssGnj~D5>d2K}BNB^J4 zg4*=u@G|!%W?fLQOlP<$SP@gp=O1$pROD(F5NA|~tDQ9_Uht|Z zC<;`za*J-usve1Eoi=DneRywPS|D-9>Eo<&U#B@Yt@{|es?k?hbKP~bRMEH#&5D8V zcrAbi5H#SUZPW?M@^Q+{1IM2x$YO9kFfswHPjUx&`=3fe9d&aF-{EB`Za5fYszR=p z<0(9<}Qz{%%DPtzFUXM?{vKnu<%9jZ8gm0|fVn+0!N~If*eg z;d^@v#kJhx9=Cl!fH}*cr74ueZ+a){m(+5jiL%_`m?5P8o~O=3E^W2mh5Ps5()JNEh>ZAtqhil9=M_*fqL`3EvkTb z>}m+dZ7+WV>S|MiMwt*X#9N}_&;X6PMZd(>KQ30$vK_5|@1V!-&&~5hdT^Dz|lXLSq9QH&V&D1oC&0&{TcF zD*muefOZNg10cJ(BlU!ZyMoyff*3fT($TuO890`#lrelUB*jN-EDF)wdf6fc8fkO6 z!gQ<1z?)5o@1zfpo0@gC@yQZo+Lu`WSIl{7j;a^hUd(U|eDl#eWw6|f5PAhaKg6+z zqZG1q*6z)pA_QgEo=|8%6P9$=f!07L|K~4Ap$!8C6U49^^#cmgvW_DgRpO-?+8HZm z-vdN~(WUDD$E-!yMRgDOC(7No_uVItN)2&jdBV{BI$SdV$LqvT4H#Kj`S)cb5(AlH ztIP`ka1ruNC5k+A0cP0dmz#Gq37 z-D(w+>+(Mnpt#Q;|0^rhiim4eP5SzM2y;O%UP$Pe^3YKUWZkp3uTCD-6*?I7-Lag{ zBK#&eLS!Ok#B4t=OEIe;!WgccE<$nuFmktq_c#*;y+IB-*hn3UktY7D%-8xCWh0gV zbQ?^cFBhnQDC#1`p4%Mn<=INr5_ab*Vs9FDm49&>I!Q(cO)vq5)lf&soxM7GnNV6#+(c2wtn>q`S}pO2w)?qL{QLW5U9&Y$D!>#3dpgK>Ec z+W`TV`QowPgwxPoR{8$_aBdiii;3W;F#*Kav{1?`=<>+>5x*N3lz;Fh+m?WUk+cY5 z=7zxffXHLCq1B|=3$2=MHZQwzSdVEsowJP6An}h(7d0E>u3=gc3*OR~Q}Uj4!KMAi8#Gk` z+af#8DnDhh^f|5q1c+(4b_xoz)+%Q^_sTc?YgvXySEc!PFD`PPLV^_WTg4>Xs~uvv zk?TmA9>V<^Ml(U5B;LBy!31nFD%?6A{j5UXYmxDwN-`_xB4IH-@7N=2I*NmI7Z8J> znW>p070k|tEAIfE7ADTM_I(jLG_5V`>4qwbyA)-vdz~j z!(cP+uj_!N4_Er7`Uk~`lcGA|NerOHNzHCkZEu*EWPHk*n_SXmaw%-KTF}RBC2dPm z)gQ*fUG|GK0nkp1|1}x0G+fAOnmn>wr!DJ)0vNcRyQ|~CBb69_>kQCM%1fACT@5AS z7?1nS(eU>K6mCCJ4|pzsh0T=V5%F=*X;GnCy6t)1X21biW*V(?f~dU|?T$ahos0?_BnIvdn!5 zze}^rCj-#7z@Mp zJgdV%eAFmk1>IQ^S4ILaQjtP5~b7TcmyQc(=?mY=Ggag$ZW~C6-Z=U_WrXdpYv<0w3XAp?>=jC^4 z{o78Mhg!&HK!kFBwvvZXn`>(e1Lla)Z;#@WLL5_*>gEmjq}^(9!TaF{aopLZo9(w( z+R%fY>^VyPMJNgR!M-mmpR%XqKCz+C}{ArG5%c)1}^2Q6f-wjAtJ43#VL5pj=B(N5;T|6fk zEkRRpZWm$|1tIDP5mO;Iu-KWlu_QIen#iQl456}rr5cLCi6rxKfSh!d8MHLYR-Xic zz7qy?j4@|xZ@XEYNShq1!!t__&Szj{Q!0$U+n?a#b)NiJ&?!VSts7U9S#?_56VQng_32UvH>c}JJ_LAP#xwEv zm}_M_1@)J5kP~GD^TyD&>CiU28oG1!=gqIo%#Cq=&oufudx;5^9SFB%vnU-6aM7?V z?IowB`@+yk2!t|p=7t{%@?PP=RYRX%GmJwVlU;Bblz!eie@0OQiY9%O#3#Q%Qnt?4s3$h`?|0w-(;s|^8A z8wC+yN7UWwwHfvXn+wN6FLNU_YZJztlA(X=Qxf`ts2})xJgc&x5yywXwp=taOY$uWBQ9k=ur}0KmhZBQzV%fMf2CzhUF;gsdW(kks^?%dN z!={76WyvemS*oWJnv&x&r7N`{hm56}#a8J;zN4m3nKKqL3<2gqrQ8(8le^#69PGeD zd@0eW{SME|CmP(m%ag)U-P-(K<46}LxB_1j-T0cTn`b4(g_0qNc}gl`acQ%Y6Mpl| zl`V;Axz6j%iFe3aK|^TY5mVAj-x-zhYq1SV#>_)B$~6=4m;iUQur-wOP-5Lz+a#!p zrhx#Rxp{~AN+&)h!m6>owyG|Df)Z85kpW=pHeC?9FLdget^70Uir%)h10%V^EoRElmDD0`3y4z;o=uMkbw*6sGkaWif-<4I=t##8yxsIRj-*j%D?Iju6MaulRJCprV2Z}TQb9;+%TUac zNjJS{tTO{Ls)BNR5yFlErIS(Oo^f$&<1F1LXM#(Ef3O|{uV)-tT2BK~-n>)_Y%~KK zZ_vs409d$*Ng*q&yhN^!v3Gvt4pH zRtC@Y!9dZS6_g~;it)Pp{-{ZVu?2)+neL^3%8{|6=a6}D{tmy^Af#aJ`fhmjOum?ATs3J4(GW@%Ay`q!gnYgoED zz-VRGyU3K;gU9@@@WhZF=AORZgOZ~ z^HV?{VZ^^0pI3io?6)wQPoMmZOGjL@v?`N_IR-ne7wKJ&E5S%rDSg#U2Z9o@g!}Rf z`QYCdxyRIm6iTjh0abi%p8lRDd7S4ef+nZp^>Jd*RF!&d;p1s=fTNBmfEy43oRQiO zsV&cxras^Nxx8R5!>vIg@-0y%#CUM80SuVF1WbABxiqrFJOMadG}i+Rn7#DQTK)Ec zcBn~vN2v6RxFV7@WsK~y_+0ry$LBCN&i?T($2JQ7gU}<-(?qH-;W*lUqHWrw9zk}ru8%>?Y~M%Eb%8+1*x}e>sOG%Wi)Zd z?jH2WfE6E9g;et`r{dZE-313*&kZ(1*8qHG^eFkQ{3?N=5rVGeg@<(&G9GLiEM_evj zC3Pa=KaV6O6=LE#?Rv`4Kcj+mS{%#w_i2DoWcK7WY)8)uJzV!dP5^5$>7Ur$kXp&5 ziQ4?;+V9qnIQd!BYZiS3$B=XxIw%nA)teLJ60CRW+d+et*WnlYi`M0@Q)mP^vEZ;1 z;M0HGc$)1NIzK*r9U(vdzzYeV5V099$1M@vp~iTA4OJc@W-ZF)*@Hf4$wc-NQh5KR z;`6Lp=##SW)mKJi`Y{q9$VL#GiNP~7=4J7@lAwH$D8lYilrm{|R}lnmt@#0?fhfJI%kg@;;}=Yd~@Q7EKt(#^uYVeB!5*9*iB&6lND1M3JW z?ObfEHtL#KA8Yv25O&;3%Vp*aa0CWf7c_Qoa$rK{hgR-g1w2t>1R}1*1mG7RDjtx* z=PW&xL_Qm}ag_LbttV^>X06qsb_0iNh)176}W1>ahR(w;T4QoKSZWnbQyRpQ_g~AGphy z$Qc6C?)A*#@+F+^VlWLH+#z9ky4fG(AT5rPgX6s50ywGb+5yji|4rabJS= zM?OW>Crdsb;*X?a%p&vO5z=-UfMg(vH=+fD{GlPzK7&KLQ#@;jK%~{J=-t8;-&n#2 z2Pa;Uv-TX(Yyx3ZqKZ>OrJP%@{8@vEa;3X+e%0QPD{?vj%N{i^O>&t9~Ris zb(Jjgw5L!Nt^O@Ez*PkML`8AT{nTXrCnJVp;v6;51)na)*wmW_a<5!rl^*b!_6quZ z^8#_-2(JhVHan)CB5js7R(CRZfpEwPe0_UEOFK)Nzrm3zEYKX}1|aE)K@`0D;h(@7 zmlX_nm(e<%xsL;2V}p3h8!h5IQmQia45mohP^eXFCAe|t3uwrW8WpSXHNH5Qd~h*8 z;lNciRUKk&uP(d`d!e5gl^yFCA0m)UI2 zO~fA=>k}4hSL4?_XX-=;S>EuADPmveKBM%`-kZ_x5{!5s_h~!8daNI2v1);`uHH*L zN8!k24WnK{)ja$Q+ZQd{5xy{$fif26^l7mGCLGcJH^rEi$g%X*mJ%ZjFkU3`2EMIS zjA+oME)v%E(rXP&G)@~CF-r%XXT)=X!?0Xg;rtP@Mc5ng#0>Q={&CTkk%mn$i$Bc4 zz*xdiUgVVNi7jA0e_Q)KkX_w7?8A6ZEs{aJOc+>7q*odJDtBnCT{FBG5%LcZGI%#? zpO-Zkri|UA{p=~msPDM=A}@5+=%;Lj6RJ7R$9!7U02OcGikx4f`vn3d&x~^BJ96i4 z^4)tCb|Q|eoL$*-ego;*K6w(zG2YrLh`wjuz7krX>IoU%o$MIK@X_=@bkhF`n1vpat30y(LuPf}L+LamgAE8KBA;KS`Bo;Z>>P zgX0=4itD5JHU0}}=OHc0obD%|opv=m@_`3#5U@sQrs-}Y&-rX*PxW3gbX!o6hL{!xL>4^Br!Y zQfv%vmp8MbdUI6U2e}&(wjzm0%2_PrrB|)O_19p1_?;K~T^wOiJ6eBj@c#WCdFeSM zIZiFvp|C?!J$@ot;^E$xA1K^-54Mrg6s8{ZnC3?{jcodA}6uqDBh^T8@e(7IYt$DaqLK|ug zgMzL8^>aRUra|%ug%eK<9=O@NW}qF57Y@c=KKQSBwL1VQL!XnfuJYh)2+16J(RfPk z^#2KH)8K>2-8KHtyP#rw>c8%iiDtgsBM%^3w34pi?`K@x3PA zgs0Xx9!a;Re8V6|l{35q1I`0Mnvtzi2+`_1_m#j%e$lfxc1;+x#HPeh*9Q#m3XiLh( zm(`1*&EA0ZknBH%bw6GpQpW;$x~fo5Xv7QDWSWGi#m-N6R5iHGod}~-1U(&y43}Q! zuoRLw9jV@rxBv0>^cQm~Tq|eu%HKcd*y^oMU|K+a zJi1py*4pGE-_wM(%k#z{i-;pWEAA9MyR$1LsvHz~AbKZ>ybN9AuBi&qohS(%0-Uc$ z)a3)DW|txHV^&2ito6Xo10_%c6Ny_lf4ODgZ}UME9Q6VtZriF|`xGB>^IZMST;Dhd z_ZXQNe|uULic<>qoq?o(lHMIfKmGL(^5+?h%ViG60`|o=qdGbs^5j#KXxp@=Y^tN|G92bJoPT7Lz)ewlz!U*H)!JyH~Z%~gn zm;9w<8yqx{00{e?T~LJ~7-9%O9{`|U`bJTgKf@pquJTiBkT%#+WU#v5RE7crP^(`(J+uJi}fWLI|BJh`hFB7Z$Dsi~?I2k_eD z!`Zqq`Z<#-KEHF4H&wwnmmout#igmks(qm_XPHO*Sz&YH>#S~nt7s#KEBarePEEUM zi}u?Ynsd(w*JrX*GhXge^=_%2lAIQwpa{_wqm$BLr1UGc$8NAd$WH+~L@osKYXIHT zDm-HT!Zs7oYOe6-Dq5mdvybbq}+Z-8r-y?nV>f#0^Yg+*oDh! z=Joe7o2s8=zGCHv^UZ~V#H{cxtd4yAGm!%DpWaYxhQE^B72z<%nj^{9w6ihJ{`>6Uu#qq@3i_rV$O3vnHAZDE4Ppz6sru8~Uw$zV8{A2mJ zGlF(!;Ln=)+hdtVORa+heLmOLofwP>TuJbfIIwGybi>|7DLg5lJKDNM6OaP1>3&TM zprgzHg~WG@#b0RPYczUpINcJ&_gXp`dTQ4O7FO(*&u4P4Zr*)}_{Jd21Yp(X*7R~} zaB$%MK=}yyy403T3CRcJ73HjO5oz@)HW8lUUOhr8yKhRv^L`Ty@~0|v(X^5PvzSrW zFL~KA702nSzG0?#IBH73nYV@|IjG7R)?Tf1z?-?1eH~Y2?c>pI-s}-(ipv_~)iu8W zLw)a2P?t+%kXNPRe8g@PuzX;3g?C*S`pz;n7ar$#$|mlUuC*D74df?^2Qmzkhyz$t zO7fm=r;n%M6OFn!&9UGns|2kV20rGm@Aq)M)h7i%R(OfSBA%l*MBVg0MyD>{zBKnm zlicU_v9(9#AX7k0=vnI$g2y<-pF_Yr-!4XFrdBeSW=UL$07M3@r^ay@F#5I~Xz!kt z@UXwd!sKJ}g7Waz7Dxr2Xdy!^O-+)A#+CpbG<#DSazka!O|lnQSjYYiDI*N&-@lwM!i4LUfgaP|C-pgX0P4C3n|vuF&a znj}S0Tu4sjIGF=mLUL?b2`N+tjI=BmCa#no1I( z`u#K2f94NWvPthu*Rh};kQ0$wD80OE6+1(sCTH+WG-F<^WU(HHohD1)$@I($-rug}?Fi9yd)j1GP z=xz+w79M=t;MQJpo>YJ4rHgD0}MT}Y8o|*Hj~C#BG4YHqm@^_dOS#QU7ueFoJAeeX5L<`dm(5izQU<2 z;=^Vq!$5z=(MT}>6>1Nv2L@>mkp!WK@m({Q?uhC(8Ba(2yAl(FVR<$6V0l*Goz zuQD{t3lPhBVeoK{$zPUzB4p6F)R8(SgI87JCQZ9=CF~5$Xex~CohYf&9336#ulW?f z#&yn=3`vR$uKjHq1rg<>7@4p6smJpaDwm~e4&G-9YplHgdL1(S?hR6r>DYz#urE9X zi>LuB<7I*X+ST2?AC8YHvd4l)9-gMK$vtuqUJhZspn`^}*I4k8B5fKFc2xJWHBDJg zYrXblT_tp}6RlNe;T*%aS=mW{2D!ue8y{gC5tlNmm(h@WF@T6&U?B@Zm=49-NT$HE zPDi9ytNz@L19cGA%;>Ci3GT)23)_!V+rZf;?W`V1y~7Wa5#yI4{M6gAG!avXf z&hsJHXQX!QeUO*XAv7jnFHjtzojSRR-(4V3b{{-1mPQ2DJI{IOwK+O{m zI;It?w)dd%|G;w+W!%L9HupqRQ_5uSvO!)F{^llt1pi*BHrH3w*Wg4lPkJ7nzG<3 zpmkx?$>rZ<=H-BDJ2-bRG)&lAobo>lIBSI2C!gd|C*O$6J-pJ`VYESoFV-fXG4$>* zR7s8}?MSB-qMd^?{aVmR;qN7%m-@GD!T)2Tt#R`kQDxMVyP(_4uBdju+LHWFd5Z72 zQAzk&)a7bej~UkA_)>?X%ih<#{BU)uPScn(VFgbmk)8fEfW2!j)=TOX@-W%RKI++Y zMJ!w&#;y*xAkFkUCTdl*Lt|L$6CmfROwqTo^e_Mv4K+xjG$VxoQq^LKj5L z5Zap&KS`WRI+LUTcugmyJm?He5m&e_*a`%jI{}mUnd1_zBj8VJAkrE(?k%on(=FoT5)<){|xb zXc8v*WAG)ZKxDEp1QZ&(JmKT!Mf`ku%@4ojwoia8`sQD*oqfB`_P>td{jaYpMAzTK=^p5 zdG^)?n*z9!10Iv%n{O0|s8D2AHrMQEwFb70=%pQ;Tf_Bc;9_`x1A+(@=-$#usGoDj=%#bx4X{r8r$WMTGd7jf&Dfkn*}m|0NRP5M`At*MNI1eB z({#>hVDF%%zpgif4M$+(LXNKzBt|}RflDkE(=JtwP^az1d>8cYMt&EW1aV|#> z>n@TX(y^1zX@j#cQh+MO;%31E&%_)8?;VY(paK3pad*Z=wztTp*H@J_-J7&#FlnNN z?7mDTU(~^H9Q-@^w?0?KFN5^Dg!(boQ2J~^%ur93gG}_=iFFO8bL{dK+P+A8narjy zq(A8L*kB)}Vb)(zO0U(->a<;vwLgFL>M^Q||8U#v5I(F~g5A#Wi+u7yVhw>A3lUlRD&!Xq#3Qo2$xqJRA^kg6q_LFU zmj;)Gz#0kb8HFID9O5ohgy-+7vQLRL$>A0ztaBHpK;#!IyT_I3E_C63>A}}Hn%?*6 z)lZb>fOvEEY+QyluK1au5?rB70>8KjH=b%jB4@aCj+X=mmSwDr1D;)n(=(LZNa^|g zF@tn>T^dJ}a@l3C3_YIX&UURPYS{~JUKd9l$}W{Ls7Wk_R=dV>Pb0c;eYEw|`y)s= zs@C?hg5I&}IK&U!nYYGj3Kn|PJ+tOd{yOr_22%&f;<_+3ilXr7==wS#J86*#^AmwG#p${<15jP24v}D=@5keWP8JvH&t5 z`oQc4?mMPiJ|}b-@J|rX%HQ|RxM5%FVWwq}`bZ73uvlC3!o1qXF1m?>@bNkkzL6BX z2e4=&4O_U>VY@i&TW?B$@_ZS*h)F(mqC1)bXKH3Ja;EI=jJeK8g{l|!d!<>LNq{N$k?KjlxmF9h z0Q0j}icWf#@F-mG9GMsPaY6iPcqNK*bQnOT9y!5A z#oaM=#3*e2L<*KRi#u|4B!6O_y$hCEtCXw3{{v=_#%*KolzdSW2Q;$QeI7umm5E`@czWI#y|VzSTPxf52-#G^ za2QdNs~&J8Ml1@7NsU;}*1oCnMn-ok)OHDfeW+z->Eg0w1Z4R?I_teNPE23K7FLR% zfX1BOV0w>nm{JMYd-WAo%-qeidjb{pZLOyJ8>ewfRrY{h&M?|j#5jnOhIvkc*$*IA ztd^W@u(;5w^lwEYv<|RJWBnzt2}d7?*M&PWUQ1=qfiQ}q5Vpo26H1Yb;k7x5}|#GPw6QCLj& z3C70451~b(-h;gtgDu&VI=H z-=1{J6(nn^5q{!Q$AIu~9%qGkVOn!grSC?R@!J+7JbiTY`98+j5EKCn4(D90wQ_w^ zlC2|Eve_SUtu~8~EJOZiJIGIHRfcJj%S!a2-Y4>(pFkxXtg0r5pegh2Ls6o7b4g6x2rw{^CUs%LAigCY z;~Yf-dI+rYX)J+gTv`@}=t{nnIN9Ed?C7~*3N@nH#8FbS{Dl93pDHC0xY~@YEK<%% z8~Bi|ctES}=~}x!D;o|h0Yt;T3w9~cHXV@mGTEAgwP3 zIky52=J#%j=R37}yWSIE)Bi}j&_hWYaxyQ;+z-42@&R%e5mA~!tV^j|fJ%GkQ%62(+|6{tcF3<*1q6{|Qq@wwf6&XIec7ZHh5Bsx_amc4+=fek z5@=s4BWWA+Ve{{H9K&htZ>^lm`k*K;{_vPfOoNzqNvd^++ei~FqnMI2>{JOA1AWJ{ z96Kl9LOF_+h0`{rO9tRqzl~Pa6C--V-)dFKCJ#q+w*YtLF)-zx84RSISBwh!2?AFf za0?E!C-<08iC^T^t0og88V-p{n}-J>UykG$IxVA^F`U|TC8O~<(R-6|C>~z^+TgUn`CjI z;?#$~sllGD&gG-6@_viAcXs8;K#CG+UFyq+RfB9HR25=S249kjjQc@TTvp%sfYMrhW4Ie#g&18&RqG_C2qY#g<_ zPY{a&^{!vUM3$`Oq_4xc2;hv|0j1uzKqSU%o{&K$15`~6I7=^l&S&q3Y{EZ2@aK)b zrfT3FW1xFeY4PpR_dB{h=v_Z5drJZ`yq~;vO=mV_kfN5z8{tEg(^xm`lKx;Z9di8p zrEENYvqfRkBbkv(gC!FaEODgyvTQh1gh1mF-74QQsZQ{aIS40VL5v}F@L5YwlTEdT z8A-#U2>f(*1CsXRsIkTnVtyyL>tdM~!j?{eP<`N7z*#yTVciR#>NZu4r?eenZ_h>d zr6D|f+a4J?s-nA#5w1DW>~v_*czoGYI?`|(cRaJ`+EB{_^x>X?R`5Zn~ zF8VgA&fYpX3JNmJ!Q$wmxAv2e8Y{qrR1%rP4%LI%kZ_}?vXXW{{_3R@*k3TLiZ9K9 zSR~JbOddEoy>&D5mECq>7BT%|7huOskqPMn!k!OD;+TtPu^A3g&fQ-1xq}0xD(G+W zBc`2)yrG&k16W<~QGzlrkx}Wo)qeJ$BwRS5Q8g0AlP5kQG`G(?p#pX6n zYTt}M3ybZjRn!~4sF|XicIi%Lye?-va^z%eW?L?QD3>`Cs22mS6{u=w7!_6XS&;TJ zI@O0WjjVzqGa};RjL2aq7n*upnBm(bh!;>T4CJ8r8J$!v3V)owvqDknk`NeU?u--` zCQxb)pV|x^?aPZKcraFEC!bD#dQLLKFR}|Xjvt_pYW&piF)|UR>Z6SPM7vd7Ty(6B?6?)>-DOMqGw(GF zW9C&!vfL0J&Jt8%^-?TH{;Upzx1qLuk=&RB=Kf!L>=THJ1!^9%hj;vnA42;6xu_v1 zd`)Z3{pzFkUrQU!VfGxW#51eQ%>3;>G_Z5qQ@h($VH?gWEU1}CLl#6bjLXrxkJ+X` zHlWIPkRy!7uf#L?y-^9_{PM*fBsQ9BT^`%5{gy4e;tebJW! zVeLJ5(ppnrVtdXj6%)M3o>wB*Ux`bGChRKMl~* zZuz<<;*8N{hazS5yvfHN>^d1fKv5hqfGNozK;~TU5Ki3&3YYgXJ-c9gJ;)pyooh_K zWB4*;51~s^^PTc)S7^%R$urv3Uyoxc;T&b%L%vU&J{sALb_WsaC;gz_&C~6_m@sSItTW$76IKK17+=sgAF$g&_O1&V)H{M$p9zft#iI38AXCXB&7XBIN2>yh-WN3lqEWTA3alg$ zzfcX&rK9zbQPH>V`Fnthv9E*ZEc#B1rmKFhlX4_y#}$E<%ccw%GaIg! zdj-qo6WRhKJ^d5-qk96TEb?DQ#Gq-P{gvuV@xYXpcG0E?l}N$gf#0qVc=dVoK=3K% zQk72d%@fF98PfP*_rf?=ER#n(yeZh;;~E);-{1h)vG+a6*)6rI9Wxx4jH zwr?C_kIxBI+O;Nn$+}QD5eDK;ec`CS7%TH}W)tN9o&0V{+7wZt&k`wbuNoY(jDG?8 zbSsOo^z42r*Dr?@^zQz{4IItQSrXuP84Iz(fuB6vku08t0bOa3zZo+QVoj!>z`K(< z1-$wZ6yuleX)XAV)G1lEz`B?ep4sFWcfP46bhgR=IaVKbJlw)j{6;&LHrs_pVDh5% zy1W=#|L3C~-p`Li6O#=KgxIGLd;H9@J{L;q6K58e7|9AEm)lRWwVTd!7s7l?ZtnD! zPo8RwmjwA)YXIseSxV1w>_*VQ75=PtnOeGTMEw5%gPFspC@o)$T6>onc56@bR}%@f znT1sjm&ZJXx~eXC2d$uFx&5u zw)s_6sBzNi0C!(`UsA3C=qq7~__oEY&7+K^uou`pZCtrtCp!HWrf0}H$QQ18I>1#{ zP^7zX_z|2$lgs3S6o5~2uq9npe)9LrmCZSVL2&CST#wu3awR|*lVB@U0OhskZe9rp{vX`mU5Qz)-Hj1dRf8h51ZeP+kNui2U@P zh(#r9sb!|K300bzZ6iOI$XwTxYqEXS1@JW$aDQf$_i6Q&Vwbm1f+l<>F#B08dRD$_ za*&CvMIFEjfu4{S0h?(sF%wzumY$g#{L)=3L*nt}+vRP@N>n>Ao3ziDGF@!AaIrIq z_=VgQYL&AMd?f-;sXKEzSD=S|_L5hT&Ill8f83*8>%POctv!Rha4A2GSqm~Vxft^t7L{bX9R(^ejeUu zKn6CzE;PCvs6>tfyAHcNv4j8DcFPP90vCYRpqY;H01m&&Ry=Gm&Cv=xWl{0B0nh)R zNu$1UQ`!AdaF;~oM;aT)E*h7NK11k`Ki>QE7biZjIWx^U=1brxIG=Kl+jL z!kYSO){h<0i2?3Ddo7I&+1^*luhn-pal~73bep`MUc-L=)1KQM_*iqDa+NtK32xqD zKc3=pW-2p=Z`_oFpTMGJ0;#Ut?D4LUW)^o@8TNJRgYwsT;Gg*I!^>|n6P8a&RKuKx zESyQ(S`X2oqD!-wH)+vC)YDE&{p#h8m3>ZmBfvjO>7BirWaQ1n~zAknknBuO%g zs%G$?-MP4(49g?@oK^^{`#Amb%;dQt2Zf>aT9uMa z$wEp9P)EPbp{1w8(vMgzcE)=*;ZdlCVa1tm|F|AX`YWl+br7v^tS#LdV_g7liKvPA zCVnpVEc96D`^PrmpVymqi7E(J%wz3sw*@xDj^G5SdfFf;*U>?}uuNt_Fl0$p;P&(b z!igBf!h~WZCP+UBdR?sxo*um<(zD8NMxRFfK;9ajuBp6|+ATN0FiV0u$y~s4uDH?~ zf@M+O;1{rZeJFdfpu_#+JV=iP#=INhq=Fk$a!p#8YU&7gv++^}kJ1h^H=Vd`HpFBF z7{*y7{^j!kL5CuQ5MOEC{mfQ>WbqJOuuhC+4;#Ag{odKdyTRToCq`C@U=Ju!tI;B{u7 zR{sEZO}C*@jQS@W?}nEbN3_zz;haQn=dGh9vHaMdXsM{;=x)6ES}qru3TZ-cQ?^^- zu>*vl9_^1S7oIQelz6$3wTH}W04HP#FDi6gbXy+{(=(tY@)zp{cC76J%U@jbaqc2A*P)&;Y(*cWFlj93e z9of4BOs|&Kf#Up)gZY%ywGgFe3HT5VZv!ye{%yqxQo_udkC!QQg1bkQOUJde#1MF_KO6+pocUI z*U2>BV5?Mlujn;bL48JS_?UsCVFiTa z2+iuhukakdx(DBv;86Ts6e=-=CCJR*kGawO&IY>_W%c%v<6Gz)wj^+^!LnQYO=4d( zGPw6xF;70@Sr#?2(XLP?wO+_Wt(c6*fV_9So6c`(rw%g;1>BVQ9X~L84Qx_6-=lk{ zQuek#3Db2}H$^HIK;$mJSx77Whab^R`69Bnjr0R5W<7%*EwfigHE#t8&DiR}bXC<< zxjZWV-9ecaQx@B| z)a4NRFo`rblfzO%k8cePS=8mdIk$%fRQfs6wa;Es@WKF!Ai+`kA2RfXL`AqZnP)DlxabJupWZN3Q7m3I55Z>Sj-Z;G|i2ZnFfQX zdc6?s*@Ke+#ETdQ#M>tQq|PfE|ywk4p^JfQvCl>xnIg)AB`PN0>PE){rb98bT) zm@~MoG@IEthSFShpUxkm7Ip=7lQb6j2n?ihhdetykv*Kv&8Qrum4lgUpA+;zI*-OZ zEI~tny%*?+?tb1;u$iKh>R%t__{XsMkpVk!qbvpvr$Bz(IDHjgI~}#^^J8d9(GATQSOiOfe7tR}@HHlFZQ*Zz^pcKVzYrylG;^qjZ7#RMvl261M`9(MTKhux4#A?1a%KZR%+BEr9^Pe1A2D2IGg zfo&_T|CF8lIWft6QCP5mgfnf=_l=z4x%Ian@lqBLuKqHJ_4LQAukr&t7knBu*A8SD zoXnb!SH6(@3;66Hi+%q`6?535YURuG^n1~zkzk>UbuW=LLM=DXtb3sZ2%X-KmRj+} z4EUEQjhp?`hkV{k+Pn{vvKP#U*9 zGHKIUP`M-H3i-x~Cn8PD&~57HhH1JE1tdD7-98Pd1lSq4cbg-H5o?x%P*$`7Qhj6@ z@bC0vMw8LF=Y1~?6u6q?7C2pgu@-@YmY?wK92%5h?vh%0v9uueaBovJy2#}_33cuz zNA%ZMD&r2npfIdigK|M)NgmRQn+xShZjxn;C#w%Yy7mV7q|cP?B~70>#aKPiE2;g6 z#h_1o&w6TwNR%;}CMQY79{C8Iq0%S|EL9+w?MxJqVZ4JaOWw6Yk0 z`a}G5GukN^<}Z#`j;VAXWFx6cr4wBE-CCmHuKXlBq~f*p! z^`|3(I*Wra`Ey!OKHjk&2OTJmw4i>JeFa>s4myODHx9Qc^KhV z_wW12fd(Qg$-osjZF$>D$KWy8_MD4?7;?uz%*=Iwpiy8S7U0F@b>8KdGW^U3{oI*M z&rQdxhihhtZ*U5Mh+_49$XWE(M0*R*_40BA&k@6kwk7yh3qqlC7#mVL=E$ml?@w?!@ zO$0~+cF|EnNYg4MI9z#`9bd9u+{pd`A1N>FiV4pBr+jD6DaiQ7?!S^_Y5)GoxL9#d z4)V!Ei@eMsgM?*5Z<0?Gq*fe1{9@QiyiumI#_vLi(-kY8{uzq?&WAYwlshw|7>kYM zIxwwIcXDmcJ1$-X0>g;T@QP-aa_tD3tIl=ehR^s-!BM-rRjH2cDTuK;P5#m4UIRQ1AF8n>{bOcXHW5p zVl&AP*Tg0fa$?+~q!_>HWs5uMfCVVkZz29+m@5>|iG%y?t1@U0Z27E7+39XjO8KZP$>O6-L8>&~BnNiv`9%zx%n zy^_2i5NL6A{=B>%>_b6D{-`$OlPtCB0em}Jv+lmpVpLCDo3vmFc6R+;IP1_v9|xo$ zDhH8U&M_(n8u2O;KjOG<6{jO2Z5GYAbO>GcQUXu;c?^e-+=|6m)gsF<)`?cHH@+!W zHH*<>kFDaHWM_&x;xJDWX^sJplV*-Zx{V0d#@(+-|zF9$|YX<(vZx9cQp@a7TS0J7q4dF z_**+*it}zLeTi8^R7@AN=q*$`PM+SDuXY{cP#^(*T~M>N>oXz(T?eMm5=lKu+vpXJ zQ}pQ~dRMqd_Lg+AaG4JT4a)XtywRLF1w_r4Yt$!@t7~3#uTfz$*oy~_RPN8K2{!rL ztF|t3^f07u{Ng8J(UjZgY19Y_K{1hJBuGP(3zdb4OJ^|3Uvum>(IqUhPJnZnsc-DH zKDH;*?KbWPH=n-Oftk+~b3!E?5T=e$bvnQ~hWKiVM(PPbp*{)BG93)pj*bTp>sJeY zEDQi3nK8q-YLKCg90w1`a|Kl<7{h8k5y|rh_sW?7U*P3>O=oJPBcNNyru+j zCp>+|b%`3lHq7`=X9tsus0@LIwtf^`mt(lA2zO$B6*}tFYhc@dDX!TsdO}y8snx49 zt&AE))iP41g{7Z-BG}xC=mro+rkm#KAE&93m>!L61vaB!V5$6FMv>2?=1G-9AwT3A zV>-zV**D5#{GEsZz|DLG8D=nOwvV`va)l)FzV;;xMD-dYvNHMQFU}ELl;Gq5UdG@N zY@Q_g;-08L;FVRq{pFyQwH+&g{dp?^0C_4h*&AGUNv{SdYJ*VENXCW%xI#m054&Vv(sRdo~&~9XI zUvq1l>ypIc)2WN8?r8kF%(JL`FxZ+7S_xqz9X!9K8`g--LKve~jYH_?p>njgKNzun zE!Te<_9P)tMP9%%%Nw|R+j_L6{Q3u|YnIKMQi&@y3ZQR;+?@Uh)MM9=x4AFSQ+%*t zJAn>V?*qH78_qm!W|t4u#*O_u!1eLvEsuFiGZR(^G<;8u@LSDFB8sBumA~v@OvP(j zC%vm%CJz4HW)|y*HSIf(3~4ygJcCzQzp&AniDY`%+f+Vrfi+?Zm|idghknCn9+kSP zdSzNk7bz1ndKIOF;eBwyb=%-xhOiVfW>o=Nx2Hm=s9Rqr%#Ow)l#X6*qewF+%7exT ziLF?!U%FVS)`HX3oCJp<41AZTz6qc&Cw0>2)?}@lNxv6&eG(Q2kzJA&vD#+zx29Di zkkGf#gMUl(Q(drjqK0uJ9P`ZYo8k~PH6rxvlB{@Ez)wq%bN~eO2a3`<}D= z%b1jmuQuz(w3TAT@M-KWA(STG7Ll)I+CLbx)G@XyGY%PANI<*gwya*31Z!6Z-W|_P z?PTm5Bpn*~xNx7^g|0}DZNcnhYAUyw#9$Sc7L8oBmo0LFa;*);n7WkVzVkl@{ZjS< zShvx-`MR0FuYewC>Z!~4*P{L|jSzU7-|^dBQQQ@5CJD!~H8>#K(qv1hnZ6x))BMiV zMHjQ36|jn*ugqB#!dI6}!B1Gp*7g1eHo1kfLLlEk(KdvJ1`Kv-d41jG53{V3rQ@QUms*}-s8X|UQ+ zvf@@zh**D>@v&&O|m6TV&GpS58!(!^Il4xMK z9Z*e1mn2QOVk~018eSlRMG}XOd31bCQNK~=y;HYP;H_rYGy1Rs-9`E>FU0hn@hBpN z2PO^1Qh;GazoiS8PWc=3cg?^N zSwRS-@cP@ML;q3?R2U|1fBX8BD>*GfJNbygk(O!weoL&H?bwDv)4oNbphJC8Q!Z9_ z$NYDB8epA22?xa-#%zpB;Eh-SGeFG0WP`N%9MPO%Jan7<7sDCU%1;8kqcyXzy}2=AW60;bd5ZWt$D2;kUrfyFSk}k(*_iqf5*ZB> zIU3m(-Pw6y$j=7Qz!nSy?uXa!UAI>}a%>nN?g>?x7A8HsOX*>Cs7`o@i&<9#tr5Oq z)k+#o3C{_Gg5%fjc30=NEsn5i@;KUuwL@}+oMY=qlaID%6FTk$YDi4{iWu9HZ|>Nx zfarg{RH7(>20%(RQNMpYOC!f{h&%x&p=^FAkio$pfHyvA?O-`zAhoen@cEnFO>gj? zr$Z$^T#Pa%{jD$MKG*4{ZgKjFMGcU0OYL)U_FuVYj4sAQ)-Y?yUzixFwu595Ku+PP zD)muMF_H*g_s!LF=rz_Cqbs!!efSD4@@?|g90N`azZ6LBsC>KDuxlUy_2`utT*UfrNjSyk+p|UrXR%9y{sy-Dq2vJ}Jkq&LGi*OXR8RMC<`jcLWv(zBpWn^jMvN4xLyWz109#$Rxsy;)?a@+??`U-N^A_htQ47I(f(hC7)?m*k8*31;< z4ZNbgagywX>xl2Ih@NQz<6EQ1EWtXzMfw-)Mvpbvd_rrnQ@UN|vO7gPL?KgJT`*^k z5(59Vd==O(>=_!~S}fG&Cv^mLiojx!zCeoy26n5+P|z8fAYvC@F{;gXPClCJsJFRP ztx6_AsS;Eb+R-+kUe9OZC}ZO{b~dkB$SwUDFMxZpNhiJpvKdPwK89G@Q9`?mEYevz z@#HEbF5ITeahu!*E0wfIL7*FB??S$|Uh=WBSNUK9V#^=fb^fP8DSrnsCZTB%g5uF# z)4~JPb!Jjlt5e1=`CN3F5O;wDVKIJoVXn$ct%h?OC}q}Pz$yU)!Xiro0}i+`e#dL7 zGbphU(*NQoX!$sOITDe&%QIYv7Y_p75}?E4t@vhpqOmTY-sl`l!zgKgpEq5cjo92cuANYlzwJ=5nL}mM9Tt7Ynszh ztD(d1d$UIq;7JTYB=|I*CGDk@od1O@qd}_>5Bq{!y`h}=G^1-(+rE)RPN;(iy!e&t z8L3$>cc~{C)7O20zeoNZ^|9hlXFNyhEs9fT98UR`uQ4TfK_%_eQlFGiznJDA*p55h zQB8>z16@T8(mXZ<@+{_ChZt^PlwR;>FF=}h*DKvw0K|tEy}zql|M2_HY_F~%+C2Ry#SeYLn?%ykT!#;TdZBJ*4qqM~25;rVuUJ((PBc{IUU zzk9eDqRnD|M(h&LgaayKwRYYY-IS|@XRyjRXF#)h=Ve(<3C(HpKL#sg=`SA(OBz-( zxnI}t_4Whe(???LJ-Xoc6Ae(9*KhdkU;Z34XhTO3V^~D2+?3h$&8mXqlCs)Tp0B&) zXqB~G4}J1Sm%(~W{mSQFr^sv8g-53wM{0DLEX4l9QOUSYgQ%10HK!XxiHLJJYH+I( zcO93^a?aTf*;v`K46J7Y@L?1y{IX$ah(2k@zVY;&nv1=+Kwa3e1E;W>T zjlgXVzqiaS&t&7r63!+xVa#i1$by+~$RgeuNDbohh`R2P)kFS2v=Wj+reAoFJx0>F z0ks+=G_Glxbu?npEw0}sdEw>JW~gyF$Pk%$Zf&xy#Ge6`#^;JUGXSWYLdj5OXzFauaenIqj5cmtYnZo2pkUipP0CXS zdiLLw^7VJuH}n1&l-D0~NX*LK-zQTWD6s0@b!rP2DL?}H_t5Br`H5iZ9Md#6B1r3IFNd zH4*QPf68L|s<$vl44a1jYt5G!o7vCUZFdFD99TiJcO?twQ3)<$4rphYK&r8#NQ>yq zX7!J~c7*8Kt;kA*0w}Q|E(n1eA5N{b$;G{^?O)liB>sf>onziW8@v%tRPA-{8g7~u z7!4KZe+7Pp<;Ooo#`aEA7wY7*XKcOnqcbl*F$N252A)R=M62=}f8a8rAD(Zp`+F

    5!$cNUlp3f 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 Z%MOeozq=>IAo#)m#oF4p`e!C6xe!lPW;yHY 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≪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 z%0D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⁢HdRFOwOvn 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ν*xX`} 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 z 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

      h}cStM`AZHVP28 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
    1. t*VRIBUU%%DB`jYx@HbUf)8>Eq8RtU060u!} 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

      P67Zu45YUVY!q)IrHg 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 z%0A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 t&1AXkO0)pFT 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

      OltPoa7{)q0q&7qrAUVx|!W>bdX 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 *5vXLw9h;Pthj!DvV%?!@L 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

      !sBO<|+F3Z&~(fKN>v}kU{aL?}^$(-_}{oAN3 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

      `;FoU{ZVkmUw*^%zOrs!@x&24qLW( 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

      !@M4^U>c)>hSpUT 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
        Kp(8rmo=d#lat*O1RxTm)*x_hZ+N1u8k1o` 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

        He-Zv3h((&xpLDTFWUU!n6H^AqSMM(;C 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

        hzdXn?Uw4+3Ked@+ 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�KpTg=<|DQ;&lxs3=!DMBnil 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

        >RXf%JaVB0GA(i0Fy;5!Fe<@?v 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

        -*HZSDNr8KF?6_Rf@@*?t(fki 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ξ_$1UGuD2ixMfK_p)sm&4(# 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
        Of@t*c-sxLTL1i% z)QDWjD7@S%zoE#%wOsa1)X{z?#czeb7_EfSX5I`e_yXe6H$T@B&}v`qm+b&&Vm6)~ z)MK!+Xp`0GVpsq6Lvh2CU&541sDZK9*vRrAs|uO&#R^jkm>uC#9tbS;;J(D{$INZZ z5opWubaBR5=m^jd0ABOufcQVhd|d+vieKr@Y+#tfHxejcB2<_Q%*K{A5dq8m0?hZ! zRL58$ZS>xy+Jla68q~k#+sV3d5<#JdlnB=zRD8E(`ef?WZhbqC*oHU2Qq$Ss8-%%q z&B9xn16eRKL0FsOK@J@QNhc582zUC(8`r#k(?`M$ZIqFQlkFIrkC2|(V7eMYe9~QmEgBhn+Y}Gvp#NZhAHMCG4~*3Fn4IqO+AZ>Y~QDYQ#9C)8QCE*xvjs{ zp{B?V(scyk+!9zxgs`)RqW^cir;A01WZmbf5ECj_xtP9}XQC-Dbw$la0DEXgm4Mp9 zj!)1bri@5+qjyhR*TPx*Bm}zaD>V{=4Tr_E*Y)!II_7_*;4yubetBLWLSz9jQR5#T zwRj(bvZ3`9C&MQ81Zs4}C+LM_s}vaSQ+y6q`9}gPBpYr7XKP_lD7qqy*u$tt;;SR8 z&X%OOHYRRi@Scy}{n8dzT}p7>q(nlkhFs0w0=xtuJglwtWL6s~j{iSpD?7>4yKq{F z*Jz+mhf%zCBd8UePehIPwe7taGGU3?RgbN2vLdk0H#?ij8tgsDFxMDWG23*h)EW>C z3S&SRC?@TUgms}@Z08o80g3scEa>gc*b#K|ffUHnWfqta3Kn?vY47VtQ$1%L?c8<$AlJAo6P!o$yn}0;b3E z0p@?N{l;r4?&hVM0zE}h3@AT~!C!WJ%>>j$ehR43{aIdXm&F>l#HtTONud1?MclN( z!f6N@mkDHoS+nUd+1=;B8zW4xKj0NZmEe@fby5shH>5yn@_#w$HUVMj!|&so0;xu- zEc2gsPBBQ=Q<1J=t9g>fK-Q&@`S(Sr95=m{XLSYP2`TSmcw`uxPECVf^CGby(h)fg zNff_yhKA9u5x`7f!ap*C{Zlb@MIamNHD+=9fa`hj9!>c?m?_Btz40$ntW^Z! z{ButDi+>@=z>lX@@%VmiEswNJ)L3zJe>reA@^GtEdBl-KI6nr7XkxL`(P6?mwRT=hpQS{%)s&n&?pM|7a)zQ8qEH1JcK?S7@{?jqjBsob=?2T*M1!Y9uQvx&_Jb>Y5N8 z>zOITwwD>YMZ;SESSReb{pR5a`F91eXqtGPqyc^1|f3p_(z)h&d z=Ja{I3bck2$F(sYUSIyIpN&lz!^nWJS|>~6=OVXR;1LO1mmqPiDn>|Q1~tnBA zt!jCIC&QjneQT~42zJ&Nbc4Xd{meDvZ1Kzo0&uYGZcJAM@;-7qA1}gjoz)pt&|A-P z8l5)6DlgAy@@;JmqkA3YtE#3qn^_djEy-!6P$Zw-hYud?#egZP{3gR$rZ8-P)C84G zMfTr)3cbf})R+1aS$PqjCM9@5PS6cr+*!c|Db~Tg3yVXs;F+^9$K10%%1)cJnnLh1 z>r>g3V~U)YVv8Wp#LSXxxkuQ4-lImjJaSGBV613!d5w0n1$Y&CIBP64JXwzH;4^rC zBEy+|2a*~PAGC@17e#nBmTWj$R0(7FmKw%`8%UhwT5#gHJ$oo;h_T|(T7NPdM^nlP z>1qwkF)l+--~Sxs4`iro;2BEA4j-YEMUT^^LB(7WDoo0Z;KBSHJ)tm8*~=n-2#171 zJP*=_awVBgMGrMXF*)ij==-qV2vDFb;Ku_w!<+|^CXvn^qSfTKuekntNbbCZ6tFnH zT`*C+90O$=^A>VuEIK|G4itmPxG;6O-}NN>8z688lo$I0n8lrrp1kc@kGEO0dVwQn ztS%ij*=d7|YK;OXr&iIA$V|pg=T#m)N6PT!Y}Ng$Y;-R)dTtDi=!!Nmmm%=(D}M-g zdF+4T-&w$7Ba(^sg7iWH8Z$De!&v4B?pY!YL|&xY==SuoQb zC(=X)uK?Ps%#b7CB!C-xLdg%GRP;H)E;O=D49yW0V2kL{8vwqO>q+}xG;>y+x`A-# zKf}&Y6F(WaftwF>^Wz5^<77?E5In5<5e7l5K;%m_r7PV|Lf3iV@oL7Qp)h_Heg1({Mu zFg!(Q6sjo~De;NdqT_J_cCYKVhz=-U!xeKp8W7u*faOUJvX%^1uD8cP6OMxm>SR7E zq;xR;X)qJT^h@N=VBLlp!#V9g$4N&q`jMr03bbxS<-ro^XP?OSis7E0|;^)L_4#*)Jd4APt7Umt)VRy+?L z#bcWLt&KYkW{THH@q5Dftu02pT~V*lL?!fA5Dg`mi@$2Xu+vLI&FnY;4}d0fq$d(H z>2&8`iOhLEYaHTf45J}FN$O%^E$5WklQ^4-#Ml(PUKRAJ=}k8d|B!vR$YDF2g$83i zF==$3YaJ@^#QzEA;cdyRe?PaSIf0B>Pb;u52RF*k5ay$@uFL0(xg(bPLq@z=W<6bI zU)sMOnFR+uoir-*h$!g_a~~rr)Bf8M0sQOQlKDUa zt{)66dRU2^-L3JEA>>6NRuX6s=WESMUt=Fm>EzZaDFl%J)%u!}{2#cEh0*6XxZpa1^YAel!1|~~!=Muaa-a|9)B~9yRk6h4oktlWAs$i_mR;}@42n2H zC;9d5D4V&d+aLkwFeyux_uw;GR8VSRCt*D}>maq}|LW;XTt{Dgfjkm8==Cj417ZC$ zUwv9~Ls90=YZ*goDF2red7VxVoO%0Z>C(d>HJ3OC;|J0>EdvjfO`Ple+P8Fl@@xgy zmGrBP28}Onc=xnk(l-_b8B?(J8jkk1&&rYIe=b_rBKRwtZr7iiHB3fFQrXanspIVh zLjN)JZJ>Coo>!6J{)P<)QFTDP`xoZ9cTtD|3vG4lp|b+TT2k8dYJ}%DJPPYESb{a} z^HS1=8IKD+hoVtBJ90>c?HInVh(r9nA8hCVro! z|G#>a?tJo}VGVwC3}rm0fx zTeH<{F$Z-IjtowGQae+%BAGx(`u z0iFt+QHVwIX=eW$Rq(JUNE&w_Ye;7s78qGC;REDyKBXDCv1c$e=qm62aWG+AJm0nB z{L2gNu3cgmulo)IgN$f(1aC~2ci?)*YcsoIBBHV)$3!AH>0x*N2bHRuhWpqH4S&d{ zy<0)=ho1}XqExu2M=~dg{@|kXWjJj{WzOv%x}nd5wyXc>3WZx*F07$`mJ1O;;pkB&gQZ|2XYp8(NsxCbVA&|U~ zcrZrzll2(h9(vD2LpemJce>tkWH)YtEOt#ZJ05;+I)OqCTymRL#D{s@C&faPU{C7Z)E{nFGVYtCoPZgYq%(^P`qVj#PA6=7sCC>#7eB~ z@$9^*JdrLSz(D^o@@QA_FoDvQ|I^|Oqck|bz-R+&1-_@U&sR#%2xy$@wU%U&_T8;Zx z2s_O~ogXMIly6x($){26xMkf%} zHGHyfKnkbWJT2c`J|hj}EAYc*9Y=xzp)HMYh!62T>`+>GFw`r&h3Nd>EV?LNQx5I7 zM(OWoeN;)FY2<(SHjdNy0p@I4%FyPuFOM`*|3(ivO9tRuAjN;&l$$;{5hyj#)&xUP z#&wv{qsd#`n_!IHFQ)i;`j@_|9L2-R5waubKzZ2(Ntnt-fPFt1E=>VLs)8D)Q_MGm zF*Oz^*Ee8vS{DS>4Y$7^FF-Y46(OJA5~ASRC@Vln8zdjnCZp=CWJO+dAgo&;sX}fg z&t*hz<3Bc8e~jnmiBG{-!t6g9n1p%NOm%!Fz@Jh^9!#T=B9U^3`h7m4*V*~kZH+W! z31qN|tl;Vf0@9Z2j%(mJIWw%8{G18Zkiyw${w+xQP-768M$Ec6^GR!l2i|X3d{e zQ_)YpFGQ)UQAmeQ9cTxzDt!QYarD=0CaMC`?9eZTySrv;HqhwfA_q;Lnv-ie&{@I0 zzu`}}R$dW42>A<*ZBp^k<%|TA!vxr6sxL`Px5}5@l~n}Z^$q3`l*Ly+&Mia<1h8XTTT*5wwU~IrPWaN{j zVb;^4h~J{W+or5nz40U60AKc6t7w(*=Hb z2_kLu@WH8>uzN;+; zMo;hfbEOqqfy+*@TpX?)si^g^=5K-iGdaSjpcILL2C|G`%P*5yG%n`XDjT zCwoj2n|3N23l~_`>F5Hq3B(Y4cC1;3Y zDobOS(g|fVOy(7znP?WS(}yQUwZ_70Jru@rs<>gkwtx4WfmuNL>B~6u16#$jnFJ24 zCE;r{LgXdzcqA=}p31Nzu>&@9Jip)y`Pznd1lEVCi>5%%J#9P4z2jYjT0b-d0w9E% zC1gbJUiJZ`Akc$zio8s?hqv(KvB@`mw5|hpnEum7nFX*+e#ATPO4;6TBab&Yg*0 zsLk_i_EykIwag{}@1AgGDf_2mGJ1~7C2fhHHe`%ec_=Aqj!&V>kV%jZ9T`9=hRewm2DhjxW)kX_C+LzK6lk+sb}7l-mxlnC&f$`v zY7M(O!Ha9S+gdt(L-a&a6e|jm6s_SPjmm|X9c@v48B0*voU1D5;*$y$aKDbw=+pEC z=efsfyVVtSiT@$e#A6Z6CV|_az}s>exV+>u6@^$EiV)-w`^j{7rX- zb~!w2U3@xLK|GQ5R-$;pL1@|5?DW}FPQi8T3I*dBWzv_0T3#it+Mdf+_>EBDhK+E9ElJ1LJWgeStwH{-PW@jAUgJQew*X=(YBv{L z7$5LI#m$of73`C%Hm89^0Weu0UEP96@(EdD40ZFGFqdSsV7SiTsJ&u>mcWr%#aH)I zdr?HPe;D#8`LV;CHizt0hc=tl?z*`hQ|+&~jO+6XFUgy7{Ys1y?nZYSuPiG7E_ZB`d1>1)vG`aK^yO-6f~r3@kKz`tNTZUf#Y*8_IG?=zLC}n|gaQo9fV6 z>0x|o=j3jfA6fr)Jz0D+np42K+MH8o??_D=R$as|@H>c+F;u|+Ld0nF((vGYP z@L;OsYH0%ni6&{ljcAd2g&gn2~i1dr)!1=*88D zp;0};YFl7xvZ_XTx=x!$?9tTwe?Fs5b*Mx>B$hT3aBLrCMU70A0R#J*-aRU|rDwLq z$PLDZbsL}W;X#@q2m>Q6_|j4S<+KCABZ+cJ?Z5|qfYFqe7}^d+T~eNo=Fub6+E`h0rNOD5`HdPzsfxd}Vf_yWDl)&i}K^#45%7We1NtDLKq`St{qH(a*4bezE158zZ zteUj2U3VK#e`ntO3@!Y0K0P;uQenL5qK7}(He^d=>O_r;?JAUc;WezJn1}3c(1DqX4q=r zY62O*;i{|KhKAtOqKoU9A~F3pV9U^lihFV5oWkytNC!1+RG&dfXP+3mpG8elD)U!% zJrQxGM{bEa-yL_-Sk*+*G1Gp9FAFf zH%7E#RqWsrnSm@H_3{%k`sA9&S75y!!5xqJ#ttjhL#ZPWKZ;`-;GEA~FC2a*DJFP- zUNQa1T?D_KQ{&(-Pm;_!;Akc@T`oJ32>4cSYt8DY)uG>xt>E%^T(`}fTY9PY)sON= zL&gz7*v1yt`NEr}Ih8Mh+vyJ>v6-yCRVx0I@}8;(18OH`RnvTWkft(A+>jrSXA^PbAy?NHtrz3Tb zzf1BYP>*}+_Ez!4YjF%iP6~CE_O|CJh5!Z8pSy6 zjMbY4r(;-QUiPD$;}8#u@QqHzL;<(b9(2-Hb<7~>CdZE9&79jwl%(n!@P$XH|`_*_hLYi+M8nc2+|j#atiYvV>Dyg_vFCNk$PzY2l|e{ zY%tjY4^e#7*AHV5Y9hMm^+0D)CB*=};$-?d7h@MG)5O1(SJRyclNesP^h5{a{6+67 z|0+fM6IQp*iPks_GW|TC82V_8ojV*>*q?o#u7u-~I%FWAz1b7BpCu~>ybCeUpD0w3;;&KQO5R@ zHbX{Gpk?dj*&LIVb6~KC5tW{47A?KWF}y_ZTZ&@ETw`2pz%8kf5TzI`1-dA%kmuvf zMvRgf1goBY;Sqe~i@bb*-Q48Jk0uyw?s;Wz01B6sty)$l*}rW~mEcucA{klZ$+!DcQz?k~Gf@J#jr~g%2u! zO)EOg9?_ySqLLE2%qewc2Khji`VLq!%KMQ1xbm}8-0}BXlR~qPXk-)@TGKc@sWYH{ z5QXkFj>&H8HN_l$yT;1lqi(%lkx+r2h)#2hB7z6ie9AbwN{51LmZqo3Yf83drX5An zq)~UMyo-;QzDooLMk>2>v_lO(wDzGZGCpxtXKqUP>|h@G^FqphN`n()C%iBRl~BFd zkAO@tH$?0k{Kd!v;hr+DTS0ffBUbPj(dky57^IP&#!H&m=a>bR^z zl8Gzr&I-f*3oIe$Z1yDQLWxP3S*W>zbe(Wvsha=j%1IQpUwN!-DHYgl{fp7_&I1t0 zRGb>Sv|=w|H7s>Q|j}XDlQk`dls>U7}&^m6^Vlh4X#9{sQiDWJX7P*D}>A+p-2C!h)@1gV?I$C%&P9KL1$zc zh}`9keyv;TpwV8fm|;V?APDA}7tp!atHyFAv}^q?jve1AEFU;R$ac(Ld@nK7qh|47 zwzcp;DX!&kDsm33%(x!dG=DcU9i8;kRAaDV>*35EpPa1-0F9#M)<@jymR36Y1$F;6 z91mV%7rtvI&H=)mjj{+jNWwe(>Wo)|?XR3~h4@y<9edH)VVl>Nz#I!qru209f`s)s zb;$h*A*Q18wLphAy_4Fl4n$gEIa@)7yipulWNa)6)F&ZU@z1}QwL03Px8}*2LktQF zCD~BZwp>|XVio{4?*ymu-TTF0YWf1Jek>Am&#hN6^gEKOcQ}Q}p=d{>zZkJUI4Qww z42ZyPboh}20!HG$0*Kh2ul(A6w&)AaNFs0+%*xz6*Ff+Gtwg7+hqm!n$E`v=ZQs z$<{KRr-y6z_OaL&9?nx^&M?9CO(NUi&7zn>n&l=rPrxx??TNw0BhIK-H@i({wll8b z3j%UnEGow+9k*!-a5tW8`Edoo3B5Q7d=}@P8WaGo&Vjs-H~QlZVkXl|;!zX%Lpl4n zx=CsvdcAElvka&l0_fGX?S~DpG$830 z)UjBmnqO(fL))nm7@2XG)UOZz;W- z&h6~fXqF2YG*4_Ru+b9^*yfZow}xuga#%;92K!X0Jisb&7Mt}9@PbZ~fOi&H6mV6{Vs}Bo7dSe$I|}gS3H|ia z)|Ljm{_76sqgYtNCaK9SLvT8E$p0(3uaV&rVyJKUJ2NLBcv!HaGwG$TV~4#N-WLQ4HT3xd?3!wtgJ z@PEYTed8MaphWICPRB(AAiz{NkM`!2HTwmtia1#m+`muwLW$wwD}y!QrAhZvo; zxIH@K5D}~wMZk+ta^TOFG>u+h01wE7K#q<)6%>U|pb)hxbD3GyGoZDYIPY5-_~N(K z=Z5508f=qJ8Gy!lI1$Aoy$8qI`WcazTozpDNz5N z=Dx@BNL4f@&({XjsVjV5@_|2c8*4NMdxil;YgwrX#CkIw6#!8!=i6{5&(ytSZ@!cr zG1FjUc}KatTm9_bG36n-|LlG5rSKG&&PZ9_#p6-Aldh1P`w<1#QAdTR9YZ&(_2l%d zlyBKMr;7(!X&q!8=%R&TvD@-wEqTBQijnmZEk&+=6XqrLdi z?)>%>ckRG0+ME5#9N#&FZr<~6d$2t^jC_Wfq7B2~zIytj>$%^^z;!EU|Nbtj%>X}; zE$B_!UujNJNL!FE2HEd&y|TB!=^Eacjozk7F*CGT&e7^DWt~AQV$!>NZnHaHmcR2n2~&o0c6aqG z#fc(KaY8DQeQZ4)_q{yDI8y7CLmcn6Bh!`@>60`uGmM+62gp5TCU0z{(wxZ03_+Qj zp;fd#9+p1u{0Lb|g^qrQc(Xw&N2PvU!#KkEH+gjKH7v&3m$U@Mhd1J4Q6>b2Aj#9C1YPRhBLIcjTcIgwWL-w07a)YMiAS*{jt-qY8ktt67V!+8< zrJxpR>S803khq}#h8n2+4N4JrhWzDluA=z1$G#E;z0Ap6=KzxN2IRQ};Ensl)gA1^Y zH!qbZ7o&;BA8u;^V#Mbh)8|u*8`T-y?AptVx z4MVroR#V*k!2?od(e0apUBYowm|<=86-^O`*sU#;iwSBA6);uSnJkXJ%@LhQ-=yg} ziiwVy>No>m*!mag)1KNg)ek_UQ2Fn=kC9cyIg-ozNHOwv`eFXiCSJnFIIz?qk*{tf zrUIFXr^5Z8X?EmfG-~GwAu07PkZ`l{n{1@II)cuQPYVI3t35Gn#vrI;-xvt3UonXg zG0T1WuMyld27b2UHW`a30UXY@DJT4sPr@AWwO+Uv2#UnqZBI0P2*)4%pOhC?WTZNG ziipnzSfm75wYn-vERm}GdXNK?WRO1Nd*RA!7{S@T@1aMF;S1@@d$Uamg1$XUFLLF zqgkl~VP-1<53v%26%0|AYfG#twtyV5v7YaMq4d+7-W^3?KF;r+qtQ+aM_3OLOmvr< zp>)e_uAoqnJ^s56xr;Sg7+?)A_H>O8i*LJ2Xj=DW#~BlLN#m72SFnBl$KFo#qgvXW z>=X5&7?H_GP-$3vGAN|W0~gGIm@U{mH*z2mQiQ%m;+~;HnjNQ7=L_#y-o1=pi<0!k znll_3+>omUDsvI#%DlIGM(^P6V$-@6iY7oNM#x#{bYR^#cjEy+WyaZumu^!LbIuvzVzs zphgQGK`L-$Wv>M3<3*~}0lt}4gIFkW zzU|?Z(j%9bRy1DA>vNseOXCi8ox8RG~bo&4wC=rR&If}ZVoC=bO|b^5W2RC26aT0uuufxkDMy z5<6^PLuS>2M36ba>1}_0japfTDI$Jdz)wvu3QbbZovLwhy^}llO`sY91GCDgPbSY1 z#5rt;xfVDbPWOp}sm!yVRL6D2ROsm$Vv8@&gr0?N*8?Dtl&pV%mfjrc9Sx^O0Jh}h z`nS%w%3&kNNasvnQ?T9&H3Pa}yaKS(pbu@`zO~&t%tGxHSPvRwB1z`uN^}-7*Tn?rZxy-qn?V|!lc<~ZjSK8dFOZXS0V=42I=wjo z8m@EbMJC#)$qDBh6)ip~Pq&mTMJox?1Et`W?Tr;%8&E!j%fZJmB`Z?XCj^WqBlHq1 zP7@FYt)42At`Qt>k+y=8FukRLkGr#r|3*bxDiprEej>tAFuPYJ%@V4OBAZ0R0Sojo zL)vN#!&=zCy1eQ+m`5MitccO6$?fG0+>A$aeOJ-5$)~3V8!_>R{R`SZ9aUq{L+MpB zR&pIS3_`%5z%V&v3eiRN9f4T_IrmGv24gQe0UEqRH#+K6+-@rAHSowFqBB?)3`Ei(d_f0zR>N*ubXv^w_z4;HB4`l+?FB9Y zKDnCm*@Y+JW$LZbZEu#8632!JYhL4`Qib&Lu^2}#VbL@~I&_nej?V+kyKD?PvaZR& zUb+4wcOjrrFK>S+<^x1TIx(bcsLSYzUBHyJC>s29B6LbNS*-o0GzJk|5n2#J|F0=5 zrK(=bvWETaA$c>vM-mk&_(>dHLP&Lum^_2LH@0gkJormd^*H|m)gC$HP_;0U87^bK~YEnk5Fm%b*AFVe(iLG|cCCb%GM_`VI zbEHzxp4GqmUX(#4Q18+N{KSv@v~#u1_0Ed{XF=<~WqN|5%j3srfQK+>MakBg;~&j7 zXN+bXuk~_*Nk+xG2UGxN!O{B(nS|UV)6?Q~c}5cp)K(TWPmNDFVg7W;Ks~?H;OzzH zJ09OaHqfZ)9?}ch_peo1CDbWa2%Om!zZAupWPpS=e~lV+u^gVLT~3e~tu)Xivv4%< z?;8IV_i7dvY^#}p`- z?#2*8cS`&Qs8&cY8cZ*0(*grSJl56k#(L6jsqc`=RW^ zG%mYvh-V}YrrZ!rLE$owFgCoLJdy8oo+pd8Db6yLlaXlc<|yD>_nbb~mr zuH6{59%OB2@JGv##}yY{rzrZlV7w~iEd76+(E)qT_Dsbdf~|>)I|fQkA&zW~pPk#b z14~}P$v^5!?B1^Iq{zC`uENZ$9#?!@>jyyPAfVM;^UQZ>&%$!_Q>W$6bIj2{iIpT_ z{HB4)^JG})#sP+q8=w1=JZfdKg@JM@$04>L8Y2-6p4)cn$V5`pCsVw|1)dgzAP<;w z!ik|CvC@XI6CG?>nk%}#=(~|gg#?0#U?=f0p}`Y8!@=F_CTvh0i|AGio#^EvA21oI zESxN!Edy26PJS_WW9pPc3}&yZYnw3rXr}S}#Sc-Ske~liql;qY*o#_}90A3gyP#7H zHIA_&?K1V7i6&dW2lm6ncvEg}_JHUX%)~xL43k znr3OVCvWhpZ>kalsXDMki+<%=q&5yYB|&bzbwUm{hgW8U(1i0xbPX8_}q3WG7j+Mkj+{RTQr`r+*!<_A+6SQ3FSC0nL!dW#F&D@A) zL+ELfXDbJ|s-7KiDB#lEyXpanRTSP!#pK`NkvJ%7aBDRn)3)-L#r$STSRpF=UYpxe zrC{lZv??@vwbMzNf*R=q(K&#-QVIztPeY_)k!Ml5Dk|Pf+_Y*uMN_RC6$afZ;^vc* zZg#t-+m;$}250~5jRn{CsKWeJm;m-Bc1Q(WsT!^(bW0Z}%UrH;-F6=1T?qICM?t8n zgFH#)RhpV!BeOSB;?g+Ky;pO^%!G{Lwe33YAqXa9PB=9#@IaQ@ow8q+ea(M)8t1W( zg@^Bwn8slh1^Ls)rDAVFts`|f+(jp*l*OM~_R>e^OaNEg0c*{;v#cpibqsURZkWQ< z|K2`QaEm4f7qO5+d}1ao_$CFU$R>no1=KAr-!F$T-Ik56W_-m4yMIFwZrb@b=C3)NYQbB2W%IaublY{<89myfDSUYJD&&*xdL11Tb${$wUzkE z<%X`RlI}!2X!-$b=)k5N`GTKd$)k)ESw_J+Vhyn8A2_%bC)C)1(3~WA3G&lo zWnh3oa8T>MGFHRLbcM>qqF|!FgaW!I;K7gp(HviHqOyYF>*S*TxPL1+oX`N}Cxr|W zLt#0+5@?c>_Yt#|k&0z*naX~j8q!FNgEOK#5x)E}tKrJb70O4yyzp{)62$yoYNbH_zN#g-yaWzQ z(aT;%7ID(d0YUvtKwLPH^%@Yz=cwtRTo3}GdBkdCNVw}U1#8bE4T(20v8K}NZEuug zb;@?S4j!Esy*nP8`BTXdH&>b6Z6=_IO3gyvTMuR@L8^^ z^$G1JzGnSrV98IvP9bIz%$l`?5tc;OSwxJo8{3ypiNkeH?|@A9Eb~~h5dixOW8oQp z2SRDUW2UxFS{IyaCE+9fOzm!yUO(EMzmcRSXXHMCgM~z0kCz^?ieCE6EmX<}>xu3W z6WV>>vGmAMEtSe~|FRTr5X76uMKCk1XE9|IvJcHY>aNia?t47A1TlY|JmHGRJe%#g z6jpE9-G*M6*`lYqY3%L7*{J-hc{pZ9WuH{#-1CS!@91!iX8qynE}4>_ON?8 z-oFtEH;PE=gIvFPPwNc*TgOTp+AmNcc0xG~?^ACu7!73-z>;VA+0R=I{!hoVB*|?oj^aM9A6vp* z1TN{0qStJ-UWqdipz@2N=fTVxr1hX?Sq()hTOQ<1#7U|yp?7ieo2cAnzrXOKb>eLk zs~V*^%@4>-Hwi!Z05`+EAuGMJTCvK^IkSpxR;!}GOJ*1ub0%p>oLfQMmtOW8lJ;Y% z2^#sQt1w3#;Kxyhi0k2PZhcDhd)}q%jyeOxCE9*{0 zD*R(UrD0?DW;5LJ-hfkHq8%O0i-YcOdW<;7gct{9hv?Sy?}OjEqTG&ZD*Yns=|=^i z1^U}vE=xQ(?5Nx;$*V%f^Nop)V~GD%Qy=$ATHAq274nyKCaPQk|H8I%@Jk_uMpWd6 z8^ruZPQPu%z7=X0sq*TL(ko8EIc{0Vr@R; z$U-482v)~{a*F`g9ylC{L$3m@E_&?{dd&D;x!j?!zJ+eN;p;Auj!5-ua&{~V^?^Bz z1Mf@OC$c1V!NJ3R+&rXcIk?ClT$$RhCrw>97Pj96H>0Ki5s4z>KNdtqYYA1LtYYk>Y@`Nl9Q%}t;P`Gom3$R5gKzFS+8vwl z7GB?+3WQvmm^P1LpYY;bF6#MqHPSMrlE7tjXi-1F$bC^wpDX%HD-LsqNQus*rPA+rKDWrJUWn1imy4M$d*UaeI)lLnE9l1>#k zq>K?CThOP(bs)$dtT+RWY@s|O>vuDy#Mxz50_{t{-EsV~&JiW(5*005j)pIG{EG9) zwa9>+TJT+AS~WP`aUU0oBJ>uLoKC2&uFVjHQ368hjQ1{vw_E5$$1Xlc?0&rQvgB2K zc<65xD`cLOYk4lZUGzp?mpDdj;AcUeM7v{NcsvCrmC%o$9hZCF#>5|*I1Q-q;gngO zepUjY4M=+yyJoTIaWU7#aU~h1K{y57dm8ETMOu04{N(hE{KAc0>*5G{N!X>pJtY0| z)BY{G%?+u|zZ84<^nFRVZM5bcAQ~ON&noW4l()n!#=#H-m`0K&+4T)hXg3Kk@f~`i zahih*Xz2%ai9vnRTN8h!h?WjW+??qGPN?O85TXG2jhaYWoux43@L-XJj1wXJ^SZ-lAwydLTcjr0*#t(WZQWCoT ztvUBbZpT$#o&4HL4c5Z@Xo=X^a$?V2wl3&Eelg`*fCBeHI(p`K?;=C1yQlhwiWgwa zc~Uv!rNum|Kl;bdE{7N`*=g&{;F!FP^j4j795@@B?^bH}n>{FtHUjeneMiBu-sS^w zP!0YSXGzh$YRL*rCUw1Oz3uAsxEak80Y^RFOowIVJIkCSkhK|m=e%*hir;+&!tzX+ zw%C$gO z7@EajPMGCHuy)6J<@DfOq&j#C1D;!={PINo9XKDw3MjzIBtiBlSg84p7Fu`EHlvmhX?D74VePYS0f=21QF-9DlDyl8Oz1d2IeBeV+dXdW68EvMJX4)*ru7l5(MSw@o}$bk zXeIGVHkjI;>?=DzD*b+qJdbN{LWn~HcdE6C0Y?3|vE9SA26_b7bJBQO9%c*(898La zm5g%){FeQ3MX$KV*&B+!Q4?E%S2|4t3LlRemg`sHf70OF#~3{8MlNp?DF==Sz;N`0 z)`GyIR`Si?y|~)f>GmBdXL|di5;A?DKoJHuog2pFdk7saha)&43R4`L+ep8ZXhTAB-oc9fYWO89JrIeNHmsdK8j~ zTmQ>g9+?nuE+`BmZZuR1Fha*1eLQ={gy@%YgMx=-CIzS3=9Vn8y+8{6vHPQD&@bT?7KVy3XP7!?u77Ht!1~as&)5`vLW6^N0(r*wSlk{_< zQL)~!nlI;L^#nt&fl^sqN45BMn}4J4;dtD+3D7h^VS$ldTq#7&1K@wB<_+Q7+LsycL!Z@B2PTEHG}upla_N>;ix^DGK+Lq~`5)h#M<05$ zqd^P%Zm%EnTy136a%U&nuXO+)nxvij);(osR$&o@$o$j>lv*}dQbr;aM6+1$qBV}A zKXNkRd_9FAuRkr!n)eo`_?H7)YRN;QegLWghEt&6`*HV9#f0&%f!>xJ58S|XqAj*E zZ`Jf3giVLnoFXA(8j&v8)dhBHJFOgtGTP=uZ7oi{(73sSEKVBxIu$Z`Z7JEV$fZ9teB)@gZL!I@H+hR zmL?2REsRf+ex&mln2VLP7dx%RFS2Q{KRuf(Jk+{oi!c0Q_Hxr;s#8oKzPCB!@EiQ< z!yWToNE|vqna|z+YAtMy?GxIw?e^xxyJ^O-eT<-+fE>8Q^;igBVa%JnC=fB8hIH!+ zgLL4g_>`~@Opt<4lBJnPsi7I@mZM@W!TJHnhOv+SL?(J9Y1#$V9tL{gy-alYk&BXo za$+RNM@^=639Q;U*rbar94@4L;suV&uS~)_AHIr5Q3~+M=iy>zt32U;Ri&}z$u(p< zbsK)=uA^U@xRI9o>DiNK9VyCW*8!1Bt61^JtW1WySCnz7NYWc7j1}-9Sza<3zwC8|| zJ=Q2AQ+GQ>r>e++UZjkpXO~eAB<7BL_jBiI6BMi6X%A9p#_{>gv;qXn8Q^`-;Zu389-+6B`h%4e5Ng(4-?yr6MSf?en%~r_~nz# zqZgBX2%-%4#zdW6e5*WZ_zK_+fNQ6^+vxgKAKxkaR2YH6zr**Qh0{A?M!zt*4SZZX z|7rIAQ%6A{!CF;ejSW@v=h6Mqv^R_@1S}X^lAuD%?1~gBf)N#sSmu$X6NL5gB4(My zcBv-)Wwp!#=O)CV4H^?_=R%EA%>TbD9L{~3{^i5;<*_L%23n}v+&p71GjZMacSKI_ z8?IxvsJ$g=D-joZ8m0*U@l6xK&RYU*b-b;@^y?Q`96qR?T)kD;s`Xti>Ak~hW?{Lg zaecDCV#|~KViV7XX$)YU-VhHUOy3exQoXlP6R7lbXnRgTM-Hy&PLVS62HIQ^fNG<* z4C=AmP9bY^7GRHyLf(odaL{k0P{_scBaiI6>)S6D-BTuEeukv88WZJh;6H?5!4z>u zY^p_}rBB^ei-JVO54s`-f(jyOZA>1`LfRm7I@iVW(6bl(Y|VPgjqogfX}~dgFonw7 zhuS4r-FzmPch@M7ObP1NWA!9bGN8X^I0Qa;14_BAL>%Z8JuM2bw*UB`X{7u8#DXbE z9IC8@hB9CivcVcLuhPEyyw{aExp>8Y2L+@dNL=k(ct{%tVxpg~q3-piP78v7Jq8g_ zMa4$6&|u{D$Ha$Q+&Fj#Z0P|7y+cu+{uydVl`!m*Pc1QTvvDuiG9=b3pwQDKTaJ(6 z_E=StXLpQph$(kpiBdZMXb^mg5`q7+YVjK)pX%03CUBwKSCuv({$+g6wvvh7;~3@F zJMbh3vJ3XSIPQn*hS_Mo_5p;S@vZ=3qZ{SBFn@mN4h-k!Ya+~n?$#Y4(;#JGkpl$i zj6%?a%<=jkZNTlH2c?so5V?YTw0>eMc4#BS1fN~Ef&A}U0r%ni`+;bUp_S1Q(QZxG6k^EbGERed7yg3D*3Cq`m1k zr7I^w)d!PZ;Vh&ME&VoAD0!rf?0kQBk8Hz67rnWG*P3csWT8;{s ztC%()XKrge9>nZ5catQU?;pX_W_XJo`CVt2T@T);_iZ6C<>Y-2)u+~Z1B+5owcqC6 zb#cNjj9TWtTE0Cke-)qy!Z2=@MGOS=BU_uw>Hyi8*d-%U44nulKvB!FiqGUyMBYH< z){k@LQ~0}O#^-N=j5ur7*W~yJ{gxS9RbS^SP{);cO82CQ@3fLLvF)J6|1_~;YW`)N zYDDI#Uoa?@pdgkC(-cs^yYhF@b{#QYMU$>hezVWUiOm?}h8Fx}7IsR{d6e}3pUzi3 z@0Tp4%VIXLWTgoBjTG~rD5=$Z0K!b=J90Z#f+tL$aXqUUkeef0qwOjYyZ)iSHd-g< zy}i_PSxom;P7RvwItpKQisrux6h*>yZO=>M6+ZG3T}4kJ_n}?o*XQ@2mjjulBjA{_ zNsyKwk&So%9|=>Fw0t!tGs}GP1k75a8!--5*ro?JOGwx5wVZzK*ojGPAJ z$E9k^iUC;^RPdTvmyqSi{o`WkjbjjT=ayP0-}+3jz?v9{qOC~T6g*s~4{hRg+d}C` z5a2@CSKxh=)m!15n-GAGX}tL>Alo{)a$5G!9WwFcztrC>Ma_LhB~wyTkhL+ra7bn_ zB+3jq&*-wtm1_i-mcNP)@jUdA>Odz>dfcH?Cl)d{`*F(!us)1qHOV0doM4+v#8p~3 zLbjS2p#(M za$)D-MIYbRsCw6aic~CUN~=p2pcskoznfUdEVrSDM{+Cf8rv8Jj0pEp+Jjn`I!v66 z;lF)It257E`(w;_WT`rurpd}3x89D*F+-^pqt&#k%~TcT-|eBVn1+H5`-jLcdn>aX zY-@Lv{AJk(k`8*$`K2N_mKwF?ustA5bQOg{OUX-99tvJaQzWqv=SrM2XUjJYMtSa+ z$;twvu~x*`K)M4n^8^gMxej5T0qmto=z~FyIHE(a;<98){c)~c*N@}+d}N6~**b_+ z)lA&&HId08p@QGR@z(-_E;_>PRD1EQwj5sarQ&iNRp9hmETRE1t7S()&s{Ped2C_w z>g|W5&!X2DPUNHndG2Z3uAoe#xV+(renRqQ#$t#Vn|51*WP&rx0k&KVNSxx8uo^ZH z{=_>z0>OcoF=g=f3?yx`z$+_`DP3mxQ-Rz;fJsqk1g%9xjZMe^}8DsroECQNhCSRC>4F(4Mvc#OeJu-}SC+v&@!T&4Cl)|57XIi?zR4 zDpc@~t;BzO1B{9*0H+VddUyia;NDHztBIh^Wv`DwyLJhyBaTc5KA0VFt=2r-NkRQ|M(8;2@DDZNv9R_WJO$yw01tuBGI_KLpvHIaQrD_QS3u;O%Fh>RVB zy(fg|;KVz0A=cwc`i)%ONFzQmSBH|kQ++#WJ zE8TgJ>9CGV7TT={Y^9Xd8u>*BnQPp~Nj?-OC0fnbg5quwfiaO^N{uq9)2OisXxDIB zLjVA}|Ni%g-Lu>J7XV=(<-|!Pq+dYkWK-v)OiV~qFfR-$#4xq8`AQ}axHX`o;f`5g zr;GLMKnclBNsEI2wpEc%{NkBecW27tO*hJ{@k!d67WwEoGt$DR8lIT$3sB3eRGRwG zBq)tI4@?(bD91#5ejpeT8uc&;(1cI>u4)-c4yi1T~4sLc54kn~t%=mt8-;vrkLaU>dDhPhpTTcs;6s_Z@ZyaDofhXUXUliYcXuQs3? zaq#*kK^T>m{7<8KKOcmEE~r2pBiR_hp0M(YWF zP?gF*A)YDO*9F!1qIwMqX!OHYy) znHn?Qa$h-n<2&T^eKm0Y(j6*U66s`W(iC*c?8*U*&5R)ed*gYj))lTyd};q^iy65S z^h3}r6)MBMD)he2^|7m+B(l4jRIMEUb1KK#t_oJrxvPkyz(spiB zJnFpzQ=+P*ttG3H7$v!mqXmh2RbhKH_Oh^#qcM7ZnGtJ{ua-ir^?SLS_G8;};@sU}04xtpm5j^G0Tp=cdSjtlr8uv5= zz25=7viwV&z=8Qq8Vc>kUtoCNhoy6HOAICGc#_d>4L{*}+hc$K6^jk(KnmgE7o%m% zQL3?N2`B?u zED&3|8n{lDqBmvS1BHtuwXJad%5j&U9Jrt`K_OULTSPV;>mN5uA;TFO+RSG`A<8py zn)(W%9$YXpE2$1xKkjth0M+{%Ox2lrxP9y{O)zKsGR_#1O2__kd!S5$$6I*9BB&Uk z$Lh8Y@-wY-*I=TL^328@1Fo?5497!QHBm-u6yw>m;5Iyhw2&fRwv8 z?C}PjOH7+VI`lUdy7DZK-p3LdL!y^wuc5fTQZ|Mtb}7!LAXukStiZJMHvsf-B4F=Q z+LuYH;w4PgEt3Dr^?7J^nCJrLytMIk-+E*-LdEVi5&bkFi1#8g_=x(k3y$`dm$)|^ zBODX7TVt-lHWi6eaRS>fm>xCM5Gi=T;II*Heh@S4W$TbMwj*#_Yk;;fU*r6m& z{C8(l(DN4ou^>^QPbDQ6+@=rb|Bnq+S8WD!vW1YjnIZ7bw>Y@({ z9@A;Yjv=OQGwU6bm;f#ElLg?D(6a99N9|3U=uWBW=WyYe>%b+aKb-VwJ6k}m(~DZ@ zhjMmeiIbs{TjUq$w;+V{h>m^CF9#I*YTR=QPmlDqY9<(@X~g?pD(d1>jp)LI*SGs} z>o(xzJ=fUUAvMcLW%XVqyTs1ktK$#S>XK0ZJb+Dy1zaEQf^ydmIc%)$j&HSod_6TH zLtt1aBA#V^#Sbc4o0nBsM z+H&ap`tE?@C2nt;2gh@1J9wdA?_H}6ia_=vl;tA(bE6d{)uYu;`XF;JviQD92OQ_G zQ^iuqtY%YuM7*4=W0cQh4-h8rx$`E8r)}hi7*2&}u>-XghcS%?s@8wlQrLjIjK~;9 z)f9e18T%{~yC2cX#DG`9$yXI7%W1|%rK72Wq@78h^Y@@y3`XCrIMh@LW-ekfjZlb`n2P(-p3jpMTp>Hv<@F#e?*?Cr!!6aW3h zuX8erP$i`uF7uXb?cCHs;hP2e)uP4j5V;@DCcrG&<480R2^%Deb;nlTOx8&98c8K0 zu-TF?-|7%j0;JQ=%%1U^_B_};B<`dAfbJ+HS)-$T$aR$Ja`QO=GZv3a%LJ;-X#(bR z&`K@iWT?Ey)H1a0ZwwZ2Pwf5ek2Wqy+wdLs;MVd?-54AlGbw>J`I%uQEo-H4O<*;f zAK|AU@{?J2(JtZ)+ewu#+`NES+(PEE^Nq6&_0v6gBv!lHyz_(AseugP@_mEoe@!S% z)nEp1%>x0(&WM9#QZ^kPv~FPN?m+occlbd7$3t0Z)YL4z)0}BWoY?MrI4R22wsEh5 zA(yU8L2vZ3j}AQ;HytD4%^U)5KxZMojadud75^nB1#V=`@vUBXH*>rhAHE}zP{u>= z-fA4kl_3}=U0uI&;@V9K=7K~e{CdBO0P9L__pD2WPTS&AzULm99Zm7~NTaM|q&@t< zc=D$fNBjQ=9rMzV-ipm?fUr&HmR zmN$)pG8>76rP8+;Kyr-2us3IUP}H+yJ94Rb@3c1Hb-8%*N!kGXp2qi!HR**z^j`+I z^hbE$Tm+RW1S348WnGar7?woP22rUU#8<*@Ui%N@Ky>E@vj4TQ0naXJqPLO{ly?)Y zNah|8VTXcXepHC5c&^nX2%>37%TRCPeyK|)E06>BxiZhI%tfn-DK=S2>Ifq?6aoH5 zszU<0BE!mY`3yL%<5=LZhanmS{@jN-dlVdOK>oCeTKK`RUK$zRnaCd^K3>_An5nZ z2}_vbD#k9rid>9+cW~<`cW|ED4RYM~xNk|71EGPAT%zZ-HU9$!+7OluBE1lx#;{`3 zItAJqfo2Hf9T-X4ANtSvaPEQrQ7TVx^L{X+u=9u`3t(6~M07rYVeRHe8lMDw|IAJO zdQW1-z7l6bgQIjzQFfIIFg-zp;Gl2S>SAfwe&}TI`!x|Y=Q;%B|A0eWL%q}UCvspT7(dXW zUnz!K9ri`t*7#90xnfZP1v8JPh!Ln?#=pPc*>-&g5ni#Hypj2&d(dNBrZ<@%7DKBF zAkTYLSONjgizynZFOZkW98u%c}$%~l6m9qJC0~QMn(0xl~QNBEUJVw-bd*SE&4+@{#b|wXPJOu`& z<3C>f$KhEKsa$B7{c0SxhVcEQh$BDdllT{&YHI+3UFAVHMW7UTo(DeLQOJ8^%8N$; ztV?k*Xt*J#^rjW#IfE)OBiHN{4T=a>uZCe&Rl61NZIDm|Qu0c{r5%yJ@j9Q@8UL?s zw$Pj*SU6M>dIZ&nX6wsS7sB+2)w^VSLGo?jH^a=BKC8w2@YG5z)m^m`qdWMp&I0OF zFIbN#BT(ql=7_Q$tu5k_!sWe8aVX;plk&_7gNWG@hiznQbxE+4>E zN4IEE=HW%sw&a^2!}jM^?h`%A@8%;UpK)L?9CI(BxIJ-b26V=GCkNdW#6=LXk5)#V zb+56L>Og=2v|`QF*uk$A^BfYHdW{7Di1|StX?3O! zFAvd?K7eD`Sh{HpOt{^W3w~ zoR$fEcx$cN^Ku6Tx5|;op=63&U$W%Fo|odt#G(AmqGu}8R>Ao9{+O)Ej5U#@D$-@O zN42|QtSvgDO`-$WRti)`A{Z|Wpyf_k_8Y<=15yWQw0$ssvyP_8`^c_c<_JYidoQeOhI#^q-&NI;;jvfLkATV zuw%`Ft?2?8pJ2i>jBAVuVlVktjiQ96Tqpg{Qr$wJD;7W+EpDTU?$3fBP&(zKuzUvov8qxx{?X*pf95nfu_)HQ}$H;M~U?YORP zoktQn$KKk#WcAV1{L2>ZSw$9JzqdZs)ogWx?^e1+JIw;9NwC~wYzx~ zm%zjq-RX0TKZFNmBM~U?@E`Jx@A(E5W~z|u?ZA;w21=pLac6LVs}KvuHpUCJ?X$qH zZ1Na1rE(jI7W>$|eaJujGe(H4S53wmPFRbGd1kdPjFcK2(2@YU6nD{sx_dogJR%d- zrsv1w_+3cK{d6KnDz!VT?6HXvz@^ZSKr!Q4896F#K$EtomP)d^)HybBEk{*_<1!q7 zCrdF(W1)&uoqBqpAOW$9c(g}{)&Wx82HUJbeRg%k=cR7HZMg@~mDZO#9Sk*3{vzI- zw3!6ZYf5z2!C=$HRBVtDszU?JH-N?lwvW%5Js^IwyNltRCdXS5ut+b+RF8NqfY!FZ zGzgW*PBnch3DP*%(JMu44Ucpn)vs8tjO|1Uy=2obH%gul+sy{OG>Sw#k<(LT0t>}f zP>evJLwer z)Nh{S58?bcKY6q_%=cn)M5+G*#DY<_G{_xO{+z1@N~5c;y!85#ZQb(YX_Po(+(B%g z2OOaFS3gQ<|_(ANI*Wr~-( zGDMrAm|?~f^%nNXxH05fSaHiPm*Facvb{{AijI?2seBqp`r)nx`$foeMZGoDo+@B) zU!w%Tqw|=GJL*-F4(TE%WDSg1O#9JM?C07387e4v&$qXGUi7n79eTBNtll{V;yuWa zQWT{`(GH@!)XsylK!K8$ITFf8JQ9L4=~~d!w2>KY8d0x^cjrbEY`93{p%2~`yD~^* z_&;M5_z7G{Q@-?3czCJiEoKt-Hc+>6gdQi{*4!>?W!m~Hr1F5^8l^e5hVv^jIrK*Y zcevXl%72RScoC92IlexB#qz}?)O?ai9jD?r&4 zR+NcM*JBu%Z=24n_jp-Gqp?k{Ai*n)?;8r!*XXb-Bq1u`q&mOrY21sp0u(9kx|D;wglj1(IlnODsr}12&8!1j`S?mylZNn`$>UsHd=9 z7`sey(@4w;Icx?l^qP-2A1}Bv;#fQ_Kw<8ThgP(QVy5T@?NGKss0(tK#-^K0oK@)m zk_T0bew+qu0-8S2wjk}i*&19I$7X|_+hqz+ovSq)t&?qp8ycVhUsZGN4@Kz;!w7)T zln>%US(1QidD^SemsrZG>ySxJ{WRiv2eKt3<~Roq>^MFITuXUVG>+fG!R$5GAWb8rl9~{O_b2P)IWY zF^s%A>FkMrcF5$Cd!zju^Z#&dRMQZ}AHQV0nPc}(pt9uojTT_28OmNZ@wvPu=?HFM zvB``uZiHN}XH@r&7t9&aPfU(*+be?hYu%7|6!a1&v>#lt}KJo+M80S?fX1% zrcZnErtTzO;-JSmrhFf(ew2KsATE@+N*f6eVPkMKe%8(XB|W{*#3}`J2jE{bS0ZU2lFxH23HJV=A<>Q zZb5oZP_{tCh!LbU%Y{)=7ba(3>!?7ZcSN$`;28=1ncLZnrYkPyO2dG5jyVMxvjGB3 zl95(uEVFZK?~BF)pZapTor05({ZX7$jQlcqrkc&0+)={ENSTxqhl+`^FJ(3SZZ#^% zx}{n&r3PEUjrWp-jp^zXx3botT!L{^r)X>j$iQ1F{~G1`|Bzu*JyVBb%o0trGcqX|hoVyPH;Z?%DdFjZa)QKg;jDPlMYlf7C#X zrC!hOe@U>~AOX5jj&4_UU~$iEm$+A`A_?vCZ9c3z?02_3w{f!r`h|DU_f>fS_;!6W z3Om_4_UrB%A-;LKpp+k4O{wPV%Xq?euNC`wntkDDK*ygWs^w%(=F69zk*)qz8V$}e z<@6fyRpx9in?p7(f`iKCykL7E`T+B?3@`|;?%>Lb;RgRFQkb1`WZ}zS72R)+7F|A= zu@~|?Ykzjhui-~Mr3|sc-8TSS# zcWwiK6>gD3?%eFYR*q#(s~7{2q{**VM)Em$T5M@lgYZP`<0horM1^97qITYH71CHn zs-Xgd+=Ad|xum71lWY}ZSZ>=DL;Y3dX?qpA4uD3QSTKC53Wez)Gs64~8b*OjFKo*~ zW!0wR9yN?mnD~~^pyF3|FcCHl9Bh5=SZh^Ip3PHMf)KxQra_>=0JePoGnY4r?m?6e?U+i%?Q`@1ad{sP^hfNHb{`tl!e}dI zgJ%zHWh&4V9@!HA{g$77s7taH+}K#Xj8>4$9mk7~c;y^gL(lQI12h~i=Ge5Y{*NiWI z+dD52+e~>z7*l)n?1N7vPpTWI8j=v-XfcxIJn%x}9#m8LBuw<4I;NX^*gqWi&ji?j*adHhs_ei_KZqK*+HtarE4i9$E&|E%R&b246>& z1wE*eMfBMnLPRn8yRp1A!c|rU)Y@Mhp{0a2ON(2=$F}@3_tL4wl4`tzS8CAcjPi|} z`Um?b*oWUQWoGMw&K181ucMRPzR^>`@z=uHf8?qj9I7Ww=ehBXRpwj1gKlz?uuMsn zn@H#%;ZB%HlK0QEoe!3@vd?5k*dafKeS*}n8Z7K zFnYI$sBEw3`KnCs4rl3-BSu^{V=?PyQvMQ$-NdX{fyG}}=M5_0OQ{5uKCa~&dTc4# zcvG@m39mv@miyeUbpclgPVM2|Ext)W;_@CPFPq9$#}#)7Q(oMZ5fWei&9Wo!M-zdi z&g(gd>+}-a^d4x7Xc*{=TcxaVNE3_R!d8+=>IG*rCAai!41{F8In8BgJ3P-qDST&t zfy(J`yOlPKT#p$?ln)PNe1#({M(33QBc1^DzNaRWNOy;-=gWmoJN~~i9MYCow*yM4Ego%G6mdyCYl8-e~r_+A$|F@VP4ELI|?inyrEItm?zE z#d&OHq(EQAHFA-E&vH;Ir!eV^awLE5_Yr0NzTkaM?|%2+1CgSLi(db(z2}K~eV2ov zUl5LAI->pJwUJQ!jYhix_cTUKYxFB}A`I@^w>y1vvGyjj2WqAFA2W*j)y<(VhfqeZ zhQ{+0&muZZT(ZCoiE1(Wh9OGzu?Cc+&;x?{YXH?*1m*Heyud3n5G<3=QLiK^<7kd& zz87rGW8*{q(TQh20Caps4KF)0^s84Mh^%+_0!#CzPWfd3KPx`#hKLiT2|mmopO>G+ zHmW-gVRuF+oInBMy_pSe{2{v-vrZubdm@T74vSNWdvGpT4(rq813Lj&8~3ULgTJ*V zg_-@k@hzCPXqh5}0ngNXvo0sRI?N|pl9d2psP0ltTceFz^M^DPt|}xe)anJ4*Q978 zyMNfoYkI>mV%2=zwxNq@Id%Ed24Z>lw!>`oxO|FM0J-2jHhmV zcRa||B@TFPkP$aR&-p<1%JJxM z)1w-->831Tm&u45J8ZzT(f29%<4_3{t@dw;^LU7u2%aq_8Y`a_yset6DuZwo0vY)Z zKc?##ov&l~8n7PGG4z*_<4~eev}t54cXtc^>21AqAG6^$UVhJJ>!U9nb{~SB<49ZqVF&4>u}y(9Q4Dulgz>MBJ(xuWMiV> zfj=B>Fediwd~Y!(*eGX1rJ)()O@|nCSW(j3fcRB@nDmc;5;6vdJ8l>}S$@t!j#GyU z<{X=e)v}0UgL?t)VVDJ;Xbd?5MV;=SgUr($?2@nopfB>&Pb-wW{rFu5lWQi5E1Tp3 z<~1xH1hD2XE~w1bEH*rA5qoGdW0pWC{nGPDF>R)IjjMHn9&YA-8U(F-UmXU(hlf55 zv9Fp|lo+?#SgA<-#G9ZXk`jg&>imlj(Fi!fm#!DXTVPAr2oj5;!f{VImF4!Ifm-0F zOipk1PB1?t<(YVKM6=cm{gYxehp1QAt^E?R2`|JCjl*ODNN6GbBe?Cp=q++nFzi~g z`_FH5dO02a@H2RX0<~fV+E$o%&%oCR!kqV zik`%(1L{o#9=_Y3JqU$Qr(QAHQPRDnDg3b$#K{NpFQ~2N5zskVb;_eiqD))X1CjUU zwXQSRom5r}9o;XxNKv4QxP}&S*qG00t<=rrZdX1kgorr=T>rIA#fy}$3Q~UsW+R~= z^<5spOrjhP;%QCw4i1>;fKC#L`BaN)*88(a_7_Cr^pLczj{?hy#^85mm(7gnIJ0Z) z*A3n#oA$+P85e?Vy}USILtff6a~`)Xz{r)J5$2;#@zW9de3s>MMBvFOcVcQweNSj; z`uH2QhBw7cN11zeYojvM9-UHO|Mk=3l+2>U|U{)&uVCJ_8KMTQ1P$(RQ} z6cZK*>ObNujGq@7an4g2;{;fZC;16W{uTU7BK(J3c)pQ%tE+jWcLFZuna{Y9c=CG7KVSu+!Nymn)gg!z|1m zaXbqZx?L*t19*uYL6FDtmDBqa*a7+uEKMZ(e)MfSAV5wcN^>J8Smo;6unVDrZ2YF; zkEkiw`Q;u0M+w;W2+zRtaGIF{O_~d7aX{MBH$6Wy~x6lUg+9k*4xV<*=6(kPJ z>Hy7w8M=AqAdM_cKKz{7=czlZS&OepH_84y=i#Y*gGiv>>tVL2^D` z)oI+iH+#aC2*P^0B;?ymGf3+X-VWE1zf<*G(8ilEq@381lZ>}UjpMB5vvJf}GVu6r zU|L)4`oN16Z+fWmi4&@bb}bI}yP-vRun5|gc{D`zVAYnPw7NK6x*c?BAgWfK} zo!#MD?ZRU#@y7{BeA$Ghp&5=G1|paRg;e6V7E_q`c5T}c9=(F{G_p}bJV%2k#5-4< zLWL_nCbh~3pJQ7W{ja^^gHdhz*ThzuY&b4!fic+#fyyWS%+TL zD10cWSr-Z32Rh8Kk=k#gv0V>2TRhYOEN|M?57qfyrZf$#M?ho!4V&Zv zElH(qW@aQ7fsMPs!94Cp^V3h3G4Au^33!?Y6q#VS)hlP`AvnRp*U^K&omDun=@jMR zI%M`gU2Cd*H?Grtg4^*CqbvKTW*Cw-lU3cNlQSd@HN`g`xXL~ zkIOwk-8h=Ckg`OO4+qy-pk2@)(O-(^1Y43HS9tAr)D^>j!5HnS2mC%GCKfdrvqD%J z&ruJli^snbN6s@pYlO4$u(%Ej!9tl1U_Cr@sp;|p`WHrJjz3Di2J8wJ07Oi?2*t57 z5-S7;lzlHhkxgUgOKpF`hkgUtYu01CcOty9F`G>V3-3yzYYOKjD#dYrS zJ~j38Ls(`h=&dGC{9-K&|FyjxN6N;$U~J*8&q~C|s@JRtcm-1s+Uy;v`{ier!-uk4bKxu1OeM=%r zT$D!aqAoCb!Ke`~3qlzSviEhL-sducRI-~ud>|xm-cSZZomIQAF}(aw1y3YiBIxFN ze>uAjC!kw`E_ga@4mq^3m#~h+Q17I!qR|+H<`krS_T`&NvDG`yXFKkL1{;ao`cx=a z-?w5x%rM@GFLs+ppA}j)&@+B{=oL&ECfH`GEs*#=DTM83{*er zin`8fNr*e+jW27@cx_gduCf7$oJu+bte|Do9zZyA={QGK9|!t|f%k~7c2TJ!$v2d- z?>kEe-Z6Z=8r4`k`_?Ik(+As;41<|t7Ep_MD>~9X{HG<;1W$K8G70kLj+m}w-Di9> zo}|qEGzq{be->S>HdJ^X?+w!Ww$j;xob10?ZYbJ2t<+Xf*>}6|W@k>9 z_6q#%z$Zie^9W2gqUPWgzjXEsMIfmceS=97* zode{iH@63Mh|bay8-e%V`NH2XvB$^Sxtb%l_l)0XSBGsK_RYJ5tiRNsz%9<0ezJUW zLUJ{I4CcoidqypJ-|J$EL?}-LN_;v~Kh5Ps`85K?ZO_Z9eNFYmwOg=Re*9M=B`_&k zW##pkNpOUes<`cw2A+xRJonAs$%fB;Ce^K!>5rdEpV74p4bRs>A`^atAny-r@n3q6EkJd zqzz)d4+6pRgcs=m55Q)O>_1z*-P1mtJ;_CclC!_h=_4&^0t4Z-&2E?hYumO&-b)Kr zFIw^Z+n7p6-(`x~)KfNQWh;^2jw{{ncXuGdW@XyRr2drjbYK?DHC_VKX!R4u<8@tg zeieNaD5YQnJlumVn(7kj>PDiv0Yj_)umbD&FTAQX)i0&jO^)wmwKj2g|B6QrxGT0R z%WH~;rvsnoH#9z?;SLzj{ObpzREKSRi>Hf*{)|xkCIQ%balW}nrdhV({zm~yska@2 z*p*~sH1p+9F;X<>Y(APfCjlIbaVBPc4MIQAg>j$4UBI*tl?iU@2<=sdBVFEz5j@yPl~CSFZ^`*^y?J6kBjwVID%@8;OAmCqn_${ z4f**d@5|+(hIIPx{b&5M;kJkt{BM9n-K4%L&zfpJ855m7l_gPs5VN`ufK*J|lLEj{ z5oB0_vDWM`O*(KS`iXNK!DK=TfJkCl`T<}?Bi#E>I~X`GJ)v6>>tq4v6l)M#x}!F# zB4&vM+m&N`wJ7GpbG+1QN}0AZjHfIrU?4>sYjprM@XWKR9|q2vlusKJ5Uu%Z0~Mrz z-`Iw~C{d1&9!ejbZg=Nu->mC&f3Z98wEtk=$!iIi{6@ZXt!^|Z$(ntwgYe1iRR1V< zW&BUoNoVh(<;}NmRr`HX7KPiq38;z+<(UOa6>sCMVkgz?nBvMH*a2W1OQQK%mb znpLD@R3ntnd}LlV7s);Y9TY%!_l(=(iYNqlUCV&i3yt@=KbeWjl(JQEehge(ir&40ZQe-R`yB(2653hFmd_= z%oMl_pw14g@h<-TWtC#w=I}#1$J(?P(*9qy;`CEJPeZ!y7xdl#R}QS#8PS6>v;5iGAcyZ1E8>YN z72^=1p~Rf(jCHU`V1?}A+)CB<>DA@WU@hHqt?@i_)C?_#an}(#jV4Z*W_#HXg z;2RWnb8e+TgVLA;Rtj7LcK%wz*kxPah3A7sM=Lq@;w? z!>{F#7O3o^3_F7N$P7?HrF`?F8uj>Rn_cJ-DO;iHEIDVapT4|Y?%#s>o+-eeU#q$y z6(*Xg-Yl5J@QDY>ot?KqEsYM-EUij?=vIVrgU2@LBb8FRR94D0kyMxoj3;BKT^<d+oZ;Y#s#`?*oQG&g_pi!r{563G``+_8IYfF8E zT~ddDE)*u+3BD`#LYEV2-avEixg6i?rE-viAWinjEWTXrD)mlWm5<6$yG42gA0^a4 zJ8E6Ghyh18aB-Pd6|_Diy&N!O9nwqFRIwv4R2+n}-)qt<;(hm@6r>rOw=u{u3{VXs z#m3m6eNdp7F1^So6x{$iG+tx5pwQ}>P-;UsEU!vneGUsIrAlb0B(`?yo9@^2YMxVI z$I8aw^Mz*EuB{I_q-t7m`=?(wM6oIq3uie7s^n{|?w#Kq1VRUWHNiJ72xRRo>~0Z(R>fwLV}$pUQQ3z6cci8^F1SN;9vV}cB$v|^O%2l|wzSSZdHd;SwUQdLcX z-zh~BRJx%5JLY(OaHGdYw#eYVhz%J>89lNx^-;%sRJeE&&7db5z4H{x zpGwO+{>xb7U_$=wIBXK=FiRU_1AxIcfDG~IEB#ezJfpj?)!!l!oGM~RDta*YK^v%RxU^%$N zL}C)p~^>5r&63fv{(u}TEF`y|5C;IU;`%U)kdBX{1OyAjEt|M1;!e;P&WvjH9! zc)PP)K;StmjR5PqRcu2MAca>@;d%57&(BaX$I)AY`G=mGmUAsEW}H9N|#K*-lZ~o5ej9f*Yz8wOZY0IC_ya=3TpuB{3by^6kri3UZT7ms-QNDpM121lMs?&Q)s#6$ zPKtrhs&6?6!;TBYib6%T@1cwzN}}MB8un2zW}t~<8k~MN%S=eSo`}J^okst%HS`-! z49mQX*jbY~?vH6M$iJtGDhe;)2n}Fq57od(ky7<4M#jC#dN6zli+R!Y*7Nt*eF|nu zWTn0mlv7gk%kPYoDyw##0xDfNz1u^e=xp&Ku30}D>8j_JnqD2vObe!ldT(UlT7ld} zCGd}~gHEvy%1eo(bc`Mo+@i+fWjz+14dCboiqievZG7{}1uYtF?aO`}_ejH0P4~D~ z^6MQF?p+7G^L;xEW3oEapKIs4^hV#grU(g)%g-vpg*?SodbasR?9%-A5RpaC+zn2; z)9gD#)`eT3FZah@j#8QFCR_JA@>Bkz0M&kDwTduwamAzWCl!V>Oq0B?*7#}KA(>nE zC+Q})R%&7piO&=2Gw6iG4$Bk7TN2OQMk-=$LZU{v2=W150um{FatFedy$5U!BxtET zotGn4O-=lC{1+igT1U^B+wQfSDWznE3hmfdSNczgT+tDM^^oIpAF&!F4HI2t5{EM* zH8O;Rz?@irx8LlE%$K?Rn~jG5a%s!y>=oQGJLi2|eV5|q764*7=i*v;I;POMa?pwN9(!Jg0IEE` z*em`#(ZF}7q(-yDM!^YkxuN}}>BLrk8U*4J%n}GLb)=1_wZ0ZsPyQ32#OjXk#~~Y~ z35O8MHM z#sgT9^J@{h<|-3TsT5MfCCwL&hRBCNB$=F}jKz#-0kWM@bxNZ(f+<$vt&dkJoODjq z6$s!}kRk6dyz+p$;Kv>7E~3=x#X`4t4&3#0@qa}s9T|c+^W<+Lj3-)te${CcSRnJvPBICn=C3!oaK#t^-K{g zr5Etf4!VOM=NrvTI?XCUsoE9AXF*HF(-G)X9*fpKg=tfM#Ii1 zqu|;HIqEr3;Ju5gxHI$mTa@#vF~#NU(YOD0>+XicP7Q~r1;EHt8fl=8cD}1uY0B?2 zFSCQw@3X{lsgGb@TfCA=>QxDgP%iNNL=zeYRh!8TOph2zELO8VQ2ou)>y+V)9yLiz zG48vGX_xS_Fv9Xi&&0YRg)<=8* z_Si#6kK(PEs1GX}c|@)J6LQGnb|iJ{U2Yvb5817av@ls|Hq(=nlP7IKMC)$%Pu61~ytJPv#M&FqhVh;41 zK9pjLB1H3<)xABgTge6HkjUo$mGD3(dsmF&I!qv;Ky(!4c+_dbwhdis_MOv!8B=dj zsT#Nd7yU)AhZKXj%HC_lm;P8AsHkRaMDP5&6LZNu?^y#NSqVXP_OsuB^x=NPvt0i4XU*dt*d zkNC8|breuK`QwilML;1EvERB84&0R|Cu8lNLm_ARSVd1W64~%u3iJ zTzaal>CS%}QFqsEiN8Ztc+4;go-+}y&o$iH5Pq9prXLdpb3?8Ot84lXkDrI-Hh{1d zc(vsuW-no)#Mixui!*&!ygL$EW7hX+#4j>_SejQgYfY*fMW&g%CiX(#HLo;Y&-F%K zHKL^r3|{~d&NLE`PXk)GM+FH>VHY3M&EXn<>ObcPlL#8kts+%l)s`dihyWJk#pRQf zqo**TUqX%FYye2r_g?+aY)1Awn+7#xI4Hrta6E@7e*((nO7qlTDnG~=mQATa`_OS~ z^LQjM&B|RKLYp!)0Q-#uBTvM&>q7Nt8JUc$kBEO`^(j(>XXy!CJ;itOGC_i?y&jr> zx)XE0S>7bEvL}Wy2{JwE3*dh*9KE75qY;y}_PobeKblrDRj?ILZ*KocPg{r{ugqN1 zvfRb{;iap09tpwMKWc9L;T)s8Xr&d)#lA?YQ+ux8C_w8r^iy+$F84Y*dEe=HnR&oX zW~t{IQDs&GiL)$;0wStw4W?ITcwGp`U!KCH1FLm8H*wH#fg52>A;JzmoFBo;bmS;| z0=D+NhWw9$rKvVhYiUUX;J9cSUjxYW`*`-#OuRp@sot`dcE$9KhdKoEiOP>?oB>1d zQbMcq+a56SU}f>iM$2h^hkK0=A}mHXl_8}d;hhN!X)A_sbR&ddaG3oJ#n1IW)HLrwna0yyOyM@s*L8`A7ckk~YhhJiwk4)x$uH(g zf=iQnT2wuA%#aFLxx74rKMsq>s+E|vSP~)vhNc3P7M?>jX$hLWqzxGsnIiJ3^moOX zl$q@f+x3nZok*Rk5KtaofpoQc)5AMu*7+$>>2BPmDC~MJo`qv=cGKDX zpHoF#D`p57bzdBQ$_+;*-T-=snlh~2mHvU;MIMzd#}srBq{CU-s5) zoGXhjI~oiM-nFNx-IwUh2}+q9sh@j@CXLo9yUjK(l8pcriuIj&>N|hY3uC?GLd>#P zZ>9!P(ooy*z40`LmqjwH)x2B%sX0_v5(obVE=q=IR|e+grF;kq`a1@E;W#Nh!74M8 zUR5kR27q$O(O@7TB;=P5-+?O{gW>_adwcp{g6*zw%)WO7cXjn{j_o7mSeLjc-7q=D zdqTQPmtCCNq3lG;Kv(N(W|p4_9dL}SFm>^u95bfmq1zwCT9-vP9~kfD^?p6SbSC|@ zk^7??V#Sh~d!cU%CKplR!yDr=b%G0i22Z)Y4>WCxvK)>ZTIE}^t8>c*(*$#YM1!y! zE^90+d=Cta zXx9@m6B!mV-)8#2N&vZcj=3qmbcW9P=&~?Pv~QWd2mFK)cZ}8i^p(ojQsVXNRp5I( z&VNv-Q$PKURig5`;}pEId=2jfA}vTX$>PB%eo!=Utx2l%=w--k4;_fp%-`x!*dsovS<1pb7hR)7{c84{fUWp27qnLKCF}jmJ z%t=_mVJG({LKvnhXohS&_pI};E1K}QYWkY9Q1uK^kLxgBA%nH&)#GdOtkN1f762|F zCw9?QDXDf8LWN-PJ|WM30mgt0FVYACEn?>GN7jDV5_T4$1n?lKAZxNyyv)l+bJujH z7`PN+WT-XBHg{QgJIPNvQYK=5JzJ|Rx9;@z%0O_~@u{#g9jC;oPB!KpEd^Uxd_U`kL9)OCJ{+#ifVvER6gQuJHj{_Qj@(U1{EVzN4D3A zuNtyADGSa(kO@5fHsO_6BPqOgs`*h&CzMQ#N4WqE2+`flw8&$+ByV9O{fxzF6jU0H z|3nB(;NP@IpySNT@<5$%W}t9rH>oUKSYRqFI#45erdIsas&GeswJccgYA>tBf;<*D zW^A7VouzBB>m)z!??*@Ya`f{#n+h7_nW%kPE+!N$j{Xob`R(De);yh{PVzsO zN-4^I>d9n?Vu#-|lCyeB49KjZzzty9BxVTz#Oi*f*LiRXch6wB${Y`aimg`L1Z<6$c^kG}Z(=Yrg1vh_6T}IJ!~}hsrb|?-KcCJvpLAgC zYaj3=t6`tF6|76$%+#6(-tu{&Us86J*tESd9Z$f68O->Qxqy?9e5t;=AgL$wDd=M< zu`-$;(-%SIKwqV8Xk#fZTBn`q0CahOEb=%d3qN1;%Z1fxMi6S&Q_sy3>CYvkok;a{ zm{M-{dX-~3zQT`Rc0L&$*50T{vl~Bn3$qP*)|n2GBVS#bZ&jZr@sZXEfEF{d9NBd6 z_LbDKn$_?fW!d>;z{v$q7S8h@f=`Mc8-PNiB4shm5%;|a$q-<`b;>VN+SSg_c4MK+ zHN&#ozVAg%3gueet=-J3qJVwAlH3uv*-DImGsSC-yz`~Jkl#DVDz5X65iITYsGyi! z4YZrxQAJDTaq3bqrs$6aMZ57(o@~Q&1P$HvpCnQ?F`Br9%+c5z^u~>zFCg zX49d}bP7hHl#tv-!%vey?0!!fHR|7iw{*8|B%YrxbQ<_N?qKir)(1amN##+~$x1LB zB4o_T5;L2?k+C9w2@y}U;{UBD3y|dX$6yQF!5iS9KtYljP(D^=kmo$4qTjvMyq8fM z8QDt|S-#@cbAdE?@J33q%#Oe9*X#{T&FSFSJQ`T*S`Nsj3o@3zKBg|N=7uTFe_kBF z2IYpG_=%D!%3?Y1q$MMhk}!CKe>Fe4r@m%hI5gV2Cnk~G_!)NdcH&AE%5WD$|$Qu*iAw&(N>sAyKhx@|nZySKHN-`rz=l zir)Zj=0JCLW zXhqg=k%=vx-GcIX>;CY7?)!~nyIW3N!RQ2vTi3`~mK?mp>&{g)P z_!Lh8oxZ1IHEC0kXcz#;4h47l6|M!%&*rIk?X=$Ov+c|6rUz8o^^A;9EV3gea|v5m ztJ_(Mf(xGakQY=m!4{8^btFAduDeqwga=&|jS8}b9EMy@2Im0mhLQW9Wqi9dqptM( ztd;JO0h5{bM!g{p#r&g&KX_NYltg|tssB65aE82VWfL0ng1LI>sotL_sp0dcUuy;5 zpRCK@5=aF+m!i(c`X=hjNg;ysFP{YBTaMB%Ha5nD0I0ReXi28(RmA?S3q zUkldp)6}tpYPMgX%yiJ>TC=@|EvUcP&#wwHcm9N!+&M-vJHQifA7(e!>k?lw?Szk* zG6_w`BJ{g~xt-J_Zb3V6&V;p%OIA4sj*|I6$#T+{b2pdg^^I^yX3Q=yzB!f048q6_FBT#=Nq6;~s~JjQKK>~8=9nW0Zk~)yUo_~w zbtBQ6Koh_iKJR>f0@uPQdvS=kYrDJkA^!A0(|zQXD#UB0E4ww@n3%~U3O{1^l(PgY z#PaI@bIaCISTwwVt~6HCjv8ZX6IXlb-5P`wk|ht?eHBsNYtnn18dJR3HEPR{H$?D0jc<}2Z@O2nOwRF2)w609J*DW)*_Xq?~y zBadjl9=(>R&q1aSW!3FZiuav>&qeZTo;-xhIiq(E+rHO1pN7Kg2q=WYD*QT zrgL<7CIA6Wj(a&D)OplNEZBxVvmiiDU-CeHpYCm(Fw9hFOmG67{DhjhpX9XsukZkY z+k0K=QS53=likljNHiYD1_NoFLAM<&Ep{r8FZ6&#hc78@viDHNCWG;7Ux3a81y0R( z-RX@5`Ftw8EuNZE3Z(0ABovJ7Cc6v(q&YN7Gl0>qp``hK=1<#!1Io+u%Rflkgn3ud zVffC4+jDzTeZMl6(=K&9}nT?b`af z*bE24Sl>*C(Rf{_Irg0EuDQ`JI3JN*$dWY3k;U27-9SU)LgP1}4!vsqwJI-TJTN^9 z8CqKpCf*nkjLt~&so7xWc>8CBbTk3y=4C~=z>EQKKvVu%NuVI(nH>yKEL|djVqZ>`?qvox;``Mbz_X)+-sMU`_9@AcJ%LA8qacW~fdA2r)xRm7@zK2y>S)$*9h3m^NT*b;xlSp6K ztlOta>o$KWIV6uaW>%|6M8jSj9KZ1X*U_dZ6HdDh3U}xxL9THn1 zI(1#t+8WQCUFftg5Bd9r>CRx8ZM;}XcFS;{`Dl+2eb9yUz91#f(PppqR-~=2_UKQHxD;Y`Vv6Y7CXjmxNv$*!;^!o-|s?xbb zQ%SUkeI)`JihZyuOcIpVSc)o|A@hD?rja=Ff{&oA^3_}}N9xL7XoPDoVD}ZnZ4D36 zb}RywgQ%9xHFl6>;QMA_)y*+F0krI8m4O{*%?~%He)5@g?h{>}~Vs;cDUQcEmw_l!#HVm5>Lh7VaV|2H* z%uAwWg%NzTAY*3k`|m6~j6&gRY+>y0yAA;4@PZn=#{^KZ#(U^Y5jTSBn{&{_9MR(( zlHkNza9+0n@V;Ne15Co-5{bYf$imZy#o|x7RX?eM=w4N#bo!13`aM5tNiQ&fs<(m! zh-0xIHoCwyUW?l)lS%`J1OD}a!{ND0PriDO4VnKVbDoJVO4B&p?{k*J$hA4R`J1() zId&GS4iLL)>stHH!NjwzKo#>qM@SMdU}k)JbeQ8#dcdWjoH0fx@ay7A*4IndXhVMs zU2BTXK8}Mst)X&j-WIf*pnhs0K=S5Tp6&7-mREhcM$b%6B%E?8(GA!S--t8@kEbmv z%aUKl#$6vRLHx`R8-4J%RxevD@PXXq&gwr0C+No|#;61I36*QYzN}6~iKurcX<~~Z zGvg8!Ko)M2HN@MBCQK_)^z?ViO;<3rXYrLwB#MWm;{SqF^ z=XEqR8p`-E%pHv@Ltmy{({f5@>_=E71Ut_q;cyM(^LcXkgQSmcjz%C@t^!@Y8n6AH z@!dBOB^KpQG>}csls{8kJCz0G+E}6}CmXg-QBWEo9z4bCm82=Ya8`)tRJSH5mN;Sb z_;JS{qYE6(KHZWU2_(+l>EAWboExwt7$riK5P=TWbOzrVY-(W91LF44OBHZY_}5=B zA`zYvf(A=$UH@-y4QmD@i*bZumZY&5Mi;|!_=|K8hs{q;1!>~kC>}Ty)-~R`NDjRU zj`%dPk(|d5phr6kl7&#ZRmy!6O#!>^DKNmDG{fCOp#%Tavl-I|p_8#B2@j%q?7V7d z!@%WsGk%Ez*^Q|be>}U9!cEr#imA1>H~B*~iinE-;UM;J=c);+0{YTs2Ig!RoScTZ z7(VqMvPTCf&=##3Bhv&bD96ofr|__ymu;*A1iI>KZ`C(tdHD5}PomW*%Z#AAc|OH1 z&}ufUYZXU(JK6f<_1L)7X`p%7HDCqe9A-|JX$Dv_2~b~Q9QN7DN==aW6bLb|^p{B= zG`%KIzvklV;a#f`(hd*+7&7T~ehgE>BtP!5SQl#Yh#7yz+NvpMDQzEl#gFm3A9Sl<{*Q#2(w~GJ*|DusBWj+YkfC>0LK7 zSw!3|qUm)!w|=Raww~z5OeNX$@np2JH~1eqnvroBiFeycJJwQv1Nn z2xmQ55;E}I<3=3i%)Rw(Aq|o#CZ{kFdJU03E4zdy1HXc6bL(N_p6j?jqvnrhF_=Ay<~_5W?_0h91|-@9d!x3Eg+;{QbY9fj5i;4PhmL$^ zYKcj}=KK*b^{!$i1dy$G7mQzJoH*g$tK;kT^{-U#q{daPBc(|v0Jcb*M4!pzBV`0} zl|ok}IA#A%XE{_`y_J*=_QtG|EU0(1h@jC_EmCKx*|zy1-yZvg5=$^CDNyARtY8lZ zFhu&DB;)cUB!A#LJYV*Bb$sTJf^yl@ zFXl!*`%8~8<-cTJTa;P@C(%g)Wf^L9RA@$i1FOaCP}+ja>GcLLng~|Zf7g_#FTM3K zGsxvMQgbFHnNj{h0UHkVl_H8>pygByKXi8=8}+}|8Vq(KW=5R+PCrM(%4AzM!M@%1 zddUPCU&{3sbWsD(&M3mVKxUE8`g}T%Dw(QLx+jARY0o06r!K~;#f~^FAks_p3;I1PVEt!Q#_5H)zX%R;Oh5% zNXHqS%LcS?Fs&gBAxatc8^zfU;0xB>So9jpLw2uu9cC$!sR`bm9jh1~%GhjW(i=Ky z%0t;0kssmC7PZv9I3S{=a3~c)Wt6^x?$vD5cQwJb%|f&#LqzEq5*zR0bOCop5doCB z(Lcy}e{u1d`bk$&(_+7pwA;BP!^*>a(RXiVQCl&{=;(3<_L>gkDw^qPD9#C6=f1@T zU4q^5%xRYmjl49lrjS5R?ABe3!Jy@3iRto8_`P?FRQ=EdB;U;b9khI{k(-c8Snh6U zO=gdDo)~JIdQt-VECH+q!n(_EWE(txSUU0gAUmmEWH;2nLznLcjDp44RKW>er_K`P z$74POXt_kO69 zPjJgcqcifKNLEqwCwd$l)FWcNMr`B8RwEFMjdRJylw+X6kti(Kcb(YDldLMFm%6$2 zzfq70F^@uFn>!wkxWACp#Y@)fK|N5xsvDt`xkzZy5|f!7A=5Ff23(F81VglSxW06kzQ|E1=gF0M zD`MN^)VzA&Ovogi=Z&4<~^SSR9r~Cwk{ngUU<`0UV3JRxMH>43h!VP@(%@Rdj}`^1;U&$aE+sDq+rWF&*`cYJboP z)PMup0=WptlVQ>Xig%H{i*Jv7Ed%d*sUl77pf@Du%<1~9=skgn=8b4x2HN3k8?vh<@m+a zdR_<1=sE_He29Goz+;Yn%xy2u%yQo*XoF-sl_Hm-WKSR5k|Bm!HOjXGTVk z9dIz-#G_OHZhd}0z2lDW6}XzBzRoJ*aROBflIEkhw*!>%W;u+Hhye;2Mnic#AL~kZ z6qbZPN@U{rD%S~Dou19ST|nVinTO!0?~=DW^C9q1pd!qJqS8&|lc;KNK?h(`8iBp} zPeSBvHRa{4Uw%g#ES_*hZk;;yzG8D9G3L(E zqgIxE(x}Mb8Yy768ktiMLfA$?fA#(4>blgORfd;ML+I_frh+Kdq0h;QbKYV8M1+Sk z-E&rB1M^G*=gfA}qb0GaTIo8{I6i9e+o51_DNiaA{mj_vXQe@KmelH&p?i=KnTq?y zCvJoe;|~7h$Ckp5IEsgQijN#+Q~vZsMU4v3;|v^6A2mJ|q1i7DoTTw~=EvY}$7*6U zl%^2enuIr8I9ScFf>dNneE_=X;5=ypz1S*NGFa7y0O<_}6C8(r?*+e;y*Rd!0)Sj_c>xewF`*BQ1nZ$L4>|&H?dvF#5CQ!ULY=J7zW&m!XUA+;P*G(oi9y62^ zig}!Q*~LQTUjWwua}iSa1F|m0Y_*WQ+*1{1Nryj}jgLQgPHjL{(ktzXAu&2jYfcd^ zur~ljsI*PXYX4t48F4$cil|q!yoG6M%8rf)oee)P!MHW<&Yz_HmBjei*I`gd$B%0oQbjzB%)O<~K z9q#oF>GuU|RrfVez~q5EW8*jPx@CnK?8z=MKi0J|)IGomKREMuf4{bOL6|KmyS%x|<-vpp`e zw|Y@)ehO<*ONvM$;$A5bku%9sJ3LIrwcD z=l?GqRKh-j>T%4E2^1&`t^H8EyKbZ!Ef{ftu)tiQKAZzq*LE6dTTAMnkS`PTMgv73 z575X&Z=mxgE=6D6IY+u2sUPYVErfDOby7Ap^Wd zZSQ)8*Yakj-EiSwn2!=R`(q9_HqGj+3q5`E)5LHqJU0!UnsOmosvLn#JT2gAZVbDSye>@|SvD@MHJOqd(GDm`O`RUTq&3k@k`bU&vTS0Q+% z!-Yr+hY+Wjx3~4Wq_AmV8OO!qj}51i|D&=B%KSy)`os7IEYN9xsZ1~>q0QVUc`C6Q zL4gaYHz~6OcU;D~HpKZ0_AJ7e?P2vq9AUaMHlH1Hf9k&ba7mOUi1pu;{bnsI zUfeZSb75#?IziAc?#EytAF+alY+4-*wiKHDDtswmXts%SL097k6d z`BiXS_4*MreM=2Lx*(@QVSUdtt6Y$GXB%z1BxMTm`+!x^xz@UYs4%BJ3C0T~@d_uT zvS&+k0|}MIPu%|)iw_coz%^V<|%?<%CsSck$Ri z#V!^y?}h)949m>=wSxCHM1g&z_ZTUGr7`4?d4W&#>S5t6T`nxjzBh%ohnA021|AOD zcC>;H`@kHFGg0L{`V$C9HZI^|RCLe?I{lPcwk1V?ENzPx+tGyUGNOGYN-^XTcKw7V zxX;)p09pAHP2&=X{Fv$vJopu8oa?&V>0}Gp|9=?BKm;etd=V53zcd@4_1>e1h7le2 zLUFACVo&@C(=SAkdV?ynCcRimlEqKHmXk`z*`}9KJ=^`1(Z0A)OGw1_-ea2y7fG$P zmH&jDDFqCX`7264y$<;bhJ-I$FTymMde$UA zLrtwZ;mdf~YAb8m2~En!=D+L~1Xqs_7fl_8G_^Y@zN2Z8O(>?!0^6QWs;sF$${@7M zmrf5(AA)pe`!Yb~5A!0>-e|Bzz0_e=P_-(}uL?PdndfTSSd5#T!-GAgQ)8+Gq?$}^ z4a5UWn+)HFh!r7Hh}hW44`>wQz&X%wED2W@5Tc2_BM&y0Uo@?nquB=CGvku*Upq_;J`FR$2~b=fxzqwh(Eu<`MCk( zU&F)L*8@H^b#Fset%eM#Si~e**Gh0aQ^m#FO|4&&0f*Jg3p?$2n|P#~jxR^eL^i+a z`I7Z$VTY_G~=j z!XxIwn?*yx!atJx(=lO|HrCHCN^qGaV7YyZUYA!3`VD{_&5ZIsTAT-$HX|TQmiMaB z15x|Y)FQwBjAVR-WE2l5SE>uJ+RSX3gM})g#wpg?Frg(w2|I4_TLytTAAT!@9r3&T ziL4F3z(AqgR63Df@l2(&<8ZS29yeZVo||cax2Zq)SRZX4VeCmR2yGsE;S`);rDr(X zuQ|%4u#DvBas3~5;t6}M*Y8Ldn=M<%B2_8BLPAZ6I#m2Gs{+``sdBJFTTq|Q`#c7V zID8MWqzgfz7phK817@n4cax6lNiC#ud>g>1^O7>06GiSW z55W+L@38&}WfdvELyEel?w%KsnK?xxhRq&oRE3_EVSl$!c0|Pk9M+ zxZG}NG*~o9Gm60@EV4`EaLU8vXT=Vd?}I}!IX^(W)oad9bR(ExuOxRo*MAP!QkkLB zsrq}x0Etntnfc@{B5?_dy@zPrt{hKD@UM5+v`E7lIQdE3@H1ZPg^rYe$7IJ|72U$dx+(Ka72-=r3a>kZ9fJ!XoZ zLWxp}XjO4$3Z$Y(kaA7MJXBiMK}*DWhcrw``cUu4Yd|Bh$^ZB7`u5peP5hjE@MX0$ zPnl*E@0$0sIYW)drbg2?+D)Ob4BODVj^qb zEc`vQl_0!k7?V#kiBxiWjS`O2R&Zp{B$ogzXmA{!z;IHi@iXPA)yG25Va~LkA!Sf| zdcO)+vA|U8Za99MDTo&mxHS1QC@POfK7;h(oNqiAgAVK#&j!>~byc2Qwl@i6yW1@o zhv^`WCV0s#P04Ajr2}Xz0v&X`;BwYYj8NUa<67oiI82h+TnOACZ0jENXTgE)oOBM6 z{DeN-80x8#l?0+`qYiO!vtF%q=Tq^j5JuUlscj2sGoeUX#2~z1YXDcbtsTMOuj26g zaYZ1+?~T|{fQ|joB>;`>z20$eZ$v)%uN2vq{3NJD2+aWzVIM#WW3oABtS{I1_yeg@ zB-hc!=W`fcOC~>oE=|MfLQm1Y?D@V&%BIv8dWHs30!Wb(kd=1)9U+~d__CQmE|V8G z|0MH{;YzQo)tDy7fviw31yhsN~!`3y5jvW8^?9L2dlV_ z&7&JdUIB7=xqMHPDTk|5vCxSAH5cam(vmP$@J<;2Hx{}Y%<4`xgUaA0JYU{E=J$7l zuzYSU+NSyZF=QN_p=cpLKDMF&$8n)7=H>ZtG+dS#MQp_jATf+Cz2K-L+}jj~@BcMl+kE>BaB!zpKF$=P}20S<<`@*XeNedq@KtF@(BW=Y-4C*+?+-oNWTYY~@ zOCESrcEc}jU~ZyW?9A|~QKowr&ZM5FOswVN+3#k5Q){*lh(S@zv-lHi(22>Bhjf8> z@{AVqe+$C{nlJDni%d%^DW+RPB55ei3|{W{%dcN{gP>cOebx1QcTb4ov2!PP}iH!}hl z4ef$sA`r}1$W2zaw_Q7U+DzpZ1c^Xb&i^ib2q)R(AZdD7TEm1+DxxN$5cuTIAg-~( z8pW9qiA$Pm5~Z9XK0m>sgd`=hW6UmqUYQ-6-DHS8|ILm$bsnRk_Pr1-z}6?nMLW)d_U}jbRJvJ(=b7FZ`n^jI)if*dKPWb{yGXso5%&0&Vev%=omr(CUBH$M!}O2Z*s?lNdZOPxulSPW3u(~JghlpMXR z;6z6TJz)`{u%JO-Cx;O2=3&DC1_C45jHI^}h1e11o}@31>wyPUEn3^MzP==4Et<1D zNPidNY-tLPZA?##u&QeI@%2keeL2?V_GJl2xMn=OJGE!FVxU-zrCgi~A|nKrSF9{) zT5lp&8>93m`H1o4=JJfuTI&`AgeolB_2Yfki0FP3C?>Cn?8>-EdBwP#)!40B;)C9o zk1RMx*SrHXQawmuY%k&PGeNv(&c)qxna9Z%Gy`o3nu8Iep!oiu4dnF${~yiMix%O+ z{JGn5joY*jQo3n&bLDU>$H}1jhDRfvDbl2}9e0Y!kI?(+l8#F6!pOz75LeMai&c~P zm*z#ST@an1tI_0?CfX3qqpOUp z|14iZ0#V%Ts#=~fm0{0TU!%Y648cPFR&+m~Ww?-mW^jHw1>mUsF!)(u;gm`e0L8AT zY8N3z`d-J6iXTIFmcO7xnT};6RY&Myef0Es3P^Zh&S*p?M*78z{C! zL&3T2!NqaNG@*ef62=jQC%JP@2Zd(*_WJ}jP)X7r%~BI2q84%LsJrHJLz{K8#LLl5 z(4HR$MsjKMT>i^X#lo1p4UV$m71SiX{}qGoYTIr!Z9MMsm`Q|BMy1mOHmf~A3_4$| zdMgi;9?6*B5Z_zlnDPT*$)5QEnPhSfYuWC*eqyfd{?Zt?I<^Rz|MzV$IC?%Sgg3K9 z!^+7o;%*d8t^Cwd$D3L1tkr>`a1W6J4bz;$)Az1@%Ln^h*HJ)+^plmK2ZCW(JBDo5 zy}`+@O}Yik#cW8Hy{?sqjZv%A=7NWaR#~LJrN?Pk36PkR+(zcovS&hoDT#Z0TS&UZ z1bM)|Jx`g`C&uz3j5^|4LGKn-hECxp!ov`~#ecFH;aJ#nCJgS>g#%Z@I?fs;cttcH6P)RmN?KR7g?# zTR8gXeyBC1pS~8k4`wh@CqNq{mC!s|u#{pjMkzc4gcgpk@+qy}5t_BIR$Nnc+~ z4uuqrseC_@$$hvz zmJD(^N(|Xit5GO3=!$Gfz;H0E+U9@MN~9(+)PP4zUhErK23~Th-2@#U%eb zo2F2%dR)>qZJ^!Dk=8txb^09F^8lWyYX=cf)Z`4iyjHKhOgHoI3jrUO|2;B)Z0jI+ zBE?`n75VeeHyjKOSyLH@bJ4Cpxz`xk~{LeLBPhZQ=ns7L zt!Md!_*Zq|w;~USEZqoP83g3vHy0{!t>~zL3UxvTtchE<^$dM-b=;foDK~H$a%yY6 zfi}}`C7M5CiIVX6(d{D**seJ_uhTc$iNe?ke#{iVBCNRPy8&Blw9SU^R)@5%qHJmS z_2V5<%=GMci>|T+KPjJl%Wj873hq>nJyh7`BLR5eXxh((bLjAmIZ|e+7A&X$zj2z!$MYvkCy!-))2QMr>cbbtqM|Z^& zba8=he2tChhDXn2AmDB+f>F%>*Cd1dNg?+>p{}Rf zf9#Gue8S}_r>N6^b=;MWjfgDDT^De`bWNI1PJF4^sS>XUtO;^c2d-hId1T_>^Hq~t zDWp#&tK_Sqca+J*W+YPAQJF25@kAv(V*|^jSP5AjLVB$7*IHG0;z!6_ayW(Dbf%Cv zKl)nCxFPcx_snc?^Y|TLLg#SX%475SFVb=Gvj4buu|;0h7VXT9jXyy2FM+z@{I=5Q zhFDlyOQKYL`tkPC{J^PQ?!MWnw}TQs$Vbl31nusZ7)48K4T&Ng4!1kv9iGp}$(o__ z^P!An3n;8fnuw8zE}PW7kBY-(K1QTQIeIDzEFt(>?S1(xM07dQXN^s~s)A-~A2GES z^F}3>I(C9i=;G#)wf^N$k!RbPPDDva0wWY00E(mHCjdtU>*5_k+y(bZ7)6DFYdn(I zY&fr~$Dwm{g^9VPgPVhtlhAm-_!DHHiqhyLP-?i)deP_`%x7&je)I)%;9l!rqCt!_ zsw*w)}N=do2?80qo;v;o(as6LO;iz#qZCnWV>q^)M|M!4GZ13+rdoT(C)( zYln3!78EyF#MK0rfRrH1-;qW}$ZLoae6#ro!UK)q%sdTaOrIDOFb?mi<#{qnMU9bE zcrKyoq=#u-bEoPpy^F^dg<6XIY?E<3S%E1|&|CjWI!?9Bs@$6R16Yare_+vDyM?Y3 z90p^YfF|aY*CmO=+I$S!+Qbsy=!yfFQ`~%fP^F^U2KSJ4(L>1aaISq7rdFKTnd|t1El`xBPQ?0GRv-+8 zi`IEAd?CIu5dP9k!(@Hv=WN~tElyQe3ho4Z0Wj)UY!NrCvE19lC&SG+d&K%mUY|%( z=OF6{6~0Z)#=_0Hpel0`967PNzC*CLj?hH?Rd%LKiVd^pr+7tSm*%gFJI{0S9zuCL zJ;>nV6LAa$+fSVS_zO)0nQeVQEd2<7MBc7k{>-mg!cw2K1z6nj+vN_kBZlv>xq5nd zKow|Waeye&IxF5haR-yBYm$`LafQ_p&Q6Hi{*aLbNLB>WMVGCTO&8t611ZVOfT2yH z4Vk9<$a-UfJx}YCb$JCJW(?}ym*T;_a-KLt`FD!LlA1`IOugUf6|n55MyUMt?q{}0 zG_GkJVFz3bn$NQ6xK~R>9vr*>w*ggNRUn=)D#h0dxB0=|*wgayGsQC^&+j@CbB}%^ zU}7RaGq!I=kvO$VjIN~4i%`-)H;|R}4AeA65=dpy;prVxUr;inaUtj~nXZ&`1;qP$t1fQBw6rRsgW$zYt|08Z69b!awFD5L z|Zrn zLg^4%=-7JhIV|xBQ>7X6*AyY~0s9d(-B_E)l76@f!elZy`V5fXAmF94@0HvuS*HY}Mq&bMRnLyRN&&L2!wTCv?WTsoUVCy!)1*8ByFQ!hdW+?GIf~c~^v0g8 z3SIF)aANTM&<30SUPyN`^>(>Nht%FasR(w~i7^T_doraF8zWDsh|2exwvrJw*6Ol4 zHI9xkLKK6%6;E&e) zARkW%$N+nuN1|IexF{^GbI_QDWFzrlA9IX4#+p2|Z{xdi)IBuEqUs-CmxJI3IT?`} zzU)-xy2USiU1+3>*lQlOXd`DPX5NUbc0q|~3X~_8^1*bTeFl8qH9W`^FFUH@SY%1~I6EdN|+mJbpbIci9iDm)n z*pCQO7^%cs0P$;QFd|NuK|!3~q^9gnqyoI|W6&_b+6$vFw%6wOpj3O@PCB7t^&jiD zN>M+=$ynVc`bI166R(14zLitgbJA#Ny;cSzLCsh8s zE=~$(8|D?=QXLhh4Nf%@NT%ET+{L-@L||#q<0Xz%>K3e3X4+{pT@cc-o6 zT=Pw172K?3nh)bIx1r@}=nWQLApB6ePUw9T6Z~em$-lO6WB5l!y@8^33<*oMd>ImR z{jY=E%;3L1BU?5|{CI*@5U;~He-P}2~W zla_e>e>lm-W(&VK@2|e};31jN|H{3-t5ob6j!2s*Xxzcf6yX)!X#dEV%}2I(nT8Ss zpHQ{Fet_-DUDqtC7D6JS>m7M$zR6HtsNjSt9h8n&eF_yMcluY-Xt zW$#L}w&pg7I3RN19VExD+{q}AW zcbyFfHhna*driT&T~s#pl!~Q1B*jt1{YWZsg-$dG`ru@`-C-1A&T8>4YL4Br4BgOG z!Q7X-{I??Tr3)50Nm6}66nms%s#p+@HY|VkAH5#XZ8DS0K<9Rzzpk&ww)D;-MmtZTMvs=0BN?Zi}VyTu z-%{;$8|rG5SMl0PMbnkwvx$U$+y&Fumm%m(ohhv4K>uUMpYAhs6Ps?{GB#eO90VJi zmLRtgi&IF^QP0dPx3ydQ!C)0=AFAzLvhaGD8UqkR5~L596sZ(4qPVu^h%>_F+C7ad zA)X8^o47%5gV4jHn2#Xw#+E7PW!?BLc=UF@HIPOF$|>cHfI_P_B3Dp@SYVsQWPq855lWpi%c|`z_^7N zGBa<*7{ON_xG(>K)yByTEVOVZ(7ZdxHFRguz>ogj{UT3E)a4yxEidnaQ$OyHx?VmSN)+d;KSQu`C5Ji6KDe zPJgDGQTO5!9|3l&Myf()wTvQ9SAea5%kLmwcB+sl&X}@;k!bmSYzCAz5W;Ya`D&-{ z0qB(Q6bnf}vZPs@qa9}M>Ko_gVc$vjm}Cg0tr1U!*S_a21ul%sij3>6tSo^v@P|Zq z?|eWV{3}XiF(vu;QHVz6J3iY+g;iM(;o?AFv6O82Bwi*@f-30n3B2eWX#Q+s<6$5K z5W%Re=%j#qc6W>HX}r_hz25X?SbGOB=7s0XlJ*q!&(L`uUBE)zaUuQLdYkcQflyUS zM{4f$t*pKdYbwZw!1l?d9l6A?AwiDC3g>d9xzbG?AT2Mmt!~jL2XDL9CLj6#fjT-q z!_~M+5$X9Te6xB8p&=ZznS4LDu5z@ zYI-yhA!iG?!BEk_iea>dK1w;}Wl$9(43`(8j6M$6E1h&aULqhL8(ss0{XD@57Ixa( zH6yWe+XP>d2f2wFjA|R7rb_EoOeCYSRj4HG+^_`o=?h$ijwPN7>;~ht0VI3=CYgX| zTGkM)+wrr&3>`vWXrB?AepQg)_$@D(OP^~!wM5e1R~d9h*Fx!^RZ=UO!|pgl0Pw}# z<+IfR0!wtZUQcF&xegPph z8$oC-y@PF&?Cl0-q2;qu^Pe+FMw28c%CDxjhLn#bw3fIL=t}^z@%VCFwQ0JjNkMvj z)Zt@>UKar>E91lQ5rUZM(2MagcrxM^@_T%((p@nzM(QhhI}i0IJb<1z7-8>Dz0nnd6_i;`~U8RI4$ z#Nf5hb<)6Wg&(Fr{AIxq>dQWbF;PD_~D>WCj--C^;zHnK%JuN>_!YoMw*4+g*zqX24-w-WRDwbc$smLp7Ecx zGs3s@DxGoKgT>1y0EBRMSBUEn#9sF?F*j1R$X7nM*A1Bf)04w&kbmTkBA7ve@wwcJJ8W>`SfH`7}k zyDe@I+Eon-*1kZl3Ek0S@?rMce%}B8`rg249pZK5wm;aouGe41jk^RGZflJaGwd_Z z>szij{Z5rOlZ8h)zTCx}Kp=&NE=Bh?5H}xs0w>!(kDkqr0*y4n(e|%svK|Plf1ywY zuwz1wk&IBe8PZH3FnLvr|8X6-8z$bbG&r(+3!;RwR;P#7yXu?4wr*$PPhWk-38?5d zWx8JU^-Vasxdz&Rk~b6?a7K2%h@BzK6c_26c9sTa)By}kdtoHg# zwHz(s!tq~3|2{US=_hL_CAa%}nr%L>GEDUA2gP>;;Vi$myQ`Z}JP&W3#S+1NQqI4L z!4LPKR-!3^hEi7;?=)bS=^)PuDe2>^i(yY^m5m*aKXn_Ry~v@gsFQSA$@|Cgz$Gkv z@MzCbeD&@xx8_zMyll`K4ydjpmA8Z9JGPeMUWl8_w)=(K$XduLoW3FI#p&pum>>zR z4gnG?Bvu?VO1L}JHZDABs{eFemo70tX#wZCpO<64w#S+0fooEvLMLNwQcaj#GIz>j zVDc+zl@Cj7blEoXW$DlYZVrQZZ;aJcVIZo{?!w&0q-=%y>pej>$WpJIli?%o z5T0!Td!EfM2VVYKtO(wtLtt@dc{f-7Vy>UhTQyCB?LPsbD;x|X5am>gzz;nn)a3$9 z7qhQ=RtuGKx>@V}QNyx9X^tm?MIpJ+7%|Klc46SdVJ8RnJ%T~3@C|jVtlaLrz8BlW z^7(U95Jp$&j}R16y%TW__cT;0n1Wt+XgBIf)?kJAXiopQHKvqC-XafT!0I+Yw-Vc) ziQ-pi8#VCHF$V(>N)j6++;Nnt9dS|*M}E~+1BhjmCH)Yr{Ee{Es*G8I42WzlDhF1d zShs>5iF>7r2o@Y|bZv>m@IKU^*W@GC&lSw!Fn2N9UZ1QdKI3;xGRR}{n@7sg+URyD z@dg{O)%+Xz^Tdry_6_mxy-i7J7(o*#YGPwv}g71x7h zl`SeoZU7C0#$;E%beemRtOZy&fl{D7dAmIQR@!AEOeRq*aLzloW5M{uxOY`DWyiuJPeiP`!BfZ@G=_b(33 zeSp)0Br9xE)B;l3;WFw`*5ixKtKuOviACiDIBY(Ht1wM2_TKGZp>?x4zFqwWNKOB2 zqM9$pyr{}{K3rwwMVZSFuZ#SHqp_W zcy*%IR)$e#7H*ipK1%D5)tVC^GQQ`UAM=U`d*gBLQW(E0Tvd08(CL17NcJ-l>7 zS&ZTuqJo@l=^6#ce3a#-|Kl&e-WE`9H8ElL5$<&G;vyLeH%ahJMI)f*i-rO2_W)Ca z3Oab2%u;fh?!qYLs{i+k&qVp6r;KQ>OCOV{41CHdHBlNXd;e@~kRnnibl(ae!lfp9#;m~uo zpd>ZOvlUG;CN#JzT@4$leZ6l{MF=8W3Bb5@?MV!3ma!j}-S zPooqHCopaFp3dwKDp;@Kx&3{o3Y-HoLO1vEl}qWWHdeH}vqJh7#ILtym97#+NHwBu z&;d&C&!_pvyMMv;1H^Ikz8K_aOqgofIYkxklx&+BPBeHAX!d;1^L0JFq}4 z&c$)W`EK2upE3rni~YD|0dX{KJ#a~W(JIY+uD{+W&&H)hRhiy ztDJ3U`$f$HKQ3G4Xxlf!&lyhp1^8?75-J)mV4(nX6TYz~0Rs}hDoX+%RAd(5OmUfu zj%%Ds9$|&23l#p!Ci>8JxJQTHyQuILZM=b{N(%2k@vV;yOxV3Pkwv$z^n2R^Hwf4R zP#7vC_G9$i{cMFO3b_f%Yzo6weq)bSr-{pl0gBa5?4^Z%9LiQK`GL<#4C_yp2m5{5 zEk&h>&7(=f5X1OZWYh3XWAJ5*;2Ssbe&-RpH$GqL8vrP~Kuh{PdqN|iAURI`^ys2e zPXU#7n_X;>_7WAzUoU$QJR95C214K3mk2?W=0^*VrH%D`Kw4rg=ACKq=GGY=gjHtD zqRtZgv+sale3=Q5T?+rW7M4uUjvM6y@+}|9fu#e|S*9>)69gO_TsD)vN$n?_D2{UF z4H2XRbQ*H&pjxIYSZt!SwY8a&U+Po_~k9x=XILon6+y zYyja2k=^P=J#^2aaaD!7>qWxNV>~dU)t%sFhHnI zIE4S74gRkHGN1c%~TQdevTJTHwXy(jgG1|jqW|yHAu45}NXM(f~v$FDuryS4FpSiz-M@ttf!FfiyvVoYC zx8lnngYSp3W-Nsn2`e;Lot0ZgKVd6}+?y7UKJ$iBpUVd!2g}6M3t~T7iy~qONboHL zPPf!L5k2>O0m;a}?IBu_MfkIJKHEmg_nJ-bEIAi!38CGUW!}^_bdaa%eg|{VvwoOk zgz&}0={dy)`3mmx7|jSG10lXAy29EpkVz@lxXqb&dzkDtcU!>J|49Pw4wgA&(4^W9 zz9d)}{siT&gJ&s03+EV}?gb)qtX;rfeG{*%zLDdXob9~iuRT0OT;PNi7K$VQER{SEm%v^UrqOdvkD#vKUE0T#i@AI-2} z8D&i;9CJr?Xc;0V{94}kyc-IrIb4^x(PmKZTxl)Kg)*__% z#m}S5z7~bKrNp>zj!I0$iU`u|uTxHCqGJD%e$JK+ZRTp1FY3#t+=@ES3jTn1X9_#V zV8;Nxu2Y@g!kv4uh#U{dSoxBfe2ay=GlTEnC#bsU#Vu)YlmkKT1nd6Qn*1^I3^W_z z?3pfKXv1?FU%&$!kX+%KDE|~&KQ4@lSWLiL^3eYKpOYb8W;RM5g8W-CmGYhb*4ov- zghTAVla>JcOP~vk4ho2bRAo$*FCpu|z9^obB>LP$8Rhnxx4IOdyROH6L==m|Gi-3p z$K00;gB2ofuPUjKh6hESBWI0AcMAk8R~^vI{bKw~D`ifp7iAX zPx}S9t)oT7oT}Wfc;U`zpA3e;jtm6J@-<(}OG1%cAL@C_?3&0R@l?&5x?4qGO%~Lu z7iH{~JhAix3%g$P1u8J=eZ_L}ZgGhAXs()VUs?bzOsy1UG9o&m#?)l48ow7cizE!K zH7m&OV%gP~Bv69L41L>$1T00*;U;A=Z!JQy2|Lf{leAJP>pkoi_x!UAxL|};y3HDw z!A6$Va!XF0DPRlZvrh-^S678&E#r4-HF$c>vQ`2LtDh{K zS4{k;m%g=k+j~pBe-)6ZAKPq^@?hs1rDHEWA*rAx#_nxK^0Jsjx*vhI!`u5|cELtP znz^4_+BpozoI)a^Hr#?ZiCWN97Oe3TrFOhq9t@x+d>#THIr~}-2Q`*LwwPp5`>clF z>24`ULkF3a0%H&qqB+8=J{+t%sOZuxHnprr1Rb3*@!Y~1J`;v=`-P+udgaK9`6hqu z@;CgH{-rd>?3=YK-+AZL{d@JXnPB1@now~V^nek1S(jduJwvC&5Rs0(={|Z`#IG_MS-^n#T{hT2A8E?*-EugQU zg&Lpeu}qNwKOnvzk7D5;bW=;tOnPg#xb-Q}(x7Iv?6KXmkZ{(01>VVdJa#lsV{#|E zM}RR4{{EV~-1HsP`j9agOyTKQLUDN!JgMeg>$fP;^iwk1$K17e7G5e8XKIaRcqp?Y zp?;*aJ3gE;jM486V{bZ7XhNJT|8}i_2>~#e81)RVSVv@v*E~<4f8t~v<64P7N-xOwoXz$^n;WkC)Ic@>;ryITg$Wk}e7*##c{|opI?V=>=zdKr|7vOYRXqK;!`5q;AowKYw$Sk4qZEL< zH0O-tUlNbeF)GMa{n=8X(qgTRsg`|Dokyyq)RN!z1C>S;Zd&uvSMJ8sGAfkX>4|CU zE+*`?%D62g_NOVPI=gR^ZS>Iii@R2XTYP5<=88ySB;KrR#^K8)NVhi*i^XUnlvlR5 zjyU@E-P^BbdKOkwT-hXy3nclN$)fIlIcL5!@jTQkdU8Mzie07fVUe>xjn&*FLK#VO zLJSw+u6>qip8=am2aC-+2=@x{dD@d#u)+od8anEM2bLp57z;4GRaN-?OF7uf1ki;`7#3|)c2yLCylwK_DFZJ6I0Obb=Gy#ju z<1WbW7rCKsrkY1`e?{YHSSWYhPx^h>7!smpSe-rhSgQT~rMxywxdAquK-#=rN0FXNj44cln}m%q#Psm)m#TfMud>Jr|V(92z?_;UMVU#Esyr5z|ZjH zrgOfUfBdTm_bSbl5)GOyFczX%w9P&5QAQ6YCH{%7G?MGx3>-99t={!rD;)!%;dN`o z@VFrceLgIk&ar~*v~i72mwnp2nvO&Xrqw7FcNdQomF#mUo*59~5I080;GvYiaB z4IqjP66Ny>Q+cSbEXuTmxY$ZDHK7?N+5d+O8|`+=rLeORiZzhCQw%GlJH)=FNU__~ zt(@V$c_J8nq<3VA#Z`}E$whFh%%KbS8hFmN)H|{qmy1x0Gu?3vkqEJ)3dU3Lh|Mp!4fJ<73S;~0iP^RQHI7(KoxpvC;r@8$tg(ZSQ~?`)(L+Wj z$P$lG=AHjYt2uy(2C$rD?i0{isEiOj1)VK1Vez)S{sY&clrf~Z0c@dfkF3r)+rbRv zZrBkmmb|cpyZ5Of7pikblvsZI1WRYFk*#<$pfRqxMPtQn*E5lvbw4d z+dk%(1!{$UzwW75j^V|4&EY9co6ROqqS+l_`j_T z*!Vgy4+xK_q|Jo|diK)g4wv{GI1^g+g5a&)i@Z@AEOus&SlFEOWSn*n4E~oQ#p8YH zTHo^6+J(^DTC%(zVZSyyVlh5G0@#*pwr4G*GS==h;hvVxV^@Gg{K8nddyohLUiNy& z1?QUFY(7s${A+HwLdFy%@5`GIkplgi{7!97m5uM2ge8sze;};)NdS5~5w`StuJnOr zbSLmtC9O@)4n$uB3xD1%^Ds@-L~JR2#GL zBsIe|ZN9Ol`VWhAPl)?me;FpUxMuN^H-Cgl*z~lks-4()1r+XElr}v#&hnY`hdYo% z+Yk@W<^|C--KL-yj6u}NN_jOKQ#+g9bQbgK)IJ=XBLg{O8hpF~6LTEJ3vQh%0Qmd! zj)}XtWbu^xCh&v&KP7|n#!LMu$ypnne1puoCEbUT zvs1X@ipIz})DV>ijYw_EOpbwja809PPQhS^vjaZn;jW6zAZW3;-X&4bN>3@PSS-u*R(wexQt1vd03qf^^8jFAXbk#g6AUd{T zX}=m6JQfd_&1+(Xvm@HG-5Ffx`Gak?o#bt+_;!7(%h9Sy7^zqR^4G|&<-rV<%SSeI za9CQt*`KgPOL%rpOje7)4dd&hQ1b7)N=U`Q=>pCZY=Akk+F?>SB=0Lt$li%U?&R2h zibSE3oS&)3Y)WJvl%>+_yvR=xx>ac*24bYS)y8E(9r|XwGteS+;mE(#m_;=lbTjemCBtCKA^+=3+RxL>Nhr5$7Mj=LhIll}|)~#!j9oe>@`T@LA##<@j|N7H~H?-4}3-w5ItnxzkAfho*DTj8aIKbyQ0l-}@qG z#$R!Bj_y2L8!d~hktIaeZ*8@0!&@(vE3S)CUqqn^;9FuY7z?qqf-bX`X6}zNUym*D ze$M~+DZk|igF-1S{nfo6;f=9DWER2cn}kcN+7Rl%jZCzcHr@nH^qh)6uFRiPZU81< zYZ)e!gj;xtj}g*#7r(6E4C$N}1u!^+?QN_;>dJ}yXU2QgS{kpC_Er^m0=lG;g|KW< zjo^}QX{K}`$RLCOBO%BF;cUNolN*Sm-P3xIpk?i1#fqX3Zob>Tu-WFwwlZ zqB@74bp1RN$~9s%vjFDdF?r~`^lvlLqqz0lOE|RIZj$JsiE3eSYek$wd{3LcJ{W#Z z@Qc{JUORd?LKW^GS_?-AYZ8l0vdq!prfpKgy72#bx8auN9+%3c!-_$mTc@M#{RLv0 zi*FEV+LJ3UHkhi9x?zt_(Z=O1+vKswua8ulU9{{8T(FNeRkvrJsHd=gSF3D-DlRkN z$-p>Y==xfZ&OUh1Sjt^^Db|c0cG8`ld_K-}RnljomL!*Kq+`yhnV%j8S>!Fkun$4w zL#0ZSaJw;`8eKStiFR4fx!00jwMA3!GKw_9bmj@cCg8gny8Z3H-x^9u-g|d~9-7IS zIL4))Ga*nYZpVLOV_K+AmEFDsq!(}lu%du*7|Ik5riz-S5V+r4#Zg>`i*NsXM*CrJ zeH|`;x+9a7p14~Q^%M+#r&rEI*%PlMovHoH^s3-IVe!V%j2Oteb%^41Dx!7o5Umkk z=sg%&zT|_KL^p7)0jnK9u`HTK3pN!*Q9djbXn^!tRE#daCEV4lcMxB8z5Q4N^v$P1 z_SKojI<8VMX<-j(J*?W4#u-8xU|90f>e~hZV;xQmTm!efR~KSS0<0_-GQS8F_;M$c^y<_J&3Zn`o$y#;f-)BZW09IwxD;@dkl^swOncfUAkrq)D`h1b^t71ORS3D>+u& zP!b*=UZZCd7Ft*Wm}VMrV5ngLb+T5fhuqfft8h7oY}srS_pf^O2>M2OL#?J>nZV#3 zBa=eQ^-s;#^B5tyC(cqh6V{3GH|^-7@fMnUf<%=RUR{1*T_WF>3Wc-|+nqn;+k@{e zTSnF`A+Pl`_lFiGp=wZMs#zwXvV8_GyR^m+cLImvD?&F&P$hD5*t*18{87YzU7y!= z`xM$~6NV14nB~>@$2UDGXXrIEJx>~d^j-#k)d~0NRfcyH#H7)$C4|$Mcf(SAr{VSA zXLM~CgROey2PpehHK}dSMdu46-ITFJIcl>}TuQ%XL74z2HIZA+2$4c0RG_oEU`yA} z8wz%A2Xm0p`s(V&mpFjnLb9C7WlFZ~;=o?UVHf9g56-DSWFg^eXdAGIx=YrOUoUWz z9PMz)JDz%>uv9KUI%ly;yn(MmYp)*E$>+Zb%AT-pOesJS5${XgH|;yCV2izbCDz)% zBN>@wADQ%2Bk8d^{o18yM{11HH`s$T^u1-Fv579!O$YN0($c}^OE(czfe$O!_Y)Qoa|(0gBAM7-(1D^IH`745Cu5-N@9kr^@2(J1 z_zMO@4B3Z?%D{UBR{qE2T5}yjE-pbc>~RpBVj31z8mwg5?&1)DlcG^LDy0p~C)wV> z&kd^_a{TVQ7H5QesK}jnu}8Lof#G##sb|0Ctl$j0Bk(pii_mk&a~rcF4f69!AgR$54TsC$UMb#06k+UDYX3CD;q4OO|G#<8eUO`|Lzxi z?t2xeFmcY4(udN@jzvI56Ytdu2`&CqyM z8_UJcorWfJNI8p_Z{$^IV(gLC1z9g*%mw(qO2{yCgNc=h^D%hflG~Iq?T{yqYyZvp zDGCHBGbXZtqF_^X$L+#f$lM>GQ$)1_Wauo6OLryq!{W}8!srVX_=gb2CPgD*ZjXe2 zcK?ZPA|8Zy)znPS!y&9I(6U(g6r*yL+d2~1H1Q$rngQ|7_)2t4>|=cK8|jQUn5$z7`z#Qi5=vb|?? z{;s3EPkr2FJ!=g)Kw2I{1T6-l-tbnAq#t>geo-A6ro^?N^;uonLO|0G_v0%67mwo- zx@8(>4rqf~p0m1?+uXqYmevq0;=TJxMA4yq^P={O2wRKfC7g}N^Ewm}^P?Im+FGN< zds*n2aq@#yZp};}>Qv{Z+`~v(RtmH7)D=x-e#sj=RbY?1oyoOGg#WWDwJ>}x2K$N; zqhcTa@*>B7FXyT{N4)Y2xhZo7-|M&WD&gCIj8@4m>`a;J)_6*L5a`TIKnd19&@xK; z{{kR`hXMYfx_PKh)?#8WF;NSeCT%|T<*AV8oV<^Pp$?9btZ!~BWfl-EdZnO>Mjg}n zt+fxe^;IH0NjtZ^%y2Opo*O^Fy^HB4>!gz5udofXSIP3auxpI02`*Xkb|yuRH$Kq2 zErZ03fR0T>MCAI{$uanTE6b^O9Lt**`MAUf^r z!IK;cv`@i9?eAq0YOp%_8;O1N@SXyU?uMC@Qxbxq)tD=&7ytw&!iezvWVH#^EKHM# z{FDLCOc?@A-B7w0C|1@L2zdz_{%qQnSGpdGhREe9Fw<0x@w3YRS(}AXzCobOt4Nw= zX_qzqtU4SSyGU?s%ZjNm6C%%*Z_L_UDK4UP!n4VgetJ5a&QKH)&_5#GBjny8pa&HG z56!UHZ&jIKlY9k!Gq_{=XA(y^=pn+CqGv_O_6OLs$K0=UOLg5puDIS(}589B~?~I+tJoE%xgLjtlhc%5|9x+w4 zA!A&NjX8Zz0dlz_@gRgmC1+f3q@L@o0}1T6P+G#=2jhIho8GUV;yj-hDO z%(3(%_WNAGk)YQ%kHClI0xo@gZW~k@O+{TAvRW_RaQVCurbbd}TzltX)&a{uM6gq1 zBfd`46evcGotKC zc)uxw7I-MJk4}J5Y$j6+!fYB3MZ9v$S#7Xs0Zr6xlww@BVld5dp%(qh|7i2H?`n7A z4TuCel$3o0Vlka|%1;mCot0+AUlRtXX{@vbI-JEkGqIAJ&Sskb=E>STr7e8gu=@zL zBe)nGYowK}{NFDn<@2bD3%%FZp8>sTz_Q@(P@-thH%fpZFevHh6T$U2s-qn$usa3( z0^@m4eE5V{en2CHzt1C6q%)VgXZBzd=W_gT@JIISZu+_NqEpThFNtv>Jb37n)EFPB?b0+fLZ$!58+|NdnFUlRPWGYv8z*T%8A=vu(MC2P5 z{)mW6WTz|0B;VA6i|cWzQBm;-2}I|n743yuGtF9f{ZcMXIhy`CP}ZazTv9Ee=4^Z= zS_iPdD4x(3x}Q@^Tv|QQu?zxUjTDvc_VmO2`pqKBaUVQIS(sf56076}J&$#1aA5-8 z7S4C7ewE9>)g~r#xVZ7DEtXy))*^5TQb>u|*3ED~sAC`9R}=*&iA#{po;j(6@!dnl z=rR72#!g2i-yquz=~WU`S~)ZCYI`Q|gWDSFz1MR~!P%<(V&mNNSeic%Nzm+39M`dT zQ#dLKnbb@sj`s0JJJ@ftBk#lRo<0Bmne_}+HWp7xI&=f|3oN}E?k0|ch(HHbjLqi) zzBpnJ>Sy62PP!W2*ZeXcNetqkCGKe$>vO6Xn&hRAM|VgxWT&-i>u*KO3$rY0rqm(M z?JGt^Wg3O~dgH;iLB?bkD}{LjUB@U|L|W9*OzXT5au?Fq&kkM5_?|bhoJ&wtkPfA^ z!^;67r4){(TMN{hW{O({!g|IZdU(rfi=F}O;Tv01F{a+0QhnZV)#uJiJmLyyqf9u} zYCY=3KZuj!S7eHy~L^C4+O5sQ_sYaj99@dK^e!Xo)|5CE3eO8<9mE%O#{7VzIK z%|o=h=X>w8IHbg5(Ww8V#`0W9EsFf9;rA}eM)WC=cs({B+>iENX_DHoRf!z3j?q=8 zH$c+@Xf4E1nL2E)yS6mfx#z2QO03dcGE{?}!d+mAcw-}S`nHUGyb*Y1`SMANyX3P(qx5s69%j~hGb~uE`1IZ({g{FU*9bz zUr&JBFec-Gx14(1gEQP`Ld%*Yj7K0(%*%qh$1BXr%&1+#r4qGjr+MmbLnPoxU0TIl zHYw9trlUPk>V~Qp1OImtOnW~i_aBZ4Pj&4qA>%|ATlmny63h4EADej4vOM@^J`5pX zpWt+$x$b`O>-dETRekzzvg1F{*k)W1BTI2X^Kz45@u*zIYV{N+1GG_n0Q+aA=u&P+ zX5Zs+LhY9TY-7iPiQa)VqA(1#^d9Z!4JO206Os&%*pyrMVYIMG-guP0bo|X8%~!A6 z8-eNI8<2j1wlbUkiAHFT2QdEBRgPv;KN(Vqy3_FULlK*8#|7m~=ZC-eMm`uX4lWB< zKHRSF%^|CrWqO|FF`hA?6V>aMMOn1nWd6r>VZlRNQ@=tG36YSG=XY==?t|1yfk+&M zZGt_PL84nk<*wHg`Mq#%@)XcQHg@uOyO2PsDm^@x!rt>o(2;*1C3DVShlAJWc-qY8 zQ>w%*V+QtF#!=zSB5mTcgH$B~k2(_`DJYmX0Mau%}T6)8>Q!h>q-b8++B_UCME!Vxh*W(-C$sTQzvj5c}FJ&{o9F2mcj?g3-T zmXP0Odr;+wwJ(}UXHX8B<@_!+76DRU2dN$LnM@e3V5aNvlZBZnA7XL> zP1AF?Adg3G7{=Qt*et@V(6qac90!D90pGlSzY|oZNNv&k4gM~B`~*}+?iJg;Z7+`j zVStuo{OOjmqQagXL^MSO1h1#mYP6=>z?uU}i#5{t>)M|x2sA-7-zBk?C-9*dkW@FR zmO<%)@|3SPIn={psN5=S75e~NIR*fx$WSK?;`re+c1AE3JQ#X2dAVnJb#-4JWW+0P;v42NjNkl518H@`3NFjbl-@ z5o|F4BWOi(DJ=t5e4hHjreQHyG1;X%S0@*88eA{FDDxgyFL&3H9IcFRtttchnEk~$ zIn~FwiEM5HNI5#5mfb^j98?v0ZZsUh;Vb%NQlOCsJW0{DR+^%oA|i-3o`er|@L1Y` z&W8**_Et{CZMfC~w7&S7R4z*!I?iEZ0hIjTTQM)@pOOQUwovPH5fh*XqbvBN6g zpZ(m>x&Yux^CoeI*qZYh^+MdxOlimgKsi>4*?IJQFtu@(3@6HCklTyjvoor!g5YBLGY9*wbDu$GVu! zKd=bF#5Eq_0c7)N0fAmloT^8ReBcIviB}Uv&m*c4QNGps#xWpRac0mNIKL&yYt-W; zyOUT5l?uSTrnCOqc#1w>XbavjOr>CDR_^(|u8t-p_9HEkj6-L*juRsT=#Hm9z0!u} z&=M&!01Q}o#J+>Gs;RZLJ2_F&r8vj8cDu9>&ViyhkAexmB#N-SgaF*D_3pc4$ek0wd;6sE+I3&HW@BbwWyH@!bU$jc4&s9s3|Aq$RNDHJ6k2=4 z2br`Ac4@khzLl!aZrPKA%Cm8_WhQe;`W~clf#=_HP_wLUSK^EAO*N1fqyD$KrFB-?V!T5dx3K?H&ytQM zs2pT=5aJ^7=g%2%pe z-#+lXpw$20MgcO3vBFfC^1%TREhr-~?Ys!>X}4NM5jqm0aDBu(`qYEaE;N>`psvhV zRQZqeTRJ6)oS~6`u7N+JP3f8g29FWry_Zn+IsRbLOKPhBvmL=7Hi^2Pgu$5me33>j zb8^rpjXRq~q@-fNf+Nctk=)a(@XU^PRV!^nj%J{Yna`H}V%HOa^7E@mvG(-ePQ(p9 z3eDh}I`D(vYHRa+Sn+bTxqfI?#pKa~Cw^=ap!(9rsX#X3vw{H+x0&xT==> zx6FN~EcC?ty-5`^S4=Ec<-%My(bfrMq#nk%rTjx6#glbYQ8Txgyy;z)FXuQm#vi_u zSrxcmq>|tDnG8nq#rVgMx(2(nhX* zs}-6^ts%p-!9>N5od@vB%sF{~8m&G}@uf=vP1lSEm+mM!nPyUFJ;gNW&DEXqAJEnr zk<_(Sb!D4DfCAmpEDFgFmJ~8_or(st(YtkMmdM)Os0)k2AvK0Jk1lwh`;9$INqPFK zv{D*RRN^Nu1B(oRNZlp^sVPq_S+Cp`BKo=rq>UQ>6?5MCf4BfAh7#{t1+K;*PC@zc zh@s0>-u@Z6*cfQXXnmMhrk9h`{Wd`m@6Y8SC?MTMO!QsQy4KeAnj1G8iWCVe4a3C&WSpdj*I(Z_N#vtf3Nm57&& z=G?C76(K&&f4Ab1wLKU^OAB;4mmVbR+C(ZL=o{Xf1S@OJ%;}#^B^69w00C*>j)}@b zXWd)wA{FXo{s&SZvUXkB){Qa3W-Xn!rHBp@rOO7y9r6Z(?k{=U2s7ALiyyTrwY~2t zGV}Ssi0D>>R4V#Me;ilFmgj-^7O4`a>Y(-S{e0sBsAYq6)h#5x7Qqk~0`w?phYZk0 zLS7o+3_Cp+_Ws9zwpeTvvm2G&;j4SPR-K@fuc7w660sBY9=eCS=baM1QT=Ww^#=Dc z)X*dwv{|{RwtbbNcmGqsY-R%8JbRVjgkt?NCKU@sY2$}t+da?$MG>7R4kCr}N0K!V zW!580bjPoGR(?wMi#t0$4rp1Z$qpz;)ED>`!~o!4#ObLWl{9g1sd2yubQLHg$%{!- zz{5AgD;hZP6!JB3VeTuUq(4Yx2Nzy13wd))BUFDgRUKo0qZB59+>b;$jG{98@j*SNqY|_vu`WAB48`KTW6hp-yMhlV!$W&}_V*}8{C1mFT=eUG-v zH4|&N>17)cd$?7Y{>Fpeo@(sIpJO)L*yvB_qRpg$~HXb<3ml}Q)QGEetBL*TQ?bfg}-0EgV)XM&IPD5fG6>uEPUZ z#r%wtj2ezD!Z@jG#PGutB^!i0`l`z--y7^g=QQi?3-T|Li0CCI zV?=?_$e-mL@QZU=rgQ5huYqCUN*NYU4}nq8K~Hb&Ev7zFndw5tebF(2XzE& zb`T^~g6v>_@Gxk_eLwd|1tf6tE_6Jy*R!gis=-qPU2tJSV@QuycT%ZR>0%7$)*Jni z8_#?3GsHZ%jjikGJ^O=1C>k~O%G80}!e!nu1%R@S4#JD6ZM8h%X_qq5?k#Z+p$tPH zeL+^GS6Iqo4$Qc%nri^Z`$5MXWKaX0)Xax%>P4I^yZfy1(ChyVIxS<X%n55c#)c18w-p{|{1gHVZ z!99LkrgC!Ce9L(}&;#g(O|7DhpNS#TN+6d7Rw8ET4HfVxkp;ZJ(i;*WJRJb9*4u*u zM#0K14NrHRuqgzaVisAPqmmj|qSN|8Y7r5OV$GAr|8VO14$<863H-ejv;l723#<+X z(&RF3@^IZt-vrGC%mn|PzKs_Ucz4*pzt7E52i#GWQ49Xg z>YlkFUPW|auYffl6*k2ut!K&TVWcaf)@Zh2NTy-HvO?SFX76G1IO^-=QkQ$PI?J(Nh{D zBlwaCFph4fzU(MJp`Vro|7}+aq;G-I5><=Jl;bl}3nqSE4cJIBAd-JrQGRNuH&sWC zHOa4*gR5D)jk@a~Uc#Bf)sk#{-gNu@?@AxNTSyF!RP7iAXK>V1p1dTHF5#EU!%+e_ zua%m zP4903bsZCL+>XtwqOKRbfjJQpwt@#wi}WD=&I)co=h!(Xx^Z%7c28z=!{$s&?P537 zO{C1Yi1xVbyiGw{XhyTAisSj>0X>7~2=xK&d8CYK*Cs-*ID8pTdVm?1J+vkSkCiy| z1g5-}h8S|2$gxuJ`m>=P9*|}CsF z*_6G$trCfcKe?Dfmh7r~gtAfeSh?fyt=%C$9S9V#$$K$+?&~EFWN1QfA&ViA zWcXGQ&?zXHZujQJ+w0-HMK%6@;m6T(Y!Hn4!J0J-^D2_9#wLT)E2dd zg=1B3HZ%1j{(&&n@b_PvftF~y7@9emAer<434;7eX6fWHYFydLrLhGG{or9!RBDzt z3#p%+3pU~AfA)g`E)(CLP)wQ3XOoLiLSi_d)uZ!?Yin!pk7JJR?)_-=MIXhcRdA>c z-)cwI`<%cp5PLs`5fNh@tD>!&>8pSbPWs%%wtG+AAv7Ap|1&l`3n>0K-96`MD>*u{ z@Dzq;f92{AU$y>31E?&|Sn%b}QpnS~9%o8Y>4Kao1cS8d@#rpU19~K>Wflxyv_=cM zu?LI1vUxO^_>vhD$F=sre-~U;uDIut4)J>Z)H++H*>>9zT8}}z+1i%x6WO~Mn;ow5J3(dbnZY{e*?k|<{+Q1+?INpnB18e#drrs!Crb38yv@Zux` zln8*o?Uld!wq3~~u{3k=UM1Y^W)C!StY7JZ`0BkWJuP5|$ei={Nxq`fyfoFj$(pa> zxs(yUHrqRYL&J<#ACd%aHHQO}d!uR{Apz9?DA3<0#@Us4R8k7aS}C11;2Vf*5eO+6HAU0;4@fs$ zB75!y;>sI4=2ZM;5Vf^H@eE?wN)|f~T_)Nz$QV~2kil9p{K(==?7;{bEhot*1<0)V z`weUjaEjTVL}Ebpj9b~5(0@cg{1ixq8Naf6umcRq;DXmpkPx*r-Q3zOW)g&0UDYbNZtkImdCdl18^rWfUWkjvvgShzTpbD? zvZ4iD@mQ0_WqVlR0}fqDchg=w!21KS9}=!y=j%1yR}_v-!#%Jlp+49WQw7;JmVlaG zji{0bu*>O)okC8b``NB+V&ggPS@pKXvcVJ3f<=Vc5?|=#4b$nKC4a9%c;65~>z8@- zmsTOtrJQ&r2i0hIJC?TS;hBhh!(>h)=A}$!Zinly8fb8t4pWYFEx+jiO3JD8Lh@OH zP}0U5NWQU|ZNEtwefk**?|I#>J;Z|tu|~wN%MT*8lw-kfoOowRyg{<}Oa1bhQDoqW zU(Z#)ZeY&CWV~7ng}fMSubnI3Ys_p*b!dk~`>;=m*UT%qku?c>)?-WaO+j|pe-q+@ zca=>Cz<$cOzs?oZfigcLh~S#IlQKe6zXv7@%~^Uv2-48My)e%@Viq_%D&+u8PA&}) zad!OvB-M?P#x%YHA=pm}!Px8JfOF$aDvR;y6@$rO5VX6cn0rcP?t zVxg;Og zjK~htCVen>_GAu}I=i`s_~XSdsa{M*%%EP`Foem+s*<_0xLJv1|E@3Pc8(iAjK|yc z#;|drI;kG{X5d$Cl}M(L9CaRM{!f<;V1g*#U2IREINw=6il1YK{br=_xqp-hoAE94 zDsp>S@PIV{pgxOUWP{V%eLi*u zv7Az~_U!+}-7PtoDDxG_)(Q;HC3^Z<8>>Tx^;V#2VB~p_d3nm=$SzCO|1!GGseB|V zqtc0aW-bIF_jr==W8E?Re8&nz^z@V;oTP4Z@y|A4X``7odqY=Pm(gL6OUjKWOEC5v8L9C!7UzM9cYWi!C#H%@)ROu~=ZVr)f zz<;UTH=Gdq1J?_LwJG?xZds@H8^3-9wud9@ST)6mMfnI+8n(a2V-GsO->Zyh|1bS! z+@2g-SCeXO;_uDAVxw;(ERZknta1W{#FvQ^V3KF*o;~1P6gYGf+ zWrDA#9zEWx@d(%acB8u(?H}{yPY=?yLWC@%^8JhJQ zzeRQe>-xocXvRoxF}3SEW;K#NqjvbEO>ZZduSRZ)Sc1a$+k0CGD;hW$bKxm0C-$-nW+Q zoBJTGkXOJ?V41iu(`%t0V1-^NW9Evv)BGNz2A`BtlBgvB$lM!2?>AhQa?Zw?fD`IU z2R#=tfTsHd4%~fmFO=d=zKmH!L(=5gay5GC)0%#_zY5j|AujSxK%!K@D6rKB(3ppv z>6Rj*;NA_Oun^xLx~j>Wg@Z*2QTg!JQ@hF9Qts}r3`Nkpne4cb?-4#eQ8U^5Pa^}#|t`oT&%vfjLESE z_MVzBoDO4|p8{$i4K`ZSjqFyf!kl}Rv-NCCg@mNQYfi%cMB%sl?AHA(*H{TF<4y$U z2|cAn+@h}PdNlcWTj%%_b9IzQd&uL@J-9K1+4F;&-jBPqi(NS6-s%|<;{wZ zl9;Jc@P5g8K<@IWF>{cMA-TTe;kN?H-Y7=NO9iEE!Pkr64MFW${7V=V0gs>h`HNZy zd3!s9prNaA0E{s6?Us674(U^*eH$#rEvff8`>MA7N(&)p`LDl0ia19@5S-EH7=X^7 zm2_xE=r^gJi+A!iHb9T*&&xxNV0qX`54px|v0lI8{)KQ))!|7IcMW0s)A6I(cFFEr z1P5scV?hzJswgBFVZ>q}ar)^b@-gT0=z^t7jwWZ)wFN(ck7Q-v#r`z$4j_cy+ zP+RvmzF=iH%mu9yEf~yKR3OiI+!P<#EI zw{rSYN0V)eoax&up8uEk?0vES^=t)rsXmO^vj89uK29||Y_>PrvAVX6pCt&%IqiCa z35~Cx0lNp+uq6mTO_*Fwl3mEi``6jZjDRX8&8Q)Hr|zK`2Xl!MY-X()S~||kRIkh5 zee_$?#BlUK(E4V+7FB8+ui7Y=I3RAeM#hWoA!Cb{Qc)biJsJ363v~*S>s3N4XI_O2 z|N0pjdr4Ge;(ExQ$st&lfB}c;-$$BzEMt=2{cE$#nQ(vWOwD?|Ld?~MJb)6yHJcs3 zajmv(gp4`M)eTV0u*pjakHI??bttl~uyOhO1Jr5^5zq=SDt#=WK#@z$P!s-!k zfQLEMTF%cF&{xIZkop7D4#m#&%`We(Gt`MbF3;02KymWqIh6tR52C-zTzXQG#^hwb zT#iNf5~@RPfW%}{tR;@qvkBv8xckDQx6;%$H(%#>oE);{H*F4mwNOP#F;v`TJs!yP z_Mv>YX|nShLc4;$e13;zG+CTUWbgLBzpnf{J93~Nv9ZYw@^?f4lj)-1@o$v;s(`?+ zkpZMQwRbws&>1eZPIn zv_EUaGGI^1&qG*9JTZtWk3ghbavthGCotB&zjt(l{a2sw!Z!m^q7T9$0fIdGeu)d$ zjzZe>Y1r((ngQ|$x@_&^;?C+PqDW7KzMev>ZH9(UU4Tn#(E>aioE1(e50$GRg7R~M z9mv6ex}DTYHWnl?y(K-B0u{C*S^NjG-~*`j*U#xjl2I}wz7EBtzT+_<`8Sv?ON=5y zEr&+7RX69%yf^;m)kcjp z1~lg%H}2tA`RX2xNj73VU+CD}w+VJAWG0)gu^5m2#5;?DhZZHFw{$gV+*HG>l#8e#dnq@Jll@j1#U7 zLz<`0)2bgr$ZQd9YS5t)4M~*igDe)yOFNf28s2g=WcZuH$VZ0VMEqx6AAf+t=1s(= zieB{m=w&g1@>Vw<2r~4WPn4HdMt42i$e>MH91X$~^Z$~5-}s*sdqnOYNYxuG=KvfwflP`^N|DpXle;|4$kYP-n}Z?z39uTgdd1$1dn%e zZx1KR1aQAz*Ei6VR>Wp*Yc};OuqU5WI|Hzmhe>YXGY5cTRcpQki*Zr*FnY63apT&q;K99J^Eo1|^7XWSBhAnbX9 zwSq+6q4Pe~2R3GJ6ec{c;6WKk5%?aRt#e%v{V-bl#H60vQ`S5NvU(V<*Uy(b?$J~B zZ^UYC7@S_!O(1sNjyRn^Cm2DrFZ%hvhML&jP{lPQo0;T+1kd#%jpuuot-qP#6-TT$ z6kYFy&a~+w-;~~q)^VgOrL+bOB}hEhpV{mp`Yx;8G&sc4(>522&s2>}f||#At?nWk_qk z*6^x338F`_xIT6d7}~)e8!iE|gyY)gY4dCf_0lJag5|sh?*nkkXlGr{Ga3(hp$A@& z>gT)uu|9^OEgvn<)VZh7eF3j}MHLgl9${Yl_uhEYtYYTgz@ThCJ13+nPqTEsM?{!n};&<-YuMRGi6*L_O zX&O?){#I#8!~?y0-7=uxPHPD_Lv<~UCPg6-J5ws{S!D5bSwzKt3hIfRF)78e0vnF( zeSO-bB|(}=^^)GSlRAXN{w>~a%olNiu%HH@C5rp6^nC`y;;<^cc+vkT;p+BYmYAKj zJRP_?t~zXI2QM~a7C$prRg!l8chAxW!qkbvtTuR79J zTbs!g89s~4ya0kIuMAlbLrpE*sGWxt^49nn*}Rj+4Y3G3JSR55ergxMIC!4mcv3*X z$qD-vRTq|vTi>IC9;8}ajy59{48QeWb=2X1IVpkMF3ep=Mj||_5-dR4+YM%AD28SM z#9cmSEvwskXXkg{iEC^4B`B3H^`0{SZ(%lHtSlC&E;JOF+u4arcDA>NHNw5YsIb z+D_%CkSjT7E4hz!YMFnJc>gw%g#lbrs8b?|6%@>Z^XYj6wo=5n`GJ}kq>n)siM~2= z3~=R0Pn0TiT%G;08Q1^=mDnjo`YpfHK~B~;C0PmIK7b%2;J@!4d3kS=h%vu3UiP~R zz`4QXH6O`J0BUNQ_@6;O)MeOHw~;|}K=g{6$0 zO8x)BJ!thF^00K22go?Q&liyEW0|of%+TA}8+aQWhKA`Qs|UxtH=EhBB0t)ds7OG_ z{m*j06*qau6(4T6A6|3Rx~B-6xRZE^Z?hv=UEfC>t2H4N)<3=j3CsHs&)t$0Fa<9X zLOglq4R|#seEk8Ol#ftL-FEIUB9U!b4Q;qZrauZQG28a199~FdH{kim-_FBdLZ~Pu zt9X&&mng&b>m@(f#NfW*Bjj5oY!Ko@`^KM8FEf@oln>?s)8w~ekf#FJ1qU?dewach z?)>Ky0`%X~d38hY;HN-!(K2k>UT5s@#z+~=t*op33bvI$0NIcxoM`C>UX(Z^tbc51 z;)v|NQ+<7Otit=0wLC>Sz?mV9Nb_RQvobZ)Z3hKjys1!N(4cKOP(E-)6QMSVl@swz z05w3$zr^KU1Q1E=>Bi?3!99q9?K(on6>Y3%s~?I4c4R4wcx$KXmQ?i{7de}HyX2= zyXh)6Qs7_tt?B17xoH_gDdgh)aZd`JPidB~AO3egTcYRwOc z45Yf`8O+#B4RgMH1#ZlwV+8ghR^nYNstm+zM$lg(b z-R@pxqibaXhgl#UcV+S^YHqvOKoa`PLr`yXr@YajKDGcJWr0@J^3)Tgsj`kGug_GB zPlV%lOMFXf$kV)}YTcmiVxUHHyzg@_MT3aDIz&}kCg35T4?W%M;Xjny_f}hW{`5fLh$4}Maw{t~a7LWP zmT1p$k+7j!igIWEd_ZA?FaM9I?xXhhpgS(o)BAFG zuQyVW;y%}(scRqqQlq%TJ|V~(Uj2dir!1UbA;yp2CA)>{4U|PqS!CuO2rBOUjR5X5 zjm&>VsgmUv*W(j7QRh3w+O+J_DJd#UZpuf32F zG3BERY5W>BQ{>A8*=LrCy=rySWSI}Qx74khVRQf)#`n9-VWO?9~4 zRJIx2C9Tz0tq>-TL^9@cA2nQ<-B2dDH$t1v)=h;^0dN%_VxX~mRY{@F=sW{TycKP! zQ(=e4R;Bk^l*7;0AzjYtw*%y13IMg^_M(NNIXp?2Wc3=^<<4SFg3}on&{kZeDlOAe z@yiC(Y73@C1YqKYfp7cTU5K>ZL~?~`0dp;*>do`uw<0*0Gdv!(szn+3Mu(pLZ%Z#uNyKLNT{H%D57L-N<`>WPHK zpFWzLNRFrZo4Whx%^wDsdZYBT78&HGhWj`TSzldnaOB%9+l#HqKhijM*0DYxBwEED z*PVz*VA_OtRCr>!Z3{|K?q3%YHME{{nGPW;2_88ab{9m$2JuDRlK?6{AXxXWJd+At zguHlR$&NFR#nGuqc{4Cu9|B6+(}Sh3F*bDZ0R%Lp6RyZQ&QVNHGt-P(#tF2<$h&QYI@#_v-OCGeH7%dI*u z_jQjyHdV4k(1|Fw8Os<-l}qCyE8}I=R6RT1(5|Y_=vc_sKhve`Mdj1-0wX|uS3<&iG{G}D)-0f@>g4rw5z#IZ2n>`RSo+Hnk@A@ z3Bd2eI=@vdDg?@>Q3&`JqOvXF7sD~zKTN!l(2Ki8Yl6p7f7d2#Rx~sAuDpd^=|dI+ z<|NuoK}Z#mINRUMZ74RVXJyw7n~~}*I2Wb|a`*b z_Pm>_Ma>jD@i56R6VmZm?vk%{ue!~ToS7W#t`+CmE3rGFFeJI822ERU@pMm8vasd`FJI>W3r=jD0F=B{57Nxegmn zGiM3>D6!oM1Oa9D$I0dT=W?jx@grDw9UbK1o}Mo9+f@&!M~LoY+}S6%^po6l&3T>B z?Ppv5avaNG9Q=8>)YPz<@Fv5@9U8h3Mtiy2tu*<~4SJoro4-k3+^42Zl zIT2$Gz+cvrnx)88SJHS+RGSHyd!!kWIVB&nc~aKF{A)96Id&bM>ndhU6CngXdK?wI zzZ4~SN#vWl^pFZsVpEGGceX%fGX5_#iBh9GjMNemob_IQw#D`aX^N>l>=IVzf1YN;ahJYQsG^(o%CsWi$gngd_G@T%lyo4WyDVgr*yG!SSGm-N zvx>+V!u22IGps;jr`w}^|oaDGM#qE9g|`N!x{Pr=7= zl_Lis*G5Yp*t(mB9WWX0CzG{K8Cv7w-IWSxE#fkqGpjw;1orw3Y&6o@Q&d`{(-hP* ze-8gH{*O>l;uWmFv&Ol(eAV#Ebtp0nv;E!2DLzHw!z(f2zs`qpj}}`v#~q7LerB#KTHptOFx2tWKDHbP#JL)Uo5nV~)82c0J~ zcupMLRHh!`zk1RzmnM-ljJbQ+&>Obi2d%y9w%PFbDy=C^3|uaS>Cs7*&Gg*I-L^vp z5swWzDs&YYO@GdKf0Yo%$~TXK0Ebz&YZt5qvMr%GF$MBdGmD2$O!?k^`J!R;8}8t( z!#2Jun}*a)VFpi6HYA~T86dG|fHwNTBF-hvscmm9ledoXDUe_zD?MbABrQk12?#+o zDGFi*K5eHXNsDeqxs{3-f$2|S)=oAJ*Nn#KZ9Zv5Inc+9i$02-h``9C$!=!B0T$2S z-(${oK+%z|Hk9Mc6SXY_n+R8E?R$idY6M)$kFzIFAofpIR1W_BEX$_N8e%F&aLh=q zo+Ip`nQZMcv)&{qEKjq4;6VdhG$po~vQJ2soQWfFY zED}}p{~<^Ly58&AG4T4rPohi*+8@Su&_(&sg9xxBVq+Fgkj4@Z3m9OD=>2iSa2^Oo z?8N}H&tIdPF(psvuIf`rUBA!+EhO#$)24ch6lb@a`8y9O*UEI-&S5^CTce4p0|dd3 z*JonWMBG5C@H=}eM30E|x;I}o9v1o!JbRdf3ng%&&;S%W=(rs1GmBjQZ`JBRrlhJt(kV>t{U6i|-aKewZPH1})br8>x%tgkz zoQW8Cz@q|%#e}Wogm-s&gCPL>Rcd9#h;!0Gnya0FJR7?${Zc{`W(mv6s&|u!_no`_ zEE)+3SM?WeiS<(G+c8p@&`GD}vi*^_eGWjh^8pZZk7>~W{_G_&8j!j)fKq8)QjO(WF(Vk9YKi zf%n$d+yz(sH!#aHpUj9NGxpr96e@#kQpM^w&ASNU;8FwqpP3>K!;+VlJN2>8THi)> zW!JzN>d4+TG&O5^4!Ui}BmCNp{TKTmqO24KH5Yd9j>4hX4vDNLg#7UY%L0b^JX>_V zK)5RE2+{9qFs;}|`xi>^gw}aynyOt#MN9uI!<>)&`qLD`d>rohVpJ4lka%*flu!J9 zT5GNpggoYU&W15REkl=io5?PZlWr7BY4y^x4nMd_-yHCQBmZT-YI~ewiT|5z3OuCq z+%#^Oc$mrb4e7)7bPQ~r4K?nV)*9Y}-4~>Pgqr5;B9%2ND2SnDru(`On#|wIW}_B} zPU@R5xDLG=Tn6;F=Ka=A(~vDzrJ7a!v#7nxR_x)#&PWx3OPI{=!!;m}(zgv4;dXjg z8HKV!aIvTq9k^Prt09BhJr-?mLK=}G;OY+L9dzPoxY&obab`x_jRz&WA5hZwg0!dS z>#1`{60e7l;(=O^U)&K10x>YhR#>5tlWurJxkLn%OCE?KPX!G8=)Qx(gX(#AaUEEJ zt@l)u2y!sW^tts!w2mJ~caPyLZ2Ar3?khB*_bg*nXOuA8GDxD z4NDBTBW7(b{_i1@!u@n3AgLYybr}ESq8(~k zm~pdc=GnUP=Z1=Z>xh@mCfEPH`v`_|1AI1S7NMPo71DJx)c>3YFR>4XnwrRc+tqHm z9>77++upa5D_x))w9-%OdhgY%$s?<>r7l((!?zPQPHEaIhMm|6+wo3((Tjwhgt-T( zD$8&FI}#WH1aQdkwJh4!eQm|?pu`RvHybf?E{Ya6NY=XrJQsH($qd z0#yo)@w8BqMG`u$-yV8PFIC#c(j4dM=O76qDUS1*^ONNv){#FX6nSy;p?lOW57?Cb zxG-j2LGF0O5s?zss!NoM-s5^mF4jxS+z zjRm1SRYRV(6?_{xf%T#LvZ0N@ve&RXlH^>2ciPpghl!m;l+L-Q=iimt&P3IvY|EVj z`?Iox=t3uPo+)%w%QZGj50$mc2Emwf93WH!F>#YlE2p@ zkFm&8o3~~SGOI(_5?DP1afYGX4iPLJEODnL7-@U8Cb_4OItdNifVydDVPDnh4!%-jZn_;wA+U)vA0WqMOv|+WyI{~Jg zCEl?wmR%QaTQp_xn)bo%Vl>~zN&Nl!`NOvi9nA3sd;1gFRN%aw+AR>YBP_?BtV}8^ zoV8=dNVa_&;3XoU^NG;PVnDv=dI5iy@OAuk_gMkivJxE?wt{GVxq<_aQ+B{Vj9VVZ z=ZRANL_dR^Up7M37=_FWZP2=4#Akacjtt3KgEG_z;VbJ+!wLIzd|Ij4<*#iqF`moH zL*FEwjG;xRPjkFKgKvZU!DiCFJ-~Z&u>X1u_dJP+{Sm%T2we!E4jGnm#DE<*_H}ev zQDi(OE?vNR^YWxCNhkLgffeGcZ5!_hVtAiw6pdbA-Tg zf`&;j>;|Hy4gl|LS^x?CCs;R_7Y36}20<_@IV|+^FeBc*z8^t~=WbK!;06MfA?qu^ zdg`TRIGQ!5o-KB;fsW_Pxx7rbTKdSLIEyo?&fZ9WYHMTbqtWWOcj#0SB8cn~#8K_- zgz{}zwX}rk!}sFr<-uVtdn+X0)$L*$DAM_h)h(cD!ELV*Z!y z1b4}ExP*T^$BYwtz$X2&MGhlfG;6;?Bq>$e8hbrS_8q(fyU=53yFz$1{be8y|9@EANw1gP~p9R>nZ$A9dHbmE}-lgYUrcy zDl;rmGJ$h#mU2(iYw)S!$KlOjfS5Hu(S{PIT99lrB&GSV)>USD75IuED<6@?J#T zK^OOEl=%8AWZ#FVZpf_=g)Nvl4+bhfX+HJ`yg%6;mMP#eQ|B?^A&N@%6(<~=f3-Sp zs4^A8oZjEL{TbP{v62H$&OBtlnyq{yeqep$Mev--;k1suiMi|^mf)~otH z!r+|HErqHr7VW3h`n8wuY>uwbO6&!Dj#TqnmRfF5ja@&sw0l(|EVq!o@2SWm&AGDPo z-9h_FHGXfY>*tXFj6K-;X4b8C7v(WDZN)HLnZX3a` z33grjqN6W(P5)JWr4IuKZV_9hjnD@1`?aj|iKHwBin_hBju+75`$SL-du_HBg`9sH zW#bn347U2Yz4NeuQed2;yQ1itQ77ZV-E0!9lZ_Z~aRi?`Hg{N}NgYHbND?;HBxee54xj%ns&y7aPpjns zTa`1jFoe&Gok6cw3v_|XC{J>$j-7T!MGgsWiy{rIAR};xX~G^jaexjjAxK{>W1DPQ zhgj2jk1ml4vI^&DyM~?)N@F_!z~QYQ$1eEY=xsJ*;=HeHxFt&if7Rx&5s+HzL`IkE zyw__P3v4nw)oKXfEyCzRFX0_PEhV=I0}g6yEc|a|K~BLD4YT)w?KL-+oEj0332W4Y z*W7Mo6C6Wa?YasK_xJ%XwkQnV&Mk6LPRtR?1x29XsaAL3(N{+-g<4H2Opc7u|8MdB zcUxmgLgf67RC#fAa+75rHjWoD&lH@C8swt6R&&=W)gJG&<1IrFVY8_(5le@4o zDN}0@QVMj{y-1t~18d)%=yYzSbWR-N=YFynkaGssYqS^)G?UH14K0@1i;85$VjF!< zLqi?~Hg0=31Hkp|j6K9ExO^Z?JXr0?F7c7voy*pA3R3w^zbEcbC^@-I>K5$xbPBy; zfsomP8fjsaH+a)7LeA&U%T0+K2WYzGN1Gh^ITRxRE3|bXAEb0#E>?cg1_EnyJy+SHKD9SPt+~Oqv7vp~CRkidr{-z!higOQu7aE2EE^Rp0U-ve zWrv|J zSMt=_glUVDX#KSGvQvDEl;9kczt@*AHLtb`$GfnDbx+MOkB$gnoL$z&jj?CNMTC)N z`DwvKLl#oTlWy>{ZmxSX54sL-?sFLNWR7=WhP6?qgdI!7F5heLYgydggR#Nr9sr^+ zlXBOu*d|&8EGVloYD3l_JTvriqjRU`=IhuVdUQ=C?279-4jJC6sS4rpVRNhgkv6hHoOjxCrj8fUP@CNHxWjOTL)u40Lt$#M1VI=-~y~L85 z;StOVyiLftIMIXu{vlOqZPVYB#ItC5<`=+WRybABfjJ(L@jAR{);gIfk8!zWg1pIV z0+zY2TI`onX({FZSlz!zL-#?ncU$qWklIe0_nGyeu{NB87cr)~=H%u5utiBF4Ykp0 zL+MeUXy+lO6JO4oJiKgZa4^0@8O_w#+kz>WR1r2wE_5iAdQSopqc8w;zpEcp*eeq8 z8-e8lG6`Y05mnlpY#SCh{&nad*%#bV6(8+6U)(=@pGAyp#d5V%A9%6*(_|0j*-Pef zuMtc7Q!UoL4c)Trhg1?Xp5adY1&4pnaC)*r@5eJInm+Ri19M_HbIERh!!e87HWSY7 zp}n|M-4@8bm&;;*t_{FbDU;GFMnQEz>cE1??)Oicx+u3nvKHx;vtiF_+bb4wRP@F& zUP%aEPQ%H#tvM%!OK&75Sj9g3R)Lp}Cls!7ABTSjH_cYxpR4nrE5U}BoGv{74mo15 z*H7Ae&|0(z!5iCMh8zt?TlNn&)103qk^cFniDKsTl6IYRAlJKfM*GF2LW5ey)d#wZ zxYqpd;(3j{1+uJ~M%Q-?Fik5xBe>wmDlH2PZ}#4 zf2gA3Gvuz*_dsp^7GKxKTV5Z=MeHc2XXz1s4~4JQF=Vw<;*Wib*=RGFTDlH9Ufn_b z7vF3Ch?}$@a;9;zWI{N;$tZ0L(A3l(zqDg$i_&w4G(QL|H{w=W&ugKyQ_oT9DLY2U z$R7ePNO1u+iL;lnt(<;GxhRtnUsj(-1Y0s8ZfPJAlBq{MPnYKqehL8*U`;yMiS6LM z6%4JsW0t^KBDW zO2%xE)kgZZ=^L(WjHs*fg$}h0Gvxjv;l0ml{(>Zzu@Q+Ydb%+G6;m8>m3GKpAED1K zq8C1&Q)jn^>opzpDVTg~)C{0PYO>QO`4r@p4KBWccyU`>cf?@>MQk0JHn^yr|ooQBs~ z=6Hfo3t7&on+a0bLnmWxGU3e_0*-V&gPV3$x3(!Nr(F7T;N`d=>s^4~56?10wy+dy zd>-ZB7#FleYW>$WFlL7BzwZ88)hxCk5Iy<YD7tF9`wc>vrPhzsgyU_6CY}7V_$Q zQDCE>zX4u7F?^w9~`MWXnCOkjKWL|(>>2vttyf!njf9&3Fu31 zd7nGwOzQd7+cxU8j@TIE3dDQM)iPK%b~j;IxVYd52<=Zr^t5w_^uYT@Yl=Cai@ERi zy<0CU9B`O?)?XQ1YFf2hnZqEagjIn^*Og#))me1$PJRXlLo2fcSfR=n@t4w+aTC9n zaGU}96DNpFQgwt|Zp?V2NX#F5`Zc={Z=Sz|3SPAhw*8tTpP-dx-*;YcO81gjMuelf z#f{SrcBahZCC*+0BLYu!0G}Us0M9fQ$?M@>UmFK$eEO?GJdnNz4sz1iXA7|2emuSD zp5vX>L?RliTHL{m92se-<#2 z%tB$}C>*-EC z>=YZxJ`D=vhO(hy-YVY}yV)LgLA5ssn;O{#7#4s4zBFD+A8(CWb4=)p-A2=7Rq&bX zH%m^yiNDAiy* zUy3#~>dGryc3#Cc7T+43E8LgPbc+Qlt!P;TT8wsyn_z@H5uVx$=UH=R z&YOl1ChakP;dWnl_tK>^P&|^Pp*b+e|3eGKFoa~CL;8wHT;4}^^B*1rj9SoKlg*O4t=WEg8(lW{Bz#R#+XrU{91vw=y4ZQk!S1!a{o=PD*kO7vc>} z^B%w0nm|yoW5u@xC7-(y9=E=&kA6oEMxciLTgtjxU@Dtt(W%`^3iVVVi&cLC%KPGV zQY(blC3f~qwQaI+689WaXGA_%+U9n7DE-^NMzS>L*q%2${dy9j<#+{wCvp7NLfd@T zL1TU5vrD~Fdv`g+9Bl{Mm-ETs9!`S7S9GaK`86!uqdmg4h4AiGsdOq%dK5aQr{<6W zuM0sjiy4@EMgk@_2`$zl*P_uUcmiAy|Rt**82twnxu|R;$I>(dM7o1+4fwe-OUGc3Z}5i?(OQa4kVgslV?Ym0T<1pmHb& zKK7sPzY37Pg~V-qpgCT9e;fopNB6|Dg!{uv1c@G?wNJD&e1SpA5^RZ-H4r#m zmBj)KXy)0VJf#LMGwGtBzF2C|=AEoRxoCtRp}W7pPvTgo4Skk!A7n@$sjpqxn{B+L zAdj07QJ?v?8{2q7Y}gYb1o=a%(_Q~oDEY*>(PduzN`|guUbfp=D!o!*gX~{zVk*aB z#`={e*`2H<0#?t97>4k-vo6+J2kP-^pz8|>?o%I9YX1YdD7Gre zKO42&r>Ds8NhW!ZRU+{c^BQ;Xz>R=5+kDXe+W3lB$JCSE|Kva?D3J$IwEBa9%NQI% zo5iecqFI2gq^Bs~s0X~SpwxKQVIgcEh@04&R_?r|rA?erO`HF^r;`)D00BjCl2X%L zkgz;@4O`y0a@z0&5Nl8HW9;qaW?(;u?GIQ$9Y3|2jf|dB$eu4qi2&pXKb@Z9mdJoj zBg6c@Ta>RsBc@OM!voYhj;8mSg3Qj0b>b4sEk)PLS6P#?BJgxt0o9s%6YE;lsC<0Wc|5!RU4+VaSgDU4Xe*!)3; zT~SUwK`C4qT$1K*_feMm{?I9PTg|!^M@&V z)^7fU0zMsE?HtQr4UUc)2Y{dUen>LEQssQ&K?t8{di4PM+*<@wk|u^a4m6oTVS_9v ztCtGs*6MKsiOW$Gf)YDW?Au<<+znjhBe&CR0cPr`?KC<(`bGJN$oCBmAgFpKWP#^5 z&Vbynp3iDp{BWquj+nVlAfjwGYbX`l@pVf6!LXqg_eVn(agSDsQ=Zdnq5ds_9zZ;M z;ql-^^af87%GJGJr>D4@vXEN@yX75P;R9COufK|`3Ixe>R^;_+k)WqyQEu|Y@v)A@ruF-&oEIUZ?iNG#Vym0#Y zt;nSnLX7oG&|^x<%{u;Rt1vE+;6um1Gh7O%LTbBh&H*l1_bem;u%kpRYE?y_f_WPl zB0u>6#~tPmty`BQ=pdT>O&Xc(u^ZxW-|H#eU$LDMAH-{%DC*THOKrKY zTGNjbu>sI_jpeoku2sV<5wns7sy=4`k~i{H5#de{?o7H7VYTh7mFf>|FF?ex&cp=A zhg{?8v>Y9` z?RS~uX#mE1bxbj0RLjlNdFwcGup7>Xb&_18rcdi!Crp(0G1w^8gXeBc2q*9It#N3Y0+i9y(sIaX3T0p;H6cnb~W>SICXI@ zz?w^vu6$jRH zyN_X7kDU+rTg~sY1dP9p&vGFA8T&rB{!uJKIixguYJC1<6)>3OEQT@d?xtLT#&QiN z=b7#$#;!F**cuW?3Z6wg5NVEYPLoz z$yh@$=^2N3B5qP*)pM_SFPzD_LEQ+=LFX@WPAl3`UtRTheUJ(32Zzf-RpsVx@d|7B z$2Wkv`6Ph2F2K0(i0L4n)qL8lz2;!xCQak{pk@&$hL^)vD~?wg_^pd0g$}j9#Ld~5 z0&xo)=+L#3{iY%h93+4JFf_rZoFk|Gp=LErBW4ZVm?V6>?}3v`_O`E^fQ@)=V%2Pg zFN{L>vMND@PK~Pw?xU{ZbvoHE`Au?YKYFx4z-~NipyzQb#Qh|!m(+u-qEm>RHctCP z@d`!8_EqLCgU<_5_L9OJ?Nirmph6RqZyW`+^r&&TYLl3l}5B%T7h91scEwhhH>@x*60bWS*r7$a0D|0`_e_9uIN`r&>*U$Fsy@52Ne z>UKU;vxJgF=TeoQrJS5{&<@p{1AcnJ&h;)F(|bBNdN*=1FjLA5}VY)^HQ2BR%g z%G6gfRI%${SS)jiir6UA+_ELwa-H*D$MBp*D&K)L2BwSSv0-VPGeR;3x(5&N1M{!X z?Q{ha?X9FZsWYIRuLCXi?dN?Ddd}iwMRce#pi&0K04)pdwbfg;dt-&MLuf793Lg3# z@W7Nbqml(5%BSAgjPN^E+k_^zKvU?{EYWo`NELJI>k3n?2sS<4!#{_*3|_Z+y=x8h&{~Gjq-a{>1|yrDHYU#)wP1d-l5)Qc*C;U&5ujodQrJOQ5!CovZru=%!#L zM#HF*)pclhk~MVzS~jNw+{2hO&IWJT1330}-JYoO9x=8PX=zi z=W_v(n41NQ$eGld0-9cP{jkqZkUioW6MbzFJSt4Na=hD{TWz*s9^E^QvHUpaM z4OuG?UGTcSDi}kW{}SC^E|`q8Hh3l(3yefKb(jsGnnQy(oMDelY+Ru7V*E-Pn^9xL zI^k)lBRs)vI`{q;ZfCr5#p^40XGcvbIeWdZCmtb{^Q?7${L%td70+qMU4)LlC}#oN z;~>*pbDuLYqri6#TRMVK9$4pJpG#S}Y$;>$k(eW}%u%%eZlIa3=$S2@M6~=A_%Vir zH-4QNp(3@lHZiuad;K#i8t4%ZMp`&cywG?FZPlElrxAO9q*w@P8LZfn(|j)oCph*X z-oOWi1Za)6H$uB_A7X&*E}~9EAl1^F(`5p~Uc|fdGPq&fJr(~k9F>aBJ+Zi`c1ILW zl$63#1o!s*HfJ?in{ZwW{K!v;PexzyIEJs6673^^uMqxL&#kqwUZD|O@+JzRXy3cc zSROStG~=I`#bSW$M5*CX%-bp6{X2kaCp7WuoA^eEJyzbF(fZi+AP%981w+cKLJA-fr|?}1GF@K0=e!(E7$hW z0*xG%&{7q|c2B%@W6-vmuxP&>sGW3ae;nZ7cMl9a8aHY(4k22nEO~Ymh(cjJWe6jjLBL5Ud+H0FZNC##w2c5_VVx_F*Y&WcB(1jt_I>gtN1&e=J}*nxC@I z!uN^#_^vV~utMe)d{DjKi?R5F{Mn<&w9&1tAeV}$fVG+Q`nr6S(;to!INlieO|P<8 z7&U(5X|++YzTA{XsFj@+@Lop~g_YoMY5;H0@(7v8uxJ+Ot7?>s=p<6>GKeImJ-hLu zk;J*dQe&03f=@m!u4qv+5?6fnr|2#AEF_ea#opXUK)XH76{J_koW=5B2qBe^AEas% zyK3?yyh_L|d%u34prv#*;Dr^junhWwmTYaB8V-!7%C0*cATB6}Z&JljT_zL75HSu$rrsQ&(CrH7qaPFAJpuaS^KTE62YHRtwwZkr4j*^~~>k`3{NU0l#>^n9>S#IyxA_89PU-uO@B4-K=UeDwb0vTh3Ks>o!3{LkO0 zkg~t)*t6+xe_V#}aPvbsy6f zYcOCwV86QJxH-o)s99g1LAb;{BxX-Np;~BzqN%pNUaHPzf2f8Zl^WKje-1HH)5UBQ zvs>teV+X%5MYFgSann?&w6KL(?-DJ+sXOyyH0>EYDQWmp0pX!7+dV&@QA8SMs+dwg zpjpaRe?`syjmUteaVSSWzEz72_^>K&GeM3O>$!820uxXVJ?qZLiEL|J$yvync$>M0B; zQT3f5K*6`AUrb!B5}SR_Sq+DbS>Y)5Gy~pscN3VNUo=F!u3J$-&$+Bl#NiPe`uo)% zFWmu35$)m~#ePyjF)69k`jvU~OS9UqqFftIeo2xOU^#u|H2n6`DWw(zmSmNmGMFi1 zxUONUK24Y7Q%lB_pgLCz2XXyg@QLe0%;Qjjk1A$^ho**!IzpuQmZI(5fp42Vw)YrQ zDQdZF7Avo;BUwWw@>})uKxnqEn=30v?f;&4a-x{c<*`%V(y?o9kzirVWxfozGSCm; z6QsgX&~KbHe&^1Ea+WTe)URqb|5Kig0|!bc-(6^X`(T zYX6|Bhuo@{8?A9AAt?`9woxfp4V^M_wn7g=v|KY!!xo8ksm$@l-BE{yNo$K0>6r?8 z9Ss(IC^>lS_?L|`R)NC=%z1%uO2c7b%BGpZEp!U zdx5`&lE&o;QY$&5Q55nt*NH5?hnytki`2n(yZ?1q|F0m=y!7EVduvIxFPJZqPVZ(a zvc^-kn>nnp?Zq?7u`;W?c1$;~KQrr2WE@G_+X9}CQ%~1=oPT$^jWn6^qA~7AQqn^1}5xQwx4<=!vW@#15rMoC1Y59e+%)sz7^U(`dIuD3llY(GHj- zvR)3*a50I!B4U(BccGIqb1vEx`8f#GrD_@f;%rqxG?f#=*uWs{FZ-74%sLCB&m_lW zub{PaCWnS^NXf3DiJZ>KSf?-k9lXFOtmn9W>fbc4>E~A^{b5xneIP9@>y{~j3NS(a z3B(Poe@YW-N$-n8V=8J0MKu3X)a|l?2Sa_Rr22YL+@zYOBc4hqy!|32e!7I&QJ@@} z2+1;1Zsq469Kq4_`y9=STqTo`LnE{5yzT$#v0Vjc+`N{6S*ye0YYwn$gQaZ>0O>UBV{w&4@6 z>xZ=5kqMNiGMQwms+jLyd<{iH1aH}1LrH?umR2rC4f^Z)Bx75SL1%7kvJ}1&X zgdGW)m~cnDKzUi!>yZZ^(ODj%cssKC4EEgmDt)PDx1fY(Y znQg$_Cmp_}qKuaQz4(g+%g4f}-Vopz^>@0vyiI}@hML3U;;So!44}%8b@KGmltTtg zN@!GDuMYrqVH#IOIo)d}jhO`^4VX*IUR4b&S2R_hOcHb+;^lc=Y6zy0^!}e8mu}LJ zk)Ft#WH?20qMwW{QwTa^(HL7Cq8pE64_x z2ZlWo-_Oj=w@IKP$r=j6`ONfk<8zbCt}pA(6kXhCe0>^=tz^{|-a>TtCjF}*o2$8$tW%?Gvq|F&{>Ig2C4!Qz zDU?jhPgyUXBBPazbuXz*tfiVwPYK;@=FYw`NCzq%+?cKT`B+a(ul<#!G`Q9Fg)#J( zu_|m0n+&S|kAAGS=>spTc_QoRK_$uk#gay<6sBiffu)KOd+{dkNos0TPT#ZqkiOhx zDK!{O3TUO(QKVvfk@WyI^MJ)rQBOC0KQU{)hw!)1FP0J5Z5$%`Y}mPg2mow84tXy= zBuJt?fd4W?h&lT^bmA1OU@A)sLUfG#)04HiBo?I$9t&r$=lR$cd8;X2A=Iu}oly=>jUJM=~N(Wa9H#bYze6x&iE9aOb{}N;G>M;ma%- z6vK2cZ4!^e*j)s$i1LWYf_YiPoUbc+;aWr7fLOok_Io#p$)kQ$>Hiz6(M*{=J_pbdfUqD)%ZUQ zkONywjkDTq#2=@E=7u3OdgC02E;Hc;id?a!25P;EC0v2wZ(BS_PuH;piN_L$OJZqh z=Cs*=xwE@x_5(g7AiqxViR3_39#cQUEN@6r%McjIoapaUaow=Q^jVgxHq4Uv5*UJN z!2R(r!}31oA4NV%?d;o-h+9^>BJf8Nh-@N{^hmSgT94x2Fl$(z+B|?|OG|LsWTdip zYWd;AYedV18q)wZK+3;?fy%81YdZ#DsIn@QjkSQSdpq}`M<-RO)At{^Dk$L9>N!4L{?l||A9W;Qj zONh{PiKX71;^-cdZzzh$GNcFQDWh8tLxo*wf0zbf5(drCF~cfc;CB+8=a5=Uc^j#7 zxC=*6L=;iDx&b>-@Le$L2Jr~%k?%s!@^x46Uh!@AQi4)osV3|M32oBm9Wa?=Mc=z{ zHwb~n$X@?OuD(|D%Lql+T7UXR%wi@WVYkNXOhpaPB0JHEpbE-NGOp4YfkB;2a>RUl z7+#bYZeb>J>oX=MoUb0!P?c({@HdC^@hwUe%l%(@*QcjJU^>G?49g|*6O=i`Pd2fX z;R_}hJDMSa2Um#R1<2K%!42kw_*LYY9LXTc5;qPL%1$PYs@t#Q&K&)fu=6|v7HIXd z5U`hBm-w~l=D57A%M!6G&MlXNz;LJO<0~%WW&+oakCfW-Ka_KB+C;t>pDO z#IgdyP`X+9YOF}XIO&7{RPoGzepC282j=O>UNAW9uG@2H5MPQ%ler1p-^LG96IjZ} zzcSs?BeFIx7WW#(?k0M`ICu6m=<5E6|UCP~zohueb z%{u2+j4n&q40OV>$%Uk0G-6cL&~uG}7Uoil_GFQIlau==$Kh-Xsb(jr?zV79q&w5d zE?DHI*(;Q*6{AD-DtJH-&B$nV zAhp8k*K-TY(v(~EDDPvP_oooXi^Z@8;6boVp{;v4EzKL|k!FEM2MHeaNOLJpw<3j( z`#J#ghb{kO@%%u&)H*hVEyV+6@A!4Kwvl^X;Y-CL_<()*fcc8Z6vQ8Zckt1PB=qo~ z?U1Yv^!$za5Ce4;9T<{Ov!r;0U_s(0BD9+R&TB(g8MLDy&o<)Sb<(Z48x&CQ0>BW5Bw>ARE$< zeQF(gLF>`?uZT&Hj~JIOVa%v>f-}r-Z}*wLw2W68Eb8&&_#>1r4|5nhNyN;6Q6prO zfm1GNSW=WfettC&-ppS4agM*4C`6ja_pr1E8fa+w<#RgHLiXR|og&!3DOqlWUHRo~&l0?dPvlc?0 zzo+W>NriIG|1*PSe|YdroFfW#Fq3n}sA&tCxUnq%^Q{h>68q_f7G`jCn~XIbcrll@ zq@APISCz6R!V_$bL9NtB+_ZA2hwaSN8k8aC3+!FGxA-xE%C#D7y4uf1x0sWzZ#_ij zhsbo!DL;=P^X}RqycV)*~Q7r4^wp<_oS&vJf3yO5+Av| z%KMbxMOXZGM$9^KJ^4I|VqAuD%qTsAlBaoczj89jcX3|#$C@W+q7aFMi@?Vs#ziiZ z!TW2#Hg(ny+J9mjDtIVQmE2mm%V5pTRplhHot54VSL+_eF-W=15(4)ij*^kn45TbVJ=}Q^a#kG*5F0Qg; z8D)}EG7x*I$kodg@WLf{MA38gaMc%v2z5SS(<66F`(nOlK#H1)bFBcvXs zsC>Pa(Z}-5j_6fwU5pYN4P1#8W8JYwNOwWk4oM|{XcnULm4f}%Aw#jj#XQ7>+~r*N z5w=+%KbrzO`5xSY9>G?6{mXna@pQj8iYu|6WcE~tv4j`;z@R&OhEJlj(-~LKOX>(3 zYvdfjBXPkalc--}epiF_4^%A1hL9(AI*eP$&OvH@z`k%2usWzhXz;ya;h0ayIIxe0 zLsjuwZr2xfG=@7uV9+)cf|_e@ys*3<=!W`KDh>9sd|=8zwPZQxFE{0cQqr>jNKG(syVs(9-A8QbyS7qeJL67 z7Qlb1CrB&Za%V%jmTrZerZ%l4SA21s1Iv%YQFP{}#yaWiJVw#4HHe;+$Li0(?biD9 z?>0W$`)De+RHQ=-fOmX3Iu-YD&~tf8{F%WMhnHCQ@+S2aSDviyCOQqWR&srN-xvhL zYYo={5}{sz)Ry~hwf``zW+DBBE*t||)I$J+jSb61F>@(E+6QMgk_=i>&&{99`xZH0 z)^C6SWgX@?MhHvUMn9Nk@Yh~JL7j;WOiUJxRJzw~{{h19izmL{pe6gTqmi7PK%V5FVx=lo6 zw!`Pyf(IPGm-c8fDAwO2^KRw~FKr^XzT4fZ9H8&vq74e80vWzj zbbJW=wfCuMcyqh4p4l4QxIOcC)T;Uwuma(s@^~%my6*HxAGOXn({y^j^cdsrT*-U& zup)NSWGvw}VVsls)gAGAKP<1qQl3PC{~5(%*Uk-U$NkUl+%noxw@w-l-ivtMWiU_} zbiq?%h5OHDQ?iy@=%J7wSgYmGZvz$C#`EnVVi*_sotVCA__d=pXQjk zcGQNwvHdS0CShKd(I`Gy2_7lw(B-qP635Lc6}O=1r$z62#-{~SJ^is{2+rMKN<{|5 z2PLqJ=ND+MxF!d(&T)2>sW;moA(zniu2y?LZ3yEd&5D+i@Ei&4u-c=?<@F}}? zB?*~%zg934EVc1;dJj^tpn4(@^U7U}+4OaoBV|KUo8cG~*as4ze2tpT@symg85MP6 zGueyn_`@9SU3k5jm-YapPfx^tS`vpayc3bif+~l2l>T8Snh>bvXg^+1`ja_*q(z}0 zSVb=X%_c3$!TXxu?9o7ozz51mK_6YqzvBfe5$?BfZpm(k>tD`M=X&Hv*CKu;E6BH~ zMmMa-c*s=>x2-i0J2)CR@!81p%3Zm?fE(_BSu_jBZvktaBeh$U{|VX;%h*yG-o;ZE zCSoE+*uv#7U-;b<+VVZNgf^~wzkc-zN{Au2STa}HB`Ghs8OjT4J3Uz&6t{k}`Zmsx zYZqg<=QX)=Bxf(J=#!IgIVSRcP{)M#aaY<#G^ZoxS#QtTiXKUbkfRUyxZx75#9Um( z)hyN_JI)T@U5L5;(%S(B2_BnqTM>h+s?i-(GbxnPa{UrqO0 ztjvZ*DH+eQ$b`YGl$Hc($s&{Ow}^g~9|UOR^&|<9~U!QD~8U2l@o~gzS7C zJKtNri;VMvKN~?uuoL#( zhx)SO`lp6EtufA!{KvH=WC`Znmyb3n0W|uoB{*(<)~=L^d|T|sW9N((%gIjUU;l*Z znzPgj3(DINWLW`|!%GPo?hj4Ni|?d~$96|T`7C9EViII6hvn|hNImrfgnGL!+VP0X z8}iI~Na15r27M4=5{b#jTW{W{h%xH?d<4Sb?f7yRiiQ~gPuN_ED~E_*pY#Bz7KcEC z4h&vRr&iYVoT@WN^YJH#eWkm;b2vPSg%_?ORAjc9?COO@a%eVuu=e!zMn$EmV(Dxb z?LfFne;Lgr;4TBQ9R3>#I&4(`zK+LT5$LC2Ln%b|rFkYuDR8bS{pCw6u+eb6e&dr4 zEYx!DPG3~RB7)ke9$) zpTN>vm7t@XAPaFCY2Y$ynP6>HIDxMEnHid6-K?03wWKX4bBDZ9BKsVPdqgn=lGl4^ z<0wmNk+~=$4Sw6Iqg07-r-k!`VwtimvC+_WpD<%_UXVLo?$Dkhpnl)Ow=^yXv-Qy; zqY3Ko+CQ6tE8BtoSaK>Q5CK2NVPNU}#3twh;+*_~rxl_fIeHS6! zV;z)YdT|yh&rw_it2ooS9RPA;T!00FXj$TZ`U6CN(IhBFJs4%ld<~f%;3x#Qc$GjT zkorH`Epyq7LQZw}FblZ-gc~*&HHu0Lc8J+&2u} z2-x!yVxwK#org^61jJc$0h549YrL!1!XH?<rz-E_p*hxC#c0gl%lzt)ruG64-pL)?t=pYP7p|L=A zPQKDvH!K}}n|1nqDFLTO;O-2;UzG57(1|rRcxsMkxNAcz*vb*w566-{`@e`FU*J?O zVr6OwKG^FSD4}N2A(<%S@xWJfn7}oE%`3BItTM_zg00h2h_>P+cY*4fG>y1TQNnY% z#Y_T=;?A^K^%{2mQYB%LUWZZMVGm7U_^Ag0o{Lf{*Ug8EVr{Vl+hM(3jIgInRQID#DNYIZ=AqZ^k zXH}%k>xyl;pDs6Ph&h7aeTwcQP+tRWwW=8$1-Iac@COK@#rVdbHc@MBO#OJB*FIUN zoe>yn+jk3!c7K4kNH3~tU%UxF|4$~oAB7G|%2%yQ%)(9{#;P405Is)N<+n}Q1MOX~ zx$Is#ScBd?<<4k*Rtmd&@zXy-+{?*n3OY5cOq@gyTYo~MB5aRi4g%2DATHH1Ry0&vV}f|| zL$chAWI}gM zh8Hb@q+@o}6jdTFkPzcu4AIp-L_=OF?J5*7ny0-X9P%ssd4(P?j}x3%bK9G92^}-v zV};OI0>aU)02CqRE-VZZ+EL@8ZT@}cE({&o(qA;(L* zYncSpBP0EJvMVo3L8V{Xm2;XQmO6eiun*B-T5>tiJIrRcX(6L}1O%bei;pj#P3(n@ z#>KF8E!Zq(k$O`&^|<8x1Dt}SvBu8IEUim=kY9pz`CV&Y^W0cUMqhPOGP;VzH4vhK z{>M&BW}P;Q`~EeTtT{oX+Z70eH2}v99g5w-ijE4ZdaX)8bDog`$nR*AaJxK%Xl35Z zMZ=}Kr5Sa!i=@S=s(U4JgHUH(5-HG-e1G_t-ia|>p+xy7=`OWtTLABye`11XyH6aU zs>ynneC$kQ+E0IBzA6q2Pp@hqc-PNS`}fAP{ehpbVTm-kUF3Rvk~g>N>FYA4dpP^? zEd?L>eBu@v0$dP`r%P>P!Ds8t#xAmlo@ZD#@-E?H*rOTi}nTNbPpS{pJdi4B(A zA%(}I6wI^3b)a9-AZ0TmcY55~YvVKa$={K)cv{u(L;*EM;Ung-r; zT?o`==uDl_A|0TO==3+$9X{BDX1X68%ooO zI~VMfAtO1c#9Ps&eizn_V+=aMy{iBvauTR5t1Nt8WXXUN&y!&uw%l3B5MW)8iMY}a zQmyH;CrzluEwRu*%>9!GYS7Dho1{dDh?Id&wSpT&BJZ;P^bHkHs&yU)6A$ncVbyN@ z2%bkGS_<5q(5#%7+Q#WM=e7BiBDjbGHGl-L)P84ql9 zZ&eT;^7P2Gj-oNhVQinj(U70LEiioFl$YsN^@yz4pP+BdwUxzCjQI;{5b-YAktPfY zA1?Fdx<|peWTvi4ED&Wk2eUMqBJvAy7G%gaSbW9ewCMsK`OgNWzwU??5iZ08ccn?D z{HZOBDFSYQX49-_!aarT>uVAVOYqWvH$idwzW|WVSdy@LTkLxM z%-9crFc5Fy0wqKv5Yeo#$3*COqanPnJHv9aG~4lu=ci-*)WjjwPeM*3xypdbJ$B!O zcTGhO79I80K9ulG?INS`+U24jS8j3)S8DfcH6zX<09<>P4MRl>rM1OSjw-E@e19CGM8q8ixDsr|=^HeD}9AYzZ_q?roHKj)2SWde3 z50eNe7)eyn2j?r_>mLvZFj2I!j>eY~1Z?H)?Ml!GT?)*{R*r@_%af8~2qM%?Q(}I& zI7;vJ&`>AltogKwAjwRFj;jJ!X>O@De*xiNHEs5SL6HOYGR>b&kk%l08DXuU_1yBG z?TWj_1H0&eaGt_j(D&378%AyyE7S1wB;+8HKQDC%8LEQ8jNH}E*Va?W5qBXn}z-r3}@p4k#NBZ2H{%uhn_z}qHG z^QYhPR@PRGgM)O@8VUAf%P@&L#|9v#VkzG#g4=aLbm(lAA7tVBD&fk+Q2A!XWJb1z zUBM(!UHW7Xeu#BQ7j8dK{S=3-LngUBohZd&OFXOaq{-z-8&;q!aJ>s3YsEI)~< zq^WH2*h`X_AaGLX=ncbmD7f=Qx+8_NF#BVmPW9030VbBpKg18==ac74^k+jiI5cN@ zdT)walq9>na^zeH;#fyD?OYyw!M42xJI+%iW1`!Gt3Q9>m)3j}*8cEl-C-=a{@mNm z#$HV|R!)@6;OWq64~KN3L;s;4Iu$ba`Nbd8tA@;hemgnCJj0n2WVkMA3vascZ$bpeM3 z%rgD^dYC4(_Ai!%!X(Zwbe_;GOB98?u+zCtE_YgjvDjTV<+v*esu%jNT9KqJdeOB7 zGXj%pD9i=sj6P!mcPA+f@w+_BkRk)#rr-mn)8>p~sdkmwe_SF|^imVKGvj*%)uyhk zZkdBpavIX^X3T!^+B3zGeqWcQIt6YN$oqh&yEccKb5?fJY_*@nhKB$={Zo=7qWm@( zc}>rF)33FL=e^$?wq+TnSnmwf48j4U4+5y#gVU)RHo{h=EUGQX%&Vi3wqHx{yS2ICFL zMlDaa&YL_KYV5gb#NIYwM(6TO*2`K2gZB{#R$}JVad9jk!g)nBMb~FnC0r@FJC*fX z-3AvsY;98k4e=x{yAEM<_oX; zPhZ|B-&f+YLkf;cOI4qY#*Axh)b8{YeD*`IIB~vEIzZsKL$FD-q}fZJdE6)N7D=6`3!8B_l~xMA_d^lkZS zI)71MoDDA0o(*qJv1-7+IAIq0X{v*q5y;p%2Ex7u`x0o)CC_SStj^h;e&(eS%;QKR zT)8T9vAl;LT8VI{`qWia|ICv*1FCn&i=J;#nVGVEx9fT@BYh3tjfrOC?460gMb19o zf1{cUm<2+;(|w|_67YNur;DZl`RQlJ*5~t9d*^{XO%n}YE#HEx}}Dj;ViB1woCc|ZLcCAZqWu}hi#PhhNHt_bAHD?U?Wf5?CZaipx0mp_s`uu{i z33{_yc?R=sIX__O^xPX*!I@W8;WBMZlXv!d78bC(-36+jVz)*u(M?R`bcp1~VG?gN zX(Ul4L$xPRs+_{Y zCjpinhoqZXhDD|XExaG9^fcU`@$-#camq;9f>&DiNPkts-$u-fI!zMHsptJHmvr^? zTI%;aoTe6m-Do)Obcrt*;qPiwjA-a{c(MN{K@l4_HOc9K^USHKUmd<#*56{mSn52K z^=!mNyKdKTT61Z%AuMNGD5|BJ;->XE}y}c^Yfe z{YUAMh^jcTtMEUfI#PtdXB(S7bBQ)``kReE9!OQ+5)0q;+qJy(eE9A%;jwwSKSCABWW$fKJgD%Tn>rt;TXv2o%d9 z|2xa63zCtC(vB~hL)NJ4Zg1fTUkVNOH?MsEq?}qRN-6K;*Tc!}p)r9K*jHFh`${^7 zBKG1p)Qw2*{+lYW8}(rf$m$m3rI-xJ+5Q~>#gk-QY!*T+)8ZicMCmLhR`@K$o+UtY zPSU1A0Asd=pq|bUV~*LU_*s-_B(N!-u8{{9DMV<$h7Uz< zbb|4@N$X?$c!f>lHHBc`Ec_7YM**-k#8Jbz)7{wtfm9x?dx({`b|UVR=1mf7Pjm)0T)!=50p~-8M+?P&_V})vmG^48F9uC} zg~d7Tr4;#3g6-n!{$$v=AP)J~vY)i_5f&+v(F(oqSWiNHf;idj=qa)gZYDOz$1tSu zUkQh?QQ?;Tg^-*^bu0L87-)9ds4YYzXP0n#?F#^a>9QNRdq}06wuyoHOA;hXGZWUw zn-(r93IpHbdOmthlY9w)LB_kN62(W=xAYI^*Zyl=wXRs5b+-)jxEax>%#`J-aq%=u z7e0+bHYYmo3#7Wl@*j9`*i(%uWL3h#cr>&wB-_3E)h392zm_zy-O^C?iDR9v?VW>0 zAbJ+}YPi?fjhKuM<*Mq`tR7kx>>ocTILDMM_uH>#ltY8bOrfv^?s-lE-SQ}jaP-7= zp{y}e+TYxPC9e(sqFcDMXnNP0+=LkQL56gQx#$uRLnU@hsv2SLB0Y_VXx9)5zb|wa zzf*Tf#92zf7xJG8c5vYOB)oU@%_mW%qDB2QcqF(P4Sy-?sWjwBP2#IIiK21N#JrR_ zs~q_1=COj>X2mvsI-UM-8)*iuOfDCbq?trCubr1^MU|xSice%CnO}$D+7Ah(0jNek zlK2SZeL?JAJo*AV$ro&V?#>@+v1DBdf0OX%*({fdP_>Z|_o=J1WT#J>g)k{sp!$>= zHP%IPu?{<|>(CblMyx)}=~EfAJ)v%pNVGO0hJ_Ooa+;@CmP!T=O?JzT?a6?X9`f9n zlG=54Nte_}E+k9kl40@XQDEby8X1qy$iD*LvgG^!=DzArpj;5ug=AoNH9iDDBc#kk zKFf8GB>cQe*bN(hr8l-9lH+@km8WlK(&t1#4V*Q~%GU1p(h9{dOVBaABg2D*CV{xd z0n%R3S>Na_OdB-!=LQn_%Iu<=eyUc{VKMZ^V)gT}dp;jOZ|Ly8(@G^^nDV&q7gbyWv~8kCvJXgPJo{MirBz7Ae#dRyKk9fsiuO=_$7=E{ zjFHB^%7L>BDlT_@KZnh`x~N;IQknL?R}z=~C=m*Fw;qzWX&3_y4Rve2N}M!{UAg?n z`ZJi>tw~}Y8t(Y0%$9}DtSZ%06%3Z7fCo>p^`l^>DRw;JF3oRLrjMMaakQkg!&XJz zl>eMC)k1nTuSV{F(g8*(OHFpzgVw%oF^zllE^0N7$UK~O15yFBF~nWTt>O%dS5k~U znh&myde)Jij3$-!eh+wjt*2t+)Y0XVIt%yhjidq?X9FJQ5;w_`hPrX?n^>P{h|}2o zbE!SXSb)XXLWeaI7)*q4k4*jUT(gdOQ2$R?jBgrSN;!x)PBL| z#z-bw^ye%?3YlgNIVd)U?P9TTTOCOsZKULLkY7#2YhKjG22+P<``tT~+W(-!7{#{;O| z(=C(Zmz|B|sI0l6P29zeUTTG7`2OMM(i+q1T+zj&FYu5^7WGC!$l?Z(Yey<8J$r2L z7q#(-WRKCq#@Pt7jFHE->1K1QGC9G+z-R2n^XZdDj~L%3e$JunXXz2IOUe+mD863= zYlJ)TlNEw()9`O3E_v4|%c|x5f^R+*7)bnzWeW1v0N)EfoqUz_LS64OQI^L;@Hat8 zf*rI5?mN+-(Iy@E8Q`?8^iozuKU89ruFf}{P>au5{mecMrI82FaM(DJZ8XYyQe`j} zgdxs^AdOvH{5RMCrNytZ{MpBjj*wK95b`q>TM=rR2|oMp0Jy+-A>ss0mt2{|De2T4 zxK=#@$GGSUYU;AVP{H2~@H${xzhQ0B1T4cK#pDJ1mCH{`;!utuTg7|Hf{pw@CkyOT z)eaAaGLT#4?rG`X}I==Bc3Sc~9S}UFt^S`;~?^6{)n{DAFM%6h_j-kLXr;%V zMjla8v&>*8a-S9yLw(1o_eU#$#WFpKAg!mKCyh*J>9N>E>T7MrV8FLwa7hZ*m8B+MgqNWmJ0`*KBbj zT0d0|TwWO$i?eV;@F^&N5xUVoj~-g7x=O z?T)}g0ZI`glO4-$K4h$hv~_)^#u7ffW1Kzj*p{?G6rJRB9-cl$^;)%=Z=y+x(O?Q!_)l+v@$e08wz{+{~hhD|0)TvWZU zJv=N+gJ+#N@2?f0qvA7!Nx4R6;V95>RN@|yduCC{*+Po%xrE`J zehZ?Ms3K`lUgEThBuyFk_Wsx>3&nV?q~MGlk|Vgex%5$ zVP`0%k&e}vlgFAetb$9L3Mx*zXIWgUd)F~Gz&(BX+TPbM_q1Uc27TBIpj$1wrjM5ejwQQ570b=q9a$!r^HNmZq-2G71ZRW=3Kr0 zq(QAq!WWn&UeF9LGeIk}%uqF<}<-K=*>}%!ado3FmmSQc|b?t?(^4@rHDjd z9hl}H7+_}nI)w2IVy!fSzx^dUNx6lqftDJ(fhz1FB5@2f`yl-B20aT8RXh+@FXXdG+jrSXMa4oUy&;M62PB{@@r(6Wd}>p|PON&B-oKV+)Gs=?yqFE@WhRS1 ztfRg=d&ArOJHlET(`bRaQIBnKuoFC z^Kfv+8r++mOXz=gecJ$a4V~NlOpAP3K34Ad`Ms?)5k#f=w7}?dj%RBnk(o@+k-<97 zXmz)kQW5!~Ej_gRt~-9p^BW4FZ!~DWi_344*7IZ>iI3U0&Wg?k`;Zl_Hc{SkHrPib zVjX7RWu?NIKk8C`siiP9k0!Vf=KqMK%W*{t+Zs@|s5ZT!sgExc!W<0Nd)teLG!16ior8*fo=+|)U%}_nxB7PVc2)h})%g%Rrl-l#67ca`6C+juX!bx=sek-b8LC-rNB=dMCAnq6RbQ=BvQO}hA zX}~Cd|FIp@F8H4nAyBj{&uTVn0k9V~G>ox}gPY!}f~uEU0n5$VA6|cuy9!nIPhRU%x2sse=20|9h#@=dhM#&JT;C(R01&l;MHqbChJ`F6s-YNtQ?)U|6|t&#i8x`esZ!tVV~jf;fNa=H zv?2}3iP+*Hjz+jBtI3u~U|0eWlZG0z^uIij5&(>Gtx`OSE|`$OOE`52t%#@p?)nLG zN7@F9pAx4r&K!b7tu=_5=4n?-CA&pEU%`BA|eu|MzsgN+f)VWgLbE=?03d1 zhxEE5P!?XAA1k(m6@R*yrt0mpAL?>|6M13fn@ollr)~@-T(Dsl<~ewQ1o>BrE3o}( znPt71iO{?0Av_p(mv;a2r=47}Uht-N*S_0lYk?W(T5&q|C{zQ*=NK5COqk}Eky?kV zGL(4mh}BuAl78@L)#dI1_u)dOQ3& z+F;1%rr>E6?_u`_Rg>}h9aU1Rf+c|MoGl*|2CtWDqvDI~kx+Z@cQn%d$1GQ&7X#BN zq#ysrKg}z)pu# zwnoWheS*m_09oQaa2ALiBKrfLY^tnA%J;DGS#=?aou1oPc$)$mp{DZxAQ{96z!qsf z&VxCB?)F-K&~&(beiXH1!m^Yi+Nfz3;&Dy~c>@)uo61 zry>K4(Hx9WPIVGuL%sTq3-;ZPq0V;u&8w%~X}VbCIP9!m74x`_za2OC;ddgtrGTFv(%4?|4K6kgF?jR zG9CovT!RNWk+*jKjJ9hC-#RnrE3^S!9M={7qiV>MpY7h|ASRoB_8onkbd^E}haQ1) zRZ#XK?PGU6BD)R2*Mp5c$*755)XdXh|+dDX@3o6xcz)5zA9d z=Sxq?)tczJh&%=Y*fIOPq_?`eAxE@%H)<0$#Z0Ap<@3XO9aumib-fLEwn6CS*d_0M zZzZnLEmdF|^Eddl5bmyUr=2a}GWKZ*D!7WqiJ)EREh~j*occ>#W;8+HC`2`tp7AG` zqdodz+JbBsuEX`=a6IGT7s974H;oZP$^c-jjT>OI!XX8!0AATKOS`dEE<>U@AtWj( z@7@=7^aBzDzklEceC)qiyVI(7viW4ok_(t*OQ){a8pi(*i6?F8Cyc`};#3{j1DMiOy9r*LQO3QUY9^{jy zARkcuS{G9h5fVjBbIEQY ziSmS1{4@xAg^dI<|3yCrB_F#a?-l~EN3JUP6Wa-@$n47=G42g=f+8347&xDZB8=RR zAio^lanU@KAg34k6+ki9Ea`yX-G9to_czD3R*>3(aEsd? zInz-GuBj1l9BIZ}2uuBLv~DrB1Qd;#N~_|_b9An5VzcTUFM;6$rK8hAjH8f;o_~tk za*_u9kgm0y9%X%b!BSrOmTL8n=lb5x?9Qmf-MPAelKuJZrwyADdi;#GFO9W1^v>`1 ztUIe2|1~hOfr-4TC&kq#Uea*xSz4En4fIqrddOqJ##A89hY3oYt1UQV(X{sbk%~D- z1MK`DEeuK6wsWafQq!h)NSl(st||x#QawLaakTxo9%rs>DqOm1AI7y+c^Q5cohB1P zF*Hd7gl4-vl59?fR$#)9=Z2&jm2XT_dtIr^`-N~{NI0rb;PVfCJhp;1+u%V*lSSq{ zA>0fZI|cYH_K`)x)IOEypa>UI{-lx-+X?6orwj7E0}QUXk3^*k5g}D8C!v?&(f6k%aUnEuxxMX}T`RUq412jFaH{q+sUo-bqn{LlvUYO!qTR{(ndmtUFA zo6WBGpuWrSq42kK;rM1g)_K*D>se27T;@D`-m4>SJ*N0loKv&R!F|1bKd!V8;mx0~ zu8<+OPc*S9YqbA2rF>!*+M9ob!C*p((8a%O^=t$5h?X0MD~L9|2na2QW@~?_r(~=R zMaNtBw+R#h=?~S#j|*V>3s2BQr*o*%?Tl>KGQ?#RpVr}<834!Jh?jY(2}vl;c3Kd- zz`AJdU)67=bT;cHA#M-OZ>g_^3?q!X>3W6FG0phb48SaZJZaz_SYK1mCVf8bRI2O$ z0}g0qlIttIyv%~TzSp@>etq4|SR#K*=iz;JC?UGY|@mI zO`o6eVhn<~1GvA2toPJ)^KBwqOxx=R{+R?BI{rf0udYeW&)|#jqraA~fCNs|8+dyv zb6_EiJ-{lOy~Q!cwYX8YriQ+Wld7#7&*{Hw8_y+0ycrD>2m1No#f`(@PYmlmIT42! zz3lbH+N#>w3A%q{nqE%m#}YhxW0ZeR{?ZPN#v|(qgEW}+m`I0i z?lz$6p^ZAGB>)Ma7c#U0kYf#-USPC>sZopPu@rmT~Rmvn7f3lEp5W zq=2v3*T@azW%Y}63@`so2Vr%meust*@dUo_q*;pSRk|}?1*)-fQ`_oSzl{6}uRG50UQs~nsuTO&2Nu5R@ zhLIgl=CYpBR`sL$ZUH@Uw{%l6Nk*3{U-*a4%1;uu_!7Ba3Uc0`sz!foR-97C@`Rb7 zb~|3=MW3+?iNMH))gDsUZBf!i`@#ND6!V(*kgFL>`HyRNmv{!E5GYl+{pgPQ<)q`acskawYEVi__nHtwcfV9EG)qmA8 zzx4idTwPn5Fmfjz%{h5~lOLQwY8JJesAn;5pI6t0mdLuu(ImkyA!Oh()gPIz`9=Ed z%uKFy3tO92a2J;zLJ~c; z`^4*$bt?_^q{!R^*j!RB$JeORmsru#ZwMC5kXJ`9Zt7A6xXRT}>1(*p zG=Nfc+Idw|K&NX0+Z&^;VaYTHJq}IXWL&-*FO}{GoP#h-8f=eZzs4T@rhwqoGg%iX zYOo2FaBK=xiCLcvoF}e-`IHdw$S$EBZnq4JkyX*s zfxXD=@e--|N0cA(P~&>FhnM!OYIg}0Pz&`~DOv6C+u@n+?BFEq4P$X%jQOnV=r@TD zQ zIrngn61O-Jgb?uM)_So3SP&4b$wT$B>LfO{S8D&Oq&hIO-{~&j`UzwmP3J~b8BB{3 zn9}-V+hs0&bJJztraQ1oGFTB(9s=VqqSwwquoOcpW|hbL^*Aq(R^G#d0tJ*xE>I`0 z{j7>QH^3avt;S7Pu-{v|`fv0~+LA{J>t}p=e1SFF{I1lpR;+e@!d1~o^ zVrQeLW2s+sf~Zm?w^qG0)=2cgjp)aOncR0;TS+%B>A}*q(;REDTr{3+y;v^q4sT18 zpeUp={%_Rgd})3Enxao-zTe4HzY`h=Le*^49F-?cNxglmM)L>EWMELe$IYv;SH*uY zLu}G0lc(I*Nhj;RzIMLG%lHFY%EX#kvDW+zWva3{^2C!yut&I~ zkV6gs_{*sVNlr_)D=r_I=JBb#05d?$zwQxlirU#*Slx7djv2!2RKIZ`3bkLlBl?mf zr|&7c7EwkzEdCuH?tU|1g^w1m`i<2;P#dj{{4{w6h*a0K-SDuu(u_H}vYf@W+|LnN zf$;22@A+Yfh;pEmzTjOM9hnFXS7Ee~zgdoA47$nwhs?75Jf@SP2+r%X#<>S??x`Vf z+LrwMF?67N%-T#E{zaK(vaNJEgVF_shFprMP1rch-FyuvYIp9_F+eDZ+qg|hn~K-T zUeJ8TvXt*}l~1kF_aG8z^vOW#8{}a923r{FUK8}v)%bgdk1}Dz+2(v9qP@ySoJ*{S zvLD$YldYD@IDKX_nZ|3oaM{9ZKsx0rn8$wFTU-%6y(Gy#3wKFx1~_pfETGu=1U_o) z1qLXQxq_~cx}g)Ri9L5*yB2_P*^Qh(0d)9S^8@8gyFfCXDD272oPO?dHVY^vvp)`w zT2SBpD#-wrWvChL ze`KfHj(azB_xEUTu=tbm`(VSUaG6PGW}DFLRi?TtNeFt&s-plJzbwJCkbh`W=@!2^ zvB9XcQRq#K!=i}5)*C`{inI)#*eKX%qwo|x0{e9q9-CUh{W z+ph}J6{AR{|Gl>OMS3!Pb~)w&n~(uLkn=E9Aa$~4Hg@qPVZ*CDe0(Ol$A9v@m}?IpA$EUZcOS(FV(7r?$yoXXPyg^_8)F*al{Jiw!KSrmjHhh-;7sHsR zK4fMMw;YV`qj<6vl$}PK@F1K;fEGuCVvi4?D^xPg|Ev3c#EO9p9gsVz42WNmH`3Q5 zd3P;o6Js2u#51!IIz;I+9Zk;~Ux)EsjS*>Bm6oyR?cH3e9Ue};s1 z`iF;p$<=)PGIE^2Gd2L~pJPlNS+9Nw6#14Yp_Bt-f^xQX9-ryEqa{N;d*yV^th7#& z$f@B_khmzg1!S`Yyi`A@2dMl&G$OKMy(eC(*MHN(3ra_bq7@q}0Jk1F`m0`QW&9$|om5F7t-qkik>!jt*KwPq?|66eH?gtb^#JRKIViyiy~{`N*(_LE@(6l}|LpN21D;lgT&C$8AV69S#2nL}hNLUWlEz_%vGjp;u}YS~5Fb z?CuqaSh3rKd1=Z}7e>wR83V|>sm{6zrZ8Pgo*0P^DmY#4UB)e1^OL)#iPBS_d}&gp(;F z8s`iW#EHkaY?EJz&ySBI+7iEaLz%}b-lYIFTI4)u@s0d(fjtu4AoWrpyZ3crT_O5+s zVwfCnf3Fs|uojd2`DN|QFoF*?@Qq35QDaG&Vepp<-MUzo+WcLQGYQ_YpbcZEH6GU( zM#Q@OOh!JE-vVOlZFJN{dwH^4OWCE|Qm-GC%jt{26ooIf&eYc;cH29XXr25LJVgH^cNC>J-UxP|ANaxZDV-(9cxL6VZ4Pmo>>F&FZD8oKS`O8o}{l zpfGhy?F%18q#Z8yOJBVC^=+bjMz3Q^d2Rc)i)UBy{A@2uz=&fSKhP^0WWFh#TItjYuW$3@(O1^}90=x3`{CmAhi$ zFglWg{H0U6$Gk3V1F#2AuizHA^&{DS`Up}ng)eRt^|!Zwq<|pPYB#cy?Y8cRUf#E( zSnbwuQP8tQRx9V(#}rL^S)vg9|aZI(`MnjXr+N{7}R&7d2t5Er6cz^qMXVX#;EHr zCfYn^_Af?uEhpI2xLgVxFoJ!=k(~TG{d~DwI(419aBW^K{4L_Uq{9G8Sf64`0$-^) z)619r;13L|89_+!wx?e24cW-N({GN&0t^W82!G6_sPWeGVDoMSN=~{asYRF4= zIH^ZDpmGNZGj*X3%dNrxC{&Aq56{&!ods|;K7FDIhmFnV>d*C1 z>jJs|4h?f3c*oj^XkAK}C?3GnExEwiaM@;8<+)Y>u;Nye{&y~)%&(SIb>I!Keds$a zTYq2Jx1l$m}3M=cq z&Hd2zMudOw-B?|YpIMA9wXS1B3@Lpb(8ppJzqf}_D%owbW?k!pDmJ7eeo^w)>D;eX zbN?F+&wh*bMHZKR6hVZMvLw&6Mn?>Z*@|y@iZe%oA^bt(;u!hS13&jAVEVdqY&?7f zVEg1rb%GwldwJ*Ij5b%5kE*4Ix#Ol*)GQjgXAa|5NF@knhsbe&yHD)+VDI00UZ;}# zA7aaSV#;4@!u_FM2S?f#LCc{{8IJ^h7|Z9bXWj#{RrP^YG{o(lD1WNN96f1DG?>sAv`cnD*=tf75mB+$4MDUJ__>+KEsd+@!0be8mBF9g?9^u zYjvNaW4GF_IkBfrb+BO>O^u-NW`GDvIFeT_AM4-b2{ne-KA6QM%l#SmbyH zJ!>#hnM$FH(gq|ILZqo)6Ha>N{af*q!20Xq-Y^B4@2%aA=yO&FMW~vP8B;z3;sJjy zuO`f;@)}PZ=Pb65n;50saqQ@yj#WXh{ z`|;nWA5bOiD(~vK5KA#9bZ(2Mb=f7aOOBp`K9*XmA941umg-x1e1vm;bm4Kr5lAX( z45T5HQ4DVV-L+9*;wN%fTm{sOz-d%!U~8UAA+$ma65E<2ts37LHnti2kV}BV|44B+p&SgE%B5lcqi%P^BM6LIZQ*}MNQrjILHJ&3yX*#6uTz! zIY8!Nd$q%CeydKYVy~G~edJ{nmYv`%V z#pup|{O*JMI$)U!l0#^TEqd5Um-M*zgBRB(4cauu^CIQ02_b-Z4SLeKLe;pH>VI*G zD)zJNG~pFljbKn4NPDUr{n69P-Rr;5b)>Y@k5zMniB>95jPdX{>jeb*VsplsW-Si@ zb6U<7$Ct2jGDpN4h&k|ZUilr0pC8fEg{2qr+yMftdAdcwR}SczyBZ`ythG1_rQ|Cm zv)#$vb77`sJMNqrazMUi$7?y7~=ZfQ7ikrn6lXqI8DTnY10r|wyn0pvSsYC zfzPH1==3IT&I*j^jcPQL5yVGqgv?uPh0#1h#B}wgB%z^ zww*+IO4q^4K-71CZW!?`?9{e@%UGPBVEdLaLOd%Ic-XKlEN%XAY?M`=AQ%SxddHZ zl}@rnS$mJ`ND^U;@u(ih0m!Vf@n@I@0<`DYBfoO#;tsoQ&s<8d?I_CY>jvvXc6+}z(g zPg6L8{Mi4U^C;O$*9m+I@tS;mx z^=?Q7cwhdTz}a~dEF-iM1WEcRWM71dOb$Y!A&y+UrlC^b5U(ZLl_$r@cW}jh_-&
        Zm0Ew@|Ha=S#T|wYr*i-rDKhkM8$xRqe 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

  • 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

    =)Uy6=sWXj^5~A0oc;9 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%0AOvllE3J11(E3DVyHx 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 z z23RGap&g{@WNNTg=4eKOMx)h}fbUc^yXi~$cNbF4NU9(SKL>8DmW@?!N|c~Gj@Z0JcH%_iCZ$Rekmp0A+u9b9tiUgMQ94v>0$O!!nRz+ zq~mDK|MNv63+?&C`|wE%^xSkuoyXBEW_R)wz7n=#)KVyXnUim7ywde>-@3+Bg-p^J zNZuVSXKZvIv{H2{z+>Z=vI6fhWH~wkLYDWUpSlG4=M`4{)0@jS`pUAH-{~M!2E-WI z8FdC5H)a(}c@`t;1y>DFHmXF>*r&<_cV%Y0x4A<4-W2De!C>W=a8}n1nWDd z{qz*TJU?KelS)0fKO_~iUYL?*%m!r@^gLeaPv%`|8)o}+?~%T`xp@ zEJ7(VG{4BNfq##d-@uh1}BsEw9rUPQD`ZPs|fK34!^-ic0Yhace#i@;D& zZkLDMw`MI=NJ|dW54;grLf+xrO$IO-TvEGomZsfGlc{8f7JaDX{+40Rg}R`oWVB7? zps1FsZ+%W>O2k@<_IlvHX(|XnAN{DAH?t=9(HN#`y*TB)MK{0Vq=nJr(>; z;mJyMWAqqRCu+A7NQhBVH==`JX)J7%)%ij`*oL=XeGWdy6H3rwZ-^u`7Ks8;mmToj zUd$PM2o9QWh`RwHBX0>*Th2I9cZg|J`yT(C9nQj5p;HIQe)RMfZL}bA(zuu1*m#O` zEX!XS;?cN;`Z|E%QER|ST;vnN4F1$|Nje0^AcT$-Pb39l_pBAWi4^rULX|?h!>KDM za|M6FJyy!j{h%WPZO)+O=5V1;J0NvQ`FeUTJl%Ulk(M*AENM6nSj^nmWY&V&xL0rq zB*F?YH8dcA%XLbKUC<@_%gG?hcSw1GLngpQQC_Zr4AXr-2zdjt2|t82qCCFnFs~k+ zn%v#CP-59g;4q?}-WRfr(bP86(W2AWHi`5>rR}QJ)As6T;m#_Od97PuJ#&1f)I>kX z8QZqmQUPQm+LQtvO85*%(9d72itQU?9L34-70TJ(PwW6X|Jg}m0lu@W$iql3}SkY zcL`@z-{V%_Ca_zuEmfa_qXd$$GtKkmc=GQ5=y{Y4Nf_3=@yy!V+V%Y&W zL8v03lu1Idf^(G3<$vuCfKis;LbzpL{f}m48nf<+T}7B${nU*znw!al%@o;RD3Hm) zNNVY#Qu)7D3Kmy-dm0R<4DB<>6H47jzYatRl9qvG8{d>Gqr0@dKMh=fP6v0R}3I#B#Ysp6*4^8a%Bex#rj9Nfv%%3qiB+x>p{xAA`5 zOca&wmbiT<5T+9@+@7>-?@v%4U-{pF#NYKOob63%Lwo{}+evnVm%6+Bqc)1g+t1_< zl_`{v(sS14=ayA^K-3%o0QX!IHJpXzb3`sC2B?x)hj^@OL{Mjyq|<||8+R6gP`K{) z`Cbc+#eyMDR&8=W&gOK0ecX+u(rxhRx4S2uedC1H&QP9KqhJEC%U#(8mhc8YkYVH3 zZJc*$jbHEkuT2>*;EdmibP9L{jPIS9Az-SISnBDODA%C{Q! z&C?O^h^oQ5$#{O%Fb=(Ts3K%uVwa1R<6a*^K*ZV%LES=^$Y%u=xiO(_voky%jM20E zNwkgduCnV#5x6Kcxp=-K9IdN(0eiE6S|sFF+Ct9#gG)q(TgxbvCAEl=Zu(n-Sp3O_ z^?a`{+)hhxtT*I2PvFF$Mfaw8Vupp_Q#FR=0uRTN^tsHVF>vs$p`ug64TH9A9Lqmy z^ZcZHR>u2>)j8lPXT2HZBs}-7u;c#O;hdOraQ|ahI>Ef|x_T01*>pCRw#E%Q2}ud<1yhPA zOHkYK0)wD<+=2brMnh)px7M1IWU7r&9dCX?_ncun!7%fI&cvzb^WRM@#e$B{ zRSG^I8!&9qR&^^SPsU0u4LY7NACKP_Yq$z;FiS`~#jQ`YnBPO~)FW zlzsak{$L*&BG%l4(|qNe%0=j0*`qH~AJJf#Lq%>mq?Wr_r3L%@BC^_gURoO>5rBq| zn_Sh=rROwT(oAH>+e4UAH9xY79(Bz6Zn!|VTCURd9~HCNKPS8`dL`U7_KHMC5ElaT z8ht&<->m2|oSn&cf%Ut3xjxArW_kEvW`b*m0vwXtFKYMF;5}~wFC?z9`=@{rY`#<^ z22qt(9R<8GEmX0-gEx&e(wt3Bcx!&>$Es7B*G89U+PSU=8J6m~N9z~xvMzuCGhxFE zCjx6aOMeD|x5n!-Pj6zu7W3}o46O17_IYURs`|Kc_Y?kS(v>q=D){4{Y7mYfCoXUl zHW5_TO|i|H?nBqTh5roAQ8<`t>8t3JX8;lEeu|ER*u8S$BkC;A!7!*0n|s`ps?o8` zP0gf+`4b+?MwmsSG7>OO41;)D^=WG?%}Y?b_PP7H9P8Ys&c3B4%51ePYI{~X)wl|m z4hwK0@q8LF6J|&hmnXBlBbW|brkjQKkreFB%Q^tuYcgNm0YAzf`9##RS{i3P{Y>#H zdL|)I{Cr`Nzb4$_`B#qGvkuASlDcT>X~|X5Iw-(s&}1W9pae+;Bc^3OPw*I$gBjC^ zCk-rC;gJB~14Luv$EVuW&NNI)Xq#+mGWGB>qX7j*r)<7yO`mX6-ye1&x5v=^+;!Pk zPsWwJBHM%dT=~lmU*RuBXIfqYghgfQ&T_ZIc}SSU1+0rFLwYp5-N3r>o?uB4x85=V z%22=EoAwRQU-v;s2_myRjevm6j6Q#eQ`eDI zuPG^SD=-{2HK3T5Ds@svxV>LTJ;YNk34&QhjA9n*rvrgi`caT}vJJ(?f>IMTa)+}) z=n5YL0;aFe#5{RuzkLNDkUXu3c-}UDwX%39&(o4;ba=tNrLLRQx|CI8s{-RVQJC+`hg1%_rKfoHKw5F zCZ)XE#|as~+$Rftyw%Eq?6{wyeysE#X3Vgpb>}0aFyaX>$=DfK<}ulxlg1$ag|EGV zPvqD3$J<%9fU}&s%!kxmEakFBWlXI-fYTR?;g?NGY{)AtvcKGE zltP9iaP||C7L~`W4JB!ZEHbs znoKr6=%emJa^Y%GX=FRZqiDc3OWzknX@4yaWu8?@d+l`3Qo*jwJ84U7kF?j@ z*64sXKv6Ax_6lMj^|%sr6J!Hq*(!Qx3&gKW*Bv=ZY;4?;#zl}Gme}ERQ4;a?0D#O1 zh$TFW5*Ne`1OM=x1HN94J#K_L3rwR z?q4Z7Ox$|)6T17dk%a5)Zk~ZZ zLS12ooC+SO%!BS!XD8sXgazG{(i*LANvxF4{S`Sff5fzcVJfA4L@W(<9tsx#kdK5< z)s#&vR>6@Yu*9PD($+rL*|mpWpSZNi95~-kuqMAh;bD9{hjLwDApk<97~|11&Jm~}F>=_={h-TuayM*j z+g)xr+G0V9$*7Qe3__&@m$-3|TjvkTI#d1fZVc%JQ~t~31^cY)*XGpZIt9u!z%pcA zqM&fu?MQw{qbAxrCwtO~-Ji}f^8sKsEiCH1-3EB48iYl^!;IKuL&JXhg8br&)CX*F zi+{FM8N`r~mhzHyax+loZw=oF-nZ74M1*@DUg)8OMq};lblXLm^oSX~0*OSd5S*w$ zfexzO5voYID2W-{+5kea_pC2a>__Ox@?JtJf(3?`B#QMH`^o-5*`bMm>|pLaW)$aNSLV8IS#;McjfMir8czC@ z@Vi|0$1UiN42$A-Q>c@B(ORUtyP~H!CJG0BXkfkG6BfO(y8OU{i?Bdm;noGyDG>KU zL6rp4*La&xs|*Y@CW-E@JC((Pb7y>1y(%4;oEjt^q&R2ia0Do3)aMxjyFrD$1jO`i zRs{o=?-w$o(45J296H>(s@v(Fv?rO&=+qtOqs7PI7H%KvCzAJJ-H**!^>W;9U+|bL zr+pwuYgJ@GcoifFf*sq^|J^Tn-ug($}j4Ia?2h;#Tk|jcGE-X z`-MQXv>v&h&tJ+NGNzb(mO)=Kjnszbok;=k{&~oGSwA8LetRww?YE2|=lCm>v7|PE zf@ZVn_Cj94BP*5vIVWH#IHxjCX}l7AG;wMu(YN5gES7#L4Q4HhrcehOpU$h1i0vAB zbAs{K|4>+24f%=PANpP?3g065HSkgi9t3Mr9y6IiNJ{#cKspfH7GU08w zDvz4|co*=s>U-~gPuYDsjiVaN%B&0zLX!!La#@xst;vUh_IHabHYI2c+TE;V2;nlbNRg+c* zg1rDmK)S!wfCx+<`@cfs2TKPR6Smnq{RCg*@QKsuE!Bv*3JRv}`iV;fP;+7de_b>zUL;l-~*<3FwlkDKT!F}Be=eintd+T`v+ALj;AisTC zs^7Pg^q%C5E@a$HlsyFF%FJSC^;|*BiqS^ZBoiaPiy=>wO`vN#<3Ac`Hfa}EXbI7J zmYKoQaZfrejRgI99_XuO;O{nXk2IEpPJ;2t@*<$h$Qwi3547><#oMTLi%WEIj1Lmk zqVlV7daSJ52OYV`L2#gb#6kR^Xd~Gd*QxnUi7suzn@i~&v+|kkgyEoO%OrkF`*UFS z;OVekIXvuI=evaG%=Hd({C@F8&{4>b;_N=+8C{CES#^09vtgJ+U5W@W&?6m8`NsJQ zV@e#pfpU`k@=5GLA`5Ig0@XUSz#wK9H1SOd!sF4dB-QPCsAik=)iP;8ra&ueP#CAd z8y!`~`ICS_W{m2Cwd{go4f|r+pNo*m<+D4-a3>?<{8ckwvhX9`g{NH`#(AA`TV=?7 zQUt>BR^yRlNB_UC@pn14>XIJPhXZ<%y0Ea$^ksBxYH+)QvL1ytHIzY`C;QEyFcil~ z?FXJ4c(x_2U3)OvEw;bdJ^}WJ7rSBDsFSm$; zFPkQDN|a&GeBc$7YIlfhRZGT6 z=5p6Ep!;BGrNkgX4A92CrKo0!d z=(sCmqEMAPsMyoV09QK+ZV&8Bw2(fgBiBg(<~}5}1q0w_-J+{v_}M1nDCa!z>x}9S zoGVgGv@kno-)3d{7L*Xty4O^6N!=#NFm>-{tPL4a2C%OMsfl*w z8`pGnwoECci_?0)G&HNUehu34jMTT%sq{XFEc7}sAV*>u$6uBDdKl8Ej@jm`4M+qU zmkp&=QnE>u33&i?R~LsWybV=rm72!86P|82H{i@_9!u$8luxi#K+b#Gmq4%uaZ22Q zhM$)fn0&Mq$GV?9bpjEJ>A*9L{_@?h__A@W_wLiAEPDt3)meh4PNtP#=_IFpqR9A1Rik?a+i@3*5H=zg z*f<|Za8;o`9*2}4cp%@VZixBp-z4hOR81aEQ&VEZiHBYR)(jbh1J)YPZ6E#ymgwzp zW2IK8K|ye4GBZu$3?x*nNB}PjM~nC7PXGv=-J8m2IH1UQ;bw>B7_GX=0xb}3tB8`x zWthZ#8}|Og)>R`TG)daX0kJVIhGdxqs4YC)NV-e(b~Jb^;PQ%cw_Kun5JR!PF6mEe zT4|}TXvr-r-I5)W>f~=FLUYa)&@lV4`(3?R6q7d`>TE4}C(6k!cbM6+?-G)+BWUc< z&No;s{lfTab8%j1gxS5hb@&yaNJCTbeX=4niyL&vZu7@(+QreYyC2*?@F}zwf%M#= z3X?L0m`WzGjkcIsNd%epC0g8=imBfY$_i&>vD$;TZl$DBr~B@A{JP{?qisn&d223q zWc7p+c5dOD26h;y{rzO7JM`p+B(79tY0&I93hDt`3T%?EDSWC!-Jt}%Ia>fHy0&|BB`tX^q4c+l`zuPHjYP9VV2zWE?y`))c)5s4m^3n1q zpr!9C1l2uCw%F}>?PWQX0ZRzORON-wMXq^bNbJGB&IP;GIMvmG^buvO5%U&F@(ly! z?>gMxL2#4pTQe}}<0Y=!BoeFu^w2lW0iXfS&eKn4^G0(qpt~_9S#(z{O>j;1=_uSl z;jn^lnWi!JB^N~&z`8PeZRvTNN87v3DZ^6;R*aWAqsUPd8J#M^K`I7GCV-#mO+PGn z1J)u?fv1Wf^OBcKA&~ykUWoqqU1BhG7irof-5vLV5uv`KovyXakUz$lWViFTt>G*!|CcU0#FXoNKJT9v{^MOvXp1(v3}bzdEB zv{c4%um~l!F0G=mG`-zepo%ei>5-fm@lCZ+FBvn}H=?bqaH+xeCt48q zuiA@mjomTL-(DNw>cCV&ETDCh+asAiOGIHk!h(YY#VE{4?ALiXZXOY|^9hIm6FPF4 zFc_AQ{eom#Uh$RpCn@A$G}t`jG6!|wr<^VKVXF+d*wb0%?7)hY{W0wau0Fo3b9XwibltAUbnLmG*#w3`u57W%vuHlIF!^qM}-r(YUDr_Kwh+9G4t0;nl%m&j6yN`|DSMppjU ztgm^oSu+YceF(?w0&LQ{iW%oOg%L=+AejfC>`m3Wi@M%nI~%OT0ib<@pHEFs5e1W+ zm{t}mpd_a+4vV0F5;w7tFLiXc>FrU=!Y_yxpB8wx`np+Myya!xMma)Hj*egfg_NBo z;A~@q_|+Pw><&3o$AG6RYvudET6bkxI-9Et z69W3#gnDF;w11& z(PeyBbxMXR~SU6EHpSHEyX;5?}FjZ+S{R z=2LaY`!>7g-Ex+Cg7E$r&n7ZKzaZ;K;g9q~UuO&F`l@A}IzU1CpqhzBISG1^`@Q_< ztH9ixbfn#|J`a#8e1r#!k`Fx@-lUdfWud0>iNMAAdT9uu$ny{u?JSJ9cmDA}_q22d zsa>;kOXTiIkH*R2=ZwjqF)B@Mj7NXiMZ@fMwxZKNQ_2!AC>9}Qe&BQN*Nz>%!QAD1 z%>@+1oHH>X3hQO<&Aq+0t0fZ>-@Ell|sAL+-*b&H&N?xL4x>`ps%UCt-e9zuHpM^7{7!; z#tAZqxfmw!Yz<*Is#T&4?dCrs8vDf;PkMkb8=D|Cc;^`h(1=YXHXUhbX#Q+1IM}4e zRT_2@Jw0dBJLOKW@v-(`icK}Y(kVcY_LRX(8#NDg z3AQX7PlHYo^K*O@?G~l=1X4H$wr0OzemG<`Ga)4bnM(R8VD^X-Hq`wr9jP!_0Mi3Y zm+y0aW?FnCJS$^EHv?opaQ_dX%=k&FlMDpzjKdx8pkEs7&z8U4~#$XJS z96J7^Ff}@7Ri3^T*ts%Pc}jMIYMb(~|BoHxg4Q=gf>*NX{%}MU0C49pJW&UJ>Qlw4 z*fRZ%Amk}AwU@ut6GC{?#wt5WZkFbu!|I!<6~N~DQyuZWYsz6=5wJCLT_NqzF3=Y~X)H}9kwiXbp1!-Czh3;h>5@jX-``gFsH*|1IfEEnKh+C#jF?5fI^0RZ* zfQroceiHhw{#Big(~{2X8!Ng{cPa=nrEeS22$k0#AnXFd$qjr(x{6IMpN=bmF!~-V>B9K&A#u}rk0l>}q^3uC=-BJm+Y2JI7 zh(n(sC3@N>CQlHzzWQo>hv%U4)`?9xqF^qTyRS5b_L>{df>?gfmGHS1x(W@Nyiuyd z5kMIDCCnt}4suOfnfJ#%1k5pm@ug-Nczit9_>z+k?$d6ACSLGa6wg9yG}NlXmmyre zA`xXls=DbYi`?;Y7e#j*V>R+H#4q~u@O|YdkjaKV{S6G3D1)SHF8ijOJ`*RbX|rD? zC^Vd%j;&g$azW~p&RBfkGxK-lZB}btQ|fkJqXT{?G!SK5IPDO(&yX;qI1@?&(|KdJ zeog5iJ}+iHX67%D_dLU*L?nHV^HIAqSj3UTb(|8@#@SiY>zo3*Za|Gij)W&+WtfG! zj#ViSw1vZA2KQZ0SFxacRGDsKyKfBiXGhEg=fyeK*RXjQ?>kZ3m*Y3i+>`r{)YyH` zmEF&?ppg0=Xh&JeLC3t)VlToU#`!FMBhr2FqUWH2J53T97ECBi2cu;8Q)M>v8X=J% zkkVyQTFAu@us7w8LR#AOH;j~u8#H;EpetT4WB^w9!~SpDVg2fBM(?t!{<3!}>}^jg zb>n8MBDf64QvxoBY#-sU_{D0Balq!^JyLX&c8fHo14HaM6Gf|9x^t@78Q>yx?TakZS0O zGq3;o1v)9Zr136*i}%}6M?LojrX&nImoL9#Il)r*wc&L`Nw*I$%R-2X4QJ@WXn~uG z(-)j13uruof^{X8?U;S_HXY=kc6vGtT)zHA5={&g+FERzU}1y6ldeXZ3PXw2>59)B z@GGyDUoyZeTX7FhYB&7oIhs{Sk6kLB!2#d*TN$Q?JJF-#wvuu#C;Ds1^9ep5{5?QC z5IWsrjh$GUDrTjIa~@}}(|Zz^C^L%oxPiK8PZsg;VKa<;LG#St z?%u>&>)|kKxzEGKPo^o`_-Pb9;Hl5jZ^r$(7VD=m9Sk)(*Apv@-Swn z5-ENMO7V$1RW(2#7i&+}{ER{B0UZP<*>skWn)bCxFn$k3hsL?@ONY^MnWmA_i_fM6 zW@Y*XU~6I%J>^;VEz#1QM|Xip&lkbyTm`LwX+W*sbkgtUNH#@!F~oJLM(0>bjU`wQ z#ED^bL3RULmd*AwJ>zun#52xXT2R4>q^WJ?nKxiZ+Jg5Y*aq7w`U+?y(o`Wph`&@F zMsTm%_=!bEX5>8|k-WaqKT~hL0*Qz%&sX7{(WMC!!CEx@n0uV|e)q6HM&De;`CqHH z*{j>!_q+Uxg7@*SxG%>b2vKO3YfjA4E{ynVgAmf_8Z;CTKAF=RvGAc*j{>X0l7~Y( zDzRi5&r*S+EG6=X4&_Vdwqhe3;5Jfyi^F94NaDG}k>bc)d2%gWGBq5>qMtS7^!_S= zLDLsSoOp#Gab8d??y+I+Vt9KMrQ2vRBJcfXe1(qSHzI%4#s@h4^Ht)k!~qYP;47fj zb-W5#1xF37Y`w>3F@&DVyN+jN;;6Z37kP$=QQ2CF^7SGSCVB1*jIGm_31RQwlGoSZ zzx`Ps-&Hf{sJP0^6l@J}(u+aT$aYcXN1Q~ZoVC)5Vz^hu>?!YLm4ARSxUd=4CA1bI zUT4hg6!z6K0oEpnlQT3%<@r#ea+;|k#;Up$q7Zkz(bG5z0?!i``gmhVQ*C-)0_tqS z_$0-?70cbz(ZpE1GK=0WtRn!151)~+wSBH>>sFya-(r#GQM%X>qc=3&T(U3XKG?@) z%aJHy*3oICB3QImTj z&mA||?mivZG;X>m3id2)$G74UdDgwAhc;ifK(WsiSC5 z{>#$RaTZGnpQaV7_Ce5$dbgun2CGmw`A(llR{(<=i^XfYMDBgGD4hOnq1l3;hDa+? z&%AWNx;Kfm`o8?&sm@2=*X1bTEhp0O7?S)^ZQN=y;7u-W)saao`wWuVXc%LSra)w7 zWZBsw65&tpw5>00W3^>V#gZSwjQdUd0+aw2*^SF9?T@o}b}iPi1!(w=WW_AErLpMB zud*rqM}aPTdp{Y%>&T~vb-gVk&DK#l(O>7|+jqV(p6)J#r5&A$5PAVG)n`z~sB&NoVaRzFx=a>43kFaRjTW zB{UYK|5%U$mVtsF!rqS_1%h{XY%0K8z)=A@WousBpVeLlAjW(QB0JGzpEshIK5Ei1 zg#|V53DrXP9?<-3MpgZ5)Sxi-sswe%jw!=#ZyFnec%;vYHXh=lhbaOr5%E8lRPZub)Zr7hg* z_PnO9d*Pzt&LMTs>~!Dee_zgh?!9o1t68QK! zqn|)i_h{{l{1i=T)|);*s0iLk!IMf7X0`4zOy46cJC6ELkmXE60jaFJy~Gq1NDeh#qZ z?)>eHjvp?56QGs@sxBP!cyB1O@;J z68MDR>uK7l2VWO#;5^+maxEz#{|3rZA|cneZ}FL;rQ0cT$`jk*lPTsN4%H7-Byz?= zU>~>FMtFRxa)GTVX)xjz36{%Bw27+HR#S)7;CWlPtH5x|yfo&hO*Tv&QN=s-Uual_ zI!24ukC4=#>>nh%A@CqUzcAN$l|^02SD2V@r5(0bx8hYEukd@YHId&Hio>|p20`_E zO*9M-ESqW6oT97q9dX(4LD%%%kvjW@-?>olk)r?mgcDi0Z{}Y9NzWb4EDZY0Qds%9 z`iGE9qV04R96eEstvA8Utip`5L$S+SzK{$jMb!hr-2q8jM!z8;$_6Tkt8AasJgw!n zp~9Wuh(V78`F+oArdQp&oyp0SbgUKv9d!(J(7i?1Em3G_mTE7lqgD@CI;y83qTy*W zdDbDo`!HXs4{fmv1q5t@&9Jy7(`%{SW&s_yVH}#`SdoEPqrE%-)H61&Iju6a@Kg^? z=`cQXME4Ulg9SzN*U}?XMZngeKo#ijw2{1ANf>_3UZi7>2~=k!1;d&rPA0R6G*ovS zQ`-q@_N+a|Y#7RmwLzk7J&=};pNV>L!RDECUmR;ciw5>vZ6-E|A29jeJyZk4aw~M- zH%IMJ7wBCohpyD#<=io{MwG45E-vXBymDt7? z?UIk5GE~^T+9TZ3Hax)c-rOmIh)yu-e`RsC ztt80(0Z*HnmOZB#tefej&^sTf>i}|T(K<+M$B+!)q%C|?EXOkHO9R=A5Y|8BlfKR1 za*3sPe9Gd`&Uyz{`*Y{{xmO5OZ+1-M8ZATTsXq?u*!AR2P&?MS_$P-DUWyT9?o;jV z&OQ}aZ%mDXbmXG%p0AZwU*f>@Cn(UFJMhCmeUUh{xxSwi-2}0u(T~lEeMJ9bW=7H5 z*ma;U(G~@kb~oJ)wP_;s6`~ac9XlS#2QK zSU|t=3?$r_Z^yFK$0T>Hu{tM}S@Qdh2&{id9w4w!d4Gh@xANZHcW z3Gv}WPoxeSGKzDI{+K|Yxx}3Z^yMmC1yzGQFiZe!^9WZ>@iq9fT15IeEV2kU&vEdC zhha*qb=FMqMn79FaU4ED=?vZo6fD^pmxv4!)}pMu*hy`aXrj6?*}Z&@%->3CM^cZF zxU$s^Rd~LkA9Niv$_-~58o&omm|mp&i{FS zubCE~KP;%MIx?Nv0G)JXck+*R)@V`{j=7-WLwjAzEIah>L+>j|!vd6x<;rdFG+;5V_gU0hTW&6>0i#0ly{uytno`+yq=tQ96zI4VnS{#69(tRB*AK*!j- zvs<DN0T;*o;1Y)9)I}eCk)>doszZ3ze(aI zo-hfNm;{FBVy*^;-%8uw+6%bqAFYXZi$Mn=;P_>VL<%i80b#Siab|>o?VwG70%HiR zq?9(r8c?K`k51#0B8*}33=1;O<9Dq&?+k)+R;6y5Zbjll;n?i1&%XBP;6)3uywce9ez~#ll60wKz@& z$T%wUANJS5+9O-@-ptp^>yA9Zxuaa!3HZ-C%&*f45(LhW*+l2QCI;btQdCNXu zrzdb8)l7 z9&Qw!5ZWeX&sd+jDGbAsFN@>Ur*F!vZGXupxTSZHI7VKcJyyL^mmpgs4p%pochFDP zb2=&`qFXd!#SivD%u2KhKp}^8!rl&LDH0S2*Yme=5l@HqSKW+Hh?S8r-5v+^k7~G; zm2*cDR0w##3ZnBu_$Vxs#Pl2-0jIuOO**`N`?(%CX5li6`Sg=UzJ^=)g2$)~EecLU z``Oc=(3Z6 za2iTh}a76{_ssfZKwlN|{Hlz?sJ zBF{wIJ)QxR)NynxQ?gF41IgA0`5LvXuUv~z;_k4#XZ~z&m8LvAhSGd{m5c;^JsE)NQCns};y^&&`sl%I64PSkr8{ zzb1+~aSpRXR^hS*G@zR;`r)t%Q>;1J98Q3>BwJ``P`hhLGx(cuV`4r#2RYoU3tsE% z)>wB?-*I2NVr`>$IRn~j(Xn|O&TG6hQ`~;!$^}K`UVd^={*Yymd%wZFhiI6MFVk`M zrGOFjyeiYi{WVxO@`U*asB|FhYixgtj}>cXn(c#ENv|yi)f4;gj(9ujf??uaePCkq z!JCMEi~Njdfd>2`N4fcH8{ks@03{Tow$>tRfl|&3RKqGqmyNdb?D!Ei9y%jd+?2Z# zEuk9_Jq`cvry#j*M(h;v!qBjd84h%7q^vyg#M9Q1_rt2^8QzveAFOfx6a0&D zWYke|(^{t^g*5;N3#Zw`VcIK% zD5S%~vFhL&0-T}&s0m_wCn1MIym+jxl$YUD8<1;9ZqxKW23`b;FN4NwZ1^HP;ZKUxs-?q7 z1C9K%p?W-FGR+uKroSQplXx^{ZZ$2y>Y;^3AoOZ!iMqsmhPjGWlsr?nAtMK$EgJFp zg~_x%Whx;bS;lMWKAfy#M4?xcWLM_o#6?EH>1A9L5iE=!zc? zPzGt?!Ex+?&5q&x3Zc(+>{2?HYR@kMY!J>(WhJeSqMSzs{Q1im1AfOD&&CaQees

  • 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%0A^yoU!?$IfG4NOgC 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

    QlQ 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%0Ac7>;%(v`Wr<47J`Bza!d#|c;5SZ7lb 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

    M-@cz{ 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