qtbindings 4.8.6.0-x86-mingw32 → 4.8.6.1-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/COPYING.LIB.txt +510 -510
- data/COPYING.txt +286 -286
- data/KNOWN_ISSUES.txt +17 -17
- data/bin/2.2/rbrcc.exe +0 -0
- data/bin/2.2/rbuic4.exe +0 -0
- data/bin/2.2/smokeapi.exe +0 -0
- data/bin/2.2/smokedeptool.exe +0 -0
- data/bin/rbqtapi +152 -152
- data/examples/designer/calculatorbuilder/calculatorbuilder.qrc +5 -5
- data/examples/designer/calculatorbuilder/calculatorform.rb +60 -60
- data/examples/designer/calculatorbuilder/calculatorform.ui +299 -299
- data/examples/designer/calculatorbuilder/main.rb +34 -34
- data/examples/designer/calculatorbuilder/makefile +2 -2
- data/examples/designer/calculatorform/calculatorform.rb +46 -46
- data/examples/designer/calculatorform/calculatorform.ui +277 -277
- data/examples/designer/calculatorform/main.rb +32 -32
- data/examples/designer/calculatorform/makefile +3 -3
- data/examples/desktop/screenshot/main.rb +32 -32
- data/examples/desktop/screenshot/screenshot.rb +157 -157
- data/examples/desktop/systray/images/bad.svg +64 -64
- data/examples/desktop/systray/images/heart.svg +55 -55
- data/examples/desktop/systray/images/trash.svg +58 -58
- data/examples/desktop/systray/main.rb +41 -41
- data/examples/desktop/systray/makefile +2 -2
- data/examples/desktop/systray/systray.qrc +7 -7
- data/examples/desktop/systray/window.rb +219 -219
- data/examples/dialogs/complexwizard/complexwizard.rb +140 -140
- data/examples/dialogs/complexwizard/licensewizard.rb +294 -294
- data/examples/dialogs/complexwizard/main.rb +31 -31
- data/examples/dialogs/configdialog/configdialog.rb +109 -109
- data/examples/dialogs/configdialog/main.rb +31 -31
- data/examples/dialogs/configdialog/pages.rb +140 -140
- data/examples/dialogs/extension/finddialog.rb +89 -89
- data/examples/dialogs/extension/main.rb +31 -31
- data/examples/dialogs/findfiles/main.rb +32 -32
- data/examples/dialogs/findfiles/window.rb +177 -177
- data/examples/dialogs/simplewizard/classwizard.rb +374 -374
- data/examples/dialogs/simplewizard/main.rb +31 -31
- data/examples/dialogs/simplewizard/simplewizard.rb +110 -110
- data/examples/dialogs/standarddialogs/dialog.rb +340 -340
- data/examples/dialogs/standarddialogs/main.rb +31 -31
- data/examples/dialogs/tabdialog/main.rb +38 -38
- data/examples/dialogs/tabdialog/tabdialog.rb +178 -178
- data/examples/draganddrop/draggableicons/dragwidget.rb +125 -125
- data/examples/draganddrop/draggableicons/main.rb +41 -41
- data/examples/draganddrop/draggabletext/draglabel.rb +51 -51
- data/examples/draganddrop/draggabletext/dragwidget.rb +94 -94
- data/examples/draganddrop/draggabletext/main.rb +33 -33
- data/examples/draganddrop/draggabletext/words.txt +41 -41
- data/examples/draganddrop/dropsite/dropsitewidget.rb +99 -99
- data/examples/draganddrop/dropsite/dropsitewindow.rb +114 -114
- data/examples/draganddrop/dropsite/main.rb +33 -33
- data/examples/draganddrop/fridgemagnets/draglabel.rb +78 -78
- data/examples/draganddrop/fridgemagnets/dragwidget.rb +130 -130
- data/examples/draganddrop/fridgemagnets/main.rb +33 -33
- data/examples/draganddrop/fridgemagnets/words.txt +48 -48
- data/examples/draganddrop/puzzle/main.rb +33 -33
- data/examples/draganddrop/puzzle/mainwindow.rb +136 -136
- data/examples/draganddrop/puzzle/pieceslist.rb +95 -95
- data/examples/draganddrop/puzzle/puzzlewidget.rb +190 -190
- data/examples/graphicsview/collidingmice/main.rb +53 -53
- data/examples/graphicsview/collidingmice/makefile +2 -2
- data/examples/graphicsview/collidingmice/mice.qrc +5 -5
- data/examples/graphicsview/collidingmice/mouse.rb +176 -176
- data/examples/graphicsview/dragdroprobot/coloritem.rb +86 -86
- data/examples/graphicsview/dragdroprobot/main.rb +57 -57
- data/examples/graphicsview/dragdroprobot/makefile +2 -2
- data/examples/graphicsview/dragdroprobot/robot.qrc +5 -5
- data/examples/graphicsview/dragdroprobot/robot.rb +246 -246
- data/examples/itemviews/chart/chart.qrc +5 -5
- data/examples/itemviews/chart/main.rb +33 -33
- data/examples/itemviews/chart/mainwindow.rb +151 -151
- data/examples/itemviews/chart/makefile +2 -2
- data/examples/itemviews/chart/mydata.cht +8 -8
- data/examples/itemviews/chart/pieview.rb +516 -516
- data/examples/itemviews/chart/qtdata.cht +14 -14
- data/examples/itemviews/dirview/main.rb +39 -39
- data/examples/itemviews/pixelator/imagemodel.rb +51 -51
- data/examples/itemviews/pixelator/images.qrc +5 -5
- data/examples/itemviews/pixelator/main.rb +34 -34
- data/examples/itemviews/pixelator/mainwindow.rb +218 -218
- data/examples/itemviews/pixelator/makefile +3 -3
- data/examples/itemviews/pixelator/pixeldelegate.rb +67 -67
- data/examples/itemviews/puzzle/main.rb +36 -36
- data/examples/itemviews/puzzle/mainwindow.rb +143 -143
- data/examples/itemviews/puzzle/piecesmodel.rb +174 -174
- data/examples/itemviews/puzzle/puzzlewidget.rb +192 -192
- data/examples/itemviews/simpledommodel/domitem.rb +62 -62
- data/examples/itemviews/simpledommodel/dommodel.rb +139 -139
- data/examples/itemviews/simpledommodel/main.rb +33 -33
- data/examples/itemviews/simpledommodel/mainwindow.rb +66 -66
- data/examples/itemviews/simpletreemodel/default.txt +40 -40
- data/examples/itemviews/simpletreemodel/main.rb +41 -41
- data/examples/itemviews/simpletreemodel/makefile +2 -2
- data/examples/itemviews/simpletreemodel/simpletreemodel.qrc +5 -5
- data/examples/itemviews/simpletreemodel/treeitem.rb +67 -67
- data/examples/itemviews/simpletreemodel/treemodel.rb +164 -164
- data/examples/itemviews/sortingmodel/default.txt +40 -40
- data/examples/itemviews/sortingmodel/main.rb +53 -53
- data/examples/itemviews/sortingmodel/treeitem.rb +73 -73
- data/examples/itemviews/sortingmodel/treemodel.rb +166 -166
- data/examples/itemviews/spinboxdelegate/main.rb +47 -47
- data/examples/itemviews/spinboxdelegate/spinboxdelegate.rb +62 -62
- data/examples/killerfilter/killerfilter.rb +55 -55
- data/examples/layouts/basiclayouts/dialog.rb +110 -110
- data/examples/layouts/basiclayouts/main.rb +31 -31
- data/examples/layouts/borderlayout/borderlayout.rb +190 -190
- data/examples/layouts/borderlayout/main.rb +32 -32
- data/examples/layouts/borderlayout/window.rb +52 -52
- data/examples/layouts/flowlayouts/flowlayout.rb +108 -108
- data/examples/layouts/flowlayouts/main.rb +32 -32
- data/examples/layouts/flowlayouts/window.rb +43 -43
- data/examples/mainwindows/application/main.rb +32 -32
- data/examples/mainwindows/application/mainwindow.rb +285 -285
- data/examples/mainwindows/dockwidgets/main.rb +32 -32
- data/examples/mainwindows/dockwidgets/mainwindow.rb +302 -302
- data/examples/mainwindows/mdi/main.rb +32 -32
- data/examples/mainwindows/mdi/mainwindow.rb +363 -363
- data/examples/mainwindows/mdi/mdichild.rb +152 -152
- data/examples/mainwindows/menus/main.rb +32 -32
- data/examples/mainwindows/menus/mainwindow.rb +327 -327
- data/examples/mainwindows/recentfiles/main.rb +32 -32
- data/examples/mainwindows/recentfiles/mainwindow.rb +258 -258
- data/examples/mainwindows/sdi/main.rb +32 -32
- data/examples/mainwindows/sdi/mainwindow.rb +335 -335
- data/examples/network/broadcastreceiver/main.rb +32 -32
- data/examples/network/broadcastreceiver/receiver.rb +64 -64
- data/examples/network/broadcastsender/main.rb +32 -32
- data/examples/network/broadcastsender/sender.rb +72 -72
- data/examples/network/fortuneclient/client.rb +149 -149
- data/examples/network/fortuneclient/main.rb +32 -32
- data/examples/network/fortuneserver/main.rb +32 -32
- data/examples/network/fortuneserver/server.rb +88 -88
- data/examples/network/ftp/ftpwindow.rb +259 -259
- data/examples/network/ftp/main.rb +32 -32
- data/examples/network/http/httpwindow.rb +187 -187
- data/examples/network/http/main.rb +32 -32
- data/examples/network/loopback/dialog.rb +163 -163
- data/examples/network/loopback/main.rb +32 -32
- data/examples/opengl/grabber/glwidget.rb +265 -265
- data/examples/opengl/grabber/main.rb +32 -32
- data/examples/opengl/grabber/mainwindow.rb +189 -189
- data/examples/opengl/hellogl/glwidget.rb +226 -226
- data/examples/opengl/hellogl/main.rb +32 -32
- data/examples/opengl/hellogl/window.rb +66 -66
- data/examples/opengl/textures/glwidget.rb +151 -151
- data/examples/opengl/textures/main.rb +32 -32
- data/examples/opengl/textures/window.rb +77 -77
- data/examples/painting/basicdrawing/main.rb +32 -32
- data/examples/painting/basicdrawing/renderarea.rb +166 -166
- data/examples/painting/basicdrawing/window.rb +215 -215
- data/examples/painting/concentriccircles/circlewidget.rb +88 -88
- data/examples/painting/concentriccircles/main.rb +32 -32
- data/examples/painting/concentriccircles/window.rb +72 -72
- data/examples/painting/fontsampler/main.rb +32 -32
- data/examples/painting/fontsampler/mainwindow.rb +369 -369
- data/examples/painting/fontsampler/mainwindowbase.ui +136 -136
- data/examples/painting/fontsampler/makefile +8 -8
- data/examples/painting/fontsampler/previewdialog.rb +257 -257
- data/examples/painting/fontsampler/previewdialogbase.ui +224 -224
- data/examples/painting/fontsampler/previewlabel.rb +43 -43
- data/examples/painting/imagecomposition/imagecomposer.rb +152 -152
- data/examples/painting/imagecomposition/imagecomposition.qrc +6 -6
- data/examples/painting/imagecomposition/main.rb +33 -33
- data/examples/painting/imagecomposition/makefile +2 -2
- data/examples/painting/painterpaths/main.rb +32 -32
- data/examples/painting/painterpaths/renderarea.rb +97 -97
- data/examples/painting/painterpaths/window.rb +247 -247
- data/examples/painting/svgviewer/files/bubbles.svg +212 -212
- data/examples/painting/svgviewer/files/cubic.svg +77 -77
- data/examples/painting/svgviewer/files/spheres.svg +79 -79
- data/examples/painting/svgviewer/main.rb +38 -38
- data/examples/painting/svgviewer/mainwindow.rb +99 -99
- data/examples/painting/svgviewer/makefile +2 -2
- data/examples/painting/svgviewer/svgview.rb +156 -156
- data/examples/painting/svgviewer/svgviewer.qrc +6 -6
- data/examples/painting/svgviewer/svgwindow.rb +87 -87
- data/examples/painting/transformations/main.rb +32 -32
- data/examples/painting/transformations/renderarea.rb +127 -127
- data/examples/painting/transformations/window.rb +153 -153
- data/examples/passivepopup/passivepopup.rb +38 -38
- data/examples/qdbus/chat/chat.rb +146 -146
- data/examples/qdbus/chat/chat_adaptor.rb +12 -12
- data/examples/qdbus/chat/chat_interface.rb +13 -13
- data/examples/qdbus/chat/chatmainwindow.ui +184 -184
- data/examples/qdbus/chat/chatsetnickname.ui +145 -145
- data/examples/qdbus/chat/makefile +8 -8
- data/examples/qdbus/complexpingpong/complexping.rb +92 -92
- data/examples/qdbus/complexpingpong/complexpong.rb +83 -83
- data/examples/qdbus/complexpingpong/ping-common.rb +1 -1
- data/examples/qdbus/listnames/listnames.rb +69 -69
- data/examples/qdbus/pingpong/ping-common.rb +1 -1
- data/examples/qdbus/pingpong/ping.rb +52 -52
- data/examples/qdbus/pingpong/pong.rb +55 -55
- data/examples/qdbus/remotecontrolledcar/car/car.rb +151 -151
- data/examples/qdbus/remotecontrolledcar/car/main.rb +50 -50
- data/examples/qdbus/remotecontrolledcar/controller/controller.rb +66 -66
- data/examples/qdbus/remotecontrolledcar/controller/controller.ui +61 -61
- data/examples/qdbus/remotecontrolledcar/controller/main.rb +32 -32
- data/examples/qdbus/remotecontrolledcar/controller/makefile +2 -2
- data/examples/qtscribble/scribble.rb +270 -270
- data/examples/richtext/calendar/main.rb +33 -33
- data/examples/richtext/calendar/mainwindow.rb +173 -173
- data/examples/richtext/orderform/detailsdialog.rb +130 -130
- data/examples/richtext/orderform/main.rb +34 -34
- data/examples/richtext/orderform/mainwindow.rb +194 -194
- data/examples/richtext/syntaxhighlighter/examples/example +79 -79
- data/examples/richtext/syntaxhighlighter/highlighter.rb +90 -90
- data/examples/richtext/syntaxhighlighter/main.rb +34 -34
- data/examples/richtext/syntaxhighlighter/mainwindow.rb +105 -105
- data/examples/ruboids/LICENSE.txt +58 -58
- data/examples/ruboids/Manifest +26 -26
- data/examples/ruboids/README +53 -53
- data/examples/ruboids/TODO +29 -29
- data/examples/ruboids/boids.properties +33 -33
- data/examples/ruboids/generateManifest.rb +42 -42
- data/examples/ruboids/release.rb +152 -152
- data/examples/ruboids/ruboids/Boid.rb +141 -141
- data/examples/ruboids/ruboids/BoidView.rb +159 -159
- data/examples/ruboids/ruboids/Camera.rb +24 -24
- data/examples/ruboids/ruboids/CameraDialog.rb +218 -218
- data/examples/ruboids/ruboids/Canvas.rb +143 -143
- data/examples/ruboids/ruboids/Cloud.rb +61 -61
- data/examples/ruboids/ruboids/CloudView.rb +54 -54
- data/examples/ruboids/ruboids/Flock.rb +47 -47
- data/examples/ruboids/ruboids/Graphics.rb +278 -278
- data/examples/ruboids/ruboids/Params.rb +87 -87
- data/examples/ruboids/ruboids/Point.rb +153 -153
- data/examples/ruboids/ruboids/Thing.rb +34 -34
- data/examples/ruboids/ruboids/Triangle.rb +21 -21
- data/examples/ruboids/ruboids/View.rb +88 -88
- data/examples/ruboids/ruboids/World.rb +82 -82
- data/examples/ruboids/ruboids/WorldWindow.rb +52 -52
- data/examples/ruboids/ruboids/info.rb +12 -12
- data/examples/ruboids/ruboids/ruboids.rb +29 -29
- data/examples/threading/main_thread.rb +19 -19
- data/examples/tutorial/t1/t1.rb +10 -10
- data/examples/tutorial/t10/cannon.rb +72 -72
- data/examples/tutorial/t10/lcdrange.rb +45 -45
- data/examples/tutorial/t10/t10.rb +55 -55
- data/examples/tutorial/t11/cannon.rb +124 -124
- data/examples/tutorial/t11/lcdrange.rb +45 -45
- data/examples/tutorial/t11/t11.rb +65 -65
- data/examples/tutorial/t12/cannon.rb +158 -158
- data/examples/tutorial/t12/lcdrange.rb +59 -59
- data/examples/tutorial/t12/t12.rb +66 -66
- data/examples/tutorial/t13/cannon.rb +208 -208
- data/examples/tutorial/t13/gamebrd.rb +113 -113
- data/examples/tutorial/t13/lcdrange.rb +60 -60
- data/examples/tutorial/t13/t13.rb +11 -11
- data/examples/tutorial/t14/cannon.rb +263 -263
- data/examples/tutorial/t14/gamebrd.rb +123 -123
- data/examples/tutorial/t14/lcdrange.rb +63 -63
- data/examples/tutorial/t14/t14.rb +11 -11
- data/examples/tutorial/t2/t2.rb +16 -16
- data/examples/tutorial/t3/t3.rb +18 -18
- data/examples/tutorial/t4/t4.rb +25 -25
- data/examples/tutorial/t5/t5.rb +37 -37
- data/examples/tutorial/t6/t6.rb +52 -52
- data/examples/tutorial/t7/lcdrange.rb +32 -32
- data/examples/tutorial/t7/t7.rb +42 -42
- data/examples/tutorial/t8/cannon.rb +38 -38
- data/examples/tutorial/t8/lcdrange.rb +45 -45
- data/examples/tutorial/t8/t8.rb +43 -43
- data/examples/tutorial/t9/cannon.rb +45 -45
- data/examples/tutorial/t9/lcdrange.rb +46 -46
- data/examples/tutorial/t9/t9.rb +43 -43
- data/examples/widgets/analogclock/analogclock.rb +94 -94
- data/examples/widgets/analogclock/main.rb +9 -9
- data/examples/widgets/calculator/button.rb +45 -45
- data/examples/widgets/calculator/calculator.rb +382 -382
- data/examples/widgets/calculator/main.rb +32 -32
- data/examples/widgets/charactermap/characterwidget.rb +109 -109
- data/examples/widgets/charactermap/main.rb +32 -32
- data/examples/widgets/charactermap/mainwindow.rb +118 -118
- data/examples/widgets/digitalclock/digitalclock.rb +30 -30
- data/examples/widgets/digitalclock/main.rb +9 -9
- data/examples/widgets/groupbox/main.rb +32 -32
- data/examples/widgets/groupbox/window.rb +134 -134
- data/examples/widgets/icons/iconpreviewarea.rb +110 -110
- data/examples/widgets/icons/iconsizespinbox.rb +39 -39
- data/examples/widgets/icons/imagedelegate.rb +73 -73
- data/examples/widgets/icons/main.rb +32 -32
- data/examples/widgets/icons/mainwindow.rb +351 -351
- data/examples/widgets/imageviewer/imageviewer.rb +219 -219
- data/examples/widgets/imageviewer/main.rb +32 -32
- data/examples/widgets/lineedits/main.rb +32 -32
- data/examples/widgets/lineedits/window.rb +199 -199
- data/examples/widgets/movie/main.rb +32 -32
- data/examples/widgets/movie/movieplayer.rb +201 -201
- data/examples/widgets/screenshot/main.rb +32 -32
- data/examples/widgets/screenshot/screenshot.rb +154 -154
- data/examples/widgets/scribble/main.rb +32 -32
- data/examples/widgets/scribble/mainwindow.rb +202 -202
- data/examples/widgets/scribble/scribblearea.rb +154 -154
- data/examples/widgets/sliders/main.rb +32 -32
- data/examples/widgets/sliders/slidersgroup.rb +97 -97
- data/examples/widgets/sliders/window.rb +124 -124
- data/examples/widgets/spinboxes/main.rb +32 -32
- data/examples/widgets/spinboxes/window.rb +213 -213
- data/examples/widgets/tetrix/main.rb +33 -33
- data/examples/widgets/tetrix/tetrixboard.rb +346 -346
- data/examples/widgets/tetrix/tetrixpiece.rb +135 -135
- data/examples/widgets/tetrix/tetrixwindow.rb +88 -88
- data/examples/widgets/tooltips/main.rb +32 -32
- data/examples/widgets/tooltips/shapeitem.rb +31 -31
- data/examples/widgets/tooltips/sortingbox.rb +222 -222
- data/examples/widgets/wiggly/dialog.rb +48 -48
- data/examples/widgets/wiggly/main.rb +9 -9
- data/examples/widgets/wiggly/wigglywidget.rb +75 -75
- data/examples/widgets/windowflags/controllerwindow.rb +195 -195
- data/examples/widgets/windowflags/main.rb +32 -32
- data/examples/widgets/windowflags/previewwindow.rb +103 -103
- data/examples/xml/dombookmarks/frank.xbel +230 -230
- data/examples/xml/dombookmarks/jennifer.xbel +93 -93
- data/examples/xml/dombookmarks/main.rb +34 -34
- data/examples/xml/dombookmarks/mainwindow.rb +129 -129
- data/examples/xml/dombookmarks/xbeltree.rb +172 -172
- data/examples/xml/saxbookmarks/frank.xbel +230 -230
- data/examples/xml/saxbookmarks/jennifer.xbel +93 -93
- data/examples/xml/saxbookmarks/main.rb +34 -34
- data/examples/xml/saxbookmarks/mainwindow.rb +144 -144
- data/examples/xml/saxbookmarks/xbelgenerator.rb +95 -95
- data/examples/xml/saxbookmarks/xbelhandler.rb +122 -122
- data/extconf.rb +2 -2
- data/lib/2.0/libqtruby4shared.dll +0 -0
- data/lib/2.0/libsmokebase.dll +0 -0
- data/lib/2.0/libsmokeqtcore.dll +0 -0
- data/lib/2.0/libsmokeqtdeclarative.dll +0 -0
- data/lib/2.0/libsmokeqtgui.dll +0 -0
- data/lib/2.0/libsmokeqthelp.dll +0 -0
- data/lib/2.0/libsmokeqtmultimedia.dll +0 -0
- data/lib/2.0/libsmokeqtnetwork.dll +0 -0
- data/lib/2.0/libsmokeqtopengl.dll +0 -0
- data/lib/2.0/libsmokeqtsql.dll +0 -0
- data/lib/2.0/libsmokeqtsvg.dll +0 -0
- data/lib/2.0/libsmokeqttest.dll +0 -0
- data/lib/2.0/libsmokeqtuitools.dll +0 -0
- data/lib/2.0/libsmokeqtwebkit.dll +0 -0
- data/lib/2.0/libsmokeqtxml.dll +0 -0
- data/lib/2.0/libsmokeqtxmlpatterns.dll +0 -0
- data/lib/2.0/qtdeclarative.so +0 -0
- data/lib/2.0/qtruby4.so +0 -0
- data/lib/2.0/qtscript.so +0 -0
- data/lib/2.0/qttest.so +0 -0
- data/lib/2.0/qtuitools.so +0 -0
- data/lib/2.0/qtwebkit.so +0 -0
- data/lib/2.1/libqtruby4shared.dll +0 -0
- data/lib/2.1/libsmokebase.dll +0 -0
- data/lib/2.1/libsmokeqtcore.dll +0 -0
- data/lib/2.1/libsmokeqtdeclarative.dll +0 -0
- data/lib/2.1/libsmokeqtgui.dll +0 -0
- data/lib/2.1/libsmokeqthelp.dll +0 -0
- data/lib/2.1/libsmokeqtmultimedia.dll +0 -0
- data/lib/2.1/libsmokeqtnetwork.dll +0 -0
- data/lib/2.1/libsmokeqtopengl.dll +0 -0
- data/lib/2.1/libsmokeqtscript.dll +0 -0
- data/lib/2.1/libsmokeqtsql.dll +0 -0
- data/lib/2.1/libsmokeqtsvg.dll +0 -0
- data/lib/2.1/libsmokeqttest.dll +0 -0
- data/lib/2.1/libsmokeqtwebkit.dll +0 -0
- data/lib/2.1/libsmokeqtxml.dll +0 -0
- data/lib/2.1/libsmokeqtxmlpatterns.dll +0 -0
- data/lib/2.1/qtdeclarative.so +0 -0
- data/lib/2.1/qtruby4.so +0 -0
- data/lib/2.1/qtscript.so +0 -0
- data/lib/2.1/qttest.so +0 -0
- data/lib/2.1/qtuitools.so +0 -0
- data/lib/2.1/qtwebkit.so +0 -0
- data/lib/2.2/libqtruby4shared.dll +0 -0
- data/lib/2.2/libsmokebase.dll +0 -0
- data/lib/2.2/libsmokeqtcore.dll +0 -0
- data/lib/2.2/libsmokeqtdeclarative.dll +0 -0
- data/lib/2.2/libsmokeqtgui.dll +0 -0
- data/lib/2.2/libsmokeqthelp.dll +0 -0
- data/lib/2.2/libsmokeqtmultimedia.dll +0 -0
- data/lib/2.2/libsmokeqtnetwork.dll +0 -0
- data/lib/2.2/libsmokeqtopengl.dll +0 -0
- data/lib/2.2/libsmokeqtscript.dll +0 -0
- data/lib/2.2/libsmokeqtsql.dll +0 -0
- data/lib/2.2/libsmokeqtsvg.dll +0 -0
- data/lib/2.2/libsmokeqttest.dll +0 -0
- data/lib/2.2/libsmokeqtuitools.dll +0 -0
- data/lib/2.2/libsmokeqtwebkit.dll +0 -0
- data/lib/2.2/libsmokeqtxml.dll +0 -0
- data/lib/2.2/libsmokeqtxmlpatterns.dll +0 -0
- data/lib/2.2/qtdeclarative.so +0 -0
- data/lib/2.2/qtruby4.so +0 -0
- data/lib/2.2/qtscript.so +0 -0
- data/lib/2.2/qttest.so +0 -0
- data/lib/2.2/qtuitools.so +0 -0
- data/lib/2.2/qtwebkit.so +0 -0
- data/lib/Qt.rb +1 -1
- data/lib/Qt/qtruby4.rb +16 -0
- data/lib/Qt4.rb +111 -111
- data/lib/qtbindings_qt_version.rb +2 -0
- data/lib/qtbindings_version.rb +2 -2
- data/lib/qtdeclarative/qtdeclarative.rb +17 -17
- data/lib/qtscript/qtscript.rb +40 -40
- data/lib/qttest/qttest.rb +166 -166
- data/lib/qtuitools/qtuitools.rb +17 -17
- data/lib/qtwebkit/qtwebkit.rb +17 -17
- metadata +31 -4
- data/README.txt +0 -148
@@ -1,5 +1,5 @@
|
|
1
|
-
<!DOCTYPE RCC><RCC version="1.0">
|
2
|
-
<qresource prefix="/Charts" >
|
3
|
-
<file>qtdata.cht</file>
|
4
|
-
</qresource>
|
5
|
-
</RCC>
|
1
|
+
<!DOCTYPE RCC><RCC version="1.0">
|
2
|
+
<qresource prefix="/Charts" >
|
3
|
+
<file>qtdata.cht</file>
|
4
|
+
</qresource>
|
5
|
+
</RCC>
|
@@ -1,33 +1,33 @@
|
|
1
|
-
=begin
|
2
|
-
**
|
3
|
-
** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
|
4
|
-
**
|
5
|
-
** This file is part of the example classes of the Qt Toolkit.
|
6
|
-
**
|
7
|
-
** This file may be used under the terms of the GNU General Public
|
8
|
-
** License version 2.0 as published by the Free Software Foundation
|
9
|
-
** and appearing in the file LICENSE.GPL included in the packaging of
|
10
|
-
** this file. Please review the following information to ensure GNU
|
11
|
-
** General Public Licensing requirements will be met:
|
12
|
-
** http://www.trolltech.com/products/qt/opensource.html
|
13
|
-
**
|
14
|
-
** If you are unsure which license is appropriate for your use, please
|
15
|
-
** review the following information:
|
16
|
-
** http://www.trolltech.com/products/qt/licensing.html or contact the
|
17
|
-
** sales department at sales@trolltech.com.
|
18
|
-
**
|
19
|
-
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
20
|
-
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
21
|
-
**
|
22
|
-
|
23
|
-
** Translated to QtRuby by Richard Dale
|
24
|
-
=end
|
25
|
-
|
26
|
-
require 'Qt'
|
27
|
-
require './qrc_chart.rb'
|
28
|
-
require './mainwindow.rb'
|
29
|
-
|
30
|
-
app = Qt::Application.new(ARGV)
|
31
|
-
window = MainWindow.new
|
32
|
-
window.show
|
33
|
-
app.exec
|
1
|
+
=begin
|
2
|
+
**
|
3
|
+
** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
|
4
|
+
**
|
5
|
+
** This file is part of the example classes of the Qt Toolkit.
|
6
|
+
**
|
7
|
+
** This file may be used under the terms of the GNU General Public
|
8
|
+
** License version 2.0 as published by the Free Software Foundation
|
9
|
+
** and appearing in the file LICENSE.GPL included in the packaging of
|
10
|
+
** this file. Please review the following information to ensure GNU
|
11
|
+
** General Public Licensing requirements will be met:
|
12
|
+
** http://www.trolltech.com/products/qt/opensource.html
|
13
|
+
**
|
14
|
+
** If you are unsure which license is appropriate for your use, please
|
15
|
+
** review the following information:
|
16
|
+
** http://www.trolltech.com/products/qt/licensing.html or contact the
|
17
|
+
** sales department at sales@trolltech.com.
|
18
|
+
**
|
19
|
+
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
20
|
+
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
21
|
+
**
|
22
|
+
|
23
|
+
** Translated to QtRuby by Richard Dale
|
24
|
+
=end
|
25
|
+
|
26
|
+
require 'Qt'
|
27
|
+
require './qrc_chart.rb'
|
28
|
+
require './mainwindow.rb'
|
29
|
+
|
30
|
+
app = Qt::Application.new(ARGV)
|
31
|
+
window = MainWindow.new
|
32
|
+
window.show
|
33
|
+
app.exec
|
@@ -1,151 +1,151 @@
|
|
1
|
-
=begin
|
2
|
-
**
|
3
|
-
** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
|
4
|
-
**
|
5
|
-
** This file is part of the example classes of the Qt Toolkit.
|
6
|
-
**
|
7
|
-
** This file may be used under the terms of the GNU General Public
|
8
|
-
** License version 2.0 as published by the Free Software Foundation
|
9
|
-
** and appearing in the file LICENSE.GPL included in the packaging of
|
10
|
-
** this file. Please review the following information to ensure GNU
|
11
|
-
** General Public Licensing requirements will be met:
|
12
|
-
** http://www.trolltech.com/products/qt/opensource.html
|
13
|
-
**
|
14
|
-
** If you are unsure which license is appropriate for your use, please
|
15
|
-
** review the following information:
|
16
|
-
** http://www.trolltech.com/products/qt/licensing.html or contact the
|
17
|
-
** sales department at sales@trolltech.com.
|
18
|
-
**
|
19
|
-
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
20
|
-
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
21
|
-
**
|
22
|
-
|
23
|
-
** Translated to QtRuby by Richard Dale
|
24
|
-
=end
|
25
|
-
|
26
|
-
require './pieview.rb'
|
27
|
-
|
28
|
-
class MainWindow < Qt::MainWindow
|
29
|
-
|
30
|
-
slots 'openFile(const QString)', 'openFile()',
|
31
|
-
'saveFile()'
|
32
|
-
|
33
|
-
def initialize()
|
34
|
-
super
|
35
|
-
fileMenu = Qt::Menu.new(tr("&File"), self)
|
36
|
-
openAction = fileMenu.addAction(tr("&Open"))
|
37
|
-
openAction.shortcut = Qt::KeySequence.new(tr("Ctrl+O"))
|
38
|
-
saveAction = fileMenu.addAction(tr("&Save"))
|
39
|
-
saveAction.shortcut = Qt::KeySequence.new(tr("Ctrl+S"))
|
40
|
-
quitAction = fileMenu.addAction(tr("E&xit"))
|
41
|
-
quitAction.shortcut = Qt::KeySequence.new(tr("Ctrl+Q"))
|
42
|
-
|
43
|
-
setupModel()
|
44
|
-
setupViews()
|
45
|
-
|
46
|
-
connect(openAction, SIGNAL('triggered()'), self, SLOT('openFile()'))
|
47
|
-
connect(saveAction, SIGNAL('triggered()'), self, SLOT('saveFile()'))
|
48
|
-
connect(quitAction, SIGNAL('triggered()'), $qApp, SLOT('quit()'))
|
49
|
-
|
50
|
-
menuBar().addMenu(fileMenu)
|
51
|
-
statusBar()
|
52
|
-
|
53
|
-
openFile(":/Charts/qtdata.cht")
|
54
|
-
|
55
|
-
setWindowTitle(tr("Chart"))
|
56
|
-
resize(640, 480)
|
57
|
-
end
|
58
|
-
|
59
|
-
def setupModel()
|
60
|
-
@model = Qt::StandardItemModel.new(8, 2, self)
|
61
|
-
@model.setHeaderData(0, Qt::Horizontal, Qt::Variant.new(tr("Label")))
|
62
|
-
@model.setHeaderData(1, Qt::Horizontal, Qt::Variant.new(tr("Quantity")))
|
63
|
-
end
|
64
|
-
|
65
|
-
def setupViews()
|
66
|
-
splitter = Qt::Splitter.new
|
67
|
-
table = Qt::TableView.new
|
68
|
-
@pieChart = PieView.new
|
69
|
-
splitter.addWidget(table)
|
70
|
-
splitter.addWidget(@pieChart)
|
71
|
-
splitter.setStretchFactor(0, 0)
|
72
|
-
splitter.setStretchFactor(1, 1)
|
73
|
-
|
74
|
-
table.model = @model
|
75
|
-
@pieChart.model = @model
|
76
|
-
|
77
|
-
@selectionModel = Qt::ItemSelectionModel.new(@model)
|
78
|
-
table.selectionModel = @selectionModel
|
79
|
-
@pieChart.selectionModel = @selectionModel
|
80
|
-
|
81
|
-
setCentralWidget(splitter)
|
82
|
-
end
|
83
|
-
|
84
|
-
def openFile(path = nil)
|
85
|
-
if path.nil?
|
86
|
-
fileName = Qt::FileDialog.getOpenFileName(self, tr("Choose a data file"),
|
87
|
-
"", "*.cht")
|
88
|
-
else
|
89
|
-
fileName = path
|
90
|
-
end
|
91
|
-
|
92
|
-
if !fileName.nil?
|
93
|
-
file = Qt::File.new(fileName)
|
94
|
-
|
95
|
-
if file.open(Qt::File::ReadOnly | Qt::File::Text)
|
96
|
-
stream = Qt::TextStream.new(file)
|
97
|
-
|
98
|
-
@model.removeRows(0, @model.rowCount(Qt::ModelIndex.new), Qt::ModelIndex.new)
|
99
|
-
|
100
|
-
row = 0
|
101
|
-
line = stream.readLine()
|
102
|
-
while !line.nil?
|
103
|
-
@model.insertRows(row, 1, Qt::ModelIndex.new())
|
104
|
-
|
105
|
-
pieces = line.split(",")
|
106
|
-
|
107
|
-
@model.setData(@model.index(row, 0, Qt::ModelIndex.new),
|
108
|
-
Qt::Variant.new(pieces[0]))
|
109
|
-
@model.setData(@model.index(row, 1, Qt::ModelIndex.new),
|
110
|
-
Qt::Variant.new(pieces[1]))
|
111
|
-
@model.setData(@model.index(row, 0, Qt::ModelIndex.new),
|
112
|
-
qVariantFromValue(Qt::Color.new(pieces[2])), Qt::DecorationRole)
|
113
|
-
row += 1
|
114
|
-
|
115
|
-
line = stream.readLine()
|
116
|
-
end
|
117
|
-
|
118
|
-
file.close()
|
119
|
-
statusBar().showMessage(tr("Loaded %s" % fileName), 2000)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def saveFile()
|
125
|
-
fileName = Qt::FileDialog.getSaveFileName(self,
|
126
|
-
tr("Save file as"), "", "*.cht")
|
127
|
-
|
128
|
-
if !fileName.nil?
|
129
|
-
file = Qt::File.new(fileName)
|
130
|
-
stream = Qt::TextStream.new(file)
|
131
|
-
|
132
|
-
if file.open(Qt::File::WriteOnly | Qt::File::Text)
|
133
|
-
(0...@model.rowCount(Qt::ModelIndex.new)).each do |row|
|
134
|
-
pieces = []
|
135
|
-
|
136
|
-
pieces.push(@model.data(@model.index(row, 0, Qt::ModelIndex.new),
|
137
|
-
Qt::DisplayRole).toString)
|
138
|
-
pieces.push(@model.data(@model.index(row, 1, Qt::ModelIndex.new),
|
139
|
-
Qt::DisplayRole).toString)
|
140
|
-
pieces.push(@model.data(@model.index(row, 0, Qt::ModelIndex.new),
|
141
|
-
Qt::DecorationRole).toString)
|
142
|
-
|
143
|
-
stream << pieces.join(",") << "\n"
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
file.close()
|
148
|
-
statusBar().showMessage(tr("Saved %s" % fileName), 2000)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
1
|
+
=begin
|
2
|
+
**
|
3
|
+
** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
|
4
|
+
**
|
5
|
+
** This file is part of the example classes of the Qt Toolkit.
|
6
|
+
**
|
7
|
+
** This file may be used under the terms of the GNU General Public
|
8
|
+
** License version 2.0 as published by the Free Software Foundation
|
9
|
+
** and appearing in the file LICENSE.GPL included in the packaging of
|
10
|
+
** this file. Please review the following information to ensure GNU
|
11
|
+
** General Public Licensing requirements will be met:
|
12
|
+
** http://www.trolltech.com/products/qt/opensource.html
|
13
|
+
**
|
14
|
+
** If you are unsure which license is appropriate for your use, please
|
15
|
+
** review the following information:
|
16
|
+
** http://www.trolltech.com/products/qt/licensing.html or contact the
|
17
|
+
** sales department at sales@trolltech.com.
|
18
|
+
**
|
19
|
+
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
20
|
+
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
21
|
+
**
|
22
|
+
|
23
|
+
** Translated to QtRuby by Richard Dale
|
24
|
+
=end
|
25
|
+
|
26
|
+
require './pieview.rb'
|
27
|
+
|
28
|
+
class MainWindow < Qt::MainWindow
|
29
|
+
|
30
|
+
slots 'openFile(const QString)', 'openFile()',
|
31
|
+
'saveFile()'
|
32
|
+
|
33
|
+
def initialize()
|
34
|
+
super
|
35
|
+
fileMenu = Qt::Menu.new(tr("&File"), self)
|
36
|
+
openAction = fileMenu.addAction(tr("&Open"))
|
37
|
+
openAction.shortcut = Qt::KeySequence.new(tr("Ctrl+O"))
|
38
|
+
saveAction = fileMenu.addAction(tr("&Save"))
|
39
|
+
saveAction.shortcut = Qt::KeySequence.new(tr("Ctrl+S"))
|
40
|
+
quitAction = fileMenu.addAction(tr("E&xit"))
|
41
|
+
quitAction.shortcut = Qt::KeySequence.new(tr("Ctrl+Q"))
|
42
|
+
|
43
|
+
setupModel()
|
44
|
+
setupViews()
|
45
|
+
|
46
|
+
connect(openAction, SIGNAL('triggered()'), self, SLOT('openFile()'))
|
47
|
+
connect(saveAction, SIGNAL('triggered()'), self, SLOT('saveFile()'))
|
48
|
+
connect(quitAction, SIGNAL('triggered()'), $qApp, SLOT('quit()'))
|
49
|
+
|
50
|
+
menuBar().addMenu(fileMenu)
|
51
|
+
statusBar()
|
52
|
+
|
53
|
+
openFile(":/Charts/qtdata.cht")
|
54
|
+
|
55
|
+
setWindowTitle(tr("Chart"))
|
56
|
+
resize(640, 480)
|
57
|
+
end
|
58
|
+
|
59
|
+
def setupModel()
|
60
|
+
@model = Qt::StandardItemModel.new(8, 2, self)
|
61
|
+
@model.setHeaderData(0, Qt::Horizontal, Qt::Variant.new(tr("Label")))
|
62
|
+
@model.setHeaderData(1, Qt::Horizontal, Qt::Variant.new(tr("Quantity")))
|
63
|
+
end
|
64
|
+
|
65
|
+
def setupViews()
|
66
|
+
splitter = Qt::Splitter.new
|
67
|
+
table = Qt::TableView.new
|
68
|
+
@pieChart = PieView.new
|
69
|
+
splitter.addWidget(table)
|
70
|
+
splitter.addWidget(@pieChart)
|
71
|
+
splitter.setStretchFactor(0, 0)
|
72
|
+
splitter.setStretchFactor(1, 1)
|
73
|
+
|
74
|
+
table.model = @model
|
75
|
+
@pieChart.model = @model
|
76
|
+
|
77
|
+
@selectionModel = Qt::ItemSelectionModel.new(@model)
|
78
|
+
table.selectionModel = @selectionModel
|
79
|
+
@pieChart.selectionModel = @selectionModel
|
80
|
+
|
81
|
+
setCentralWidget(splitter)
|
82
|
+
end
|
83
|
+
|
84
|
+
def openFile(path = nil)
|
85
|
+
if path.nil?
|
86
|
+
fileName = Qt::FileDialog.getOpenFileName(self, tr("Choose a data file"),
|
87
|
+
"", "*.cht")
|
88
|
+
else
|
89
|
+
fileName = path
|
90
|
+
end
|
91
|
+
|
92
|
+
if !fileName.nil?
|
93
|
+
file = Qt::File.new(fileName)
|
94
|
+
|
95
|
+
if file.open(Qt::File::ReadOnly | Qt::File::Text)
|
96
|
+
stream = Qt::TextStream.new(file)
|
97
|
+
|
98
|
+
@model.removeRows(0, @model.rowCount(Qt::ModelIndex.new), Qt::ModelIndex.new)
|
99
|
+
|
100
|
+
row = 0
|
101
|
+
line = stream.readLine()
|
102
|
+
while !line.nil?
|
103
|
+
@model.insertRows(row, 1, Qt::ModelIndex.new())
|
104
|
+
|
105
|
+
pieces = line.split(",")
|
106
|
+
|
107
|
+
@model.setData(@model.index(row, 0, Qt::ModelIndex.new),
|
108
|
+
Qt::Variant.new(pieces[0]))
|
109
|
+
@model.setData(@model.index(row, 1, Qt::ModelIndex.new),
|
110
|
+
Qt::Variant.new(pieces[1]))
|
111
|
+
@model.setData(@model.index(row, 0, Qt::ModelIndex.new),
|
112
|
+
qVariantFromValue(Qt::Color.new(pieces[2])), Qt::DecorationRole)
|
113
|
+
row += 1
|
114
|
+
|
115
|
+
line = stream.readLine()
|
116
|
+
end
|
117
|
+
|
118
|
+
file.close()
|
119
|
+
statusBar().showMessage(tr("Loaded %s" % fileName), 2000)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def saveFile()
|
125
|
+
fileName = Qt::FileDialog.getSaveFileName(self,
|
126
|
+
tr("Save file as"), "", "*.cht")
|
127
|
+
|
128
|
+
if !fileName.nil?
|
129
|
+
file = Qt::File.new(fileName)
|
130
|
+
stream = Qt::TextStream.new(file)
|
131
|
+
|
132
|
+
if file.open(Qt::File::WriteOnly | Qt::File::Text)
|
133
|
+
(0...@model.rowCount(Qt::ModelIndex.new)).each do |row|
|
134
|
+
pieces = []
|
135
|
+
|
136
|
+
pieces.push(@model.data(@model.index(row, 0, Qt::ModelIndex.new),
|
137
|
+
Qt::DisplayRole).toString)
|
138
|
+
pieces.push(@model.data(@model.index(row, 1, Qt::ModelIndex.new),
|
139
|
+
Qt::DisplayRole).toString)
|
140
|
+
pieces.push(@model.data(@model.index(row, 0, Qt::ModelIndex.new),
|
141
|
+
Qt::DecorationRole).toString)
|
142
|
+
|
143
|
+
stream << pieces.join(",") << "\n"
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
file.close()
|
148
|
+
statusBar().showMessage(tr("Saved %s" % fileName), 2000)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
@@ -1,2 +1,2 @@
|
|
1
|
-
all:
|
2
|
-
rbrcc -name chart chart.qrc -o qrc_chart.rb
|
1
|
+
all:
|
2
|
+
rbrcc -name chart chart.qrc -o qrc_chart.rb
|
@@ -1,8 +1,8 @@
|
|
1
|
-
London,4,red
|
2
|
-
Stockholm,5,pink
|
3
|
-
Paris,2,lightgreen
|
4
|
-
Rome,11,green
|
5
|
-
Lisbon,9,blue
|
6
|
-
Madrid,8,lightblue
|
7
|
-
Berlin,6,magenta
|
8
|
-
Vienna,7,purple
|
1
|
+
London,4,red
|
2
|
+
Stockholm,5,pink
|
3
|
+
Paris,2,lightgreen
|
4
|
+
Rome,11,green
|
5
|
+
Lisbon,9,blue
|
6
|
+
Madrid,8,lightblue
|
7
|
+
Berlin,6,magenta
|
8
|
+
Vienna,7,purple
|
@@ -1,516 +1,516 @@
|
|
1
|
-
=begin
|
2
|
-
**
|
3
|
-
** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
|
4
|
-
**
|
5
|
-
** This file is part of the example classes of the Qt Toolkit.
|
6
|
-
**
|
7
|
-
** This file may be used under the terms of the GNU General Public
|
8
|
-
** License version 2.0 as published by the Free Software Foundation
|
9
|
-
** and appearing in the file LICENSE.GPL included in the packaging of
|
10
|
-
** this file. Please review the following information to ensure GNU
|
11
|
-
** General Public Licensing requirements will be met:
|
12
|
-
** http://www.trolltech.com/products/qt/opensource.html
|
13
|
-
**
|
14
|
-
** If you are unsure which license is appropriate for your use, please
|
15
|
-
** review the following information:
|
16
|
-
** http://www.trolltech.com/products/qt/licensing.html or contact the
|
17
|
-
** sales department at sales@trolltech.com.
|
18
|
-
**
|
19
|
-
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
20
|
-
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
21
|
-
**
|
22
|
-
|
23
|
-
** Translated to QtRuby by Richard Dale
|
24
|
-
=end
|
25
|
-
|
26
|
-
class PieView < Qt::AbstractItemView
|
27
|
-
|
28
|
-
slots 'dataChanged(const QModelIndex &, const QModelIndex &)',
|
29
|
-
'rowsInserted(const QModelIndex &, int, int)',
|
30
|
-
'rowsAboutToBeRemoved(const QModelIndex &, int, int)'
|
31
|
-
|
32
|
-
def initialize(parent = nil)
|
33
|
-
super(parent)
|
34
|
-
horizontalScrollBar.range = 0..0
|
35
|
-
verticalScrollBar.range = 0..0
|
36
|
-
|
37
|
-
@margin = 8
|
38
|
-
@totalSize = 300
|
39
|
-
@pieSize = @totalSize - 2*@margin
|
40
|
-
@validItems = 0
|
41
|
-
@totalValue = 0.0
|
42
|
-
end
|
43
|
-
|
44
|
-
def dataChanged(topLeft, bottomRight)
|
45
|
-
super(topLeft, bottomRight)
|
46
|
-
|
47
|
-
@validItems = 0
|
48
|
-
@totalValue = 0.0
|
49
|
-
|
50
|
-
(0...model().rowCount(rootIndex())).each do |row|
|
51
|
-
|
52
|
-
index = model().index(row, 1, rootIndex())
|
53
|
-
value = model().data(index).toDouble
|
54
|
-
|
55
|
-
if value > 0.0
|
56
|
-
@totalValue += value
|
57
|
-
@validItems += 1
|
58
|
-
end
|
59
|
-
end
|
60
|
-
viewport().update()
|
61
|
-
end
|
62
|
-
|
63
|
-
def edit(index, trigger, event)
|
64
|
-
if index.column() == 0
|
65
|
-
return super(index, trigger, event)
|
66
|
-
else
|
67
|
-
return false
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# Returns the item that covers the coordinate given in the view.
|
72
|
-
|
73
|
-
def indexAt(point)
|
74
|
-
if @validItems == 0
|
75
|
-
return Qt::ModelIndex.new
|
76
|
-
end
|
77
|
-
|
78
|
-
# Transform the view coordinates into contents widget coordinates.
|
79
|
-
wx = point.x() + horizontalScrollBar().value()
|
80
|
-
wy = point.y() + verticalScrollBar().value()
|
81
|
-
|
82
|
-
if wx < @totalSize
|
83
|
-
cx = wx - @totalSize/2
|
84
|
-
cy = @totalSize/2 - wy # positive cy for items above the center
|
85
|
-
|
86
|
-
# Determine the distance from the center point of the pie chart.
|
87
|
-
d = ((cx ** 2) + (cy ** 2)) ** 0.5
|
88
|
-
|
89
|
-
if d == 0 || d > @pieSize/2
|
90
|
-
return Qt::ModelIndex.new
|
91
|
-
end
|
92
|
-
|
93
|
-
# Determine the angle of the point.
|
94
|
-
angle = (180 / Math::PI) * Math.acos(cx/d)
|
95
|
-
if cy < 0
|
96
|
-
angle = 360 - angle
|
97
|
-
end
|
98
|
-
|
99
|
-
# Find the relevant slice of the pie.
|
100
|
-
startAngle = 0.0
|
101
|
-
|
102
|
-
for row in 0...model.rowCount(rootIndex)
|
103
|
-
|
104
|
-
index = model.index(row, 1, rootIndex())
|
105
|
-
value = model.data(index).to_f
|
106
|
-
|
107
|
-
if value > 0.0
|
108
|
-
sliceAngle = 360*value/@totalValue
|
109
|
-
|
110
|
-
if angle >= startAngle && angle < (startAngle + sliceAngle)
|
111
|
-
return model().index(row, 1, rootIndex())
|
112
|
-
end
|
113
|
-
|
114
|
-
startAngle += sliceAngle
|
115
|
-
end
|
116
|
-
end
|
117
|
-
else
|
118
|
-
itemHeight = Qt::FontMetrics.new(viewOptions().font).height()
|
119
|
-
listItem = ((wy - @margin) / itemHeight).to_i
|
120
|
-
validRow = 0
|
121
|
-
|
122
|
-
for row in 0...model.rowCount(rootIndex) do
|
123
|
-
|
124
|
-
index = model().index(row, 1, rootIndex())
|
125
|
-
if model().data(index).to_f > 0.0
|
126
|
-
|
127
|
-
if listItem == validRow
|
128
|
-
return model().index(row, 0, rootIndex())
|
129
|
-
end
|
130
|
-
|
131
|
-
# Update the list index that corresponds to the next valid row.
|
132
|
-
validRow += 1
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
return Qt::ModelIndex.new
|
138
|
-
end
|
139
|
-
|
140
|
-
def isIndexHidden(index)
|
141
|
-
return false
|
142
|
-
end
|
143
|
-
|
144
|
-
# Returns the rectangle of the item at position \a index in the
|
145
|
-
# model. The rectangle is in contents coordinates.
|
146
|
-
|
147
|
-
def itemRect(index)
|
148
|
-
if !index.isValid()
|
149
|
-
return Qt::Rect.new
|
150
|
-
end
|
151
|
-
|
152
|
-
# Check whether the index's row is in the list of rows represented
|
153
|
-
# by slices.
|
154
|
-
valueIndex = Qt::ModelIndex.new
|
155
|
-
|
156
|
-
if index.column() != 1
|
157
|
-
valueIndex = model().index(index.row(), 1, rootIndex())
|
158
|
-
else
|
159
|
-
valueIndex = index
|
160
|
-
end
|
161
|
-
|
162
|
-
if model().data(valueIndex).toDouble > 0.0
|
163
|
-
|
164
|
-
listItem = 0
|
165
|
-
(index.row()-1).downto(0) do |row|
|
166
|
-
if model().data(model().index(row, 1, rootIndex())).toDouble > 0.0
|
167
|
-
listItem += 1
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
case index.column
|
172
|
-
when 0
|
173
|
-
itemHeight = Qt::FontMetrics.new(viewOptions().font).height()
|
174
|
-
|
175
|
-
return Qt::Rect.new(@totalSize,
|
176
|
-
(@margin + listItem*itemHeight).to_i,
|
177
|
-
@totalSize - @margin, itemHeight.to_i)
|
178
|
-
when 1
|
179
|
-
return viewport().rect()
|
180
|
-
end
|
181
|
-
|
182
|
-
end
|
183
|
-
return Qt::Rect.new
|
184
|
-
end
|
185
|
-
|
186
|
-
def itemRegion(index)
|
187
|
-
if !index.isValid()
|
188
|
-
return Qt::Region.new
|
189
|
-
end
|
190
|
-
|
191
|
-
if index.column() != 1
|
192
|
-
return Qt::Region.new(itemRect(index))
|
193
|
-
end
|
194
|
-
|
195
|
-
if model().data(index).to_f <= 0.0
|
196
|
-
return Qt::Region.new
|
197
|
-
end
|
198
|
-
|
199
|
-
startAngle = 0.0
|
200
|
-
(0...model.rowCount(rootIndex())).each do |row|
|
201
|
-
|
202
|
-
sliceIndex = model.index(row, 1, rootIndex)
|
203
|
-
value = model.data(sliceIndex).to_f
|
204
|
-
|
205
|
-
if value > 0.0
|
206
|
-
angle = 360*value/@totalValue
|
207
|
-
|
208
|
-
if sliceIndex == index
|
209
|
-
slicePath = Qt::PainterPath.new
|
210
|
-
slicePath.moveTo(@totalSize/2, @totalSize/2)
|
211
|
-
slicePath.arcTo(@margin, @margin, @margin+@pieSize, @margin+@pieSize,
|
212
|
-
startAngle, angle)
|
213
|
-
slicePath.closeSubpath()
|
214
|
-
|
215
|
-
return Qt::Region.new(slicePath.toFillPolygon().toPolygon())
|
216
|
-
end
|
217
|
-
|
218
|
-
startAngle += angle
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
return Qt::Region.new
|
223
|
-
end
|
224
|
-
|
225
|
-
def horizontalOffset()
|
226
|
-
return horizontalScrollBar().value()
|
227
|
-
end
|
228
|
-
|
229
|
-
def mouseReleaseEvent(event)
|
230
|
-
super(event)
|
231
|
-
@selectionRect = Qt::Rect.new
|
232
|
-
viewport().update()
|
233
|
-
end
|
234
|
-
|
235
|
-
def moveCursor(cursorAction, modifiers)
|
236
|
-
current = currentIndex()
|
237
|
-
|
238
|
-
case cursorAction
|
239
|
-
when MoveLeft, MoveUp
|
240
|
-
if current.row > 0
|
241
|
-
current = model().index(current.row() - 1, current.column,
|
242
|
-
rootIndex())
|
243
|
-
else
|
244
|
-
current = model().index(0, current.column, rootIndex())
|
245
|
-
end
|
246
|
-
when MoveRight, MoveDown
|
247
|
-
if current.row < rows(current) - 1
|
248
|
-
current = model().index(current.row + 1, current.column,
|
249
|
-
rootIndex())
|
250
|
-
else
|
251
|
-
current = model().index(rows(current) - 1, current.column,
|
252
|
-
rootIndex())
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
viewport().update()
|
257
|
-
return current
|
258
|
-
end
|
259
|
-
|
260
|
-
def paintEvent(event)
|
261
|
-
selections = selectionModel()
|
262
|
-
option = viewOptions()
|
263
|
-
state = option.state
|
264
|
-
|
265
|
-
background = option.palette.base()
|
266
|
-
foreground = Qt::Pen.new(option.palette.color(Qt::Palette::Foreground))
|
267
|
-
textPen = Qt::Pen.new(option.palette.color(Qt::Palette::Text))
|
268
|
-
highlightedPen = Qt::Pen.new(option.palette.color(Qt::Palette::HighlightedText))
|
269
|
-
|
270
|
-
painter = Qt::Painter.new(viewport())
|
271
|
-
painter.renderHint = Qt::Painter::Antialiasing
|
272
|
-
|
273
|
-
painter.fillRect(event.rect(), background)
|
274
|
-
painter.pen = foreground
|
275
|
-
|
276
|
-
# Viewport rectangles
|
277
|
-
pieRect = Qt::Rect.new(@margin, @margin, @pieSize, @pieSize)
|
278
|
-
keyPoint = Qt::Point.new(@totalSize - horizontalScrollBar().value(),
|
279
|
-
@margin - verticalScrollBar().value())
|
280
|
-
|
281
|
-
if @validItems > 0
|
282
|
-
painter.save()
|
283
|
-
painter.translate(pieRect.x() - horizontalScrollBar().value(),
|
284
|
-
pieRect.y() - verticalScrollBar().value())
|
285
|
-
painter.drawEllipse(0, 0, @pieSize, @pieSize)
|
286
|
-
startAngle = 0.0
|
287
|
-
|
288
|
-
for row in 0...model.rowCount(rootIndex) do
|
289
|
-
index = model.index(row, 1, rootIndex())
|
290
|
-
value = model.data(index).toDouble
|
291
|
-
|
292
|
-
if value > 0.0
|
293
|
-
angle = 360*value/@totalValue
|
294
|
-
|
295
|
-
colorIndex = model().index(row, 0, rootIndex())
|
296
|
-
color = Qt::Color.new(model().data(colorIndex,
|
297
|
-
Qt::DecorationRole).toString)
|
298
|
-
|
299
|
-
if currentIndex() == index
|
300
|
-
painter.brush = Qt::Brush.new(color, Qt::Dense4Pattern)
|
301
|
-
elsif selections.isSelected(index)
|
302
|
-
painter.brush = Qt::Brush.new(color, Qt::Dense3Pattern)
|
303
|
-
else
|
304
|
-
painter.brush = Qt::Brush.new(color)
|
305
|
-
end
|
306
|
-
|
307
|
-
painter.drawPie(0, 0, @pieSize, @pieSize, (startAngle*16).to_i,
|
308
|
-
(angle*16).to_i)
|
309
|
-
|
310
|
-
startAngle += angle
|
311
|
-
end
|
312
|
-
end
|
313
|
-
painter.restore()
|
314
|
-
|
315
|
-
keyNumber = 0
|
316
|
-
|
317
|
-
for row in 0...model.rowCount(rootIndex()) do
|
318
|
-
|
319
|
-
index = model.index(row, 1, rootIndex())
|
320
|
-
value = model.data(index).toDouble
|
321
|
-
|
322
|
-
if value > 0.0
|
323
|
-
labelIndex = model.index(row, 0, rootIndex())
|
324
|
-
|
325
|
-
option = viewOptions()
|
326
|
-
option.rect = visualRect(labelIndex)
|
327
|
-
if selections.isSelected(labelIndex)
|
328
|
-
option.state |= Qt::Style::State_Selected.to_i
|
329
|
-
end
|
330
|
-
if currentIndex() == labelIndex
|
331
|
-
option.state |= Qt::Style::State_HasFocus.to_i
|
332
|
-
end
|
333
|
-
itemDelegate().paint(painter, option, labelIndex)
|
334
|
-
|
335
|
-
keyNumber += 1
|
336
|
-
end
|
337
|
-
end
|
338
|
-
end
|
339
|
-
|
340
|
-
if !@selectionRect.nil?
|
341
|
-
band = Qt::StyleOptionRubberBand.new
|
342
|
-
band.shape = Qt::RubberBand::Rectangle
|
343
|
-
band.rect = @selectionRect
|
344
|
-
painter.save()
|
345
|
-
style().drawControl(Qt::Style::CE_RubberBand, band, painter)
|
346
|
-
painter.restore()
|
347
|
-
end
|
348
|
-
|
349
|
-
painter.end
|
350
|
-
end
|
351
|
-
|
352
|
-
def resizeEvent(event)
|
353
|
-
updateGeometries()
|
354
|
-
end
|
355
|
-
|
356
|
-
def rows(index)
|
357
|
-
return model().rowCount(model().parent(index))
|
358
|
-
end
|
359
|
-
|
360
|
-
def rowsInserted(parent, start_row, end_row)
|
361
|
-
for row in start_row..end_row do
|
362
|
-
|
363
|
-
index = model.index(row, 1, rootIndex)
|
364
|
-
value = model.data(index).toDouble
|
365
|
-
|
366
|
-
if value > 0.0
|
367
|
-
@totalValue += value
|
368
|
-
@validItems += 1
|
369
|
-
end
|
370
|
-
end
|
371
|
-
|
372
|
-
super(parent, start_row, end_row)
|
373
|
-
end
|
374
|
-
|
375
|
-
def rowsAboutToBeRemoved(parent, start_row, end_row)
|
376
|
-
for row in start_row..end_row do
|
377
|
-
|
378
|
-
index = model.index(row, 1, rootIndex())
|
379
|
-
value = model.data(index).toDouble
|
380
|
-
if value > 0.0
|
381
|
-
@totalValue -= value
|
382
|
-
@validItems -= 1
|
383
|
-
end
|
384
|
-
end
|
385
|
-
|
386
|
-
super(parent, start_row, end_row)
|
387
|
-
end
|
388
|
-
|
389
|
-
def scrollContentsBy(dx, dy)
|
390
|
-
viewport().scroll(dx, dy)
|
391
|
-
end
|
392
|
-
|
393
|
-
def scrollTo(index, hint)
|
394
|
-
area = viewport.rect
|
395
|
-
rect = visualRect(index)
|
396
|
-
|
397
|
-
if rect.left < area.left
|
398
|
-
horizontalScrollBar.setValue(
|
399
|
-
horizontalScrollBar.value + rect.left - area.left)
|
400
|
-
elsif rect.right > area.right
|
401
|
-
horizontalScrollBar.setValue(
|
402
|
-
horizontalScrollBar.value +
|
403
|
-
[rect.right - area.right, rect.left - area.left].min)
|
404
|
-
end
|
405
|
-
|
406
|
-
if rect.top < area.top()
|
407
|
-
verticalScrollBar.setValue(
|
408
|
-
verticalScrollBar.value + rect.top - area.top)
|
409
|
-
elsif rect.bottom > area.bottom()
|
410
|
-
verticalScrollBar.setValue(
|
411
|
-
verticalScrollBar.value +
|
412
|
-
[rect.bottom - area.bottom, rect.top - area.top].min)
|
413
|
-
end
|
414
|
-
end
|
415
|
-
|
416
|
-
# Find the indices corresponding to the extent of the selection.
|
417
|
-
def setSelection(rect, command)
|
418
|
-
# Use content widget coordinates because we will use the itemRegion()
|
419
|
-
# function to check for intersections.
|
420
|
-
|
421
|
-
contentsRect = rect.translated(horizontalScrollBar.value,
|
422
|
-
verticalScrollBar.value)
|
423
|
-
|
424
|
-
rows = model.rowCount(rootIndex)
|
425
|
-
columns = model.columnCount(rootIndex)
|
426
|
-
indexes = []
|
427
|
-
|
428
|
-
for row in 0...rows do
|
429
|
-
for column in 0...columns do
|
430
|
-
index = model.index(row, column, rootIndex)
|
431
|
-
region = itemRegion(index)
|
432
|
-
if !region.intersect(Qt::Region.new(contentsRect)).empty?
|
433
|
-
indexes.push(index)
|
434
|
-
end
|
435
|
-
end
|
436
|
-
end
|
437
|
-
|
438
|
-
if indexes.size > 0
|
439
|
-
firstRow = indexes[0].row
|
440
|
-
lastRow = indexes[0].row
|
441
|
-
firstColumn = indexes[0].column
|
442
|
-
lastColumn = indexes[0].column
|
443
|
-
|
444
|
-
for i in 1...indexes.size do
|
445
|
-
firstRow = [firstRow, indexes[i].row].min
|
446
|
-
lastRow = [lastRow, indexes[i].row].max
|
447
|
-
firstColumn = [firstColumn, indexes[i].column].min
|
448
|
-
lastColumn = [lastColumn, indexes[i].column].max
|
449
|
-
end
|
450
|
-
|
451
|
-
selection = Qt::ItemSelection.new(
|
452
|
-
model.index(firstRow, firstColumn, rootIndex()),
|
453
|
-
model.index(lastRow, lastColumn, rootIndex()))
|
454
|
-
selectionModel.select(selection, command)
|
455
|
-
else
|
456
|
-
noIndex = Qt::ModelIndex.new
|
457
|
-
selection = Qt::ItemSelection.new(noIndex, noIndex)
|
458
|
-
selectionModel.select(selection, command)
|
459
|
-
end
|
460
|
-
|
461
|
-
@selectionRect = rect
|
462
|
-
end
|
463
|
-
|
464
|
-
def updateGeometries
|
465
|
-
horizontalScrollBar.pageStep = viewport.width
|
466
|
-
horizontalScrollBar.range = 0..[0, 2*@totalSize - viewport.width].max
|
467
|
-
verticalScrollBar.pageStep = viewport.height
|
468
|
-
verticalScrollBar.range = 0..[0, @totalSize - viewport.height].max
|
469
|
-
end
|
470
|
-
|
471
|
-
def verticalOffset
|
472
|
-
return verticalScrollBar.value
|
473
|
-
end
|
474
|
-
|
475
|
-
# Returns the position of the item in viewport coordinates.
|
476
|
-
|
477
|
-
def visualRect(index)
|
478
|
-
rect = itemRect(index)
|
479
|
-
if rect.valid?
|
480
|
-
return Qt::Rect.new(rect.left - horizontalScrollBar.value,
|
481
|
-
rect.top - verticalScrollBar.value,
|
482
|
-
rect.width, rect.height)
|
483
|
-
else
|
484
|
-
return rect
|
485
|
-
end
|
486
|
-
end
|
487
|
-
|
488
|
-
# Returns a region corresponding to the selection in viewport coordinates.
|
489
|
-
|
490
|
-
def visualRegionForSelection(selection)
|
491
|
-
ranges = selection.length
|
492
|
-
|
493
|
-
if ranges == 0
|
494
|
-
return Qt::Region.new(Qt::Rect.new)
|
495
|
-
end
|
496
|
-
|
497
|
-
# Note that we use the top and bottom functions of the selection range
|
498
|
-
# since the data is stored in rows.
|
499
|
-
|
500
|
-
firstRow = selection.at(0).top
|
501
|
-
lastRow = selection.at(0).top
|
502
|
-
|
503
|
-
for i in 0...ranges do
|
504
|
-
firstRow = [firstRow, selection.at(i).top].min
|
505
|
-
lastRow = [lastRow, selection.at(i).bottom].max
|
506
|
-
end
|
507
|
-
|
508
|
-
firstItem = model().index([firstRow, lastRow].min, 0, rootIndex())
|
509
|
-
lastItem = model().index([firstRow, lastRow].max, 0, rootIndex())
|
510
|
-
|
511
|
-
firstRect = visualRect(firstItem)
|
512
|
-
lastRect = visualRect(lastItem)
|
513
|
-
|
514
|
-
return Qt::Region.new(firstRect.unite(lastRect))
|
515
|
-
end
|
516
|
-
end
|
1
|
+
=begin
|
2
|
+
**
|
3
|
+
** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
|
4
|
+
**
|
5
|
+
** This file is part of the example classes of the Qt Toolkit.
|
6
|
+
**
|
7
|
+
** This file may be used under the terms of the GNU General Public
|
8
|
+
** License version 2.0 as published by the Free Software Foundation
|
9
|
+
** and appearing in the file LICENSE.GPL included in the packaging of
|
10
|
+
** this file. Please review the following information to ensure GNU
|
11
|
+
** General Public Licensing requirements will be met:
|
12
|
+
** http://www.trolltech.com/products/qt/opensource.html
|
13
|
+
**
|
14
|
+
** If you are unsure which license is appropriate for your use, please
|
15
|
+
** review the following information:
|
16
|
+
** http://www.trolltech.com/products/qt/licensing.html or contact the
|
17
|
+
** sales department at sales@trolltech.com.
|
18
|
+
**
|
19
|
+
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
20
|
+
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
21
|
+
**
|
22
|
+
|
23
|
+
** Translated to QtRuby by Richard Dale
|
24
|
+
=end
|
25
|
+
|
26
|
+
class PieView < Qt::AbstractItemView
|
27
|
+
|
28
|
+
slots 'dataChanged(const QModelIndex &, const QModelIndex &)',
|
29
|
+
'rowsInserted(const QModelIndex &, int, int)',
|
30
|
+
'rowsAboutToBeRemoved(const QModelIndex &, int, int)'
|
31
|
+
|
32
|
+
def initialize(parent = nil)
|
33
|
+
super(parent)
|
34
|
+
horizontalScrollBar.range = 0..0
|
35
|
+
verticalScrollBar.range = 0..0
|
36
|
+
|
37
|
+
@margin = 8
|
38
|
+
@totalSize = 300
|
39
|
+
@pieSize = @totalSize - 2*@margin
|
40
|
+
@validItems = 0
|
41
|
+
@totalValue = 0.0
|
42
|
+
end
|
43
|
+
|
44
|
+
def dataChanged(topLeft, bottomRight)
|
45
|
+
super(topLeft, bottomRight)
|
46
|
+
|
47
|
+
@validItems = 0
|
48
|
+
@totalValue = 0.0
|
49
|
+
|
50
|
+
(0...model().rowCount(rootIndex())).each do |row|
|
51
|
+
|
52
|
+
index = model().index(row, 1, rootIndex())
|
53
|
+
value = model().data(index).toDouble
|
54
|
+
|
55
|
+
if value > 0.0
|
56
|
+
@totalValue += value
|
57
|
+
@validItems += 1
|
58
|
+
end
|
59
|
+
end
|
60
|
+
viewport().update()
|
61
|
+
end
|
62
|
+
|
63
|
+
def edit(index, trigger, event)
|
64
|
+
if index.column() == 0
|
65
|
+
return super(index, trigger, event)
|
66
|
+
else
|
67
|
+
return false
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Returns the item that covers the coordinate given in the view.
|
72
|
+
|
73
|
+
def indexAt(point)
|
74
|
+
if @validItems == 0
|
75
|
+
return Qt::ModelIndex.new
|
76
|
+
end
|
77
|
+
|
78
|
+
# Transform the view coordinates into contents widget coordinates.
|
79
|
+
wx = point.x() + horizontalScrollBar().value()
|
80
|
+
wy = point.y() + verticalScrollBar().value()
|
81
|
+
|
82
|
+
if wx < @totalSize
|
83
|
+
cx = wx - @totalSize/2
|
84
|
+
cy = @totalSize/2 - wy # positive cy for items above the center
|
85
|
+
|
86
|
+
# Determine the distance from the center point of the pie chart.
|
87
|
+
d = ((cx ** 2) + (cy ** 2)) ** 0.5
|
88
|
+
|
89
|
+
if d == 0 || d > @pieSize/2
|
90
|
+
return Qt::ModelIndex.new
|
91
|
+
end
|
92
|
+
|
93
|
+
# Determine the angle of the point.
|
94
|
+
angle = (180 / Math::PI) * Math.acos(cx/d)
|
95
|
+
if cy < 0
|
96
|
+
angle = 360 - angle
|
97
|
+
end
|
98
|
+
|
99
|
+
# Find the relevant slice of the pie.
|
100
|
+
startAngle = 0.0
|
101
|
+
|
102
|
+
for row in 0...model.rowCount(rootIndex)
|
103
|
+
|
104
|
+
index = model.index(row, 1, rootIndex())
|
105
|
+
value = model.data(index).to_f
|
106
|
+
|
107
|
+
if value > 0.0
|
108
|
+
sliceAngle = 360*value/@totalValue
|
109
|
+
|
110
|
+
if angle >= startAngle && angle < (startAngle + sliceAngle)
|
111
|
+
return model().index(row, 1, rootIndex())
|
112
|
+
end
|
113
|
+
|
114
|
+
startAngle += sliceAngle
|
115
|
+
end
|
116
|
+
end
|
117
|
+
else
|
118
|
+
itemHeight = Qt::FontMetrics.new(viewOptions().font).height()
|
119
|
+
listItem = ((wy - @margin) / itemHeight).to_i
|
120
|
+
validRow = 0
|
121
|
+
|
122
|
+
for row in 0...model.rowCount(rootIndex) do
|
123
|
+
|
124
|
+
index = model().index(row, 1, rootIndex())
|
125
|
+
if model().data(index).to_f > 0.0
|
126
|
+
|
127
|
+
if listItem == validRow
|
128
|
+
return model().index(row, 0, rootIndex())
|
129
|
+
end
|
130
|
+
|
131
|
+
# Update the list index that corresponds to the next valid row.
|
132
|
+
validRow += 1
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
return Qt::ModelIndex.new
|
138
|
+
end
|
139
|
+
|
140
|
+
def isIndexHidden(index)
|
141
|
+
return false
|
142
|
+
end
|
143
|
+
|
144
|
+
# Returns the rectangle of the item at position \a index in the
|
145
|
+
# model. The rectangle is in contents coordinates.
|
146
|
+
|
147
|
+
def itemRect(index)
|
148
|
+
if !index.isValid()
|
149
|
+
return Qt::Rect.new
|
150
|
+
end
|
151
|
+
|
152
|
+
# Check whether the index's row is in the list of rows represented
|
153
|
+
# by slices.
|
154
|
+
valueIndex = Qt::ModelIndex.new
|
155
|
+
|
156
|
+
if index.column() != 1
|
157
|
+
valueIndex = model().index(index.row(), 1, rootIndex())
|
158
|
+
else
|
159
|
+
valueIndex = index
|
160
|
+
end
|
161
|
+
|
162
|
+
if model().data(valueIndex).toDouble > 0.0
|
163
|
+
|
164
|
+
listItem = 0
|
165
|
+
(index.row()-1).downto(0) do |row|
|
166
|
+
if model().data(model().index(row, 1, rootIndex())).toDouble > 0.0
|
167
|
+
listItem += 1
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
case index.column
|
172
|
+
when 0
|
173
|
+
itemHeight = Qt::FontMetrics.new(viewOptions().font).height()
|
174
|
+
|
175
|
+
return Qt::Rect.new(@totalSize,
|
176
|
+
(@margin + listItem*itemHeight).to_i,
|
177
|
+
@totalSize - @margin, itemHeight.to_i)
|
178
|
+
when 1
|
179
|
+
return viewport().rect()
|
180
|
+
end
|
181
|
+
|
182
|
+
end
|
183
|
+
return Qt::Rect.new
|
184
|
+
end
|
185
|
+
|
186
|
+
def itemRegion(index)
|
187
|
+
if !index.isValid()
|
188
|
+
return Qt::Region.new
|
189
|
+
end
|
190
|
+
|
191
|
+
if index.column() != 1
|
192
|
+
return Qt::Region.new(itemRect(index))
|
193
|
+
end
|
194
|
+
|
195
|
+
if model().data(index).to_f <= 0.0
|
196
|
+
return Qt::Region.new
|
197
|
+
end
|
198
|
+
|
199
|
+
startAngle = 0.0
|
200
|
+
(0...model.rowCount(rootIndex())).each do |row|
|
201
|
+
|
202
|
+
sliceIndex = model.index(row, 1, rootIndex)
|
203
|
+
value = model.data(sliceIndex).to_f
|
204
|
+
|
205
|
+
if value > 0.0
|
206
|
+
angle = 360*value/@totalValue
|
207
|
+
|
208
|
+
if sliceIndex == index
|
209
|
+
slicePath = Qt::PainterPath.new
|
210
|
+
slicePath.moveTo(@totalSize/2, @totalSize/2)
|
211
|
+
slicePath.arcTo(@margin, @margin, @margin+@pieSize, @margin+@pieSize,
|
212
|
+
startAngle, angle)
|
213
|
+
slicePath.closeSubpath()
|
214
|
+
|
215
|
+
return Qt::Region.new(slicePath.toFillPolygon().toPolygon())
|
216
|
+
end
|
217
|
+
|
218
|
+
startAngle += angle
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
return Qt::Region.new
|
223
|
+
end
|
224
|
+
|
225
|
+
def horizontalOffset()
|
226
|
+
return horizontalScrollBar().value()
|
227
|
+
end
|
228
|
+
|
229
|
+
def mouseReleaseEvent(event)
|
230
|
+
super(event)
|
231
|
+
@selectionRect = Qt::Rect.new
|
232
|
+
viewport().update()
|
233
|
+
end
|
234
|
+
|
235
|
+
def moveCursor(cursorAction, modifiers)
|
236
|
+
current = currentIndex()
|
237
|
+
|
238
|
+
case cursorAction
|
239
|
+
when MoveLeft, MoveUp
|
240
|
+
if current.row > 0
|
241
|
+
current = model().index(current.row() - 1, current.column,
|
242
|
+
rootIndex())
|
243
|
+
else
|
244
|
+
current = model().index(0, current.column, rootIndex())
|
245
|
+
end
|
246
|
+
when MoveRight, MoveDown
|
247
|
+
if current.row < rows(current) - 1
|
248
|
+
current = model().index(current.row + 1, current.column,
|
249
|
+
rootIndex())
|
250
|
+
else
|
251
|
+
current = model().index(rows(current) - 1, current.column,
|
252
|
+
rootIndex())
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
viewport().update()
|
257
|
+
return current
|
258
|
+
end
|
259
|
+
|
260
|
+
def paintEvent(event)
|
261
|
+
selections = selectionModel()
|
262
|
+
option = viewOptions()
|
263
|
+
state = option.state
|
264
|
+
|
265
|
+
background = option.palette.base()
|
266
|
+
foreground = Qt::Pen.new(option.palette.color(Qt::Palette::Foreground))
|
267
|
+
textPen = Qt::Pen.new(option.palette.color(Qt::Palette::Text))
|
268
|
+
highlightedPen = Qt::Pen.new(option.palette.color(Qt::Palette::HighlightedText))
|
269
|
+
|
270
|
+
painter = Qt::Painter.new(viewport())
|
271
|
+
painter.renderHint = Qt::Painter::Antialiasing
|
272
|
+
|
273
|
+
painter.fillRect(event.rect(), background)
|
274
|
+
painter.pen = foreground
|
275
|
+
|
276
|
+
# Viewport rectangles
|
277
|
+
pieRect = Qt::Rect.new(@margin, @margin, @pieSize, @pieSize)
|
278
|
+
keyPoint = Qt::Point.new(@totalSize - horizontalScrollBar().value(),
|
279
|
+
@margin - verticalScrollBar().value())
|
280
|
+
|
281
|
+
if @validItems > 0
|
282
|
+
painter.save()
|
283
|
+
painter.translate(pieRect.x() - horizontalScrollBar().value(),
|
284
|
+
pieRect.y() - verticalScrollBar().value())
|
285
|
+
painter.drawEllipse(0, 0, @pieSize, @pieSize)
|
286
|
+
startAngle = 0.0
|
287
|
+
|
288
|
+
for row in 0...model.rowCount(rootIndex) do
|
289
|
+
index = model.index(row, 1, rootIndex())
|
290
|
+
value = model.data(index).toDouble
|
291
|
+
|
292
|
+
if value > 0.0
|
293
|
+
angle = 360*value/@totalValue
|
294
|
+
|
295
|
+
colorIndex = model().index(row, 0, rootIndex())
|
296
|
+
color = Qt::Color.new(model().data(colorIndex,
|
297
|
+
Qt::DecorationRole).toString)
|
298
|
+
|
299
|
+
if currentIndex() == index
|
300
|
+
painter.brush = Qt::Brush.new(color, Qt::Dense4Pattern)
|
301
|
+
elsif selections.isSelected(index)
|
302
|
+
painter.brush = Qt::Brush.new(color, Qt::Dense3Pattern)
|
303
|
+
else
|
304
|
+
painter.brush = Qt::Brush.new(color)
|
305
|
+
end
|
306
|
+
|
307
|
+
painter.drawPie(0, 0, @pieSize, @pieSize, (startAngle*16).to_i,
|
308
|
+
(angle*16).to_i)
|
309
|
+
|
310
|
+
startAngle += angle
|
311
|
+
end
|
312
|
+
end
|
313
|
+
painter.restore()
|
314
|
+
|
315
|
+
keyNumber = 0
|
316
|
+
|
317
|
+
for row in 0...model.rowCount(rootIndex()) do
|
318
|
+
|
319
|
+
index = model.index(row, 1, rootIndex())
|
320
|
+
value = model.data(index).toDouble
|
321
|
+
|
322
|
+
if value > 0.0
|
323
|
+
labelIndex = model.index(row, 0, rootIndex())
|
324
|
+
|
325
|
+
option = viewOptions()
|
326
|
+
option.rect = visualRect(labelIndex)
|
327
|
+
if selections.isSelected(labelIndex)
|
328
|
+
option.state |= Qt::Style::State_Selected.to_i
|
329
|
+
end
|
330
|
+
if currentIndex() == labelIndex
|
331
|
+
option.state |= Qt::Style::State_HasFocus.to_i
|
332
|
+
end
|
333
|
+
itemDelegate().paint(painter, option, labelIndex)
|
334
|
+
|
335
|
+
keyNumber += 1
|
336
|
+
end
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
340
|
+
if !@selectionRect.nil?
|
341
|
+
band = Qt::StyleOptionRubberBand.new
|
342
|
+
band.shape = Qt::RubberBand::Rectangle
|
343
|
+
band.rect = @selectionRect
|
344
|
+
painter.save()
|
345
|
+
style().drawControl(Qt::Style::CE_RubberBand, band, painter)
|
346
|
+
painter.restore()
|
347
|
+
end
|
348
|
+
|
349
|
+
painter.end
|
350
|
+
end
|
351
|
+
|
352
|
+
def resizeEvent(event)
|
353
|
+
updateGeometries()
|
354
|
+
end
|
355
|
+
|
356
|
+
def rows(index)
|
357
|
+
return model().rowCount(model().parent(index))
|
358
|
+
end
|
359
|
+
|
360
|
+
def rowsInserted(parent, start_row, end_row)
|
361
|
+
for row in start_row..end_row do
|
362
|
+
|
363
|
+
index = model.index(row, 1, rootIndex)
|
364
|
+
value = model.data(index).toDouble
|
365
|
+
|
366
|
+
if value > 0.0
|
367
|
+
@totalValue += value
|
368
|
+
@validItems += 1
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
super(parent, start_row, end_row)
|
373
|
+
end
|
374
|
+
|
375
|
+
def rowsAboutToBeRemoved(parent, start_row, end_row)
|
376
|
+
for row in start_row..end_row do
|
377
|
+
|
378
|
+
index = model.index(row, 1, rootIndex())
|
379
|
+
value = model.data(index).toDouble
|
380
|
+
if value > 0.0
|
381
|
+
@totalValue -= value
|
382
|
+
@validItems -= 1
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
super(parent, start_row, end_row)
|
387
|
+
end
|
388
|
+
|
389
|
+
def scrollContentsBy(dx, dy)
|
390
|
+
viewport().scroll(dx, dy)
|
391
|
+
end
|
392
|
+
|
393
|
+
def scrollTo(index, hint)
|
394
|
+
area = viewport.rect
|
395
|
+
rect = visualRect(index)
|
396
|
+
|
397
|
+
if rect.left < area.left
|
398
|
+
horizontalScrollBar.setValue(
|
399
|
+
horizontalScrollBar.value + rect.left - area.left)
|
400
|
+
elsif rect.right > area.right
|
401
|
+
horizontalScrollBar.setValue(
|
402
|
+
horizontalScrollBar.value +
|
403
|
+
[rect.right - area.right, rect.left - area.left].min)
|
404
|
+
end
|
405
|
+
|
406
|
+
if rect.top < area.top()
|
407
|
+
verticalScrollBar.setValue(
|
408
|
+
verticalScrollBar.value + rect.top - area.top)
|
409
|
+
elsif rect.bottom > area.bottom()
|
410
|
+
verticalScrollBar.setValue(
|
411
|
+
verticalScrollBar.value +
|
412
|
+
[rect.bottom - area.bottom, rect.top - area.top].min)
|
413
|
+
end
|
414
|
+
end
|
415
|
+
|
416
|
+
# Find the indices corresponding to the extent of the selection.
|
417
|
+
def setSelection(rect, command)
|
418
|
+
# Use content widget coordinates because we will use the itemRegion()
|
419
|
+
# function to check for intersections.
|
420
|
+
|
421
|
+
contentsRect = rect.translated(horizontalScrollBar.value,
|
422
|
+
verticalScrollBar.value)
|
423
|
+
|
424
|
+
rows = model.rowCount(rootIndex)
|
425
|
+
columns = model.columnCount(rootIndex)
|
426
|
+
indexes = []
|
427
|
+
|
428
|
+
for row in 0...rows do
|
429
|
+
for column in 0...columns do
|
430
|
+
index = model.index(row, column, rootIndex)
|
431
|
+
region = itemRegion(index)
|
432
|
+
if !region.intersect(Qt::Region.new(contentsRect)).empty?
|
433
|
+
indexes.push(index)
|
434
|
+
end
|
435
|
+
end
|
436
|
+
end
|
437
|
+
|
438
|
+
if indexes.size > 0
|
439
|
+
firstRow = indexes[0].row
|
440
|
+
lastRow = indexes[0].row
|
441
|
+
firstColumn = indexes[0].column
|
442
|
+
lastColumn = indexes[0].column
|
443
|
+
|
444
|
+
for i in 1...indexes.size do
|
445
|
+
firstRow = [firstRow, indexes[i].row].min
|
446
|
+
lastRow = [lastRow, indexes[i].row].max
|
447
|
+
firstColumn = [firstColumn, indexes[i].column].min
|
448
|
+
lastColumn = [lastColumn, indexes[i].column].max
|
449
|
+
end
|
450
|
+
|
451
|
+
selection = Qt::ItemSelection.new(
|
452
|
+
model.index(firstRow, firstColumn, rootIndex()),
|
453
|
+
model.index(lastRow, lastColumn, rootIndex()))
|
454
|
+
selectionModel.select(selection, command)
|
455
|
+
else
|
456
|
+
noIndex = Qt::ModelIndex.new
|
457
|
+
selection = Qt::ItemSelection.new(noIndex, noIndex)
|
458
|
+
selectionModel.select(selection, command)
|
459
|
+
end
|
460
|
+
|
461
|
+
@selectionRect = rect
|
462
|
+
end
|
463
|
+
|
464
|
+
def updateGeometries
|
465
|
+
horizontalScrollBar.pageStep = viewport.width
|
466
|
+
horizontalScrollBar.range = 0..[0, 2*@totalSize - viewport.width].max
|
467
|
+
verticalScrollBar.pageStep = viewport.height
|
468
|
+
verticalScrollBar.range = 0..[0, @totalSize - viewport.height].max
|
469
|
+
end
|
470
|
+
|
471
|
+
def verticalOffset
|
472
|
+
return verticalScrollBar.value
|
473
|
+
end
|
474
|
+
|
475
|
+
# Returns the position of the item in viewport coordinates.
|
476
|
+
|
477
|
+
def visualRect(index)
|
478
|
+
rect = itemRect(index)
|
479
|
+
if rect.valid?
|
480
|
+
return Qt::Rect.new(rect.left - horizontalScrollBar.value,
|
481
|
+
rect.top - verticalScrollBar.value,
|
482
|
+
rect.width, rect.height)
|
483
|
+
else
|
484
|
+
return rect
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
# Returns a region corresponding to the selection in viewport coordinates.
|
489
|
+
|
490
|
+
def visualRegionForSelection(selection)
|
491
|
+
ranges = selection.length
|
492
|
+
|
493
|
+
if ranges == 0
|
494
|
+
return Qt::Region.new(Qt::Rect.new)
|
495
|
+
end
|
496
|
+
|
497
|
+
# Note that we use the top and bottom functions of the selection range
|
498
|
+
# since the data is stored in rows.
|
499
|
+
|
500
|
+
firstRow = selection.at(0).top
|
501
|
+
lastRow = selection.at(0).top
|
502
|
+
|
503
|
+
for i in 0...ranges do
|
504
|
+
firstRow = [firstRow, selection.at(i).top].min
|
505
|
+
lastRow = [lastRow, selection.at(i).bottom].max
|
506
|
+
end
|
507
|
+
|
508
|
+
firstItem = model().index([firstRow, lastRow].min, 0, rootIndex())
|
509
|
+
lastItem = model().index([firstRow, lastRow].max, 0, rootIndex())
|
510
|
+
|
511
|
+
firstRect = visualRect(firstItem)
|
512
|
+
lastRect = visualRect(lastItem)
|
513
|
+
|
514
|
+
return Qt::Region.new(firstRect.unite(lastRect))
|
515
|
+
end
|
516
|
+
end
|