summaryrefslogtreecommitdiffstats
path: root/demos/qtdemo
Commit message (Collapse)AuthorAgeFilesLines
* Avoid printing a warningAlan Alpert2010-06-211-1/+2
|
* Only steal hover events when enabled, in QtDemo's qml integrationAlan Alpert2010-06-211-1/+1
| | | | | | | | Not sure whether it was the correct behaviour for a MouseArea to have when enabled is false but hoverEnabled is true, that it would still get hover events. But the current behaviour is unambigious and correct. Task-number: QTBUG-11564
* Allow things that load SameGame to disable the Quit buttonAlan Alpert2010-06-211-0/+1
| | | | | | | If I missed any, just set inAnotherDemo to true on the SameGame root item. Task-number: QTBUG-11562
* Seems to fix the keyboard focus confusionAlan Alpert2010-06-211-2/+5
| | | | Task-number: QTBUG-11411
* Some tweaks on the QML-enhanced QtDemoAlan Alpert2010-05-303-10/+17
| | | | | | -don't crash if we aren't showing the FPS -different method of unloading the QML example when hidden -fix screwed up background when scaled.
* Tweak aesthetics of QML viewer inside QtDemoAlan Alpert2010-05-278-175/+118
| | | | | Make the UX more controlled from QML, and tweak the frame to be better. Blur mechanism has been reworked, but still disabled by default.
* License header.Warwick Allison2010-05-252-0/+82
|
* Integrate some QML examples and demos into qtdemoAlan Alpert2010-05-2411-29/+316
| | | | | | | | | | | | | Includes minor changes and additions to the existing doc and examples, so that they follow Qt conventions better. Note that while blurring the background was part of the plan for the embedded QML viewer I could not get it to perform well enough. In the future, when blur is fast enough (or someone else can get it to perform better than I) -use-blur should become the default, and -no-blur the option. Task-number: QTBUG-10582
* Merge remote branch 'origin/4.6' into qt-4.7-from-4.6Olivier Goffart2010-05-171-0/+1
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: demos/demos.pro mkspecs/features/resources.prf mkspecs/features/uic.prf src/corelib/io/qurl.cpp src/corelib/tools/qlocale_symbian.cpp src/gui/graphicsview/qgraphicsscene.cpp src/gui/graphicsview/qgraphicswidget_p.cpp src/gui/graphicsview/qgraphicswidget_p.h src/gui/util/qsystemtrayicon_win.cpp src/multimedia/audio/qaudioinput.cpp tests/auto/qhostinfo/qhostinfo.pro
| * Add spectrum analyzer demo appGareth Stockwell2010-05-051-0/+1
| | | | | | | | | | | | | | | | | | This application is a demo which uses the QtMultimedia APIs to capture and play back PCM audio. While either recording or playback is ongoing, the application performs real-time level and frequency spectrum analysis. Reviewed-by: Alessandro Portale
* | Remove the OBJECTS_DIR variable assignment from some projets in Qt.Jocelyn Turcotte2010-03-041-2/+0
|/ | | | | | | This prevent debug and release object file to be mixed up when linking these application in a debug_and_release configured Qt. Reviewed-by: Marius Storm-Olsen
* Update copyright year to 2010Jason McDonald2010-01-0642-42/+42
| | | | Reviewed-by: Trust Me
* Simply adds the Frozen Column example to qtDemoPierre Rossi2009-11-191-0/+1
| | | | Reviewed-by: TrustMe
* Properly initialize all vars.Thomas Zander2009-11-161-0/+1
| | | | This fixes a valgrind warning.
* Move audio and video examples into the common multimedia directory.Andrew den Exter2009-10-161-1/+1
| | | | | | | | | Brings the video examples into multimedia directory, and removes the audio sub-directory so the directory structure is in line with the other example categories. Task-number: QT-667 Reviewed-by: Kurt Korbatits
* Symbian fix: rename examples ftp and musicplayer to start with q.Frans Englich2009-10-091-2/+2
| | | | | | | | | | | | | | | | Symbian already has the executables musicplayer.exe, mediaplayer.exe and ftp.exe, with the result that we overwrite them with Qt. We solve this by renaming the examples, and do it not only on Symbian, such that Qt remains consistent across platforms. This was previously partly done for mediaplayer. The folder name needs to be consistent with the executable, for qtdemo to work. Done jointly with Alessandro. Task-number: QTBUG-4743 Reviewed-by: Alessandro Portale Reviewed-by: Frans Englich
* Merge commit 'qt/4.6' into mmfphononFrans Englich2009-09-2343-621/+626
|\ | | | | | | | | | | | | | | | | | | Conflicts: demos/embedded/fluidlauncher/config_s60/config.xml demos/embedded/fluidlauncher/fluidlauncher.pro src/corelib/io/io.pri src/gui/kernel/qapplication_s60.cpp src/gui/kernel/qwidget_s60.cpp src/s60installs/qt_libs.pro
| * Update license headers again.Jason McDonald2009-09-0941-164/+164
| | | | | | | | Reviewed-by: Trust Me
| * Doc: Some animation examples had no docs in qtdemo.Geir Vattekar2009-09-071-1/+1
| | | | | | | | | | Task-number: 260779 Reviewed-by: Morten Engvoldsen
| * %SystemDrive% folder created in current directory on Windows 7.Prasanth Ullattil2009-09-041-3/+4
| | | | | | | | | | | | | | | | | | | | | | This happens only when the standarddialogs demo is run from qtdemo. On Windows 7, calling the GetOpenFileName() caches something in %SystemDrive%\ProgramData\Microsoft\Windows\Caches. qtdemo was removing all environment variables other than PATH for the child processes. This caused the example to dump the cache in current directory instead. Task-number: 260898 Reviewed-by: Jens Bache-Wiig
| * qtdemo now accept the -verbose option as specified in the help output.Denis Dzyubenko2009-09-041-0/+2
| | | | | | | | Reviewed-by: trustme
| * Remove tank game example from Qt Demo.Eskil Abrahamsen Blomfeldt2009-09-031-1/+0
| | | | | | | | | | | | The tank game example no longer exists, and should not be listed here. Reviewed-by: Prasanth
| * Merge branch '4.5' into 4.6Thiago Macieira2009-08-3141-533/+533
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: demos/boxes/glshaders.cpp demos/boxes/vector.h demos/embedded/fluidlauncher/pictureflow.cpp demos/embedded/fluidlauncher/pictureflow.h doc/src/desktop-integration.qdoc doc/src/distributingqt.qdoc doc/src/examples-overview.qdoc doc/src/examples.qdoc doc/src/frameworks-technologies/dbus-adaptors.qdoc doc/src/geometry.qdoc doc/src/groups.qdoc doc/src/objecttrees.qdoc doc/src/platform-notes.qdoc doc/src/plugins-howto.qdoc doc/src/qt3support.qdoc doc/src/qtdbus.qdoc doc/src/qtdesigner.qdoc doc/src/qtgui.qdoc doc/src/qtmain.qdoc doc/src/qtopengl.qdoc doc/src/qtsvg.qdoc doc/src/qtuiloader.qdoc doc/src/qundo.qdoc doc/src/richtext.qdoc doc/src/topics.qdoc src/corelib/tools/qdumper.cpp src/gui/embedded/qkbdpc101_qws.cpp src/gui/embedded/qkbdsl5000_qws.cpp src/gui/embedded/qkbdusb_qws.cpp src/gui/embedded/qkbdvr41xx_qws.cpp src/gui/embedded/qkbdyopy_qws.cpp src/gui/embedded/qmousebus_qws.cpp src/gui/embedded/qmousevr41xx_qws.cpp src/gui/embedded/qmouseyopy_qws.cpp src/gui/painting/qpaintengine_d3d.cpp src/gui/painting/qwindowsurface_d3d.cpp src/opengl/gl2paintengineex/glgc_shader_source.h src/opengl/gl2paintengineex/qglpexshadermanager.cpp src/opengl/gl2paintengineex/qglpexshadermanager_p.h src/opengl/gl2paintengineex/qglshader.cpp src/opengl/gl2paintengineex/qglshader_p.h src/opengl/util/fragmentprograms_p.h src/plugins/kbddrivers/linuxis/linuxiskbdhandler.cpp src/plugins/mousedrivers/linuxis/linuxismousehandler.cpp src/script/parser/qscript.g src/script/qscriptarray_p.h src/script/qscriptasm_p.h src/script/qscriptbuffer_p.h src/script/qscriptclass.cpp src/script/qscriptclassdata_p.h src/script/qscriptcompiler.cpp src/script/qscriptcompiler_p.h src/script/qscriptcontext.cpp src/script/qscriptcontext_p.cpp src/script/qscriptcontext_p.h src/script/qscriptcontextfwd_p.h src/script/qscriptecmaarray.cpp src/script/qscriptecmaarray_p.h src/script/qscriptecmaboolean.cpp src/script/qscriptecmacore.cpp src/script/qscriptecmadate.cpp src/script/qscriptecmadate_p.h src/script/qscriptecmaerror.cpp src/script/qscriptecmaerror_p.h src/script/qscriptecmafunction.cpp src/script/qscriptecmafunction_p.h src/script/qscriptecmaglobal.cpp src/script/qscriptecmaglobal_p.h src/script/qscriptecmamath.cpp src/script/qscriptecmamath_p.h src/script/qscriptecmanumber.cpp src/script/qscriptecmanumber_p.h src/script/qscriptecmaobject.cpp src/script/qscriptecmaobject_p.h src/script/qscriptecmaregexp.cpp src/script/qscriptecmaregexp_p.h src/script/qscriptecmastring.cpp src/script/qscriptecmastring_p.h src/script/qscriptengine.cpp src/script/qscriptengine_p.cpp src/script/qscriptengine_p.h src/script/qscriptenginefwd_p.h src/script/qscriptextenumeration.cpp src/script/qscriptextenumeration_p.h src/script/qscriptextqobject.cpp src/script/qscriptextqobject_p.h src/script/qscriptextvariant.cpp src/script/qscriptfunction.cpp src/script/qscriptfunction_p.h src/script/qscriptgc_p.h src/script/qscriptmember_p.h src/script/qscriptobject_p.h src/script/qscriptprettypretty.cpp src/script/qscriptprettypretty_p.h src/script/qscriptvalue.cpp src/script/qscriptvalueimpl.cpp src/script/qscriptvalueimpl_p.h src/script/qscriptvalueimplfwd_p.h src/script/qscriptvalueiteratorimpl.cpp src/script/qscriptxmlgenerator.cpp src/script/qscriptxmlgenerator_p.h tests/auto/linguist/lupdate/testdata/recursivescan/project.ui tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp tests/auto/qkeyevent/tst_qkeyevent.cpp tools/linguist/shared/cpp.cpp
| | * Update tech preview license header.Jason McDonald2009-08-3141-533/+533
| | | | | | | | | | | | Reviewed-by: Trust Me
| | * Eliminate some mentions of Trolltech.Jason McDonald2009-08-112-8/+8
| | | | | | | | | | | | Reviewed-by: Trust Me
| | * Update license headers.Jason McDonald2009-08-1141-41/+41
| | | | | | | | | | | | Reviewed-by: Trust Me
| * | Doc: Updated project files and Qt Demo XML to include the example.David Boddie2009-08-281-0/+1
| | |
| * | Rename demobase.pri to symbianpkgrules.priEspen Riskedal2009-08-211-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | demobase.pri sounded to generic, also I changed it to error on !symbian platforms, and test all the places we include it. That makes it more obvious when reading the .pro files that this is actually Symbian spesific stuff, not cross-platform Qt rules. Reviewed-by: axis
* | | Rename mediaplayer to qmediaplayer, and make it an example on Symbian.Frans Englich2009-08-261-1/+1
|/ / | | | | | | | | | | We rename mediaplayer to qmediaplayer to avoid it clashing with Symbian's default media player. We also install it as an example, in order to be able to show case Phonon.
* | Merge commit 'qt/master'Jason Barron2009-08-1341-49/+49
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: examples/opengl/samplebuffers/glwidget.cpp src/corelib/io/qfsfileengine_unix.cpp src/corelib/kernel/qobject.cpp src/corelib/tools/qsharedpointer.cpp src/gui/gui.pro tests/auto/qhttp/tst_qhttp.cpp tests/auto/qkeyevent/tst_qkeyevent.cpp
| * | Replace some mentions of Trolltech with more appropriate terms.Jason McDonald2009-08-122-8/+8
| | | | | | | | | | | | Reviewed-by: Trust Me
| * | Update contact URL in license headers.Jason McDonald2009-08-1241-41/+41
| | | | | | | | | | | | Reviewed-by: Trust Me
* | | Merge commit 'qt/master-stable'Jason Barron2009-08-101-0/+1
|\ \ \ | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/corelib/kernel/qobject.cpp src/corelib/tools/qsharedpointer_impl.h src/gui/widgets/qdatetimeedit.cpp src/gui/widgets/qlinecontrol.cpp src/gui/widgets/qlineedit.cpp tests/auto/qcssparser/qcssparser.pro tests/auto/qicoimageformat/tst_qicoimageformat.cpp tests/auto/qmultiscreen/qmultiscreen.pro tests/auto/qresourceengine/qresourceengine.pro tests/auto/qresourceengine/tst_qresourceengine.cpp tests/auto/qscriptv8testsuite/tst_qscriptv8testsuite.cpp
| * | Doc: Integrated the Rogue (state machine) example.Geir Vattekar2009-08-071-0/+1
| | | | | | | | | | | | Reviewed-by: Kent Hansen
* | | Merge commit 'qt/master-stable'Jason Barron2009-08-061-0/+5
|\ \ \ | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: configure.exe doc/src/classes/qnamespace.qdoc examples/examples.pro src/corelib/kernel/qcoreevent.cpp src/corelib/kernel/qobject.cpp src/gui/kernel/qapplication.cpp src/gui/kernel/qstandardgestures.h src/gui/kernel/qwidget.cpp
| * | Merge AudioServices into mainline.Justin McPherson2009-08-051-0/+5
| | |
* | | Merge commit 'qt/master-stable'Jason Barron2009-08-041-0/+1
|\ \ \ | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: config.tests/unix/openssl/openssl.pri demos/embedded/embedded.pro examples/itemviews/chart/chart.pro examples/network/network.pro examples/painting/painterpaths/painterpaths.pro examples/threads/mandelbrot/mandelbrot.pro qmake/project.cpp src/3rdparty/libtiff/libtiff/tif_config.h src/corelib/arch/arch.pri src/corelib/global/qglobal.cpp src/corelib/kernel/kernel.pri src/corelib/kernel/qcore_unix_p.h src/corelib/kernel/qobject.cpp src/corelib/thread/qthread_unix.cpp src/corelib/tools/qsharedpointer_impl.h src/corelib/tools/tools.pri src/gui/kernel/qaction.h src/gui/kernel/qapplication.cpp src/gui/painting/qregion.h src/gui/widgets/qlineedit.cpp src/gui/widgets/qlineedit_p.h src/network/socket/qnativesocketengine_unix.cpp tests/auto/qdir/tst_qdir.cpp tests/auto/qdiriterator/tst_qdiriterator.cpp tests/auto/qhttp/qhttp.pro tests/auto/qline/qline.pro tests/auto/qnetworkreply/tst_qnetworkreply.cpp tests/auto/qresourceengine/qresourceengine.pro tests/auto/qsharedpointer/qsharedpointer.pro tests/auto/qstring/qstring.pro tests/auto/qtcpsocket/qtcpsocket.pro tests/auto/qtcpsocket/tst_qtcpsocket.cpp
| * | Add XML schema example to qtdemoPeter Hartmann2009-07-291-0/+1
| | | | | | | | | | | | Reviewed-by: Frans Englich
* | | Merge commit 'qt/master-stable'Jason Barron2009-07-301-1/+1
|\ \ \ | |/ / | | | | | | | | | | | | Conflicts: demos/demos.pro src/gui/graphicsview/qgraphicsitem_p.h
| * | Move sub-attaq from examples to demos because sub-attaq is a bitAlexis Menard2009-07-281-1/+1
| | | | | | | | | | | | too "advanced".
* | | Merge commit 'qt/master-stable'Jason Barron2009-07-271-0/+30
|\ \ \ | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: configure.exe qmake/Makefile.unix qmake/generators/makefile.cpp src/corelib/global/qglobal.h src/corelib/kernel/kernel.pri src/corelib/kernel/qcoreevent.cpp src/corelib/kernel/qsharedmemory_unix.cpp src/gui/graphicsview/qgraphicsscene.cpp src/gui/kernel/qaction.cpp src/gui/kernel/qaction.h src/gui/kernel/qaction_p.h src/gui/kernel/qapplication.cpp src/gui/kernel/qapplication.h src/gui/kernel/qwidget.cpp src/gui/kernel/qwidget.h src/gui/kernel/qwidget_mac.mm src/gui/painting/qgraphicssystemfactory.cpp src/gui/styles/qwindowsstyle.cpp src/gui/text/qfontengine_qpf.cpp src/gui/widgets/qabstractscrollarea_p.h src/network/access/qnetworkaccessdebugpipebackend.cpp src/network/socket/qlocalsocket_unix.cpp src/network/socket/qnativesocketengine_p.h src/network/socket/qnativesocketengine_unix.cpp src/openvg/qpaintengine_vg.cpp tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp tests/auto/qcssparser/qcssparser.pro tests/auto/qdir/tst_qdir.cpp tests/auto/qfile/tst_qfile.cpp tests/auto/qobject/tst_qobject.cpp tests/auto/qpathclipper/qpathclipper.pro tests/auto/qprocess/tst_qprocess.cpp tests/auto/qsettings/tst_qsettings.cpp tests/auto/qsharedpointer/qsharedpointer.pro tests/auto/qsqlquerymodel/qsqlquerymodel.pro tests/auto/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro tests/auto/qsqltablemodel/qsqltablemodel.pro tests/auto/qsqlthread/qsqlthread.pro tests/auto/qwidget/tst_qwidget.cpp
| * | Added a version information to our executables.Denis Dzyubenko2009-07-151-0/+30
| | | | | | | | | | | | | | | | | | | | | | | | On Windows, the FileDescription part of the version information is used as a caption for the grouped taskbar button. Task-number: 253065 Reviewed-by: Prasanth Ullattil
* | | Merge commit 'qt/master-stable' into 4.6-mergedJason Barron2009-06-3041-82/+82
|\ \ \ | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: .gitignore configure.exe src/corelib/concurrent/qtconcurrentthreadengine.h src/corelib/global/qnamespace.h src/gui/graphicsview/qgraphicssceneevent.h src/gui/kernel/qapplication.cpp src/gui/kernel/qapplication.h src/gui/kernel/qapplication_p.h src/gui/kernel/qapplication_qws.cpp src/gui/kernel/qwidget.h src/gui/painting/qpaintengine_raster.cpp src/gui/text/qfontdatabase.cpp src/network/access/qnetworkaccesshttpbackend.cpp tests/auto/network-settings.h tests/auto/qscriptjstestsuite/qscriptjstestsuite.pro tests/auto/qvariant/tst_qvariant.cpp
| * | Merge license header changes from 4.5Volker Hilsheimer2009-06-1641-82/+82
| |\ \ | | |/
| | * Update license headers as requested by the marketing department.Jason McDonald2009-06-1641-82/+82
| | | | | | | | | | | | Reviewed-by: Trust Me
* | | Merge commit 'qt/master-stable' into 4.6-stableJason Barron2009-06-255-44/+37
|\ \ \ | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bring Qt 4.6 into the Qt-S60 repo. Conflicts: configure.exe mkspecs/features/qttest_p4.prf qmake/generators/makefile.cpp src/corelib/io/qdir.cpp src/corelib/io/qprocess.h src/corelib/kernel/qcoreevent.h src/corelib/kernel/qobject.cpp src/corelib/kernel/qsharedmemory_unix.cpp src/corelib/thread/qthread_p.h src/corelib/tools/qvector.h src/gui/dialogs/qdialog.cpp src/gui/dialogs/qfiledialog.cpp src/gui/dialogs/qfiledialog_p.h src/gui/dialogs/qmessagebox.cpp src/gui/graphicsview/qgraphicsitem.cpp src/gui/graphicsview/qgraphicsview.cpp src/gui/image/qpixmapcache.cpp src/gui/kernel/qapplication.cpp src/gui/kernel/qapplication_p.h src/gui/kernel/qwidget.cpp src/gui/kernel/qwidget_p.h src/gui/painting/qdrawhelper.cpp src/gui/painting/qpaintengine_raster.cpp src/gui/text/qfontengine_qpf.cpp src/gui/widgets/qmenubar.cpp src/network/socket/qlocalserver.cpp src/testlib/qtestcase.cpp src/testlib/testlib.pro tests/auto/qimagereader/tst_qimagereader.cpp tests/auto/qitemdelegate/tst_qitemdelegate.cpp tests/auto/qnetworkreply/tst_qnetworkreply.cpp tests/auto/qpixmap/qpixmap.pro
| * | Merge commit 'origin/4.5'Bjørn Erik Nilsen2009-06-123-4/+12
| |\ \ | | |/ | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: demos/boxes/glshaders.cpp src/gui/graphicsview/qgraphicsitem.cpp tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp tools/linguist/shared/cpp.cpp translations/linguist_ja.qm translations/qt_ru.qm
| | * Fixed non-working animations under X11 with the raster graphicssystem.Trond Kjernåsen2009-06-101-1/+1
| | | | | | | | | | | | Reviewed-by: jbache
| | * BT: QtDemo works far to sluggish on macRichard Moe Gustavsen2009-06-101-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Basically we need to revert more of Oliviers change. The reason is that we just cannot run the demo on mac without timer based updates (as opposed to graphics view itself tries to figure out when to update). The reason is that the demo uses QItemAnimations extensivelly, which again uses QTimelines, wich again uses separate timers. And on mac, because of coalesced updated, each item animation will result in an individual redrawing of the scene. Task-number: 255751 Reviewed-by: Olivier
| | * BT: Fixes building qtdemo in the installed tree of sources.Thomas Zander2009-06-101-1/+3
| | | | | | | | | | | | | | | | | | | | | The QT_BUILD_TREE variable only works in the source or build dir, but fails in the demo which *install* the sources that should be buildable too. Reviewed-by: Marius Storm-Olsen