43b9a99983
Conflicts: examples/animation/animatedtiles/animatedtiles.pro examples/animation/appchooser/appchooser.pro examples/animation/easing/easing.pro examples/animation/easing/window.h examples/animation/moveblocks/moveblocks.pro examples/animation/states/states.pro examples/animation/stickman/stickman.pro examples/dbus/dbus-chat/dbus-chat.pro examples/dbus/dbus.pro examples/dbus/remotecontrolledcar/car/car.pro examples/dbus/remotecontrolledcar/controller/controller.pro examples/dbus/remotecontrolledcar/remotecontrolledcar.pro examples/desktop/desktop.pro examples/desktop/screenshot/screenshot.pro examples/dialogs/classwizard/classwizard.pro examples/dialogs/configdialog/configdialog.pro examples/dialogs/dialogs.pro examples/dialogs/extension/extension.pro examples/dialogs/findfiles/findfiles.pro examples/dialogs/licensewizard/licensewizard.pro examples/dialogs/sipdialog/sipdialog.pro examples/dialogs/standarddialogs/standarddialogs.pro examples/dialogs/tabdialog/tabdialog.pro examples/dialogs/trivialwizard/trivialwizard.pro examples/draganddrop/draggableicons/draggableicons.pro examples/draganddrop/draggabletext/draggabletext.pro examples/draganddrop/dropsite/dropsite.pro examples/draganddrop/fridgemagnets/fridgemagnets.pro examples/draganddrop/puzzle/puzzle.pro examples/effects/blurpicker/blurpicker.pro examples/effects/fademessage/fademessage.pro examples/effects/lighting/lighting.pro examples/examples.pro examples/gestures/imagegestures/imagegestures.pro examples/graphicsview/anchorlayout/anchorlayout.pro examples/graphicsview/basicgraphicslayouts/basicgraphicslayouts.pro examples/graphicsview/collidingmice/collidingmice.pro examples/graphicsview/diagramscene/diagramscene.pro examples/graphicsview/dragdroprobot/dragdroprobot.pro examples/graphicsview/elasticnodes/elasticnodes.pro examples/graphicsview/flowlayout/flowlayout.pro examples/graphicsview/graphicsview.pro examples/graphicsview/simpleanchorlayout/simpleanchorlayout.pro examples/graphicsview/weatheranchorlayout/weatheranchorlayout.pro examples/ipc/ipc.pro examples/ipc/sharedmemory/sharedmemory.pro examples/itemviews/addressbook/addressbook.pro examples/itemviews/basicsortfiltermodel/basicsortfiltermodel.pro examples/itemviews/chart/chart.pro examples/itemviews/coloreditorfactory/coloreditorfactory.pro examples/itemviews/combowidgetmapper/combowidgetmapper.pro examples/itemviews/customsortfiltermodel/customsortfiltermodel.pro examples/itemviews/dirview/dirview.pro examples/itemviews/editabletreemodel/editabletreemodel.pro examples/itemviews/fetchmore/fetchmore.pro examples/itemviews/frozencolumn/frozencolumn.pro examples/itemviews/itemviews.pro examples/itemviews/pixelator/pixelator.pro examples/itemviews/puzzle/puzzle.pro examples/itemviews/simpletreemodel/simpletreemodel.pro examples/itemviews/simplewidgetmapper/simplewidgetmapper.pro examples/itemviews/spinboxdelegate/spinboxdelegate.pro examples/itemviews/stardelegate/stardelegate.pro examples/ja_JP/linguist/hellotr/hellotr.pro examples/layouts/basiclayouts/basiclayouts.pro examples/layouts/borderlayout/borderlayout.pro examples/layouts/dynamiclayouts/dynamiclayouts.pro examples/layouts/flowlayout/flowlayout.pro examples/layouts/layouts.pro examples/linguist/arrowpad/arrowpad.pro examples/linguist/hellotr/hellotr.pro examples/linguist/linguist.pro examples/linguist/trollprint/trollprint.pro examples/mainwindows/application/application.pro examples/mainwindows/dockwidgets/dockwidgets.pro examples/mainwindows/mainwindows.pro examples/mainwindows/mdi/mdi.pro examples/mainwindows/menus/menus.pro examples/mainwindows/recentfiles/recentfiles.pro examples/mainwindows/sdi/sdi.pro examples/network/network.pro examples/opengl/opengl.pro examples/openvg/openvg.pro examples/painting/basicdrawing/basicdrawing.pro examples/painting/concentriccircles/concentriccircles.pro examples/painting/fontsampler/fontsampler.pro examples/painting/imagecomposition/imagecomposition.pro examples/painting/painterpaths/painterpaths.pro examples/painting/painting.pro examples/painting/transformations/transformations.pro examples/qtconcurrent/imagescaling/imagescaling.pro examples/qtconcurrent/map/map.pro examples/qtconcurrent/progressdialog/progressdialog.pro examples/qtconcurrent/qtconcurrent.pro examples/qtconcurrent/runfunction/runfunction.pro examples/qtconcurrent/wordcount/wordcount.pro examples/qtestlib/qtestlib.pro examples/qtestlib/tutorial1/tutorial1.pro examples/qtestlib/tutorial2/tutorial2.pro examples/qtestlib/tutorial3/tutorial3.pro examples/qtestlib/tutorial4/tutorial4.pro examples/qtestlib/tutorial5/tutorial5.pro examples/qws/dbscreen/dbscreen.pro examples/qws/framebuffer/framebuffer.pro examples/qws/mousecalibration/mousecalibration.pro examples/qws/simpledecoration/simpledecoration.pro examples/qws/svgalib/svgalib.pro examples/richtext/calendar/calendar.pro examples/richtext/orderform/orderform.pro examples/richtext/richtext.pro examples/richtext/syntaxhighlighter/syntaxhighlighter.pro examples/sql/sql.pro examples/statemachine/eventtransitions/eventtransitions.pro examples/statemachine/rogue/rogue.pro examples/statemachine/trafficlight/trafficlight.pro examples/statemachine/twowaybutton/twowaybutton.pro examples/threads/mandelbrot/mandelbrot.pro examples/threads/queuedcustomtype/queuedcustomtype.pro examples/threads/threads.pro examples/tools/codecs/codecs.pro examples/tools/completer/completer.pro examples/tools/contiguouscache/contiguouscache.pro examples/tools/customcompleter/customcompleter.pro examples/tools/customtype/customtype.pro examples/tools/customtypesending/customtypesending.pro examples/tools/echoplugin/echoplugin.pro examples/tools/echoplugin/echowindow/echowindow.pro examples/tools/echoplugin/plugin/plugin.pro examples/tools/i18n/i18n.pro examples/tools/inputpanel/inputpanel.pro examples/tools/plugandpaint/plugandpaint.pro examples/tools/plugandpaintplugins/basictools/basictools.pro examples/tools/plugandpaintplugins/extrafilters/extrafilters.pro examples/tools/plugandpaintplugins/plugandpaintplugins.pro examples/tools/regexp/regexp.pro examples/tools/settingseditor/settingseditor.pro examples/tools/styleplugin/plugin/plugin.pro examples/tools/styleplugin/styleplugin.pro examples/tools/styleplugin/stylewindow/stylewindow.pro examples/tools/tools.pro examples/tools/treemodelcompleter/treemodelcompleter.pro examples/tools/undoframework/undoframework.pro examples/touch/dials/dials.pro examples/touch/fingerpaint/fingerpaint.pro examples/touch/knobs/knobs.pro examples/touch/pinchzoom/pinchzoom.pro examples/tutorials/addressbook-fr/addressbook-fr.pro examples/tutorials/addressbook-fr/part1/part1.pro examples/tutorials/addressbook-fr/part2/part2.pro examples/tutorials/addressbook-fr/part3/part3.pro examples/tutorials/addressbook-fr/part4/part4.pro examples/tutorials/addressbook-fr/part5/part5.pro examples/tutorials/addressbook-fr/part6/part6.pro examples/tutorials/addressbook-fr/part7/part7.pro examples/tutorials/addressbook/addressbook.pro examples/tutorials/addressbook/part1/part1.pro examples/tutorials/addressbook/part2/part2.pro examples/tutorials/addressbook/part3/part3.pro examples/tutorials/addressbook/part4/part4.pro examples/tutorials/addressbook/part5/part5.pro examples/tutorials/addressbook/part6/part6.pro examples/tutorials/addressbook/part7/part7.pro examples/tutorials/modelview/1_readonly/1_readonly.pro examples/tutorials/modelview/2_formatting/2_formatting.pro examples/tutorials/modelview/3_changingmodel/3_changingmodel.pro examples/tutorials/modelview/4_headers/4_headers.pro examples/tutorials/modelview/5_edit/5_edit.pro examples/tutorials/modelview/6_treeview/6_treeview.pro examples/tutorials/modelview/7_selections/7_selections.pro examples/tutorials/modelview/modelview.pro examples/tutorials/widgets/childwidget/childwidget.pro examples/tutorials/widgets/nestedlayouts/nestedlayouts.pro examples/tutorials/widgets/toplevel/toplevel.pro examples/tutorials/widgets/windowlayout/windowlayout.pro examples/uitools/multipleinheritance/multipleinheritance.pro examples/uitools/textfinder/textfinder.pro examples/uitools/uitools.pro examples/widgets/analogclock/analogclock.pro examples/widgets/calculator/calculator.pro examples/widgets/calendarwidget/calendarwidget.pro examples/widgets/charactermap/charactermap.pro examples/widgets/codeeditor/codeeditor.pro examples/widgets/digitalclock/digitalclock.pro examples/widgets/groupbox/groupbox.pro examples/widgets/icons/icons.pro examples/widgets/imageviewer/imageviewer.pro examples/widgets/lineedits/lineedits.pro examples/widgets/movie/movie.pro examples/widgets/scribble/scribble.pro examples/widgets/shapedclock/shapedclock.pro examples/widgets/sliders/sliders.pro examples/widgets/softkeys/softkeys.pro examples/widgets/spinboxes/spinboxes.pro examples/widgets/styles/styles.pro examples/widgets/stylesheet/stylesheet.pro examples/widgets/tablet/tablet.pro examples/widgets/tetrix/tetrix.pro examples/widgets/tooltips/tooltips.pro examples/widgets/validators/validators.pro examples/widgets/widgets.pro examples/widgets/windowflags/windowflags.pro examples/xml/xml.pro mkspecs/qws/freebsd-generic-g++/qplatformdefs.h mkspecs/qws/linux-arm-g++/qplatformdefs.h mkspecs/qws/linux-arm-gnueabi-g++/qplatformdefs.h mkspecs/qws/linux-armv6-g++/qplatformdefs.h mkspecs/qws/linux-avr32-g++/qplatformdefs.h mkspecs/qws/linux-cellon-g++/qplatformdefs.h mkspecs/qws/linux-dm7000-g++/qplatformdefs.h mkspecs/qws/linux-dm800-g++/qplatformdefs.h mkspecs/qws/linux-generic-g++-32/qplatformdefs.h mkspecs/qws/linux-generic-g++/qplatformdefs.h mkspecs/qws/linux-ipaq-g++/qplatformdefs.h mkspecs/qws/linux-lsb-g++/qplatformdefs.h mkspecs/qws/linux-mips-g++/qplatformdefs.h mkspecs/qws/linux-nacl-g++/qplatformdefs.h mkspecs/qws/linux-powerpc-g++/qplatformdefs.h mkspecs/qws/linux-sh-g++/qplatformdefs.h mkspecs/qws/linux-sh4al-g++/qplatformdefs.h mkspecs/qws/linux-sharp-g++/qplatformdefs.h mkspecs/qws/linux-x86-g++/qplatformdefs.h mkspecs/qws/linux-x86_64-g++/qplatformdefs.h mkspecs/qws/linux-zylonite-g++/qplatformdefs.h mkspecs/qws/macx-generic-g++/qplatformdefs.h mkspecs/qws/macx-iphonedevice-g++/qplatformdefs.h mkspecs/qws/macx-iphonesimulator-g++/qplatformdefs.h mkspecs/qws/macx-nacl-g++/qplatformdefs.h mkspecs/qws/solaris-generic-g++/qplatformdefs.h src/gui/dialogs/qprintdialog_qws.cpp src/gui/egl/qegl_qws.cpp src/gui/embedded/qcopchannel_qws.cpp src/gui/embedded/qcopchannel_qws.h src/gui/embedded/qdecoration_qws.cpp src/gui/embedded/qdecoration_qws.h src/gui/embedded/qdecorationdefault_qws.cpp src/gui/embedded/qdecorationdefault_qws.h src/gui/embedded/qdecorationfactory_qws.cpp src/gui/embedded/qdecorationfactory_qws.h src/gui/embedded/qdecorationplugin_qws.cpp src/gui/embedded/qdecorationplugin_qws.h src/gui/embedded/qdecorationstyled_qws.cpp src/gui/embedded/qdecorationstyled_qws.h src/gui/embedded/qdecorationwindows_qws.cpp src/gui/embedded/qdecorationwindows_qws.h src/gui/embedded/qdirectpainter_qws.cpp src/gui/embedded/qdirectpainter_qws.h src/gui/embedded/qkbd_defaultmap_qws_p.h src/gui/embedded/qkbd_qws.cpp src/gui/embedded/qkbd_qws.h src/gui/embedded/qkbd_qws_p.h src/gui/embedded/qkbddriverfactory_qws.cpp src/gui/embedded/qkbddriverfactory_qws.h src/gui/embedded/qkbddriverplugin_qws.cpp src/gui/embedded/qkbddriverplugin_qws.h src/gui/embedded/qkbdintegrity_qws.cpp src/gui/embedded/qkbdintegrity_qws.h src/gui/embedded/qkbdlinuxinput_qws.cpp src/gui/embedded/qkbdlinuxinput_qws.h src/gui/embedded/qkbdqnx_qws.cpp src/gui/embedded/qkbdqnx_qws.h src/gui/embedded/qkbdtty_qws.cpp src/gui/embedded/qkbdtty_qws.h src/gui/embedded/qkbdum_qws.cpp src/gui/embedded/qkbdum_qws.h src/gui/embedded/qkbdvfb_qws.cpp src/gui/embedded/qkbdvfb_qws.h src/gui/embedded/qlock.cpp src/gui/embedded/qlock_p.h src/gui/embedded/qmouse_qws.cpp src/gui/embedded/qmouse_qws.h src/gui/embedded/qmousedriverfactory_qws.cpp src/gui/embedded/qmousedriverfactory_qws.h src/gui/embedded/qmousedriverplugin_qws.cpp src/gui/embedded/qmousedriverplugin_qws.h src/gui/embedded/qmouseintegrity_qws.cpp src/gui/embedded/qmouseintegrity_qws.h src/gui/embedded/qmouselinuxinput_qws.cpp src/gui/embedded/qmouselinuxinput_qws.h src/gui/embedded/qmouselinuxtp_qws.cpp src/gui/embedded/qmouselinuxtp_qws.h src/gui/embedded/qmousepc_qws.cpp src/gui/embedded/qmousepc_qws.h src/gui/embedded/qmouseqnx_qws.cpp src/gui/embedded/qmouseqnx_qws.h src/gui/embedded/qmousetslib_qws.cpp src/gui/embedded/qmousetslib_qws.h src/gui/embedded/qmousevfb_qws.cpp src/gui/embedded/qmousevfb_qws.h src/gui/embedded/qscreen_qws.cpp src/gui/embedded/qscreen_qws.h src/gui/embedded/qscreendriverfactory_qws.cpp src/gui/embedded/qscreendriverfactory_qws.h src/gui/embedded/qscreendriverplugin_qws.cpp src/gui/embedded/qscreendriverplugin_qws.h src/gui/embedded/qscreenintegrityfb_qws.cpp src/gui/embedded/qscreenintegrityfb_qws.h src/gui/embedded/qscreenlinuxfb_qws.cpp src/gui/embedded/qscreenlinuxfb_qws.h src/gui/embedded/qscreenmulti_qws.cpp src/gui/embedded/qscreenmulti_qws_p.h src/gui/embedded/qscreenproxy_qws.cpp src/gui/embedded/qscreenproxy_qws.h src/gui/embedded/qscreenqnx_qws.cpp src/gui/embedded/qscreenqnx_qws.h src/gui/embedded/qscreentransformed_qws.cpp src/gui/embedded/qscreentransformed_qws.h src/gui/embedded/qscreenvfb_qws.cpp src/gui/embedded/qscreenvfb_qws.h src/gui/embedded/qsoundqss_qws.cpp src/gui/embedded/qsoundqss_qws.h src/gui/embedded/qtransportauth_qws.cpp src/gui/embedded/qtransportauth_qws.h src/gui/embedded/qtransportauth_qws_p.h src/gui/embedded/qtransportauthdefs_qws.h src/gui/embedded/qunixsocket.cpp src/gui/embedded/qunixsocket_p.h src/gui/embedded/qunixsocketserver.cpp src/gui/embedded/qunixsocketserver_p.h src/gui/embedded/qvfbhdr.h src/gui/embedded/qwindowsystem_p.h src/gui/embedded/qwindowsystem_qws.cpp src/gui/embedded/qwindowsystem_qws.h src/gui/embedded/qwscommand_qws.cpp src/gui/embedded/qwscommand_qws_p.h src/gui/embedded/qwscursor_qws.cpp src/gui/embedded/qwsdisplay_qws.h src/gui/embedded/qwsdisplay_qws_p.h src/gui/embedded/qwsembedwidget.cpp src/gui/embedded/qwsevent_qws.cpp src/gui/embedded/qwsevent_qws.h src/gui/embedded/qwslock.cpp src/gui/embedded/qwslock_p.h src/gui/embedded/qwsmanager_p.h src/gui/embedded/qwsmanager_qws.cpp src/gui/embedded/qwsmanager_qws.h src/gui/embedded/qwsproperty_qws.cpp src/gui/embedded/qwsproperty_qws.h src/gui/embedded/qwsprotocolitem_qws.h src/gui/embedded/qwssharedmemory.cpp src/gui/embedded/qwssharedmemory_p.h src/gui/embedded/qwssignalhandler.cpp src/gui/embedded/qwssignalhandler_p.h src/gui/embedded/qwssocket_qws.cpp src/gui/embedded/qwssocket_qws.h src/gui/embedded/qwsutils_qws.h src/gui/image/qpixmap_qws.cpp src/gui/inputmethod/qwsinputcontext_p.h src/gui/inputmethod/qwsinputcontext_qws.cpp src/gui/kernel/qapplication_qpa.cpp src/gui/kernel/qapplication_qws.cpp src/gui/kernel/qclipboard_qws.cpp src/gui/kernel/qcursor_qws.cpp src/gui/kernel/qdesktopwidget_qws.cpp src/gui/kernel/qeventdispatcher_glib_qws.cpp src/gui/kernel/qeventdispatcher_glib_qws_p.h src/gui/kernel/qeventdispatcher_qws.cpp src/gui/kernel/qeventdispatcher_qws_p.h src/gui/kernel/qplatformintegration_qpa.cpp src/gui/kernel/qplatformwindowformat_qpa.cpp src/gui/kernel/qplatformwindowformat_qpa.h src/gui/kernel/qsessionmanager_qws.cpp src/gui/kernel/qsound_qws.cpp src/gui/kernel/qwidget_qws.cpp src/gui/painting/qcolormap_qws.cpp src/gui/painting/qgraphicssystem.cpp src/gui/painting/qgraphicssystem_mac.cpp src/gui/painting/qgraphicssystem_mac_p.h src/gui/painting/qgraphicssystem_p.h src/gui/painting/qgraphicssystem_qws.cpp src/gui/painting/qgraphicssystem_qws_p.h src/gui/painting/qgraphicssystem_raster.cpp src/gui/painting/qgraphicssystem_raster_p.h src/gui/painting/qgraphicssystem_runtime.cpp src/gui/painting/qgraphicssystem_runtime_p.h src/gui/painting/qgraphicssystemfactory.cpp src/gui/painting/qgraphicssystemfactory_p.h src/gui/painting/qgraphicssystemplugin.cpp src/gui/painting/qgraphicssystemplugin_p.h src/gui/painting/qpaintdevice_x11.cpp src/gui/painting/qprintengine_ps.cpp src/gui/painting/qprintengine_ps_p.h src/gui/painting/qprintengine_qws.cpp src/gui/painting/qprintengine_qws_p.h src/gui/painting/qregion_qws.cpp src/gui/painting/qunifiedtoolbarsurface_mac.cpp src/gui/painting/qunifiedtoolbarsurface_mac_p.h src/gui/painting/qwindowsurface_mac.cpp src/gui/painting/qwindowsurface_qws.cpp src/gui/painting/qwindowsurface_qws_p.h src/gui/painting/qwindowsurface_raster.cpp src/gui/painting/qwindowsurface_raster_p.h src/gui/painting/qwindowsurface_s60.cpp src/gui/painting/qwindowsurface_s60_p.h src/gui/painting/qwindowsurface_x11.cpp src/gui/painting/qwindowsurface_x11_p.h src/gui/painting/qwmatrix.h src/gui/text/qabstractfontengine_qws.cpp src/gui/text/qabstractfontengine_qws.h src/gui/text/qfont_qws.cpp src/gui/text/qfontdatabase_qws.cpp src/gui/text/qfontengine_qws.cpp src/opengl/qgl_qpa.cpp src/opengl/qgl_qws.cpp src/opengl/qglscreen_qws.cpp src/opengl/qglscreen_qws.h src/opengl/qglwindowsurface_qws.cpp src/opengl/qgraphicssystem_gl.cpp src/opengl/qgraphicssystem_gl_p.h src/openvg/qpaintengine_vg.cpp src/openvg/qpaintengine_vg_p.h src/openvg/qpixmapdata_vg.cpp src/openvg/qpixmapdata_vg_p.h src/openvg/qpixmapfilter_vg.cpp src/openvg/qpixmapfilter_vg_p.h src/openvg/qvg.h src/openvg/qvg_p.h src/openvg/qvg_symbian.cpp src/openvg/qvgcompositionhelper_p.h src/openvg/qvgfontglyphcache_p.h src/openvg/qvgimagepool.cpp src/openvg/qvgimagepool_p.h src/openvg/qwindowsurface_vg.cpp src/openvg/qwindowsurface_vg_p.h src/openvg/qwindowsurface_vgegl.cpp src/openvg/qwindowsurface_vgegl_p.h src/plugins/decorations/default/main.cpp src/plugins/decorations/styled/main.cpp src/plugins/decorations/windows/main.cpp src/plugins/gfxdrivers/ahi/qscreenahi_qws.cpp src/plugins/gfxdrivers/ahi/qscreenahi_qws.h src/plugins/gfxdrivers/ahi/qscreenahiplugin.cpp src/plugins/gfxdrivers/directfb/qdirectfbkeyboard.cpp src/plugins/gfxdrivers/directfb/qdirectfbkeyboard.h src/plugins/gfxdrivers/directfb/qdirectfbmouse.cpp src/plugins/gfxdrivers/directfb/qdirectfbmouse.h src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.cpp src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.h src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.h src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp src/plugins/gfxdrivers/directfb/qdirectfbpixmap.h src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp src/plugins/gfxdrivers/directfb/qdirectfbscreen.h src/plugins/gfxdrivers/directfb/qdirectfbscreenplugin.cpp src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.cpp src/plugins/gfxdrivers/eglnullws/eglnullwsscreen.h src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.cpp src/plugins/gfxdrivers/eglnullws/eglnullwsscreenplugin.h src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.cpp src/plugins/gfxdrivers/eglnullws/eglnullwswindowsurface.h src/plugins/gfxdrivers/linuxfb/main.cpp src/plugins/gfxdrivers/powervr/QWSWSEGL/pvrqwsdrawable.c src/plugins/gfxdrivers/powervr/QWSWSEGL/pvrqwsdrawable.h src/plugins/gfxdrivers/powervr/QWSWSEGL/pvrqwsdrawable_p.h src/plugins/gfxdrivers/powervr/QWSWSEGL/pvrqwswsegl.c src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.h src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreenplugin.cpp src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglwindowsurface.cpp src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglwindowsurface.h src/plugins/gfxdrivers/qvfb/main.cpp src/plugins/gfxdrivers/transformed/main.cpp src/plugins/gfxdrivers/vnc/main.cpp src/plugins/gfxdrivers/vnc/qscreenvnc_p.h src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp src/plugins/gfxdrivers/vnc/qscreenvnc_qws.h src/plugins/graphicssystems/meego/dithering.cpp src/plugins/graphicssystems/meego/qmeegoextensions.cpp src/plugins/graphicssystems/meego/qmeegoextensions.h src/plugins/graphicssystems/meego/qmeegographicssystem.cpp src/plugins/graphicssystems/meego/qmeegographicssystem.h src/plugins/graphicssystems/meego/qmeegographicssystemplugin.cpp src/plugins/graphicssystems/meego/qmeegographicssystemplugin.h src/plugins/graphicssystems/meego/qmeegolivepixmapdata.cpp src/plugins/graphicssystems/meego/qmeegolivepixmapdata.h src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp src/plugins/graphicssystems/meego/qmeegopixmapdata.h src/plugins/graphicssystems/meego/qmeegorasterpixmapdata.cpp src/plugins/graphicssystems/opengl/main.cpp src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp src/plugins/graphicssystems/openvg/qgraphicssystem_vg_p.h src/plugins/graphicssystems/shivavg/main.cpp src/plugins/graphicssystems/shivavg/shivavggraphicssystem.cpp src/plugins/graphicssystems/shivavg/shivavggraphicssystem.h src/plugins/graphicssystems/shivavg/shivavgwindowsurface.cpp src/plugins/graphicssystems/shivavg/shivavgwindowsurface.h src/plugins/graphicssystems/trace/main.cpp src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp src/plugins/graphicssystems/trace/qgraphicssystem_trace_p.h src/plugins/kbddrivers/linuxinput/main.cpp src/plugins/mousedrivers/linuxtp/main.cpp src/plugins/mousedrivers/pc/main.cpp src/plugins/mousedrivers/tslib/main.cpp src/widgets/kernel/qwidget_qpa.cpp
1156 lines
35 KiB
C++
1156 lines
35 KiB
C++
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
|
** All rights reserved.
|
|
** Contact: Nokia Corporation (qt-info@nokia.com)
|
|
**
|
|
** This file is part of the test suite of the Qt Toolkit.
|
|
**
|
|
** $QT_BEGIN_LICENSE:LGPL$
|
|
** GNU Lesser General Public License Usage
|
|
** This file may be used under the terms of the GNU Lesser General Public
|
|
** License version 2.1 as published by the Free Software Foundation and
|
|
** appearing in the file LICENSE.LGPL included in the packaging of this
|
|
** file. Please review the following information to ensure the GNU Lesser
|
|
** General Public License version 2.1 requirements will be met:
|
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
**
|
|
** In addition, as a special exception, Nokia gives you certain additional
|
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
**
|
|
** GNU General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU General
|
|
** Public License version 3.0 as published by the Free Software Foundation
|
|
** and appearing in the file LICENSE.GPL included in the packaging of this
|
|
** file. Please review the following information to ensure the GNU General
|
|
** Public License version 3.0 requirements will be met:
|
|
** http://www.gnu.org/copyleft/gpl.html.
|
|
**
|
|
** Other Usage
|
|
** Alternatively, this file may be used in accordance with the terms and
|
|
** conditions contained in a signed written agreement between you and Nokia.
|
|
**
|
|
**
|
|
**
|
|
**
|
|
**
|
|
** $QT_END_LICENSE$
|
|
**
|
|
****************************************************************************/
|
|
|
|
|
|
#include <QtTest/QtTest>
|
|
|
|
#define protected public
|
|
|
|
#include <qtextdocument.h>
|
|
#undef protected
|
|
#include <private/qtextdocument_p.h>
|
|
#include <qabstracttextdocumentlayout.h>
|
|
#include <qtextobject.h>
|
|
#include <qdebug.h>
|
|
#include <stdlib.h>
|
|
#include <qtextcursor.h>
|
|
#include "../qtextdocument/common.h"
|
|
|
|
//TESTED_FILES=gui/text/qtextdocument_p.cpp gui/text/qtextdocument_p.h
|
|
|
|
class tst_QTextPieceTable : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
tst_QTextPieceTable();
|
|
|
|
|
|
public slots:
|
|
void init();
|
|
void cleanup();
|
|
private slots:
|
|
void insertion1();
|
|
void insertion2();
|
|
void insertion3();
|
|
void insertion4();
|
|
void insertion5();
|
|
|
|
void removal1();
|
|
void removal2();
|
|
void removal3();
|
|
void removal4();
|
|
|
|
void undoRedo1();
|
|
void undoRedo2();
|
|
void undoRedo3();
|
|
void undoRedo4();
|
|
void undoRedo5();
|
|
void undoRedo6();
|
|
void undoRedo7();
|
|
void undoRedo8();
|
|
void undoRedo9();
|
|
void undoRedo10();
|
|
void undoRedo11();
|
|
|
|
void checkDocumentChanged();
|
|
void checkDocumentChanged2();
|
|
void setBlockFormat();
|
|
|
|
void blockInsertion();
|
|
void blockInsertion2();
|
|
|
|
void blockRemoval1();
|
|
void blockRemoval2();
|
|
void blockRemoval3();
|
|
void blockRemoval4();
|
|
void blockRemoval5();
|
|
|
|
void checkBlockSeparation();
|
|
|
|
void checkFrames1();
|
|
void removeFrameDirect();
|
|
void removeWithChildFrame();
|
|
void clearWithFrames();
|
|
|
|
private:
|
|
QTextDocument *doc;
|
|
QTextDocumentPrivate *table;
|
|
int blockFormatIndex;
|
|
int charFormatIndex;
|
|
};
|
|
|
|
tst_QTextPieceTable::tst_QTextPieceTable()
|
|
{ doc = 0; table = 0; }
|
|
|
|
|
|
void tst_QTextPieceTable::init()
|
|
{
|
|
doc = new QTextDocument(0);
|
|
table = doc->docHandle();
|
|
blockFormatIndex = table->formatCollection()->indexForFormat(QTextBlockFormat());
|
|
charFormatIndex = table->formatCollection()->indexForFormat(QTextCharFormat());
|
|
}
|
|
|
|
void tst_QTextPieceTable::cleanup()
|
|
{
|
|
delete doc;
|
|
doc = 0;
|
|
}
|
|
|
|
void tst_QTextPieceTable::insertion1()
|
|
{
|
|
table->insert(0, "aacc", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("aacc"));
|
|
table->insert(2, "bb", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("aabbcc"));
|
|
table->insert(1, "1", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("a1abbcc"));
|
|
table->insert(6, "d", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("a1abbcdc"));
|
|
table->insert(8, "z", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("a1abbcdcz"));
|
|
}
|
|
|
|
void tst_QTextPieceTable::insertion2()
|
|
{
|
|
table->insert(0, "bb", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("bb"));
|
|
}
|
|
|
|
void tst_QTextPieceTable::insertion3()
|
|
{
|
|
QString compare;
|
|
for (int i = 0; i < 20000; ++i) {
|
|
int pos = rand() % (i+1);
|
|
QChar c((unsigned short)(i & 0xff) + 1);
|
|
QString str;
|
|
str += c;
|
|
table->insert(pos, str, charFormatIndex);
|
|
compare.insert(pos, str);
|
|
}
|
|
QVERIFY(table->plainText() == compare);
|
|
}
|
|
|
|
void tst_QTextPieceTable::insertion4()
|
|
{
|
|
QString compare;
|
|
for (int i = 0; i < 20000; ++i) {
|
|
int pos = rand() % (i+1);
|
|
QChar c((unsigned short)((i % 26) + (i>25?'A':'a')));
|
|
QString str;
|
|
str += c;
|
|
str += c;
|
|
table->insert(pos, str, charFormatIndex);
|
|
compare.insert(pos, str);
|
|
// if (table->text() != compare) {
|
|
// qDebug("compare failed: i=%d (current char=%c) insert at %d\nexpected '%s'\ngot '%s'", i, (i % 26) + (i>25?'A':'a'), pos, compare.latin1(), table->text().latin1());
|
|
// exit(12);
|
|
// }
|
|
}
|
|
QVERIFY(table->plainText() == compare);
|
|
}
|
|
|
|
void tst_QTextPieceTable::insertion5()
|
|
{
|
|
QString compare;
|
|
for (int i = 0; i < 20000; ++i) {
|
|
int pos = rand() % (i+1);
|
|
QChar c((unsigned short)((i % 26) + (i>25?'A':'a')));
|
|
QString str;
|
|
str += c;
|
|
str += c;
|
|
if (c == 'a') {
|
|
table->insertBlock(pos, blockFormatIndex, charFormatIndex);
|
|
str = QChar(QChar::ParagraphSeparator);
|
|
} else {
|
|
table->insert(pos, str, charFormatIndex);
|
|
}
|
|
compare.insert(pos, str);
|
|
}
|
|
QVERIFY(table->plainText() == compare);
|
|
for (QTextBlock it = table->blocksBegin(); it != table->blocksEnd(); it = it.next()) {
|
|
QTextDocumentPrivate::FragmentIterator fit = table->find(it.position());
|
|
QVERIFY(fit.position() == it.position());
|
|
}
|
|
}
|
|
|
|
void tst_QTextPieceTable::removal1()
|
|
{
|
|
table->insert(0, "abbccc", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("abbccc"));
|
|
table->remove(1, 2);
|
|
QCOMPARE(table->plainText(), QString("accc"));
|
|
table->insert(1, "1", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("a1ccc"));
|
|
table->remove(4, 1);
|
|
QCOMPARE(table->plainText(), QString("a1cc"));
|
|
table->insert(4, "z", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("a1ccz"));
|
|
}
|
|
|
|
void tst_QTextPieceTable::removal2()
|
|
{
|
|
table->insert(0, "bb", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("bb"));
|
|
table->remove(0, 2);
|
|
QCOMPARE(table->plainText(), QString(""));
|
|
table->insertBlock(0, blockFormatIndex, charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString(QChar(QChar::ParagraphSeparator)));
|
|
table->remove(0, 1);
|
|
QCOMPARE(table->plainText(), QString(""));
|
|
|
|
table->insert(0, "bb", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("bb"));
|
|
table->insertBlock(1, blockFormatIndex, charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("b") + QString(QChar(QChar::ParagraphSeparator)) + QString("b"));
|
|
table->remove(1, 1);
|
|
QCOMPARE(table->plainText(), QString("bb"));
|
|
}
|
|
|
|
void tst_QTextPieceTable::removal3()
|
|
{
|
|
QString compare;
|
|
int l = 0;
|
|
for (int i = 0; i < 20000; ++i) {
|
|
bool remove = l && (rand() % 2);
|
|
int pos = rand() % (remove ? l : (l+1));
|
|
QChar c((unsigned short)((i % 26) + (i>25?'A':'a')));
|
|
QString str;
|
|
str += c;
|
|
str += c;
|
|
if (remove && pos < table->length()) {
|
|
compare.remove(pos, 1);
|
|
table->remove(pos, 1);
|
|
} else {
|
|
compare.insert(pos, str);
|
|
table->insert(pos, str, charFormatIndex);
|
|
}
|
|
l += remove ? -1 : 2;
|
|
// if (table->text() != compare) {
|
|
// qDebug("compare failed: i=%d (current char=%c) insert at %d\nexpected '%s'\ngot '%s'", i, (i % 26) + (i>25?'A':'a'), pos, compare.latin1(), table->text().latin1());
|
|
// exit(12);
|
|
// }
|
|
}
|
|
QVERIFY(table->plainText() == compare);
|
|
}
|
|
|
|
void tst_QTextPieceTable::removal4()
|
|
{
|
|
QString compare;
|
|
int l = 0;
|
|
for (int i = 0; i < 20000; ++i) {
|
|
bool remove = l && (rand() % 2);
|
|
int pos = (l > 1) ? rand() % (remove ? l-1 : l) : 0;
|
|
QChar c((unsigned short)((i % 26) + (i>25?'A':'a')));
|
|
QString str;
|
|
if (c != 'a') {
|
|
str += c;
|
|
str += c;
|
|
} else {
|
|
str = QChar(QChar::ParagraphSeparator);
|
|
}
|
|
if (remove && pos < table->length() - 1) {
|
|
compare.remove(pos, 1);
|
|
table->remove(pos, 1);
|
|
} else {
|
|
if (str[0] == QChar(QChar::ParagraphSeparator))
|
|
table->insertBlock(pos, blockFormatIndex, charFormatIndex);
|
|
else
|
|
table->insert(pos, str, charFormatIndex);
|
|
compare.insert(pos, str);
|
|
}
|
|
l += remove ? -1 : 2;
|
|
// if (table->plainText() != compare) {
|
|
// qDebug("compare failed: i=%d (current char=%c) insert at %d\nexpected '%s'\ngot '%s'", i, (i % 26) + (i>25?'A':'a'), pos, compare.latin1(), table->plainText().latin1());
|
|
// exit(12);
|
|
// }
|
|
}
|
|
QVERIFY(table->plainText() == compare);
|
|
}
|
|
|
|
void tst_QTextPieceTable::undoRedo1()
|
|
{
|
|
table->insert(0, "01234567", charFormatIndex);
|
|
table->insert(0, "a", charFormatIndex);
|
|
table->insert(1, "b", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("ab01234567"));
|
|
table->undo();
|
|
QCOMPARE(table->plainText(), QString("01234567"));
|
|
table->redo();
|
|
QCOMPARE(table->plainText(), QString("ab01234567"));
|
|
table->undo();
|
|
table->insert(1, "c", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("0c1234567"));
|
|
table->undo();
|
|
QCOMPARE(table->plainText(), QString("01234567"));
|
|
table->undo();
|
|
QVERIFY(table->plainText().isEmpty());
|
|
}
|
|
|
|
void tst_QTextPieceTable::undoRedo2()
|
|
{
|
|
table->insert(0, "01", charFormatIndex);
|
|
table->insert(1, "a", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("0a1"));
|
|
table->undo();
|
|
QCOMPARE(table->plainText(), QString("01"));
|
|
table->undo();
|
|
QCOMPARE(table->plainText(), QString(""));
|
|
table->redo();
|
|
QCOMPARE(table->plainText(), QString("01"));
|
|
table->redo();
|
|
QCOMPARE(table->plainText(), QString("0a1"));
|
|
}
|
|
|
|
void tst_QTextPieceTable::undoRedo3()
|
|
{
|
|
table->insert(0, "01", charFormatIndex);
|
|
table->insert(2, "ab", charFormatIndex);
|
|
table->remove(2, 1);
|
|
QCOMPARE(table->plainText(), QString("01b"));
|
|
table->undo();
|
|
QCOMPARE(table->plainText(), QString("01ab"));
|
|
table->undo();
|
|
QVERIFY(table->plainText().isEmpty());
|
|
table->redo();
|
|
QCOMPARE(table->plainText(), QString("01ab"));
|
|
table->redo();
|
|
QCOMPARE(table->plainText(), QString("01b"));
|
|
}
|
|
|
|
void tst_QTextPieceTable::undoRedo4()
|
|
{
|
|
table->insert(0, "01", charFormatIndex);
|
|
table->insert(0, "ab", charFormatIndex);
|
|
table->remove(0, 1);
|
|
QCOMPARE(table->plainText(), QString("b01"));
|
|
table->undo();
|
|
QCOMPARE(table->plainText(), QString("ab01"));
|
|
table->undo();
|
|
QCOMPARE(table->plainText(), QString("01"));
|
|
table->undo();
|
|
QCOMPARE(table->plainText(), QString(""));
|
|
table->redo();
|
|
QCOMPARE(table->plainText(), QString("01"));
|
|
table->redo();
|
|
QCOMPARE(table->plainText(), QString("ab01"));
|
|
table->redo();
|
|
QCOMPARE(table->plainText(), QString("b01"));
|
|
}
|
|
|
|
void tst_QTextPieceTable::undoRedo5()
|
|
{
|
|
table->beginEditBlock();
|
|
table->insert(0, "01", charFormatIndex);
|
|
table->remove(1, 1);
|
|
table->endEditBlock();
|
|
QCOMPARE(table->plainText(), QString("0"));
|
|
table->undo();
|
|
QCOMPARE(table->plainText(), QString(""));
|
|
}
|
|
|
|
void tst_QTextPieceTable::undoRedo6()
|
|
{
|
|
// this is essentially a test for the undoStack[undoPosition - 1].block = false in PieceTable::endUndoBlock()
|
|
QTextDocument doc;
|
|
QTextCursor cursor(&doc);
|
|
cursor.insertText("Hello World");
|
|
|
|
cursor.insertBlock();
|
|
cursor.insertText("Hello World2");
|
|
|
|
cursor.movePosition(QTextCursor::Start);
|
|
QTextBlockFormat bfmt;
|
|
bfmt.setAlignment(Qt::AlignHCenter);
|
|
cursor.setBlockFormat(bfmt);
|
|
QVERIFY(cursor.blockFormat().alignment() == Qt::AlignHCenter);
|
|
|
|
QTextCursor range = cursor;
|
|
range.clearSelection();
|
|
range.movePosition(QTextCursor::Start);
|
|
range.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
|
|
|
|
QTextCharFormat modifier;
|
|
modifier.setFontItalic(true);
|
|
range.mergeCharFormat(modifier);
|
|
|
|
cursor.movePosition(QTextCursor::Start);
|
|
QVERIFY(cursor.blockFormat().alignment() == Qt::AlignHCenter);
|
|
|
|
doc.undo();
|
|
|
|
QVERIFY(cursor.blockFormat().alignment() == Qt::AlignHCenter);
|
|
}
|
|
|
|
void tst_QTextPieceTable::undoRedo7()
|
|
{
|
|
table->insert(0, "a", charFormatIndex);
|
|
table->insert(1, "b", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("ab"));
|
|
|
|
table->undo();
|
|
QVERIFY(table->plainText().isEmpty());
|
|
}
|
|
|
|
void tst_QTextPieceTable::undoRedo8()
|
|
{
|
|
table->insert(0, "a", charFormatIndex);
|
|
table->insert(1, "b", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("ab"));
|
|
|
|
table->remove(0, 1);
|
|
table->remove(0, 1);
|
|
|
|
QVERIFY(table->plainText().isEmpty());
|
|
table->undo();
|
|
QCOMPARE(table->plainText(), QString("ab"));
|
|
}
|
|
|
|
void tst_QTextPieceTable::undoRedo9()
|
|
{
|
|
table->insert(0, "a", charFormatIndex);
|
|
table->insert(1, "b", charFormatIndex);
|
|
QCOMPARE(table->plainText(), QString("ab"));
|
|
|
|
table->remove(1, 1);
|
|
table->remove(0, 1);
|
|
|
|
QVERIFY(table->plainText().isEmpty());
|
|
table->undo();
|
|
QCOMPARE(table->plainText(), QString("ab"));
|
|
}
|
|
|
|
void tst_QTextPieceTable::undoRedo10()
|
|
{
|
|
// testcase for the beginUndoBlock/endUndoBlock calls being surrounded by an if (undoEnabled)
|
|
QTextCharFormat cf;
|
|
cf.setForeground(Qt::blue);
|
|
int cfIdx = table->formatCollection()->indexForFormat(cf);
|
|
|
|
QTextBlockFormat f;
|
|
int idx = table->formatCollection()->indexForFormat(f);
|
|
|
|
table->insert(0, "a", cfIdx);
|
|
table->insertBlock(1, idx, cfIdx);
|
|
table->insert(1, "b", cfIdx);
|
|
|
|
cf.setForeground(Qt::red);
|
|
int newCfIdx = table->formatCollection()->indexForFormat(cf);
|
|
|
|
table->setCharFormat(0, 3, cf, QTextDocumentPrivate::MergeFormat);
|
|
|
|
QCOMPARE(table->find(0).value()->format, newCfIdx);
|
|
|
|
table->undo();
|
|
|
|
QCOMPARE(table->find(0).value()->format, cfIdx);
|
|
}
|
|
|
|
void tst_QTextPieceTable::undoRedo11()
|
|
{
|
|
srand(3);
|
|
const int loops = 20;
|
|
QString compare;
|
|
int l = 0;
|
|
for (int i = 0; i < loops; ++i) {
|
|
bool remove = l && (rand() % 2);
|
|
int pos = (l > 1) ? rand() % (remove ? l-1 : l) : 0;
|
|
QChar c((unsigned short)((i % 26) + (i>25?'A':'a')));
|
|
QString str;
|
|
str += c;
|
|
str += c;
|
|
if (remove) {
|
|
compare.remove(pos, 1);
|
|
table->remove(pos, 1);
|
|
} else {
|
|
compare.insert(pos, str);
|
|
table->insert(pos, str, charFormatIndex);
|
|
}
|
|
l += remove ? -1 : 2;
|
|
}
|
|
QVERIFY(table->plainText() == compare);
|
|
for (int i = 0; i < loops; ++i)
|
|
table->undo();
|
|
QVERIFY(table->plainText() == QString(""));
|
|
for (int i = 0; i < loops; ++i)
|
|
table->redo();
|
|
QVERIFY(table->plainText() == compare);
|
|
}
|
|
|
|
|
|
void tst_QTextPieceTable::checkDocumentChanged()
|
|
{
|
|
table->enableUndoRedo(false);
|
|
QTestDocumentLayout *layout = new QTestDocumentLayout(doc);
|
|
doc->setDocumentLayout(layout);
|
|
|
|
// single insert
|
|
layout->expect(0, 0, 15);
|
|
table->insert(0, "012345678901234", charFormatIndex);
|
|
QVERIFY(!layout->error);
|
|
|
|
// single remove
|
|
layout->expect(0, 5, 0);
|
|
table->remove(0, 5);
|
|
QVERIFY(!layout->error);
|
|
|
|
// symmetric insert/remove
|
|
layout->expect(0, 0, 0);
|
|
table->beginEditBlock();
|
|
table->insert(0, "01234", charFormatIndex);
|
|
table->remove(0, 5);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
layout->expect(0, 5, 5);
|
|
table->beginEditBlock();
|
|
table->remove(0, 5);
|
|
table->insert(0, "01234", charFormatIndex);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
// replace
|
|
layout->expect(0, 3, 5);
|
|
table->beginEditBlock();
|
|
table->remove(0, 3);
|
|
table->insert(0, "01234", charFormatIndex);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
layout->expect(0, 0, 2);
|
|
table->beginEditBlock();
|
|
table->insert(0, "01234", charFormatIndex);
|
|
table->remove(0, 3);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
// insert + remove inside insert block
|
|
layout->expect(0, 0, 2);
|
|
table->beginEditBlock();
|
|
table->insert(0, "01234", charFormatIndex);
|
|
table->remove(1, 3);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
layout->expect(0, 0, 2);
|
|
table->beginEditBlock();
|
|
table->insert(0, "01234", charFormatIndex);
|
|
table->remove(2, 3);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
// insert + remove partly outside
|
|
layout->expect(0, 1, 0);
|
|
table->beginEditBlock();
|
|
table->insert(1, "0", charFormatIndex);
|
|
table->remove(0, 2);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
layout->expect(0, 1, 1);
|
|
table->beginEditBlock();
|
|
table->insert(1, "01", charFormatIndex);
|
|
table->remove(0, 2);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
layout->expect(0, 1, 2);
|
|
table->beginEditBlock();
|
|
table->insert(1, "012", charFormatIndex);
|
|
table->remove(0, 2);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
layout->expect(1, 1, 0);
|
|
table->beginEditBlock();
|
|
table->insert(1, "0", charFormatIndex);
|
|
table->remove(1, 2);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
layout->expect(1, 1, 1);
|
|
table->beginEditBlock();
|
|
table->insert(1, "01", charFormatIndex);
|
|
table->remove(2, 2);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
layout->expect(1, 1, 2);
|
|
table->beginEditBlock();
|
|
table->insert(1, "012", charFormatIndex);
|
|
table->remove(3, 2);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
// insert + remove non overlapping
|
|
layout->expect(0, 1, 1);
|
|
table->beginEditBlock();
|
|
table->insert(1, "0", charFormatIndex);
|
|
table->remove(0, 1);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
layout->expect(0, 2, 2);
|
|
table->beginEditBlock();
|
|
table->insert(2, "1", charFormatIndex);
|
|
table->remove(0, 1);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
layout->expect(0, 2, 2);
|
|
table->beginEditBlock();
|
|
table->remove(0, 1);
|
|
table->insert(1, "0", charFormatIndex);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
layout->expect(0, 3, 3);
|
|
table->beginEditBlock();
|
|
table->remove(0, 1);
|
|
table->insert(2, "1", charFormatIndex);
|
|
table->endEditBlock();
|
|
|
|
|
|
layout->expect(0, 3, 3);
|
|
QTextCharFormat fmt;
|
|
fmt.setForeground(Qt::blue);
|
|
table->beginEditBlock();
|
|
table->setCharFormat(0, 1, fmt);
|
|
table->setCharFormat(2, 1, fmt);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
}
|
|
|
|
void tst_QTextPieceTable::checkDocumentChanged2()
|
|
{
|
|
QTestDocumentLayout *layout = new QTestDocumentLayout(doc);
|
|
doc->setDocumentLayout(layout);
|
|
|
|
QTextCharFormat fmt;
|
|
fmt.setForeground(Qt::blue);
|
|
int anotherCharFormatIndex = table->formatCollection()->indexForFormat(fmt);
|
|
|
|
layout->expect(0, 0, 12);
|
|
table->beginEditBlock();
|
|
table->insert(0, "0123", charFormatIndex);
|
|
table->insert(4, "4567", anotherCharFormatIndex);
|
|
table->insert(8, "8901", charFormatIndex);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
|
|
fmt.setFontItalic(true);
|
|
|
|
layout->expect(1, 10, 10);
|
|
table->beginEditBlock();
|
|
table->setCharFormat(8, 3, fmt);
|
|
table->setCharFormat(4, 4, fmt);
|
|
table->setCharFormat(1, 3, fmt);
|
|
table->endEditBlock();
|
|
QVERIFY(!layout->error);
|
|
}
|
|
|
|
void tst_QTextPieceTable::setBlockFormat()
|
|
{
|
|
QTextBlockFormat bfmt;
|
|
int index = table->formatCollection()->indexForFormat(bfmt);
|
|
|
|
table->insertBlock(0, index, charFormatIndex);
|
|
table->insertBlock(0, index, charFormatIndex);
|
|
table->insertBlock(0, index, charFormatIndex);
|
|
|
|
QTextBlockFormat newbfmt = bfmt;
|
|
newbfmt.setAlignment(Qt::AlignRight);
|
|
index = table->formatCollection()->indexForFormat(bfmt);
|
|
QTextBlock b = table->blocksFind(1);
|
|
table->setBlockFormat(b, b, newbfmt);
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == bfmt);
|
|
QVERIFY(table->blocksFind(1).blockFormat() == newbfmt);
|
|
QVERIFY(table->blocksFind(2).blockFormat() == bfmt);
|
|
}
|
|
|
|
|
|
void tst_QTextPieceTable::blockInsertion()
|
|
{
|
|
QTextBlockFormat fmt;
|
|
fmt.setTopMargin(100);
|
|
int idx = table->formatCollection()->indexForFormat(fmt);
|
|
int charFormat = table->formatCollection()->indexForFormat(QTextCharFormat());
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
|
|
table->insertBlock(0, idx, charFormat);
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(1).blockFormat() == fmt);
|
|
|
|
table->undo();
|
|
QVERIFY(table->blockMap().length() == 1);
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
|
|
table->redo();
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(1).blockFormat() == fmt);
|
|
}
|
|
|
|
void tst_QTextPieceTable::blockInsertion2()
|
|
{
|
|
// caused evil failing assertion in fragmentmap
|
|
int pos = 0;
|
|
table->insertBlock(pos, blockFormatIndex, charFormatIndex);
|
|
pos += 1;
|
|
table->insert(pos, "a", charFormatIndex);
|
|
pos += 1;
|
|
|
|
pos -= 1;
|
|
table->insertBlock(pos, blockFormatIndex, charFormatIndex);
|
|
QCOMPARE(table->blocksFind(0).position(), 0);
|
|
QCOMPARE(table->blocksFind(1).position(), 1);
|
|
QCOMPARE(table->blocksFind(2).position(), 2);
|
|
}
|
|
|
|
/*
|
|
Tests correct removal behaviour when deleting over block boundaries or complete blocks.
|
|
*/
|
|
|
|
void tst_QTextPieceTable::blockRemoval1()
|
|
{
|
|
QTextBlockFormat fmt1;
|
|
fmt1.setTopMargin(100);
|
|
QTextBlockFormat fmt2;
|
|
fmt2.setAlignment(Qt::AlignRight);
|
|
int idx1 = table->formatCollection()->indexForFormat(fmt1);
|
|
int idx2 = table->formatCollection()->indexForFormat(fmt2);
|
|
|
|
table->insert(0, "0123", charFormatIndex);
|
|
table->insertBlock(4, idx1, charFormatIndex);
|
|
table->insert(5, "5678", charFormatIndex);
|
|
table->insertBlock(9, idx2, charFormatIndex);
|
|
table->insert(10, "0123", charFormatIndex);
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt1);
|
|
QVERIFY(table->blocksFind(10).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 5);
|
|
QVERIFY(table->blocksFind(11).position() == 10);
|
|
|
|
table->beginEditBlock();
|
|
table->remove(5, 5);
|
|
table->endEditBlock();
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(4).position() == 0);
|
|
QVERIFY(table->blocksFind(5).position() == 5);
|
|
|
|
table->undo();
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt1);
|
|
QVERIFY(table->blocksFind(10).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 5);
|
|
QVERIFY(table->blocksFind(11).position() == 10);
|
|
|
|
table->redo();
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(4).position() == 0);
|
|
QVERIFY(table->blocksFind(5).position() == 5);
|
|
}
|
|
|
|
void tst_QTextPieceTable::blockRemoval2()
|
|
{
|
|
QTextBlockFormat fmt1;
|
|
fmt1.setTopMargin(100);
|
|
QTextBlockFormat fmt2;
|
|
fmt2.setAlignment(Qt::AlignRight);
|
|
int idx1 = table->formatCollection()->indexForFormat(fmt1);
|
|
int idx2 = table->formatCollection()->indexForFormat(fmt2);
|
|
|
|
table->insert(0, "0123", charFormatIndex);
|
|
table->insertBlock(4, idx1, charFormatIndex);
|
|
table->insert(5, "5678", charFormatIndex);
|
|
table->insertBlock(9, idx2, charFormatIndex);
|
|
table->insert(10, "0123", charFormatIndex);
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt1);
|
|
QVERIFY(table->blocksFind(10).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 5);
|
|
QVERIFY(table->blocksFind(11).position() == 10);
|
|
|
|
table->remove(4, 1);
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(6).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 0);
|
|
|
|
table->undo();
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt1);
|
|
QVERIFY(table->blocksFind(10).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 5);
|
|
QVERIFY(table->blocksFind(11).position() == 10);
|
|
|
|
table->redo();
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(6).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 0);
|
|
}
|
|
|
|
void tst_QTextPieceTable::blockRemoval3()
|
|
{
|
|
QTextBlockFormat fmt1;
|
|
fmt1.setTopMargin(100);
|
|
QTextBlockFormat fmt2;
|
|
fmt2.setAlignment(Qt::AlignRight);
|
|
int idx1 = table->formatCollection()->indexForFormat(fmt1);
|
|
int idx2 = table->formatCollection()->indexForFormat(fmt2);
|
|
|
|
table->insert(0, "0123", charFormatIndex);
|
|
table->insertBlock(4, idx1, charFormatIndex);
|
|
table->insert(5, "5678", charFormatIndex);
|
|
table->insertBlock(9, idx2, charFormatIndex);
|
|
table->insert(10, "0123", charFormatIndex);
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt1);
|
|
QVERIFY(table->blocksFind(10).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 5);
|
|
QVERIFY(table->blocksFind(11).position() == 10);
|
|
|
|
table->beginEditBlock();
|
|
table->remove(3, 4);
|
|
table->endEditBlock();
|
|
|
|
QVERIFY(table->blocksFind(1).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(5).position() == 0);
|
|
|
|
table->undo();
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt1);
|
|
QVERIFY(table->blocksFind(10).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 5);
|
|
QVERIFY(table->blocksFind(11).position() == 10);
|
|
|
|
table->redo();
|
|
QVERIFY(table->blocksFind(1).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(5).position() == 0);
|
|
}
|
|
|
|
void tst_QTextPieceTable::blockRemoval4()
|
|
{
|
|
#if 0
|
|
QTextBlockFormat fmt1;
|
|
fmt1.setTopMargin(100);
|
|
QTextBlockFormat fmt2;
|
|
fmt2.setAlignment(Qt::AlignRight);
|
|
int idx1 = table->formatCollection()->indexForFormat(fmt1);
|
|
int idx2 = table->formatCollection()->indexForFormat(fmt2);
|
|
|
|
table->insert(0, "0123", charFormatIndex);
|
|
table->insertBlock(4, idx1, charFormatIndex);
|
|
table->insert(5, "5678", charFormatIndex);
|
|
table->insertBlock(9, idx2, charFormatIndex);
|
|
table->insert(10, "0123", charFormatIndex);
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt1);
|
|
QVERIFY(table->blocksFind(10).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 5);
|
|
QVERIFY(table->blocksFind(11).position() == 10);
|
|
|
|
table->remove(3, 7);
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(5).position() == 0);
|
|
QVERIFY(table->blocksFind(1).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == QTextBlockFormat());
|
|
|
|
table->undo();
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt1);
|
|
QVERIFY(table->blocksFind(10).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 5);
|
|
QVERIFY(table->blocksFind(11).position() == 10);
|
|
|
|
table->redo();
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(5).position() == 0);
|
|
QVERIFY(table->blocksFind(1).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == QTextBlockFormat());
|
|
#endif
|
|
}
|
|
|
|
void tst_QTextPieceTable::blockRemoval5()
|
|
{
|
|
QTextBlockFormat fmt1;
|
|
fmt1.setTopMargin(100);
|
|
QTextBlockFormat fmt2;
|
|
fmt2.setAlignment(Qt::AlignRight);
|
|
int idx1 = table->formatCollection()->indexForFormat(fmt1);
|
|
int idx2 = table->formatCollection()->indexForFormat(fmt2);
|
|
|
|
table->insert(0, "0123", charFormatIndex);
|
|
table->insertBlock(4, idx1, charFormatIndex);
|
|
table->insert(5, "5678", charFormatIndex);
|
|
table->insertBlock(9, idx2, charFormatIndex);
|
|
table->insert(10, "0123", charFormatIndex);
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt1);
|
|
QVERIFY(table->blocksFind(10).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 5);
|
|
QVERIFY(table->blocksFind(11).position() == 10);
|
|
|
|
table->beginEditBlock();
|
|
table->remove(3, 8);
|
|
table->endEditBlock();
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(5).position() == 0);
|
|
|
|
table->undo();
|
|
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(4).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == fmt1);
|
|
QVERIFY(table->blocksFind(10).blockFormat() == fmt2);
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(6).position() == 5);
|
|
QVERIFY(table->blocksFind(11).position() == 10);
|
|
|
|
table->redo();
|
|
QVERIFY(table->blocksFind(0).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(5).blockFormat() == QTextBlockFormat());
|
|
QVERIFY(table->blocksFind(1).position() == 0);
|
|
QVERIFY(table->blocksFind(5).position() == 0);
|
|
}
|
|
|
|
|
|
void tst_QTextPieceTable::checkBlockSeparation()
|
|
{
|
|
table->insertBlock(0, blockFormatIndex, charFormatIndex);
|
|
table->insertBlock(1, blockFormatIndex, charFormatIndex);
|
|
|
|
QVERIFY(table->find(0) != table->find(1));
|
|
}
|
|
|
|
void tst_QTextPieceTable::checkFrames1()
|
|
{
|
|
QTextFrameFormat ffmt;
|
|
table->insert(0, "Hello", charFormatIndex);
|
|
QPointer<QTextFrame> frame = table->insertFrame(1, 3, ffmt);
|
|
QTextFrame *root = table->rootFrame();
|
|
|
|
QVERIFY(root == frame->parentFrame());
|
|
|
|
QVERIFY(root);
|
|
QVERIFY(root->parentFrame() == 0);
|
|
|
|
QVERIFY(root->childFrames().count() == 1);
|
|
QVERIFY(frame->format() == ffmt);
|
|
QVERIFY(frame->firstPosition() == 2);
|
|
QVERIFY(frame->lastPosition() == 4);
|
|
|
|
|
|
QPointer<QTextFrame> frame2 = table->insertFrame(2, 3, ffmt);
|
|
|
|
QVERIFY(root->childFrames().count() == 1);
|
|
QVERIFY(root->childFrames().at(0) == frame);
|
|
QVERIFY(frame->childFrames().count() == 1);
|
|
QVERIFY(frame2->childFrames().count() == 0);
|
|
QVERIFY(frame2->parentFrame() == frame);
|
|
QVERIFY(frame2->firstPosition() == 3);
|
|
QVERIFY(frame2->lastPosition() == 4);
|
|
|
|
QVERIFY(frame->format() == ffmt);
|
|
QVERIFY(frame->firstPosition() == 2);
|
|
QVERIFY(frame->lastPosition() == 6);
|
|
|
|
table->removeFrame(frame);
|
|
|
|
QVERIFY(root->childFrames().count() == 1);
|
|
QVERIFY(root->childFrames().at(0) == frame2);
|
|
QVERIFY(!frame);
|
|
QVERIFY(frame2->childFrames().count() == 0);
|
|
QVERIFY(frame2->parentFrame() == root);
|
|
QVERIFY(frame2->firstPosition() == 2);
|
|
QVERIFY(frame2->lastPosition() == 3);
|
|
|
|
table->undo();
|
|
|
|
frame = table->frameAt(2);
|
|
|
|
QVERIFY(root->childFrames().count() == 1);
|
|
QVERIFY(root->childFrames().at(0) == frame);
|
|
QVERIFY(frame->childFrames().count() == 1);
|
|
QVERIFY(frame->childFrames().at(0) == frame2);
|
|
QVERIFY(frame2->childFrames().count() == 0);
|
|
QVERIFY(frame2->parentFrame() == frame);
|
|
QVERIFY(frame2->firstPosition() == 3);
|
|
QVERIFY(frame2->lastPosition() == 4);
|
|
|
|
QVERIFY(frame->firstPosition() == 2);
|
|
QVERIFY(frame->lastPosition() == 6);
|
|
|
|
table->undo();
|
|
|
|
QVERIFY(root->childFrames().count() == 1);
|
|
QVERIFY(root->childFrames().at(0) == frame);
|
|
QVERIFY(frame->childFrames().count() == 0);
|
|
QVERIFY(!frame2);
|
|
|
|
QVERIFY(frame->firstPosition() == 2);
|
|
QVERIFY(frame->lastPosition() == 4);
|
|
}
|
|
|
|
void tst_QTextPieceTable::removeFrameDirect()
|
|
{
|
|
QTextFrameFormat ffmt;
|
|
table->insert(0, "Hello", charFormatIndex);
|
|
|
|
QTextFrame *frame = table->insertFrame(1, 5, ffmt);
|
|
|
|
QVERIFY(frame->parentFrame() == table->rootFrame());
|
|
|
|
const int start = frame->firstPosition() - 1;
|
|
const int end = frame->lastPosition();
|
|
const int length = end - start + 1;
|
|
|
|
table->remove(start, length);
|
|
}
|
|
|
|
void tst_QTextPieceTable::removeWithChildFrame()
|
|
{
|
|
/*
|
|
The piecetable layout is:
|
|
|
|
...
|
|
1 BeginningOfFrame(first frame)
|
|
2 text
|
|
3 BeginningOfFrame(second frame)
|
|
4 text
|
|
5 text
|
|
6 EndOfFrame(second frame)
|
|
7 text
|
|
8 text
|
|
9 EndOfFrame(first frame)
|
|
...
|
|
|
|
The idea is to remove from [2] until [6], basically some trailing text and the second frame.
|
|
In this case frameAt(2) != frameAt(6), so the assertion in remove() needed an adjustement.
|
|
*/
|
|
QTextFrameFormat ffmt;
|
|
table->insert(0, "Hello World", charFormatIndex);
|
|
|
|
QTextFrame *frame = table->insertFrame(1, 6, ffmt);
|
|
QTextFrame *childFrame = table->insertFrame(3, 5, ffmt);
|
|
Q_UNUSED(frame);
|
|
Q_UNUSED(childFrame);
|
|
|
|
// used to give a failing assertion
|
|
table->remove(2, 5);
|
|
QVERIFY(true);
|
|
}
|
|
|
|
void tst_QTextPieceTable::clearWithFrames()
|
|
{
|
|
/*
|
|
The piecetable layout is:
|
|
|
|
...
|
|
1 BeginningOfFrame(first frame)
|
|
2 text
|
|
3 EndOfFrame(first frame)
|
|
4 BeginningOfFrame(second frame)
|
|
5 text
|
|
6 text
|
|
7 EndOfFrame(second frame)
|
|
...
|
|
|
|
The idea is to remove from [1] until [7].
|
|
*/
|
|
QTextFrameFormat ffmt;
|
|
table->insert(0, "Hello World", charFormatIndex);
|
|
|
|
QTextFrame *firstFrame = table->insertFrame(1, 2, ffmt);
|
|
QTextFrame *secondFrame = table->insertFrame(4, 6, ffmt);
|
|
|
|
const int start = firstFrame->firstPosition() - 1;
|
|
const int end = secondFrame->lastPosition();
|
|
const int length = end - start + 1;
|
|
// used to give a failing assertion
|
|
table->remove(start, length);
|
|
QVERIFY(true);
|
|
}
|
|
|
|
QTEST_MAIN(tst_QTextPieceTable)
|
|
|
|
|
|
#include "tst_qtextpiecetable.moc"
|
|
|