summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2011-05-13 13:59:05 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2011-05-13 13:59:05 (GMT)
commitb4d88c1bb1b21cce7928b3466776ad41c9424cea (patch)
treed62a62e26841c54019c765ead734b27c12a142b2
parentaaf8bc90b779d944cb672108ae037d98ea2d1613 (diff)
parent0dbbb137f432e99113ac513c542b4a8431b00b5d (diff)
downloadQt-b4d88c1bb1b21cce7928b3466776ad41c9424cea.zip
Qt-b4d88c1bb1b21cce7928b3466776ad41c9424cea.tar.gz
Qt-b4d88c1bb1b21cce7928b3466776ad41c9424cea.tar.bz2
Merge branch '4.7' of git://scm.dev.nokia.troll.no/qt/qt-doc-team
* '4.7' of git://scm.dev.nokia.troll.no/qt/qt-doc-team: (241 commits) Fix memory leak in QXmlQuery::setQuery. QDeclarativeMouseArea: block context menu events ListViews loses items if all visible items are removed. Make TextEdit word selection more natural. Clear confusion between QMainWindow and QMainWindowLayout. Fix for rounded corners bug in QMenu QWidgetPrivate::setParent_sys might be using null pointer Ensure the TextEdit cursor delegate is repositioned on mouse events. Don't crash on an invalid replacementStart from an input method. Fix incorrect hardware address on systems without getifaddrs() Enable multisampling on Symbian if hw supports it Fix QtCoreu.def file error Introduce platform extension to QGraphicsSystem Fix Symbian/WinsCW build break Prevent crash in OpenGL engine when scaling images / pixmaps. emit QNetWorkAccessManager::finished on QNetworkReply::abort() Fix -no-gui Don't run XLib check if -no-gui is used Ukrainian translation updated fix random miscompilation with msvc ...
-rwxr-xr-xbin/syncqt4
-rwxr-xr-xconfigure15
-rwxr-xr-xconfigure.exebin1326592 -> 1329152 bytes
-rw-r--r--doc/src/declarative/behaviors-and-states.qdoc206
-rw-r--r--doc/src/declarative/qtbinding.qdoc19
-rw-r--r--doc/src/platforms/platform-notes.qdoc32
-rw-r--r--doc/src/snippets/declarative/qtbinding/enums/standalone.qml15
-rw-r--r--examples/declarative/cppextensions/qwidgets/qwidgets.cpp53
-rw-r--r--examples/declarative/screenorientation/Core/Bubble.qml53
-rw-r--r--examples/declarative/screenorientation/Core/Button.qml53
-rw-r--r--examples/declarative/screenorientation/Core/screenorientation.js53
-rw-r--r--examples/declarative/screenorientation/screenorientation.qml53
-rw-r--r--examples/declarative/text/textselection/textselection.qml53
-rw-r--r--examples/declarative/touchinteraction/pincharea/pincharea.qmlproject18
-rw-r--r--examples/ja_JP/linguist/hellotr/main.cpp53
-rw-r--r--mkspecs/common/symbian/symbian-makefile.conf11
-rw-r--r--mkspecs/common/symbian/symbian.conf61
-rw-r--r--mkspecs/common/symbian/template.applite1
-rw-r--r--mkspecs/features/incredibuild_xge.prf2
-rw-r--r--mkspecs/features/moc.prf8
-rw-r--r--mkspecs/features/symbian/do_not_build_as_thumb.prf5
-rw-r--r--mkspecs/features/symbian/symbian_appbooster.prf32
-rw-r--r--mkspecs/features/symbian/symbian_building.prf2
-rw-r--r--mkspecs/features/uic.prf1
-rw-r--r--mkspecs/features/win32/embed_manifest_dll.prf2
-rw-r--r--mkspecs/features/win32/embed_manifest_exe.prf2
-rw-r--r--mkspecs/features/win32/qaxserver.prf10
-rw-r--r--mkspecs/linux-g++-maemo/qplatformdefs.h8
-rw-r--r--mkspecs/symbian-armcc/qmake.conf6
-rw-r--r--mkspecs/symbian-gcce/qmake.conf7
-rw-r--r--mkspecs/unsupported/win32-g++-cross/qmake.conf4
-rw-r--r--mkspecs/win32-g++/qmake.conf6
-rw-r--r--mkspecs/wince50standard-armv4i-msvc2005/default_post.prf2
-rw-r--r--mkspecs/wince50standard-mipsii-msvc2005/default_post.prf2
-rw-r--r--mkspecs/wince50standard-x86-msvc2005/default_post.prf2
-rw-r--r--mkspecs/wincewm50pocket-msvc2005/default_post.prf2
-rw-r--r--mkspecs/wincewm50smart-msvc2005/default_post.prf2
-rw-r--r--mkspecs/wincewm60professional-msvc2005/default_post.prf2
-rw-r--r--mkspecs/wincewm60standard-msvc2005/default_post.prf2
-rw-r--r--qmake/Makefile.win32-g++2
-rw-r--r--qmake/Makefile.win32-g++-sh2
-rw-r--r--qmake/generators/makefile.cpp51
-rw-r--r--qmake/generators/unix/unixmake2.cpp3
-rw-r--r--qmake/generators/win32/msbuild_objectmodel.cpp5
-rw-r--r--qmake/generators/win32/msvc_objectmodel.cpp5
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp48
-rw-r--r--qmake/generators/win32/msvc_vcproj.h1
-rw-r--r--qmake/generators/win32/msvc_vcxproj.cpp6
-rw-r--r--qmake/project.cpp34
-rw-r--r--qmake/project.h1
-rw-r--r--qmake/qmake.pri2
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp1
-rw-r--r--src/3rdparty/phonon/phonon/audiooutputadaptor.cpp25
-rw-r--r--src/3rdparty/phonon/phonon/audiooutputadaptor_p.h25
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h2
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.pro17
-rw-r--r--src/activeqt/shared/qaxtypes.cpp2
-rw-r--r--src/corelib/global/qglobal.cpp25
-rw-r--r--src/corelib/global/qglobal.h9
-rw-r--r--src/corelib/global/qlibraryinfo.cpp10
-rw-r--r--src/corelib/global/qnamespace.h2
-rw-r--r--src/corelib/global/qnamespace.qdoc1
-rw-r--r--src/corelib/io/qdiriterator.cpp28
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian.cpp27
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian_p.h3
-rw-r--r--src/corelib/tools/qtextboundaryfinder.cpp4
-rw-r--r--src/declarative/debugger/qdeclarativedebughelper.cpp2
-rw-r--r--src/declarative/debugger/qdeclarativedebugserver.cpp28
-rw-r--r--src/declarative/graphicsitems/qdeclarativeborderimage.cpp4
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable.cpp244
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable_p_p.h16
-rw-r--r--src/declarative/graphicsitems/qdeclarativegridview.cpp28
-rw-r--r--src/declarative/graphicsitems/qdeclarativeimage.cpp23
-rw-r--r--src/declarative/graphicsitems/qdeclarativeimagebase.cpp27
-rw-r--r--src/declarative/graphicsitems/qdeclarativeimagebase_p.h3
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview.cpp61
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea.cpp42
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea_p.h6
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea_p_p.h17
-rw-r--r--src/declarative/graphicsitems/qdeclarativepathview.cpp5
-rw-r--r--src/declarative/graphicsitems/qdeclarativepincharea.cpp236
-rw-r--r--src/declarative/graphicsitems/qdeclarativepincharea_p.h7
-rw-r--r--src/declarative/graphicsitems/qdeclarativepincharea_p_p.h5
-rw-r--r--src/declarative/graphicsitems/qdeclarativepositioners.cpp10
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext.cpp23
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext_p_p.h1
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextedit.cpp15
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextinput.cpp63
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextinput_p.h5
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextinput_p_p.h8
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextlayout.cpp15
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextlayout_p.h2
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp5
-rw-r--r--src/declarative/qml/qdeclarativeboundsignal.cpp28
-rw-r--r--src/declarative/qml/qdeclarativecomponent.cpp17
-rw-r--r--src/declarative/qml/qdeclarativecomponent_p.h1
-rw-r--r--src/declarative/qml/qdeclarativecontextscriptclass.cpp16
-rw-r--r--src/declarative/qml/qdeclarativeenginedebug.cpp12
-rw-r--r--src/declarative/qml/qdeclarativeproperty.cpp2
-rw-r--r--src/declarative/qml/qdeclarativetypeloader_p.h2
-rw-r--r--src/declarative/qml/qmetaobjectbuilder.cpp2
-rw-r--r--src/declarative/util/qdeclarativebehavior.cpp5
-rw-r--r--src/declarative/util/qdeclarativelistmodel.cpp3
-rw-r--r--src/declarative/util/qdeclarativepixmapcache.cpp7
-rw-r--r--src/declarative/util/qdeclarativexmllistmodel.cpp69
-rw-r--r--src/gui/egl/qegl_symbian.cpp11
-rw-r--r--src/gui/embedded/qvfbhdr.h41
-rw-r--r--src/gui/graphicsview/qgraphicslayout.cpp145
-rw-r--r--src/gui/graphicsview/qgraphicslayout.h2
-rw-r--r--src/gui/graphicsview/qgraphicslayout_p.cpp9
-rw-r--r--src/gui/graphicsview/qgraphicslinearlayout.cpp8
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp3
-rw-r--r--src/gui/graphicsview/qgraphicstransform.cpp4
-rw-r--r--src/gui/graphicsview/qgraphicsview.cpp2
-rw-r--r--src/gui/graphicsview/qgraphicswidget.cpp105
-rw-r--r--src/gui/gui.pro8
-rw-r--r--src/gui/image/qimage.cpp2
-rw-r--r--src/gui/image/qpixmap.cpp2
-rw-r--r--src/gui/image/qpixmapcache.cpp4
-rw-r--r--src/gui/image/qvolatileimage.cpp5
-rw-r--r--src/gui/image/qvolatileimage_p.h1
-rw-r--r--src/gui/inputmethod/qcoefepinputcontext_s60.cpp69
-rw-r--r--src/gui/kernel/kernel.pri2
-rw-r--r--src/gui/kernel/qapplication.cpp17
-rw-r--r--src/gui/kernel/qapplication_s60.cpp279
-rw-r--r--src/gui/kernel/qapplication_win.cpp34
-rw-r--r--src/gui/kernel/qcocoasharedwindowmethods_mac_p.h14
-rw-r--r--src/gui/kernel/qsoftkeymanager.cpp31
-rw-r--r--src/gui/kernel/qsoftkeymanager_common_p.h3
-rw-r--r--src/gui/kernel/qsoftkeymanager_s60.cpp4
-rw-r--r--src/gui/kernel/qt_s60_p.h72
-rw-r--r--src/gui/kernel/qwidget.cpp20
-rw-r--r--src/gui/kernel/qwidget_mac.mm14
-rw-r--r--src/gui/kernel/qwidget_p.h2
-rw-r--r--src/gui/kernel/qwidget_s60.cpp49
-rw-r--r--src/gui/painting/painting.pri7
-rw-r--r--src/gui/painting/qbrush.cpp6
-rw-r--r--src/gui/painting/qdrawhelper_neon.cpp4
-rw-r--r--src/gui/painting/qgraphicssystem.cpp16
-rw-r--r--src/gui/painting/qgraphicssystem_p.h3
-rw-r--r--src/gui/painting/qgraphicssystemex_p.h66
-rw-r--r--src/gui/painting/qgraphicssystemex_symbian.cpp87
-rw-r--r--src/gui/painting/qgraphicssystemex_symbian_p.h73
-rw-r--r--src/gui/painting/qpaintengine_mac.cpp2
-rw-r--r--src/gui/painting/qpainter.cpp34
-rw-r--r--src/gui/painting/qpainterpath.cpp66
-rw-r--r--src/gui/painting/qtextureglyphcache.cpp2
-rw-r--r--src/gui/s60framework/qs60mainappui.cpp9
-rw-r--r--src/gui/styles/qs60style.cpp60
-rw-r--r--src/gui/styles/qs60style_s60.cpp44
-rw-r--r--src/gui/styles/qstylesheetstyle.cpp7
-rw-r--r--src/gui/text/qfontengine_ft.cpp4
-rw-r--r--src/gui/text/qfontengine_mac.mm4
-rw-r--r--src/gui/text/qfragmentmap_p.h5
-rw-r--r--src/gui/text/qtextcontrol.cpp25
-rw-r--r--src/gui/text/qtextengine.cpp16
-rw-r--r--src/gui/text/qtextengine_p.h1
-rw-r--r--src/gui/text/qtextlayout.cpp19
-rw-r--r--src/gui/text/qtextobject.cpp2
-rw-r--r--src/gui/util/qdesktopservices_s60.cpp2
-rw-r--r--src/gui/widgets/qcombobox.cpp8
-rw-r--r--src/gui/widgets/qlinecontrol.cpp16
-rw-r--r--src/gui/widgets/qmainwindow.cpp2
-rw-r--r--src/gui/widgets/qmainwindowlayout.cpp1
-rw-r--r--src/gui/widgets/qmainwindowlayout_p.h1
-rw-r--r--src/gui/widgets/qmenu.cpp12
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel.cpp6
-rw-r--r--src/network/access/qhttpnetworkreply.cpp8
-rw-r--r--src/network/access/qnetworkaccesshttpbackend.cpp13
-rw-r--r--src/network/access/qnetworkaccessmanager.cpp2
-rw-r--r--src/network/access/qnetworkreplyimpl.cpp10
-rw-r--r--src/network/bearer/qnetworkconfigmanager.cpp3
-rw-r--r--src/network/bearer/qnetworkconfigmanager_p.cpp15
-rw-r--r--src/network/bearer/qsharednetworksession.cpp7
-rw-r--r--src/network/kernel/qnetworkinterface_unix.cpp2
-rw-r--r--src/network/socket/qabstractsocket.cpp4
-rw-r--r--src/network/socket/qhttpsocketengine.cpp8
-rw-r--r--src/network/ssl/qsslsocket.cpp2
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp2
-rw-r--r--src/opengl/qgl.cpp2
-rw-r--r--src/opengl/qgl_symbian.cpp30
-rw-r--r--src/opengl/qglpaintdevice.cpp2
-rw-r--r--src/opengl/qgraphicssystem_gl.cpp10
-rw-r--r--src/opengl/qgraphicssystem_gl_p.h13
-rw-r--r--src/opengl/qwindowsurface_gl.cpp59
-rw-r--r--src/openvg/qpaintengine_vg.cpp20
-rw-r--r--src/openvg/qpixmapdata_vg.cpp2
-rw-r--r--src/openvg/qwindowsurface_vg.cpp11
-rw-r--r--src/openvg/qwindowsurface_vgegl.cpp9
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp4
-rw-r--r--src/plugins/graphicssystems/meego/qmeegographicssystem.cpp2
-rw-r--r--src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp8
-rw-r--r--src/plugins/graphicssystems/openvg/qgraphicssystem_vg_p.h12
-rw-r--r--src/plugins/plugins.pro4
-rw-r--r--src/plugins/qmltooling/qmldbg_ost/qmldbg_ost.pro21
-rw-r--r--src/plugins/qmltooling/qmldbg_ost/qmlostplugin.cpp143
-rw-r--r--src/plugins/qmltooling/qmldbg_ost/qmlostplugin.h81
-rw-r--r--src/plugins/qmltooling/qmldbg_ost/qostdevice.cpp180
-rw-r--r--src/plugins/qmltooling/qmldbg_ost/qostdevice.h75
-rw-r--r--src/plugins/qmltooling/qmldbg_ost/usbostcomm.h191
-rw-r--r--src/plugins/qmltooling/qmldbg_tcp/qmldbg_tcp.pro (renamed from src/plugins/qmltooling/tcpserver/tcpserver.pro)4
-rw-r--r--src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp (renamed from src/plugins/qmltooling/tcpserver/qtcpserverconnection.cpp)11
-rw-r--r--src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.h (renamed from src/plugins/qmltooling/tcpserver/qtcpserverconnection.h)0
-rw-r--r--src/plugins/qmltooling/qmltooling.pro4
-rw-r--r--src/s60installs/bwins/QtCoreu.def46
-rw-r--r--src/s60installs/bwins/QtDeclarativeu.def9
-rw-r--r--src/s60installs/bwins/QtGuiu.def132
-rw-r--r--src/s60installs/bwins/QtMultimediau.def5
-rw-r--r--src/s60installs/bwins/QtNetworku.def14
-rw-r--r--src/s60installs/bwins/QtOpenGLu.def4
-rw-r--r--src/s60installs/bwins/QtScriptu.def2
-rw-r--r--src/s60installs/bwins/QtSqlu.def3
-rw-r--r--src/s60installs/bwins/QtTestu.def90
-rw-r--r--src/s60installs/bwins/QtXmlPatternsu.def3
-rw-r--r--src/s60installs/bwins/QtXmlu.def7
-rw-r--r--src/s60installs/bwins/phononu.def4
-rw-r--r--src/s60installs/eabi/QtGuiu.def15
-rw-r--r--src/s60installs/eabi/QtOpenGLu.def5
-rw-r--r--src/s60installs/eabi/QtTestu.def93
-rw-r--r--src/s60installs/qt.iby20
-rw-r--r--src/sql/drivers/mysql/qsql_mysql.cpp8
-rw-r--r--src/svg/qsvghandler.cpp2
-rw-r--r--src/tools/uic3/uic3.pro1
-rw-r--r--src/xmlpatterns/expr/qevaluationcache.cpp2
-rw-r--r--src/xmlpatterns/expr/qevaluationcache_p.h4
-rw-r--r--src/xmlpatterns/expr/qexpressionvariablereference.cpp2
-rw-r--r--src/xmlpatterns/expr/qexpressionvariablereference_p.h8
-rw-r--r--src/xmlpatterns/expr/qtemplateparameterreference.cpp2
-rw-r--r--src/xmlpatterns/expr/qtemplateparameterreference_p.h8
-rw-r--r--src/xmlpatterns/expr/quserfunctioncallsite.cpp2
-rw-r--r--src/xmlpatterns/parser/qquerytransformparser.cpp8
-rw-r--r--tests/auto/declarative/qdeclarativeanimations/data/attached.qml2
-rw-r--r--tests/auto/declarative/qdeclarativebehaviors/data/delayedRegistration.qml25
-rw-r--r--tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp18
-rw-r--r--tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp21
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/attachedProperty.2.qml22
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/signalAssignment.2.qml2
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/signalParameterTypes.qml8
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/testtypes.h7
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp56
-rw-r--r--tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativegridview/data/gridview1.qml1
-rw-r--r--tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp54
-rw-r--r--tests/auto/declarative/qdeclarativeimage/data/aspectratio.qml4
-rw-r--r--tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp32
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp42
-rw-r--r--tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml1
-rw-r--r--tests/auto/declarative/qdeclarativelistview/data/orientchange.qml7
-rw-r--r--tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp116
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/data/preventContextMenu.qml22
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp63
-rw-r--r--tests/auto/declarative/qdeclarativepathview/data/datamodel.qml1
-rw-r--r--tests/auto/declarative/qdeclarativepathview/data/pathview0.qml1
-rw-r--r--tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp14
-rw-r--r--tests/auto/declarative/qdeclarativepincharea/data/flickresize.qml50
-rw-r--r--tests/auto/declarative/qdeclarativepincharea/tst_qdeclarativepincharea.cpp73
-rw-r--r--tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp22
-rw-r--r--tests/auto/declarative/qdeclarativetext/data/elideimplicitwidth.qml7
-rw-r--r--tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp7
-rw-r--r--tests/auto/declarative/qdeclarativetextedit/data/CursorRect.qml8
-rw-r--r--tests/auto/declarative/qdeclarativetextedit/data/cursorTest.qml1
-rw-r--r--tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_readonly.qml8
-rw-r--r--tests/auto/declarative/qdeclarativetextedit/data/mouseselection_multiline.qml8
-rw-r--r--tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_readonly.qml8
-rw-r--r--tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp200
-rw-r--r--tests/auto/declarative/qdeclarativetextinput/data/mouseselection_default.qml7
-rw-r--r--tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false.qml7
-rw-r--r--tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false_readonly.qml8
-rw-r--r--tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false_words.qml7
-rw-r--r--tests/auto/declarative/qdeclarativetextinput/data/mouseselection_true_readonly.qml8
-rw-r--r--tests/auto/declarative/qdeclarativetextinput/data/mouseselection_true_words.qml7
-rw-r--r--tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp265
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp5
-rw-r--r--tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp2
-rw-r--r--tests/auto/macnativeevents/tst_macnativeevents.cpp8
-rw-r--r--tests/auto/q3combobox/tst_q3combobox.cpp4
-rw-r--r--tests/auto/q3progressbar/tst_q3progressbar.cpp9
-rw-r--r--tests/auto/qdiriterator/tst_qdiriterator.cpp55
-rw-r--r--tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp3
-rw-r--r--tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp79
-rw-r--r--tests/auto/qgraphicslayout/tst_qgraphicslayout.cpp321
-rw-r--r--tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp40
-rw-r--r--tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp4
-rw-r--r--tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp41
-rw-r--r--tests/auto/qimage/tst_qimage.cpp8
-rw-r--r--tests/auto/qlistview/tst_qlistview.cpp3
-rw-r--r--tests/auto/qnetworkconfiguration/tst_qnetworkconfiguration.cpp8
-rw-r--r--tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp50
-rw-r--r--tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp31
-rw-r--r--tests/auto/qnetworkreply/tst_qnetworkreply.cpp31
-rw-r--r--tests/auto/qnetworksession/test/tst_qnetworksession.cpp8
-rw-r--r--tests/auto/qpainterpath/tst_qpainterpath.cpp46
-rw-r--r--tests/auto/qpixmap/tst_qpixmap.cpp69
-rw-r--r--tests/auto/qstyle/tst_qstyle.cpp12
-rw-r--r--tests/auto/qwidget/tst_qwidget.cpp25
-rw-r--r--tests/benchmarks/gui/graphicsview/graphicsview.pro1
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicslayout/qgraphicslayout.pro6
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp153
-rw-r--r--tests/manual/qgraphicslayout/flicker/flicker.pro8
-rw-r--r--tests/manual/qgraphicslayout/flicker/main.cpp56
-rw-r--r--tests/manual/qgraphicslayout/flicker/window.cpp73
-rw-r--r--tests/manual/qgraphicslayout/flicker/window.h284
-rw-r--r--tools/configure/configureapp.cpp2
-rw-r--r--tools/linguist/shared/qm.cpp2
-rw-r--r--tools/linguist/shared/ts.cpp12
-rw-r--r--tools/qdoc3/qdoc3.pro2
-rw-r--r--tools/qml/main.cpp3
-rw-r--r--tools/qml/qml.pro2
-rw-r--r--tools/qml/startup/startup.qml2
-rw-r--r--[-rwxr-xr-x]translations/assistant_cs.ts0
-rw-r--r--translations/assistant_ko.ts1551
-rw-r--r--translations/assistant_pl.ts828
-rw-r--r--translations/assistant_ru.ts12
-rw-r--r--[-rwxr-xr-x]translations/designer_cs.ts0
-rw-r--r--translations/designer_ko.ts5817
-rw-r--r--translations/designer_pl.ts64
-rw-r--r--translations/designer_ru.ts6
-rw-r--r--translations/designer_uk.ts10
-rw-r--r--[-rwxr-xr-x]translations/linguist_cs.ts0
-rw-r--r--translations/linguist_de.ts7
-rw-r--r--translations/linguist_ko.ts2500
-rw-r--r--translations/linguist_pl.ts1201
-rw-r--r--translations/linguist_ru.ts12
-rw-r--r--translations/linguist_uk.ts4
-rw-r--r--[-rwxr-xr-x]translations/qt_cs.ts0
-rw-r--r--translations/qt_de.ts71
-rw-r--r--[-rwxr-xr-x]translations/qt_help_cs.ts0
-rw-r--r--translations/qt_help_ko.ts318
-rw-r--r--translations/qt_help_pl.ts72
-rw-r--r--translations/qt_ko.ts9941
-rw-r--r--translations/qt_pl.ts172
-rw-r--r--translations/qt_ru.ts655
-rw-r--r--translations/qt_uk.ts67
-rw-r--r--translations/qtconfig_ko.ts745
-rw-r--r--translations/qtconfig_pl.ts197
-rw-r--r--translations/qtconfig_uk.ts20
-rw-r--r--translations/qvfb_ko.ts415
-rw-r--r--translations/qvfb_pl.ts208
339 files changed, 30191 insertions, 2707 deletions
diff --git a/bin/syncqt b/bin/syncqt
index b8f1ee7..7e1f581 100755
--- a/bin/syncqt
+++ b/bin/syncqt
@@ -334,7 +334,9 @@ sub syncHeader {
open HEADER, ">$header" || die "Could not open $header for writing!\n";
print HEADER "#include \"$iheader_out\"\n";
close HEADER;
- utime(time, $ts, $header) or die "$iheader, $header";
+ if(defined($ts)) {
+ utime(time, $ts, $header) or die "$iheader, $header";
+ }
return 1;
}
return 0;
diff --git a/configure b/configure
index 0a88c85..95debec 100755
--- a/configure
+++ b/configure
@@ -641,10 +641,10 @@ CFG_XRANDR=runtime
CFG_XRENDER=auto
CFG_MITSHM=auto
CFG_OPENGL=auto
-CFG_OPENVG=no
+CFG_OPENVG=auto
CFG_OPENVG_LC_INCLUDES=no
-CFG_OPENVG_SHIVA=no
-CFG_OPENVG_ON_OPENGL=no
+CFG_OPENVG_SHIVA=auto
+CFG_OPENVG_ON_OPENGL=auto
CFG_EGL=no
CFG_EGL_GLES_INCLUDES=no
CFG_SSE=auto
@@ -3244,7 +3244,7 @@ if [ "$PLATFORM_QWS" = "yes" ] && [ "$CFG_OPENGL" = "auto" ]; then
fi
# mac
-if [ "$PLATFORM_MAC" = "yes" ]; then
+if [ "$PLATFORM_MAC" = "yes" ] && [ "$XPLATFORM_SYMBIAN" = "no" ]; then
if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then
CFG_OPENGL=desktop
fi
@@ -5515,7 +5515,7 @@ if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then
fi # X11/QWS
# X11
-if [ "$PLATFORM_X11" = "yes" ]; then
+if [ "$PLATFORM_X11" = "yes" -a "$CFG_GUI" != "no" ]; then
x11tests="$relpath/config.tests/x11"
X11TESTS_FLAGS=
@@ -5537,8 +5537,8 @@ if [ "$PLATFORM_X11" = "yes" ]; then
fi
fi
-# X11/MINGW OpenGL
-if [ "$PLATFORM_X11" = "yes" -o "$XPLATFORM_MINGW" = "yes" ]; then
+# X11/MINGW/SYMBIAN OpenGL
+if [ "$PLATFORM_X11" = "yes" -o "$XPLATFORM_MINGW" = "yes" -o "$XPLATFORM_SYMBIAN" = "yes" ]; then
# auto-detect OpenGL support (es1 = OpenGL ES 1.x Common, es2 = OpenGL ES 2.x)
if [ "$CFG_GUI" = "no" ]; then
if [ "$CFG_OPENGL" = "auto" ]; then
@@ -7120,7 +7120,6 @@ EOF
canBuildQtConcurrent="no"
;;
symbian-gcce)
- canBuildWebKit="no"
canBuildQtConcurrent="no"
;;
symbian-armcc)
diff --git a/configure.exe b/configure.exe
index 293d667..a1fceeb 100755
--- a/configure.exe
+++ b/configure.exe
Binary files differ
diff --git a/doc/src/declarative/behaviors-and-states.qdoc b/doc/src/declarative/behaviors-and-states.qdoc
new file mode 100644
index 0000000..0815b39
--- /dev/null
+++ b/doc/src/declarative/behaviors-and-states.qdoc
@@ -0,0 +1,206 @@
+/****************************************************************************
+**
+** 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 documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Free Documentation License
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of this
+** file.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+\page qml-behaviors-and-states.html
+\title Using QML Behaviors with States
+
+\section1 Using Behaviors with States
+
+In some cases you may choose to use a Behavior to animate a property change caused by a state change. While this works well for some situations, in other situations it may lead to unexpected behavior.
+
+Here's an example that shows the problem:
+
+\qml
+import QtQuick 1.0
+
+Rectangle {
+ width: 400
+ height: 400
+
+ Rectangle {
+ id: coloredRect
+ width: 100
+ height: 100
+ anchors.centerIn: parent
+
+ color: "red"
+ Behavior on color {
+ ColorAnimation {}
+ }
+
+ MouseArea {
+ id: mouser
+ anchors.fill: parent
+ hoverEnabled: true
+ }
+
+ states: State {
+ name: "GreenState"
+ when: mouser.containsMouse
+
+ PropertyChanges {
+ target: coloredRect
+ color: "green"
+ }
+ }
+ }
+}
+\endqml
+
+Testing the example by quickly and repeatedly moving the mouse in to and out of the colored rectangle shows that the colored rectangle will settle into a green color over time, never returning to full red. This is not what we wanted! The
+problem occurs because we have used a Behavior to animate the change in color, and our state change is trigged by the mouse entering or exiting the MouseArea, which is easily interrupted.
+
+To state the problem more formally, using States and Behaviors together can cause unexpected behavior when:
+\list
+\o a Behavior is used to animate a property change, specifically when moving from an explicitly defined state back to the implicit base state; and
+\o this Behavior can be interrupted to (re-)enter an explicitly defined state.
+\endlist
+
+The problem occurs because of the way the base state is defined for QML: as the "snapshot" state of the application just prior to entering an explicitly defined state. In this case, if we are in the process of animating from green back
+to red, and interrupt the animation to return to "GreenState", the base state will include the color in its intermediate, mid-animation form.
+
+While future versions of QML should be able to handle this situation more gracefully, there are currently several ways to rework your application to avoid this problem.
+
+1. Use a transition to animate the change, rather than a Behavior.
+
+\qml
+import QtQuick 1.0
+
+Rectangle {
+ width: 400
+ height: 400
+
+ Rectangle {
+ id: coloredRect
+ width: 100
+ height: 100
+ anchors.centerIn: parent
+
+ color: "red"
+
+ MouseArea {
+ id: mouser
+ anchors.fill: parent
+ hoverEnabled: true
+ }
+
+ states: State {
+ name: "GreenState"
+ when: mouser.containsMouse
+
+ PropertyChanges {
+ target: coloredRect
+ color: "green"
+ }
+ }
+
+ transitions: Transition {
+ ColorAnimation {}
+ }
+ }
+}
+\endqml
+
+2. Use a conditional binding to change the property value, rather than a state
+
+\qml
+import QtQuick 1.0
+
+Rectangle {
+ width: 400
+ height: 400
+
+ Rectangle {
+ id: coloredRect
+ width: 100
+ height: 100
+ anchors.centerIn: parent
+
+ color: mouser.containsMouse ? "green" : "red"
+ Behavior on color {
+ ColorAnimation {}
+ }
+
+ MouseArea {
+ id: mouser
+ anchors.fill: parent
+ hoverEnabled: true
+ }
+ }
+}
+\endqml
+
+3. Use only explicitly defined states, rather than an implicit base state
+
+\qml
+import QtQuick 1.0
+
+Rectangle {
+ width: 400
+ height: 400
+
+ Rectangle {
+ id: coloredRect
+ width: 100
+ height: 100
+ anchors.centerIn: parent
+
+ Behavior on color {
+ ColorAnimation {}
+ }
+
+ MouseArea {
+ id: mouser
+ anchors.fill: parent
+ hoverEnabled: true
+ }
+
+ states: [
+ State {
+ name: "GreenState"
+ when: mouser.containsMouse
+
+ PropertyChanges {
+ target: coloredRect
+ color: "green"
+ }
+ },
+ State {
+ name: "RedState"
+ when: !mouser.containsMouse
+
+ PropertyChanges {
+ target: coloredRect
+ color: "red"
+ }
+ }]
+ }
+}
+\endqml
+
+*/
diff --git a/doc/src/declarative/qtbinding.qdoc b/doc/src/declarative/qtbinding.qdoc
index d11825e..3659caa 100644
--- a/doc/src/declarative/qtbinding.qdoc
+++ b/doc/src/declarative/qtbinding.qdoc
@@ -368,6 +368,10 @@ instead to create the signal handler:
\o \snippet doc/src/snippets/declarative/qtbinding/signals-cpp/MyItem.qml 0
\endtable
+C++ signals can use enum values as parameters provided that the enum is declared in the
+class that is emitting the signal, and that the enum is registered using Q_ENUMS.
+See \l {Using enumerations of a custom type} below for details.
+
\section2 Modifying properties
@@ -503,6 +507,21 @@ the \l {Extending QML Functionalities using C++} reference documentation for
more information.
+\section2 Using enumeration values as signal parameters
+
+C++ signals may pass enumeration values as signal parameters to QML, providing that the enumeration
+and the signal are declared within the same class, or that the enumeration value is one of those declared
+in the \l {Qt}{Qt Namespace}.
+
+Additionally, if a C++ signal with an enum parameter should be connectable to a QML function using the
+\l {Connecting signals to methods and other signals}{connect()} function, the enum type must be
+registered using qRegisterMetaType().
+
+For QML signals, enum values may be used as signal parameters using the \c int type:
+
+\snippet doc/src/snippets/declarative/qtbinding/enums/standalone.qml 1
+
+
\section2 Automatic type conversion from strings
As a convenience, some basic types can be specified in QML using format strings to make it easier to
diff --git a/doc/src/platforms/platform-notes.qdoc b/doc/src/platforms/platform-notes.qdoc
index de6eb7f..f4eb8bd 100644
--- a/doc/src/platforms/platform-notes.qdoc
+++ b/doc/src/platforms/platform-notes.qdoc
@@ -645,28 +645,8 @@
\section1 Supported Devices
- Qt is designed to work on any device which runs one of the following
- versions of Symbian:
-
- \table
- \header \o Symbian Version
- \row \o S60 3.1
- \row \o S60 3.2
- \row \o S60 5.0 (Symbian ^1)
- \endtable
-
- Qt has received \l{Tier 1 Platforms}{Tier 1} testing on the following phone models:
-
- \table
- \header \o Phone
- \row \o Nokia 5800
- \row \o Nokia E71
- \row \o Nokia E72
- \row \o Nokia N78
- \row \o Nokia N95
- \row \o Nokia N97
- \row \o Samsung i8910
- \endtable
+ See the list of supported devices at
+ http://wiki.forum.nokia.com/index.php/Nokia_Smart_Installer_for_Symbian#Supported_Devices
\section1 Supported Functionality
@@ -679,8 +659,6 @@
\o Planned for future release.
\row \o QtDBus
\o No current plans to support this feature.
- \row \o QtOpenGL ES
- \o Planned for future release.
\row \o Printing support
\o No current plans to support this feature.
\row \o Qt3Support
@@ -774,6 +752,12 @@
plugin. If the Helix plugin fails to load, the MMF plugin, if present on
the device, will be loaded instead.
+ \section1 QtOpenGL Support
+
+ Qt 4.7 introduces the QtOpenGL module to Symbian^3. QtOpenGL is supported on
+ devices which support OpenGL ES 2.0. Symbian platforms prior to Symbian^3
+ are not supported.
+
\section1 UI Performance in devices prior to Symbian^3
Qt uses the QPainter class to perform low-level painting on widgets and
diff --git a/doc/src/snippets/declarative/qtbinding/enums/standalone.qml b/doc/src/snippets/declarative/qtbinding/enums/standalone.qml
index 5721870..74e2c9c 100644
--- a/doc/src/snippets/declarative/qtbinding/enums/standalone.qml
+++ b/doc/src/snippets/declarative/qtbinding/enums/standalone.qml
@@ -38,6 +38,9 @@
**
****************************************************************************/
import MyLibrary 1.0
+import QtQuick 1.0
+
+Item {
//![0]
ImageViewer {
@@ -47,3 +50,15 @@ ImageViewer {
}
}
//![0]
+
+//![1]
+ImageViewer {
+ signal someOtherSignal(int statusValue)
+
+ Component.onCompleted: {
+ someOtherSignal(ImageViewer.Loading)
+ }
+}
+//![1]
+
+}
diff --git a/examples/declarative/cppextensions/qwidgets/qwidgets.cpp b/examples/declarative/cppextensions/qwidgets/qwidgets.cpp
index 172f895..843ac0f 100644
--- a/examples/declarative/cppextensions/qwidgets/qwidgets.cpp
+++ b/examples/declarative/cppextensions/qwidgets/qwidgets.cpp
@@ -6,35 +6,34 @@
**
** This file is part of the examples of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/examples/declarative/screenorientation/Core/Bubble.qml b/examples/declarative/screenorientation/Core/Bubble.qml
index 273e703..446fa1f 100644
--- a/examples/declarative/screenorientation/Core/Bubble.qml
+++ b/examples/declarative/screenorientation/Core/Bubble.qml
@@ -6,35 +6,34 @@
**
** This file is part of the examples of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/examples/declarative/screenorientation/Core/Button.qml b/examples/declarative/screenorientation/Core/Button.qml
index e2ee162..8fefe0c 100644
--- a/examples/declarative/screenorientation/Core/Button.qml
+++ b/examples/declarative/screenorientation/Core/Button.qml
@@ -6,35 +6,34 @@
**
** This file is part of the examples of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/examples/declarative/screenorientation/Core/screenorientation.js b/examples/declarative/screenorientation/Core/screenorientation.js
index 4e0cc28..ffc6dc8 100644
--- a/examples/declarative/screenorientation/Core/screenorientation.js
+++ b/examples/declarative/screenorientation/Core/screenorientation.js
@@ -6,35 +6,34 @@
**
** This file is part of the examples of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/examples/declarative/screenorientation/screenorientation.qml b/examples/declarative/screenorientation/screenorientation.qml
index 5e71516..2575274 100644
--- a/examples/declarative/screenorientation/screenorientation.qml
+++ b/examples/declarative/screenorientation/screenorientation.qml
@@ -6,35 +6,34 @@
**
** This file is part of the examples of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/examples/declarative/text/textselection/textselection.qml b/examples/declarative/text/textselection/textselection.qml
index d02a317..4b51f4e 100644
--- a/examples/declarative/text/textselection/textselection.qml
+++ b/examples/declarative/text/textselection/textselection.qml
@@ -6,35 +6,34 @@
**
** This file is part of the examples of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/examples/declarative/touchinteraction/pincharea/pincharea.qmlproject b/examples/declarative/touchinteraction/pincharea/pincharea.qmlproject
new file mode 100644
index 0000000..e526217
--- /dev/null
+++ b/examples/declarative/touchinteraction/pincharea/pincharea.qmlproject
@@ -0,0 +1,18 @@
+/* File generated by QtCreator */
+
+import QmlProject 1.0
+
+Project {
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "."
+ }
+ /* List of plugin directories passed to QML runtime */
+ // importPaths: [ " ../exampleplugin " ]
+}
diff --git a/examples/ja_JP/linguist/hellotr/main.cpp b/examples/ja_JP/linguist/hellotr/main.cpp
index 5c9554f..517cb7b 100644
--- a/examples/ja_JP/linguist/hellotr/main.cpp
+++ b/examples/ja_JP/linguist/hellotr/main.cpp
@@ -6,35 +6,34 @@
**
** This file is part of the examples of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, 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.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf
index b248117..a725df3 100644
--- a/mkspecs/common/symbian/symbian-makefile.conf
+++ b/mkspecs/common/symbian/symbian-makefile.conf
@@ -10,6 +10,17 @@ contains(QMAKE_HOST.os,Windows) {
include(symbian.conf)
+QMAKE_INCDIR_OPENGL = $${EPOCROOT}epoc32/include
+QMAKE_LIBDIR_OPENGL = $${EPOCROOT}epoc32/release/armv5/lib
+QMAKE_INCDIR_OPENGL_ES1 = $${EPOCROOT}epoc32/include/GLES
+QMAKE_LIBDIR_OPENGL_ES1 = $$QMAKE_LIBDIR_OPENGL
+QMAKE_INCDIR_OPENGL_ES2 = $${EPOCROOT}epoc32/include/GLES2
+QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
+QMAKE_INCDIR_EGL = $${EPOCROOT}epoc32/include/EGL
+QMAKE_LIBDIR_EGL = $$QMAKE_LIBDIR_OPENGL
+QMAKE_INCDIR_OPENVG = $${EPOCROOT}epoc32/include/VG
+QMAKE_LIBDIR_OPENVG = $$QMAKE_LIBDIR_OPENGL
+
QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src
diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf
index 117f332..0288ada 100644
--- a/mkspecs/common/symbian/symbian.conf
+++ b/mkspecs/common/symbian/symbian.conf
@@ -57,7 +57,8 @@ QMAKE_INCDIR =
QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
QMAKE_LFLAGS =
-QMAKE_LFLAGS.ARMCC =
+QMAKE_LFLAGS.ARMCC =
+QMAKE_LFLAGS.GCCE =
QMAKE_LFLAGS_EXCEPTIONS_ON =
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE =
@@ -83,7 +84,7 @@ QMAKE_LIBS_OPENGL_ES2_QT = $$QMAKE_LIBS_OPENGL_ES2 $$QMAKE_LIBS_CFBSBITMAP -lcon
QMAKE_LIBS_OPENVG = $$QMAKE_LIBS_CFBSBITMAP -llibOpenVG
QMAKE_LIBS_THREAD = -llibpthread
QMAKE_LIBS_COMPAT =
-QMAKE_LIBS_S60 = -lavkon -leikcoctl
+QMAKE_LIBS_S60 = -lavkon -leikcoctl -lgfxtrans
exists($${EPOCROOT}epoc32/include/platform/sgresource/sgimage.h) {
QMAKE_LIBS_OPENVG += -lsgresource
@@ -163,34 +164,39 @@ exists($${EPOCROOT}epoc32/tools/qt/mkspecs/features/environment.prf) {
# Try to detect SDK version if it wasn't set by environment.prf
isEmpty(SYMBIAN_VERSION)|isEmpty(S60_VERSION) {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.3.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.3.sis) {
- isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = Symbian3
- isEmpty(S60_VERSION): S60_VERSION = 5.3
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.4.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.4.sis) {
+ isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 5.4
+ isEmpty(S60_VERSION): S60_VERSION = 5.4
} else {
- # The Symbian^3 PDK does not necessarily contain the required sis files.
- # However, libstdcppv5 first appeared in Symbian^3 (S60 5.2), so check for that too.
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/release/armv5/lib/libstdcppv5.dso) {
- isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = Symbian3
- isEmpty(S60_VERSION): S60_VERSION = 5.2
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.3.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.3.sis) {
+ isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 5.3
+ isEmpty(S60_VERSION): S60_VERSION = 5.3
} else {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) {
- isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = Symbian2
- isEmpty(S60_VERSION): S60_VERSION = 5.1
+ # The Symbian^3 PDK does not necessarily contain the required sis files.
+ # However, libstdcppv5 first appeared in Symbian^3 (S60 5.2), so check for that too.
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/release/armv5/lib/libstdcppv5.dso) {
+ isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = Symbian3
+ isEmpty(S60_VERSION): S60_VERSION = 5.2
} else {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) {
- isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 9.4
- isEmpty(S60_VERSION): S60_VERSION = 5.0
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) {
+ isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = Symbian2
+ isEmpty(S60_VERSION): S60_VERSION = 5.1
} else {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) {
- isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 9.3
- isEmpty(S60_VERSION): S60_VERSION = 3.2
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) {
+ isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 9.4
+ isEmpty(S60_VERSION): S60_VERSION = 5.0
} else {
- exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.1.sis) {
- isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 9.2
- isEmpty(S60_VERSION): S60_VERSION = 3.1
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) {
+ isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 9.3
+ isEmpty(S60_VERSION): S60_VERSION = 3.2
} else {
- isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = Unknown
- isEmpty(S60_VERSION): S60_VERSION = Unknown
+ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.1.sis) {
+ isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 9.2
+ isEmpty(S60_VERSION): S60_VERSION = 3.1
+ } else {
+ isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = Unknown
+ isEmpty(S60_VERSION): S60_VERSION = Unknown
+ }
}
}
}
@@ -241,9 +247,12 @@ defineTest(matchSymbianLanguages) {
language = $$replace(translation, "^(.*/)?[^/]+_(([^_]{2,3}_)?[^_]{2,3})\\.ts$", \\2)
!contains(HANDLED_LANGUAGES, $$language) {
HANDLED_LANGUAGES += $$language
+ # Make sure translation path is absolute or shadow builds will not work
+ !contains(translation, "(^/|^\\\\|^.:).*"): translation = $$_PRO_FILE_PWD_/$$translation
+
contains(SYMBIAN_SUPPORTED_LANGUAGES, $$language) {
SYMBIAN_MATCHED_LANGUAGES += $$language
- SYMBIAN_MATCHED_TRANSLATIONS += $$_PRO_FILE_PWD_/$$translation
+ SYMBIAN_MATCHED_TRANSLATIONS += $$translation
} else {
# No direct mapping for specified language found. Check if a fallback language code can be used.
strippedLanguage = $$replace(language, "_.*$",)
@@ -251,7 +260,7 @@ defineTest(matchSymbianLanguages) {
HANDLED_LANGUAGES += $$strippedLanguage
SYMBIAN_UNMAPPED_LANGUAGES += $$language
SYMBIAN_MATCHED_LANGUAGES += $$language
- SYMBIAN_MATCHED_TRANSLATIONS += $$_PRO_FILE_PWD_/$$translation
+ SYMBIAN_MATCHED_TRANSLATIONS += $$translation
SYMBIAN_LANGUAGE_FALLBACK.$$language = $$strippedLanguage
export(SYMBIAN_LANGUAGE_FALLBACK.$$language)
}
diff --git a/mkspecs/common/symbian/template.applite b/mkspecs/common/symbian/template.applite
new file mode 100644
index 0000000..73a1999
--- /dev/null
+++ b/mkspecs/common/symbian/template.applite
@@ -0,0 +1 @@
+// This is an auto-generated lite registration file \ No newline at end of file
diff --git a/mkspecs/features/incredibuild_xge.prf b/mkspecs/features/incredibuild_xge.prf
index a81a0cc..97ccc44 100644
--- a/mkspecs/features/incredibuild_xge.prf
+++ b/mkspecs/features/incredibuild_xge.prf
@@ -1,4 +1,4 @@
-contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc") {
+contains(TEMPLATE, "vc.*") {
EOC = $$escape_expand(\\n\\t)
# The VCPROJ generator will replace the \r\h with the coded \r\n: &#x0d;&#x0a;
diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf
index 89e9b40..d0b36e4 100644
--- a/mkspecs/features/moc.prf
+++ b/mkspecs/features/moc.prf
@@ -16,7 +16,7 @@ win32:count($$list($$INCLUDEPATH), 40, >) {
EOC = $$escape_expand(\\n\\t)
- if(contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc")) {
+ contains(TEMPLATE, "vc.*") {
# the VCPROJ generator will replace the \r\h with the coded \r\n: &#x0d;&#x0a;
# No other generator understands the \h
if(win32-msvc2*|wince*msvc*): EOC = $$escape_expand(\\r\\h)
@@ -42,7 +42,7 @@ win32:count($$list($$INCLUDEPATH), 40, >) {
defineReplace(mocCmdBase) {
!isEmpty(WIN_INCLUDETEMP) {
RET =
- if(contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc")) {
+ contains(TEMPLATE, "vc.*") {
RET += $$mocinclude.commands
}
RET += $$QMAKE_MOC $(DEFINES) @$$WIN_INCLUDETEMP $$join(QMAKE_COMPILER_DEFINES, " -D", -D)
@@ -59,7 +59,7 @@ moc_header.output = $$MOC_DIR/$${QMAKE_H_MOD_MOC}${QMAKE_FILE_BASE}$${first(QMAK
moc_header.input = HEADERS
moc_header.variable_out = SOURCES
moc_header.name = MOC ${QMAKE_FILE_IN}
-if(!contains(TEMPLATE, "vc.*"):!contains(TEMPLATE_PREFIX, "vc")) {
+!contains(TEMPLATE, "vc.*") {
!isEmpty(INCLUDETEMP):moc_header.depends += $$INCLUDETEMP
}
silent:moc_header.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_header.commands
@@ -73,7 +73,7 @@ moc_source.commands = ${QMAKE_FUNC_mocCmdBase} ${QMAKE_FILE_IN} -o ${QMAKE_FILE_
moc_source.output = $$MOC_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_EXT_CPP_MOC}
moc_source.input = SOURCES OBJECTIVE_SOURCES
moc_source.name = MOC ${QMAKE_FILE_IN}
-if(!contains(TEMPLATE, "vc.*"):!contains(TEMPLATE_PREFIX, "vc")) {
+!contains(TEMPLATE, "vc.*") {
!isEmpty(INCLUDETEMP):moc_source.depends += $$INCLUDETEMP
}
silent:moc_source.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_source.commands
diff --git a/mkspecs/features/symbian/do_not_build_as_thumb.prf b/mkspecs/features/symbian/do_not_build_as_thumb.prf
index 0f1fd9f..91a63c2 100644
--- a/mkspecs/features/symbian/do_not_build_as_thumb.prf
+++ b/mkspecs/features/symbian/do_not_build_as_thumb.prf
@@ -5,4 +5,9 @@ symbian-abld|symbian-sbsv2 {
QMAKE_CFLAGS += --arm
QMAKE_CXXFLAGS -= --thumb
QMAKE_CXXFLAGS += --arm
+} else:symbian-gcce {
+ QMAKE_CFLAGS -= --thumb
+ QMAKE_CFLAGS += -marm -mthumb-interwork -mapcs
+ QMAKE_CXXFLAGS -= --thumb
+ QMAKE_CXXFLAGS += -marm -mthumb-interwork -mapcs
}
diff --git a/mkspecs/features/symbian/symbian_appbooster.prf b/mkspecs/features/symbian/symbian_appbooster.prf
new file mode 100644
index 0000000..080f4d0
--- /dev/null
+++ b/mkspecs/features/symbian/symbian_appbooster.prf
@@ -0,0 +1,32 @@
+contains(TEMPLATE, ".*app") {
+ baseTarget = $$symbianRemoveSpecialCharacters($$basename(TARGET))
+
+ symbian-abld|symbian-sbsv2 {
+ LITE_REG_TARGET = $$_PRO_FILE_PWD_
+ } else {
+ contains(DESTDIR, "/.*") {
+ LITE_REG_TARGET = $$DESTDIR
+ } else:isEmpty(DESTDIR) {
+ LITE_REG_TARGET = $$OUT_PWD
+ } else {
+ LITE_REG_TARGET = $$OUT_PWD/$$DESTDIR
+ }
+ }
+
+ LITE_REG_TARGET = $${LITE_REG_TARGET}/$${baseTarget}.applite
+ LITE_REG_TEMPLATE = $$[QT_INSTALL_DATA]/mkspecs/common/symbian/template.applite
+
+ lite_reg_copy.input = LITE_REG_TEMPLATE
+ lite_reg_copy.output = $$LITE_REG_TARGET
+ lite_reg_copy.variable_out = PRE_TARGETDEPS
+ lite_reg_copy.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
+ lite_reg_copy.CONFIG += no_link
+ QMAKE_EXTRA_COMPILERS += lite_reg_copy
+
+ isEmpty(LITE_IMPORT_DIR): LITE_IMPORT_DIR = /private/20034884/import/apps
+ lite_deployment.sources += $$LITE_REG_TARGET
+ lite_deployment.path = $$LITE_IMPORT_DIR
+ DEPLOYMENT += lite_deployment
+
+ LIBS += -lqDeclarativeBooster.dll
+}
diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf
index 28046b4..8c75707 100644
--- a/mkspecs/features/symbian/symbian_building.prf
+++ b/mkspecs/features/symbian/symbian_building.prf
@@ -1,6 +1,7 @@
symbian-armcc {
QMAKE_CFLAGS += $$QMAKE_CFLAGS.ARMCC
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.ARMCC
+ QMAKE_LFLAGS += $$QMAKE_LFLAGS.ARMCC
# This is to prevent inclusion of the shipped RVCT headers, which are often in the
# environment variable RVCTxxINC by default. -J prevents the searching of that location,
# but needs a path, so just specify somewhere guaranteed not to contain header files.
@@ -9,6 +10,7 @@ symbian-armcc {
} else:symbian-gcce {
QMAKE_CFLAGS += $$QMAKE_CFLAGS.GCCE
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.GCCE
+ QMAKE_LFLAGS += $$QMAKE_LFLAGS.GCCE
}
# We need a target name without the INFIX'ed part, since flags are not infixed.
diff --git a/mkspecs/features/uic.prf b/mkspecs/features/uic.prf
index 0a18b47..74a2683 100644
--- a/mkspecs/features/uic.prf
+++ b/mkspecs/features/uic.prf
@@ -77,6 +77,7 @@ uic3 {
uic3_moc.input = UIC3_HEADERS
uic3_moc.variable_out = GENERATED_SOURCES
uic3_moc.name = $$moc_header.name
+ !contains(TEMPLATE, "vc.*"):!isEmpty(INCLUDETEMP):uic3_moc.depends += $$INCLUDETEMP
QMAKE_EXTRA_COMPILERS += uic3_moc
}
diff --git a/mkspecs/features/win32/embed_manifest_dll.prf b/mkspecs/features/win32/embed_manifest_dll.prf
index 69c9d1d..5545a62 100644
--- a/mkspecs/features/win32/embed_manifest_dll.prf
+++ b/mkspecs/features/win32/embed_manifest_dll.prf
@@ -1,4 +1,4 @@
-!if(plugin:no_plugin_manifest):if(win32-msvc2005*|win32-msvc2008*|win32-msvc2010*):!static:!equals(TEMPLATE_PREFIX, "vc"):equals(TEMPLATE, "lib") {
+!if(plugin:no_plugin_manifest):if(win32-msvc2005*|win32-msvc2008*|win32-msvc2010*):!static:equals(TEMPLATE, "lib") {
MANIFEST_DIR = $$OBJECTS_DIR
isEmpty(MANIFEST_DIR):MANIFEST_DIR = .
NOPATH_TARGET = $$TARGET
diff --git a/mkspecs/features/win32/embed_manifest_exe.prf b/mkspecs/features/win32/embed_manifest_exe.prf
index 44aadfa..c6d012e 100644
--- a/mkspecs/features/win32/embed_manifest_exe.prf
+++ b/mkspecs/features/win32/embed_manifest_exe.prf
@@ -1,4 +1,4 @@
-if(win32-msvc2005*|win32-msvc2008*|win32-msvc2010*):!equals(TEMPLATE_PREFIX, "vc"):equals(TEMPLATE, "app") {
+if(win32-msvc2005*|win32-msvc2008*|win32-msvc2010*):equals(TEMPLATE, "app") {
MANIFEST_DIR = $$OBJECTS_DIR
isEmpty(MANIFEST_DIR):MANIFEST_DIR = .
NOPATH_TARGET = $$TARGET
diff --git a/mkspecs/features/win32/qaxserver.prf b/mkspecs/features/win32/qaxserver.prf
index 2899976..a6c0869 100644
--- a/mkspecs/features/win32/qaxserver.prf
+++ b/mkspecs/features/win32/qaxserver.prf
@@ -8,12 +8,7 @@ isEmpty(ACTIVEQT_VERSION):ACTIVEQT_VERSION = 1.0
DEFINES += QAXSERVER
-ACTIVEQT_IDE = makefile
-equals(TEMPLATE_PREFIX, "vc"):ACTIVEQT_IDE = VisualStudio
-equals(TEMPLATE, "vcapp"):ACTIVEQT_IDE = VisualStudio
-equals(TEMPLATE, "vclib"):ACTIVEQT_IDE = VisualStudio
-
-equals(ACTIVEQT_IDE, "VisualStudio") {
+contains(TEMPLATE, "vc.*") {
ACTIVEQT_IDC = $${QMAKE_IDC} ### Qt5: remove me
qtPrepareTool(ACTIVEQT_IDC, idc)
ACTIVEQT_IDL = $${QMAKE_IDL}
@@ -27,8 +22,7 @@ equals(ACTIVEQT_IDE, "VisualStudio") {
}
ACTIVEQT_TLBOUT = "$(TargetDir)/$${TARGET}.tlb"
GENERATED += $${OBJECTS_DIR}/$${TARGET}.idl $${ACTIVEQT_TLBOUT}
-}
-equals(ACTIVEQT_IDE, "makefile") {
+} else {
ACTIVEQT_IDC = -$(IDC)
ACTIVEQT_IDL = -$(IDL)
ACTIVEQT_NEWLINE = $$escape_expand(\\n\\t)
diff --git a/mkspecs/linux-g++-maemo/qplatformdefs.h b/mkspecs/linux-g++-maemo/qplatformdefs.h
index cf6d24e..0a0e122 100644
--- a/mkspecs/linux-g++-maemo/qplatformdefs.h
+++ b/mkspecs/linux-g++-maemo/qplatformdefs.h
@@ -43,3 +43,11 @@
#define QT_GUI_DOUBLE_CLICK_RADIUS 20
#define QT_GUI_DRAG_DISTANCE 16
+
+#define QML_FLICK_OVERSHOOT 160
+#define QML_FLICK_SAMPLEBUFFER 6
+#define QML_FLICK_DISCARDSAMPLES 2
+#define QML_FLICK_DEFAULTMAXVELOCITY 2500
+#define QML_FLICK_DEFAULTDECELERATION 2000
+#define QML_FLICK_OVERSHOOTFRICTION 10
+
diff --git a/mkspecs/symbian-armcc/qmake.conf b/mkspecs/symbian-armcc/qmake.conf
index 77a1966..2de3218 100644
--- a/mkspecs/symbian-armcc/qmake.conf
+++ b/mkspecs/symbian-armcc/qmake.conf
@@ -12,7 +12,7 @@ QMAKE_RVCT_LINKSTYLE = 1
#QMAKE_qtmain_CXXFLAGS = --arm
#QMAKE_QtCore_CXXFLAGS =
-QMAKE_QtGui_LFLAGS = "--rw-base 0x800000"
+#QMAKE_QtGui_LFLAGS = "--rw-base 0x800000"
#QMAKE_QtDBus_CXXFLAGS =
#QMAKE_QtDeclarative_CXXFLAGS =
#QMAKE_QtMultimedia_CXXFLAGS =
@@ -27,9 +27,9 @@ QMAKE_QtGui_LFLAGS = "--rw-base 0x800000"
#QMAKE_QtTest_CXXFLAGS =
#QMAKE_QtXmlPatterns_CXXFLAGS =
#QMAKE_QtXml_CXXFLAGS =
-QMAKE_QtWebKit_CXXFLAGS = --arm
+#QMAKE_QtWebKit_CXXFLAGS = --arm
# Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000.
-QMAKE_QtWebKit_LFLAGS = --rw-base 0xE00000
+#QMAKE_QtWebKit_LFLAGS = --rw-base 0xE00000
QMAKE_CFLAGS += --dllimport_runtime --diag_suppress 186,611,654,1300 --thumb --fpu softvfp --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --no_vfe --apcs /inter
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
diff --git a/mkspecs/symbian-gcce/qmake.conf b/mkspecs/symbian-gcce/qmake.conf
index 62a079b..38042e9 100644
--- a/mkspecs/symbian-gcce/qmake.conf
+++ b/mkspecs/symbian-gcce/qmake.conf
@@ -19,7 +19,7 @@ QMAKE_AR = arm-none-symbianelf-ar cqs
QMAKE_qtmain_CXXFLAGS = -mthumb
QMAKE_QtCore_CXXFLAGS = -mthumb
-QMAKE_QtGui_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000
+#QMAKE_QtGui_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000
QMAKE_QtDBus_CXXFLAGS = -mthumb
QMAKE_QtDeclarative_CXXFLAGS = -mthumb
QMAKE_QtMultimedia_CXXFLAGS = -mthumb
@@ -34,8 +34,7 @@ QMAKE_QtSvg_CXXFLAGS = -mthumb
QMAKE_QtTest_CXXFLAGS = -mthumb
QMAKE_QtXmlPatterns_CXXFLAGS = -mthumb
QMAKE_QtXml_CXXFLAGS = -mthumb
-#TODO fails with; arm-none-symbianelf-ld: section .data loaded at [00e00000,00e05973] overlaps section .text loaded at [00008000,00fe748b]
-QMAKE_QtWebKit_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000
+#QMAKE_QtWebKit_LFLAGS = -Ttext 0x8000 -Tdata 0xE00000
# never use -fPIC, gcce-linker doesn't like it.
# g++ conf above adds it if the host platform is 64 bit, so we remove it again
@@ -58,7 +57,7 @@ QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
gcceExtraFlags = --include=$${EPOCROOT}epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -msoft-float -T script
QMAKE_CFLAGS += $${gcceExtraFlags}
-QMAKE_CXXFLAGS += $${gcceExtraFlags} -x c++ -fexceptions -fno-unit-at-a-time -fvisibility-inlines-hidden
+QMAKE_CXXFLAGS += $${gcceExtraFlags} -x c++ -fexceptions -fno-unit-at-a-time -fvisibility-inlines-hidden -Os
#If we are not going to link to Qt or qtmain.lib, we need to include this at least once.
isEmpty(QT):contains(TEMPLATE, app) {
QMAKE_CXXFLAGS += --include=$${EPOCROOT}epoc32/include/stdapis/staticlibinit_gcce.h
diff --git a/mkspecs/unsupported/win32-g++-cross/qmake.conf b/mkspecs/unsupported/win32-g++-cross/qmake.conf
index efc3de2..01e2f10 100644
--- a/mkspecs/unsupported/win32-g++-cross/qmake.conf
+++ b/mkspecs/unsupported/win32-g++-cross/qmake.conf
@@ -52,7 +52,7 @@ QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
QMAKE_LINK = i686-pc-mingw32-g++
QMAKE_LINK_C = i686-pc-mingw32-gcc
-QMAKE_LFLAGS = -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
+QMAKE_LFLAGS =
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE = -Wl,-s
@@ -65,7 +65,7 @@ QMAKE_LINK_OBJECT_SCRIPT= object_script
QMAKE_LIBS =
-QMAKE_LIBS_CORE = -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32
+QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32
QMAKE_LIBS_NETWORK = -lws2_32
QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32
diff --git a/mkspecs/win32-g++/qmake.conf b/mkspecs/win32-g++/qmake.conf
index da65727..220af32 100644
--- a/mkspecs/win32-g++/qmake.conf
+++ b/mkspecs/win32-g++/qmake.conf
@@ -52,7 +52,7 @@ QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
QMAKE_LINK = g++
QMAKE_LINK_C = gcc
-QMAKE_LFLAGS = -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
+QMAKE_LFLAGS =
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE = -Wl,-s
@@ -67,7 +67,7 @@ QMAKE_EXTENSION_STATICLIB = a
QMAKE_LIBS =
-QMAKE_LIBS_CORE = -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32
+QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32
QMAKE_LIBS_NETWORK = -lws2_32
QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32
@@ -82,7 +82,7 @@ QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain
QMAKE_COPY_DIR = cp -r
QMAKE_MOVE = mv
QMAKE_DEL_FILE = rm
- QMAKE_MKDIR = mkdir
+ QMAKE_MKDIR = mkdir -p
QMAKE_DEL_DIR = rmdir
QMAKE_CHK_DIR_EXISTS = test -d
} else {
diff --git a/mkspecs/wince50standard-armv4i-msvc2005/default_post.prf b/mkspecs/wince50standard-armv4i-msvc2005/default_post.prf
index 3dab72a..900d758 100644
--- a/mkspecs/wince50standard-armv4i-msvc2005/default_post.prf
+++ b/mkspecs/wince50standard-armv4i-msvc2005/default_post.prf
@@ -1,6 +1,6 @@
# Visual Studio has some definitions set internally.
# Thus we do not need to redefine these.
-if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) {
+equals(TEMPLATE, "vc.*") {
DEFINES -= _M_ARM
QMAKE_CXXFLAGS += -fp:precise
}
diff --git a/mkspecs/wince50standard-mipsii-msvc2005/default_post.prf b/mkspecs/wince50standard-mipsii-msvc2005/default_post.prf
index d3e49ab..4dbcf35 100644
--- a/mkspecs/wince50standard-mipsii-msvc2005/default_post.prf
+++ b/mkspecs/wince50standard-mipsii-msvc2005/default_post.prf
@@ -1,6 +1,6 @@
# Visual Studio has some definitions set internally.
# Thus we do not need to redefine these.
-if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) {
+contains(TEMPLATE, "vc.*") {
DEFINES -= _M_MRX000=3000
QMAKE_CXXFLAGS += -fp:precise
}
diff --git a/mkspecs/wince50standard-x86-msvc2005/default_post.prf b/mkspecs/wince50standard-x86-msvc2005/default_post.prf
index 6790c60..2436efb 100644
--- a/mkspecs/wince50standard-x86-msvc2005/default_post.prf
+++ b/mkspecs/wince50standard-x86-msvc2005/default_post.prf
@@ -1,6 +1,6 @@
# Visual Studio has some definitions set internally.
# Thus we do not need to redefine these.
-if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) {
+equals(TEMPLATE, "vc.*") {
QMAKE_CXXFLAGS += -fp:precise
}
diff --git a/mkspecs/wincewm50pocket-msvc2005/default_post.prf b/mkspecs/wincewm50pocket-msvc2005/default_post.prf
index 3dab72a..84ea15e 100644
--- a/mkspecs/wincewm50pocket-msvc2005/default_post.prf
+++ b/mkspecs/wincewm50pocket-msvc2005/default_post.prf
@@ -1,6 +1,6 @@
# Visual Studio has some definitions set internally.
# Thus we do not need to redefine these.
-if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) {
+contains(TEMPLATE, "vc.*") {
DEFINES -= _M_ARM
QMAKE_CXXFLAGS += -fp:precise
}
diff --git a/mkspecs/wincewm50smart-msvc2005/default_post.prf b/mkspecs/wincewm50smart-msvc2005/default_post.prf
index 3dab72a..84ea15e 100644
--- a/mkspecs/wincewm50smart-msvc2005/default_post.prf
+++ b/mkspecs/wincewm50smart-msvc2005/default_post.prf
@@ -1,6 +1,6 @@
# Visual Studio has some definitions set internally.
# Thus we do not need to redefine these.
-if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) {
+contains(TEMPLATE, "vc.*") {
DEFINES -= _M_ARM
QMAKE_CXXFLAGS += -fp:precise
}
diff --git a/mkspecs/wincewm60professional-msvc2005/default_post.prf b/mkspecs/wincewm60professional-msvc2005/default_post.prf
index 3dab72a..84ea15e 100644
--- a/mkspecs/wincewm60professional-msvc2005/default_post.prf
+++ b/mkspecs/wincewm60professional-msvc2005/default_post.prf
@@ -1,6 +1,6 @@
# Visual Studio has some definitions set internally.
# Thus we do not need to redefine these.
-if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) {
+contains(TEMPLATE, "vc.*") {
DEFINES -= _M_ARM
QMAKE_CXXFLAGS += -fp:precise
}
diff --git a/mkspecs/wincewm60standard-msvc2005/default_post.prf b/mkspecs/wincewm60standard-msvc2005/default_post.prf
index 3dab72a..84ea15e 100644
--- a/mkspecs/wincewm60standard-msvc2005/default_post.prf
+++ b/mkspecs/wincewm60standard-msvc2005/default_post.prf
@@ -1,6 +1,6 @@
# Visual Studio has some definitions set internally.
# Thus we do not need to redefine these.
-if(equals(TEMPLATE_PREFIX, "vc") | equals(TEMPLATE, "vc*")) {
+contains(TEMPLATE, "vc.*") {
DEFINES -= _M_ARM
QMAKE_CXXFLAGS += -fp:precise
}
diff --git a/qmake/Makefile.win32-g++ b/qmake/Makefile.win32-g++
index 29fbd0a..5a46e41 100644
--- a/qmake/Makefile.win32-g++
+++ b/qmake/Makefile.win32-g++
@@ -28,7 +28,7 @@ CFLAGS = -c -o$@ -O \
-DQT_BOOTSTRAPPED -DQLIBRARYINFO_EPOCROOT
CXXFLAGS = $(CFLAGS)
LFLAGS = -static-libgcc -static-libstdc++ -s
-LIBS = -lole32 -luuid
+LIBS = -lole32 -luuid -ladvapi32 -lkernel32
LINKQMAKE = g++ $(LFLAGS) -o qmake.exe $(OBJS) $(QTOBJS) $(LIBS)
ADDCLEAN =
diff --git a/qmake/Makefile.win32-g++-sh b/qmake/Makefile.win32-g++-sh
index 9c7942c..6ca7514 100644
--- a/qmake/Makefile.win32-g++-sh
+++ b/qmake/Makefile.win32-g++-sh
@@ -28,7 +28,7 @@ CFLAGS = -c -o$@ -O \
-DQT_BOOTSTRAPPED -DQLIBRARYINFO_EPOCROOT
CXXFLAGS = $(CFLAGS)
LFLAGS = -static-libgcc -static-libstdc++ -s
-LIBS = -lole32 -luuid
+LIBS = -lole32 -luuid -ladvapi32 -lkernel32
LINKQMAKE = g++ $(LFLAGS) -o qmake.exe $(OBJS) $(QTOBJS) $(LIBS)
ADDCLEAN =
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index c13f38e..b9089fc 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -364,7 +364,7 @@ MakefileGenerator::findFilesInVPATH(QStringList l, uchar flags, const QString &v
dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1);
real_dir = dir;
if(!(flags & VPATH_NoFixify))
- real_dir = fileFixify(real_dir, qmake_getpwd(), Option::output_dir);
+ real_dir = fileFixify(real_dir, qmake_getpwd(), Option::output_dir) + '/';
regex.remove(0, dir.length());
}
if(real_dir.isEmpty() || exists(real_dir)) {
@@ -383,16 +383,15 @@ MakefileGenerator::findFilesInVPATH(QStringList l, uchar flags, const QString &v
for(int i = (int)files.count()-1; i >= 0; i--) {
if(files[i] == "." || files[i] == "..")
continue;
- a = dir + files[i];
+ a = real_dir + files[i];
if(!(flags & VPATH_NoFixify))
a = fileFixify(a);
l.insert(val_it, a);
}
}
} else {
- debug_msg(1, "%s:%d Cannot match %s%c%s, as %s does not exist.",
+ debug_msg(1, "%s:%d Cannot match %s%s, as %s does not exist.",
__FILE__, __LINE__, real_dir.toLatin1().constData(),
- QDir::separator().toLatin1(),
regex.toLatin1().constData(), real_dir.toLatin1().constData());
if(flags & VPATH_RemoveMissingFiles)
remove_file = true;
@@ -484,19 +483,22 @@ MakefileGenerator::init()
subs.at(i).toLatin1().constData());
continue;
}
- inn = tinn.first();
- outn = toutn.first();
+ inn = fileFixify(tinn.first(), qmake_getpwd());
+ outn = fileFixify(toutn.first(), qmake_getpwd(), Option::output_dir);
} else {
- inn = subs.at(i);
+ inn = fileFixify(subs.at(i), qmake_getpwd());
+ if (!QFile::exists(inn)) {
+ // random insanity for backwards compat: .in file specified with absolute out dir
+ inn = fileFixify(subs.at(i));
+ }
if(!inn.endsWith(".in")) {
warn_msg(WarnLogic, "Substitute '%s' does not end with '.in'",
inn.toLatin1().constData());
continue;
}
- outn = inn.left(inn.length()-3);
+ outn = fileFixify(inn.left(inn.length()-3), qmake_getpwd(), Option::output_dir);
}
- QFile in(fileFixify(inn));
- QFile out(fileFixify(outn, qmake_getpwd(), Option::output_dir));
+ QFile in(inn);
if(in.open(QFile::ReadOnly)) {
QString contents;
QStack<int> state;
@@ -545,9 +547,10 @@ MakefileGenerator::init()
else
state.pop();
} else if(state.isEmpty() || state.top() == IN_CONDITION) {
- contents += project->expand(line).join(QString(Option::field_sep));
+ contents += project->expand(line, in.fileName(), count);
}
}
+ QFile out(outn);
if(out.exists() && out.open(QFile::ReadOnly)) {
QString old = QString::fromUtf8(out.readAll());
if(contents == old) {
@@ -782,10 +785,8 @@ MakefileGenerator::init()
}
{ //get the output_dir into the pwd
- if(fileFixify(Option::output_dir) != fileFixify(qmake_getpwd()))
- project->values("INCLUDEPATH").append(fileFixify(Option::output_dir,
- Option::output_dir,
- Option::output_dir));
+ if(Option::output_dir != qmake_getpwd())
+ project->values("INCLUDEPATH").append(".");
}
//fix up the target deps
@@ -1108,7 +1109,7 @@ MakefileGenerator::writePrlFile()
&& project->isActiveConfig("create_prl")
&& (project->first("TEMPLATE") == "lib"
|| project->first("TEMPLATE") == "vclib")
- && !project->isActiveConfig("plugin")) { //write prl file
+ && (!project->isActiveConfig("plugin") || project->isActiveConfig("static"))) { //write prl file
QString local_prl = prlFileName();
QString prl = fileFixify(local_prl);
mkdir(fileInfo(local_prl).path());
@@ -1746,7 +1747,7 @@ MakefileGenerator::writeExtraTargets(QTextStream &t)
deps += " " + escapeDependencyPath(dep);
}
if(project->values((*it) + ".CONFIG").indexOf("fix_target") != -1)
- targ = fileFixify(targ);
+ targ = fileFixify(targ, Option::output_dir, Option::output_dir);
if(project->isEmpty("QMAKE_NOFORCE") &&
project->values((*it) + ".CONFIG").indexOf("phony") != -1)
deps += QString(" ") + "FORCE";
@@ -2462,7 +2463,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
//qmake it
if(!subtarget->profile.isEmpty()) {
QString out = subtarget->makefile;
- QString in = fileFixify(in_directory + subtarget->profile, out_directory, QString(), FileFixifyAbsolute);
+ QString in = fileFixify(in_directory + subtarget->profile, FileFixifyAbsolute);
if(out.startsWith(in_directory))
out = out.mid(in_directory.length());
t << mkfile << ": " << "\n\t";
@@ -2825,9 +2826,6 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q
return cacheVal;
//do the fixin'
- QString pwd = qmake_getpwd();
- if (!pwd.endsWith('/'))
- pwd += '/';
QString orig_file = ret;
if(ret.startsWith(QLatin1Char('~'))) {
if(ret.startsWith(QLatin1String("~/")))
@@ -2836,12 +2834,16 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q
warn_msg(WarnLogic, "Unable to expand ~ in %s", ret.toLatin1().constData());
}
if(fix == FileFixifyAbsolute || (fix == FileFixifyDefault && project->isActiveConfig("no_fixpath"))) {
- if(fix == FileFixifyAbsolute && QDir::isRelativePath(ret)) //already absolute
+ if(fix == FileFixifyAbsolute && QDir::isRelativePath(ret)) { //already absolute
+ QString pwd = qmake_getpwd();
+ if (!pwd.endsWith(QLatin1Char('/')))
+ pwd += QLatin1Char('/');
ret.prepend(pwd);
+ }
ret = Option::fixPathToTargetOS(ret, false, canon);
} else { //fix it..
QString out_dir = QDir(Option::output_dir).absoluteFilePath(out_d);
- QString in_dir = QDir(pwd).absoluteFilePath(in_d);
+ QString in_dir = QDir(qmake_getpwd()).absoluteFilePath(in_d);
{
QFileInfo in_fi(fileInfo(in_dir));
if(in_fi.exists())
@@ -2895,6 +2897,7 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q
//prepend
for(int o = 0; o < i; o++)
dot_prefix += ".." + Option::dir_sep;
+ break;
}
}
ret.prepend(dot_prefix);
@@ -2907,7 +2910,7 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q
ret = ".";
debug_msg(3, "Fixed[%d,%d] %s :: to :: %s [%s::%s] [%s::%s]", fix, canon, orig_file.toLatin1().constData(),
ret.toLatin1().constData(), in_d.toLatin1().constData(), out_d.toLatin1().constData(),
- pwd.toLatin1().constData(), Option::output_dir.toLatin1().constData());
+ qmake_getpwd().toLatin1().constData(), Option::output_dir.toLatin1().constData());
cache->insert(cacheKey, ret);
return ret;
}
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index c660855..c0c0aaa 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -787,7 +787,8 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
ddir = project->first("QMAKE_DISTDIR");
QString ddir_c = escapeFilePath(fileFixify((project->isEmpty("OBJECTS_DIR") ? QString(".tmp/") :
- project->first("OBJECTS_DIR")) + ddir));
+ project->first("OBJECTS_DIR")) + ddir,
+ Option::output_dir, Option::output_dir));
t << "dist: " << "\n\t"
<< mkdir_p_asstring(ddir_c) << "\n\t"
<< "$(COPY_FILE) --parents $(SOURCES) $(DIST) " << ddir_c << Option::dir_sep << " && ";
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp
index bd94178..01f730a 100644
--- a/qmake/generators/win32/msbuild_objectmodel.cpp
+++ b/qmake/generators/win32/msbuild_objectmodel.cpp
@@ -2438,6 +2438,9 @@ bool VCXFilter::addExtraCompiler(const VCXFilterFile &info)
char buff[256];
QString dep_cmd = Project->replaceExtraCompilerVariables(tmp_dep_cmd, Option::fixPathToLocalOS(inFile, true, false), out);
if(Project->canExecute(dep_cmd)) {
+ dep_cmd.prepend(QLatin1String("cd ")
+ + Project->escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false))
+ + QLatin1String(" && "));
if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) {
QString indeps;
while(!feof(proc)) {
@@ -2452,7 +2455,7 @@ bool VCXFilter::addExtraCompiler(const VCXFilterFile &info)
for (int i = 0; i < extradeps.count(); ++i) {
QString dd = extradeps.at(i).simplified();
if (!dd.isEmpty())
- deps += Project->fileFixify(dd);
+ deps += Project->fileFixify(dd, QString(), Option::output_dir);
}
}
}
diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp
index 87c8943..0a24a01 100644
--- a/qmake/generators/win32/msvc_objectmodel.cpp
+++ b/qmake/generators/win32/msvc_objectmodel.cpp
@@ -2218,6 +2218,9 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info)
Option::fixPathToLocalOS(inFile, true, false),
out);
if(Project->canExecute(dep_cmd)) {
+ dep_cmd.prepend(QLatin1String("cd ")
+ + Project->escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false))
+ + QLatin1String(" && "));
if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) {
QString indeps;
while(!feof(proc)) {
@@ -2232,7 +2235,7 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info)
for (int i = 0; i < extradeps.count(); ++i) {
QString dd = extradeps.at(i).simplified();
if (!dd.isEmpty())
- deps += Project->fileFixify(dd);
+ deps += Project->fileFixify(dd, QString(), Option::output_dir);
}
}
}
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index 364eca0..5005190 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -352,6 +352,25 @@ QUuid VcprojGenerator::increaseUUID(const QUuid &id)
return result;
}
+QStringList VcprojGenerator::collectSubDirs(QMakeProject *proj)
+{
+ QStringList subdirs;
+ QStringList tmp_proj_subdirs = proj->variables()["SUBDIRS"];
+ for(int x = 0; x < tmp_proj_subdirs.size(); ++x) {
+ QString tmpdir = tmp_proj_subdirs.at(x);
+ if(!proj->isEmpty(tmpdir + ".file")) {
+ if(!proj->isEmpty(tmpdir + ".subdir"))
+ warn_msg(WarnLogic, "Cannot assign both file and subdir for subdir %s",
+ tmpdir.toLatin1().constData());
+ tmpdir = proj->first(tmpdir + ".file");
+ } else if(!proj->isEmpty(tmpdir + ".subdir")) {
+ tmpdir = proj->first(tmpdir + ".subdir");
+ }
+ subdirs += tmpdir;
+ }
+ return subdirs;
+}
+
void VcprojGenerator::writeSubDirs(QTextStream &t)
{
// Check if all requirements are fulfilled
@@ -386,7 +405,6 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
QHash<QString, VcsolutionDepend*> solution_depends;
QList<VcsolutionDepend*> solution_cleanup;
- QStringList subdirs = project->values("SUBDIRS");
QString oldpwd = qmake_getpwd();
// Make sure that all temp projects are configured
@@ -395,16 +413,9 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
QStringList old_after_vars = Option::after_user_vars;
Option::after_user_vars.append("CONFIG+=release");
+ QStringList subdirs = collectSubDirs(project);
for(int i = 0; i < subdirs.size(); ++i) {
QString tmp = subdirs.at(i);
- if(!project->isEmpty(tmp + ".file")) {
- if(!project->isEmpty(tmp + ".subdir"))
- warn_msg(WarnLogic, "Cannot assign both file and subdir for subdir %s",
- tmp.toLatin1().constData());
- tmp = project->first(tmp + ".file");
- } else if(!project->isEmpty(tmp + ".subdir")) {
- tmp = project->first(tmp + ".subdir");
- }
QFileInfo fi(fileInfo(Option::fixPathToLocalOS(tmp, true)));
if(fi.exists()) {
if(fi.isDir()) {
@@ -428,19 +439,8 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
continue;
}
if(tmp_proj.first("TEMPLATE") == "vcsubdirs") {
- QStringList tmp_proj_subdirs = tmp_proj.variables()["SUBDIRS"];
- for(int x = 0; x < tmp_proj_subdirs.size(); ++x) {
- QString tmpdir = tmp_proj_subdirs.at(x);
- if(!tmp_proj.isEmpty(tmpdir + ".file")) {
- if(!tmp_proj.isEmpty(tmpdir + ".subdir"))
- warn_msg(WarnLogic, "Cannot assign both file and subdir for subdir %s",
- tmpdir.toLatin1().constData());
- tmpdir = tmp_proj.first(tmpdir + ".file");
- } else if(!tmp_proj.isEmpty(tmpdir + ".subdir")) {
- tmpdir = tmp_proj.first(tmpdir + ".subdir");
- }
+ foreach(const QString &tmpdir, collectSubDirs(&tmp_proj))
subdirs += fileFixify(tmpdir);
- }
} else if(tmp_proj.first("TEMPLATE") == "vcapp" || tmp_proj.first("TEMPLATE") == "vclib") {
// Initialize a 'fake' project to get the correct variables
// and to be able to extract all the dependencies
@@ -1302,6 +1302,9 @@ void VcprojGenerator::initResourceFiles()
dep_cmd = Option::fixPathToLocalOS(dep_cmd, true, false);
if(canExecute(dep_cmd)) {
+ dep_cmd.prepend(QLatin1String("cd ")
+ + escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false))
+ + QLatin1String(" && "));
if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) {
QString indeps;
while(!feof(proc)) {
@@ -1312,7 +1315,8 @@ void VcprojGenerator::initResourceFiles()
}
QT_PCLOSE(proc);
if(!indeps.isEmpty())
- deps += fileFixify(indeps.replace('\n', ' ').simplified().split(' '));
+ deps += fileFixify(indeps.replace('\n', ' ').simplified().split(' '),
+ QString(), Option::output_dir);
}
}
}
diff --git a/qmake/generators/win32/msvc_vcproj.h b/qmake/generators/win32/msvc_vcproj.h
index 8e55211..d66c029 100644
--- a/qmake/generators/win32/msvc_vcproj.h
+++ b/qmake/generators/win32/msvc_vcproj.h
@@ -130,6 +130,7 @@ protected:
QList<VcprojGenerator*> mergedProjects;
private:
+ QStringList collectSubDirs(QMakeProject *proj);
QUuid increaseUUID(const QUuid &id);
friend class VCFilter;
};
diff --git a/qmake/generators/win32/msvc_vcxproj.cpp b/qmake/generators/win32/msvc_vcxproj.cpp
index 2b628a5..e2464ec 100644
--- a/qmake/generators/win32/msvc_vcxproj.cpp
+++ b/qmake/generators/win32/msvc_vcxproj.cpp
@@ -654,6 +654,9 @@ void VcxprojGenerator::initResourceFiles()
dep_cmd = Option::fixPathToLocalOS(dep_cmd, true, false);
if(canExecute(dep_cmd)) {
+ dep_cmd.prepend(QLatin1String("cd ")
+ + escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false))
+ + QLatin1String(" && "));
if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) {
QString indeps;
while(!feof(proc)) {
@@ -664,7 +667,8 @@ void VcxprojGenerator::initResourceFiles()
}
QT_PCLOSE(proc);
if(!indeps.isEmpty())
- deps += fileFixify(indeps.replace('\n', ' ').simplified().split(' '));
+ deps += fileFixify(indeps.replace('\n', ' ').simplified().split(' '),
+ QString(), Option::output_dir);
}
}
}
diff --git a/qmake/project.cpp b/qmake/project.cpp
index e985401..177ab2f 100644
--- a/qmake/project.cpp
+++ b/qmake/project.cpp
@@ -1345,10 +1345,10 @@ QMakeProject::read(uchar cmd)
}
if(QDir::isRelativePath(qmakespec)) {
- if (QFile::exists(qmakespec+"/qmake.conf")) {
- Option::mkfile::qmakespec = QFileInfo(Option::mkfile::qmakespec).absoluteFilePath();
- } else if (QFile::exists(Option::output_dir+"/"+qmakespec+"/qmake.conf")) {
+ if (QFile::exists(Option::output_dir+"/"+qmakespec+"/qmake.conf")) {
qmakespec = Option::mkfile::qmakespec = QFileInfo(Option::output_dir+"/"+qmakespec).absoluteFilePath();
+ } else if (QFile::exists(qmakespec+"/qmake.conf")) {
+ Option::mkfile::qmakespec = QFileInfo(Option::mkfile::qmakespec).absoluteFilePath();
} else {
bool found_mkspec = false;
for(QStringList::ConstIterator it = mkspec_roots.begin(); it != mkspec_roots.end(); ++it) {
@@ -2773,6 +2773,20 @@ QMakeProject::expand(const QString &str)
return QStringList();
}
+QString
+QMakeProject::expand(const QString &str, const QString &file, int line)
+{
+ bool ok;
+ parser_info pi = parser;
+ parser.file = file;
+ parser.line_no = line;
+ parser.from_file = false;
+ QMap<QString, QStringList> tmp = vars;
+ const QStringList ret = doVariableReplaceExpand(str, tmp, &ok);
+ parser = pi;
+ return ok ? ret.join(QString(Option::field_sep)) : QString();
+}
+
QStringList
QMakeProject::expand(const QString &func, const QList<QStringList> &args)
{
@@ -3028,17 +3042,17 @@ QStringList &QMakeProject::values(const QString &_var, QMap<QString, QStringList
if(!Option::user_template.isEmpty()) {
var = ".BUILTIN.USER." + var;
place[var] = QStringList(Option::user_template);
- } else if(!place[var].isEmpty()) {
- QString orig_template = place["TEMPLATE"].first(), real_template;
+ } else {
+ QString orig_template, real_template;
+ if(!place[var].isEmpty())
+ orig_template = place[var].first();
+ real_template = orig_template.isEmpty() ? "app" : orig_template;
if(!Option::user_template_prefix.isEmpty() && !orig_template.startsWith(Option::user_template_prefix))
- real_template = Option::user_template_prefix + orig_template;
- if(!real_template.isEmpty()) {
+ real_template.prepend(Option::user_template_prefix);
+ if(real_template != orig_template) {
var = ".BUILTIN." + var;
place[var] = QStringList(real_template);
}
- } else {
- var = ".BUILTIN." + var;
- place[var] = QStringList("app");
}
} else if(var.startsWith(QLatin1String("QMAKE_HOST."))) {
QString ret, type = var.mid(11);
diff --git a/qmake/project.h b/qmake/project.h
index 09aa45e..0e6131d 100644
--- a/qmake/project.h
+++ b/qmake/project.h
@@ -144,6 +144,7 @@ public:
QMap<QString, QStringList> &place);
QStringList expand(const QString &v);
+ QString expand(const QString &v, const QString &file, int line);
QStringList expand(const QString &func, const QList<QStringList> &args);
bool test(const QString &v);
bool test(const QString &func, const QList<QStringList> &args);
diff --git a/qmake/qmake.pri b/qmake/qmake.pri
index 8f46a2e..3a0ab12 100644
--- a/qmake/qmake.pri
+++ b/qmake/qmake.pri
@@ -135,7 +135,7 @@ bootstrap { #Qt code
SOURCES += qfsfileengine_win.cpp qfsfileengine_iterator_win.cpp qsettings_win.cpp \
qsystemlibrary.cpp
win32-msvc*:LIBS += ole32.lib advapi32.lib
- win32-g++*:LIBS += -lole32 -luuid
+ win32-g++*:LIBS += -lole32 -luuid -ladvapi32 -lkernel32
}
qnx {
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
index ce4d4ac..1021b02 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
@@ -643,6 +643,7 @@ void HB_GetCharAttributes(const HB_UChar16 *string, hb_uint32 stringLength,
const HB_ScriptItem *items, hb_uint32 numItems,
HB_CharAttributes *attributes)
{
+ memset(attributes, 0, stringLength * sizeof(HB_CharAttributes));
calcLineBreaks(string, stringLength, attributes);
for (hb_uint32 i = 0; i < numItems; ++i) {
diff --git a/src/3rdparty/phonon/phonon/audiooutputadaptor.cpp b/src/3rdparty/phonon/phonon/audiooutputadaptor.cpp
index 2c01773..959172d 100644
--- a/src/3rdparty/phonon/phonon/audiooutputadaptor.cpp
+++ b/src/3rdparty/phonon/phonon/audiooutputadaptor.cpp
@@ -1,3 +1,28 @@
+/* This file is part of the KDE project
+ The following license applies to the edits made to the generated
+ source code:
+
+ Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ Copyright (C) 2009 Matthias Kretz.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) version 3, or any
+ later version accepted by the membership of KDE e.V. (or its
+ successor approved by the membership of KDE e.V.), Nokia Corporation
+ (or its successors, if any) and the KDE Free Qt Foundation, which shall
+ act as a proxy defined in Section 6 of version 3 of the license.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+*/
/*
* This file was generated by dbusidl2cpp version 0.4
* when processing input file org.kde.Phonon.AudioOutput.xml
diff --git a/src/3rdparty/phonon/phonon/audiooutputadaptor_p.h b/src/3rdparty/phonon/phonon/audiooutputadaptor_p.h
index 7178e9b..140a74f 100644
--- a/src/3rdparty/phonon/phonon/audiooutputadaptor_p.h
+++ b/src/3rdparty/phonon/phonon/audiooutputadaptor_p.h
@@ -1,3 +1,28 @@
+/* This file is part of the KDE project
+ The following license applies to the edits made to the generated
+ source code:
+
+ Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ Copyright (C) 2009 Matthias Kretz.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) version 3, or any
+ later version accepted by the membership of KDE e.V. (or its
+ successor approved by the membership of KDE e.V.), Nokia Corporation
+ (or its successors, if any) and the KDE Free Qt Foundation, which shall
+ act as a proxy defined in Section 6 of version 3 of the license.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+*/
/*
* This file was generated by dbusidl2cpp version 0.4
* when processing input file org.kde.Phonon.AudioOutput.xml
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h b/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h
index f8bace4..9349b48 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h
@@ -190,7 +190,7 @@ inline float deg2turn(float d) { return d / 360.0f; }
inline float rad2grad(float r) { return r * 200.0f / piFloat; }
inline float grad2rad(float g) { return g * piFloat / 200.0f; }
-#if !COMPILER(MSVC) && !COMPILER(RVCT) && !OS(ANDROID) && !COMPILER(WINSCW)
+#if !COMPILER(MSVC) && !OS(ANDROID) && !OS(SYMBIAN)
using std::isfinite;
using std::isinf;
using std::isnan;
diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro
index 37d216d..c70a168 100644
--- a/src/3rdparty/webkit/WebCore/WebCore.pro
+++ b/src/3rdparty/webkit/WebCore/WebCore.pro
@@ -37,15 +37,14 @@ symbian: {
# Need to guarantee that these come before system includes of /epoc32/include
MMP_RULES += "USERINCLUDE rendering"
MMP_RULES += "USERINCLUDE platform/text"
- symbian-abld|symbian-sbsv2 {
- # RO text (code) section in qtwebkit.dll exceeds allocated space for gcce udeb target.
- # Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000.
- QMAKE_LFLAGS.ARMCC += --rw-base 0xE00000
- MMP_RULES += ALWAYS_BUILD_AS_ARM
- } else {
- QMAKE_CFLAGS -= --thumb
- QMAKE_CXXFLAGS -= --thumb
- }
+
+ # RO text (code) section in qtwebkit.dll exceeds allocated space for gcce udeb target.
+ # Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000.
+ QMAKE_LFLAGS.ARMCC += --rw-base 0xE00000
+ QMAKE_LFLAGS.GCCE += -Tdata 0x1000000
+
+ CONFIG += do_not_build_as_thumb
+
CONFIG(release, debug|release): QMAKE_CXXFLAGS.ARMCC += -OTime -O3
}
diff --git a/src/activeqt/shared/qaxtypes.cpp b/src/activeqt/shared/qaxtypes.cpp
index f0a8ad8..b741620 100644
--- a/src/activeqt/shared/qaxtypes.cpp
+++ b/src/activeqt/shared/qaxtypes.cpp
@@ -265,7 +265,7 @@ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &type
return QVariantToVARIANT(var, *arg.pvarVal, typeName, false);
}
- if (out && proptype == QVariant::Invalid && typeName == "QVariant") {
+ if (out && proptype == QVariant::UserType && typeName == "QVariant") {
VARIANT *pVariant = new VARIANT;
QVariantToVARIANT(var, *pVariant, QByteArray(), false);
arg.vt = VT_VARIANT|VT_BYREF;
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 35719b1..2cfd9cc 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -1197,10 +1197,12 @@ bool qSharedBuild()
\value SV_9_2 Symbian OS v9.2
\value SV_9_3 Symbian OS v9.3
\value SV_9_4 Symbian OS v9.4
- \value SV_SF_1 Symbian^1
+ \value SV_SF_1 S60 5th Edition (Symbian^1)
\value SV_SF_2 Symbian^2
- \value SV_SF_3 Symbian^3
+ \value SV_SF_3 Symbian^3 or Symbian Anna
\value SV_SF_4 \e{This enum value is deprecated.}
+ \value SV_API_5_3 Symbian/S60 API version 5.3 release
+ \value SV_API_5_4 Symbian/S60 API version 5.4 release
\value SV_Unknown An unknown and currently unsupported platform
\sa S60Version, WinVersion, MacVersion
@@ -1217,9 +1219,10 @@ bool qSharedBuild()
\value SV_S60_3_1 S60 3rd Edition Feature Pack 1
\value SV_S60_3_2 S60 3rd Edition Feature Pack 2
\value SV_S60_5_0 S60 5th Edition
- \value SV_S60_5_1 S60 5th Edition Feature Pack 1
- \value SV_S60_5_2 Symbian^3
- \value SV_S60_5_3 To be determined - FIXME
+ \value SV_S60_5_1 \e{This enum value is deprecated.}
+ \value SV_S60_5_2 Symbian^3 and Symbian Anna
+ \value SV_S60_5_3 Symbian/S60 API version 5.3 release
+ \value SV_S60_5_4 Symbian/S60 API version 5.4 release
\value SV_S60_Unknown An unknown and currently unsupported platform
\omitvalue SV_S60_None
@@ -1852,9 +1855,12 @@ static void symbianInitVersions()
} else if (minor == 2) {
cachedS60Version = QSysInfo::SV_S60_5_2;
cachedSymbianVersion = QSysInfo::SV_SF_3;
- } else if (minor >= 3) {
+ } else if (minor == 3) {
cachedS60Version = QSysInfo::SV_S60_5_3;
- cachedSymbianVersion = QSysInfo::SV_SF_3;
+ cachedSymbianVersion = QSysInfo::SV_API_5_3;
+ } else if (minor >= 4) {
+ cachedS60Version = QSysInfo::SV_S60_5_4;
+ cachedSymbianVersion = QSysInfo::SV_API_5_4;
}
}
}
@@ -1880,7 +1886,10 @@ static void symbianInitVersions()
cachedSymbianVersion = QSysInfo::SV_SF_3;
# elif defined(S60_VERSION_5_3)
cachedS60Version = QSysInfo::SV_S60_5_3;
- cachedSymbianVersion = QSysInfo::SV_SF_3;
+ cachedSymbianVersion = QSysInfo::SV_API_5_3;
+# elif defined(S60_VERSION_5_4)
+ cachedS60Version = QSysInfo::SV_S60_5_4;
+ cachedSymbianVersion = QSysInfo::SV_API_5_4;
# endif
}
# endif
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 7768b46..e5109e6 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -1524,7 +1524,9 @@ public:
SV_SF_1 = SV_9_4,
SV_SF_2 = 40,
SV_SF_3 = 50,
- SV_SF_4 = 60 // Deprecated
+ SV_SF_4 = 60, // Deprecated
+ SV_API_5_3 = 70,
+ SV_API_5_4 = 80
};
static SymbianVersion symbianVersion();
enum S60Version {
@@ -1533,9 +1535,10 @@ public:
SV_S60_3_1 = SV_9_2,
SV_S60_3_2 = SV_9_3,
SV_S60_5_0 = SV_9_4,
- SV_S60_5_1 = SV_SF_2,
+ SV_S60_5_1 = SV_SF_2, // Deprecated
SV_S60_5_2 = SV_SF_3,
- SV_S60_5_3 = 70
+ SV_S60_5_3 = SV_API_5_3,
+ SV_S60_5_4 = SV_API_5_4
};
static S60Version s60Version();
#endif
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 1fecc26..6060dde 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -450,10 +450,11 @@ QLibraryInfo::location(LibraryLocation loc)
}
if (QDir::isRelativePath(ret)) {
+ QString baseDir;
if (loc == PrefixPath) {
// we make the prefix path absolute to the executable's directory
#ifdef BOOTSTRAPPING
- return QFileInfo(qmake_libraryInfoFile()).absolutePath();
+ baseDir = QFileInfo(qmake_libraryInfoFile()).absolutePath();
#else
if (QCoreApplication::instance()) {
#ifdef Q_OS_MAC
@@ -466,15 +467,16 @@ QLibraryInfo::location(LibraryLocation loc)
}
}
#endif
- return QDir(QCoreApplication::applicationDirPath()).absoluteFilePath(ret);
+ baseDir = QCoreApplication::applicationDirPath();
} else {
- return QDir::current().absoluteFilePath(ret);
+ baseDir = QDir::currentPath();
}
#endif
} else {
// we make any other path absolute to the prefix directory
- return QDir(location(PrefixPath)).absoluteFilePath(ret);
+ baseDir = location(PrefixPath);
}
+ ret = QDir::cleanPath(baseDir + QLatin1Char('/') + ret);
}
return ret;
}
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index 4d70744..15cc809 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -526,6 +526,8 @@ public:
WA_X11DoNotAcceptFocus = 132,
+ WA_SymbianNoSystemRotation = 133,
+
// Add new attributes before this line
WA_AttributeCount
};
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index 22ad83b..f03fb25 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -1244,6 +1244,7 @@
\omitvalue WA_SetWindowModality
\omitvalue WA_WState_WindowOpacitySet
\omitvalue WA_WState_AcceptedTouchBeginEvent
+ \omitvalue WA_SymbianNoSystemRotation
*/
/*! \typedef Qt::HANDLE
diff --git a/src/corelib/io/qdiriterator.cpp b/src/corelib/io/qdiriterator.cpp
index 3b4adc3..4d3f50b 100644
--- a/src/corelib/io/qdiriterator.cpp
+++ b/src/corelib/io/qdiriterator.cpp
@@ -278,6 +278,7 @@ void QDirIteratorPrivate::checkAndPushDirectory(const QFileInfo &fileInfo)
current entry will be returned as part of the directory iteration);
otherwise, false is returned.
*/
+
bool QDirIteratorPrivate::matchesFilters(const QString &fileName, const QFileInfo &fi) const
{
Q_ASSERT(!fileName.isEmpty());
@@ -312,6 +313,14 @@ bool QDirIteratorPrivate::matchesFilters(const QString &fileName, const QFileInf
return false;
}
#endif
+ // skip symlinks
+ const bool skipSymlinks = (filters & QDir::NoSymLinks);
+ const bool includeSystem = (filters & QDir::System);
+ if(skipSymlinks && fi.isSymLink()) {
+ // The only reason to save this file is if it is a broken link and we are requesting system files.
+ if(!includeSystem || fi.exists())
+ return false;
+ }
// filter hidden
const bool includeHidden = (filters & QDir::Hidden);
@@ -319,27 +328,20 @@ bool QDirIteratorPrivate::matchesFilters(const QString &fileName, const QFileInf
return false;
// filter system files
- const bool includeSystem = (filters & QDir::System);
- if (!includeSystem && ((!fi.isFile() && !fi.isDir() && !fi.isSymLink())
+ if (!includeSystem && (!(fi.isFile() || fi.isDir() || fi.isSymLink())
|| (!fi.exists() && fi.isSymLink())))
return false;
// skip directories
const bool skipDirs = !(filters & (QDir::Dirs | QDir::AllDirs));
- if (skipDirs && fi.isDir()) {
- if (!((includeHidden && !dotOrDotDot && fi.isHidden())
- || (includeSystem && !fi.exists() && fi.isSymLink())))
- return false;
- }
+ if (skipDirs && fi.isDir())
+ return false;
// skip files
const bool skipFiles = !(filters & QDir::Files);
- const bool skipSymlinks = (filters & QDir::NoSymLinks);
- if ((skipFiles && (fi.isFile() || !fi.exists())) || (skipSymlinks && fi.isSymLink())) {
- if (!((includeHidden && !dotOrDotDot && fi.isHidden())
- || (includeSystem && !fi.exists() && fi.isSymLink())))
- return false;
- }
+ if (skipFiles && fi.isFile())
+ // Basically we need a reason not to exclude this file otherwise we just eliminate it.
+ return false;
// filter permissions
const bool filterPermissions = ((filters & QDir::PermissionMask)
diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp
index 47dd558..84825af 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian.cpp
+++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp
@@ -210,8 +210,10 @@ void QWakeUpActiveObject::RunL()
QTimerActiveObject::QTimerActiveObject(QEventDispatcherSymbian *dispatcher, SymbianTimerInfo *timerInfo)
: QActiveObject((timerInfo->interval) ? TIMER_PRIORITY : NULLTIMER_PRIORITY , dispatcher),
- m_timerInfo(timerInfo)
+ m_timerInfo(timerInfo), m_expectedTimeSinceLastEvent(0)
{
+ // start the timeout timer to ensure initialisation
+ m_timeoutTimer.start();
}
QTimerActiveObject::~QTimerActiveObject()
@@ -255,10 +257,23 @@ void QTimerActiveObject::StartTimer()
m_rTimer.After(iStatus, MAX_SYMBIAN_TIMEOUT_MS * 1000);
m_timerInfo->msLeft -= MAX_SYMBIAN_TIMEOUT_MS;
} else {
- //HighRes gives the 1ms accuracy expected by Qt, the +1 is to ensure that
- //"Timers will never time out earlier than the specified timeout value"
- //condition is always met.
- m_rTimer.HighRes(iStatus, (m_timerInfo->msLeft + 1) * 1000);
+ // this algorithm implements drift correction for repeating timers
+ // calculate how late we are for this event
+ int timeSinceLastEvent = m_timeoutTimer.restart();
+ int overshoot = timeSinceLastEvent - m_expectedTimeSinceLastEvent;
+ if (overshoot > m_timerInfo->msLeft) {
+ // we skipped a whole timeout, restart from here
+ overshoot = 0;
+ }
+ // calculate when the next event should happen
+ int waitTime = m_timerInfo->msLeft - overshoot;
+ m_expectedTimeSinceLastEvent = waitTime;
+ // limit the actual ms wait time to avoid wild corrections
+ // this will cause the real event time to slowly drift back to the expected event time
+ // measurements show that Symbian timers always fire 1 or 2 ms late
+ const int limit = 4;
+ waitTime = qMax(m_timerInfo->msLeft - limit, waitTime);
+ m_rTimer.HighRes(iStatus, waitTime * 1000);
m_timerInfo->msLeft = 0;
}
SetActive();
@@ -305,6 +320,8 @@ void QTimerActiveObject::Start()
if (!m_rTimer.Handle()) {
qt_symbian_throwIfError(m_rTimer.CreateLocal());
}
+ m_timeoutTimer.start();
+ m_expectedTimeSinceLastEvent = 0;
StartTimer();
} else {
iStatus = KRequestPending;
diff --git a/src/corelib/kernel/qeventdispatcher_symbian_p.h b/src/corelib/kernel/qeventdispatcher_symbian_p.h
index b785aea..a31a446 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian_p.h
+++ b/src/corelib/kernel/qeventdispatcher_symbian_p.h
@@ -63,6 +63,7 @@
#include <qwaitcondition.h>
#include <qsocketnotifier.h>
#include <qdatetime.h>
+#include <qelapsedtimer.h>
#include <e32base.h>
@@ -143,6 +144,8 @@ private:
private:
SymbianTimerInfo *m_timerInfo;
+ QElapsedTimer m_timeoutTimer;
+ int m_expectedTimeSinceLastEvent;
RTimer m_rTimer;
};
diff --git a/src/corelib/tools/qtextboundaryfinder.cpp b/src/corelib/tools/qtextboundaryfinder.cpp
index 34bc406..47319d4 100644
--- a/src/corelib/tools/qtextboundaryfinder.cpp
+++ b/src/corelib/tools/qtextboundaryfinder.cpp
@@ -199,11 +199,11 @@ QTextBoundaryFinder &QTextBoundaryFinder::operator=(const QTextBoundaryFinder &o
chars = other.chars;
length = other.length;
pos = other.pos;
- freePrivate = true;
QTextBoundaryFinderPrivate *newD = (QTextBoundaryFinderPrivate *)
- realloc(d, length*sizeof(HB_CharAttributes));
+ realloc(freePrivate ? d : 0, length*sizeof(HB_CharAttributes));
Q_CHECK_PTR(newD);
+ freePrivate = true;
d = newD;
memcpy(d, other.d, length*sizeof(HB_CharAttributes));
diff --git a/src/declarative/debugger/qdeclarativedebughelper.cpp b/src/declarative/debugger/qdeclarativedebughelper.cpp
index 0478209..93f7423 100644
--- a/src/declarative/debugger/qdeclarativedebughelper.cpp
+++ b/src/declarative/debugger/qdeclarativedebughelper.cpp
@@ -65,10 +65,12 @@ void QDeclarativeDebugHelper::setAnimationSlowDownFactor(qreal factor)
}
void QDeclarativeDebugHelper::enableDebugging() {
+#ifndef QDECLARATIVE_NO_DEBUG_PROTOCOL
if (!QDeclarativeEnginePrivate::qml_debugging_enabled) {
qWarning("Qml debugging is enabled. Only use this in a safe environment!");
}
QDeclarativeEnginePrivate::qml_debugging_enabled = true;
+#endif
}
QT_END_NAMESPACE
diff --git a/src/declarative/debugger/qdeclarativedebugserver.cpp b/src/declarative/debugger/qdeclarativedebugserver.cpp
index ea3d9a3..7fa5a62 100644
--- a/src/declarative/debugger/qdeclarativedebugserver.cpp
+++ b/src/declarative/debugger/qdeclarativedebugserver.cpp
@@ -91,7 +91,7 @@ public:
QStringList clientPlugins;
bool gotHello;
- static QDeclarativeDebugServerConnection *loadConnectionPlugin();
+ static QDeclarativeDebugServerConnection *loadConnectionPlugin(const QString &pluginName);
};
QDeclarativeDebugServerPrivate::QDeclarativeDebugServerPrivate() :
@@ -113,7 +113,8 @@ void QDeclarativeDebugServerPrivate::advertisePlugins()
connection->send(message);
}
-QDeclarativeDebugServerConnection *QDeclarativeDebugServerPrivate::loadConnectionPlugin()
+QDeclarativeDebugServerConnection *QDeclarativeDebugServerPrivate::loadConnectionPlugin(
+ const QString &pluginName)
{
QStringList pluginCandidates;
const QStringList paths = QCoreApplication::libraryPaths();
@@ -122,7 +123,8 @@ QDeclarativeDebugServerConnection *QDeclarativeDebugServerPrivate::loadConnectio
if (dir.exists()) {
QStringList plugins(dir.entryList(QDir::Files));
foreach (const QString &pluginPath, plugins) {
- pluginCandidates << dir.absoluteFilePath(pluginPath);
+ if (QFileInfo(pluginPath).fileName().contains(pluginName))
+ pluginCandidates << dir.absoluteFilePath(pluginPath);
}
}
}
@@ -159,14 +161,14 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance()
if (!commandLineTested) {
commandLineTested = true;
-#ifndef QDECLARATIVE_NO_DEBUG_PROTOCOL
QApplicationPrivate *appD = static_cast<QApplicationPrivate*>(QObjectPrivate::get(qApp));
+#ifndef QDECLARATIVE_NO_DEBUG_PROTOCOL
// ### remove port definition when protocol is changed
int port = 0;
bool block = false;
bool ok = false;
- // format: qmljsdebugger=port:3768[,block]
+ // format: qmljsdebugger=port:3768[,block] OR qmljsdebugger=ost[,block]
if (!appD->qmljsDebugArgumentsString().isEmpty()) {
if (!QDeclarativeEnginePrivate::qml_debugging_enabled) {
const QString message =
@@ -177,24 +179,30 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance()
return 0;
}
+ QString pluginName;
if (appD->qmljsDebugArgumentsString().indexOf(QLatin1String("port:")) == 0) {
int separatorIndex = appD->qmljsDebugArgumentsString().indexOf(QLatin1Char(','));
port = appD->qmljsDebugArgumentsString().mid(5, separatorIndex - 5).toInt(&ok);
+ pluginName = QLatin1String("qmldbg_tcp");
+ } else if (appD->qmljsDebugArgumentsString().contains("ost")) {
+ pluginName = QLatin1String("qmldbg_ost");
+ ok = true;
}
+
block = appD->qmljsDebugArgumentsString().contains(QLatin1String("block"));
if (ok) {
server = new QDeclarativeDebugServer();
QDeclarativeDebugServerConnection *connection
- = QDeclarativeDebugServerPrivate::loadConnectionPlugin();
+ = QDeclarativeDebugServerPrivate::loadConnectionPlugin(pluginName);
if (connection) {
server->d_func()->connection = connection;
connection->setServer(server);
connection->setPort(port, block);
} else {
- qWarning() << QString::fromAscii("QDeclarativeDebugServer: Ignoring\"-qmljsdebugger=%1\". "
+ qWarning() << QString::fromAscii("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". "
"Remote debugger plugin has not been found.").arg(appD->qmljsDebugArgumentsString());
}
@@ -204,6 +212,12 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance()
appD->qmljsDebugArgumentsString()).toAscii().constData());
}
}
+#else
+ if (!appD->qmljsDebugArgumentsString().isEmpty()) {
+ qWarning(QString::fromAscii("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". "
+ "QtDeclarative is not configured for debugging.").arg(
+ appD->qmljsDebugArgumentsString()).toAscii().constData());
+ }
#endif
}
diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp
index 8f37e90..45a03a0 100644
--- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp
@@ -300,7 +300,7 @@ void QDeclarativeBorderImage::load()
}
if (d->url.isEmpty()) {
- d->pix.clear();
+ d->pix.clear(this);
d->status = Null;
setImplicitWidth(0);
setImplicitHeight(0);
@@ -340,6 +340,7 @@ void QDeclarativeBorderImage::load()
options |= QDeclarativePixmap::Asynchronous;
if (d->cache)
options |= QDeclarativePixmap::Cache;
+ d->pix.clear(this);
d->pix.load(qmlEngine(this), d->url, options);
if (d->pix.isLoading()) {
@@ -472,6 +473,7 @@ void QDeclarativeBorderImage::setGridScaledImage(const QDeclarativeGridScaledIma
options |= QDeclarativePixmap::Asynchronous;
if (d->cache)
options |= QDeclarativePixmap::Cache;
+ d->pix.clear(this);
d->pix.load(qmlEngine(this), d->sciurl, options);
if (d->pix.isLoading()) {
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
index 511f789..82ed18c 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
@@ -45,9 +45,40 @@
#include <QGraphicsSceneMouseEvent>
#include <QPointer>
#include <QTimer>
+#include "qplatformdefs.h"
QT_BEGIN_NAMESPACE
+// The maximum number of pixels a flick can overshoot
+#ifndef QML_FLICK_OVERSHOOT
+#define QML_FLICK_OVERSHOOT 200
+#endif
+
+// The number of samples to use in calculating the velocity of a flick
+#ifndef QML_FLICK_SAMPLEBUFFER
+#define QML_FLICK_SAMPLEBUFFER 3
+#endif
+
+// The number of samples to discard when calculating the flick velocity.
+// Touch panels often produce inaccurate results as the finger is lifted.
+#ifndef QML_FLICK_DISCARDSAMPLES
+#define QML_FLICK_DISCARDSAMPLES 1
+#endif
+
+// The default maximum velocity of a flick.
+#ifndef QML_FLICK_DEFAULTMAXVELOCITY
+#define QML_FLICK_DEFAULTMAXVELOCITY 2500
+#endif
+
+// The default deceleration of a flick.
+#ifndef QML_FLICK_DEFAULTDECELERATION
+#define QML_FLICK_DEFAULTDECELERATION 1750
+#endif
+
+// How much faster to decelerate when overshooting
+#ifndef QML_FLICK_OVERSHOOTFRICTION
+#define QML_FLICK_OVERSHOOTFRICTION 8
+#endif
// FlickThreshold determines how far the "mouse" must have moved
// before we perform a flick.
@@ -141,8 +172,9 @@ QDeclarativeFlickablePrivate::QDeclarativeFlickablePrivate()
, hMoved(false), vMoved(false)
, movingHorizontally(false), movingVertically(false)
, stealMouse(false), pressed(false), interactive(true), calcVelocity(false)
- , deceleration(500), maxVelocity(2000), reportedVelocitySmoothing(100)
- , delayedPressEvent(0), delayedPressTarget(0), pressDelay(0), fixupDuration(600)
+ , deceleration(QML_FLICK_DEFAULTDECELERATION)
+ , maxVelocity(QML_FLICK_DEFAULTMAXVELOCITY), reportedVelocitySmoothing(100)
+ , delayedPressEvent(0), delayedPressTarget(0), pressDelay(0), fixupDuration(400)
, fixupMode(Normal), vTime(0), visibleArea(0)
, flickableDirection(QDeclarativeFlickable::AutoFlickDirection)
, boundsBehavior(QDeclarativeFlickable::DragAndOvershootBounds)
@@ -176,19 +208,39 @@ void QDeclarativeFlickablePrivate::init()
}
/*
- Returns the amount to overshoot by given a velocity.
- Will be roughly in range 0 - size/4
+ Returns the amount to overshoot by given a view size.
+ Will be up to the lesser of 1/3 of the view size or QML_FLICK_OVERSHOOT
*/
-qreal QDeclarativeFlickablePrivate::overShootDistance(qreal velocity, qreal size)
+qreal QDeclarativeFlickablePrivate::overShootDistance(qreal size)
{
if (maxVelocity <= 0)
return 0.0;
- velocity = qAbs(velocity);
- if (velocity > maxVelocity)
- velocity = maxVelocity;
- qreal dist = size / 4 * velocity / maxVelocity;
- return dist;
+ return qMin(qreal(QML_FLICK_OVERSHOOT), size/3);
+}
+
+void QDeclarativeFlickablePrivate::AxisData::addVelocitySample(qreal v, qreal maxVelocity)
+{
+ if (v > maxVelocity)
+ v = maxVelocity;
+ else if (v < -maxVelocity)
+ v = -maxVelocity;
+ velocityBuffer.append(v);
+ if (velocityBuffer.count() > QML_FLICK_SAMPLEBUFFER)
+ velocityBuffer.remove(0);
+}
+
+void QDeclarativeFlickablePrivate::AxisData::updateVelocity()
+{
+ if (velocityBuffer.count() > QML_FLICK_DISCARDSAMPLES) {
+ velocity = 0;
+ int count = velocityBuffer.count()-QML_FLICK_DISCARDSAMPLES;
+ for (int i = 0; i < count; ++i) {
+ qreal v = velocityBuffer.at(i);
+ velocity += v;
+ }
+ velocity /= count;
+ }
}
void QDeclarativeFlickablePrivate::itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeom, const QRectF &oldGeom)
@@ -220,15 +272,12 @@ void QDeclarativeFlickablePrivate::flick(AxisData &data, qreal minExtent, qreal
Q_Q(QDeclarativeFlickable);
qreal maxDistance = -1;
data.fixingUp = false;
- bool overShoot = boundsBehavior == QDeclarativeFlickable::DragAndOvershootBounds;
// -ve velocity means list is moving up
if (velocity > 0) {
- if (data.move.value() < minExtent)
- maxDistance = qAbs(minExtent - data.move.value() + (overShoot?overShootDistance(velocity,vSize):0));
+ maxDistance = qAbs(minExtent - data.move.value());
data.flickTarget = minExtent;
} else {
- if (data.move.value() > maxExtent)
- maxDistance = qAbs(maxExtent - data.move.value()) + (overShoot?overShootDistance(velocity,vSize):0);
+ maxDistance = qAbs(maxExtent - data.move.value());
data.flickTarget = maxExtent;
}
if (maxDistance > 0) {
@@ -240,7 +289,10 @@ void QDeclarativeFlickablePrivate::flick(AxisData &data, qreal minExtent, qreal
v = maxVelocity;
}
timeline.reset(data.move);
- timeline.accel(data.move, v, deceleration, maxDistance);
+ if (boundsBehavior == QDeclarativeFlickable::DragAndOvershootBounds)
+ timeline.accel(data.move, v, deceleration);
+ else
+ timeline.accel(data.move, v, deceleration, maxDistance);
timeline.callback(QDeclarativeTimeLineCallback(&data.move, fixupCallback, this));
if (!flickingHorizontally && q->xflick()) {
flickingHorizontally = true;
@@ -327,6 +379,7 @@ void QDeclarativeFlickablePrivate::fixup(AxisData &data, qreal minExtent, qreal
}
}
}
+ data.inOvershoot = false;
fixupMode = Normal;
vTime = timeline.time();
}
@@ -706,16 +759,13 @@ void QDeclarativeFlickablePrivate::handleMousePressEvent(QGraphicsSceneMouseEven
q->setKeepMouseGrab(stealMouse);
pressed = true;
timeline.clear();
- hData.velocity = 0;
- vData.velocity = 0;
- hData.dragStartOffset = 0;
- vData.dragStartOffset = 0;
+ hData.reset();
+ vData.reset();
hData.dragMinBound = q->minXExtent();
vData.dragMinBound = q->minYExtent();
hData.dragMaxBound = q->maxXExtent();
vData.dragMaxBound = q->maxYExtent();
- hData.fixingUp = false;
- vData.fixingUp = false;
+ fixupMode = Normal;
lastPos = QPoint();
QDeclarativeItemPrivate::start(lastPosTime);
pressPos = event->pos();
@@ -807,33 +857,33 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent
if (stealMouse)
q->setKeepMouseGrab(true);
- if (!lastPos.isNull()) {
- qreal elapsed = qreal(QDeclarativeItemPrivate::restart(lastPosTime)) / 1000.;
- if (elapsed <= 0)
- elapsed = 1;
- if (q->yflick()) {
- qreal diff = event->pos().y() - lastPos.y();
- // average to reduce the effect of spurious moves
- vData.velocity += diff / elapsed;
- vData.velocity /= 2;
- }
-
- if (q->xflick()) {
- qreal diff = event->pos().x() - lastPos.x();
- // average to reduce the effect of spurious moves
- hData.velocity += diff / elapsed;
- hData.velocity /= 2;
- }
+ if (rejectY) {
+ vData.velocityBuffer.clear();
+ vData.velocity = 0;
+ }
+ if (rejectX) {
+ hData.velocityBuffer.clear();
+ hData.velocity = 0;
}
-
- if (rejectY) vData.velocity = 0;
- if (rejectX) hData.velocity = 0;
if (hMoved || vMoved) {
q->movementStarting();
q->viewportMoved();
}
+ if (!lastPos.isNull()) {
+ qreal elapsed = qreal(QDeclarativeItemPrivate::elapsed(lastPosTime)) / 1000.;
+ if (elapsed <= 0)
+ return;
+ QDeclarativeItemPrivate::restart(lastPosTime);
+ qreal dy = event->pos().y()-lastPos.y();
+ if (q->yflick() && !rejectY)
+ vData.addVelocitySample(dy/elapsed, maxVelocity);
+ qreal dx = event->pos().x()-lastPos.x();
+ if (q->xflick() && !rejectX)
+ hData.addVelocitySample(dx/elapsed, maxVelocity);
+ }
+
lastPos = event->pos();
}
@@ -846,25 +896,33 @@ void QDeclarativeFlickablePrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEv
if (!lastPosTime.isValid())
return;
- if (QDeclarativeItemPrivate::elapsed(lastPosTime) > 100) {
- // if we drag then pause before release we should not cause a flick.
+ // if we drag then pause before release we should not cause a flick.
+ if (QDeclarativeItemPrivate::elapsed(lastPosTime) < 100) {
+ vData.updateVelocity();
+ hData.updateVelocity();
+ } else {
hData.velocity = 0.0;
vData.velocity = 0.0;
}
vTime = timeline.time();
- if (qAbs(vData.velocity) > MinimumFlickVelocity && qAbs(event->pos().y() - pressPos.y()) > FlickThreshold)
- flickY(vData.velocity);
+
+ qreal velocity = vData.velocity;
+ if (vData.atBeginning || vData.atEnd)
+ velocity /= 2;
+ if (qAbs(velocity) > MinimumFlickVelocity && qAbs(event->pos().y() - pressPos.y()) > FlickThreshold)
+ flickY(velocity);
else
fixupY();
- if (qAbs(hData.velocity) > MinimumFlickVelocity && qAbs(event->pos().x() - pressPos.x()) > FlickThreshold)
- flickX(hData.velocity);
+ velocity = hData.velocity;
+ if (hData.atBeginning || hData.atEnd)
+ velocity /= 2;
+ if (qAbs(velocity) > MinimumFlickVelocity && qAbs(event->pos().x() - pressPos.x()) > FlickThreshold)
+ flickX(velocity);
else
fixupX();
- lastPosTime.invalidate();
-
if (!timeline.isActive())
q->movementEnding();
}
@@ -911,29 +969,41 @@ void QDeclarativeFlickable::wheelEvent(QGraphicsSceneWheelEvent *event)
if (!d->interactive) {
QDeclarativeItem::wheelEvent(event);
} else if (yflick() && event->orientation() == Qt::Vertical) {
- if (event->delta() > 0)
- d->vData.velocity = qMax(event->delta() - d->vData.smoothVelocity.value(), qreal(250.0));
- else
- d->vData.velocity = qMin(event->delta() - d->vData.smoothVelocity.value(), qreal(-250.0));
- d->flickingVertically = false;
- d->flickY(d->vData.velocity);
- if (d->flickingVertically) {
- d->vMoved = true;
- movementStarting();
+ bool valid = false;
+ if (event->delta() > 0 && contentY() > -minYExtent()) {
+ d->vData.velocity = qMax(event->delta()*2 - d->vData.smoothVelocity.value(), qreal(d->maxVelocity/4));
+ valid = true;
+ } else if (event->delta() < 0 && contentY() < -maxYExtent()) {
+ d->vData.velocity = qMin(event->delta()*2 - d->vData.smoothVelocity.value(), qreal(-d->maxVelocity/4));
+ valid = true;
+ }
+ if (valid) {
+ d->flickingVertically = false;
+ d->flickY(d->vData.velocity);
+ if (d->flickingVertically) {
+ d->vMoved = true;
+ movementStarting();
+ }
+ event->accept();
}
- event->accept();
} else if (xflick() && event->orientation() == Qt::Horizontal) {
- if (event->delta() > 0)
- d->hData.velocity = qMax(event->delta() - d->hData.smoothVelocity.value(), qreal(250.0));
- else
- d->hData.velocity = qMin(event->delta() - d->hData.smoothVelocity.value(), qreal(-250.0));
- d->flickingHorizontally = false;
- d->flickX(d->hData.velocity);
- if (d->flickingHorizontally) {
- d->hMoved = true;
- movementStarting();
+ bool valid = false;
+ if (event->delta() > 0 && contentX() > -minXExtent()) {
+ d->hData.velocity = qMax(event->delta()*2 - d->hData.smoothVelocity.value(), qreal(d->maxVelocity/4));
+ valid = true;
+ } else if (event->delta() < 0 && contentX() < -maxXExtent()) {
+ d->hData.velocity = qMin(event->delta()*2 - d->hData.smoothVelocity.value(), qreal(-d->maxVelocity/4));
+ valid = true;
+ }
+ if (valid) {
+ d->flickingHorizontally = false;
+ d->flickX(d->hData.velocity);
+ if (d->flickingHorizontally) {
+ d->hMoved = true;
+ movementStarting();
+ }
+ event->accept();
}
- event->accept();
} else {
QDeclarativeItem::wheelEvent(event);
}
@@ -1071,6 +1141,27 @@ void QDeclarativeFlickable::viewportMoved()
}
}
+ if (!d->vData.inOvershoot && !d->vData.fixingUp && d->flickingVertically
+ && (d->vData.move.value() > minYExtent() || d->vData.move.value() < maxYExtent())
+ && qAbs(d->vData.smoothVelocity.value()) > 100) {
+ // Increase deceleration if we've passed a bound
+ d->vData.inOvershoot = true;
+ qreal maxDistance = d->overShootDistance(height());
+ d->timeline.reset(d->vData.move);
+ d->timeline.accel(d->vData.move, -d->vData.smoothVelocity.value(), d->deceleration*QML_FLICK_OVERSHOOTFRICTION, maxDistance);
+ d->timeline.callback(QDeclarativeTimeLineCallback(&d->vData.move, d->fixupY_callback, d));
+ }
+ if (!d->hData.inOvershoot && !d->hData.fixingUp && d->flickingHorizontally
+ && (d->hData.move.value() > minXExtent() || d->hData.move.value() < maxXExtent())
+ && qAbs(d->hData.smoothVelocity.value()) > 100) {
+ // Increase deceleration if we've passed a bound
+ d->hData.inOvershoot = true;
+ qreal maxDistance = d->overShootDistance(width());
+ d->timeline.reset(d->hData.move);
+ d->timeline.accel(d->hData.move, -d->hData.smoothVelocity.value(), d->deceleration*QML_FLICK_OVERSHOOTFRICTION, maxDistance);
+ d->timeline.callback(QDeclarativeTimeLineCallback(&d->hData.move, d->fixupX_callback, d));
+ }
+
d->lastFlickablePosition = QPointF(d->hData.move.value(), d->vData.move.value());
d->vTime = d->timeline.time();
@@ -1339,7 +1430,9 @@ void QDeclarativeFlickable::resizeContent(qreal w, qreal h, QPointF center)
Q_D(QDeclarativeFlickable);
if (w != d->hData.viewSize) {
qreal oldSize = d->hData.viewSize;
- setContentWidth(w);
+ d->hData.viewSize = w;
+ d->contentItem->setWidth(w);
+ emit contentWidthChanged();
if (center.x() != 0) {
qreal pos = center.x() * w / oldSize;
setContentX(contentX() + pos - center.x());
@@ -1347,12 +1440,15 @@ void QDeclarativeFlickable::resizeContent(qreal w, qreal h, QPointF center)
}
if (h != d->vData.viewSize) {
qreal oldSize = d->vData.viewSize;
- setContentHeight(h);
+ d->vData.viewSize = h;
+ d->contentItem->setHeight(h);
+ emit contentHeightChanged();
if (center.y() != 0) {
qreal pos = center.y() * h / oldSize;
setContentY(contentY() + pos - center.y());
}
}
+ d->updateBeginningEnd();
}
/*!
@@ -1519,7 +1615,7 @@ bool QDeclarativeFlickable::sceneEventFilter(QGraphicsItem *i, QEvent *e)
\qmlproperty real Flickable::maximumFlickVelocity
This property holds the maximum velocity that the user can flick the view in pixels/second.
- The default is 2000 pixels/s
+ The default value is platform dependent.
*/
qreal QDeclarativeFlickable::maximumFlickVelocity() const
{
@@ -1540,7 +1636,7 @@ void QDeclarativeFlickable::setMaximumFlickVelocity(qreal v)
\qmlproperty real Flickable::flickDeceleration
This property holds the rate at which a flick will decelerate.
- The default is 500.
+ The default value is platform dependent.
*/
qreal QDeclarativeFlickable::flickDeceleration() const
{
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
index 38a5eb3..1117abb 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
@@ -94,9 +94,19 @@ public:
struct AxisData {
AxisData(QDeclarativeFlickablePrivate *fp, void (QDeclarativeFlickablePrivate::*func)(qreal))
: move(fp, func), viewSize(-1), smoothVelocity(fp), atEnd(false), atBeginning(true)
- , fixingUp(false)
+ , fixingUp(false), inOvershoot(false)
{}
+ void reset() {
+ velocityBuffer.clear();
+ dragStartOffset = 0;
+ fixingUp = false;
+ inOvershoot = false;
+ }
+
+ void addVelocitySample(qreal v, qreal maxVelocity);
+ void updateVelocity();
+
QDeclarativeTimeLineValueProxy<QDeclarativeFlickablePrivate> move;
qreal viewSize;
qreal pressPos;
@@ -106,9 +116,11 @@ public:
qreal velocity;
qreal flickTarget;
QDeclarativeFlickablePrivate::Velocity smoothVelocity;
+ QPODVector<qreal,10> velocityBuffer;
bool atEnd : 1;
bool atBeginning : 1;
bool fixingUp : 1;
+ bool inOvershoot : 1;
};
void flickX(qreal velocity);
@@ -129,7 +141,7 @@ public:
void setRoundedViewportX(qreal x);
void setRoundedViewportY(qreal y);
- qreal overShootDistance(qreal velocity, qreal size);
+ qreal overShootDistance(qreal size);
void itemGeometryChanged(QDeclarativeItem *, const QRectF &, const QRectF &);
diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index b890c4f..460f2c3 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -584,6 +584,26 @@ void QDeclarativeGridViewPrivate::refill(qreal from, qreal to, bool doBuffer)
--i;
modelIndex = visibleItems.at(i)->index + 1;
}
+
+ if (visibleItems.count() && (fillFrom > rowPos + rowSize()*2
+ || fillTo < rowPosAt(visibleIndex) - rowSize())) {
+ // We've jumped more than a page. Estimate which items are now
+ // visible and fill from there.
+ int count = (fillFrom - (rowPos + rowSize())) / (rowSize()) * columns;
+ for (int i = 0; i < visibleItems.count(); ++i)
+ releaseItem(visibleItems.at(i));
+ visibleItems.clear();
+ modelIndex += count;
+ if (modelIndex >= model->count())
+ modelIndex = model->count() - 1;
+ else if (modelIndex < 0)
+ modelIndex = 0;
+ modelIndex = modelIndex / columns * columns;
+ visibleIndex = modelIndex;
+ colPos = colPosAt(visibleIndex);
+ rowPos = rowPosAt(visibleIndex);
+ }
+
int colNum = colPos / colSize();
FxGridItem *item = 0;
@@ -1115,6 +1135,7 @@ void QDeclarativeGridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m
} else {
QDeclarativeFlickablePrivate::fixup(data, minExtent, maxExtent);
}
+ data.inOvershoot = false;
fixupMode = Normal;
}
@@ -1196,7 +1217,7 @@ void QDeclarativeGridViewPrivate::flick(AxisData &data, qreal minExtent, qreal m
accel = v2 / (2.0f * qAbs(dist));
} else {
data.flickTarget = velocity > 0 ? minExtent : maxExtent;
- overshootDist = overShoot ? overShootDistance(v, vSize) : 0;
+ overshootDist = overShoot ? overShootDistance(vSize) : 0;
}
timeline.reset(data.move);
timeline.accel(data.move, v, accel, maxDistance + overshootDist);
@@ -1478,6 +1499,7 @@ void QDeclarativeGridView::setDelegate(QDeclarativeComponent *delegate)
d->ownModel = true;
}
if (QDeclarativeVisualDataModel *dataModel = qobject_cast<QDeclarativeVisualDataModel*>(d->model)) {
+ int oldCount = dataModel->count();
dataModel->setDelegate(delegate);
if (isComponentComplete()) {
for (int i = 0; i < d->visibleItems.count(); ++i)
@@ -1495,6 +1517,8 @@ void QDeclarativeGridView::setDelegate(QDeclarativeComponent *delegate)
}
d->moveReason = QDeclarativeGridViewPrivate::Other;
}
+ if (oldCount != dataModel->count())
+ emit countChanged();
emit delegateChanged();
}
}
@@ -2229,7 +2253,7 @@ qreal QDeclarativeGridView::maxXExtent() const
qreal extent;
qreal highlightStart;
qreal highlightEnd;
- qreal lastItemPosition;
+ qreal lastItemPosition = 0;
if (d->isRightToLeftTopToBottom()){
highlightStart = d->highlightRangeStartValid ? d->highlightRangeEnd : d->size();
highlightEnd = d->highlightRangeEndValid ? d->highlightRangeStart : d->size();
diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp
index ed5d5fc..b776532 100644
--- a/src/declarative/graphicsitems/qdeclarativeimage.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp
@@ -136,12 +136,10 @@ void QDeclarativeImagePrivate::setPixmap(const QPixmap &pixmap)
Q_Q(QDeclarativeImage);
pix.setPixmap(pixmap);
- q->setImplicitWidth(pix.width());
- q->setImplicitHeight(pix.height());
+ q->pixmapChange();
status = pix.isNull() ? QDeclarativeImageBase::Null : QDeclarativeImageBase::Ready;
q->update();
- q->pixmapChange();
}
/*!
@@ -377,6 +375,9 @@ qreal QDeclarativeImage::paintedHeight() const
If the source is a non-scalable image (eg. JPEG), the loaded image will
be no greater than this property specifies. For some formats (currently only JPEG),
the whole image will never actually be loaded into memory.
+
+ Since QtQuick 1.1 the sourceSize can be cleared to the natural size of the image
+ by setting sourceSize to \c undefined.
\note \e {Changing this property dynamically causes the image source to be reloaded,
potentially even from the network, if it is not in the disk cache.}
@@ -387,8 +388,11 @@ void QDeclarativeImage::updatePaintedGeometry()
Q_D(QDeclarativeImage);
if (d->fillMode == PreserveAspectFit) {
- if (!d->pix.width() || !d->pix.height())
+ if (!d->pix.width() || !d->pix.height()) {
+ setImplicitWidth(0);
+ setImplicitHeight(0);
return;
+ }
qreal w = widthValid() ? width() : d->pix.width();
qreal widthScale = w / qreal(d->pix.width());
qreal h = heightValid() ? height() : d->pix.height();
@@ -402,9 +406,13 @@ void QDeclarativeImage::updatePaintedGeometry()
}
if (widthValid() && !heightValid()) {
setImplicitHeight(d->paintedHeight);
+ } else {
+ setImplicitHeight(d->pix.height());
}
if (heightValid() && !widthValid()) {
setImplicitWidth(d->paintedWidth);
+ } else {
+ setImplicitWidth(d->pix.width());
}
} else if (d->fillMode == PreserveAspectCrop) {
if (!d->pix.width() || !d->pix.height())
@@ -563,6 +571,13 @@ void QDeclarativeImage::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWi
void QDeclarativeImage::pixmapChange()
{
+ Q_D(QDeclarativeImage);
+ // PreserveAspectFit calculates the implicit size differently so we
+ // don't call our superclass pixmapChange(), since that would
+ // result in the implicit size being set incorrectly, then updated
+ // in updatePaintedGeometry()
+ if (d->fillMode != PreserveAspectFit)
+ QDeclarativeImageBase::pixmapChange();
updatePaintedGeometry();
}
diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
index 2de3ba0..81eac78 100644
--- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
@@ -133,6 +133,18 @@ QSize QDeclarativeImageBase::sourceSize() const
return QSize(width != -1 ? width : d->pix.width(), height != -1 ? height : d->pix.height());
}
+void QDeclarativeImageBase::resetSourceSize()
+{
+ Q_D(QDeclarativeImageBase);
+ if (!d->explicitSourceSize)
+ return;
+ d->explicitSourceSize = false;
+ d->sourcesize = QSize();
+ emit sourceSizeChanged();
+ if (isComponentComplete())
+ load();
+}
+
bool QDeclarativeImageBase::cache() const
{
Q_D(const QDeclarativeImageBase);
@@ -176,14 +188,12 @@ void QDeclarativeImageBase::load()
Q_D(QDeclarativeImageBase);
if (d->url.isEmpty()) {
- d->pix.clear();
+ d->pix.clear(this);
d->status = Null;
d->progress = 0.0;
- setImplicitWidth(0);
- setImplicitHeight(0);
+ pixmapChange();
emit progressChanged(d->progress);
emit statusChanged(d->status);
- pixmapChange();
update();
} else {
QDeclarativePixmap::Options options;
@@ -191,6 +201,7 @@ void QDeclarativeImageBase::load()
options |= QDeclarativePixmap::Asynchronous;
if (d->cache)
options |= QDeclarativePixmap::Cache;
+ d->pix.clear(this);
d->pix.load(qmlEngine(this), d->url, d->explicitSourceSize ? sourceSize() : QSize(), options);
if (d->pix.isLoading()) {
@@ -233,8 +244,7 @@ void QDeclarativeImageBase::requestFinished()
d->progress = 1.0;
- setImplicitWidth(d->pix.width());
- setImplicitHeight(d->pix.height());
+ pixmapChange();
if (d->sourcesize.width() != d->pix.width() || d->sourcesize.height() != d->pix.height())
emit sourceSizeChanged();
@@ -243,7 +253,7 @@ void QDeclarativeImageBase::requestFinished()
emit statusChanged(d->status);
if (d->progress != oldProgress)
emit progressChanged(d->progress);
- pixmapChange();
+
update();
}
@@ -266,6 +276,9 @@ void QDeclarativeImageBase::componentComplete()
void QDeclarativeImageBase::pixmapChange()
{
+ Q_D(QDeclarativeImageBase);
+ setImplicitWidth(d->pix.width());
+ setImplicitHeight(d->pix.height());
}
QT_END_NAMESPACE
diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase_p.h b/src/declarative/graphicsitems/qdeclarativeimagebase_p.h
index abee25d..1763bba 100644
--- a/src/declarative/graphicsitems/qdeclarativeimagebase_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeimagebase_p.h
@@ -59,7 +59,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeImageBase : public QDeclarativeImplicitSizeI
Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged)
Q_PROPERTY(bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged)
Q_PROPERTY(bool cache READ cache WRITE setCache NOTIFY cacheChanged REVISION 1)
- Q_PROPERTY(QSize sourceSize READ sourceSize WRITE setSourceSize NOTIFY sourceSizeChanged)
+ Q_PROPERTY(QSize sourceSize READ sourceSize WRITE setSourceSize RESET resetSourceSize NOTIFY sourceSizeChanged)
Q_PROPERTY(bool mirror READ mirror WRITE setMirror NOTIFY mirrorChanged REVISION 1)
public:
@@ -80,6 +80,7 @@ public:
virtual void setSourceSize(const QSize&);
QSize sourceSize() const;
+ void resetSourceSize();
virtual void setMirror(bool mirror);
bool mirror() const;
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index 6ae1ddc..79d67e7 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -733,6 +733,7 @@ void QDeclarativeListViewPrivate::refill(qreal from, qreal to, bool doBuffer)
if (doBuffer && (bufferMode & BufferBefore))
fillFrom = bufferFrom;
+ bool haveValidItems = false;
int modelIndex = visibleIndex;
qreal itemEnd = visiblePos-1;
if (!visibleItems.isEmpty()) {
@@ -741,9 +742,33 @@ void QDeclarativeListViewPrivate::refill(qreal from, qreal to, bool doBuffer)
int i = visibleItems.count() - 1;
while (i > 0 && visibleItems.at(i)->index == -1)
--i;
- if (visibleItems.at(i)->index != -1)
+ if (visibleItems.at(i)->index != -1) {
+ haveValidItems = true;
modelIndex = visibleItems.at(i)->index + 1;
+ }
+ }
+
+ if (haveValidItems && (fillFrom > itemEnd+averageSize+spacing
+ || fillTo < visiblePos - averageSize - spacing)) {
+ // We've jumped more than a page. Estimate which items are now
+ // visible and fill from there.
+ int count = (fillFrom - itemEnd) / (averageSize + spacing);
+ for (int i = 0; i < visibleItems.count(); ++i)
+ releaseItem(visibleItems.at(i));
+ visibleItems.clear();
+ modelIndex += count;
+ if (modelIndex >= model->count()) {
+ count -= modelIndex - model->count() + 1;
+ modelIndex = model->count() - 1;
+ } else if (modelIndex < 0) {
+ count -= modelIndex;
+ modelIndex = 0;
+ }
+ visibleIndex = modelIndex;
+ visiblePos = itemEnd + count * (averageSize + spacing) + 1;
+ itemEnd = visiblePos-1;
}
+
bool changed = false;
FxListItem *item = 0;
qreal pos = itemEnd + 1;
@@ -1354,6 +1379,7 @@ void QDeclarativeListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal m
} else {
QDeclarativeFlickablePrivate::fixup(data, minExtent, maxExtent);
}
+ data.inOvershoot = false;
fixupMode = Normal;
}
@@ -1428,10 +1454,10 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m
data.flickTarget = isRightToLeft() ? -data.flickTarget+size() : data.flickTarget;
if (overShoot) {
if (data.flickTarget >= minExtent) {
- overshootDist = overShootDistance(v, vSize);
+ overshootDist = overShootDistance(vSize);
data.flickTarget += overshootDist;
} else if (data.flickTarget <= maxExtent) {
- overshootDist = overShootDistance(v, vSize);
+ overshootDist = overShootDistance(vSize);
data.flickTarget -= overshootDist;
}
}
@@ -1451,10 +1477,10 @@ void QDeclarativeListViewPrivate::flick(AxisData &data, qreal minExtent, qreal m
} else if (overShoot) {
data.flickTarget = data.move.value() - dist;
if (data.flickTarget >= minExtent) {
- overshootDist = overShootDistance(v, vSize);
+ overshootDist = overShootDistance(vSize);
data.flickTarget += overshootDist;
} else if (data.flickTarget <= maxExtent) {
- overshootDist = overShootDistance(v, vSize);
+ overshootDist = overShootDistance(vSize);
data.flickTarget -= overshootDist;
}
}
@@ -1790,6 +1816,7 @@ void QDeclarativeListView::setDelegate(QDeclarativeComponent *delegate)
d->ownModel = true;
}
if (QDeclarativeVisualDataModel *dataModel = qobject_cast<QDeclarativeVisualDataModel*>(d->model)) {
+ int oldCount = dataModel->count();
dataModel->setDelegate(delegate);
if (isComponentComplete()) {
for (int i = 0; i < d->visibleItems.count(); ++i)
@@ -1808,6 +1835,8 @@ void QDeclarativeListView::setDelegate(QDeclarativeComponent *delegate)
}
d->updateViewport();
}
+ if (oldCount != dataModel->count())
+ emit countChanged();
}
emit delegateChanged();
}
@@ -2118,9 +2147,11 @@ void QDeclarativeListView::setOrientation(QDeclarativeListView::Orientation orie
if (d->orient == QDeclarativeListView::Vertical) {
setContentWidth(-1);
setFlickableDirection(VerticalFlick);
+ setContentX(0);
} else {
setContentHeight(-1);
setFlickableDirection(HorizontalFlick);
+ setContentY(0);
}
d->regenerate();
emit orientationChanged();
@@ -2277,11 +2308,19 @@ void QDeclarativeListView::setCacheBuffer(int b)
depending on the "size" property of the model item. The \c sectionHeading
delegate component provides the light blue bar that marks the beginning of
each section.
+
\snippet examples/declarative/modelviews/listview/sections.qml 0
\image qml-listview-sections-example.png
+ \note Adding sections to a ListView does not automatically re-order the
+ list items by the section criteria.
+ If the model is not ordered by section, then it is possible that
+ the sections created will not be unique; each boundary between
+ differing sections will result in a section header being created
+ even if that section exists elsewhere.
+
\sa {declarative/modelviews/listview}{ListView examples}
*/
QDeclarativeViewSection *QDeclarativeListView::sectionCriteria()
@@ -2581,7 +2620,7 @@ void QDeclarativeListView::viewportMoved()
d->inFlickCorrection = true;
// Near an end and it seems that the extent has changed?
// Recalculate the flick so that we don't end up in an odd position.
- if (yflick()) {
+ if (yflick() && !d->vData.inOvershoot) {
if (d->vData.velocity > 0) {
const qreal minY = minYExtent();
if ((minY - d->vData.move.value() < height()/2 || d->vData.flickTarget - d->vData.move.value() < height()/2)
@@ -2597,7 +2636,7 @@ void QDeclarativeListView::viewportMoved()
}
}
- if (xflick()) {
+ if (xflick() && !d->hData.inOvershoot) {
if (d->hData.velocity > 0) {
const qreal minX = minXExtent();
if ((minX - d->hData.move.value() < width()/2 || d->hData.flickTarget - d->hData.move.value() < width()/2)
@@ -2767,7 +2806,7 @@ void QDeclarativeListView::keyPressEvent(QKeyEvent *event)
return;
if (d->model && d->model->count() && d->interactive) {
- if ((!d->isRightToLeft() && event->key() == Qt::Key_Left)
+ if ((d->orient == QDeclarativeListView::Horizontal && !d->isRightToLeft() && event->key() == Qt::Key_Left)
|| (d->orient == QDeclarativeListView::Horizontal && d->isRightToLeft() && event->key() == Qt::Key_Right)
|| (d->orient == QDeclarativeListView::Vertical && event->key() == Qt::Key_Up)) {
if (currentIndex() > 0 || (d->wrap && !event->isAutoRepeat())) {
@@ -2778,7 +2817,7 @@ void QDeclarativeListView::keyPressEvent(QKeyEvent *event)
event->accept();
return;
}
- } else if ((!d->isRightToLeft() && event->key() == Qt::Key_Right)
+ } else if ((d->orient == QDeclarativeListView::Horizontal && !d->isRightToLeft() && event->key() == Qt::Key_Right)
|| (d->orient == QDeclarativeListView::Horizontal && d->isRightToLeft() && event->key() == Qt::Key_Left)
|| (d->orient == QDeclarativeListView::Vertical && event->key() == Qt::Key_Down)) {
if (currentIndex() < d->model->count() - 1 || (d->wrap && !event->isAutoRepeat())) {
@@ -3370,9 +3409,9 @@ void QDeclarativeListView::itemsRemoved(int modelIndex, int count)
}
}
- if (removedVisible && !haveVisibleIndex) {
+ if (!haveVisibleIndex) {
d->timeline.clear();
- if (d->itemCount == 0) {
+ if (removedVisible && d->itemCount == 0) {
d->visibleIndex = 0;
d->visiblePos = d->header ? d->header->size() : 0;
d->setPosition(0);
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
index f5145d0..6633256 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp
+++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
@@ -496,6 +496,9 @@ void QDeclarativeMouseArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
d->pressAndHoldTimer.start(PressAndHoldDelay, this);
setKeepMouseGrab(d->stealMouse);
event->setAccepted(setPressed(true));
+
+ if(!event->isAccepted() && d->forwardToList.count())
+ d->forwardEvent(event);
}
}
@@ -573,6 +576,9 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
me.setX(d->lastPos.x());
me.setY(d->lastPos.y());
emit positionChanged(&me);
+
+ if(!event->isAccepted() && d->forwardToList.count())
+ d->forwardEvent(event);
}
@@ -594,6 +600,9 @@ void QDeclarativeMouseArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
if (s && s->mouseGrabberItem() == this)
ungrabMouse();
setKeepMouseGrab(false);
+
+ if(!event->isAccepted() && d->forwardToList.count())
+ d->forwardEvent(event);
}
d->doubleClick = false;
}
@@ -651,6 +660,32 @@ void QDeclarativeMouseArea::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
setHovered(false);
}
+#ifndef QT_NO_CONTEXTMENU
+void QDeclarativeMouseArea::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
+{
+ bool acceptsContextMenuButton;
+#if defined(Q_OS_SYMBIAN)
+ // In Symbian a Long Tap on the screen will trigger. See QSymbianControl::HandleLongTapEventL().
+ acceptsContextMenuButton = acceptedButtons() & Qt::LeftButton;
+#elif defined(Q_WS_WINCE)
+ // ### WinCE can trigger context menu event with a gesture in the left button or a
+ // click with the right button. Since we have no way here to differentiate them when
+ // event happens, accepting either of the them will block the event.
+ acceptsContextMenuButton = acceptedButtons() & (Qt::LeftButton | Qt::RightButton);
+#else
+ acceptsContextMenuButton = acceptedButtons() & Qt::RightButton;
+#endif
+
+ if (isEnabled() && event->reason() == QGraphicsSceneContextMenuEvent::Mouse
+ && acceptsContextMenuButton) {
+ // Do not let the context menu event propagate to items behind.
+ return;
+ }
+
+ QDeclarativeItem::contextMenuEvent(event);
+}
+#endif // QT_NO_CONTEXTMENU
+
bool QDeclarativeMouseArea::sceneEvent(QEvent *event)
{
bool rv = QDeclarativeItem::sceneEvent(event);
@@ -959,4 +994,11 @@ QDeclarativeDrag *QDeclarativeMouseArea::drag()
*/
+QDeclarativeListProperty<QGraphicsObject> QDeclarativeMouseArea::forwardTo()
+{
+ Q_D(QDeclarativeMouseArea);
+ return d->forwardTo;
+}
+
+
QT_END_NAMESPACE
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea_p.h b/src/declarative/graphicsitems/qdeclarativemousearea_p.h
index 985f27e..0fe8c6a 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea_p.h
+++ b/src/declarative/graphicsitems/qdeclarativemousearea_p.h
@@ -130,6 +130,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeMouseArea : public QDeclarativeItem
Q_PROPERTY(bool hoverEnabled READ hoverEnabled WRITE setHoverEnabled NOTIFY hoverEnabledChanged)
Q_PROPERTY(QDeclarativeDrag *drag READ drag CONSTANT) //### add flicking to QDeclarativeDrag or add a QDeclarativeFlick ???
Q_PROPERTY(bool preventStealing READ preventStealing WRITE setPreventStealing NOTIFY preventStealingChanged REVISION 1)
+ Q_PROPERTY(QDeclarativeListProperty<QGraphicsObject> forwardTo READ forwardTo);
public:
QDeclarativeMouseArea(QDeclarativeItem *parent=0);
@@ -157,6 +158,8 @@ public:
bool preventStealing() const;
void setPreventStealing(bool prevent);
+ QDeclarativeListProperty<QGraphicsObject> forwardTo();
+
Q_SIGNALS:
void hoveredChanged();
void pressedChanged();
@@ -187,6 +190,9 @@ protected:
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+#ifndef QT_NO_CONTEXTMENU
+ void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
+#endif // QT_NO_CONTEXTMENU
bool sceneEvent(QEvent *);
bool sendMouseEvent(QGraphicsSceneMouseEvent *event);
bool sceneEventFilter(QGraphicsItem *i, QEvent *e);
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
index 67694fb..7248c92 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
@@ -70,6 +70,8 @@ public:
: absorb(true), hovered(false), pressed(false), longPress(false),
moved(false), stealMouse(false), doubleClick(false), preventStealing(false), drag(0)
{
+ Q_Q(QDeclarativeMouseArea);
+ forwardTo = QDeclarativeListProperty<QGraphicsObject>(q, forwardToList);
}
~QDeclarativeMouseAreaPrivate();
@@ -89,6 +91,18 @@ public:
lastModifiers = event->modifiers();
}
+ void forwardEvent(QGraphicsSceneMouseEvent* event)
+ {
+ Q_Q(QDeclarativeMouseArea);
+ for(int i=0; i < forwardToList.count(); i++){
+ event->setPos(forwardToList[i]->mapFromScene(event->scenePos()));
+ forwardToList[i]->scene()->sendEvent(forwardToList[i], event);
+ if(event->isAccepted())
+ break;
+ }
+ event->setPos(q->mapFromScene(event->scenePos()));
+ }
+
bool isPressAndHoldConnected() {
Q_Q(QDeclarativeMouseArea);
static int idx = QObjectPrivate::get(q)->signalIndex("pressAndHold(QDeclarativeMouseEvent*)");
@@ -121,6 +135,9 @@ public:
Qt::MouseButtons lastButtons;
Qt::KeyboardModifiers lastModifiers;
QBasicTimer pressAndHoldTimer;
+
+ QDeclarativeListProperty<QGraphicsObject> forwardTo;
+ QList<QGraphicsObject*> forwardToList;
};
QT_END_NAMESPACE
diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp
index 778b8b9..be2bd60 100644
--- a/src/declarative/graphicsitems/qdeclarativepathview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp
@@ -1021,9 +1021,12 @@ void QDeclarativePathView::setDelegate(QDeclarativeComponent *delegate)
d->ownModel = true;
}
if (QDeclarativeVisualDataModel *dataModel = qobject_cast<QDeclarativeVisualDataModel*>(d->model)) {
+ int oldCount = dataModel->count();
dataModel->setDelegate(delegate);
d->modelCount = dataModel->count();
d->regenerate();
+ if (oldCount != dataModel->count())
+ emit countChanged();
emit delegateChanged();
}
}
@@ -1525,6 +1528,8 @@ void QDeclarativePathView::itemsRemoved(int modelIndex, int count)
} else {
d->regenerate();
d->updateCurrent();
+ if (!d->flicking && !d->moving && d->haveHighlightRange && d->highlightRangeMode == QDeclarativePathView::StrictlyEnforceRange)
+ d->snapToCurrent();
}
if (changedOffset)
emit offsetChanged();
diff --git a/src/declarative/graphicsitems/qdeclarativepincharea.cpp b/src/declarative/graphicsitems/qdeclarativepincharea.cpp
index 9bc3d8d..c30ff8c 100644
--- a/src/declarative/graphicsitems/qdeclarativepincharea.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepincharea.cpp
@@ -138,6 +138,14 @@ QT_BEGIN_NAMESPACE
ignored.
*/
+/*!
+ \qmlproperty int PinchEvent::pointCount
+
+ Holds the number of points currently touched. The PinchArea will not react
+ until two touch points have initited a gesture, but will remain active until
+ all touch points have been released.
+*/
+
QDeclarativePinch::QDeclarativePinch()
: m_target(0), m_minScale(1.0), m_maxScale(1.0)
, m_minRotation(0.0), m_maxRotation(0.0)
@@ -295,7 +303,7 @@ bool QDeclarativePinchArea::event(QEvent *event)
void QDeclarativePinchArea::updatePinch()
{
Q_D(QDeclarativePinchArea);
- if (d->touchPoints.count() != 2) {
+ if (d->touchPoints.count() == 0) {
if (d->inPinch) {
d->stealMouse = false;
setKeepMouseGrab(false);
@@ -308,127 +316,141 @@ void QDeclarativePinchArea::updatePinch()
pe.setPreviousScale(d->pinchLastScale);
pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));
pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));
- pe.setPoint1(d->lastPoint1);
- pe.setPoint2(d->lastPoint2);
+ pe.setPoint1(mapFromScene(d->lastPoint1));
+ pe.setPoint2(mapFromScene(d->lastPoint2));
emit pinchFinished(&pe);
d->pinchStartDist = 0;
+ d->pinchActivated = false;
if (d->pinch && d->pinch->target())
d->pinch->setActive(false);
}
return;
}
- if (d->touchPoints.at(0).state() & Qt::TouchPointPressed
- || d->touchPoints.at(1).state() & Qt::TouchPointPressed) {
- d->sceneStartPoint1 = d->touchPoints.at(0).scenePos();
- d->sceneStartPoint2 = d->touchPoints.at(1).scenePos();
+ QTouchEvent::TouchPoint touchPoint1 = d->touchPoints.at(0);
+ QTouchEvent::TouchPoint touchPoint2 = d->touchPoints.at(d->touchPoints. count() >= 2 ? 1 : 0);
+ if (d->touchPoints.count() == 2
+ && (touchPoint1.state() & Qt::TouchPointPressed || touchPoint2.state() & Qt::TouchPointPressed)) {
+ d->id1 = touchPoint1.id();
+ d->sceneStartPoint1 = touchPoint1.scenePos();
+ d->sceneStartPoint2 = touchPoint2.scenePos();
d->inPinch = false;
d->pinchRejected = false;
- } else if (!d->pinchRejected){
- QDeclarativeItem *grabber = scene() ? qobject_cast<QDeclarativeItem*>(scene()->mouseGrabberItem()) : 0;
- if (grabber == this || !grabber || !grabber->keepMouseGrab()) {
- const int dragThreshold = QApplication::startDragDistance();
- QPointF p1 = d->touchPoints.at(0).scenePos();
- QPointF p2 = d->touchPoints.at(1).scenePos();
- qreal dx = p1.x() - p2.x();
- qreal dy = p1.y() - p2.y();
- qreal dist = sqrt(dx*dx + dy*dy);
- QPointF sceneCenter = (p1 + p2)/2;
- qreal angle = QLineF(p1, p2).angle();
- if (angle > 180)
- angle -= 360;
- if (!d->inPinch) {
- if (qAbs(p1.x()-d->sceneStartPoint1.x()) > dragThreshold
- || qAbs(p1.y()-d->sceneStartPoint1.y()) > dragThreshold
- || qAbs(p2.x()-d->sceneStartPoint2.x()) > dragThreshold
- || qAbs(p2.y()-d->sceneStartPoint2.y()) > dragThreshold) {
- d->sceneStartCenter = sceneCenter;
- d->sceneLastCenter = sceneCenter;
- d->pinchStartCenter = mapFromScene(sceneCenter);
- d->pinchStartDist = dist;
- d->pinchStartAngle = angle;
- d->pinchLastScale = 1.0;
- d->pinchLastAngle = angle;
- d->pinchRotation = 0.0;
- d->lastPoint1 = d->touchPoints.at(0).pos();
- d->lastPoint2 = d->touchPoints.at(1).pos();
- QDeclarativePinchEvent pe(d->pinchStartCenter, 1.0, angle, 0.0);
- pe.setStartCenter(d->pinchStartCenter);
- pe.setPreviousCenter(d->pinchStartCenter);
- pe.setPreviousAngle(d->pinchLastAngle);
- pe.setPreviousScale(d->pinchLastScale);
- pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));
- pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));
- pe.setPoint1(d->lastPoint1);
- pe.setPoint2(d->lastPoint2);
- emit pinchStarted(&pe);
- if (pe.accepted()) {
- d->inPinch = true;
- d->stealMouse = true;
- QGraphicsScene *s = scene();
- if (s && s->mouseGrabberItem() != this)
- grabMouse();
- setKeepMouseGrab(true);
- if (d->pinch && d->pinch->target()) {
- d->pinchStartPos = pinch()->target()->pos();
- d->pinchStartScale = d->pinch->target()->scale();
- d->pinchStartRotation = d->pinch->target()->rotation();
- d->pinch->setActive(true);
- }
- } else {
- d->pinchRejected = true;
- }
- }
- } else if (d->pinchStartDist > 0) {
- qreal scale = dist / d->pinchStartDist;
- qreal da = d->pinchLastAngle - angle;
- if (da > 180)
- da -= 360;
- else if (da < -180)
- da += 360;
- d->pinchRotation += da;
- QPointF pinchCenter = mapFromScene(sceneCenter);
- QDeclarativePinchEvent pe(pinchCenter, scale, angle, d->pinchRotation);
+ d->pinchActivated = true;
+ } else if (d->pinchActivated && !d->pinchRejected) {
+ const int dragThreshold = QApplication::startDragDistance();
+ QPointF p1 = touchPoint1.scenePos();
+ QPointF p2 = touchPoint2.scenePos();
+ qreal dx = p1.x() - p2.x();
+ qreal dy = p1.y() - p2.y();
+ qreal dist = sqrt(dx*dx + dy*dy);
+ QPointF sceneCenter = (p1 + p2)/2;
+ qreal angle = QLineF(p1, p2).angle();
+ if (d->touchPoints.count() == 1) {
+ // If we only have one point then just move the center
+ if (d->id1 == touchPoint1.id())
+ sceneCenter = d->sceneLastCenter + touchPoint1.scenePos() - d->lastPoint1;
+ else
+ sceneCenter = d->sceneLastCenter + touchPoint2.scenePos() - d->lastPoint2;
+ angle = d->pinchLastAngle;
+ }
+ d->id1 = touchPoint1.id();
+ if (angle > 180)
+ angle -= 360;
+ if (!d->inPinch) {
+ if (d->touchPoints.count() >= 2
+ && (qAbs(p1.x()-d->sceneStartPoint1.x()) > dragThreshold
+ || qAbs(p1.y()-d->sceneStartPoint1.y()) > dragThreshold
+ || qAbs(p2.x()-d->sceneStartPoint2.x()) > dragThreshold
+ || qAbs(p2.y()-d->sceneStartPoint2.y()) > dragThreshold)) {
+ d->sceneStartCenter = sceneCenter;
+ d->sceneLastCenter = sceneCenter;
+ d->pinchStartCenter = mapFromScene(sceneCenter);
+ d->pinchStartDist = dist;
+ d->pinchStartAngle = angle;
+ d->pinchLastScale = 1.0;
+ d->pinchLastAngle = angle;
+ d->pinchRotation = 0.0;
+ d->lastPoint1 = p1;
+ d->lastPoint2 = p2;
+ QDeclarativePinchEvent pe(d->pinchStartCenter, 1.0, angle, 0.0);
pe.setStartCenter(d->pinchStartCenter);
- pe.setPreviousCenter(mapFromScene(d->sceneLastCenter));
+ pe.setPreviousCenter(d->pinchStartCenter);
pe.setPreviousAngle(d->pinchLastAngle);
pe.setPreviousScale(d->pinchLastScale);
pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));
pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));
- pe.setPoint1(d->touchPoints.at(0).pos());
- pe.setPoint2(d->touchPoints.at(1).pos());
- d->pinchLastScale = scale;
- d->sceneLastCenter = sceneCenter;
- d->pinchLastAngle = angle;
- d->lastPoint1 = d->touchPoints.at(0).pos();
- d->lastPoint2 = d->touchPoints.at(1).pos();
- emit pinchUpdated(&pe);
- if (d->pinch && d->pinch->target()) {
- qreal s = d->pinchStartScale * scale;
- s = qMin(qMax(pinch()->minimumScale(),s), pinch()->maximumScale());
- pinch()->target()->setScale(s);
- QPointF pos = sceneCenter - d->sceneStartCenter + d->pinchStartPos;
- if (pinch()->axis() & QDeclarativePinch::XAxis) {
- qreal x = pos.x();
- if (x < pinch()->xmin())
- x = pinch()->xmin();
- else if (x > pinch()->xmax())
- x = pinch()->xmax();
- pinch()->target()->setX(x);
- }
- if (pinch()->axis() & QDeclarativePinch::YAxis) {
- qreal y = pos.y();
- if (y < pinch()->ymin())
- y = pinch()->ymin();
- else if (y > pinch()->ymax())
- y = pinch()->ymax();
- pinch()->target()->setY(y);
- }
- if (d->pinchStartRotation >= pinch()->minimumRotation()
- && d->pinchStartRotation <= pinch()->maximumRotation()) {
- qreal r = d->pinchRotation + d->pinchStartRotation;
- r = qMin(qMax(pinch()->minimumRotation(),r), pinch()->maximumRotation());
- pinch()->target()->setRotation(r);
+ pe.setPoint1(mapFromScene(d->lastPoint1));
+ pe.setPoint2(mapFromScene(d->lastPoint2));
+ pe.setPointCount(d->touchPoints.count());
+ emit pinchStarted(&pe);
+ if (pe.accepted()) {
+ d->inPinch = true;
+ d->stealMouse = true;
+ QGraphicsScene *s = scene();
+ if (s && s->mouseGrabberItem() != this)
+ grabMouse();
+ setKeepMouseGrab(true);
+ if (d->pinch && d->pinch->target()) {
+ d->pinchStartPos = pinch()->target()->pos();
+ d->pinchStartScale = d->pinch->target()->scale();
+ d->pinchStartRotation = d->pinch->target()->rotation();
+ d->pinch->setActive(true);
}
+ } else {
+ d->pinchRejected = true;
+ }
+ }
+ } else if (d->pinchStartDist > 0) {
+ qreal scale = dist ? dist / d->pinchStartDist : d->pinchLastScale;
+ qreal da = d->pinchLastAngle - angle;
+ if (da > 180)
+ da -= 360;
+ else if (da < -180)
+ da += 360;
+ d->pinchRotation += da;
+ QPointF pinchCenter = mapFromScene(sceneCenter);
+ QDeclarativePinchEvent pe(pinchCenter, scale, angle, d->pinchRotation);
+ pe.setStartCenter(d->pinchStartCenter);
+ pe.setPreviousCenter(mapFromScene(d->sceneLastCenter));
+ pe.setPreviousAngle(d->pinchLastAngle);
+ pe.setPreviousScale(d->pinchLastScale);
+ pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));
+ pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));
+ pe.setPoint1(touchPoint1.pos());
+ pe.setPoint2(touchPoint2.pos());
+ pe.setPointCount(d->touchPoints.count());
+ d->pinchLastScale = scale;
+ d->sceneLastCenter = sceneCenter;
+ d->pinchLastAngle = angle;
+ d->lastPoint1 = touchPoint1.scenePos();
+ d->lastPoint2 = touchPoint2.scenePos();
+ emit pinchUpdated(&pe);
+ if (d->pinch && d->pinch->target()) {
+ qreal s = d->pinchStartScale * scale;
+ s = qMin(qMax(pinch()->minimumScale(),s), pinch()->maximumScale());
+ pinch()->target()->setScale(s);
+ QPointF pos = sceneCenter - d->sceneStartCenter + d->pinchStartPos;
+ if (pinch()->axis() & QDeclarativePinch::XAxis) {
+ qreal x = pos.x();
+ if (x < pinch()->xmin())
+ x = pinch()->xmin();
+ else if (x > pinch()->xmax())
+ x = pinch()->xmax();
+ pinch()->target()->setX(x);
+ }
+ if (pinch()->axis() & QDeclarativePinch::YAxis) {
+ qreal y = pos.y();
+ if (y < pinch()->ymin())
+ y = pinch()->ymin();
+ else if (y > pinch()->ymax())
+ y = pinch()->ymax();
+ pinch()->target()->setY(y);
+ }
+ if (d->pinchStartRotation >= pinch()->minimumRotation()
+ && d->pinchStartRotation <= pinch()->maximumRotation()) {
+ qreal r = d->pinchRotation + d->pinchStartRotation;
+ r = qMin(qMax(pinch()->minimumRotation(),r), pinch()->maximumRotation());
+ pinch()->target()->setRotation(r);
}
}
}
diff --git a/src/declarative/graphicsitems/qdeclarativepincharea_p.h b/src/declarative/graphicsitems/qdeclarativepincharea_p.h
index 6d04708..b5afea9 100644
--- a/src/declarative/graphicsitems/qdeclarativepincharea_p.h
+++ b/src/declarative/graphicsitems/qdeclarativepincharea_p.h
@@ -203,11 +203,13 @@ class Q_AUTOTEST_EXPORT QDeclarativePinchEvent : public QObject
Q_PROPERTY(QPointF startPoint1 READ startPoint1)
Q_PROPERTY(QPointF point2 READ point2)
Q_PROPERTY(QPointF startPoint2 READ startPoint2)
+ Q_PROPERTY(int pointCount READ pointCount)
Q_PROPERTY(bool accepted READ accepted WRITE setAccepted)
public:
QDeclarativePinchEvent(QPointF c, qreal s, qreal a, qreal r)
- : QObject(), m_center(c), m_scale(s), m_angle(a), m_rotation(r), m_accepted(true) {}
+ : QObject(), m_center(c), m_scale(s), m_angle(a), m_rotation(r)
+ , m_pointCount(0), m_accepted(true) {}
QPointF center() const { return m_center; }
QPointF startCenter() const { return m_startCenter; }
@@ -229,6 +231,8 @@ public:
void setPoint2(QPointF p) { m_point2 = p; }
QPointF startPoint2() const { return m_startPoint2; }
void setStartPoint2(QPointF p) { m_startPoint2 = p; }
+ int pointCount() const { return m_pointCount; }
+ void setPointCount(int count) { m_pointCount = count; }
bool accepted() const { return m_accepted; }
void setAccepted(bool a) { m_accepted = a; }
@@ -246,6 +250,7 @@ private:
QPointF m_point2;
QPointF m_startPoint1;
QPointF m_startPoint2;
+ int m_pointCount;
bool m_accepted;
};
diff --git a/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h b/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h
index cd5cf2a..3264948 100644
--- a/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativepincharea_p_p.h
@@ -68,7 +68,8 @@ class QDeclarativePinchAreaPrivate : public QDeclarativeItemPrivate
public:
QDeclarativePinchAreaPrivate()
: absorb(true), stealMouse(false), inPinch(false)
- , pinchRejected(false), pinch(0), pinchStartDist(0), pinchStartScale(1.0)
+ , pinchRejected(false), pinchActivated(false)
+ , pinch(0), pinchStartDist(0), pinchStartScale(1.0)
, pinchLastScale(1.0), pinchStartRotation(0.0), pinchStartAngle(0.0)
, pinchLastAngle(0.0), pinchRotation(0.0)
{
@@ -88,6 +89,7 @@ public:
bool stealMouse : 1;
bool inPinch : 1;
bool pinchRejected : 1;
+ bool pinchActivated : 1;
QDeclarativePinch *pinch;
QPointF sceneStartPoint1;
QPointF sceneStartPoint2;
@@ -105,6 +107,7 @@ public:
QPointF sceneLastCenter;
QPointF pinchStartPos;
QList<QTouchEvent::TouchPoint> touchPoints;
+ int id1;
};
QT_END_NAMESPACE
diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp
index 8a9bdb3..e76fc03 100644
--- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp
@@ -609,6 +609,11 @@ void QDeclarativeRow::setLayoutDirection(Qt::LayoutDirection layoutDirection)
QDeclarativeBasePositionerPrivate *d = static_cast<QDeclarativeBasePositionerPrivate* >(QDeclarativeBasePositionerPrivate::get(this));
if (d->layoutDirection != layoutDirection) {
d->layoutDirection = layoutDirection;
+ // For RTL layout the positioning changes when the width changes.
+ if (d->layoutDirection == Qt::RightToLeft)
+ d->addItemChangeListener(d, QDeclarativeItemPrivate::Geometry);
+ else
+ d->removeItemChangeListener(d, QDeclarativeItemPrivate::Geometry);
prePositioning();
emit layoutDirectionChanged();
emit effectiveLayoutDirectionChanged();
@@ -907,6 +912,11 @@ void QDeclarativeGrid::setLayoutDirection(Qt::LayoutDirection layoutDirection)
QDeclarativeBasePositionerPrivate *d = static_cast<QDeclarativeBasePositionerPrivate*>(QDeclarativeBasePositionerPrivate::get(this));
if (d->layoutDirection != layoutDirection) {
d->layoutDirection = layoutDirection;
+ // For RTL layout the positioning changes when the width changes.
+ if (d->layoutDirection == Qt::RightToLeft)
+ d->addItemChangeListener(d, QDeclarativeItemPrivate::Geometry);
+ else
+ d->removeItemChangeListener(d, QDeclarativeItemPrivate::Geometry);
prePositioning();
emit layoutDirectionChanged();
emit effectiveLayoutDirectionChanged();
diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp
index 720692c..1d51840 100644
--- a/src/declarative/graphicsitems/qdeclarativetext.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetext.cpp
@@ -101,7 +101,8 @@ QDeclarativeTextPrivate::QDeclarativeTextPrivate()
format(QDeclarativeText::AutoText), wrapMode(QDeclarativeText::NoWrap), lineHeight(1),
lineHeightMode(QDeclarativeText::ProportionalHeight), lineCount(1), truncated(false), maximumLineCount(INT_MAX),
maximumLineCountValid(false), imageCacheDirty(true), updateOnComponentComplete(true), richText(false), singleline(false),
- cacheAllTextAsImage(true), internalWidthUpdate(false), requireImplicitWidth(false), hAlignImplicit(true), rightToLeftText(false), naturalWidth(0), doc(0)
+ cacheAllTextAsImage(true), internalWidthUpdate(false), requireImplicitWidth(false), hAlignImplicit(true),
+ rightToLeftText(false), layoutTextElided(false), naturalWidth(0), doc(0)
{
cacheAllTextAsImage = enableImageCache();
QGraphicsItemPrivate::acceptedMouseButtons = Qt::LeftButton;
@@ -217,6 +218,7 @@ void QDeclarativeTextPrivate::updateLayout()
return;
}
+ layoutTextElided = false;
// Setup instance of QTextLayout for all cases other than richtext
if (!richText) {
layout.clearLayout();
@@ -227,10 +229,13 @@ void QDeclarativeTextPrivate::updateLayout()
singleline = !tmp.contains(QChar::LineSeparator);
if (singleline && !maximumLineCountValid && elideMode != QDeclarativeText::ElideNone && q->widthValid()) {
QFontMetrics fm(font);
- tmp = fm.elidedText(tmp,(Qt::TextElideMode)elideMode,q->width()); // XXX still worth layout...?
- if (tmp != text && !truncated) {
- truncated = true;
- emit q->truncatedChanged();
+ tmp = fm.elidedText(tmp,(Qt::TextElideMode)elideMode,q->width());
+ if (tmp != text) {
+ layoutTextElided = true;
+ if (!truncated) {
+ truncated = true;
+ emit q->truncatedChanged();
+ }
}
}
layout.setText(tmp);
@@ -377,6 +382,12 @@ QRect QDeclarativeTextPrivate::setupTextLayout()
if (requireImplicitWidth && q->widthValid()) {
// requires an extra layout
+ QString elidedText;
+ if (layoutTextElided) {
+ // We have provided elided text to the layout, but we must calculate unelided width.
+ elidedText = layout.text();
+ layout.setText(text);
+ }
layout.beginLayout();
forever {
QTextLine line = layout.createLine();
@@ -390,6 +401,8 @@ QRect QDeclarativeTextPrivate::setupTextLayout()
br = br.united(line.naturalTextRect());
}
naturalWidth = br.width();
+ if (layoutTextElided)
+ layout.setText(elidedText);
}
if (maximumLineCountValid) {
diff --git a/src/declarative/graphicsitems/qdeclarativetext_p_p.h b/src/declarative/graphicsitems/qdeclarativetext_p_p.h
index e3ab62a..6a3d581 100644
--- a/src/declarative/graphicsitems/qdeclarativetext_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetext_p_p.h
@@ -116,6 +116,7 @@ public:
bool requireImplicitWidth:1;
bool hAlignImplicit:1;
bool rightToLeftText:1;
+ bool layoutTextElided:1;
QRect layedOutTextRect;
QSize paintedSize;
diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp
index 2cb1c94..af2c8f3 100644
--- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp
@@ -582,6 +582,7 @@ void QDeclarativeTextEdit::setVAlign(QDeclarativeTextEdit::VAlignment alignment)
d->vAlign = alignment;
d->updateDefaultTextOption();
updateSize();
+ moveCursorDelegate();
emit verticalAlignmentChanged(d->vAlign);
}
@@ -870,8 +871,6 @@ void QDeclarativeTextEdit::setCursorDelegate(QDeclarativeComponent* c)
Q_D(QDeclarativeTextEdit);
if(d->cursorComponent){
if(d->cursor){
- disconnect(d->control, SIGNAL(cursorPositionChanged()),
- this, SLOT(moveCursorDelegate()));
d->control->setCursorWidth(-1);
dirtyCache(cursorRectangle());
delete d->cursor;
@@ -897,8 +896,6 @@ void QDeclarativeTextEdit::loadCursorDelegate()
return;
d->cursor = qobject_cast<QDeclarativeItem*>(d->cursorComponent->create(qmlContext(this)));
if(d->cursor){
- connect(d->control, SIGNAL(cursorPositionChanged()),
- this, SLOT(moveCursorDelegate()));
d->control->setCursorWidth(0);
dirtyCache(cursorRectangle());
QDeclarative_setParent_noEvent(d->cursor, this);
@@ -1173,7 +1170,7 @@ Qt::TextInteractionFlags QDeclarativeTextEdit::textInteractionFlags() const
QRect QDeclarativeTextEdit::cursorRectangle() const
{
Q_D(const QDeclarativeTextEdit);
- return d->control->cursorRect().toRect().translated(0,-d->yoff);
+ return d->control->cursorRect().toRect().translated(0,d->yoff);
}
@@ -1558,7 +1555,7 @@ void QDeclarativeTextEditPrivate::init()
QObject::connect(control, SIGNAL(selectionChanged()), q, SLOT(updateSelectionMarkers()));
QObject::connect(control, SIGNAL(cursorPositionChanged()), q, SLOT(updateSelectionMarkers()));
QObject::connect(control, SIGNAL(cursorPositionChanged()), q, SIGNAL(cursorPositionChanged()));
- QObject::connect(control, SIGNAL(cursorPositionChanged()), q, SIGNAL(cursorRectangleChanged()));
+ QObject::connect(control, SIGNAL(microFocusChanged()), q, SLOT(moveCursorDelegate()));
QObject::connect(control, SIGNAL(linkActivated(QString)), q, SIGNAL(linkActivated(QString)));
#ifndef QT_NO_CLIPBOARD
QObject::connect(q, SIGNAL(readOnlyChanged(bool)), q, SLOT(q_canPasteChanged()));
@@ -1583,16 +1580,17 @@ void QDeclarativeTextEdit::q_textChanged()
d->updateDefaultTextOption();
updateSize();
updateTotalLines();
- updateMicroFocus();
emit textChanged(d->text);
}
void QDeclarativeTextEdit::moveCursorDelegate()
{
Q_D(QDeclarativeTextEdit);
+ updateMicroFocus();
+ emit cursorRectangleChanged();
if(!d->cursor)
return;
- QRectF cursorRect = d->control->cursorRect();
+ QRectF cursorRect = cursorRectangle();
d->cursor->setX(cursorRect.x());
d->cursor->setY(cursorRect.y());
}
@@ -1625,7 +1623,6 @@ void QDeclarativeTextEdit::updateSelectionMarkers()
d->lastSelectionEnd = d->control->textCursor().selectionEnd();
emit selectionEndChanged();
}
- updateMicroFocus();
}
QRectF QDeclarativeTextEdit::boundingRect() const
diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp
index af18c90..9a91769 100644
--- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp
@@ -555,8 +555,10 @@ QRect QDeclarativeTextInput::cursorRectangle() const
{
Q_D(const QDeclarativeTextInput);
QRect r = d->control->cursorRect();
- r.setHeight(r.height()-1); // Make consistent with TextEdit (QLineControl inexplicably adds 1)
- r.moveLeft(r.x() - d->hscroll);
+ // Scroll and make consistent with TextEdit
+ // QLineControl inexplicably adds 1 to the height and horizontal padding
+ // for unicode direction markers.
+ r.adjust(5 - d->hscroll, 0, -4 - d->hscroll, -1);
return r;
}
@@ -860,6 +862,20 @@ bool QDeclarativeTextInput::hasAcceptableInput() const
state.
*/
+void QDeclarativeTextInputPrivate::updateInputMethodHints()
+{
+ Q_Q(QDeclarativeTextInput);
+ Qt::InputMethodHints hints = inputMethodHints;
+ uint echo = control->echoMode();
+ if (echo == QDeclarativeTextInput::Password || echo == QDeclarativeTextInput::NoEcho)
+ hints |= Qt::ImhHiddenText;
+ else if (echo == QDeclarativeTextInput::PasswordEchoOnEdit)
+ hints &= ~Qt::ImhHiddenText;
+ if (echo != QDeclarativeTextInput::Normal)
+ hints |= (Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
+ q->setInputMethodHints(hints);
+}
+
/*!
\qmlproperty enumeration TextInput::echoMode
@@ -882,21 +898,27 @@ void QDeclarativeTextInput::setEchoMode(QDeclarativeTextInput::EchoMode echo)
Q_D(QDeclarativeTextInput);
if (echoMode() == echo)
return;
- Qt::InputMethodHints imHints = inputMethodHints();
- if (echo == Password || echo == NoEcho)
- imHints |= Qt::ImhHiddenText;
- else
- imHints &= ~Qt::ImhHiddenText;
- if (echo != Normal)
- imHints |= (Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
- else
- imHints &= ~(Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
- setInputMethodHints(imHints);
d->control->setEchoMode((uint)echo);
+ d->updateInputMethodHints();
q_textChanged();
emit echoModeChanged(echoMode());
}
+Qt::InputMethodHints QDeclarativeTextInput::imHints() const
+{
+ Q_D(const QDeclarativeTextInput);
+ return d->inputMethodHints;
+}
+
+void QDeclarativeTextInput::setIMHints(Qt::InputMethodHints hints)
+{
+ Q_D(QDeclarativeTextInput);
+ if (d->inputMethodHints == hints)
+ return;
+ d->inputMethodHints = hints;
+ d->updateInputMethodHints();
+}
+
/*!
\qmlproperty Component TextInput::cursorDelegate
The delegate for the cursor in the TextInput.
@@ -927,6 +949,8 @@ void QDeclarativeTextInput::setCursorDelegate(QDeclarativeComponent* c)
//note that the components are owned by something else
disconnect(d->control, SIGNAL(cursorPositionChanged(int,int)),
this, SLOT(moveCursor()));
+ disconnect(d->control, SIGNAL(updateMicroFocus()),
+ this, SLOT(moveCursor()));
delete d->cursorItem;
}else{
d->startCreatingCursor();
@@ -939,7 +963,9 @@ void QDeclarativeTextInputPrivate::startCreatingCursor()
{
Q_Q(QDeclarativeTextInput);
q->connect(control, SIGNAL(cursorPositionChanged(int,int)),
- q, SLOT(moveCursor()));
+ q, SLOT(moveCursor()), Qt::UniqueConnection);
+ q->connect(control, SIGNAL(updateMicroFocus()),
+ q, SLOT(moveCursor()), Qt::UniqueConnection);
if(cursorComponent->isReady()){
q->createCursor();
}else if(cursorComponent->isLoading()){
@@ -1142,9 +1168,10 @@ void QDeclarativeTextInput::mousePressEvent(QGraphicsSceneMouseEvent *event)
}
if (d->selectByMouse) {
setKeepMouseGrab(false);
+ d->selectPressed = true;
d->pressPos = event->pos();
}
- bool mark = event->modifiers() & Qt::ShiftModifier;
+ bool mark = (event->modifiers() & Qt::ShiftModifier) && d->selectByMouse;
int cursor = d->xToPos(event->pos().x());
d->control->moveCursor(cursor, mark);
event->setAccepted(true);
@@ -1155,7 +1182,7 @@ void QDeclarativeTextInput::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
Q_D(QDeclarativeTextInput);
if (d->sendMouseEventToInputContext(event, QEvent::MouseMove))
return;
- if (d->selectByMouse) {
+ if (d->selectPressed) {
if (qAbs(int(event->pos().x() - d->pressPos.x())) > QApplication::startDragDistance())
setKeepMouseGrab(true);
moveCursorSelection(d->xToPos(event->pos().x()), d->mouseSelectionMode);
@@ -1174,8 +1201,10 @@ void QDeclarativeTextInput::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
Q_D(QDeclarativeTextInput);
if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonRelease))
return;
- if (d->selectByMouse)
+ if (d->selectPressed) {
+ d->selectPressed = false;
setKeepMouseGrab(false);
+ }
if (!d->showInputPanelOnFocus) { // input panel on click
if (d->focusOnPress && !isReadOnly() && boundingRect().contains(event->pos())) {
if (QGraphicsView * view = qobject_cast<QGraphicsView*>(qApp->focusWidget())) {
@@ -1231,8 +1260,10 @@ bool QDeclarativeTextInputPrivate::sendMouseEventToInputContext(
bool QDeclarativeTextInput::sceneEvent(QEvent *event)
{
+ Q_D(QDeclarativeTextInput);
bool rv = QDeclarativeItem::sceneEvent(event);
if (event->type() == QEvent::UngrabMouse) {
+ d->selectPressed = false;
setKeepMouseGrab(false);
}
return rv;
diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p.h
index 8c873b3..ec70e43 100644
--- a/src/declarative/graphicsitems/qdeclarativetextinput_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetextinput_p.h
@@ -86,7 +86,7 @@ class Q_AUTOTEST_EXPORT QDeclarativeTextInput : public QDeclarativeImplicitSizeP
Q_PROPERTY(QValidator* validator READ validator WRITE setValidator NOTIFY validatorChanged)
#endif
Q_PROPERTY(QString inputMask READ inputMask WRITE setInputMask NOTIFY inputMaskChanged)
- Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ inputMethodHints WRITE setInputMethodHints)
+ Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ imHints WRITE setIMHints)
Q_PROPERTY(bool acceptableInput READ hasAcceptableInput NOTIFY acceptableInputChanged)
Q_PROPERTY(EchoMode echoMode READ echoMode WRITE setEchoMode NOTIFY echoModeChanged)
@@ -215,6 +215,9 @@ public:
bool isInputMethodComposing() const;
+ Qt::InputMethodHints imHints() const;
+ void setIMHints(Qt::InputMethodHints hints);
+
Q_SIGNALS:
void textChanged();
void cursorPositionChanged();
diff --git a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h
index fd4da2e..f6f6bd8 100644
--- a/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetextinput_p_p.h
@@ -73,10 +73,11 @@ public:
QDeclarativeTextInputPrivate() : control(new QLineControl(QString())),
color((QRgb)0), style(QDeclarativeText::Normal),
styleColor((QRgb)0), hAlign(QDeclarativeTextInput::AlignLeft),
- mouseSelectionMode(QDeclarativeTextInput::SelectCharacters),
+ mouseSelectionMode(QDeclarativeTextInput::SelectCharacters), inputMethodHints(Qt::ImhNone),
hscroll(0), oldScroll(0), oldValidity(false), focused(false), focusOnPress(true),
showInputPanelOnFocus(true), clickCausedFocus(false), cursorVisible(false),
- autoScroll(true), selectByMouse(false), canPaste(false), hAlignImplicit(true)
+ autoScroll(true), selectByMouse(false), canPaste(false), hAlignImplicit(true),
+ selectPressed(false)
{
#ifdef Q_OS_SYMBIAN
if (QSysInfo::symbianVersion() == QSysInfo::SV_SF_1 || QSysInfo::symbianVersion() == QSysInfo::SV_SF_3) {
@@ -108,6 +109,7 @@ public:
void mirrorChange();
int calculateTextWidth();
bool sendMouseEventToInputContext(QGraphicsSceneMouseEvent *event, QEvent::Type eventType);
+ void updateInputMethodHints();
QLineControl* control;
@@ -120,6 +122,7 @@ public:
QColor styleColor;
QDeclarativeTextInput::HAlignment hAlign;
QDeclarativeTextInput::SelectionMode mouseSelectionMode;
+ Qt::InputMethodHints inputMethodHints;
QPointer<QDeclarativeComponent> cursorComponent;
QPointer<QDeclarativeItem> cursorItem;
QPointF pressPos;
@@ -140,6 +143,7 @@ public:
bool selectByMouse:1;
bool canPaste:1;
bool hAlignImplicit:1;
+ bool selectPressed:1;
static inline QDeclarativeTextInputPrivate *get(QDeclarativeTextInput *t) {
return t->d_func();
diff --git a/src/declarative/graphicsitems/qdeclarativetextlayout.cpp b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp
index 31819f5..75d9f67 100644
--- a/src/declarative/graphicsitems/qdeclarativetextlayout.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp
@@ -299,7 +299,7 @@ void QDeclarativeTextLayout::clearLayout()
QTextLayout::clearLayout();
}
-void QDeclarativeTextLayout::prepare()
+void QDeclarativeTextLayout::prepare(QPainter *painter)
{
if (!d || !d->cached) {
@@ -308,6 +308,7 @@ void QDeclarativeTextLayout::prepare()
InertTextPainter *itp = inertTextPainter();
itp->device.begin(d);
+ itp->painter.setPen(painter->pen());
QTextLayout::draw(&itp->painter, QPointF(0, 0));
glyph_t *glyphPool = d->glyphs.data();
@@ -326,6 +327,12 @@ void QDeclarativeTextLayout::prepare()
}
}
+// Defined in qpainter.cpp
+extern Q_GUI_EXPORT void qt_draw_decoration_for_glyphs(QPainter *painter, const glyph_t *glyphArray,
+ const QFixedPoint *positions, int glyphCount,
+ QFontEngine *fontEngine, const QFont &font,
+ const QTextCharFormat &charFormat);
+
void QDeclarativeTextLayout::draw(QPainter *painter, const QPointF &p)
{
QPainterPrivate *priv = QPainterPrivate::get(painter);
@@ -340,7 +347,7 @@ void QDeclarativeTextLayout::draw(QPainter *painter, const QPointF &p)
return;
}
- prepare();
+ prepare(painter);
int itemCount = d->items.count();
@@ -371,6 +378,10 @@ void QDeclarativeTextLayout::draw(QPainter *painter, const QPointF &p)
currentColor = item.color;
}
priv->extended->drawStaticTextItem(&item);
+
+ qt_draw_decoration_for_glyphs(painter, item.glyphs, item.glyphPositions,
+ item.numGlyphs, item.fontEngine(), painter->font(),
+ QTextCharFormat());
}
if (currentColor != oldPen.color())
painter->setPen(oldPen);
diff --git a/src/declarative/graphicsitems/qdeclarativetextlayout_p.h b/src/declarative/graphicsitems/qdeclarativetextlayout_p.h
index 2c9264e..23b22a6 100644
--- a/src/declarative/graphicsitems/qdeclarativetextlayout_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetextlayout_p.h
@@ -61,7 +61,7 @@ public:
void beginLayout();
void clearLayout();
- void prepare();
+ void prepare(QPainter *);
void draw(QPainter *, const QPointF & = QPointF());
private:
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
index 97ce059..4c839a1 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
@@ -1398,7 +1398,12 @@ void QDeclarativeVisualDataModel::_q_layoutChanged()
void QDeclarativeVisualDataModel::_q_modelReset()
{
+ Q_D(QDeclarativeVisualDataModel);
+ d->m_root = QModelIndex();
emit modelReset();
+ emit rootIndexChanged();
+ if (d->m_abstractItemModel && d->m_abstractItemModel->canFetchMore(d->m_root))
+ d->m_abstractItemModel->fetchMore(d->m_root);
}
void QDeclarativeVisualDataModel::_q_createdPackage(int index, QDeclarativePackage *package)
diff --git a/src/declarative/qml/qdeclarativeboundsignal.cpp b/src/declarative/qml/qdeclarativeboundsignal.cpp
index 28dfea9..47a15cb 100644
--- a/src/declarative/qml/qdeclarativeboundsignal.cpp
+++ b/src/declarative/qml/qdeclarativeboundsignal.cpp
@@ -225,9 +225,35 @@ QDeclarativeBoundSignalParameters::QDeclarativeBoundSignalParameters(const QMeta
QMetaPropertyBuilder prop = mob.addProperty(name, "QObject*");
prop.setWritable(false);
} else {
+ QByteArray propType = type;
+ if (t >= QVariant::UserType || t == QVariant::Invalid) {
+ //copy of QDeclarativeObjectScriptClass::enumType()
+ QByteArray scope;
+ QByteArray name;
+ int scopeIdx = propType.lastIndexOf("::");
+ if (scopeIdx != -1) {
+ scope = propType.left(scopeIdx);
+ name = propType.mid(scopeIdx + 2);
+ } else {
+ name = propType;
+ }
+ const QMetaObject *meta;
+ if (scope == "Qt")
+ meta = &QObject::staticQtMetaObject;
+ else
+ meta = parent->parent()->metaObject(); //### assumes parent->parent()
+ for (int i = meta->enumeratorCount() - 1; i >= 0; --i) {
+ QMetaEnum m = meta->enumerator(i);
+ if ((m.name() == name) && (scope.isEmpty() || (m.scope() == scope))) {
+ t = QVariant::Int;
+ propType = "int";
+ break;
+ }
+ }
+ }
if (QDeclarativeMetaType::canCopy(t)) {
types[ii] = t;
- QMetaPropertyBuilder prop = mob.addProperty(name, type);
+ QMetaPropertyBuilder prop = mob.addProperty(name, propType);
prop.setWritable(false);
} else {
types[ii] = 0x80000000 | t;
diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp
index 276f790..8238252 100644
--- a/src/declarative/qml/qdeclarativecomponent.cpp
+++ b/src/declarative/qml/qdeclarativecomponent.cpp
@@ -880,6 +880,7 @@ QObject * QDeclarativeComponentPrivate::begin(QDeclarativeContextData *parentCon
state->bindValues = enginePriv->bindValues;
state->parserStatus = enginePriv->parserStatus;
+ state->finalizedParserStatus = enginePriv->finalizedParserStatus;
state->componentAttached = enginePriv->componentAttached;
if (state->componentAttached)
state->componentAttached->prev = &state->componentAttached;
@@ -887,6 +888,7 @@ QObject * QDeclarativeComponentPrivate::begin(QDeclarativeContextData *parentCon
enginePriv->componentAttached = 0;
enginePriv->bindValues.clear();
enginePriv->parserStatus.clear();
+ enginePriv->finalizedParserStatus.clear();
state->completePending = true;
enginePriv->inProgressCreations++;
}
@@ -917,6 +919,7 @@ void QDeclarativeComponentPrivate::beginDeferred(QDeclarativeEnginePrivate *engi
state->bindValues = enginePriv->bindValues;
state->parserStatus = enginePriv->parserStatus;
+ state->finalizedParserStatus = enginePriv->finalizedParserStatus;
state->componentAttached = enginePriv->componentAttached;
if (state->componentAttached)
state->componentAttached->prev = &state->componentAttached;
@@ -924,6 +927,7 @@ void QDeclarativeComponentPrivate::beginDeferred(QDeclarativeEnginePrivate *engi
enginePriv->componentAttached = 0;
enginePriv->bindValues.clear();
enginePriv->parserStatus.clear();
+ enginePriv->finalizedParserStatus.clear();
state->completePending = true;
enginePriv->inProgressCreations++;
}
@@ -961,6 +965,18 @@ void QDeclarativeComponentPrivate::complete(QDeclarativeEnginePrivate *enginePri
QDeclarativeEnginePrivate::clear(ps);
}
+ for (int ii = 0; ii < state->finalizedParserStatus.count(); ++ii) {
+ QPair<QDeclarativeGuard<QObject>, int> status = state->finalizedParserStatus.at(ii);
+ QObject *obj = status.first;
+ if (obj) {
+ void *args[] = { 0 };
+ QMetaObject::metacall(obj, QMetaObject::InvokeMetaMethod,
+ status.second, args);
+ }
+ }
+
+ //componentComplete() can register additional finalization objects
+ //that are then never handled. Handle them manually here.
if (1 == enginePriv->inProgressCreations) {
for (int ii = 0; ii < enginePriv->finalizedParserStatus.count(); ++ii) {
QPair<QDeclarativeGuard<QObject>, int> status = enginePriv->finalizedParserStatus.at(ii);
@@ -986,6 +1002,7 @@ void QDeclarativeComponentPrivate::complete(QDeclarativeEnginePrivate *enginePri
state->bindValues.clear();
state->parserStatus.clear();
+ state->finalizedParserStatus.clear();
state->completePending = false;
enginePriv->inProgressCreations--;
diff --git a/src/declarative/qml/qdeclarativecomponent_p.h b/src/declarative/qml/qdeclarativecomponent_p.h
index 020c5e0..f8bec2b 100644
--- a/src/declarative/qml/qdeclarativecomponent_p.h
+++ b/src/declarative/qml/qdeclarativecomponent_p.h
@@ -101,6 +101,7 @@ public:
ConstructionState() : componentAttached(0), completePending(false) {}
QList<QDeclarativeEnginePrivate::SimpleList<QDeclarativeAbstractBinding> > bindValues;
QList<QDeclarativeEnginePrivate::SimpleList<QDeclarativeParserStatus> > parserStatus;
+ QList<QPair<QDeclarativeGuard<QObject>, int> > finalizedParserStatus;
QDeclarativeComponentAttached *componentAttached;
QList<QDeclarativeError> errors;
bool completePending;
diff --git a/src/declarative/qml/qdeclarativecontextscriptclass.cpp b/src/declarative/qml/qdeclarativecontextscriptclass.cpp
index bb4ece4..3abd787 100644
--- a/src/declarative/qml/qdeclarativecontextscriptclass.cpp
+++ b/src/declarative/qml/qdeclarativecontextscriptclass.cpp
@@ -227,6 +227,7 @@ QDeclarativeContextScriptClass::queryProperty(QDeclarativeContextData *bindConte
if (data) {
lastData = data;
lastContext = bindContext;
+ lastScopeObject = scopeObject;
return QScriptClass::HandlesReadAccess;
}
}
@@ -268,17 +269,12 @@ QDeclarativeContextScriptClass::property(Object *object, const Identifier &name)
QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(engine);
QScriptEngine *scriptEngine = QDeclarativeEnginePrivate::getScriptEngine(engine);
- if (lastScopeObject) {
-
- return ep->objectClass->property(lastScopeObject, name);
-
- } else if (lastData) {
+ if (lastData) {
if (lastData->type) {
- return Value(scriptEngine, ep->typeNameClass->newObject(bindContext->contextObject, lastData->type));
+ return Value(scriptEngine, ep->typeNameClass->newObject(lastScopeObject, lastData->type));
} else if (lastData->typeNamespace) {
- return Value(scriptEngine, ep->typeNameClass->newObject(bindContext->contextObject,
- lastData->typeNamespace));
+ return Value(scriptEngine, ep->typeNameClass->newObject(lastScopeObject, lastData->typeNamespace));
} else {
int index = lastData->importedScriptIndex;
if (index < bindContext->importedScripts.count()) {
@@ -288,6 +284,10 @@ QDeclarativeContextScriptClass::property(Object *object, const Identifier &name)
}
}
+ } else if (lastScopeObject) {
+
+ return ep->objectClass->property(lastScopeObject, name);
+
} else if (lastPropertyIndex != -1) {
QScriptValue rv;
diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp
index 31fd516..b2a05c3 100644
--- a/src/declarative/qml/qdeclarativeenginedebug.cpp
+++ b/src/declarative/qml/qdeclarativeenginedebug.cpp
@@ -249,10 +249,16 @@ void QDeclarativeEngineDebugServer::buildObjectDump(QDataStream &message,
return;
}
- message << (object->metaObject()->propertyCount() + fakeProperties.count());
+ QList<int> propertyIndexes;
+ for (int ii = 0; ii < object->metaObject()->propertyCount(); ++ii) {
+ if (object->metaObject()->property(ii).isScriptable())
+ propertyIndexes << ii;
+ }
+
+ message << propertyIndexes.size() + fakeProperties.count();
- for (int ii = 0; ii < object->metaObject()->propertyCount(); ++ii)
- message << propertyData(object, ii);
+ for (int ii = 0; ii < propertyIndexes.size(); ++ii)
+ message << propertyData(object, propertyIndexes.at(ii));
for (int ii = 0; ii < fakeProperties.count(); ++ii)
message << fakeProperties[ii];
diff --git a/src/declarative/qml/qdeclarativeproperty.cpp b/src/declarative/qml/qdeclarativeproperty.cpp
index 0dd0edb..a197a95 100644
--- a/src/declarative/qml/qdeclarativeproperty.cpp
+++ b/src/declarative/qml/qdeclarativeproperty.cpp
@@ -1451,6 +1451,7 @@ QByteArray QDeclarativePropertyPrivate::saveValueType(const QMetaObject *metaObj
QMetaProperty subProp = subObject->property(subIndex);
ValueTypeSerializedData sd;
+ memset(&sd, 0, sizeof(sd));
sd.isValueType = true;
sd.core.load(metaObject->property(index));
sd.valueType.flags = QDeclarativePropertyCache::Data::flagsForProperty(subProp);
@@ -1465,6 +1466,7 @@ QByteArray QDeclarativePropertyPrivate::saveValueType(const QMetaObject *metaObj
QByteArray QDeclarativePropertyPrivate::saveProperty(const QMetaObject *metaObject, int index)
{
SerializedData sd;
+ memset(&sd, 0, sizeof(sd));
sd.isValueType = false;
sd.core.load(metaObject->property(index));
diff --git a/src/declarative/qml/qdeclarativetypeloader_p.h b/src/declarative/qml/qdeclarativetypeloader_p.h
index 6938892..7f487a0 100644
--- a/src/declarative/qml/qdeclarativetypeloader_p.h
+++ b/src/declarative/qml/qdeclarativetypeloader_p.h
@@ -79,7 +79,7 @@ public:
Loading, // Prior to data being received and dataReceived() being called
WaitingForDependencies, // While there are outstanding addDependency()s
Complete, // Finished
- Error, // Error
+ Error // Error
};
enum Type {
diff --git a/src/declarative/qml/qmetaobjectbuilder.cpp b/src/declarative/qml/qmetaobjectbuilder.cpp
index 6a0226f..0be2a41 100644
--- a/src/declarative/qml/qmetaobjectbuilder.cpp
+++ b/src/declarative/qml/qmetaobjectbuilder.cpp
@@ -1448,6 +1448,7 @@ QMetaObject *QMetaObjectBuilder::toMetaObject() const
{
int size = buildMetaObject(d, 0, false);
char *buf = reinterpret_cast<char *>(qMalloc(size));
+ memset(buf, 0, size);
buildMetaObject(d, buf, false);
return reinterpret_cast<QMetaObject *>(buf);
}
@@ -1477,6 +1478,7 @@ QByteArray QMetaObjectBuilder::toRelocatableData(bool *ok) const
QByteArray data;
data.resize(size);
char *buf = data.data();
+ memset(buf, 0, size);
buildMetaObject(d, buf, true);
if (ok) *ok = true;
return data;
diff --git a/src/declarative/util/qdeclarativebehavior.cpp b/src/declarative/util/qdeclarativebehavior.cpp
index 41f8fe5..a1321e2 100644
--- a/src/declarative/util/qdeclarativebehavior.cpp
+++ b/src/declarative/util/qdeclarativebehavior.cpp
@@ -72,7 +72,7 @@ public:
/*!
\qmlclass Behavior QDeclarativeBehavior
- \ingroup qml-animation-transition
+ \ingroup qml-animation-transition
\since 4.7
\brief The Behavior element allows you to specify a default animation for a property change.
@@ -91,7 +91,8 @@ public:
If a \l{QML States}{state change} has a \l Transition that matches the same property as a
Behavior, the \l Transition animation overrides the Behavior for that
- state change.
+ state change. For general advice on using Behaviors to animate state changes, see
+ \l{Using QML Behaviors with States}.
\sa {QML Animation and Transitions}, {declarative/animation/behaviors}{Behavior example}, QtDeclarative
*/
diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp
index b2739f0..258bc81 100644
--- a/src/declarative/util/qdeclarativelistmodel.cpp
+++ b/src/declarative/util/qdeclarativelistmodel.cpp
@@ -1301,9 +1301,6 @@ int NestedListModel::count() const
void NestedListModel::clear()
{
- _rolesOk = false;
- roleStrings.clear();
-
if (_root)
_root->clear();
}
diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp
index 5190eab..a29854f 100644
--- a/src/declarative/util/qdeclarativepixmapcache.cpp
+++ b/src/declarative/util/qdeclarativepixmapcache.cpp
@@ -72,9 +72,7 @@ QT_BEGIN_NAMESPACE
// The cache limit describes the maximum "junk" in the cache.
// These are the same defaults as QPixmapCache
-#if defined(Q_OS_SYMBIAN)
-static int cache_limit = 1024 * 1024; // 1048 KB cache limit for symbian
-#elif defined(Q_WS_QWS) || defined(Q_WS_WINCE)
+#if defined(Q_WS_QWS) || defined(Q_WS_WINCE)
static int cache_limit = 2048 * 1024; // 2048 KB cache limit for embedded
#else
static int cache_limit = 10240 * 1024; // 10 MB cache limit for desktop
@@ -426,7 +424,8 @@ void QDeclarativePixmapReader::processJobs()
replies.remove(reply);
reply->close();
}
- delete job;
+ // deleteLater, since not owned by this thread
+ job->deleteLater();
}
cancelled.clear();
}
diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp
index 5af53e6..a61ac06 100644
--- a/src/declarative/util/qdeclarativexmllistmodel.cpp
+++ b/src/declarative/util/qdeclarativexmllistmodel.cpp
@@ -144,6 +144,7 @@ struct XmlQueryJob
QList<void*> roleQueryErrorId; // the ptr to send back if there is an error
QStringList keyRoleQueries;
QStringList keyRoleResultsCache;
+ QString prefix;
};
class QDeclarativeXmlQuery : public QObject
@@ -172,6 +173,12 @@ public:
}
int doQuery(QString query, QString namespaces, QByteArray data, QList<QDeclarativeXmlListModelRole *>* roleObjects, QStringList keyRoleResultsCache) {
+ {
+ QMutexLocker m1(&m_mutex);
+ m_queryIds.ref();
+ if (m_queryIds <= 0)
+ m_queryIds = 1;
+ }
XmlQueryJob job;
job.queryId = m_queryIds;
@@ -194,9 +201,6 @@ public:
{
QMutexLocker ml(&m_mutex);
m_jobs.insert(m_queryIds, job);
- m_queryIds++;
- if (m_queryIds <= 0)
- m_queryIds = 1;
}
QMetaObject::invokeMethod(this, "processQuery", Qt::QueuedConnection, Q_ARG(int, job.queryId));
@@ -214,20 +218,15 @@ private slots:
job = m_jobs.value(queryId);
}
- QDeclarativeXmlQueryResult r;
- doQueryJob(&job);
- doSubQueryJob(&job);
- r.queryId = job.queryId;
- r.size = m_size;
- r.data = m_modelData;
- r.inserted = m_insertedItemRanges;
- r.removed = m_removedItemRanges;
- r.keyRoleResultsCache = job.keyRoleResultsCache;
+ QDeclarativeXmlQueryResult result;
+ result.queryId = job.queryId;
+ doQueryJob(&job, &result);
+ doSubQueryJob(&job, &result);
{
QMutexLocker ml(&m_mutex);
if (m_jobs.contains(queryId)) {
- emit queryCompleted(r);
+ emit queryCompleted(result);
m_jobs.remove(queryId);
}
}
@@ -241,8 +240,8 @@ protected:
private:
- void doQueryJob(XmlQueryJob* job);
- void doSubQueryJob(XmlQueryJob* job);
+ void doQueryJob(XmlQueryJob *job, QDeclarativeXmlQueryResult *currentResult);
+ void doSubQueryJob(XmlQueryJob *job, QDeclarativeXmlQueryResult *currentResult);
void getValuesOfKeyRoles(const XmlQueryJob& currentJob, QStringList *values, QXmlQuery *query) const;
void addIndexToRangeList(QList<QDeclarativeXmlListRange> *ranges, int index) const;
@@ -250,17 +249,12 @@ private:
QMutex m_mutex;
QThread m_thread;
QMap<int, XmlQueryJob> m_jobs;
- int m_queryIds;
- QString m_prefix;
- int m_size;
- QList<QList<QVariant> > m_modelData;
- QList<QDeclarativeXmlListRange> m_insertedItemRanges;
- QList<QDeclarativeXmlListRange> m_removedItemRanges;
+ QAtomicInt m_queryIds;
};
Q_GLOBAL_STATIC(QDeclarativeXmlQuery, globalXmlQuery)
-void QDeclarativeXmlQuery::doQueryJob(XmlQueryJob* currentJob)
+void QDeclarativeXmlQuery::doQueryJob(XmlQueryJob *currentJob, QDeclarativeXmlQueryResult *currentResult)
{
Q_ASSERT(currentJob->queryId != -1);
@@ -295,10 +289,8 @@ void QDeclarativeXmlQuery::doQueryJob(XmlQueryJob* currentJob)
}
currentJob->data = xml;
- m_prefix = namespaces + prefix + QLatin1Char('/');
- m_size = 0;
- if (count > 0)
- m_size = count;
+ currentJob->prefix = namespaces + prefix + QLatin1Char('/');
+ currentResult->size = (count > 0 ? count : 0);
}
void QDeclarativeXmlQuery::getValuesOfKeyRoles(const XmlQueryJob& currentJob, QStringList *values, QXmlQuery *query) const
@@ -306,9 +298,9 @@ void QDeclarativeXmlQuery::getValuesOfKeyRoles(const XmlQueryJob& currentJob, QS
const QStringList &keysQueries = currentJob.keyRoleQueries;
QString keysQuery;
if (keysQueries.count() == 1)
- keysQuery = m_prefix + keysQueries[0];
+ keysQuery = currentJob.prefix + keysQueries[0];
else if (keysQueries.count() > 1)
- keysQuery = m_prefix + QLatin1String("concat(") + keysQueries.join(QLatin1String(",")) + QLatin1String(")");
+ keysQuery = currentJob.prefix + QLatin1String("concat(") + keysQueries.join(QLatin1String(",")) + QLatin1String(")");
if (!keysQuery.isEmpty()) {
query->setQuery(keysQuery);
@@ -331,10 +323,9 @@ void QDeclarativeXmlQuery::addIndexToRangeList(QList<QDeclarativeXmlListRange> *
ranges->append(qMakePair(index, 1));
}
-void QDeclarativeXmlQuery::doSubQueryJob(XmlQueryJob* currentJob)
+void QDeclarativeXmlQuery::doSubQueryJob(XmlQueryJob *currentJob, QDeclarativeXmlQueryResult *currentResult)
{
Q_ASSERT(currentJob->queryId != -1);
- m_modelData.clear();
QBuffer b(&currentJob->data);
b.open(QIODevice::ReadOnly);
@@ -347,16 +338,14 @@ void QDeclarativeXmlQuery::doSubQueryJob(XmlQueryJob* currentJob)
// See if any values of key roles have been inserted or removed.
- m_insertedItemRanges.clear();
- m_removedItemRanges.clear();
if (currentJob->keyRoleResultsCache.isEmpty()) {
- m_insertedItemRanges << qMakePair(0, m_size);
+ currentResult->inserted << qMakePair(0, currentResult->size);
} else {
if (keyRoleResults != currentJob->keyRoleResultsCache) {
QStringList temp;
for (int i=0; i<currentJob->keyRoleResultsCache.count(); i++) {
if (!keyRoleResults.contains(currentJob->keyRoleResultsCache[i]))
- addIndexToRangeList(&m_removedItemRanges, i);
+ addIndexToRangeList(&currentResult->removed, i);
else
temp << currentJob->keyRoleResultsCache[i];
}
@@ -364,12 +353,12 @@ void QDeclarativeXmlQuery::doSubQueryJob(XmlQueryJob* currentJob)
for (int i=0; i<keyRoleResults.count(); i++) {
if (temp.count() == i || keyRoleResults[i] != temp[i]) {
temp.insert(i, keyRoleResults[i]);
- addIndexToRangeList(&m_insertedItemRanges, i);
+ addIndexToRangeList(&currentResult->inserted, i);
}
}
}
}
- currentJob->keyRoleResultsCache = keyRoleResults;
+ currentResult->keyRoleResultsCache = keyRoleResults;
// Get the new values for each role.
//### we might be able to condense even further (query for everything in one go)
@@ -377,7 +366,7 @@ void QDeclarativeXmlQuery::doSubQueryJob(XmlQueryJob* currentJob)
for (int i = 0; i < queries.size(); ++i) {
QList<QVariant> resultList;
if (!queries[i].isEmpty()) {
- subquery.setQuery(m_prefix + QLatin1String("(let $v := string(") + queries[i] + QLatin1String(") return if ($v) then ") + queries[i] + QLatin1String(" else \"\")"));
+ subquery.setQuery(currentJob->prefix + QLatin1String("(let $v := string(") + queries[i] + QLatin1String(") return if ($v) then ") + queries[i] + QLatin1String(" else \"\")"));
if (subquery.isValid()) {
QXmlResultItems resultItems;
subquery.evaluateTo(&resultItems);
@@ -391,9 +380,9 @@ void QDeclarativeXmlQuery::doSubQueryJob(XmlQueryJob* currentJob)
}
}
//### should warn here if things have gone wrong.
- while (resultList.count() < m_size)
+ while (resultList.count() < currentResult->size)
resultList << QVariant();
- m_modelData << resultList;
+ currentResult->data << resultList;
b.seek(0);
}
@@ -919,7 +908,7 @@ void QDeclarativeXmlListModel::reload()
} else {
d->notifyQueryStarted(true);
QNetworkRequest req(d->src);
- req.setRawHeader("Accept", "application/xml");
+ req.setRawHeader("Accept", "application/xml,*/*");
d->reply = qmlContext(this)->engine()->networkAccessManager()->get(req);
QObject::connect(d->reply, SIGNAL(finished()), this, SLOT(requestFinished()));
QObject::connect(d->reply, SIGNAL(downloadProgress(qint64,qint64)),
diff --git a/src/gui/egl/qegl_symbian.cpp b/src/gui/egl/qegl_symbian.cpp
index 6533d11..fabf9d1 100644
--- a/src/gui/egl/qegl_symbian.cpp
+++ b/src/gui/egl/qegl_symbian.cpp
@@ -42,6 +42,7 @@
#include <QtGui/qpaintdevice.h>
#include <QtGui/qpixmap.h>
#include <QtGui/qwidget.h>
+#include <QtGui/private/qapplication_p.h>
#include "qegl_p.h"
#include "qeglcontext_p.h"
@@ -73,10 +74,14 @@ void QEglProperties::setPaintDeviceFormat(QPaintDevice *dev)
return;
int devType = dev->devType();
- if (devType == QInternal::Image)
+ if (devType == QInternal::Image) {
setPixelFormat(static_cast<QImage *>(dev)->format());
- else
- setPixelFormat(QImage::Format_RGB32);
+ } else {
+ QImage::Format format = QImage::Format_RGB32;
+ if (QApplicationPrivate::instance() && QApplicationPrivate::instance()->useTranslucentEGLSurfaces)
+ format = QImage::Format_ARGB32_Premultiplied;
+ setPixelFormat(format);
+ }
}
diff --git a/src/gui/embedded/qvfbhdr.h b/src/gui/embedded/qvfbhdr.h
index 31704b3..84f82ac 100644
--- a/src/gui/embedded/qvfbhdr.h
+++ b/src/gui/embedded/qvfbhdr.h
@@ -53,36 +53,37 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Gui)
#ifndef QT_QWS_TEMP_DIR
-#define QT_QWS_TEMP_DIR "/tmp"
+# define QT_QWS_TEMP_DIR QLatin1String("/tmp")
#endif
#ifdef QT_PRIVATE_QWS
-#define QT_VFB_DATADIR(DISPLAY) QString("%1/qtembedded-%2-%3") \
- .arg(QT_QWS_TEMP_DIR).arg(getuid()).arg(DISPLAY)
-
+#define QT_VFB_DATADIR(DISPLAY) QString::fromLatin1("%1/qtembedded-%2-%3") \
+ .arg(QT_QWS_TEMP_DIR).arg(getuid()).arg(DISPLAY)
#define QT_VFB_MOUSE_PIPE(DISPLAY) QT_VFB_DATADIR(DISPLAY) \
- .append("/qtvfb_mouse")
+ .append(QLatin1String("/qtvfb_mouse"))
#define QT_VFB_KEYBOARD_PIPE(DISPLAY) QT_VFB_DATADIR(DISPLAY) \
- .append("/qtvfb_keyboard")
+ .append(QLatin1String("/qtvfb_keyboard"))
#define QT_VFB_MAP(DISPLAY) QT_VFB_DATADIR(DISPLAY) \
- .append("/qtvfb_map")
+ .append(QLatin1String("/qtvfb_map"))
#define QT_VFB_SOUND_PIPE(DISPLAY) QT_VFB_DATADIR(DISPLAY) \
- .append("/qt_soundserver")
+ .append(QLatin1String("/qt_soundserver"))
#define QTE_PIPE(DISPLAY) QT_VFB_DATADIR(DISPLAY) \
- .append("/QtEmbedded")
+ .append(QLatin1String("/QtEmbedded"))
#define QTE_PIPE_QVFB(DISPLAY) QTE_PIPE(DISPLAY)
#else
-#define QT_VFB_DATADIR(DISPLAY) QString("%1/qtembedded-%2") \
- .arg(QT_QWS_TEMP_DIR).arg(DISPLAY)
-#define QT_VFB_MOUSE_PIPE(DISPLAY) QString("/tmp/.qtvfb_mouse-%1").arg(DISPLAY)
-#define QT_VFB_KEYBOARD_PIPE(DISPLAY) QString("/tmp/.qtvfb_keyboard-%1").arg(DISPLAY)
-#define QT_VFB_MAP(DISPLAY) QString("/tmp/.qtvfb_map-%1").arg(DISPLAY)
-#define QT_VFB_SOUND_PIPE(DISPLAY) QString("/tmp/.qt_soundserver-%1").arg(DISPLAY)
-#define QTE_PIPE(DISPLAY) QT_VFB_DATADIR(DISPLAY) \
- .append("/QtEmbedded-%1") \
- .arg(DISPLAY)
-#define QTE_PIPE_QVFB(DISPLAY) QString("/tmp/qtembedded-%1/QtEmbedded-%1") \
- .arg(DISPLAY)
+#define QT_VFB_DATADIR(DISPLAY) QString::fromLatin1("%1/qtembedded-%2") \
+ .arg(QT_QWS_TEMP_DIR).arg(DISPLAY)
+#define QT_VFB_MOUSE_PIPE(DISPLAY) QString::fromLatin1("%1/.qtvfb_mouse-%2") \
+ .arg(QT_QWS_TEMP_DIR).arg(DISPLAY)
+#define QT_VFB_KEYBOARD_PIPE(DISPLAY) QString::fromLatin1("%1/.qtvfb_keyboard-%2") \
+ .arg(QT_QWS_TEMP_DIR).arg(DISPLAY)
+#define QT_VFB_MAP(DISPLAY) QString::fromLatin1("%1/.qtvfb_map-%2") \
+ .arg(QT_QWS_TEMP_DIR).arg(DISPLAY)
+#define QT_VFB_SOUND_PIPE(DISPLAY) QString::fromLatin1("%1/.qt_soundserver-%2") \
+ .arg(QT_QWS_TEMP_DIR).arg(DISPLAY)
+#define QTE_PIPE(DISPLAY) QT_VFB_DATADIR(DISPLAY) \
+ .append(QLatin1String("/QtEmbedded-%1")).arg(DISPLAY)
+#define QTE_PIPE_QVFB(DISPLAY) QTE_PIPE(DISPLAY)
#endif
struct QVFbHeader
diff --git a/src/gui/graphicsview/qgraphicslayout.cpp b/src/gui/graphicsview/qgraphicslayout.cpp
index ed213f1..e50989c 100644
--- a/src/gui/graphicsview/qgraphicslayout.cpp
+++ b/src/gui/graphicsview/qgraphicslayout.cpp
@@ -167,7 +167,7 @@ QGraphicsLayout::QGraphicsLayout(QGraphicsLayoutItem *parent)
" neither a QGraphicsWidget nor QGraphicsLayout");
}
}
- setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding, QSizePolicy::DefaultType);
+ d_func()->sizePolicy = QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding, QSizePolicy::DefaultType);
setOwnedByLayout(true);
}
@@ -188,7 +188,7 @@ QGraphicsLayout::QGraphicsLayout(QGraphicsLayoutPrivate &dd, QGraphicsLayoutItem
" neither a QGraphicsWidget nor QGraphicsLayout");
}
}
- setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding, QSizePolicy::DefaultType);
+ d_func()->sizePolicy = QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding, QSizePolicy::DefaultType);
setOwnedByLayout(true);
}
@@ -269,12 +269,20 @@ void QGraphicsLayout::activate()
return;
Q_ASSERT(!parentItem->isLayout());
- setGeometry(parentItem->contentsRect()); // relayout children
-
- // ### bug, should be parentItem ?
- parentLayoutItem()->updateGeometry(); // bubble up; will set activated to false
- // ### too many resizes? maybe we should walk up the chain to the
- // ### top-level layouted layoutItem and call activate there.
+ if (QGraphicsLayout::instantInvalidatePropagation()) {
+ QGraphicsWidget *parentWidget = static_cast<QGraphicsWidget*>(parentItem);
+ if (!parentWidget->parentLayoutItem()) {
+ // we've reached the topmost widget, resize it
+ bool wasResized = parentWidget->testAttribute(Qt::WA_Resized);
+ parentWidget->resize(parentWidget->size());
+ parentWidget->setAttribute(Qt::WA_Resized, wasResized);
+ }
+
+ setGeometry(parentItem->contentsRect()); // relayout children
+ } else {
+ setGeometry(parentItem->contentsRect()); // relayout children
+ parentLayoutItem()->updateGeometry();
+ }
}
/*!
@@ -300,32 +308,36 @@ bool QGraphicsLayout::isActivated() const
*/
void QGraphicsLayout::invalidate()
{
- // only mark layouts as invalid (activated = false) if we can post a LayoutRequest event.
- QGraphicsLayoutItem *layoutItem = this;
- while (layoutItem && layoutItem->isLayout()) {
- // we could call updateGeometry(), but what if that method
- // does not call the base implementation? In addition, updateGeometry()
- // does more than we need.
- layoutItem->d_func()->sizeHintCacheDirty = true;
- layoutItem->d_func()->sizeHintWithConstraintCacheDirty = true;
- layoutItem = layoutItem->parentLayoutItem();
- }
- if (layoutItem) {
- layoutItem->d_func()->sizeHintCacheDirty = true;
- layoutItem->d_func()->sizeHintWithConstraintCacheDirty = true;
- }
-
- bool postIt = layoutItem ? !layoutItem->isLayout() : false;
- if (postIt) {
- layoutItem = this;
- while (layoutItem && layoutItem->isLayout()
- && static_cast<QGraphicsLayout*>(layoutItem)->d_func()->activated) {
- static_cast<QGraphicsLayout*>(layoutItem)->d_func()->activated = false;
+ if (QGraphicsLayout::instantInvalidatePropagation()) {
+ updateGeometry();
+ } else {
+ // only mark layouts as invalid (activated = false) if we can post a LayoutRequest event.
+ QGraphicsLayoutItem *layoutItem = this;
+ while (layoutItem && layoutItem->isLayout()) {
+ // we could call updateGeometry(), but what if that method
+ // does not call the base implementation? In addition, updateGeometry()
+ // does more than we need.
+ layoutItem->d_func()->sizeHintCacheDirty = true;
+ layoutItem->d_func()->sizeHintWithConstraintCacheDirty = true;
layoutItem = layoutItem->parentLayoutItem();
}
- if (layoutItem && !layoutItem->isLayout()) {
- // If a layout has a parent that is not a layout it must be a QGraphicsWidget.
- QApplication::postEvent(static_cast<QGraphicsWidget *>(layoutItem), new QEvent(QEvent::LayoutRequest));
+ if (layoutItem) {
+ layoutItem->d_func()->sizeHintCacheDirty = true;
+ layoutItem->d_func()->sizeHintWithConstraintCacheDirty = true;
+ }
+
+ bool postIt = layoutItem ? !layoutItem->isLayout() : false;
+ if (postIt) {
+ layoutItem = this;
+ while (layoutItem && layoutItem->isLayout()
+ && static_cast<QGraphicsLayout*>(layoutItem)->d_func()->activated) {
+ static_cast<QGraphicsLayout*>(layoutItem)->d_func()->activated = false;
+ layoutItem = layoutItem->parentLayoutItem();
+ }
+ if (layoutItem && !layoutItem->isLayout()) {
+ // If a layout has a parent that is not a layout it must be a QGraphicsWidget.
+ QApplication::postEvent(static_cast<QGraphicsWidget *>(layoutItem), new QEvent(QEvent::LayoutRequest));
+ }
}
}
}
@@ -335,12 +347,27 @@ void QGraphicsLayout::invalidate()
*/
void QGraphicsLayout::updateGeometry()
{
- QGraphicsLayoutItem::updateGeometry();
- if (QGraphicsLayoutItem *parentItem = parentLayoutItem()) {
- if (parentItem->isLayout()) {
+ Q_D(QGraphicsLayout);
+ if (QGraphicsLayout::instantInvalidatePropagation()) {
+ d->activated = false;
+ QGraphicsLayoutItem::updateGeometry();
+
+ QGraphicsLayoutItem *parentItem = parentLayoutItem();
+ if (!parentItem)
+ return;
+
+ if (parentItem->isLayout())
+ static_cast<QGraphicsLayout *>(parentItem)->invalidate();
+ else
parentItem->updateGeometry();
- } else {
- invalidate();
+ } else {
+ QGraphicsLayoutItem::updateGeometry();
+ if (QGraphicsLayoutItem *parentItem = parentLayoutItem()) {
+ if (parentItem->isLayout()) {
+ parentItem->updateGeometry();
+ } else {
+ invalidate();
+ }
}
}
}
@@ -446,6 +473,50 @@ void QGraphicsLayout::addChildLayoutItem(QGraphicsLayoutItem *layoutItem)
d->addChildLayoutItem(layoutItem);
}
+static bool g_instantInvalidatePropagation = false;
+
+/*!
+ \internal
+ \since 4.8
+ \see instantInvalidatePropagation
+
+ Calling this function with \a enable set to true will enable a feature that
+ makes propagation of invalidation up to ancestor layout items to be done in
+ one go. It will propagate up the parentLayoutItem() hierarchy until it has
+ reached the root. If the root item is a QGraphicsWidget, it will *post* a
+ layout request to it. When the layout request is consumed it will traverse
+ down the hierarchy of layouts and widgets and activate all layouts that is
+ invalid (not activated). This is the recommended behaviour.
+
+ If not set it will also propagate up the parentLayoutItem() hierarchy, but
+ it will stop at the \i first \i widget it encounters, and post a layout
+ request to the widget. When the layout request is consumed, this might
+ cause it to continue propagation up to the parentLayoutItem() of the
+ widget. It will continue in this fashion until it has reached a widget with
+ no parentLayoutItem(). This strategy might cause drawing artifacts, since
+ it is not done in one go, and the consumption of layout requests might be
+ interleaved by consumption of paint events, which might cause significant
+ flicker.
+ Note, this is not the recommended behavior, but for compatibility reasons
+ this is the default behaviour.
+*/
+void QGraphicsLayout::setInstantInvalidatePropagation(bool enable)
+{
+ g_instantInvalidatePropagation = enable;
+}
+
+/*!
+ \internal
+ \since 4.8
+ \see setInstantInvalidatePropagation
+
+ returns true if the complete widget/layout hierarchy is rearranged in one go.
+*/
+bool QGraphicsLayout::instantInvalidatePropagation()
+{
+ return g_instantInvalidatePropagation;
+}
+
QT_END_NAMESPACE
#endif //QT_NO_GRAPHICSVIEW
diff --git a/src/gui/graphicsview/qgraphicslayout.h b/src/gui/graphicsview/qgraphicslayout.h
index c622fb8..6031174 100644
--- a/src/gui/graphicsview/qgraphicslayout.h
+++ b/src/gui/graphicsview/qgraphicslayout.h
@@ -76,6 +76,8 @@ public:
virtual QGraphicsLayoutItem *itemAt(int i) const = 0;
virtual void removeAt(int index) = 0;
+ static void setInstantInvalidatePropagation(bool enable);
+ static bool instantInvalidatePropagation();
protected:
QGraphicsLayout(QGraphicsLayoutPrivate &, QGraphicsLayoutItem *);
void addChildLayoutItem(QGraphicsLayoutItem *layoutItem);
diff --git a/src/gui/graphicsview/qgraphicslayout_p.cpp b/src/gui/graphicsview/qgraphicslayout_p.cpp
index c2d4a08..6afdc19 100644
--- a/src/gui/graphicsview/qgraphicslayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicslayout_p.cpp
@@ -180,8 +180,13 @@ void QGraphicsLayoutPrivate::activateRecursive(QGraphicsLayoutItem *item)
{
if (item->isLayout()) {
QGraphicsLayout *layout = static_cast<QGraphicsLayout *>(item);
- if (layout->d_func()->activated)
- layout->invalidate();
+ if (layout->d_func()->activated) {
+ if (QGraphicsLayout::instantInvalidatePropagation()) {
+ return;
+ } else {
+ layout->invalidate(); // ### LOOKS SUSPICIOUSLY WRONG!!???
+ }
+ }
for (int i = layout->count() - 1; i >= 0; --i) {
QGraphicsLayoutItem *childItem = layout->itemAt(i);
diff --git a/src/gui/graphicsview/qgraphicslinearlayout.cpp b/src/gui/graphicsview/qgraphicslinearlayout.cpp
index 5591638..40f9b1d 100644
--- a/src/gui/graphicsview/qgraphicslinearlayout.cpp
+++ b/src/gui/graphicsview/qgraphicslinearlayout.cpp
@@ -275,17 +275,13 @@ void QGraphicsLinearLayout::insertItem(int index, QGraphicsLayoutItem *item)
qWarning("QGraphicsLinearLayout::insertItem: cannot insert itself");
return;
}
- Q_ASSERT(item);
-
- //the order of the following instructions is very important because
- //invalidating the layout before adding the child item will make the layout happen
- //before we try to paint the item
- invalidate();
d->addChildLayoutItem(item);
+ Q_ASSERT(item);
d->fixIndex(&index);
d->engine.insertRow(index, d->orientation);
new QGridLayoutItem(&d->engine, item, d->gridRow(index), d->gridColumn(index), 1, 1, 0, index);
+ invalidate();
}
/*!
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 85a4e16..c0a4bf9 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -5983,9 +5983,6 @@ bool QGraphicsScenePrivate::sendTouchBeginEvent(QGraphicsItem *origin, QTouchEve
}
if (item && item->isPanel())
break;
- if (item && (item->d_ptr->flags
- & (QGraphicsItem::ItemStopsClickFocusPropagation | QGraphicsItem::ItemStopsFocusHandling)))
- break;
}
touchEvent->setAccepted(eventAccepted);
diff --git a/src/gui/graphicsview/qgraphicstransform.cpp b/src/gui/graphicsview/qgraphicstransform.cpp
index 06df788..513c41f 100644
--- a/src/gui/graphicsview/qgraphicstransform.cpp
+++ b/src/gui/graphicsview/qgraphicstransform.cpp
@@ -92,6 +92,7 @@
#include "qgraphicstransform_p.h"
#include <QDebug>
#include <QtCore/qmath.h>
+#include <QtCore/qnumeric.h>
#ifndef QT_NO_GRAPHICSVIEW
QT_BEGIN_NAMESPACE
@@ -467,6 +468,7 @@ void QGraphicsRotation::setOrigin(const QVector3D &point)
item will be rotated counter-clockwise. Normally the rotation angle will be
in the range (-360, 360), but you can also provide numbers outside of this
range (e.g., a angle of 370 degrees gives the same result as 10 degrees).
+ Setting the angle to NaN results in no rotation.
\sa origin
*/
@@ -570,7 +572,7 @@ void QGraphicsRotation::applyTo(QMatrix4x4 *matrix) const
{
Q_D(const QGraphicsRotation);
- if (d->angle == 0. || d->axis.isNull())
+ if (d->angle == 0. || d->axis.isNull() || qIsNaN(d->angle))
return;
matrix->translate(d->origin);
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index 2b129d7..16268a8 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -2498,7 +2498,7 @@ QVariant QGraphicsView::inputMethodQuery(Qt::InputMethodQuery query) const
else if (value.type() == QVariant::PointF)
value = mapFromScene(value.toPointF());
else if (value.type() == QVariant::Rect)
- value = mapFromScene(value.toRect()).boundingRect();
+ value = d->mapRectFromScene(value.toRect()).toRect();
else if (value.type() == QVariant::Point)
value = mapFromScene(value.toPoint());
return value;
diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp
index 675a5c5..141e305 100644
--- a/src/gui/graphicsview/qgraphicswidget.cpp
+++ b/src/gui/graphicsview/qgraphicswidget.cpp
@@ -354,8 +354,10 @@ void QGraphicsWidget::setGeometry(const QRectF &rect)
newGeom = rect;
newGeom.setSize(rect.size().expandedTo(effectiveSizeHint(Qt::MinimumSize))
.boundedTo(effectiveSizeHint(Qt::MaximumSize)));
- if (newGeom == d->geom)
- return;
+
+ if (newGeom == d->geom) {
+ goto relayoutChildrenAndReturn;
+ }
// setPos triggers ItemPositionChange, which can adjust position
wd->inSetGeometry = 1;
@@ -363,8 +365,9 @@ void QGraphicsWidget::setGeometry(const QRectF &rect)
wd->inSetGeometry = 0;
newGeom.moveTopLeft(pos());
- if (newGeom == d->geom)
- return;
+ if (newGeom == d->geom) {
+ goto relayoutChildrenAndReturn;
+ }
// Update and prepare to change the geometry (remove from index) if the size has changed.
if (wd->scene) {
@@ -375,35 +378,54 @@ void QGraphicsWidget::setGeometry(const QRectF &rect)
}
// Update the layout item geometry
- bool moved = oldPos != pos();
- if (moved) {
- // Send move event.
- QGraphicsSceneMoveEvent event;
- event.setOldPos(oldPos);
- event.setNewPos(pos());
- QApplication::sendEvent(this, &event);
- if (wd->inSetPos) {
- //set the new pos
- d->geom.moveTopLeft(pos());
- emit geometryChanged();
- return;
+ {
+ bool moved = oldPos != pos();
+ if (moved) {
+ // Send move event.
+ QGraphicsSceneMoveEvent event;
+ event.setOldPos(oldPos);
+ event.setNewPos(pos());
+ QApplication::sendEvent(this, &event);
+ if (wd->inSetPos) {
+ //set the new pos
+ d->geom.moveTopLeft(pos());
+ emit geometryChanged();
+ goto relayoutChildrenAndReturn;
+ }
+ }
+ QSizeF oldSize = size();
+ QGraphicsLayoutItem::setGeometry(newGeom);
+ // Send resize event
+ bool resized = newGeom.size() != oldSize;
+ if (resized) {
+ QGraphicsSceneResizeEvent re;
+ re.setOldSize(oldSize);
+ re.setNewSize(newGeom.size());
+ if (oldSize.width() != newGeom.size().width())
+ emit widthChanged();
+ if (oldSize.height() != newGeom.size().height())
+ emit heightChanged();
+ QGraphicsLayout *lay = wd->layout;
+ if (QGraphicsLayout::instantInvalidatePropagation()) {
+ if (!lay || lay->isActivated()) {
+ QApplication::sendEvent(this, &re);
+ }
+ } else {
+ QApplication::sendEvent(this, &re);
+ }
}
}
- QSizeF oldSize = size();
- QGraphicsLayoutItem::setGeometry(newGeom);
- // Send resize event
- bool resized = newGeom.size() != oldSize;
- if (resized) {
- QGraphicsSceneResizeEvent re;
- re.setOldSize(oldSize);
- re.setNewSize(newGeom.size());
- if (oldSize.width() != newGeom.size().width())
- emit widthChanged();
- if (oldSize.height() != newGeom.size().height())
- emit heightChanged();
- QApplication::sendEvent(this, &re);
- }
+
emit geometryChanged();
+relayoutChildrenAndReturn:
+ if (QGraphicsLayout::instantInvalidatePropagation()) {
+ if (QGraphicsLayout *lay = wd->layout) {
+ if (!lay->isActivated()) {
+ QEvent layoutRequest(QEvent::LayoutRequest);
+ QApplication::sendEvent(this, &layoutRequest);
+ }
+ }
+ }
}
/*!
@@ -1052,16 +1074,31 @@ void QGraphicsWidget::updateGeometry()
QGraphicsLayoutItem *parentItem = parentLayoutItem();
if (parentItem && parentItem->isLayout()) {
- parentItem->updateGeometry();
+ if (QGraphicsLayout::instantInvalidatePropagation()) {
+ static_cast<QGraphicsLayout *>(parentItem)->invalidate();
+ } else {
+ parentItem->updateGeometry();
+ }
} else {
if (parentItem) {
+ // This is for custom layouting
QGraphicsWidget *parentWid = parentWidget(); //###
if (parentWid->isVisible())
QApplication::postEvent(parentWid, new QEvent(QEvent::LayoutRequest));
+ } else {
+ /**
+ * If this is the topmost widget, post a LayoutRequest event to the widget.
+ * When the event is received, it will start flowing all the way down to the leaf
+ * widgets in one go. This will make a relayout flicker-free.
+ */
+ if (QGraphicsLayout::instantInvalidatePropagation())
+ QApplication::postEvent(static_cast<QGraphicsWidget *>(this), new QEvent(QEvent::LayoutRequest));
+ }
+ if (!QGraphicsLayout::instantInvalidatePropagation()) {
+ bool wasResized = testAttribute(Qt::WA_Resized);
+ resize(size()); // this will restrict the size
+ setAttribute(Qt::WA_Resized, wasResized);
}
- bool wasResized = testAttribute(Qt::WA_Resized);
- resize(size()); // this will restrict the size
- setAttribute(Qt::WA_Resized, wasResized);
}
}
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index 4d51fa8..cf492d6 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -55,11 +55,9 @@ DEFINES += Q_INTERNAL_QAPP_SRC
symbian {
TARGET.UID3=0x2001B2DD
- symbian-abld|symbian-sbsv2 {
- # ro-section in gui can exceed default allocated space, so move rw-section a little further
- QMAKE_LFLAGS.ARMCC += --rw-base 0x800000
- QMAKE_LFLAGS.GCCE += -Tdata 0xC00000
- }
+ # ro-section in gui can exceed default allocated space, so move rw-section a little further
+ QMAKE_LFLAGS.ARMCC += --rw-base 0x800000
+ QMAKE_LFLAGS.GCCE += -Tdata 0x800000
}
neon:*-g++* {
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index 441bdb1..c867984 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -4377,6 +4377,8 @@ QImage QImage::scaled(const QSize& s, Qt::AspectRatioMode aspectMode, Qt::Transf
QSize newSize = size();
newSize.scale(s, aspectMode);
+ newSize.rwidth() = qMax(newSize.width(), 1);
+ newSize.rheight() = qMax(newSize.height(), 1);
if (newSize == size())
return *this;
diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp
index 1a83318..ed1b0f0 100644
--- a/src/gui/image/qpixmap.cpp
+++ b/src/gui/image/qpixmap.cpp
@@ -1479,6 +1479,8 @@ QPixmap QPixmap::scaled(const QSize& s, Qt::AspectRatioMode aspectMode, Qt::Tran
QSize newSize = size();
newSize.scale(s, aspectMode);
+ newSize.rwidth() = qMax(newSize.width(), 1);
+ newSize.rheight() = qMax(newSize.height(), 1);
if (newSize == size())
return *this;
diff --git a/src/gui/image/qpixmapcache.cpp b/src/gui/image/qpixmapcache.cpp
index 41fc6e9..ae772d8 100644
--- a/src/gui/image/qpixmapcache.cpp
+++ b/src/gui/image/qpixmapcache.cpp
@@ -91,9 +91,7 @@ QT_BEGIN_NAMESPACE
\sa QCache, QPixmap
*/
-#if defined(Q_OS_SYMBIAN)
-static int cache_limit = 1024; // 1048 KB cache limit for symbian
-#elif defined(Q_WS_QWS) || defined(Q_WS_WINCE)
+#if defined(Q_WS_QWS) || defined(Q_WS_WINCE)
static int cache_limit = 2048; // 2048 KB cache limit for embedded
#else
static int cache_limit = 10240; // 10 MB cache limit for desktop
diff --git a/src/gui/image/qvolatileimage.cpp b/src/gui/image/qvolatileimage.cpp
index 098e9a1..f5076e1 100644
--- a/src/gui/image/qvolatileimage.cpp
+++ b/src/gui/image/qvolatileimage.cpp
@@ -103,6 +103,11 @@ QVolatileImage &QVolatileImage::operator=(const QVolatileImage &rhs)
return *this;
}
+bool QVolatileImage::paintingActive() const
+{
+ return d->pengine && d->pengine->isActive();
+}
+
bool QVolatileImage::isNull() const
{
return d->image.isNull();
diff --git a/src/gui/image/qvolatileimage_p.h b/src/gui/image/qvolatileimage_p.h
index fc5d6b1..d835f45 100644
--- a/src/gui/image/qvolatileimage_p.h
+++ b/src/gui/image/qvolatileimage_p.h
@@ -71,6 +71,7 @@ public:
~QVolatileImage();
QVolatileImage &operator=(const QVolatileImage &rhs);
+ bool paintingActive() const;
bool isNull() const;
QImage::Format format() const;
int width() const;
diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
index 2c70ade..06dc25c 100644
--- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
+++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
@@ -77,6 +77,15 @@ QT_BEGIN_NAMESPACE
Q_GUI_EXPORT void qt_s60_setPartialScreenInputMode(bool enable)
{
S60->partial_keyboard = enable;
+
+ QInputContext *ic = 0;
+ if (QApplication::focusWidget()) {
+ ic = QApplication::focusWidget()->inputContext();
+ } else if (qApp && qApp->inputContext()) {
+ ic = qApp->inputContext();
+ }
+ if (ic)
+ ic->update();
}
QCoeFepInputContext::QCoeFepInputContext(QObject *parent)
@@ -108,7 +117,7 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent)
m_fepState->SetDefaultCase( EAknEditorTextCase );
m_fepState->SetPermittedCases( EAknEditorAllCaseModes );
m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG);
- m_fepState->SetNumericKeymap( EAknEditorStandardNumberModeKeymap );
+ m_fepState->SetNumericKeymap(EAknEditorAlphanumericNumberModeKeymap);
}
QCoeFepInputContext::~QCoeFepInputContext()
@@ -231,7 +240,7 @@ bool QCoeFepInputContext::filterEvent(const QEvent *event)
// It ignores the mouse event, so we need to commit and send a selection event (which will get triggered
// after the commit)
if (!m_preeditString.isEmpty()) {
- commitCurrentString(false);
+ commitCurrentString(true);
int pos = focusWidget()->inputMethodQuery(Qt::ImCursorPosition).toInt();
@@ -246,9 +255,13 @@ bool QCoeFepInputContext::filterEvent(const QEvent *event)
// fall through intended
case QEvent::KeyRelease:
const QKeyEvent *keyEvent = static_cast<const QKeyEvent *>(event);
+ //If proxy exists, always use hints from proxy.
+ QWidget *proxy = focusWidget()->focusProxy();
+ Qt::InputMethodHints currentHints = proxy ? proxy->inputMethodHints() : focusWidget()->inputMethodHints();
+
switch (keyEvent->key()) {
case Qt::Key_F20:
- Q_ASSERT(m_lastImHints == focusWidget()->inputMethodHints());
+ Q_ASSERT(m_lastImHints == currentHints);
if (m_lastImHints & Qt::ImhHiddenText) {
// Special case in Symbian. On editors with secret text, F20 is for some reason
// considered to be a backspace.
@@ -278,7 +291,7 @@ bool QCoeFepInputContext::filterEvent(const QEvent *event)
}
if (keyEvent->type() == QEvent::KeyPress
- && focusWidget()->inputMethodHints() & Qt::ImhHiddenText
+ && currentHints & Qt::ImhHiddenText
&& !keyEvent->text().isEmpty()) {
// Send some temporary preedit text in order to make text visible for a moment.
m_preeditString = keyEvent->text();
@@ -410,12 +423,14 @@ void QCoeFepInputContext::resetSplitViewWidget(bool keepInputWidget)
windowToMove->setUpdatesEnabled(false);
if (!alwaysResize) {
- if (gv->scene() && gv->scene()->focusItem()) {
- // Check if the widget contains cursorPositionChanged signal and disconnect from it.
- QByteArray signal = QMetaObject::normalizedSignature(SIGNAL(cursorPositionChanged()));
- int index = gv->scene()->focusItem()->toGraphicsObject()->metaObject()->indexOfSignal(signal.right(signal.length() - 1));
- if (index != -1)
- disconnect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget()));
+ if (gv->scene()) {
+ if (gv->scene()->focusItem()) {
+ // Check if the widget contains cursorPositionChanged signal and disconnect from it.
+ QByteArray signal = QMetaObject::normalizedSignature(SIGNAL(cursorPositionChanged()));
+ int index = gv->scene()->focusItem()->toGraphicsObject()->metaObject()->indexOfSignal(signal.right(signal.length() - 1));
+ if (index != -1)
+ disconnect(gv->scene()->focusItem()->toGraphicsObject(), SIGNAL(cursorPositionChanged()), this, SLOT(translateInputWidget()));
+ }
QGraphicsItem *rootItem = 0;
foreach (QGraphicsItem *item, gv->scene()->items()) {
@@ -529,28 +544,32 @@ void QCoeFepInputContext::ensureFocusWidgetVisible(QWidget *widget)
// and greatly reduces event passing in orientation switch cases,
// as the statuspane size is not changing.
+ if (alwaysResize)
+ windowToMove->setUpdatesEnabled(false);
+
if (!(windowToMove->windowState() & Qt::WindowFullScreen)) {
windowToMove->setWindowState(
(windowToMove->windowState() & ~(Qt::WindowMinimized | Qt::WindowFullScreen)) | Qt::WindowFullScreen);
}
if (alwaysResize) {
- windowToMove->setUpdatesEnabled(false);
- if (!moveWithinVisibleArea)
+ if (!moveWithinVisibleArea) {
m_splitViewResizeBy = widget->height();
-
- windowTop = widget->geometry().top();
- widget->resize(widget->width(), splitViewRect.height() - windowTop);
+ windowTop = widget->geometry().top();
+ widget->resize(widget->width(), splitViewRect.height() - windowTop);
+ }
if (gv->scene()) {
const QRectF microFocusRect = gv->scene()->inputMethodQuery(Qt::ImMicroFocus).toRectF();
gv->ensureVisible(microFocusRect);
}
- windowToMove->setUpdatesEnabled(true);
} else {
translateInputWidget();
}
+ if (alwaysResize)
+ windowToMove->setUpdatesEnabled(true);
+
widget->setAttribute(Qt::WA_Resized, userResize); //not a user resize
}
@@ -573,7 +592,21 @@ void QCoeFepInputContext::updateHints(bool mustUpdateInputCapabilities)
{
QWidget *w = focusWidget();
if (w) {
- Qt::InputMethodHints hints = w->inputMethodHints();
+ QWidget *proxy = w->focusProxy();
+ Qt::InputMethodHints hints = proxy ? proxy->inputMethodHints() : w->inputMethodHints();
+
+ // Since splitview support works like an input method hint, yet it is private flag,
+ // we need to update its state separately.
+ if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0) {
+ TInt currentFlags = m_fepState->Flags();
+ if (S60->partial_keyboard)
+ currentFlags |= QT_EAknEditorFlagEnablePartialScreen;
+ else
+ currentFlags &= ~QT_EAknEditorFlagEnablePartialScreen;
+ if (currentFlags != m_fepState->Flags())
+ m_fepState->SetFlags(currentFlags);
+ }
+
if (hints != m_lastImHints) {
m_lastImHints = hints;
applyHints(hints);
@@ -726,6 +759,8 @@ void QCoeFepInputContext::applyHints(Qt::InputMethodHints hints)
m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_EMAIL_ADDR_SPECIAL_CHARACTER_TABLE_DIALOG);
} else if (needsCharMap) {
m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG);
+ } else if ((hints & ImhFormattedNumbersOnly) || (hints & ImhDialableCharactersOnly)) {
+ m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG);
} else {
m_fepState->SetSpecialCharacterTableResourceId(0);
}
diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri
index f9c84c1..467eb9b 100644
--- a/src/gui/kernel/kernel.pri
+++ b/src/gui/kernel/kernel.pri
@@ -111,6 +111,8 @@ win32 {
}
symbian {
+ exists($${EPOCROOT}epoc32/include/platform/mw/akntranseffect.h): DEFINES += QT_SYMBIAN_HAVE_AKNTRANSEFFECT_H
+
SOURCES += \
kernel/qapplication_s60.cpp \
kernel/qeventdispatcher_s60.cpp \
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index 59aec91..f906bbf 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -128,6 +128,10 @@ extern bool qt_wince_is_pocket_pc(); //qguifunctions_wince.cpp
//#define ALIEN_DEBUG
+#if defined(Q_OS_SYMBIAN)
+#include "qt_s60_p.h"
+#endif
+
static void initResources()
{
#if defined(Q_WS_WINCE)
@@ -2432,6 +2436,11 @@ bool QApplication::event(QEvent *e)
{
Q_D(QApplication);
if(e->type() == QEvent::Close) {
+#if defined(Q_OS_SYMBIAN)
+ // In order to have proper application-exit effects on Symbian, certain
+ // native APIs have to be called _before_ closing/destroying the widgets.
+ bool effectStarted = qt_beginFullScreenEffect();
+#endif
QCloseEvent *ce = static_cast<QCloseEvent*>(e);
ce->accept();
closeAllWindows();
@@ -2445,8 +2454,14 @@ bool QApplication::event(QEvent *e)
break;
}
}
- if(ce->isAccepted())
+ if (ce->isAccepted()) {
return true;
+ } else {
+#if defined(Q_OS_SYMBIAN)
+ if (effectStarted)
+ qt_abortFullScreenEffect();
+#endif
+ }
} else if(e->type() == QEvent::LanguageChange) {
#ifndef QT_NO_TRANSLATION
setLayoutDirection(qt_detectRTLLanguage()?Qt::RightToLeft:Qt::LeftToRight);
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 0427ae4..6620efd 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -142,6 +142,60 @@ void QS60Data::setStatusPaneAndButtonGroupVisibility(bool statusPaneVisible, boo
// Ensure that control rectangle is updated
static_cast<QSymbianControl *>(QApplication::activeWindow()->winId())->handleClientAreaChange();
}
+
+bool QS60Data::setRecursiveDecorationsVisibility(QWidget *window, Qt::WindowStates newState)
+{
+ // Show statusbar:
+ // Topmost parent: Show unless fullscreen/minimized.
+ // Child windows: Follow topmost parent, unless fullscreen, in which case do not show statusbar
+ // Show CBA:
+ // Topmost parent: Show unless fullscreen/minimized.
+ // Exception: Show if fullscreen with Qt::WindowSoftkeysVisibleHint.
+ // Child windows:
+ // Minimized: Unclear if there is an use case for having focused minimized window at all.
+ // Always follow topmost parent just to be safe.
+ // Maximized and normal: follow topmost parent.
+ // Exception: If topmost parent is not showing CBA, show CBA if any softkey actions are
+ // defined.
+ // Fullscreen: Show only if Qt::WindowSoftkeysVisibleHint set.
+
+ Qt::WindowStates comparisonState = newState;
+ QWidget *parentWindow = window->parentWidget();
+ if (parentWindow) {
+ while (parentWindow->parentWidget())
+ parentWindow = parentWindow->parentWidget();
+ comparisonState = parentWindow->windowState();
+ } else {
+ parentWindow = window;
+ }
+
+ bool decorationsVisible = !(comparisonState & (Qt::WindowFullScreen | Qt::WindowMinimized));
+ const bool parentIsFullscreen = comparisonState & Qt::WindowFullScreen;
+ const bool parentCbaVisibilityHint = parentWindow->windowFlags() & Qt::WindowSoftkeysVisibleHint;
+ bool buttonGroupVisibility = (decorationsVisible || (parentIsFullscreen && parentCbaVisibilityHint));
+
+ // Do extra checking for child windows
+ if (window->parentWidget()) {
+ if (newState & Qt::WindowFullScreen) {
+ decorationsVisible = false;
+ if (window->windowFlags() & Qt::WindowSoftkeysVisibleHint)
+ buttonGroupVisibility = true;
+ else
+ buttonGroupVisibility = false;
+ } else if (!(newState & Qt::WindowMinimized) && !buttonGroupVisibility) {
+ for (int i = 0; i < window->actions().size(); ++i) {
+ if (window->actions().at(i)->softKeyRole() != QAction::NoSoftKey) {
+ buttonGroupVisibility = true;
+ break;
+ }
+ }
+ }
+ }
+
+ S60->setStatusPaneAndButtonGroupVisibility(decorationsVisible, buttonGroupVisibility);
+
+ return decorationsVisible;
+}
#endif
void QS60Data::controlVisibilityChanged(CCoeControl *control, bool visible)
@@ -161,6 +215,12 @@ void QS60Data::controlVisibilityChanged(CCoeControl *control, bool visible)
widget->repaint();
}
} else {
+ // In certain special scenarios we may get an ENotVisible event
+ // without a previous EPartiallyVisible. The backingstore must
+ // still be destroyed, hence the registerWidget() call below.
+ if (backingStore.data() && widget->internalWinId()
+ && qt_widget_private(widget)->maybeBackingStore() == backingStore.data())
+ backingStore.registerWidget(widget);
backingStore.unregisterWidget(widget);
// In order to ensure that any resources used by the window surface
// are immediately freed, we flush the WSERV command buffer.
@@ -405,6 +465,7 @@ QSymbianControl::QSymbianControl(QWidget *w)
, m_ignoreFocusChanged(0)
, m_symbianPopupIsOpen(0)
, m_inExternalScreenOverride(false)
+ , m_lastStatusPaneVisibility(0)
{
}
@@ -491,11 +552,52 @@ void QSymbianControl::setWidget(QWidget *w)
{
qwidget = w;
}
+
+QPoint QSymbianControl::translatePointForFixedNativeOrientation(const TPoint &pointerEventPos) const
+{
+ QPoint pos(pointerEventPos.iX, pointerEventPos.iY);
+ if (qwidget->d_func()->fixNativeOrientationCalled) {
+ QSize wsize = qwidget->size();
+ TSize size = Size();
+ if (size.iWidth == wsize.height() && size.iHeight == wsize.width()) {
+ qreal x = pos.x();
+ qreal y = pos.y();
+ pos.setX(size.iHeight - y);
+ pos.setY(x);
+ }
+ }
+ return pos;
+}
+
+TRect QSymbianControl::translateRectForFixedNativeOrientation(const TRect &controlRect) const
+{
+ TRect rect = controlRect;
+ if (qwidget->d_func()->fixNativeOrientationCalled) {
+ QPoint a = translatePointForFixedNativeOrientation(rect.iTl);
+ QPoint b = translatePointForFixedNativeOrientation(rect.iBr);
+ if (a.x() < b.x()) {
+ rect.iTl.iX = a.x();
+ rect.iBr.iX = b.x();
+ } else {
+ rect.iTl.iX = b.x();
+ rect.iBr.iX = a.x();
+ }
+ if (a.y() < b.y()) {
+ rect.iTl.iY = a.y();
+ rect.iBr.iY = b.y();
+ } else {
+ rect.iTl.iY = b.y();
+ rect.iBr.iY = a.y();
+ }
+ }
+ return rect;
+}
+
void QSymbianControl::HandleLongTapEventL( const TPoint& aPenEventLocation, const TPoint& aPenEventScreenLocation )
{
QWidget *alienWidget;
- QPoint widgetPos = QPoint(aPenEventLocation.iX, aPenEventLocation.iY);
- QPoint globalPos = QPoint(aPenEventScreenLocation.iX,aPenEventScreenLocation.iY);
+ QPoint widgetPos = translatePointForFixedNativeOrientation(aPenEventLocation);
+ QPoint globalPos = translatePointForFixedNativeOrientation(aPenEventScreenLocation);
alienWidget = qwidget->childAt(widgetPos);
if (!alienWidget)
alienWidget = qwidget;
@@ -510,7 +612,7 @@ void QSymbianControl::HandleLongTapEventL( const TPoint& aPenEventLocation, cons
void QSymbianControl::translateAdvancedPointerEvent(const TAdvancedPointerEvent *event)
{
QApplicationPrivate *d = QApplicationPrivate::instance();
- QPointF screenPos = qwidget->mapToGlobal(QPoint(event->iPosition.iX, event->iPosition.iY));
+ QPointF screenPos = qwidget->mapToGlobal(translatePointForFixedNativeOrientation(event->iPosition));
qreal pressure;
if(d->pressureSupported
&& event->Pressure() > 0) //workaround for misconfigured HAL
@@ -611,7 +713,7 @@ void QSymbianControl::HandlePointerEvent(const TPointerEvent& pEvent)
mapS60MouseEventTypeToQt(&type, &button, &pEvent);
Qt::KeyboardModifiers modifiers = mapToQtModifiers(pEvent.iModifiers);
- QPoint widgetPos = QPoint(pEvent.iPosition.iX, pEvent.iPosition.iY);
+ QPoint widgetPos = translatePointForFixedNativeOrientation(pEvent.iPosition);
TPoint controlScreenPos = PositionRelativeToScreen();
QPoint globalPos = QPoint(controlScreenPos.iX, controlScreenPos.iY) + widgetPos;
S60->lastCursorPos = globalPos;
@@ -1077,6 +1179,9 @@ void QSymbianControl::Draw(const TRect& controlRect) const
Q_ASSERT(window);
QTLWExtra *topExtra = window->d_func()->maybeTopData();
Q_ASSERT(topExtra);
+
+ TRect wcontrolRect = translateRectForFixedNativeOrientation(controlRect);
+
if (!topExtra->inExpose) {
topExtra->inExpose = true;
if (!qwidget->isWindow()) {
@@ -1087,7 +1192,7 @@ void QSymbianControl::Draw(const TRect& controlRect) const
gc.SetBrushColor(TRgb(0, 0, 0, 0));
gc.Clear(controlRect);
}
- QRect exposeRect = qt_TRect2QRect(controlRect);
+ QRect exposeRect = qt_TRect2QRect(wcontrolRect);
qwidget->d_func()->syncBackingStore(exposeRect);
topExtra->inExpose = false;
}
@@ -1100,7 +1205,7 @@ void QSymbianControl::Draw(const TRect& controlRect) const
const bool sendNativePaintEvents = qwidget->d_func()->extraData()->receiveNativePaintEvents;
if (sendNativePaintEvents) {
- const QRect r = qt_TRect2QRect(controlRect);
+ const QRect r = qt_TRect2QRect(wcontrolRect);
QMetaObject::invokeMethod(qwidget, "beginNativePaintEvent", Qt::DirectConnection, Q_ARG(QRect, r));
}
@@ -1155,7 +1260,7 @@ void QSymbianControl::Draw(const TRect& controlRect) const
}
if (sendNativePaintEvents) {
- const QRect r = qt_TRect2QRect(controlRect);
+ const QRect r = qt_TRect2QRect(wcontrolRect);
// The draw ops aren't actually sent to WSERV until the graphics
// context is deactivated, which happens in the function calling
// this one. We therefore delay the delivery of endNativePaintEvent,
@@ -1168,14 +1273,45 @@ void QSymbianControl::Draw(const TRect& controlRect) const
}
}
+void QSymbianControl::qwidgetResize_helper(const QSize &newSize)
+{
+ QRect cr = qwidget->geometry();
+ QSize oldSize(cr.size());
+ cr.setSize(newSize);
+ qwidget->data->crect = cr;
+ if (qwidget->isVisible()) {
+ QTLWExtra *tlwExtra = qwidget->d_func()->maybeTopData();
+ bool slowResize = qgetenv("QT_SLOW_TOPLEVEL_RESIZE").toInt();
+ if (!slowResize && tlwExtra)
+ tlwExtra->inTopLevelResize = true;
+ QResizeEvent e(newSize, oldSize);
+ qt_sendSpontaneousEvent(qwidget, &e);
+ if (!qwidget->testAttribute(Qt::WA_StaticContents))
+ qwidget->d_func()->syncBackingStore();
+ if (!slowResize && tlwExtra)
+ tlwExtra->inTopLevelResize = false;
+ } else {
+ if (!qwidget->testAttribute(Qt::WA_PendingResizeEvent)) {
+ QResizeEvent *e = new QResizeEvent(newSize, oldSize);
+ QApplication::postEvent(qwidget, e);
+ }
+ }
+}
+
void QSymbianControl::SizeChanged()
{
CCoeControl::SizeChanged();
+ // When FixNativeOrientation had been called, the RWindow/CCoeControl size
+ // and the surface/QWidget size have nothing to do with each other.
+ if (qwidget->d_func()->fixNativeOrientationCalled)
+ return;
+
QSize oldSize = qwidget->size();
QSize newSize(Size().iWidth, Size().iHeight);
if (oldSize != newSize) {
+ // Enforce the proper size for fullscreen widgets on the secondary screen.
const bool isFullscreen = qwidget->windowState() & Qt::WindowFullScreen;
const int screenNumber = S60->screenNumberForWidget(qwidget);
if (!m_inExternalScreenOverride && isFullscreen && screenNumber > 0) {
@@ -1188,26 +1324,8 @@ void QSymbianControl::SizeChanged()
return;
}
}
- QRect cr = qwidget->geometry();
- cr.setSize(newSize);
- qwidget->data->crect = cr;
- if (qwidget->isVisible()) {
- QTLWExtra *tlwExtra = qwidget->d_func()->maybeTopData();
- bool slowResize = qgetenv("QT_SLOW_TOPLEVEL_RESIZE").toInt();
- if (!slowResize && tlwExtra)
- tlwExtra->inTopLevelResize = true;
- QResizeEvent e(newSize, oldSize);
- qt_sendSpontaneousEvent(qwidget, &e);
- if (!qwidget->testAttribute(Qt::WA_StaticContents))
- qwidget->d_func()->syncBackingStore();
- if (!slowResize && tlwExtra)
- tlwExtra->inTopLevelResize = false;
- } else {
- if (!qwidget->testAttribute(Qt::WA_PendingResizeEvent)) {
- QResizeEvent *e = new QResizeEvent(newSize, oldSize);
- QApplication::postEvent(qwidget, e);
- }
- }
+
+ qwidgetResize_helper(newSize);
}
m_inExternalScreenOverride = false;
@@ -1271,37 +1389,8 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */)
qwidget->d_func()->setWindowIcon_sys(true);
qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle());
#ifdef Q_WS_S60
- if (qwidget->isWindow()) {
- QWidget *const window = qwidget->window();
- QWidget *parentWindow = window->parentWidget();
- if (parentWindow) {
- while (parentWindow->parentWidget())
- parentWindow = parentWindow->parentWidget();
- } else {
- parentWindow = window;
- }
-
- const bool parentDecorationsVisible = !(parentWindow->windowState() & (Qt::WindowFullScreen | Qt::WindowMinimized));
- const bool parentIsFullscreen = parentWindow->windowState() & Qt::WindowFullScreen;
- const bool parentCbaVisibilityHint = parentWindow->windowFlags() & Qt::WindowSoftkeysVisibleHint;
- bool buttonGroupVisibility = (parentDecorationsVisible || (parentIsFullscreen && parentCbaVisibilityHint));
-
- // For non-toplevel normal and maximized windows, show cba if window has softkey
- // actions even if topmost parent is not showing cba. Do the same for fullscreen
- // windows that request it.
- if (!buttonGroupVisibility
- && window->parentWidget()
- && !(window->windowState() & Qt::WindowMinimized)
- && ((window->windowFlags() & Qt::WindowSoftkeysVisibleHint) || !(window->windowState() & Qt::WindowFullScreen))) {
- for (int i = 0; i < window->actions().size(); ++i) {
- if (window->actions().at(i)->softKeyRole() != QAction::NoSoftKey) {
- buttonGroupVisibility = true;
- break;
- }
- }
- }
- S60->setStatusPaneAndButtonGroupVisibility(parentDecorationsVisible, buttonGroupVisibility);
- }
+ if (qwidget->isWindow())
+ S60->setRecursiveDecorationsVisibility(qwidget, qwidget->windowState());
#endif
} else if (QApplication::activeWindow() == qwidget->window()) {
bool focusedControlFound = false;
@@ -1402,7 +1491,13 @@ void QSymbianControl::HandleResourceChange(int resourceType)
}
break;
case KInternalStatusPaneChange:
- handleClientAreaChange();
+ // When status pane is not visible, only handle client area change if status pane was
+ // previously visible, as size changes to hidden status pane should not affect
+ // client area.
+ if (S60->statusPane() && (S60->statusPane()->IsVisible() || m_lastStatusPaneVisibility)) {
+ m_lastStatusPaneVisibility = S60->statusPane()->IsVisible();
+ handleClientAreaChange();
+ }
if (IsFocused() && IsVisible()) {
qwidget->d_func()->setWindowIcon_sys(true);
qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle());
@@ -1416,8 +1511,10 @@ void QSymbianControl::HandleResourceChange(int resourceType)
{
handleClientAreaChange();
// Send resize event to trigger desktopwidget workAreaResized signal
- QResizeEvent e(qt_desktopWidget->size(), qt_desktopWidget->size());
- QApplication::sendEvent(qt_desktopWidget, &e);
+ if (qt_desktopWidget) {
+ QResizeEvent e(qt_desktopWidget->size(), qt_desktopWidget->size());
+ QApplication::sendEvent(qt_desktopWidget, &e);
+ }
break;
}
#endif
@@ -1479,29 +1576,49 @@ bool QSymbianControl::isControlActive()
void QSymbianControl::ensureFixNativeOrientation()
{
#if defined(Q_SYMBIAN_SUPPORTS_FIXNATIVEORIENTATION)
- // Call FixNativeOrientation() for fullscreen QDeclarativeViews that
- // have a locked orientation matching the native orientation of the device.
- // This avoids unnecessary window rotation on wserv level.
- if (!qwidget->isWindow() || qwidget->windowType() == Qt::Desktop
- || !qwidget->inherits("QDeclarativeView")
- || S60->screenNumberForWidget(qwidget) > 0)
+ if (!qwidget->isWindow() || qwidget->windowType() == Qt::Desktop)
+ return;
+ if (S60->screenNumberForWidget(qwidget) > 0)
return;
- const bool isFullScreen = qwidget->windowState().testFlag(Qt::WindowFullScreen);
const bool isFixed = qwidget->d_func()->fixNativeOrientationCalled;
- const bool matchesNative = qwidget->testAttribute(
- S60->nativeOrientationIsPortrait ? Qt::WA_LockPortraitOrientation
- : Qt::WA_LockLandscapeOrientation);
- if (isFullScreen && matchesNative) {
- if (!isFixed) {
- Window().FixNativeOrientation();
- qwidget->d_func()->fixNativeOrientationCalled = true;
+ const bool isFixEnabled = qwidget->testAttribute(Qt::WA_SymbianNoSystemRotation);
+ const bool isFullScreen = qwidget->windowState().testFlag(Qt::WindowFullScreen);
+ if (isFullScreen && isFixEnabled) {
+ const bool surfaceBasedGs =
+ QApplicationPrivate::graphics_system_name == QLatin1String("openvg")
+ || QApplicationPrivate::graphics_system_name == QLatin1String("opengl");
+ if (!surfaceBasedGs)
+ qwidget->setAttribute(Qt::WA_SymbianNoSystemRotation, false);
+ if (!isFixed && surfaceBasedGs) {
+ if (Window().FixNativeOrientation() == KErrNone) {
+ qwidget->d_func()->fixNativeOrientationCalled = true;
+ // The EGL window surface is now fixed to the native orientation
+ // of the device, no matter what size we pass when creating it.
+ // Enforce the same size for the QWidget too. For the underlying
+ // CCoeControl and RWindow it is up to the system to resize them
+ // when the standard auto-rotation mechanism is in use, we must not
+ // change that behavior by forcing any size for those. In practice
+ // this means that the QWidget and the underlying native control
+ // dimensions will be out of sync when FixNativeOrientation was
+ // called and the device is turned to the non-native (typically
+ // landscape) orientation. The pointer event handling and certain
+ // functions like Draw() will need to compensate for this.
+ QSize newSize(S60->nativeScreenWidthInPixels, S60->nativeScreenHeightInPixels);
+ if (qwidget->size() != newSize)
+ qwidgetResize_helper(newSize);
+ } else {
+ qwidget->setAttribute(Qt::WA_SymbianNoSystemRotation, false);
+ }
}
} else if (isFixed) {
+ qwidget->setAttribute(Qt::WA_SymbianNoSystemRotation, false);
qwidget->d_func()->fixNativeOrientationCalled = false;
qwidget->hide();
qwidget->d_func()->create_sys(0, false, true);
qwidget->show();
}
+#else
+ qwidget->setAttribute(Qt::WA_SymbianNoSystemRotation, false);
#endif
}
@@ -1711,9 +1828,7 @@ void qt_init(QApplicationPrivate * /* priv */, int)
systemFont.setFamily(systemFont.defaultFamily());
QApplicationPrivate::setSystemFont(systemFont);
-#ifdef Q_SYMBIAN_TRANSITION_EFFECTS
QObject::connect(qApp, SIGNAL(aboutToQuit()), qApp, SLOT(_q_aboutToQuit()));
-#endif
#ifdef Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE
QApplicationPrivate::instance()->useTranslucentEGLSurfaces = true;
@@ -1738,6 +1853,8 @@ void qt_init(QApplicationPrivate * /* priv */, int)
} else {
QApplicationPrivate::instance()->useTranslucentEGLSurfaces = false;
}
+ if (QApplicationPrivate::graphics_system_name == QLatin1String("raster"))
+ QApplicationPrivate::instance()->useTranslucentEGLSurfaces = false;
#else
QApplicationPrivate::instance()->useTranslucentEGLSurfaces = false;
#endif
@@ -1802,6 +1919,9 @@ void qt_cleanup()
S60->setButtonGroupContainer(0);
#endif
+ // Call EndFullScreen() to prevent confusing the system effect state machine.
+ qt_endFullScreenEffect();
+
if (S60->qtOwnsS60Environment) {
// Restore the S60 framework trap handler. See qt_init().
User::SetTrapHandler(S60->s60InstalledTrapHandler);
@@ -2173,7 +2293,8 @@ int QApplicationPrivate::symbianProcessWsEvent(const QSymbianEvent *symbianEvent
}
#endif
#ifdef QT_SOFTKEYS_ENABLED
- QSoftKeyManager::updateSoftKeys();
+ if (!CEikonEnv::Static()->EikAppUi()->IsDisplayingMenuOrDialog())
+ QSoftKeyManager::updateSoftKeys();
#endif
break;
case EEventFocusLost:
@@ -2539,6 +2660,8 @@ void QApplication::restoreOverrideCursor()
void QApplicationPrivate::_q_aboutToQuit()
{
+ qt_beginFullScreenEffect();
+
#ifdef Q_SYMBIAN_TRANSITION_EFFECTS
// Send the shutdown tfx command
S60->wsSession().SendEffectCommand(ETfxCmdAppShutDown);
diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp
index 6e89ceb..913bc7e 100644
--- a/src/gui/kernel/qapplication_win.cpp
+++ b/src/gui/kernel/qapplication_win.cpp
@@ -3779,16 +3779,32 @@ bool QETWidget::translateConfigEvent(const MSG &msg)
QApplication::sendSpontaneousEvent(this, &e);
hideChildren(true);
}
- } else if (msg.wParam != SIZE_MINIMIZED && isMinimized()) {
+ } else if (msg.wParam != SIZE_MINIMIZED) {
+ bool window_state_changed = false;
+ Qt::WindowStates oldstate = Qt::WindowStates(dataPtr()->window_state);
+ if (isMinimized()) {
#ifndef Q_WS_WINCE
- const QString title = windowTitle();
- if (!title.isEmpty())
- d_func()->setWindowTitle_helper(title);
+ const QString title = windowTitle();
+ if (!title.isEmpty())
+ d_func()->setWindowTitle_helper(title);
#endif
- data->window_state &= ~Qt::WindowMinimized;
- showChildren(true);
- QShowEvent e;
- QApplication::sendSpontaneousEvent(this, &e);
+ data->window_state &= ~Qt::WindowMinimized;
+ showChildren(true);
+ QShowEvent e;
+ QApplication::sendSpontaneousEvent(this, &e);
+ // Capture SIZE_MAXIMIZED and SIZE_RESTORED without preceding WM_SYSCOMMAND
+ // (Aero Snap on Win7)
+ } else if (msg.wParam == SIZE_MAXIMIZED && !isMaximized()) {
+ data->window_state |= Qt::WindowMaximized;
+ window_state_changed = true;
+ } else if (msg.wParam == SIZE_RESTORED && isMaximized()) {
+ data->window_state &= ~(Qt::WindowMaximized);
+ window_state_changed = true;
+ }
+ if (window_state_changed) {
+ QWindowStateChangeEvent e(oldstate);
+ QApplication::sendSpontaneousEvent(this, &e);
+ }
}
}
if (msg.wParam != SIZE_MINIMIZED && oldSize != newSize) {
@@ -3820,7 +3836,7 @@ bool QETWidget::translateConfigEvent(const MSG &msg)
QApplication::postEvent(this, e);
}
}
-} else if (msg.message == WM_MOVE) { // move event
+ } else if (msg.message == WM_MOVE) { // move event
int a = (int) (short) LOWORD(msg.lParam);
int b = (int) (short) HIWORD(msg.lParam);
QPoint oldPos = geometry().topLeft();
diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
index 6254061..406e6d4 100644
--- a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
+++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
@@ -157,6 +157,20 @@ QT_END_NAMESPACE
[NSApp terminate:sender];
}
+- (void)setLevel:(NSInteger)windowLevel
+{
+ // Cocoa will upon activating/deactivating applications level modal
+ // windows up and down, regardsless of any explicit set window level.
+ // To ensure that modal stays-on-top dialogs actually stays on top after
+ // the application is activated (and therefore stacks in front of
+ // other stays-on-top windows), we need to add this little special-case override:
+ QWidget *widget = [[QT_MANGLE_NAMESPACE(QCocoaWindowDelegate) sharedDelegate] qt_qwidgetForWindow:self];
+ if (widget && widget->isModal() && (widget->windowFlags() & Qt::WindowStaysOnTopHint))
+ [super setLevel:NSPopUpMenuWindowLevel];
+ else
+ [super setLevel:windowLevel];
+}
+
- (void)sendEvent:(NSEvent *)event
{
if ([event type] == NSApplicationDefined) {
diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp
index 1b26933..204efe9 100644
--- a/src/gui/kernel/qsoftkeymanager.cpp
+++ b/src/gui/kernel/qsoftkeymanager.cpp
@@ -50,6 +50,10 @@
#include "private/qsoftkeymanager_s60_p.h"
#endif
+#ifdef SYMBIAN_VERSION_SYMBIAN3
+#include "private/qt_s60_p.h"
+#endif
+
#ifndef QT_NO_SOFTKEYMANAGER
QT_BEGIN_NAMESPACE
@@ -101,6 +105,30 @@ QSoftKeyManager::QSoftKeyManager() :
QAction *QSoftKeyManager::createAction(StandardSoftKey standardKey, QWidget *actionWidget)
{
QAction *action = new QAction(standardSoftKeyText(standardKey), actionWidget);
+#ifdef SYMBIAN_VERSION_SYMBIAN3
+ int key = 0;
+ switch (standardKey) {
+ case OkSoftKey:
+ key = EAknSoftkeyOk;
+ break;
+ case SelectSoftKey:
+ key = EAknSoftkeySelect;
+ break;
+ case DoneSoftKey:
+ key = EAknSoftkeyDone;
+ break;
+ case MenuSoftKey:
+ key = EAknSoftkeyOptions;
+ break;
+ case CancelSoftKey:
+ key = EAknSoftkeyCancel;
+ break;
+ default:
+ break;
+ };
+ if (key != 0)
+ QSoftKeyManager::instance()->d_func()->softKeyCommandActions.insert(action, key);
+#endif
QAction::SoftKeyRole softKeyRole = QAction::NoSoftKey;
switch (standardKey) {
case MenuSoftKey: // FALL-THROUGH
@@ -143,6 +171,9 @@ void QSoftKeyManager::cleanupHash(QObject *obj)
Q_D(QSoftKeyManager);
QAction *action = qobject_cast<QAction*>(obj);
d->keyedActions.remove(action);
+#ifdef SYMBIAN_VERSION_SYMBIAN3
+ d->softKeyCommandActions.remove(action);
+#endif
}
void QSoftKeyManager::sendKeyEvent()
diff --git a/src/gui/kernel/qsoftkeymanager_common_p.h b/src/gui/kernel/qsoftkeymanager_common_p.h
index 27d8ee9..02ae697 100644
--- a/src/gui/kernel/qsoftkeymanager_common_p.h
+++ b/src/gui/kernel/qsoftkeymanager_common_p.h
@@ -72,6 +72,9 @@ protected:
QMultiHash<int, QAction*> requestedSoftKeyActions;
QWidget *initialSoftKeySource;
bool pendingUpdate;
+#ifdef SYMBIAN_VERSION_SYMBIAN3
+ QHash<QAction*, int> softKeyCommandActions;
+#endif
};
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qsoftkeymanager_s60.cpp b/src/gui/kernel/qsoftkeymanager_s60.cpp
index 09e2b5f..79ed91a 100644
--- a/src/gui/kernel/qsoftkeymanager_s60.cpp
+++ b/src/gui/kernel/qsoftkeymanager_s60.cpp
@@ -298,6 +298,10 @@ bool QSoftKeyManagerPrivateS60::setSoftkey(CEikButtonGroupContainer &cba,
QString text = softkeyText(*action);
TPtrC nativeText = qt_QString2TPtrC(text);
int command = S60_COMMAND_START + position;
+#ifdef SYMBIAN_VERSION_SYMBIAN3
+ if (softKeyCommandActions.contains(action))
+ command = softKeyCommandActions.value(action);
+#endif
setNativeSoftkey(cba, position, command, nativeText);
const bool dimmed = !action->isEnabled() && !QSoftKeyManager::isForceEnabledInSofkeys(action);
cba.DimCommand(command, dimmed);
diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h
index 102c0ca..8aba53a 100644
--- a/src/gui/kernel/qt_s60_p.h
+++ b/src/gui/kernel/qt_s60_p.h
@@ -77,6 +77,10 @@
#include <akncontext.h> // CAknContextPane
#include <eikspane.h> // CEikStatusPane
#include <AknPopupFader.h> // MAknFadedComponent and TAknPopupFader
+#include <gfxtranseffect/gfxtranseffect.h> // BeginFullScreen
+#ifdef QT_SYMBIAN_HAVE_AKNTRANSEFFECT_H
+#include <akntranseffect.h> // BeginFullScreen
+#endif
#endif
QT_BEGIN_NAMESPACE
@@ -85,6 +89,9 @@ QT_BEGIN_NAMESPACE
// system events seems to start with 0x10
const TInt KInternalStatusPaneChange = 0x50000000;
+// For BeginFullScreen().
+const TUint KQtAppExitFlag = 0x400;
+
static const int qt_symbian_max_screens = 4;
//this macro exists because EColor16MAP enum value doesn't exist in Symbian OS 9.2
@@ -178,6 +185,7 @@ public:
static inline CEikButtonGroupContainer* buttonGroupContainer();
static inline void setButtonGroupContainer(CEikButtonGroupContainer* newCba);
static void setStatusPaneAndButtonGroupVisibility(bool statusPaneVisible, bool buttonGroupVisible);
+ static bool setRecursiveDecorationsVisibility(QWidget *window, Qt::WindowStates newState);
#endif
static void controlVisibilityChanged(CCoeControl *control, bool visible);
@@ -190,7 +198,11 @@ public:
int screenWidthInTwipsForScreen[qt_symbian_max_screens];
int screenHeightInTwipsForScreen[qt_symbian_max_screens];
- bool nativeOrientationIsPortrait;
+ int nativeScreenWidthInPixels;
+ int nativeScreenHeightInPixels;
+
+ int beginFullScreenCalled : 1;
+ int endFullScreenCalled : 1;
};
Q_AUTOTEST_EXPORT QS60Data* qGlobalS60Data();
@@ -236,6 +248,8 @@ public:
bool isControlActive();
void ensureFixNativeOrientation();
+ QPoint translatePointForFixedNativeOrientation(const TPoint &pointerEventPos) const;
+ TRect translateRectForFixedNativeOrientation(const TRect &controlRect) const;
#ifdef Q_WS_S60
void FadeBehindPopup(bool fade){ popupFader.FadeBehindPopup( this, this, fade); }
@@ -255,6 +269,9 @@ protected:
void PositionChanged();
void FocusChanged(TDrawNow aDrawNow);
+protected:
+ void qwidgetResize_helper(const QSize &newSize);
+
private:
void HandlePointerEvent(const TPointerEvent& aPointerEvent);
TKeyResponse OfferKeyEvent(const TKeyEvent& aKeyEvent,TEventCode aType);
@@ -294,6 +311,7 @@ private:
#endif
bool m_inExternalScreenOverride : 1;
+ bool m_lastStatusPaneVisibility : 1;
};
inline QS60Data::QS60Data()
@@ -326,6 +344,8 @@ inline QS60Data::QS60Data()
#ifdef Q_OS_SYMBIAN
,s60InstalledTrapHandler(0)
#endif
+ ,beginFullScreenCalled(0),
+ endFullScreenCalled(0)
{
}
@@ -361,18 +381,15 @@ inline void QS60Data::updateScreenSize()
// Look for a screen mode with rotation 0
// in order to decide what the native orientation is.
- int nativeScreenWidthInPixels = 0;
- int nativeScreenHeightInPixels = 0;
for (mode = 0; mode < screenModeCount; ++mode) {
TPixelsAndRotation sizeAndRotation;
dev->GetScreenModeSizeAndRotation(mode, sizeAndRotation);
if (sizeAndRotation.iRotation == CFbsBitGc::EGraphicsOrientationNormal) {
- nativeScreenWidthInPixels = sizeAndRotation.iPixelSize.iWidth;
- nativeScreenHeightInPixels = sizeAndRotation.iPixelSize.iHeight;
+ S60->nativeScreenWidthInPixels = sizeAndRotation.iPixelSize.iWidth;
+ S60->nativeScreenHeightInPixels = sizeAndRotation.iPixelSize.iHeight;
break;
}
}
- S60->nativeOrientationIsPortrait = nativeScreenWidthInPixels <= nativeScreenHeightInPixels;
}
inline RWsSession& QS60Data::wsSession()
@@ -560,6 +577,49 @@ void qt_symbian_set_cursor_visible(bool visible);
bool qt_symbian_is_cursor_visible();
#endif
+static inline bool qt_beginFullScreenEffect()
+{
+#if defined(Q_WS_S60) && defined(QT_SYMBIAN_HAVE_AKNTRANSEFFECT_H)
+ // Only for post-S^3. On earlier versions the system transition effects
+ // may not be able to capture the non-Avkon content, leading to confusing
+ // looking effects, so just skip the whole thing.
+ if (S60->beginFullScreenCalled || QSysInfo::s60Version() <= QSysInfo::SV_S60_5_2)
+ return false;
+ S60->beginFullScreenCalled = true;
+ // For Avkon apps the app-exit effect is triggered from CAknAppUi::PrepareToExit().
+ // That is good for Avkon apps, but in case of Qt the RWindows are destroyed earlier.
+ // Therefore we call BeginFullScreen() ourselves.
+ GfxTransEffect::BeginFullScreen(AknTransEffect::EApplicationExit,
+ TRect(0, 0, 0, 0),
+ AknTransEffect::EParameterType,
+ AknTransEffect::GfxTransParam(S60->uid,
+ AknTransEffect::TParameter::EAvkonCheck | KQtAppExitFlag));
+ return true;
+#else
+ return false;
+#endif
+}
+
+static inline void qt_abortFullScreenEffect()
+{
+#if defined(Q_WS_S60) && defined(QT_SYMBIAN_HAVE_AKNTRANSEFFECT_H)
+ if (!S60->beginFullScreenCalled || QSysInfo::s60Version() <= QSysInfo::SV_S60_5_2)
+ return;
+ GfxTransEffect::AbortFullScreen();
+ S60->beginFullScreenCalled = S60->endFullScreenCalled = false;
+#endif
+}
+
+static inline void qt_endFullScreenEffect()
+{
+#if defined(Q_WS_S60) && defined(QT_SYMBIAN_HAVE_AKNTRANSEFFECT_H)
+ if (S60->endFullScreenCalled || QSysInfo::s60Version() <= QSysInfo::SV_S60_5_2)
+ return;
+ S60->endFullScreenCalled = true;
+ GfxTransEffect::EndFullScreen();
+#endif
+}
+
QT_END_NAMESPACE
#endif // QT_S60_P_H
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index 9d9cd75..6cf5474 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -292,6 +292,7 @@ QWidgetPrivate::QWidgetPrivate(int version)
#ifndef QT_NO_IM
, inheritsInputMethodHints(0)
#endif
+ , inSetParent(0)
#if defined(Q_WS_X11)
, picture(0)
#elif defined(Q_WS_WIN)
@@ -2563,6 +2564,22 @@ WId QWidget::effectiveWinId() const
if (id || !testAttribute(Qt::WA_WState_Created))
return id;
QWidget *realParent = nativeParentWidget();
+ if (!realParent && d_func()->inSetParent) {
+ // In transitional state. This is really just a workaround. The real problem
+ // is that QWidgetPrivate::setParent_sys (platform specific code) first sets
+ // the window id to 0 (setWinId(0)) before it sets the Qt::WA_WState_Created
+ // attribute to false. The correct way is to do it the other way around, and
+ // in that case the Qt::WA_WState_Created logic above will kick in and
+ // return 0 whenever the widget is in a transitional state. However, changing
+ // the original logic for all platforms is far more intrusive and might
+ // break existing applications.
+ // Note: The widget can only be in a transitional state when changing its
+ // parent -- everything else is an internal error -- hence explicitly checking
+ // against 'inSetParent' rather than doing an unconditional return whenever
+ // 'realParent' is 0 (which may cause strange artifacts and headache later).
+ return 0;
+ }
+ // This widget *must* have a native parent widget.
Q_ASSERT(realParent);
Q_ASSERT(realParent->internalWinId());
return realParent->internalWinId();
@@ -10041,6 +10058,7 @@ void QWidget::setParent(QWidget *parent)
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f)
{
Q_D(QWidget);
+ d->inSetParent = true;
bool resized = testAttribute(Qt::WA_Resized);
bool wasCreated = testAttribute(Qt::WA_WState_Created);
QWidget *oldtlw = window();
@@ -10195,6 +10213,8 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f)
ancestorProxy->d_func()->embedSubWindow(this);
}
#endif
+
+ d->inSetParent = false;
}
/*!
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index 7e5173f..8784ffd 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -2794,6 +2794,11 @@ void QWidgetPrivate::transferChildren()
#ifdef QT_MAC_USE_COCOA
void QWidgetPrivate::setSubWindowStacking(bool set)
{
+ // After hitting too many unforeseen bugs trying to put Qt on top of the cocoa child
+ // window API, we have decided to revert this behaviour as much as we can. We
+ // therefore now only allow child windows to exist for children of modal dialogs.
+ static bool use_behaviour_qt473 = !qgetenv("QT_MAC_USE_CHILDWINDOWS").isEmpty();
+
// This will set/remove a visual relationship between parent and child on screen.
// The reason for doing this is to ensure that a child always stacks infront of
// its parent. Unfortunatly is turns out that [NSWindow addChildWindow] has
@@ -2822,7 +2827,10 @@ void QWidgetPrivate::setSubWindowStacking(bool set)
if (NSWindow *pwin = [qt_mac_nativeview_for(parent) window]) {
if (set) {
Qt::WindowType ptype = parent->window()->windowType();
- if ([pwin isVisible] && (ptype == Qt::Window || ptype == Qt::Dialog) && ![qwin parentWindow]) {
+ if ([pwin isVisible]
+ && (ptype == Qt::Window || ptype == Qt::Dialog)
+ && ![qwin parentWindow]
+ && (use_behaviour_qt473 || parent->windowModality() == Qt::ApplicationModal)) {
NSInteger level = [qwin level];
[pwin addChildWindow:qwin ordered:NSWindowAbove];
if ([qwin level] < level)
@@ -2834,6 +2842,10 @@ void QWidgetPrivate::setSubWindowStacking(bool set)
}
}
+ // Only set-up child windows for q if q is modal:
+ if (set && !use_behaviour_qt473 && q->windowModality() != Qt::ApplicationModal)
+ return;
+
QObjectList widgets = q->children();
for (int i=0; i<widgets.size(); ++i) {
QWidget *child = qobject_cast<QWidget *>(widgets.at(i));
diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h
index 377e3a7..7bf65f6 100644
--- a/src/gui/kernel/qwidget_p.h
+++ b/src/gui/kernel/qwidget_p.h
@@ -227,6 +227,7 @@ struct QTLWExtra {
#elif defined(Q_OS_SYMBIAN)
uint inExpose : 1; // Prevents drawing recursion
uint nativeWindowTransparencyEnabled : 1; // Tracks native window transparency
+ uint forcedToRaster : 1;
#endif
};
@@ -759,6 +760,7 @@ public:
#ifndef QT_NO_IM
uint inheritsInputMethodHints : 1;
#endif
+ uint inSetParent : 1;
// *************************** Platform specific ************************************
#if defined(Q_WS_X11) // <----------------------------------------------------------- X11
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index e7d5e95..8ca29cd 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -563,6 +563,11 @@ void QWidgetPrivate::show_sys()
if (isFullscreen) {
const bool cbaVisible = S60->buttonGroupContainer() && S60->buttonGroupContainer()->IsVisible();
S60->setStatusPaneAndButtonGroupVisibility(false, cbaVisible);
+ if (cbaVisible) {
+ // Fix window dimensions as without screen furniture they will have
+ // defaulted to full screen dimensions initially.
+ id->handleClientAreaChange();
+ }
}
}
}
@@ -777,7 +782,7 @@ void QWidgetPrivate::setParent_sys(QWidget *parent, Qt::WindowFlags f)
adjustFlags(data.window_flags, q);
// keep compatibility with previous versions, we need to preserve the created state
// (but we recreate the winId for the widget being reparented, again for compatibility)
- if (wasCreated || (!q->isWindow() && parent->testAttribute(Qt::WA_WState_Created)))
+ if (wasCreated || (!q->isWindow() && parent && parent->testAttribute(Qt::WA_WState_Created)))
createWinId();
if (q->isWindow() || (!parent || parent->isVisible()) || explicitlyHidden)
q->setAttribute(Qt::WA_WState_Hidden);
@@ -820,7 +825,8 @@ void QWidgetPrivate::s60UpdateIsOpaque()
RWindow *const window = static_cast<RWindow *>(q->effectiveWinId()->DrawableWindow());
#ifdef Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE
- if (QApplicationPrivate::instance()->useTranslucentEGLSurfaces) {
+ if (QApplicationPrivate::instance()->useTranslucentEGLSurfaces
+ && !extra->topextra->forcedToRaster) {
window->SetSurfaceTransparency(!isOpaque);
extra->topextra->nativeWindowTransparencyEnabled = !isOpaque;
return;
@@ -838,6 +844,8 @@ void QWidgetPrivate::s60UpdateIsOpaque()
// recreate backing store to get translucent surface (raster surface).
extra->topextra->backingStore.create(q);
extra->topextra->backingStore.registerWidget(q);
+ // FixNativeOrientation() will not work without an EGL surface.
+ q->setAttribute(Qt::WA_SymbianNoSystemRotation, false);
}
}
} else if (extra->topextra->nativeWindowTransparencyEnabled) {
@@ -1002,6 +1010,7 @@ void QWidgetPrivate::createTLSysExtra()
{
extra->topextra->inExpose = 0;
extra->topextra->nativeWindowTransparencyEnabled = 0;
+ extra->topextra->forcedToRaster = 0;
}
void QWidgetPrivate::deleteTLSysExtra()
@@ -1206,41 +1215,10 @@ void QWidget::setWindowState(Qt::WindowStates newstate)
}
#ifdef Q_WS_S60
- // Hide window decoration when switching to fullscreen / minimized otherwise show decoration.
// The window decoration visibility has to be changed before doing actual window state
// change since in that order the availableGeometry will return directly the right size and
// we will avoid unnecessary redraws
- Qt::WindowStates comparisonState = newstate;
- QWidget *parentWindow = parentWidget();
- if (parentWindow) {
- while (parentWindow->parentWidget())
- parentWindow = parentWindow->parentWidget();
- comparisonState = parentWindow->windowState();
- } else {
- parentWindow = this;
- }
-
- const bool decorationsVisible = !(comparisonState & (Qt::WindowFullScreen | Qt::WindowMinimized));
- const bool parentIsFullscreen = comparisonState & Qt::WindowFullScreen;
- const bool parentCbaVisibilityHint = parentWindow->windowFlags() & Qt::WindowSoftkeysVisibleHint;
- bool buttonGroupVisibility = (decorationsVisible || (parentIsFullscreen && parentCbaVisibilityHint));
-
- // For non-toplevel normal and maximized windows, show cba if window has softkey
- // actions even if topmost parent is not showing cba. Do the same for fullscreen
- // windows that request it.
- if (!buttonGroupVisibility
- && parentWidget()
- && !(newstate & Qt::WindowMinimized)
- && ((windowFlags() & Qt::WindowSoftkeysVisibleHint) || !(newstate & Qt::WindowFullScreen))) {
- for (int i = 0; i < actions().size(); ++i) {
- if (actions().at(i)->softKeyRole() != QAction::NoSoftKey) {
- buttonGroupVisibility = true;
- break;
- }
- }
- }
- S60->setStatusPaneAndButtonGroupVisibility(decorationsVisible, buttonGroupVisibility);
-
+ bool decorationsVisible = S60->setRecursiveDecorationsVisibility(this, newstate);
#endif // Q_WS_S60
// Ensure the initial size is valid, since we store it as normalGeometry below.
@@ -1451,7 +1429,8 @@ void QWidget::activateWindow()
if (tlw->isVisible()) {
window()->createWinId();
QSymbianControl *id = static_cast<QSymbianControl *>(tlw->internalWinId());
- id->setFocusSafely(true);
+ if (!id->IsFocused())
+ id->setFocusSafely(true);
}
}
diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri
index bd37d9f..b3b647a 100644
--- a/src/gui/painting/painting.pri
+++ b/src/gui/painting/painting.pri
@@ -9,6 +9,7 @@ HEADERS += \
painting/qdrawutil.h \
painting/qemulationpaintengine_p.h \
painting/qgraphicssystem_p.h \
+ painting/qgraphicssystemex_p.h \
painting/qmatrix.h \
painting/qmemrotate_p.h \
painting/qoutlinemapper_p.h \
@@ -235,8 +236,10 @@ embedded {
symbian {
HEADERS += painting/qwindowsurface_s60_p.h \
- painting/qdrawhelper_arm_simd_p.h
- SOURCES += painting/qwindowsurface_s60.cpp
+ painting/qdrawhelper_arm_simd_p.h \
+ painting/qgraphicssystemex_symbian_p.h
+ SOURCES += painting/qwindowsurface_s60.cpp \
+ painting/qgraphicssystemex_symbian.cpp
armccIfdefBlock = \
"$${LITERAL_HASH}if defined(ARMV6)" \
"MACRO QT_HAVE_ARM_SIMD" \
diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp
index dc61e34..8f965c2 100644
--- a/src/gui/painting/qbrush.cpp
+++ b/src/gui/painting/qbrush.cpp
@@ -49,6 +49,7 @@
#include "qdebug.h"
#include <QtCore/qcoreapplication.h>
#include "private/qstylehelper_p.h"
+#include <QtCore/qnumeric.h>
QT_BEGIN_NAMESPACE
@@ -1360,13 +1361,14 @@ QGradient::QGradient()
void QGradient::setColorAt(qreal pos, const QColor &color)
{
- if (pos > 1 || pos < 0) {
+ if ((pos > 1 || pos < 0) && !qIsNaN(pos)) {
qWarning("QGradient::setColorAt: Color position must be specified in the range 0 to 1");
return;
}
int index = 0;
- while (index < m_stops.size() && m_stops.at(index).first < pos) ++index;
+ if (!qIsNaN(pos))
+ while (index < m_stops.size() && m_stops.at(index).first < pos) ++index;
if (index < m_stops.size() && m_stops.at(index).first == pos)
m_stops[index].second = color;
diff --git a/src/gui/painting/qdrawhelper_neon.cpp b/src/gui/painting/qdrawhelper_neon.cpp
index 00b103d..debca37 100644
--- a/src/gui/painting/qdrawhelper_neon.cpp
+++ b/src/gui/painting/qdrawhelper_neon.cpp
@@ -327,10 +327,8 @@ void qt_blend_argb32_on_rgb16_neon(uchar *destPixels, int dbpl,
blend_8_pixels_argb32_on_rgb16_neon(dstBuffer, srcBuffer, const_alpha);
- for (int j = 0; j < tail; ++j) {
+ for (int j = 0; j < tail; ++j)
dst[i + j] = dstBuffer[j];
- src[i + j] = srcBuffer[j];
- }
}
dst = (quint16 *)(((uchar *) dst) + dbpl);
diff --git a/src/gui/painting/qgraphicssystem.cpp b/src/gui/painting/qgraphicssystem.cpp
index 5112019..4b79600 100644
--- a/src/gui/painting/qgraphicssystem.cpp
+++ b/src/gui/painting/qgraphicssystem.cpp
@@ -52,6 +52,9 @@
#endif
#ifdef Q_OS_SYMBIAN
# include <private/qpixmap_s60_p.h>
+# include <private/qgraphicssystemex_symbian_p.h>
+#else
+# include <private/qgraphicssystemex_p.h>
#endif
QT_BEGIN_NAMESPACE
@@ -84,9 +87,18 @@ QPixmapData *QGraphicsSystem::createPixmapData(QPixmapData *origin)
return createPixmapData(origin->pixelType());
}
-void QGraphicsSystem::releaseCachedResources()
+#ifdef Q_OS_SYMBIAN
+Q_GLOBAL_STATIC(QSymbianGraphicsSystemEx, symbianPlatformExtension)
+#endif
+
+QGraphicsSystemEx* QGraphicsSystem::platformExtension()
{
- // Do nothing here
+#ifdef Q_OS_SYMBIAN
+ // this is used on raster graphics systems. HW accelerated
+ // graphics systems will overwrite this function.
+ return symbianPlatformExtension();
+#endif
+ return 0;
}
QT_END_NAMESPACE
diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h
index 80e8959..d5acaa4 100644
--- a/src/gui/painting/qgraphicssystem_p.h
+++ b/src/gui/painting/qgraphicssystem_p.h
@@ -59,6 +59,7 @@
QT_BEGIN_NAMESPACE
class QPixmapFilter;
+class QGraphicsSystemEx;
class Q_GUI_EXPORT QGraphicsSystem
{
@@ -73,7 +74,7 @@ public:
// to have a graphics system.
static QPixmapData *createDefaultPixmapData(QPixmapData::PixelType type);
- virtual void releaseCachedResources();
+ virtual QGraphicsSystemEx* platformExtension();
};
QT_END_NAMESPACE
diff --git a/src/gui/painting/qgraphicssystemex_p.h b/src/gui/painting/qgraphicssystemex_p.h
new file mode 100644
index 0000000..6feb116
--- /dev/null
+++ b/src/gui/painting/qgraphicssystemex_p.h
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QGRAPHICSSYSTEMEX_P_H
+#define QGRAPHICSSYSTEMEX_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <qglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+class Q_GUI_EXPORT QGraphicsSystemEx
+{
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/gui/painting/qgraphicssystemex_symbian.cpp b/src/gui/painting/qgraphicssystemex_symbian.cpp
new file mode 100644
index 0000000..54d21ac
--- /dev/null
+++ b/src/gui/painting/qgraphicssystemex_symbian.cpp
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qgraphicssystemex_symbian_p.h"
+#include "private/qwidget_p.h"
+#include "private/qbackingstore_p.h"
+#include "private/qapplication_p.h"
+#include "qwidget_p.h"
+
+#include <QDebug>
+
+QT_BEGIN_NAMESPACE
+
+void QSymbianGraphicsSystemEx::releaseCachedGpuResources()
+{
+ // Do nothing here
+ // This is implemented in graphics system specific plugin
+}
+
+void QSymbianGraphicsSystemEx::releaseAllGpuResources()
+{
+ releaseCachedGpuResources();
+
+ foreach (QWidget *widget, QApplication::topLevelWidgets()) {
+ if (QTLWExtra *topExtra = qt_widget_private(widget)->maybeTopData())
+ topExtra->backingStore.destroy();
+ }
+}
+
+bool QSymbianGraphicsSystemEx::hasBCM2727()
+{
+ return !QApplicationPrivate::instance()->useTranslucentEGLSurfaces;
+}
+
+void QSymbianGraphicsSystemEx::forceToRaster(QWidget *window)
+{
+ if (window && window->isWindow()) {
+ qt_widget_private(window)->createTLExtra();
+ if (QTLWExtra *topExtra = qt_widget_private(window)->maybeTopData()) {
+ topExtra->forcedToRaster = 1;
+ if (topExtra->backingStore.data()) {
+ topExtra->backingStore.create(window);
+ topExtra->backingStore.registerWidget(window);
+ }
+ }
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/painting/qgraphicssystemex_symbian_p.h b/src/gui/painting/qgraphicssystemex_symbian_p.h
new file mode 100644
index 0000000..0b1e39e
--- /dev/null
+++ b/src/gui/painting/qgraphicssystemex_symbian_p.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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 QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSYMBIANGRAPHICSSYSTEMEX_P_H
+#define QSYMBIANGRAPHICSSYSTEMEX_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "private/qgraphicssystemex_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QWidget;
+
+class Q_GUI_EXPORT QSymbianGraphicsSystemEx : public QGraphicsSystemEx
+{
+public:
+ virtual void releaseCachedGpuResources();
+ virtual void releaseAllGpuResources();
+ virtual bool hasBCM2727();
+ virtual void forceToRaster(QWidget *window);
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/gui/painting/qpaintengine_mac.cpp b/src/gui/painting/qpaintengine_mac.cpp
index c3aac1b..b07053e 100644
--- a/src/gui/painting/qpaintengine_mac.cpp
+++ b/src/gui/painting/qpaintengine_mac.cpp
@@ -969,7 +969,7 @@ void QCoreGraphicsPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, co
return;
bool differentSize = (QRectF(0, 0, pm.width(), pm.height()) != sr), doRestore = false;
- CGRect rect = CGRectMake(qRound(r.x()), qRound(r.y()), qRound(r.width()), qRound(r.height()));
+ CGRect rect = CGRectMake(r.x(), r.y(), r.width(), r.height());
QCFType<CGImageRef> image;
bool isBitmap = (pm.depth() == 1);
if (isBitmap) {
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index 76ac7db..3735e7c 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -95,10 +95,10 @@ static void drawTextItemDecoration(QPainter *painter, const QPointF &pos, const
const QTextItem::RenderFlags flags, qreal width,
const QTextCharFormat &charFormat);
// Helper function to calculate left most position, width and flags for decoration drawing
-static void drawDecorationForGlyphs(QPainter *painter, const glyph_t *glyphArray,
- const QFixedPoint *positions, int glyphCount,
- QFontEngine *fontEngine, const QFont &font,
- const QTextCharFormat &charFormat);
+Q_GUI_EXPORT void qt_draw_decoration_for_glyphs(QPainter *painter, const glyph_t *glyphArray,
+ const QFixedPoint *positions, int glyphCount,
+ QFontEngine *fontEngine, const QFont &font,
+ const QTextCharFormat &charFormat);
static inline QGradient::CoordinateMode coordinateMode(const QBrush &brush)
{
@@ -5937,9 +5937,9 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText
}
d->extended->drawStaticTextItem(item);
- drawDecorationForGlyphs(this, item->glyphs, item->glyphPositions,
- item->numGlyphs, item->fontEngine(), staticText_d->font,
- QTextCharFormat());
+ qt_draw_decoration_for_glyphs(this, item->glyphs, item->glyphPositions,
+ item->numGlyphs, item->fontEngine(), staticText_d->font,
+ QTextCharFormat());
}
if (currentColor != oldPen.color())
setPen(oldPen);
@@ -6383,10 +6383,10 @@ static void drawTextItemDecoration(QPainter *painter, const QPointF &pos, const
painter->setBrush(oldBrush);
}
-static void drawDecorationForGlyphs(QPainter *painter, const glyph_t *glyphArray,
- const QFixedPoint *positions, int glyphCount,
- QFontEngine *fontEngine, const QFont &font,
- const QTextCharFormat &charFormat)
+Q_GUI_EXPORT void qt_draw_decoration_for_glyphs(QPainter *painter, const glyph_t *glyphArray,
+ const QFixedPoint *positions, int glyphCount,
+ QFontEngine *fontEngine, const QFont &font,
+ const QTextCharFormat &charFormat)
{
if (!(font.underline() || font.strikeOut() || font.overline()))
return;
@@ -8097,12 +8097,16 @@ start_lengthVariant:
QTextLine line = textLayout.lineAt(i);
qreal advance = line.horizontalAdvance();
- if (tf & Qt::AlignRight)
- xoff = r.width() - advance;
+ xoff = 0;
+ if (tf & Qt::AlignRight) {
+ QTextEngine *eng = textLayout.engine();
+ xoff = r.width() - advance -
+ eng->leadingSpaceWidth(eng->lines[line.lineNumber()]).toReal();
+ }
else if (tf & Qt::AlignHCenter)
- xoff = (r.width() - advance)/2;
+ xoff = (r.width() - advance) / 2;
- line.draw(painter, QPointF(r.x() + xoff + line.x(), r.y() + yoff));
+ line.draw(painter, QPointF(r.x() + xoff, r.y() + yoff));
}
if (restore) {
diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp
index 0bb2901..4744cb5 100644
--- a/src/gui/painting/qpainterpath.cpp
+++ b/src/gui/painting/qpainterpath.cpp
@@ -628,10 +628,14 @@ void QPainterPath::moveTo(const QPointF &p)
#ifdef QPP_DEBUG
printf("QPainterPath::moveTo() (%.2f,%.2f)\n", p.x(), p.y());
#endif
+
+ if (!qt_is_finite(p.x()) || !qt_is_finite(p.y())) {
#ifndef QT_NO_DEBUG
- if (qt_is_nan(p.x()) || qt_is_nan(p.y()))
- qWarning("QPainterPath::moveTo: Adding point where x or y is NaN, results are undefined");
+ qWarning("QPainterPath::moveTo: Adding point where x or y is NaN or Inf, ignoring call");
#endif
+ return;
+ }
+
ensureData();
detach();
@@ -674,10 +678,14 @@ void QPainterPath::lineTo(const QPointF &p)
#ifdef QPP_DEBUG
printf("QPainterPath::lineTo() (%.2f,%.2f)\n", p.x(), p.y());
#endif
+
+ if (!qt_is_finite(p.x()) || !qt_is_finite(p.y())) {
#ifndef QT_NO_DEBUG
- if (qt_is_nan(p.x()) || qt_is_nan(p.y()))
- qWarning("QPainterPath::lineTo: Adding point where x or y is NaN, results are undefined");
+ qWarning("QPainterPath::lineTo: Adding point where x or y is NaN or Inf, ignoring call");
#endif
+ return;
+ }
+
ensureData();
detach();
@@ -729,11 +737,15 @@ void QPainterPath::cubicTo(const QPointF &c1, const QPointF &c2, const QPointF &
printf("QPainterPath::cubicTo() (%.2f,%.2f), (%.2f,%.2f), (%.2f,%.2f)\n",
c1.x(), c1.y(), c2.x(), c2.y(), e.x(), e.y());
#endif
+
+ if (!qt_is_finite(c1.x()) || !qt_is_finite(c1.y()) || !qt_is_finite(c2.x()) || !qt_is_finite(c2.y())
+ || !qt_is_finite(e.x()) || !qt_is_finite(e.y())) {
#ifndef QT_NO_DEBUG
- if (qt_is_nan(c1.x()) || qt_is_nan(c1.y()) || qt_is_nan(c2.x()) || qt_is_nan(c2.y())
- || qt_is_nan(e.x()) || qt_is_nan(e.y()))
- qWarning("QPainterPath::cubicTo: Adding point where x or y is NaN, results are undefined");
+ qWarning("QPainterPath::cubicTo: Adding point where x or y is NaN or Inf, ignoring call");
#endif
+ return;
+ }
+
ensureData();
detach();
@@ -782,10 +794,14 @@ void QPainterPath::quadTo(const QPointF &c, const QPointF &e)
printf("QPainterPath::quadTo() (%.2f,%.2f), (%.2f,%.2f)\n",
c.x(), c.y(), e.x(), e.y());
#endif
+
+ if (!qt_is_finite(c.x()) || !qt_is_finite(c.y()) || !qt_is_finite(e.x()) || !qt_is_finite(e.y())) {
#ifndef QT_NO_DEBUG
- if (qt_is_nan(c.x()) || qt_is_nan(c.y()) || qt_is_nan(e.x()) || qt_is_nan(e.y()))
- qWarning("QPainterPath::quadTo: Adding point where x or y is NaN, results are undefined");
+ qWarning("QPainterPath::quadTo: Adding point where x or y is NaN or Inf, ignoring call");
#endif
+ return;
+ }
+
ensureData();
detach();
@@ -849,11 +865,15 @@ void QPainterPath::arcTo(const QRectF &rect, qreal startAngle, qreal sweepLength
printf("QPainterPath::arcTo() (%.2f, %.2f, %.2f, %.2f, angle=%.2f, sweep=%.2f\n",
rect.x(), rect.y(), rect.width(), rect.height(), startAngle, sweepLength);
#endif
+
+ if (!qt_is_finite(rect.x()) && !qt_is_finite(rect.y()) || !qt_is_finite(rect.width()) || !qt_is_finite(rect.height())
+ || !qt_is_finite(startAngle) || !qt_is_finite(sweepLength)) {
#ifndef QT_NO_DEBUG
- if (qt_is_nan(rect.x()) || qt_is_nan(rect.y()) || qt_is_nan(rect.width()) || qt_is_nan(rect.height())
- || qt_is_nan(startAngle) || qt_is_nan(sweepLength))
- qWarning("QPainterPath::arcTo: Adding arc where a parameter is NaN, results are undefined");
+ qWarning("QPainterPath::arcTo: Adding arc where a parameter is NaN or Inf, ignoring call");
#endif
+ return;
+ }
+
if (rect.isNull())
return;
@@ -952,10 +972,13 @@ QPointF QPainterPath::currentPosition() const
*/
void QPainterPath::addRect(const QRectF &r)
{
+ if (!qt_is_finite(r.x()) || !qt_is_finite(r.y()) || !qt_is_finite(r.width()) || !qt_is_finite(r.height())) {
#ifndef QT_NO_DEBUG
- if (qt_is_nan(r.x()) || qt_is_nan(r.y()) || qt_is_nan(r.width()) || qt_is_nan(r.height()))
- qWarning("QPainterPath::addRect: Adding rect where a parameter is NaN, results are undefined");
+ qWarning("QPainterPath::addRect: Adding rect where a parameter is NaN or Inf, ignoring call");
#endif
+ return;
+ }
+
if (r.isNull())
return;
@@ -1032,11 +1055,14 @@ void QPainterPath::addPolygon(const QPolygonF &polygon)
*/
void QPainterPath::addEllipse(const QRectF &boundingRect)
{
+ if (!qt_is_finite(boundingRect.x()) || !qt_is_finite(boundingRect.y())
+ || !qt_is_finite(boundingRect.width()) || !qt_is_finite(boundingRect.height())) {
#ifndef QT_NO_DEBUG
- if (qt_is_nan(boundingRect.x()) || qt_is_nan(boundingRect.y())
- || qt_is_nan(boundingRect.width()) || qt_is_nan(boundingRect.height()))
- qWarning("QPainterPath::addEllipse: Adding ellipse where a parameter is NaN, results are undefined");
+ qWarning("QPainterPath::addEllipse: Adding ellipse where a parameter is NaN or Inf, ignoring call");
#endif
+ return;
+ }
+
if (boundingRect.isNull())
return;
@@ -2358,10 +2384,12 @@ QDataStream &operator>>(QDataStream &s, QPainterPath &p)
s >> x;
s >> y;
Q_ASSERT(type >= 0 && type <= 3);
+ if (!qt_is_finite(x) || !qt_is_finite(y)) {
#ifndef QT_NO_DEBUG
- if (qt_is_nan(x) || qt_is_nan(y))
- qWarning("QDataStream::operator>>: Adding a NaN element to path, results are undefined");
+ qWarning("QDataStream::operator>>: NaN or Inf element found in path, skipping it");
#endif
+ continue;
+ }
QPainterPath::Element elm = { x, y, QPainterPath::ElementType(type) };
p.d_func()->elements.append(elm);
}
diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp
index 2420f31..3918ffc 100644
--- a/src/gui/painting/qtextureglyphcache.cpp
+++ b/src/gui/painting/qtextureglyphcache.cpp
@@ -178,7 +178,7 @@ bool QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
QImage QTextureGlyphCache::textureMapForGlyph(glyph_t g) const
{
#if defined(Q_WS_X11)
- if (m_transform.type() > QTransform::TxTranslate) {
+ if (m_transform.type() > QTransform::TxTranslate && m_current_fontengine->type() == QFontEngine::Freetype) {
QFontEngineFT::GlyphFormat format = QFontEngineFT::Format_None;
QImage::Format imageFormat = QImage::Format_Invalid;
switch (m_type) {
diff --git a/src/gui/s60framework/qs60mainappui.cpp b/src/gui/s60framework/qs60mainappui.cpp
index b5b8b81..4842bc5 100644
--- a/src/gui/s60framework/qs60mainappui.cpp
+++ b/src/gui/s60framework/qs60mainappui.cpp
@@ -61,6 +61,7 @@
//Animated wallpapers in Qt applications are not supported.
const TInt KAknDisableAnimationBackground = 0x02000000;
+const TInt KAknSingleClickCompatible = 0x01000000;
QT_BEGIN_NAMESPACE
@@ -117,8 +118,12 @@ void QS60MainAppUi::ConstructL()
// After 5th Edition S60, native side supports animated wallpapers.
// However, there is no support for that feature on Qt side, so indicate to
// native UI framework that this application will not support background animations.
- if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0)
- flags |= KAknDisableAnimationBackground;
+
+ // Also, add support for single touch for post 5th edition platforms.
+ // This has only impact when launching native dialogs/menus from inside QApplication.
+ if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0) {
+ flags |= (KAknDisableAnimationBackground | KAknSingleClickCompatible);
+ }
#endif
BaseConstructL(flags);
}
diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index da1528e..9958316 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -72,6 +72,7 @@
#include "qcheckbox.h"
#include "qdesktopwidget.h"
#include "qprogressbar.h"
+#include "qlabel.h"
#include "private/qtoolbarextension_p.h"
#include "private/qcombobox_p.h"
@@ -683,6 +684,13 @@ void QS60StylePrivate::setThemePalette(QWidget *widget)
if (header->viewport())
header->viewport()->setPalette(widgetPalette);
QApplication::setPalette(widgetPalette, "QHeaderView");
+ } else if (qobject_cast<QLabel *>(widget)) {
+ if (widget->window() && widget->window()->windowType() == Qt::Dialog) {
+ QPalette widgetPalette = widget->palette();
+ widgetPalette.setColor(QPalette::WindowText,
+ s60Color(QS60StyleEnums::CL_QsnTextColors, 19, 0));
+ widget->setPalette(widgetPalette);
+ }
}
}
@@ -957,6 +965,17 @@ bool QS60StylePrivate::isWidgetPressed(const QWidget *widget)
return (widget && widget == m_pressedWidget);
}
+// Generates 1*1 white pixmap as a placeholder for real texture.
+// The actual theme texture is drawn in qt_s60_fill_background().
+QPixmap QS60StylePrivate::placeHolderTexture()
+{
+ if (!m_placeHolderTexture) {
+ m_placeHolderTexture = new QPixmap(1,1);
+ m_placeHolderTexture->fill(Qt::green);
+ }
+ return *m_placeHolderTexture;
+}
+
/*!
\class QS60Style
\brief The QS60Style class provides a look and feel suitable for applications on S60.
@@ -1542,8 +1561,10 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
skinElement==QS60StylePrivate::SE_TabBarTabWestActive) {
const int borderThickness =
QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth);
- const int tabOverlap =
- QS60StylePrivate::pixelMetric(PM_TabBarTabOverlap) - borderThickness;
+ int tabOverlap = pixelMetric(PM_TabBarTabOverlap);
+ if (tabOverlap > borderThickness)
+ tabOverlap -= borderThickness;
+
const bool usesScrollButtons =
(widget) ? (qobject_cast<const QTabBar*>(widget))->usesScrollButtons() : false;
const int roomForScrollButton =
@@ -1582,9 +1603,11 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
QStyleOptionTabV3 optionTab = *tab;
QRect tr = optionTab.rect;
const bool directionMirrored = (optionTab.direction == Qt::RightToLeft);
- const int borderThickness = QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth);
- const int tabOverlap =
- QS60StylePrivate::pixelMetric(PM_TabBarTabOverlap) - borderThickness;
+ const int borderThickness =
+ QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth);
+ int tabOverlap = pixelMetric(PM_TabBarTabOverlap);
+ if (tabOverlap > borderThickness)
+ tabOverlap -= borderThickness;
const bool usesScrollButtons =
(widget) ? (qobject_cast<const QTabBar*>(widget))->usesScrollButtons() : false;
const int roomForScrollButton =
@@ -2282,8 +2305,9 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
//Need extra check since dialogs have their own theme background
if (QS60StylePrivate::canDrawThemeBackground(option->palette.base(), widget)
&& QS60StylePrivate::equalToThemePalette(option->palette.window().texture().cacheKey(), QPalette::Window)) {
+ const bool comboMenu = qobject_cast<const QComboBoxListView *>(widget);
// Add margin area to the background, to avoid background being cut for first and last item.
- const int verticalMenuAdjustment = QS60StylePrivate::pixelMetric(PM_MenuVMargin);
+ const int verticalMenuAdjustment = comboMenu ? QS60StylePrivate::pixelMetric(PM_MenuVMargin) : 0;
const QRect adjustedMenuRect = option->rect.adjusted(0, -verticalMenuAdjustment, 0, verticalMenuAdjustment);
QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_PopupBackground, painter, adjustedMenuRect, flags);
} else {
@@ -2532,6 +2556,11 @@ int QS60Style::pixelMetric(PixelMetric metric, const QStyleOption *option, const
//without having to define custom pixel metric
metricValue *= 2;
+#if defined(Q_WS_S60)
+ if (metric == PM_TabBarTabOverlap && (QSysInfo::s60Version() > QSysInfo::SV_S60_5_2))
+ metricValue = 0;
+#endif
+
return metricValue;
}
@@ -2641,13 +2670,11 @@ QSize QS60Style::sizeFromContents(ContentsType ct, const QStyleOption *opt,
case CT_ItemViewItem:
if (const QStyleOptionMenuItem *menuItem = qstyleoption_cast<const QStyleOptionMenuItem *>(opt)) {
if (menuItem->menuItemType == QStyleOptionMenuItem::Separator) {
- sz = QSize(menuItem->rect.width(), 1);
+ sz = QSize(menuItem->rect.width() - 2 * pixelMetric(PM_MenuHMargin) - 2 * QS60StylePrivate::pixelMetric(PM_FrameCornerWidth), 1);
break;
}
}
sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget);
- //native items have small empty areas at the beginning and end of menu item
- sz.setWidth(sz.width() + 2 * pixelMetric(PM_MenuHMargin) + 2 * QS60StylePrivate::pixelMetric(PM_FrameCornerWidth));
if (QS60StylePrivate::isTouchSupported()) {
//Make itemview easier to use in touch devices
sz.setHeight(sz.height() + 2 * pixelMetric(PM_FocusFrameVMargin));
@@ -3006,10 +3033,11 @@ QRect QS60Style::subElementRect(SubElement element, const QStyleOption *opt, con
ret = QCommonStyle::subElementRect(element, opt, widget);
if (const QStyleOptionTabWidgetFrame *twf = qstyleoption_cast<const QStyleOptionTabWidgetFrame *>(opt)) {
- const int tabOverlapNoBorder =
- QS60StylePrivate::pixelMetric(PM_TabBarTabOverlap);
- const int tabOverlap =
- tabOverlapNoBorder - QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth);
+ const int borderThickness =
+ QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth);
+ int tabOverlap = pixelMetric(PM_TabBarTabOverlap);
+ if (tabOverlap > borderThickness)
+ tabOverlap -= borderThickness;
const QTabWidget *tab = qobject_cast<const QTabWidget *>(widget);
int gain = (tab) ? tabOverlap * tab->count() : 0;
switch (twf->shape) {
@@ -3027,7 +3055,7 @@ QRect QS60Style::subElementRect(SubElement element, const QStyleOption *opt, con
if ((ret.right() + gain) > widget->rect().right())
gain = widget->rect().right() - ret.right();
ret.adjust(0, 0, gain, 0);
- }
+ }
}
break;
}
@@ -3115,7 +3143,7 @@ QRect QS60Style::subElementRect(SubElement element, const QStyleOption *opt, con
}
break;
case SE_ItemViewItemCheckIndicator:
- if (const QStyleOptionViewItemV2 *vopt = qstyleoption_cast<const QStyleOptionViewItemV2 *>(opt)) {
+ if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(opt)) {
const QAbstractItemView *listItem = qobject_cast<const QAbstractItemView *>(widget);
const bool singleSelection = listItem &&
@@ -3123,7 +3151,7 @@ QRect QS60Style::subElementRect(SubElement element, const QStyleOption *opt, con
listItem->selectionMode() == QAbstractItemView::NoSelection);
const bool checkBoxOnly = (vopt->features & QStyleOptionViewItemV2::HasCheckIndicator) &&
listItem &&
- singleSelection;
+ singleSelection && vopt->text.isEmpty() && vopt->icon.isNull();
// Selection check mark rect.
const int indicatorWidth = QS60StylePrivate::pixelMetric(PM_IndicatorWidth);
diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index 6a7158c..7f19c35 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -89,17 +89,25 @@ enum TSupportRelease {
ES60_5_0 = 0x0004,
ES60_5_1 = 0x0008,
ES60_5_2 = 0x0010,
+ ES60_5_3 = 0x0020,
ES60_3_X = ES60_3_1 | ES60_3_2,
// Releases before Symbian Foundation
ES60_PreSF = ES60_3_1 | ES60_3_2 | ES60_5_0,
+ // Releases before the S60 5.2
+ ES60_Pre52 = ES60_3_1 | ES60_3_2 | ES60_5_0 | ES60_5_1,
+ // Releases before S60 5.3
+ ES60_Pre53 = ES60_3_1 | ES60_3_2 | ES60_5_0 | ES60_5_1 | ES60_5_2,
// Add all new releases here
- ES60_All = ES60_3_1 | ES60_3_2 | ES60_5_0 | ES60_5_1 | ES60_5_2
+ ES60_All = ES60_3_1 | ES60_3_2 | ES60_5_0 | ES60_5_1 | ES60_5_2 | ES60_5_3
};
typedef struct {
- const TAknsItemID &skinID;
- TDrawType drawType;
- int supportInfo;
+ const TAknsItemID &skinID; // Determines default theme graphics ID.
+ TDrawType drawType; // Determines which native drawing routine is used to draw this item.
+ int supportInfo; // Defines the S60 versions that use the default graphics.
+ // These two, define new graphics that are used in releases other than partMapEntry.supportInfo defined releases.
+ // In general, these are given in numeric form to allow style compilation in earlier
+ // native releases that do not contain the new graphics.
int newMajorSkinId;
int newMinorSkinId;
} partMapEntry;
@@ -188,12 +196,14 @@ const partMapEntry QS60StyleModeSpecifics::m_partMap[] = {
/* SP_QgnGrafScrollArrowLeft */ {KAknsIIDQgnGrafScrollArrowLeft, EDrawGulIcon, ES60_All, -1,-1},
/* SP_QgnGrafScrollArrowRight */ {KAknsIIDQgnGrafScrollArrowRight, EDrawGulIcon, ES60_All, -1,-1},
/* SP_QgnGrafScrollArrowUp */ {KAknsIIDQgnGrafScrollArrowUp, EDrawGulIcon, ES60_All, -1,-1},
- /* SP_QgnGrafTabActiveL */ {KAknsIIDQgnGrafTabActiveL, EDrawIcon, ES60_All, -1,-1},
- /* SP_QgnGrafTabActiveM */ {KAknsIIDQgnGrafTabActiveM, EDrawIcon, ES60_All, -1,-1},
- /* SP_QgnGrafTabActiveR */ {KAknsIIDQgnGrafTabActiveR, EDrawIcon, ES60_All, -1,-1},
- /* SP_QgnGrafTabPassiveL */ {KAknsIIDQgnGrafTabPassiveL, EDrawIcon, ES60_All, -1,-1},
- /* SP_QgnGrafTabPassiveM */ {KAknsIIDQgnGrafTabPassiveM, EDrawIcon, ES60_All, -1,-1},
- /* SP_QgnGrafTabPassiveR */ {KAknsIIDQgnGrafTabPassiveR, EDrawIcon, ES60_All, -1,-1},
+
+ // In S60 5.3 there is a new tab graphic
+ /* SP_QgnGrafTabActiveL */ {KAknsIIDQgnGrafTabActiveL, EDrawIcon, ES60_Pre53, EAknsMajorSkin, 0x2219}, //KAknsIIDQtgFrTabActiveNormalL
+ /* SP_QgnGrafTabActiveM */ {KAknsIIDQgnGrafTabActiveM, EDrawIcon, ES60_Pre53, EAknsMajorSkin, 0x221b}, //KAknsIIDQtgFrTabActiveNormalC
+ /* SP_QgnGrafTabActiveR */ {KAknsIIDQgnGrafTabActiveR, EDrawIcon, ES60_Pre53, EAknsMajorSkin, 0x221a}, //KAknsIIDQtgFrTabActiveNormalR
+ /* SP_QgnGrafTabPassiveL */ {KAknsIIDQgnGrafTabPassiveL, EDrawIcon, ES60_Pre53, EAknsMajorSkin, 0x2221}, //KAknsIIDQtgFrTabPassiveNormalL
+ /* SP_QgnGrafTabPassiveM */ {KAknsIIDQgnGrafTabPassiveM, EDrawIcon, ES60_Pre53, EAknsMajorSkin, 0x2223}, //KAknsIIDQtgFrTabPassiveNormalC
+ /* SP_QgnGrafTabPassiveR */ {KAknsIIDQgnGrafTabPassiveR, EDrawIcon, ES60_Pre53, EAknsMajorSkin, 0x2222}, //KAknsIIDQtgFrTabPassiveNormalR
// In 3.1 there is no slider groove.
/* SP_QgnGrafNsliderEndLeft */ {KAknsIIDNone, EDrawIcon, ES60_3_1, EAknsMajorGeneric, 0x19cf /* KAknsIIDQgnGrafNsliderEndLeft */},
@@ -1140,7 +1150,8 @@ bool QS60StyleModeSpecifics::checkSupport(const int supportedRelease)
(currentRelease == QSysInfo::SV_S60_3_2 && supportedRelease & ES60_3_2) ||
(currentRelease == QSysInfo::SV_S60_5_0 && supportedRelease & ES60_5_0) ||
(currentRelease == QSysInfo::SV_S60_5_1 && supportedRelease & ES60_5_1) ||
- (currentRelease == QSysInfo::SV_S60_5_2 && supportedRelease & ES60_5_2));
+ (currentRelease == QSysInfo::SV_S60_5_2 && supportedRelease & ES60_5_2) ||
+ (currentRelease == QSysInfo::SV_S60_5_3 && supportedRelease & ES60_5_3) );
}
TAknsItemID QS60StyleModeSpecifics::partSpecificThemeId(int part)
@@ -1429,17 +1440,6 @@ QPixmap QS60StylePrivate::backgroundTexture(bool skipCreation)
return *m_background;
}
-// Generates 1*1 white pixmap as a placeholder for real texture.
-// The actual theme texture is drawn in qt_s60_fill_background().
-QPixmap QS60StylePrivate::placeHolderTexture()
-{
- if (!m_placeHolderTexture) {
- m_placeHolderTexture = new QPixmap(1,1);
- m_placeHolderTexture->fill(Qt::white);
- }
- return *m_placeHolderTexture;
-}
-
QSize QS60StylePrivate::screenSize()
{
return QSize(S60->screenWidthInPixels, S60->screenHeightInPixels);
diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp
index a4e7c38..369a0f0 100644
--- a/src/gui/styles/qstylesheetstyle.cpp
+++ b/src/gui/styles/qstylesheetstyle.cpp
@@ -3339,6 +3339,13 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
}
break;
+ case CE_FocusFrame:
+ if (!rule.hasNativeBorder()) {
+ rule.drawBorder(p, opt->rect);
+ return;
+ }
+ break;
+
case CE_PushButton:
if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(opt)) {
if (rule.hasDrawable() || rule.hasBox() || rule.hasPosition() || rule.hasPalette() ||
diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
index e89b508..9c90964 100644
--- a/src/gui/text/qfontengine_ft.cpp
+++ b/src/gui/text/qfontengine_ft.cpp
@@ -1800,10 +1800,12 @@ glyph_metrics_t QFontEngineFT::boundingBox(glyph_t glyph, const QTransform &matr
} else {
glyphSet = &defaultGlyphSet;
}
+ bool needsDelete = false;
Glyph * g = glyphSet->getGlyph(glyph);
if (!g) {
face = lockFace();
g = loadGlyphMetrics(glyphSet, glyph);
+ needsDelete = true;
}
if (g) {
@@ -1812,6 +1814,8 @@ glyph_metrics_t QFontEngineFT::boundingBox(glyph_t glyph, const QTransform &matr
overall.width = g->width;
overall.height = g->height;
overall.xoff = g->advance;
+ if (needsDelete)
+ delete g;
} else {
int left = FLOOR(face->glyph->metrics.horiBearingX);
int right = CEIL(face->glyph->metrics.horiBearingX + face->glyph->metrics.width);
diff --git a/src/gui/text/qfontengine_mac.mm b/src/gui/text/qfontengine_mac.mm
index 42b9402..05e3d3c 100644
--- a/src/gui/text/qfontengine_mac.mm
+++ b/src/gui/text/qfontengine_mac.mm
@@ -144,7 +144,7 @@ void qmacfontengine_gamma_correct(QImage *image)
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
-QCoreTextFontEngineMulti::QCoreTextFontEngineMulti(const ATSFontFamilyRef &, const ATSFontRef &atsFontRef, const QFontDef &fontDef, bool kerning)
+QCoreTextFontEngineMulti::QCoreTextFontEngineMulti(const ATSFontFamilyRef &atsFamilyRef, const ATSFontRef &atsFontRef, const QFontDef &fontDef, bool kerning)
: QFontEngineMulti(0)
{
this->fontDef = fontDef;
@@ -162,6 +162,8 @@ QCoreTextFontEngineMulti::QCoreTextFontEngineMulti(const ATSFontFamilyRef &, con
QCFString name;
ATSFontGetName(atsFontRef, kATSOptionFlagsDefault, &name);
+ if (QString(name).isEmpty())
+ ATSFontFamilyGetName(atsFamilyRef, kATSOptionFlagsDefault, &name);
transform = CGAffineTransformIdentity;
if (fontDef.stretch != 100) {
diff --git a/src/gui/text/qfragmentmap_p.h b/src/gui/text/qfragmentmap_p.h
index 501bfff..4057142 100644
--- a/src/gui/text/qfragmentmap_p.h
+++ b/src/gui/text/qfragmentmap_p.h
@@ -195,6 +195,10 @@ public:
head->root = new_root;
}
+ inline bool isValid(uint n) const {
+ return n > 0 && n != head->freelist;
+ }
+
union {
Header *head;
Fragment *fragments;
@@ -854,6 +858,7 @@ public:
return data.fragment(index);
}
inline uint position(uint node, uint field = 0) const { return data.position(node, field); }
+ inline bool isValid(uint n) const { return data.isValid(n); }
inline uint next(uint n) const { return data.next(n); }
inline uint previous(uint n) const { return data.previous(n); }
inline uint size(uint node, uint field = 0) const { return data.size(node, field); }
diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp
index 1a81394..88e0573 100644
--- a/src/gui/text/qtextcontrol.cpp
+++ b/src/gui/text/qtextcontrol.cpp
@@ -676,7 +676,7 @@ void QTextControlPrivate::extendWordwiseSelection(int suggestedNewPosition, qrea
const qreal wordEndX = line.cursorToX(curs.position() - blockPos) + blockCoordinates.x();
- if (mouseXPosition < wordStartX || mouseXPosition > wordEndX)
+ if (!wordSelectionEnabled && (mouseXPosition < wordStartX || mouseXPosition > wordEndX))
return;
// keep the already selected word even when moving to the left
@@ -1518,7 +1518,7 @@ void QTextControlPrivate::mousePressEvent(QEvent *e, Qt::MouseButton button, con
const QTextCursor oldSelection = cursor;
const int oldCursorPos = cursor.position();
- mousePressed = true;
+ mousePressed = (interactionFlags & Qt::TextSelectableByMouse);
#ifndef QT_NO_DRAGANDDROP
mightStartDrag = false;
#endif
@@ -1578,8 +1578,10 @@ void QTextControlPrivate::mousePressEvent(QEvent *e, Qt::MouseButton button, con
emit q->cursorPositionChanged();
_q_updateCurrentCharFormatAndSelection();
} else {
- if (cursor.position() != oldCursorPos)
+ if (cursor.position() != oldCursorPos) {
emit q->cursorPositionChanged();
+ emit q->microFocusChanged();
+ }
selectionChanged();
}
repaintOldAndNewSelection(oldSelection);
@@ -1607,13 +1609,11 @@ void QTextControlPrivate::mouseMoveEvent(QEvent *e, Qt::MouseButton button, cons
if (!(buttons & Qt::LeftButton))
return;
- const bool selectable = interactionFlags & Qt::TextSelectableByMouse;
const bool editable = interactionFlags & Qt::TextEditable;
- if (!selectable && !editable)
- return;
-
if (!(mousePressed
+ || editable
+ || mightStartDrag
|| selectedWordOnDoubleClick.hasSelection()
|| selectedBlockOnTrippleClick.hasSelection()))
return;
@@ -1627,7 +1627,7 @@ void QTextControlPrivate::mouseMoveEvent(QEvent *e, Qt::MouseButton button, cons
return;
}
- if (!selectable)
+ if (!mousePressed)
return;
const qreal mouseX = qreal(mousePos.x());
@@ -1695,10 +1695,8 @@ void QTextControlPrivate::mouseReleaseEvent(QEvent *e, Qt::MouseButton button, c
if (mousePressed) {
mousePressed = false;
#ifndef QT_NO_CLIPBOARD
- if (interactionFlags & Qt::TextSelectableByMouse) {
- setClipboardSelection();
- selectionChanged(true);
- }
+ setClipboardSelection();
+ selectionChanged(true);
} else if (button == Qt::MidButton
&& (interactionFlags & Qt::TextEditable)
&& QApplication::clipboard()->supportsSelection()) {
@@ -1950,6 +1948,7 @@ void QTextControlPrivate::inputMethodEvent(QInputMethodEvent *e)
if (isGettingInput)
layout->setPreeditArea(cursor.position() - block.position(), e->preeditString());
QList<QTextLayout::FormatRange> overrides;
+ const int oldPreeditCursor = preeditCursor;
preeditCursor = e->preeditString().length();
hideCursor = false;
for (int i = 0; i < e->attributes().size(); ++i) {
@@ -1970,6 +1969,8 @@ void QTextControlPrivate::inputMethodEvent(QInputMethodEvent *e)
}
layout->setAdditionalFormats(overrides);
cursor.endEditBlock();
+ if (oldPreeditCursor != preeditCursor)
+ emit q->microFocusChanged();
}
QVariant QTextControl::inputMethodQuery(Qt::InputMethodQuery property) const
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index 4378c62..4f86cff 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -2681,6 +2681,22 @@ void QTextEngine::resolveAdditionalFormats() const
specialData->resolvedFormatIndices = indices;
}
+QFixed QTextEngine::leadingSpaceWidth(const QScriptLine &line)
+{
+ if (!line.hasTrailingSpaces
+ || (option.flags() & QTextOption::IncludeTrailingSpaces)
+ || !isRightToLeft())
+ return QFixed();
+
+ int pos = line.length;
+ const HB_CharAttributes *attributes = this->attributes();
+ if (!attributes)
+ return QFixed();
+ while (pos > 0 && attributes[line.from + pos - 1].whiteSpace)
+ --pos;
+ return width(line.from + pos, line.length - pos);
+}
+
QStackTextEngine::QStackTextEngine(const QString &string, const QFont &f)
: QTextEngine(string, f),
_layoutData(string, _memory, MemSize)
diff --git a/src/gui/text/qtextengine_p.h b/src/gui/text/qtextengine_p.h
index 34723ab..67d7453 100644
--- a/src/gui/text/qtextengine_p.h
+++ b/src/gui/text/qtextengine_p.h
@@ -592,6 +592,7 @@ public:
QString elidedText(Qt::TextElideMode mode, const QFixed &width, int flags = 0) const;
void shapeLine(const QScriptLine &line);
+ QFixed leadingSpaceWidth(const QScriptLine &line);
private:
void setBoundary(int strPos) const;
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
index 905f81b..692620f 100644
--- a/src/gui/text/qtextlayout.cpp
+++ b/src/gui/text/qtextlayout.cpp
@@ -64,23 +64,6 @@ QT_BEGIN_NAMESPACE
#define SuppressText 0x5012
#define SuppressBackground 0x513
-static inline QFixed leadingSpaceWidth(QTextEngine *eng, const QScriptLine &line)
-{
- if (!line.hasTrailingSpaces
- || (eng->option.flags() & QTextOption::IncludeTrailingSpaces)
- || !(eng->option.alignment() & Qt::AlignRight)
- || !eng->isRightToLeft())
- return QFixed();
-
- int pos = line.length;
- const HB_CharAttributes *attributes = eng->attributes();
- if (!attributes)
- return QFixed();
- while (pos > 0 && attributes[line.from + pos - 1].whiteSpace)
- --pos;
- return eng->width(line.from + pos, line.length - pos);
-}
-
static QFixed alignLine(QTextEngine *eng, const QScriptLine &line)
{
QFixed x = 0;
@@ -91,7 +74,7 @@ static QFixed alignLine(QTextEngine *eng, const QScriptLine &line)
if (align & Qt::AlignJustify && eng->isRightToLeft())
align = Qt::AlignRight;
if (align & Qt::AlignRight)
- x = line.width - (line.textAdvance + leadingSpaceWidth(eng, line));
+ x = line.width - (line.textAdvance + eng->leadingSpaceWidth(line));
else if (align & Qt::AlignHCenter)
x = (line.width - line.textAdvance)/2;
}
diff --git a/src/gui/text/qtextobject.cpp b/src/gui/text/qtextobject.cpp
index 94f2fc7..2a93f67 100644
--- a/src/gui/text/qtextobject.cpp
+++ b/src/gui/text/qtextobject.cpp
@@ -1488,7 +1488,7 @@ QTextBlock::iterator QTextBlock::end() const
*/
QTextBlock QTextBlock::next() const
{
- if (!isValid())
+ if (!isValid() || !p->blockMap().isValid(n))
return QTextBlock();
return QTextBlock(p, p->blockMap().next(n));
diff --git a/src/gui/util/qdesktopservices_s60.cpp b/src/gui/util/qdesktopservices_s60.cpp
index 96860df..8caeb74 100644
--- a/src/gui/util/qdesktopservices_s60.cpp
+++ b/src/gui/util/qdesktopservices_s60.cpp
@@ -314,7 +314,7 @@ static bool handleUrl(const QUrl &url)
if (!url.isValid())
return false;
- QString urlString(url.toString());
+ QString urlString(url.toEncoded());
TPtrC urlPtr(qt_QString2TPtrC(urlString));
TRAPD( err, handleUrlL(urlPtr));
return err ? false : true;
diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp
index c1ae3f9..04ab801 100644
--- a/src/gui/widgets/qcombobox.cpp
+++ b/src/gui/widgets/qcombobox.cpp
@@ -398,7 +398,7 @@ void QComboBoxPrivateContainer::leaveEvent(QEvent *)
#ifdef Q_WS_MAC
QStyleOptionComboBox opt = comboStyleOption();
if (combo->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, combo))
- view->setCurrentIndex(QModelIndex());
+ view->clearSelection();
#endif
}
@@ -671,8 +671,8 @@ bool QComboBoxPrivateContainer::eventFilter(QObject *o, QEvent *e)
if (vector.manhattanLength() > 9 && blockMouseReleaseTimer.isActive())
blockMouseReleaseTimer.stop();
QModelIndex indexUnderMouse = view->indexAt(m->pos());
- if (indexUnderMouse.isValid() && indexUnderMouse != view->currentIndex()
- && !QComboBoxDelegate::isSeparator(indexUnderMouse)) {
+ if (indexUnderMouse.isValid()
+ && !QComboBoxDelegate::isSeparator(indexUnderMouse)) {
view->setCurrentIndex(indexUnderMouse);
}
}
@@ -704,11 +704,13 @@ void QComboBoxPrivateContainer::hideEvent(QHideEvent *)
{
emit resetButton();
combo->update();
+#ifndef QT_NO_GRAPHICSVIEW
// QGraphicsScenePrivate::removePopup closes the combo box popup, it hides it non-explicitly.
// Hiding/showing the QComboBox after this will unexpectedly show the popup as well.
// Re-hiding the popup container makes sure it is explicitly hidden.
if (QGraphicsProxyWidget *proxy = graphicsProxyWidget())
proxy->hide();
+#endif
}
void QComboBoxPrivateContainer::mousePressEvent(QMouseEvent *e)
diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp
index 5a281ad..8d4a90e 100644
--- a/src/gui/widgets/qlinecontrol.cpp
+++ b/src/gui/widgets/qlinecontrol.cpp
@@ -254,12 +254,20 @@ void QLineControl::setSelection(int start, int length)
m_selstart = start;
m_selend = qMin(start + length, (int)m_text.length());
m_cursor = m_selend;
- } else {
+ } else if (length < 0){
if (start == m_selend && start + length == m_selstart)
return;
m_selstart = qMax(start + length, 0);
m_selend = start;
m_cursor = m_selstart;
+ } else if (m_selstart != m_selend) {
+ m_selstart = 0;
+ m_selend = 0;
+ m_cursor = start;
+ } else {
+ m_cursor = start;
+ emitCursorPositionChanged();
+ return;
}
emit selectionChanged();
emitCursorPositionChanged();
@@ -427,6 +435,8 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event)
c += event->commitString().length() - qMin(-event->replacementStart(), event->replacementLength());
m_cursor += event->replacementStart();
+ if (m_cursor < 0)
+ m_cursor = 0;
// insert commit string
if (event->replacementLength()) {
@@ -435,11 +445,11 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event)
removeSelectedText();
}
if (!event->commitString().isEmpty()) {
- insert(event->commitString());
+ internalInsert(event->commitString());
cursorPositionChanged = true;
}
- m_cursor = qMin(c, m_text.length());
+ m_cursor = qBound(0, c, m_text.length());
for (int i = 0; i < event->attributes().size(); ++i) {
const QInputMethodEvent::Attribute &a = event->attributes().at(i);
diff --git a/src/gui/widgets/qmainwindow.cpp b/src/gui/widgets/qmainwindow.cpp
index d8f8e91..0db5bba 100644
--- a/src/gui/widgets/qmainwindow.cpp
+++ b/src/gui/widgets/qmainwindow.cpp
@@ -78,7 +78,6 @@ public:
: layout(0), explicitIconSize(false), toolButtonStyle(Qt::ToolButtonIconOnly)
#ifdef Q_WS_MAC
, useHIToolBar(false)
- , activateUnifiedToolbarAfterFullScreen(false)
#endif
#if !defined(QT_NO_DOCKWIDGET) && !defined(QT_NO_CURSOR)
, hasOldCursor(false) , cursorAdjusted(false)
@@ -90,7 +89,6 @@ public:
Qt::ToolButtonStyle toolButtonStyle;
#ifdef Q_WS_MAC
bool useHIToolBar;
- bool activateUnifiedToolbarAfterFullScreen;
#endif
void init();
QList<int> hoverSeparator;
diff --git a/src/gui/widgets/qmainwindowlayout.cpp b/src/gui/widgets/qmainwindowlayout.cpp
index 6bc07e1..51267c1 100644
--- a/src/gui/widgets/qmainwindowlayout.cpp
+++ b/src/gui/widgets/qmainwindowlayout.cpp
@@ -1695,6 +1695,7 @@ QMainWindowLayout::QMainWindowLayout(QMainWindow *mainwindow, QLayout *parentLay
, gapIndicator(new QRubberBand(QRubberBand::Rectangle, mainwindow))
#endif //QT_NO_RUBBERBAND
#ifdef Q_WS_MAC
+ , activateUnifiedToolbarAfterFullScreen(false)
, blockVisiblityCheck(false)
#endif
{
diff --git a/src/gui/widgets/qmainwindowlayout_p.h b/src/gui/widgets/qmainwindowlayout_p.h
index 489e913..289a49c 100644
--- a/src/gui/widgets/qmainwindowlayout_p.h
+++ b/src/gui/widgets/qmainwindowlayout_p.h
@@ -334,7 +334,6 @@ public:
void removeFromMacToolbar(QToolBar *toolbar);
void cleanUpMacToolbarItems();
void fixSizeInUnifiedToolbar(QToolBar *tb) const;
- bool useHIToolBar;
bool activateUnifiedToolbarAfterFullScreen;
void syncUnifiedToolbarVisibility();
bool blockVisiblityCheck;
diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp
index 2f4bb4b..d573ebf 100644
--- a/src/gui/widgets/qmenu.cpp
+++ b/src/gui/widgets/qmenu.cpp
@@ -82,6 +82,10 @@
# include <private/qt_cocoa_helpers_mac_p.h>
#endif
+#ifdef Q_WS_S60
+# include "private/qt_s60_p.h"
+#endif
+
QT_BEGIN_NAMESPACE
@@ -172,6 +176,14 @@ void QMenuPrivate::init()
q->addAction(selectAction);
q->addAction(cancelAction);
#endif
+
+#ifdef Q_WS_S60
+ if (S60->avkonComponentsSupportTransparency) {
+ bool noSystemBackground = q->testAttribute(Qt::WA_NoSystemBackground);
+ q->setAttribute(Qt::WA_TranslucentBackground); // also sets WA_NoSystemBackground
+ q->setAttribute(Qt::WA_NoSystemBackground, noSystemBackground); // restore system background attribute
+ }
+#endif
}
int QMenuPrivate::scrollerHeight() const
diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 700b455..bf2fa8f 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -557,6 +557,12 @@ bool QHttpNetworkConnectionChannel::ensureConnection()
connectHost = connection->d_func()->networkProxy.hostName();
connectPort = connection->d_func()->networkProxy.port();
}
+ if (socket->proxy().type() == QNetworkProxy::HttpProxy) {
+ // Make user-agent field available to HTTP proxy socket engine (QTBUG-17223)
+ QByteArray value = request.headerField("user-agent");
+ if (!value.isEmpty())
+ socket->setProperty("_q_user-agent", value);
+ }
#endif
if (connection->d_func()->encrypt) {
#ifndef QT_NO_OPENSSL
diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp
index e608005..d329c10 100644
--- a/src/network/access/qhttpnetworkreply.cpp
+++ b/src/network/access/qhttpnetworkreply.cpp
@@ -811,8 +811,14 @@ bool QHttpNetworkReplyPrivate::expectContent()
return false;
if (request.operation() == QHttpNetworkRequest::Head)
return !shouldEmitSignals();
- if (contentLength() == 0)
+ qint64 expectedContentLength = contentLength();
+ if (expectedContentLength == 0)
return false;
+ if (expectedContentLength == -1 && bodyLength == 0) {
+ // The content-length header was stripped, but its value was 0.
+ // This would be the case for an explicitly zero-length compressed response.
+ return false;
+ }
return true;
}
diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp
index 108ac68..7c90f68 100644
--- a/src/network/access/qnetworkaccesshttpbackend.cpp
+++ b/src/network/access/qnetworkaccesshttpbackend.cpp
@@ -1001,14 +1001,11 @@ QNetworkCacheMetaData QNetworkAccessHttpBackend::fetchCacheMetaData(const QNetwo
if (hop_by_hop)
continue;
- // for 4.6.0, we were planning to not store the date header in the
- // cached resource; through that we planned to reduce the number
- // of writes to disk when using a QNetworkDiskCache (i.e. don't
- // write to disk when only the date changes).
- // However, without the date we cannot calculate the age of the page
- // anymore.
- //if (header == "date")
- //continue;
+ // we are currently not using the date header to determine the expiration time of a page,
+ // but only the "Expires", "max-age" and "s-maxage" headers, see
+ // QNetworkAccessHttpBackend::validateCache() and below ("metaData.setExpirationDate()").
+ if (header == "date")
+ continue;
// Don't store Warning 1xx headers
if (header == "warning") {
diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp
index 5b518de..fc7c38d 100644
--- a/src/network/access/qnetworkaccessmanager.cpp
+++ b/src/network/access/qnetworkaccessmanager.cpp
@@ -916,7 +916,7 @@ QNetworkAccessManager::NetworkAccessibility QNetworkAccessManager::networkAccess
device will be uploaded to the server; in that case, data must be open for
reading and must remain valid until the finished() signal is emitted for this reply.
- \note This feature is currently available for HTTP only.
+ \note This feature is currently available for HTTP(S) only.
\sa get(), post(), put(), deleteResource()
*/
diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp
index 894df79..09fab51 100644
--- a/src/network/access/qnetworkreplyimpl.cpp
+++ b/src/network/access/qnetworkreplyimpl.cpp
@@ -775,6 +775,8 @@ void QNetworkReplyImpl::abort()
if (d->state != QNetworkReplyImplPrivate::Finished) {
// emit signals
d->error(OperationCanceledError, tr("Operation canceled"));
+ if (d->state == QNetworkReplyImplPrivate::WaitingForSession)
+ d->state = QNetworkReplyImplPrivate::Working;
d->finished();
}
d->state = QNetworkReplyImplPrivate::Aborted;
@@ -913,10 +915,6 @@ bool QNetworkReplyImplPrivate::migrateBackend()
if (state == Finished || state == Aborted)
return true;
- // Backend does not support resuming download.
- if (!backend->canResume())
- return false;
-
// Request has outgoing data, not migrating.
if (outgoingData)
return false;
@@ -925,6 +923,10 @@ bool QNetworkReplyImplPrivate::migrateBackend()
if (copyDevice)
return true;
+ // Backend does not support resuming download.
+ if (!backend->canResume())
+ return false;
+
state = QNetworkReplyImplPrivate::Reconnecting;
if (backend) {
diff --git a/src/network/bearer/qnetworkconfigmanager.cpp b/src/network/bearer/qnetworkconfigmanager.cpp
index dc4e4f7..8634b6b 100644
--- a/src/network/bearer/qnetworkconfigmanager.cpp
+++ b/src/network/bearer/qnetworkconfigmanager.cpp
@@ -196,6 +196,9 @@ QNetworkConfigurationManagerPrivate *qNetworkConfigurationManagerPrivate()
/*!
Constructs a QNetworkConfigurationManager with the given \a parent.
+
+ Note that to ensure a valid list of current configurations immediately available, updating
+ is done during construction which causes some delay.
*/
QNetworkConfigurationManager::QNetworkConfigurationManager( QObject* parent )
: QObject(parent)
diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp
index c321328..f703354 100644
--- a/src/network/bearer/qnetworkconfigmanager_p.cpp
+++ b/src/network/bearer/qnetworkconfigmanager_p.cpp
@@ -392,8 +392,6 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations()
this, SLOT(configurationRemoved(QNetworkConfigurationPrivatePointer)));
connect(engine, SIGNAL(configurationChanged(QNetworkConfigurationPrivatePointer)),
this, SLOT(configurationChanged(QNetworkConfigurationPrivatePointer)));
-
- QMetaObject::invokeMethod(engine, "initialize");
}
}
@@ -423,8 +421,19 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations()
startPolling();
}
- if (firstUpdate)
+ if (firstUpdate) {
firstUpdate = false;
+ QList<QBearerEngine*> enginesToInitialize = sessionEngines; //shallow copy the list in case it is modified when we unlock mutex
+ Qt::ConnectionType connectionType;
+ if (QCoreApplicationPrivate::mainThread() == QThread::currentThread())
+ connectionType = Qt::DirectConnection;
+ else
+ connectionType = Qt::BlockingQueuedConnection;
+ locker.unlock();
+ foreach (QBearerEngine* engine, enginesToInitialize) {
+ QMetaObject::invokeMethod(engine, "initialize", connectionType);
+ }
+ }
}
void QNetworkConfigurationManagerPrivate::performAsyncConfigurationUpdate()
diff --git a/src/network/bearer/qsharednetworksession.cpp b/src/network/bearer/qsharednetworksession.cpp
index 28ca173..fcb0128 100644
--- a/src/network/bearer/qsharednetworksession.cpp
+++ b/src/network/bearer/qsharednetworksession.cpp
@@ -59,6 +59,11 @@ inline QSharedNetworkSessionManager* sharedNetworkSessionManager()
return rv;
}
+static void doDeleteLater(QObject* obj)
+{
+ obj->deleteLater();
+}
+
QSharedPointer<QNetworkSession> QSharedNetworkSessionManager::getSession(QNetworkConfiguration config)
{
QSharedNetworkSessionManager *m(sharedNetworkSessionManager());
@@ -69,7 +74,7 @@ QSharedPointer<QNetworkSession> QSharedNetworkSessionManager::getSession(QNetwor
return p;
}
//otherwise make one
- QSharedPointer<QNetworkSession> session(new QNetworkSession(config));
+ QSharedPointer<QNetworkSession> session(new QNetworkSession(config), doDeleteLater);
m->sessions[config] = session;
return session;
}
diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp
index 6098bde..7f251a7 100644
--- a/src/network/kernel/qnetworkinterface_unix.cpp
+++ b/src/network/kernel/qnetworkinterface_unix.cpp
@@ -219,7 +219,7 @@ static QNetworkInterfacePrivate *findInterface(int socket, QList<QNetworkInterfa
#ifdef SIOCGIFHWADDR
// Get the HW address
if (qt_safe_ioctl(socket, SIOCGIFHWADDR, &req) >= 0) {
- uchar *addr = (uchar *)&req.ifr_addr;
+ uchar *addr = (uchar *)req.ifr_addr.sa_data;
iface->hardwareAddress = iface->makeHwAddress(6, addr);
}
#endif
diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp
index f927ae2..0dc08d9 100644
--- a/src/network/socket/qabstractsocket.cpp
+++ b/src/network/socket/qabstractsocket.cpp
@@ -549,6 +549,10 @@ bool QAbstractSocketPrivate::initSocketLayer(QAbstractSocket::NetworkLayerProtoc
q->setErrorString(QAbstractSocket::tr("Operation on socket is not supported"));
return false;
}
+#ifndef QT_NO_NETWORKPROXY
+ //copy user agent to socket engine (if it has been set)
+ socketEngine->setProperty("_q_user-agent", q->property("_q_user-agent"));
+#endif
if (!socketEngine->initialize(q->socketType(), protocol)) {
#if defined (QABSTRACTSOCKET_DEBUG)
qDebug("QAbstractSocketPrivate::initSocketLayer(%s, %s) failed (%s)",
diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp
index a338d97..cebff34 100644
--- a/src/network/socket/qhttpsocketengine.cpp
+++ b/src/network/socket/qhttpsocketengine.cpp
@@ -467,7 +467,13 @@ void QHttpSocketEngine::slotSocketConnected()
data += path;
data += " HTTP/1.1\r\n";
data += "Proxy-Connection: keep-alive\r\n"
- "User-Agent: Mozilla/5.0\r\n"
+ "User-Agent: ";
+ QVariant v = property("_q_user-agent");
+ if (v.isValid())
+ data += v.toByteArray();
+ else
+ data += "Mozilla/5.0";
+ data += "\r\n"
"Host: " + peerAddress + "\r\n";
QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(d->authenticator);
//qDebug() << "slotSocketConnected: priv=" << priv << (priv ? (int)priv->method : -1);
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp
index 4252123..cf95adf 100644
--- a/src/network/ssl/qsslsocket.cpp
+++ b/src/network/ssl/qsslsocket.cpp
@@ -1698,6 +1698,8 @@ void QSslSocket::connectToHostImplementation(const QString &hostName, quint16 po
}
#ifndef QT_NO_NETWORKPROXY
d->plainSocket->setProxy(proxy());
+ //copy user agent down to the plain socket (if it has been set)
+ d->plainSocket->setProperty("_q_user-agent", property("_q_user-agent"));
#endif
QIODevice::open(openMode);
d->plainSocket->connectToHost(hostName, port, openMode);
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
index 312d66f..0ffc7af 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
@@ -306,7 +306,7 @@ void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph)
// time.
for (int i = 0; i < maskHeight; ++i)
- glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y + i, maskWidth, 1, GL_ALPHA, GL_UNSIGNED_BYTE, mask.scanLine(i));
+ glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y + i, qMin(c.w, maskWidth), 1, GL_ALPHA, GL_UNSIGNED_BYTE, mask.scanLine(i));
}
}
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index ded7aa8..b755153 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -69,6 +69,7 @@
#if !defined(QT_OPENGL_ES_1)
#include "gl2paintengineex/qpaintengineex_opengl2_p.h"
+#include <private/qwindowsurface_gl_p.h>
#endif
#ifndef QT_OPENGL_ES_2
@@ -86,7 +87,6 @@
#include <private/qpixmapdata_p.h>
#include <private/qpixmapdata_gl_p.h>
#include <private/qglpixelbuffer_p.h>
-#include <private/qwindowsurface_gl_p.h>
#include <private/qimagepixmapcleanuphooks_p.h>
#include "qcolormap.h"
#include "qfile.h"
diff --git a/src/opengl/qgl_symbian.cpp b/src/opengl/qgl_symbian.cpp
index 1b41db4..ab37977 100644
--- a/src/opengl/qgl_symbian.cpp
+++ b/src/opengl/qgl_symbian.cpp
@@ -49,6 +49,9 @@
#include <private/qpaintengine_opengl_p.h>
#include <private/qwidget_p.h> // to access QWExtra
#include <private/qnativeimagehandleprovider_p.h>
+#include <private/qapplication_p.h>
+#include <private/qgraphicssystem_p.h>
+#include <private/qgraphicssystemex_symbian_p.h>
#include "qgl_egl_p.h"
#include "qpixmapdata_gl_p.h"
#include "qgltexturepool_p.h"
@@ -180,6 +183,15 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) // almost same as
d->ownsEglContext = true;
d->eglContext->setApi(QEgl::OpenGL);
+ QGraphicsSystemEx *ex = QApplicationPrivate::graphicsSystem()->platformExtension();
+ QSymbianGraphicsSystemEx *symex = static_cast<QSymbianGraphicsSystemEx*>(ex);
+ if (symex && !symex->hasBCM2727()) {
+ // Most likely we have hw support for multisampling
+ // so let's enable it.
+ d->glFormat.setSampleBuffers(1);
+ d->glFormat.setSamples(4);
+ }
+
// If the device is a widget with WA_TranslucentBackground set, make sure the glFormat
// has the alpha channel option set:
if (devType == QInternal::Widget) {
@@ -229,20 +241,20 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) // almost same as
d->eglSurface = QEgl::createSurface(device(), d->eglContext->config());
- eglGetError(); // Clear error state first.
+ eglGetError(); // Clear error state first.
#ifdef QGL_NO_PRESERVED_SWAP
- eglSurfaceAttrib(QEgl::display(), d->eglSurface,
- EGL_SWAP_BEHAVIOR, EGL_BUFFER_DESTROYED);
+ eglSurfaceAttrib(QEgl::display(), d->eglSurface,
+ EGL_SWAP_BEHAVIOR, EGL_BUFFER_DESTROYED);
- if (eglGetError() != EGL_SUCCESS)
- qWarning("QGLContext: could not enable destroyed swap behaviour");
+ if (eglGetError() != EGL_SUCCESS)
+ qWarning("QGLContext: could not enable destroyed swap behaviour");
#else
- eglSurfaceAttrib(QEgl::display(), d->eglSurface,
- EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
+ eglSurfaceAttrib(QEgl::display(), d->eglSurface,
+ EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
- if (eglGetError() != EGL_SUCCESS)
- qWarning("QGLContext: could not enable preserved swap behaviour");
+ if (eglGetError() != EGL_SUCCESS)
+ qWarning("QGLContext: could not enable preserved swap behaviour");
#endif
setWindowCreated(true);
diff --git a/src/opengl/qglpaintdevice.cpp b/src/opengl/qglpaintdevice.cpp
index ae61ca1..0e879df 100644
--- a/src/opengl/qglpaintdevice.cpp
+++ b/src/opengl/qglpaintdevice.cpp
@@ -43,13 +43,13 @@
#include <private/qgl_p.h>
#include <private/qglpixelbuffer_p.h>
#include <private/qglframebufferobject_p.h>
-#include <private/qwindowsurface_gl_p.h>
#ifdef Q_WS_X11
#include <private/qpixmapdata_x11gl_p.h>
#endif
#if !defined(QT_OPENGL_ES_1)
#include <private/qpixmapdata_gl_p.h>
+#include <private/qwindowsurface_gl_p.h>
#endif
QT_BEGIN_NAMESPACE
diff --git a/src/opengl/qgraphicssystem_gl.cpp b/src/opengl/qgraphicssystem_gl.cpp
index 0aa3c2e..5a01d8c 100644
--- a/src/opengl/qgraphicssystem_gl.cpp
+++ b/src/opengl/qgraphicssystem_gl.cpp
@@ -104,11 +104,17 @@ QWindowSurface *QGLGraphicsSystem::createWindowSurface(QWidget *widget) const
return new QGLWindowSurface(widget);
}
-#ifdef QGL_USE_TEXTURE_POOL
-void QGLGraphicsSystem::releaseCachedResources()
+#ifdef Q_OS_SYMBIAN
+void QGLGraphicsSystem::releaseCachedGpuResources()
{
QGLTexturePool::instance()->hibernate();
}
+
+QGraphicsSystemEx* QGLGraphicsSystem::platformExtension()
+{
+ return this;
+}
#endif
+
QT_END_NAMESPACE
diff --git a/src/opengl/qgraphicssystem_gl_p.h b/src/opengl/qgraphicssystem_gl_p.h
index 5829dcc..5372443 100644
--- a/src/opengl/qgraphicssystem_gl_p.h
+++ b/src/opengl/qgraphicssystem_gl_p.h
@@ -55,11 +55,19 @@
#include "private/qgraphicssystem_p.h"
+#ifdef Q_OS_SYMBIAN
+#include "private/qgraphicssystemex_symbian_p.h"
+#endif
+
#include <QMap>
QT_BEGIN_NAMESPACE
class Q_OPENGL_EXPORT QGLGraphicsSystem : public QGraphicsSystem
+#ifdef Q_OS_SYMBIAN
+ , public QSymbianGraphicsSystemEx
+#endif
+
{
public:
QGLGraphicsSystem(bool useX11GL);
@@ -67,8 +75,9 @@ public:
QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
QWindowSurface *createWindowSurface(QWidget *widget) const;
-#ifdef QGL_USE_TEXTURE_POOL
- void releaseCachedResources();
+#ifdef Q_OS_SYMBIAN
+ void releaseCachedGpuResources();
+ QGraphicsSystemEx* platformExtension();
#endif
private:
bool m_useX11GL;
diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp
index ed541ce..7c41bb9 100644
--- a/src/opengl/qwindowsurface_gl.cpp
+++ b/src/opengl/qwindowsurface_gl.cpp
@@ -604,6 +604,17 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &
if (!hasPartialUpdateSupport() && !d_ptr->did_paint)
return;
+#ifdef Q_OS_SYMBIAN
+ if (window() != widget) {
+ // For performance reasons we don't support
+ // flushing native child widgets on Symbian.
+ // It breaks overlapping native child widget
+ // rendering in some cases but we prefer performance.
+ return;
+ }
+#endif
+
+
QWidget *parent = widget->internalWinId() ? widget : widget->nativeParentWidget();
Q_ASSERT(parent);
@@ -706,7 +717,6 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &
} else {
glFlush();
}
-
return;
}
@@ -856,8 +866,22 @@ void QGLWindowSurface::updateGeometry() {
bool hijack(true);
QWidgetPrivate *wd = window()->d_func();
- if (wd->extraData() && wd->extraData()->glContext)
- hijack = false; // we already have gl context for widget
+ if (wd->extraData() && wd->extraData()->glContext) {
+#ifdef Q_OS_SYMBIAN // Symbian needs to recreate the context when native window size changes
+ if (d_ptr->size != geometry().size()) {
+ if (window() != qt_gl_share_widget())
+ --(_qt_gl_share_widget()->widgetRefCount);
+
+ delete wd->extraData()->glContext;
+ wd->extraData()->glContext = 0;
+ d_ptr->ctx = 0;
+ }
+ else
+#endif
+ {
+ hijack = false; // we already have gl context for widget
+ }
+ }
if (hijack)
hijackWindow(window());
@@ -878,35 +902,6 @@ void QGLWindowSurface::updateGeometry() {
d_ptr->size = surfSize;
-#ifdef Q_OS_SYMBIAN
- if (!hijack) { // Symbian needs to recreate EGL surface when native window size changes
- if (ctx->d_func()->eglSurface != EGL_NO_SURFACE) {
- eglDestroySurface(ctx->d_func()->eglContext->display(),
- ctx->d_func()->eglSurface);
- }
-
- ctx->d_func()->eglSurface = QEgl::createSurface(ctx->device(),
- ctx->d_func()->eglContext->config());
-
- eglGetError(); // Clear error state.
- if (hasPartialUpdateSupport()) {
- eglSurfaceAttrib(ctx->d_func()->eglContext->display(),
- ctx->d_func()->eglSurface,
- EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
-
- if (eglGetError() != EGL_SUCCESS)
- qWarning("QGLWindowSurface: could not enable preserved swap behaviour");
- } else {
- eglSurfaceAttrib(ctx->d_func()->eglContext->display(),
- ctx->d_func()->eglSurface,
- EGL_SWAP_BEHAVIOR, EGL_BUFFER_DESTROYED);
-
- if (eglGetError() != EGL_SUCCESS)
- qWarning("QGLWindowSurface: could not enable destroyed swap behaviour");
- }
- }
-#endif
-
if (d_ptr->ctx) {
#ifndef QT_OPENGL_ES_2
if (d_ptr->destructive_swap_buffers)
diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp
index 570adfd..648415c 100644
--- a/src/openvg/qpaintengine_vg.cpp
+++ b/src/openvg/qpaintengine_vg.cpp
@@ -1024,9 +1024,11 @@ static VGImage toVGImage
switch (img.format()) {
case QImage::Format_Mono:
img = image.convertToFormat(QImage::Format_MonoLSB, flags);
+ img.invertPixels();
format = VG_BW_1;
break;
case QImage::Format_MonoLSB:
+ img.invertPixels();
format = VG_BW_1;
break;
case QImage::Format_RGB32:
@@ -1531,6 +1533,8 @@ bool QVGPaintEngine::begin(QPaintDevice *pdev)
bool QVGPaintEngine::end()
{
+ vgSeti(VG_SCISSORING, VG_FALSE);
+ vgSeti(VG_MASKING, VG_FALSE);
return true;
}
@@ -3189,6 +3193,19 @@ void qt_vg_drawVGImageStencil
bool QVGPaintEngine::canVgWritePixels(const QImage &image) const
{
Q_D(const QVGPaintEngine);
+
+ // qt_vg_image_to_vg_format returns VG_sARGB_8888 as
+ // fallback case if no matching VG format is found.
+ // If given image format is not Format_ARGB32 and returned
+ // format is VG_sARGB_8888, it means that no match was
+ // found. In that case vgWritePixels cannot be used.
+ // Also 1-bit formats cannot be used directly either.
+ if ((image.format() != QImage::Format_ARGB32
+ && qt_vg_image_to_vg_format(image.format()) == VG_sARGB_8888)
+ || image.depth() == 1) {
+ return false;
+ }
+
// vgWritePixels ignores masking, blending and xforms so we can only use it if
// ALL of the following conditions are true:
// - It is a simple translate, or a scale of -1 on the y-axis (inverted)
@@ -3744,6 +3761,8 @@ void QVGPaintEngine::beginNativePainting()
#if !defined(QVG_NO_DRAW_GLYPHS)
d->setTransform(VG_MATRIX_GLYPH_USER_TO_SURFACE, d->pathTransform);
#endif
+ vgSeti(VG_SCISSORING, VG_FALSE);
+ vgSeti(VG_MASKING, VG_FALSE);
d->rawVG = true;
}
@@ -3804,6 +3823,7 @@ void QVGPaintEngine::restoreState(QPaintEngine::DirtyFlags dirty)
if ((dirty & QPaintEngine::DirtyBrushOrigin) != 0)
brushOriginChanged();
d->fillRule = 0;
+ d->clearColor = QColor();
if ((dirty & QPaintEngine::DirtyOpacity) != 0)
opacityChanged();
if ((dirty & QPaintEngine::DirtyTransform) != 0)
diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp
index 80f5b2f..eae10c8 100644
--- a/src/openvg/qpixmapdata_vg.cpp
+++ b/src/openvg/qpixmapdata_vg.cpp
@@ -377,7 +377,7 @@ VGImage QVGPixmapData::toVGImage()
QVGImagePool::instance()->useImage(this);
}
- if (!source.isNull() && recreate) {
+ if (!source.isNull() && (recreate || source.paintingActive())) {
source.beginDataAccess();
vgImageSubData
(vgImage,
diff --git a/src/openvg/qwindowsurface_vg.cpp b/src/openvg/qwindowsurface_vg.cpp
index 9ce7f9a..5fb28ac 100644
--- a/src/openvg/qwindowsurface_vg.cpp
+++ b/src/openvg/qwindowsurface_vg.cpp
@@ -79,6 +79,17 @@ QPaintDevice *QVGWindowSurface::paintDevice()
void QVGWindowSurface::flush(QWidget *widget, const QRegion &region, const QPoint &offset)
{
Q_UNUSED(offset);
+
+#ifdef Q_OS_SYMBIAN
+ if (window() != widget) {
+ // For performance reasons we don't support
+ // flushing native child widgets on Symbian.
+ // It breaks overlapping native child widget
+ // rendering in some cases but we prefer performance.
+ return;
+ }
+#endif
+
QWidget *parent = widget->internalWinId() ? widget : widget->nativeParentWidget();
d_ptr->endPaint(parent, region);
}
diff --git a/src/openvg/qwindowsurface_vgegl.cpp b/src/openvg/qwindowsurface_vgegl.cpp
index 866453f..3205a11 100644
--- a/src/openvg/qwindowsurface_vgegl.cpp
+++ b/src/openvg/qwindowsurface_vgegl.cpp
@@ -269,19 +269,20 @@ static QEglContext *createContext(QPaintDevice *device)
configProps.setPixelFormat(QImage::Format_ARGB32); // XXX
configProps.setValue(EGL_ALPHA_MASK_SIZE, 1);
#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT
- configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT |
- EGL_VG_ALPHA_FORMAT_PRE_BIT);
+ configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT
+ | EGL_SWAP_BEHAVIOR_PRESERVED_BIT
+ | EGL_VG_ALPHA_FORMAT_PRE_BIT);
configProps.setRenderableType(QEgl::OpenVG);
if (!context->chooseConfig(configProps)) {
// Try again without the "pre" bit.
- configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT);
+ configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_SWAP_BEHAVIOR_PRESERVED_BIT);
if (!context->chooseConfig(configProps)) {
delete context;
return 0;
}
}
#else
- configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT);
+ configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_SWAP_BEHAVIOR_PRESERVED_BIT);
configProps.setRenderableType(QEgl::OpenVG);
if (!context->chooseConfig(configProps)) {
delete context;
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
index 3d8cf50..9a94c30 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
@@ -365,10 +365,12 @@ void QDirectFBWindowSurface::flush(QWidget *widget, const QRegion &region,
if (!win)
return;
-#ifndef QT_NO_QWS_PROXYSCREEN
+#if !defined(QT_NO_QWS_PROXYSCREEN) && !defined(QT_NO_GRAPHICSVIEW)
QWExtra *extra = qt_widget_private(widget)->extraData();
if (extra && extra->proxyWidget)
return;
+#else
+ Q_UNUSED(widget);
#endif
const quint8 windowOpacity = quint8(win->windowOpacity() * 0xff);
diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
index c904c3c..69a6922 100644
--- a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
+++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
@@ -170,7 +170,7 @@ bool QMeeGoGraphicsSystemSwitchHandler::eventFilter(QObject *object, QEvent *eve
if (visibleWidgets() == 0)
QMeeGoGraphicsSystem::switchToRaster();
} else {
- if (visibleWidgets() == 1)
+ if (visibleWidgets() > 0)
QMeeGoGraphicsSystem::switchToMeeGo();
}
}
diff --git a/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp b/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp
index 4b4f677..bf29dd4 100644
--- a/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp
+++ b/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp
@@ -80,9 +80,15 @@ QWindowSurface *QVGGraphicsSystem::createWindowSurface(QWidget *widget) const
return new QVGWindowSurface(widget);
}
-void QVGGraphicsSystem::releaseCachedResources()
+#ifdef Q_OS_SYMBIAN
+void QVGGraphicsSystem::releaseCachedGpuResources()
{
QVGImagePool::instance()->hibernate();
}
+QGraphicsSystemEx *QVGGraphicsSystem::platformExtension()
+{
+ return this;
+}
+#endif
QT_END_NAMESPACE
diff --git a/src/plugins/graphicssystems/openvg/qgraphicssystem_vg_p.h b/src/plugins/graphicssystems/openvg/qgraphicssystem_vg_p.h
index 9c9b3e2..feff451 100644
--- a/src/plugins/graphicssystems/openvg/qgraphicssystem_vg_p.h
+++ b/src/plugins/graphicssystems/openvg/qgraphicssystem_vg_p.h
@@ -55,9 +55,16 @@
#include <QtGui/private/qgraphicssystem_p.h>
+#ifdef Q_OS_SYMBIAN
+#include <QtGui/private/qgraphicssystemex_symbian_p.h>
+#endif
+
QT_BEGIN_NAMESPACE
class QVGGraphicsSystem : public QGraphicsSystem
+#ifdef Q_OS_SYMBIAN
+ , public QSymbianGraphicsSystemEx
+#endif
{
public:
QVGGraphicsSystem();
@@ -65,7 +72,10 @@ public:
QPixmapData *createPixmapData(QPixmapData::PixelType type) const;
QWindowSurface *createWindowSurface(QWidget *widget) const;
- void releaseCachedResources();
+#ifdef Q_OS_SYMBIAN
+ void releaseCachedGpuResources();
+ QGraphicsSystemEx* platformExtension();
+#endif
};
QT_END_NAMESPACE
diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index e778ab7..42499dd 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -7,9 +7,9 @@ unix:!symbian {
SUBDIRS *= codecs
}
!contains(QT_CONFIG, no-gui): SUBDIRS *= imageformats iconengines
-!embedded:SUBDIRS *= graphicssystems
+!embedded:!contains(QT_CONFIG, no-gui):SUBDIRS *= graphicssystems
embedded:SUBDIRS *= gfxdrivers decorations mousedrivers kbddrivers
-!win32:!embedded:!mac:!symbian:SUBDIRS *= inputmethods
+!win32:!embedded:!mac:!symbian:!contains(QT_CONFIG, no-gui):SUBDIRS *= inputmethods
!symbian:!contains(QT_CONFIG, no-gui):SUBDIRS += accessible
symbian:SUBDIRS += s60
contains(QT_CONFIG, phonon): SUBDIRS *= phonon
diff --git a/src/plugins/qmltooling/qmldbg_ost/qmldbg_ost.pro b/src/plugins/qmltooling/qmldbg_ost/qmldbg_ost.pro
new file mode 100644
index 0000000..2748889
--- /dev/null
+++ b/src/plugins/qmltooling/qmldbg_ost/qmldbg_ost.pro
@@ -0,0 +1,21 @@
+TARGET = qmldbg_ost
+QT += declarative network
+
+include(../../qpluginbase.pri)
+
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/qmltooling
+QTDIR_build:REQUIRES += "contains(QT_CONFIG, declarative)"
+
+SOURCES += \
+ qmlostplugin.cpp \
+ qostdevice.cpp
+
+HEADERS += \
+ qmlostplugin.h \
+ qostdevice.h \
+ usbostcomm.h
+
+target.path += $$[QT_INSTALL_PLUGINS]/qmltooling
+INSTALLS += target
+
+symbian:TARGET.UID3=0x20031E92
diff --git a/src/plugins/qmltooling/qmldbg_ost/qmlostplugin.cpp b/src/plugins/qmltooling/qmldbg_ost/qmlostplugin.cpp
new file mode 100644
index 0000000..1c91c34
--- /dev/null
+++ b/src/plugins/qmltooling/qmldbg_ost/qmlostplugin.cpp
@@ -0,0 +1,143 @@
+/****************************************************************************
+**
+** 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 QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qmlostplugin.h"
+#include "qostdevice.h"
+
+#include <private/qdeclarativedebugserver_p.h>
+#include <private/qpacketprotocol_p.h>
+
+QT_BEGIN_NAMESPACE
+
+static const TInt KQmlOstProtocolId = 0x94;
+
+class QmlOstPluginPrivate {
+public:
+ QmlOstPluginPrivate();
+
+ QOstDevice *ost;
+ QPacketProtocol *protocol;
+ QDeclarativeDebugServer *debugServer;
+};
+
+QmlOstPluginPrivate::QmlOstPluginPrivate() :
+ ost(0),
+ protocol(0),
+ debugServer(0)
+{
+}
+
+QmlOstPlugin::QmlOstPlugin() :
+ d_ptr(new QmlOstPluginPrivate)
+{
+}
+
+QmlOstPlugin::~QmlOstPlugin()
+{
+ delete d_ptr;
+}
+
+void QmlOstPlugin::setServer(QDeclarativeDebugServer *server)
+{
+ Q_D(QmlOstPlugin);
+ d->debugServer = server;
+}
+
+bool QmlOstPlugin::isConnected() const
+{
+ Q_D(const QmlOstPlugin);
+ return d->ost && d->ost->isOpen();
+}
+
+void QmlOstPlugin::send(const QByteArray &message)
+{
+ Q_D(QmlOstPlugin);
+
+ if (!isConnected())
+ return;
+
+ QPacket pack;
+ pack.writeRawData(message.data(), message.length());
+
+ d->protocol->send(pack);
+ //d->socket->flush();
+}
+
+void QmlOstPlugin::disconnect()
+{
+ Q_D(QmlOstPlugin);
+
+ delete d->protocol;
+ d->protocol = 0;
+}
+
+void QmlOstPlugin::setPort(int port, bool block)
+{
+ Q_UNUSED(port);
+ Q_UNUSED(block);
+
+ Q_D(QmlOstPlugin);
+
+ d->ost = new QOstDevice(this);
+ bool ok = d->ost->open(KQmlOstProtocolId);
+ if (!ok) {
+ if (d->ost->errorString().length())
+ qDebug("Error from QOstDevice: %s", qPrintable(d->ost->errorString()));
+ qWarning("QDeclarativeDebugServer: Unable to listen on OST"); // This message is part of the signalling - do not change the format!
+ return;
+ }
+ d->protocol = new QPacketProtocol(d->ost, this);
+ QObject::connect(d->protocol, SIGNAL(readyRead()), this, SLOT(readyRead()));
+ qWarning("QDeclarativeDebugServer: Waiting for connection via OST"); // This message is part of the signalling - do not change the format!
+}
+
+void QmlOstPlugin::readyRead()
+{
+ Q_D(QmlOstPlugin);
+ QPacket packet = d->protocol->read();
+
+ QByteArray content = packet.data();
+ d->debugServer->receiveMessage(content);
+}
+
+Q_EXPORT_PLUGIN2(qmlostplugin, QmlOstPlugin)
+
+QT_END_NAMESPACE
diff --git a/src/plugins/qmltooling/qmldbg_ost/qmlostplugin.h b/src/plugins/qmltooling/qmldbg_ost/qmlostplugin.h
new file mode 100644
index 0000000..eee6ee1
--- /dev/null
+++ b/src/plugins/qmltooling/qmldbg_ost/qmlostplugin.h
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** 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 QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QMLOSTPLUGIN_H
+#define QMLOSTPLUGIN_H
+
+#include <QtGui/QStylePlugin>
+#include <QtDeclarative/private/qdeclarativedebugserverconnection_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QDeclarativeDebugServer;
+class QmlOstPluginPrivate;
+
+class QmlOstPlugin : public QObject, public QDeclarativeDebugServerConnection
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QmlOstPlugin)
+ Q_DISABLE_COPY(QmlOstPlugin)
+ Q_INTERFACES(QDeclarativeDebugServerConnection)
+
+
+public:
+ QmlOstPlugin();
+ ~QmlOstPlugin();
+
+ void setServer(QDeclarativeDebugServer *server);
+ void setPort(int port, bool bock);
+
+ bool isConnected() const;
+ void send(const QByteArray &message);
+ void disconnect();
+
+private Q_SLOTS:
+ void readyRead();
+
+private:
+ QmlOstPluginPrivate *d_ptr;
+};
+
+QT_END_NAMESPACE
+
+#endif // QMLOSTPLUGIN_H
diff --git a/src/plugins/qmltooling/qmldbg_ost/qostdevice.cpp b/src/plugins/qmltooling/qmldbg_ost/qostdevice.cpp
new file mode 100644
index 0000000..21b0169
--- /dev/null
+++ b/src/plugins/qmltooling/qmldbg_ost/qostdevice.cpp
@@ -0,0 +1,180 @@
+/****************************************************************************
+**
+** 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 QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qostdevice.h"
+#include <e32base.h>
+
+#include "usbostcomm.h"
+
+class QOstDevicePrivate : public CActive
+{
+ QOstDevice* q_ptr;
+ Q_DECLARE_PUBLIC(QOstDevice)
+
+public:
+ QOstDevicePrivate() : CActive(CActive::EPriorityStandard) {
+ CActiveScheduler::Add(this);
+ }
+ ~QOstDevicePrivate() {
+ Cancel();
+ }
+
+private:
+ void RunL();
+ void DoCancel();
+
+private:
+ RUsbOstComm ost;
+ TBuf8<4096> readBuf;
+ QByteArray dataBuf;
+};
+
+QOstDevice::QOstDevice(QObject *parent) :
+ QIODevice(parent), d_ptr(new QOstDevicePrivate)
+{
+ d_ptr->q_ptr = this;
+}
+
+QOstDevice::~QOstDevice()
+{
+ close();
+ delete d_ptr;
+}
+
+bool QOstDevice::open(int ostProtocolId)
+{
+ if (isOpen())
+ return false;
+
+ Q_D(QOstDevice);
+ TInt err = d->ost.Connect();
+ if (!err) err = d->ost.Open();
+ const TVersion KRequiredVersion(1,1,0);
+ TVersion version = d->ost.Version();
+ if (version.iMajor < KRequiredVersion.iMajor ||
+ (version.iMajor == KRequiredVersion.iMajor && version.iMinor < KRequiredVersion.iMinor)) {
+ setErrorString("CODA version too old. At least version 4.0.18 (without TRK) is required.");
+ return false;
+ }
+
+ if (!err) err = d->ost.RegisterProtocolID((TOstProtIds)ostProtocolId, EFalse);
+ if (!err) {
+ d->ost.ReadMessage(d->iStatus, d->readBuf);
+ d->SetActive();
+ return QIODevice::open(ReadWrite | Unbuffered);
+ }
+ return false;
+}
+
+void QOstDevicePrivate::RunL()
+{
+ Q_Q(QOstDevice);
+ //qDebug("QOstDevice received %d bytes q=%x", readBuf.Size(), q);
+ if (iStatus == KErrNone) {
+ QByteArray data = QByteArray::fromRawData((const char*)readBuf.Ptr(), readBuf.Size());
+ dataBuf.append(data);
+
+ readBuf.Zero();
+ ost.ReadMessage(iStatus, readBuf);
+ SetActive();
+
+ emit q->readyRead();
+ } else {
+ q->setErrorString(QString("Error %1 from RUsbOstComm::ReadMessage()").arg(iStatus.Int()));
+ }
+ //qDebug("-QOstDevicePrivate RunL");
+}
+
+void QOstDevicePrivate::DoCancel()
+{
+ ost.ReadCancel();
+}
+
+void QOstDevice::close()
+{
+ Q_D(QOstDevice);
+ QIODevice::close();
+ d->Cancel();
+ // RDbgTrcComm::Close isn't safe to call when not open, sigh
+ if (d->ost.Handle()) {
+ d->ost.Close();
+ }
+}
+
+qint64 QOstDevice::readData(char *data, qint64 maxSize)
+{
+ Q_D(QOstDevice);
+ if (d->dataBuf.length() == 0 && !d->IsActive())
+ return -1;
+ qint64 available = qMin(maxSize, (qint64)d->dataBuf.length());
+ memcpy(data, d->dataBuf.constData(), available);
+ d->dataBuf.remove(0, available);
+ return available;
+}
+
+static const TInt KMaxOstPacketLen = 4096;
+
+qint64 QOstDevice::writeData(const char *data, qint64 maxSize)
+{
+ Q_D(QOstDevice);
+ TPtrC8 ptr((const TUint8*)data, (TInt)maxSize);
+ while (ptr.Length()) {
+ TPtrC8 fragment = ptr.Left(qMin(ptr.Length(), KMaxOstPacketLen));
+ //qDebug("QOstDevice writing %d bytes", fragment.Length());
+ TRequestStatus stat;
+ d->ost.WriteMessage(stat, fragment);
+ User::WaitForRequest(stat);
+ if (stat.Int() != KErrNone) {
+ setErrorString(QString("Error %1 from RUsbOstComm::WriteMessage()").arg(stat.Int()));
+ return -1;
+ }
+ ptr.Set(ptr.Mid(fragment.Length()));
+ }
+ emit bytesWritten(maxSize); //TODO does it matter this is emitted synchronously?
+ //qDebug("QOstDevice wrote %d bytes", ptr.Size());
+ return maxSize;
+}
+
+qint64 QOstDevice::bytesAvailable() const
+{
+ Q_D(const QOstDevice);
+ return d->dataBuf.length();
+}
diff --git a/src/plugins/qmltooling/qmldbg_ost/qostdevice.h b/src/plugins/qmltooling/qmldbg_ost/qostdevice.h
new file mode 100644
index 0000000..2c26ff7
--- /dev/null
+++ b/src/plugins/qmltooling/qmldbg_ost/qostdevice.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** 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 QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOSTDEVICE_H
+#define QOSTDEVICE_H
+
+#include <QtCore/QIODevice>
+
+QT_BEGIN_NAMESPACE
+
+class QOstDevicePrivate;
+
+class QOstDevice : public QIODevice
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QOstDevice)
+ Q_DISABLE_COPY(QOstDevice)
+
+public:
+ explicit QOstDevice(QObject *parent=0);
+ ~QOstDevice();
+
+ bool open(int ostProtocolId);
+ void close();
+
+protected:
+ qint64 readData(char *data, qint64 maxSize);
+ qint64 writeData(const char *data, qint64 maxSize);
+ qint64 bytesAvailable() const;
+
+private:
+ QOstDevicePrivate* d_ptr;
+};
+
+QT_END_NAMESPACE
+
+#endif // QOSTDEVICE_H
diff --git a/src/plugins/qmltooling/qmldbg_ost/usbostcomm.h b/src/plugins/qmltooling/qmldbg_ost/usbostcomm.h
new file mode 100644
index 0000000..48ff7bf
--- /dev/null
+++ b/src/plugins/qmltooling/qmldbg_ost/usbostcomm.h
@@ -0,0 +1,191 @@
+/****************************************************************************
+**
+** 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 QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef USBHOSTCOMM_H
+#define USBHOSTCOMM_H
+
+// Based on the official usbostrouter header, modified to remove dependancy on
+// the client DLL
+
+#include <e32base.h>
+
+typedef int TOstProtIds;
+
+class RUsbOstComm : public RSessionBase
+{
+public:
+ RUsbOstComm();
+ TInt Connect();
+ TInt Disconnect();
+ TInt Open();
+ TInt Close();
+ TInt RegisterProtocolID(TOstProtIds aId, TBool aNeedHeader);
+ void ReadMessage(TRequestStatus& aStatus, TDes8& aDes);
+ TInt ReadCancel();
+ void WriteMessage(TRequestStatus& aStatus, const TDesC8& aDes, TBool aHasHeader=EFalse);
+ TVersion Version() const;
+
+private:
+ enum TUsbOstCmdCode
+ {
+ EUsbOstCmdCodeFirst,
+ EUsbOstCmdConnect,
+ EUsbOstCmdDisconnect,
+ EUsbOstCmdCodeGetAcmConfig,
+ EUsbOstCmdCodeSetAcmConfig,
+ EUsbOstCmdCodeOpen,
+ EUsbOstCmdCodeClose,
+ EUsbOstCmdCodeRegisterId,
+ EUsbOstCmdCodeRegisterIds,
+ EUsbOstCmdCodeUnRegisterId,
+ EUsbOstCmdCodeUnRegisterIds,
+ EUsbOstCmdCodeReadMsg,
+ EUsbOstCmdCodeReadCancel,
+ EUsbOstCmdCodeWriteMsg,
+ EUsbOstCmdCodeWriteCancel,
+ EUsbOstCmdCodeLast
+ };
+};
+
+RUsbOstComm::RUsbOstComm()
+{
+}
+
+TInt RUsbOstComm::Connect()
+{
+ _LIT(KUsbOstServerName, "!UsbOstRouter");
+ _LIT(KUsbOstServerImageName, "usbostrouter");
+ const TUid KUsbOstServerUid = { 0x200170BE };
+ TInt startupAttempts = 2;
+ for(;;) {
+ TInt ret = CreateSession(KUsbOstServerName, TVersion(1,0,0));
+ if (ret != KErrNotFound && ret != KErrServerTerminated) {
+ return ret;
+ }
+
+ if (startupAttempts-- == 0) {
+ return ret;
+ }
+
+ RProcess server;
+ ret = server.Create(KUsbOstServerImageName, KNullDesC, KUsbOstServerUid);
+ if (ret != KErrNone)
+ return ret;
+
+ TRequestStatus serverDiedRequestStatus;
+ server.Rendezvous(serverDiedRequestStatus);
+
+ if (serverDiedRequestStatus != KRequestPending) {
+ // Abort startup
+ server.Kill(KErrNone);
+ } else {
+ // Logon OK - start the server
+ server.Resume();
+ }
+ User::WaitForRequest(serverDiedRequestStatus);
+ ret = (server.ExitType() == EExitPanic) ? KErrGeneral : serverDiedRequestStatus.Int();
+ server.Close();
+
+ if (ret != KErrNone && ret != KErrAlreadyExists) {
+ return ret;
+ }
+ }
+}
+
+TInt RUsbOstComm::Disconnect()
+{
+ return SendReceive(EUsbOstCmdDisconnect);
+}
+
+TInt RUsbOstComm::Open()
+{
+ return SendReceive(EUsbOstCmdCodeOpen);
+}
+
+TInt RUsbOstComm::Close()
+{
+ TInt err = SendReceive(EUsbOstCmdCodeClose);
+ RHandleBase::Close();
+ return err;
+}
+
+TInt RUsbOstComm::RegisterProtocolID(const TOstProtIds aId, TBool aNeedHeader)
+{
+ TIpcArgs args(aId, aNeedHeader);
+ return SendReceive(EUsbOstCmdCodeRegisterId, args);
+}
+
+void RUsbOstComm::ReadMessage(TRequestStatus& aStatus, TDes8& aDes)
+{
+ TIpcArgs args(aDes.MaxLength(), &aDes);
+ SendReceive(EUsbOstCmdCodeReadMsg, args, aStatus);
+}
+
+TInt RUsbOstComm::ReadCancel()
+{
+ return SendReceive(EUsbOstCmdCodeReadCancel);
+}
+
+void RUsbOstComm::WriteMessage(TRequestStatus& aStatus, const TDesC8& aDes, TBool aHasHeader)
+{
+ TIpcArgs args(aHasHeader, aDes.Length(), &aDes);
+ SendReceive(EUsbOstCmdCodeWriteMsg, args, aStatus);
+}
+
+typedef TVersion (*TVersionFunction)(const RUsbOstComm*);
+const TInt KVersionOrdinal = 17;
+
+TVersion RUsbOstComm::Version() const
+{
+ // This function has to go to the DLL, unfortunately
+ TVersion result; // Return 0.0.0 on any error
+ RLibrary lib;
+ TInt err = lib.Load(_L("usbostcomm"));
+ if (err) return result;
+
+ TLibraryFunction fn = lib.Lookup(KVersionOrdinal);
+ if (fn)
+ result = ((TVersionFunction)fn)(this);
+ lib.Close();
+ return result;
+}
+
+#endif //USBHOSTCOMM_H
diff --git a/src/plugins/qmltooling/tcpserver/tcpserver.pro b/src/plugins/qmltooling/qmldbg_tcp/qmldbg_tcp.pro
index f4f2666..e8ab962 100644
--- a/src/plugins/qmltooling/tcpserver/tcpserver.pro
+++ b/src/plugins/qmltooling/qmldbg_tcp/qmldbg_tcp.pro
@@ -1,4 +1,4 @@
-TARGET = tcpserver
+TARGET = qmldbg_tcp
QT += declarative network
include(../../qpluginbase.pri)
@@ -15,4 +15,4 @@ HEADERS += \
target.path += $$[QT_INSTALL_PLUGINS]/qmltooling
INSTALLS += target
-symbian:TARGET.UID3=0x20031E90 \ No newline at end of file
+symbian:TARGET.UID3=0x20031E90
diff --git a/src/plugins/qmltooling/tcpserver/qtcpserverconnection.cpp b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp
index 69c1ef5..7db0db3 100644
--- a/src/plugins/qmltooling/tcpserver/qtcpserverconnection.cpp
+++ b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.cpp
@@ -97,7 +97,8 @@ void QTcpServerConnection::send(const QByteArray &message)
{
Q_D(QTcpServerConnection);
- if (!isConnected())
+ if (!isConnected()
+ || !d->protocol || !d->socket)
return;
QPacket pack;
@@ -111,9 +112,10 @@ void QTcpServerConnection::disconnect()
{
Q_D(QTcpServerConnection);
- delete d->protocol;
+ // protocol might still be processing packages at this point
+ d->protocol->deleteLater();
d->protocol = 0;
- delete d->socket;
+ d->socket->deleteLater();
d->socket = 0;
}
@@ -143,6 +145,9 @@ void QTcpServerConnection::listen()
void QTcpServerConnection::readyRead()
{
Q_D(QTcpServerConnection);
+ if (!d->protocol)
+ return;
+
QPacket packet = d->protocol->read();
QByteArray content = packet.data();
diff --git a/src/plugins/qmltooling/tcpserver/qtcpserverconnection.h b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.h
index a6e17e6..a6e17e6 100644
--- a/src/plugins/qmltooling/tcpserver/qtcpserverconnection.h
+++ b/src/plugins/qmltooling/qmldbg_tcp/qtcpserverconnection.h
diff --git a/src/plugins/qmltooling/qmltooling.pro b/src/plugins/qmltooling/qmltooling.pro
index 01cf1a9..9b3346f 100644
--- a/src/plugins/qmltooling/qmltooling.pro
+++ b/src/plugins/qmltooling/qmltooling.pro
@@ -1,4 +1,4 @@
TEMPLATE = subdirs
-SUBDIRS = tcpserver
-
+SUBDIRS = qmldbg_tcp
+symbian:SUBDIRS += qmldbg_ost
diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def
index b82f6e5..d1e734d 100644
--- a/src/s60installs/bwins/QtCoreu.def
+++ b/src/s60installs/bwins/QtCoreu.def
@@ -4489,4 +4489,50 @@ EXPORTS
?symbianCommandLine@QCoreApplicationPrivate@@SAPAVCApaCommandLine@@XZ @ 4488 NONAME ; class CApaCommandLine * QCoreApplicationPrivate::symbianCommandLine(void)
?revision@QMetaProperty@@QBEHXZ @ 4489 NONAME ; int QMetaProperty::revision(void) const
?revision@QMetaMethod@@QBEHXZ @ 4490 NONAME ; int QMetaMethod::revision(void) const
+ ??_EQDateTime@@QAE@I@Z @ 4491 NONAME ; QDateTime::~QDateTime(unsigned int)
+ ??4QDate@@QAEAAV0@ABV0@@Z @ 4492 NONAME ; class QDate & QDate::operator=(class QDate const &)
+ ??4QSizeF@@QAEAAV0@ABV0@@Z @ 4493 NONAME ; class QSizeF & QSizeF::operator=(class QSizeF const &)
+ ??0QSize@@QAE@ABV0@@Z @ 4494 NONAME ; QSize::QSize(class QSize const &)
+ ??0QEvent@@QAE@ABV0@@Z @ 4495 NONAME ; QEvent::QEvent(class QEvent const &)
+ ??0QTextCodecFactoryInterface@@QAE@XZ @ 4496 NONAME ; QTextCodecFactoryInterface::QTextCodecFactoryInterface(void)
+ ??0QPointF@@QAE@ABV0@@Z @ 4497 NONAME ; QPointF::QPointF(class QPointF const &)
+ ??_EQUrl@@QAE@I@Z @ 4498 NONAME ; QUrl::~QUrl(unsigned int)
+ ??0QGenericArgument@@QAE@ABV0@@Z @ 4499 NONAME ; QGenericArgument::QGenericArgument(class QGenericArgument const &)
+ ??_EQVariant@@QAE@I@Z @ 4500 NONAME ; QVariant::~QVariant(unsigned int)
+ ??4QLineF@@QAEAAV0@ABV0@@Z @ 4501 NONAME ; class QLineF & QLineF::operator=(class QLineF const &)
+ ??0QXmlStreamAttributes@@QAE@ABV0@@Z @ 4502 NONAME ; QXmlStreamAttributes::QXmlStreamAttributes(class QXmlStreamAttributes const &)
+ ??0QMetaEnum@@QAE@ABV0@@Z @ 4503 NONAME ; QMetaEnum::QMetaEnum(class QMetaEnum const &)
+ ??4QUuid@@QAEAAU0@ABU0@@Z @ 4504 NONAME ; struct QUuid & QUuid::operator=(struct QUuid const &)
+ ??0CQtActiveScheduler@@QAE@XZ @ 4505 NONAME ; CQtActiveScheduler::CQtActiveScheduler(void)
+ ??0QSizeF@@QAE@ABV0@@Z @ 4506 NONAME ; QSizeF::QSizeF(class QSizeF const &)
+ ??4QMetaEnum@@QAEAAV0@ABV0@@Z @ 4507 NONAME ; class QMetaEnum & QMetaEnum::operator=(class QMetaEnum const &)
+ ??4QRect@@QAEAAV0@ABV0@@Z @ 4508 NONAME ; class QRect & QRect::operator=(class QRect const &)
+ ??_EQMutexPool@@QAE@I@Z @ 4509 NONAME ; QMutexPool::~QMutexPool(unsigned int)
+ ??0QMetaClassInfo@@QAE@ABV0@@Z @ 4510 NONAME ; QMetaClassInfo::QMetaClassInfo(class QMetaClassInfo const &)
+ ??0QDate@@QAE@ABV0@@Z @ 4511 NONAME ; QDate::QDate(class QDate const &)
+ ??_EQTextDecoder@@QAE@I@Z @ 4512 NONAME ; QTextDecoder::~QTextDecoder(unsigned int)
+ ??_EQMutex@@QAE@I@Z @ 4513 NONAME ; QMutex::~QMutex(unsigned int)
+ ??0QTimerEvent@@QAE@ABV0@@Z @ 4514 NONAME ; QTimerEvent::QTimerEvent(class QTimerEvent const &)
+ ??0QXmlStreamAttributes@@QAE@XZ @ 4515 NONAME ; QXmlStreamAttributes::QXmlStreamAttributes(void)
+ ??_EConverterState@QTextCodec@@QAE@I@Z @ 4516 NONAME ; QTextCodec::ConverterState::~ConverterState(unsigned int)
+ ??4QTime@@QAEAAV0@ABV0@@Z @ 4517 NONAME ; class QTime & QTime::operator=(class QTime const &)
+ ??0QMetaMethod@@QAE@ABV0@@Z @ 4518 NONAME ; QMetaMethod::QMetaMethod(class QMetaMethod const &)
+ ??_EQTextEncoder@@QAE@I@Z @ 4519 NONAME ; QTextEncoder::~QTextEncoder(unsigned int)
+ ??_EQFileInfo@@QAE@I@Z @ 4520 NONAME ; QFileInfo::~QFileInfo(unsigned int)
+ ??4QRectF@@QAEAAV0@ABV0@@Z @ 4521 NONAME ; class QRectF & QRectF::operator=(class QRectF const &)
+ ??4QXmlStreamStringRef@@QAEAAV0@ABV0@@Z @ 4522 NONAME ; class QXmlStreamStringRef & QXmlStreamStringRef::operator=(class QXmlStreamStringRef const &)
+ ??4QBasicAtomicInt@@QAEAAV0@ABV0@@Z @ 4523 NONAME ; class QBasicAtomicInt & QBasicAtomicInt::operator=(class QBasicAtomicInt const &)
+ ??_EQEasingCurve@@QAE@I@Z @ 4524 NONAME ; QEasingCurve::~QEasingCurve(unsigned int)
+ ??_EQReadWriteLock@@QAE@I@Z @ 4525 NONAME ; QReadWriteLock::~QReadWriteLock(unsigned int)
+ ??0QFactoryInterface@@QAE@XZ @ 4526 NONAME ; QFactoryInterface::QFactoryInterface(void)
+ ??4QLine@@QAEAAV0@ABV0@@Z @ 4527 NONAME ; class QLine & QLine::operator=(class QLine const &)
+ ??0QMetaProperty@@QAE@ABV0@@Z @ 4528 NONAME ; QMetaProperty::QMetaProperty(class QMetaProperty const &)
+ ??_EQBitArray@@QAE@I@Z @ 4529 NONAME ; QBitArray::~QBitArray(unsigned int)
+ ??0QTime@@QAE@ABV0@@Z @ 4530 NONAME ; QTime::QTime(class QTime const &)
+ ??4QPoint@@QAEAAV0@ABV0@@Z @ 4531 NONAME ; class QPoint & QPoint::operator=(class QPoint const &)
+ ??4QSize@@QAEAAV0@ABV0@@Z @ 4532 NONAME ; class QSize & QSize::operator=(class QSize const &)
+ ??0QPoint@@QAE@ABV0@@Z @ 4533 NONAME ; QPoint::QPoint(class QPoint const &)
+ ??4QPointF@@QAEAAV0@ABV0@@Z @ 4534 NONAME ; class QPointF & QPointF::operator=(class QPointF const &)
+ ??_EQRegExp@@QAE@I@Z @ 4535 NONAME ; QRegExp::~QRegExp(unsigned int)
+ ??4QLocalePrivate@@QAEAAU0@ABU0@@Z @ 4536 NONAME ; struct QLocalePrivate & QLocalePrivate::operator=(struct QLocalePrivate const &)
diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def
index 5490f0d..b3309ad 100644
--- a/src/s60installs/bwins/QtDeclarativeu.def
+++ b/src/s60installs/bwins/QtDeclarativeu.def
@@ -1893,4 +1893,13 @@ EXPORTS
?setLayoutMirror@QDeclarativeItemPrivate@@QAEX_N@Z @ 1892 NONAME ; void QDeclarativeItemPrivate::setLayoutMirror(bool)
?setImplicitLayoutMirror@QDeclarativeItemPrivate@@QAEX_N0@Z @ 1893 NONAME ; void QDeclarativeItemPrivate::setImplicitLayoutMirror(bool, bool)
?isMirrored@QDeclarativeItemPrivate@@QBE_NXZ @ 1894 NONAME ; bool QDeclarativeItemPrivate::isMirrored(void) const
+ ??_EQDeclarativeListReference@@QAE@I@Z @ 1895 NONAME ; QDeclarativeListReference::~QDeclarativeListReference(unsigned int)
+ ??_EVariant@QDeclarativeParser@@QAE@I@Z @ 1896 NONAME ; QDeclarativeParser::Variant::~Variant(unsigned int)
+ ??_EQDeclarativeProperty@@QAE@I@Z @ 1897 NONAME ; QDeclarativeProperty::~QDeclarativeProperty(unsigned int)
+ ??_EQDeclarativeError@@QAE@I@Z @ 1898 NONAME ; QDeclarativeError::~QDeclarativeError(unsigned int)
+ ??_EQDeclarativeCustomParserProperty@@QAE@I@Z @ 1899 NONAME ; QDeclarativeCustomParserProperty::~QDeclarativeCustomParserProperty(unsigned int)
+ ??0QDeclarativeExtensionInterface@@QAE@XZ @ 1900 NONAME ; QDeclarativeExtensionInterface::QDeclarativeExtensionInterface(void)
+ ??_EQDeclarativeScriptString@@QAE@I@Z @ 1901 NONAME ; QDeclarativeScriptString::~QDeclarativeScriptString(unsigned int)
+ ??_EQDeclarativeCustomParserNode@@QAE@I@Z @ 1902 NONAME ; QDeclarativeCustomParserNode::~QDeclarativeCustomParserNode(unsigned int)
+ ??_EQDeclarativePixmap@@QAE@I@Z @ 1903 NONAME ; QDeclarativePixmap::~QDeclarativePixmap(unsigned int)
diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def
index 26a0761..b68f59f 100644
--- a/src/s60installs/bwins/QtGuiu.def
+++ b/src/s60installs/bwins/QtGuiu.def
@@ -12979,6 +12979,136 @@ EXPORTS
?byteCount@QVolatileImage@@QBEHXZ @ 12978 NONAME ; int QVolatileImage::byteCount(void) const
??0QVolatileImage@@QAE@ABV0@@Z @ 12979 NONAME ; QVolatileImage::QVolatileImage(class QVolatileImage const &)
?depth@QVolatileImage@@QBEHXZ @ 12980 NONAME ; int QVolatileImage::depth(void) const
- ?releaseCachedResources@QGraphicsSystem@@UAEXXZ @ 12981 NONAME ; void QGraphicsSystem::releaseCachedResources(void)
+ ?releaseCachedResources@QGraphicsSystem@@UAEXXZ @ 12981 NONAME ABSENT ; void QGraphicsSystem::releaseCachedResources(void)
?qt_s60_setPartialScreenInputMode@@YAX_N@Z @ 12982 NONAME ; void qt_s60_setPartialScreenInputMode(bool)
+ ?paintingActive@QVolatileImage@@QBE_NXZ @ 12983 NONAME ; bool QVolatileImage::paintingActive(void) const
+ ??_EQFontPrivate@@QAE@I@Z @ 12984 NONAME ; QFontPrivate::~QFontPrivate(unsigned int)
+ ??0QMimeSource@@QAE@XZ @ 12985 NONAME ; QMimeSource::QMimeSource(void)
+ ??0QStyleFactoryInterface@@QAE@XZ @ 12986 NONAME ; QStyleFactoryInterface::QStyleFactoryInterface(void)
+ ??0QFileOpenEvent@@QAE@ABV0@@Z @ 12987 NONAME ; QFileOpenEvent::QFileOpenEvent(class QFileOpenEvent const &)
+ ??4QStyleOptionViewItemV2@@QAEAAV0@ABV0@@Z @ 12988 NONAME ; class QStyleOptionViewItemV2 & QStyleOptionViewItemV2::operator=(class QStyleOptionViewItemV2 const &)
+ ??0QShowEvent@@QAE@ABV0@@Z @ 12989 NONAME ; QShowEvent::QShowEvent(class QShowEvent const &)
+ ??0QMouseEvent@@QAE@ABV0@@Z @ 12990 NONAME ; QMouseEvent::QMouseEvent(class QMouseEvent const &)
+ ??0QActionEvent@@QAE@ABV0@@Z @ 12991 NONAME ; QActionEvent::QActionEvent(class QActionEvent const &)
+ ??0QTouchEvent@@QAE@ABV0@@Z @ 12992 NONAME ; QTouchEvent::QTouchEvent(class QTouchEvent const &)
+ ??_EQImageData@@QAE@I@Z @ 12993 NONAME ; QImageData::~QImageData(unsigned int)
+ ??4QBezier@@QAEAAV0@ABV0@@Z @ 12994 NONAME ; class QBezier & QBezier::operator=(class QBezier const &)
+ ??0QIconEngineV2@@QAE@XZ @ 12995 NONAME ; QIconEngineV2::QIconEngineV2(void)
+ ??4iterator@QTextBlock@@QAEAAV01@ABV01@@Z @ 12996 NONAME ; class QTextBlock::iterator & QTextBlock::iterator::operator=(class QTextBlock::iterator const &)
+ ??0QIconEngineV2@@QAE@ABV0@@Z @ 12997 NONAME ; QIconEngineV2::QIconEngineV2(class QIconEngineV2 const &)
+ ??0QIconEngineFactoryInterfaceV2@@QAE@XZ @ 12998 NONAME ; QIconEngineFactoryInterfaceV2::QIconEngineFactoryInterfaceV2(void)
+ ??4QTextLine@@QAEAAV0@ABV0@@Z @ 12999 NONAME ; class QTextLine & QTextLine::operator=(class QTextLine const &)
+ ??0QToolBarChangeEvent@@QAE@ABV0@@Z @ 13000 NONAME ; QToolBarChangeEvent::QToolBarChangeEvent(class QToolBarChangeEvent const &)
+ ??0QResizeEvent@@QAE@ABV0@@Z @ 13001 NONAME ; QResizeEvent::QResizeEvent(class QResizeEvent const &)
+ ??0QIconEngineFactoryInterface@@QAE@XZ @ 13002 NONAME ; QIconEngineFactoryInterface::QIconEngineFactoryInterface(void)
+ ??0QPictureFormatInterface@@QAE@XZ @ 13003 NONAME ; QPictureFormatInterface::QPictureFormatInterface(void)
+ ??_EQPolygon@@QAE@I@Z @ 13004 NONAME ; QPolygon::~QPolygon(unsigned int)
+ ??_EQImageReader@@QAE@I@Z @ 13005 NONAME ; QImageReader::~QImageReader(unsigned int)
+ ??4QStyleOptionGraphicsItem@@QAEAAV0@ABV0@@Z @ 13006 NONAME ; class QStyleOptionGraphicsItem & QStyleOptionGraphicsItem::operator=(class QStyleOptionGraphicsItem const &)
+ ??4QStyleOptionProgressBarV2@@QAEAAV0@ABV0@@Z @ 13007 NONAME ; class QStyleOptionProgressBarV2 & QStyleOptionProgressBarV2::operator=(class QStyleOptionProgressBarV2 const &)
+ ??0QDragEnterEvent@@QAE@ABV0@@Z @ 13008 NONAME ; QDragEnterEvent::QDragEnterEvent(class QDragEnterEvent const &)
+ ??_EKey@QPixmapCache@@QAE@I@Z @ 13009 NONAME ; QPixmapCache::Key::~Key(unsigned int)
+ ??_EQCursor@@QAE@I@Z @ 13010 NONAME ; QCursor::~QCursor(unsigned int)
+ ??0QShortcutEvent@@QAE@ABV0@@Z @ 13011 NONAME ; QShortcutEvent::QShortcutEvent(class QShortcutEvent const &)
+ ??_EQTextCursor@@QAE@I@Z @ 13012 NONAME ; QTextCursor::~QTextCursor(unsigned int)
+ ??0QGradient@@QAE@ABV0@@Z @ 13013 NONAME ; QGradient::QGradient(class QGradient const &)
+ ??4QInputMethodEvent@@QAEAAV0@ABV0@@Z @ 13014 NONAME ; class QInputMethodEvent & QInputMethodEvent::operator=(class QInputMethodEvent const &)
+ ??0QVector2D@@QAE@ABV0@@Z @ 13015 NONAME ; QVector2D::QVector2D(class QVector2D const &)
+ ??4QStyleOptionFocusRect@@QAEAAV0@ABV0@@Z @ 13016 NONAME ; class QStyleOptionFocusRect & QStyleOptionFocusRect::operator=(class QStyleOptionFocusRect const &)
+ ??_EQPen@@QAE@I@Z @ 13017 NONAME ; QPen::~QPen(unsigned int)
+ ??_EQKeySequence@@QAE@I@Z @ 13018 NONAME ; QKeySequence::~QKeySequence(unsigned int)
+ ??4QGradient@@QAEAAV0@ABV0@@Z @ 13019 NONAME ; class QGradient & QGradient::operator=(class QGradient const &)
+ ??0QTextTableFormat@@QAE@ABV0@@Z @ 13020 NONAME ; QTextTableFormat::QTextTableFormat(class QTextTableFormat const &)
+ ??_EQImagePixmapCleanupHooks@@QAE@I@Z @ 13021 NONAME ; QImagePixmapCleanupHooks::~QImagePixmapCleanupHooks(unsigned int)
+ ??0QStatusTipEvent@@QAE@ABV0@@Z @ 13022 NONAME ; QStatusTipEvent::QStatusTipEvent(class QStatusTipEvent const &)
+ ??0Value@QCss@@QAE@ABU01@@Z @ 13023 NONAME ; QCss::Value::Value(struct QCss::Value const &)
+ ??4QSizePolicy@@QAEAAV0@ABV0@@Z @ 13024 NONAME ; class QSizePolicy & QSizePolicy::operator=(class QSizePolicy const &)
+ ??_ETouchPoint@QTouchEvent@@QAE@I@Z @ 13025 NONAME ; QTouchEvent::TouchPoint::~TouchPoint(unsigned int)
+ ??4QItemSelection@@QAEAAV0@ABV0@@Z @ 13026 NONAME ; class QItemSelection & QItemSelection::operator=(class QItemSelection const &)
+ ??4QStyleOptionQ3ListView@@QAEAAV0@ABV0@@Z @ 13027 NONAME ; class QStyleOptionQ3ListView & QStyleOptionQ3ListView::operator=(class QStyleOptionQ3ListView const &)
+ ??0QSizePolicy@@QAE@ABV0@@Z @ 13028 NONAME ; QSizePolicy::QSizePolicy(class QSizePolicy const &)
+ ??4QStyleOptionFrameV2@@QAEAAV0@ABV0@@Z @ 13029 NONAME ; class QStyleOptionFrameV2 & QStyleOptionFrameV2::operator=(class QStyleOptionFrameV2 const &)
+ ??4QVector3D@@QAEAAV0@ABV0@@Z @ 13030 NONAME ; class QVector3D & QVector3D::operator=(class QVector3D const &)
+ ??4QStyleOptionQ3DockWindow@@QAEAAV0@ABV0@@Z @ 13031 NONAME ; class QStyleOptionQ3DockWindow & QStyleOptionQ3DockWindow::operator=(class QStyleOptionQ3DockWindow const &)
+ ??_EQFont@@QAE@I@Z @ 13032 NONAME ; QFont::~QFont(unsigned int)
+ ??4QStyleOptionDockWidget@@QAEAAV0@ABV0@@Z @ 13033 NONAME ; class QStyleOptionDockWidget & QStyleOptionDockWidget::operator=(class QStyleOptionDockWidget const &)
+ ??0QPainterState@@QAE@ABV0@@Z @ 13034 NONAME ; QPainterState::QPainterState(class QPainterState const &)
+ ??4QStyleOptionFrame@@QAEAAV0@ABV0@@Z @ 13035 NONAME ; class QStyleOptionFrame & QStyleOptionFrame::operator=(class QStyleOptionFrame const &)
+ ?qt_draw_decoration_for_glyphs@@YAXPAVQPainter@@PBIPBUQFixedPoint@@HPAVQFontEngine@@ABVQFont@@ABVQTextCharFormat@@@Z @ 13036 NONAME ; void qt_draw_decoration_for_glyphs(class QPainter *, unsigned int const *, struct QFixedPoint const *, int, class QFontEngine *, class QFont const &, class QTextCharFormat const &)
+ ??4QTextLength@@QAEAAV0@ABV0@@Z @ 13037 NONAME ; class QTextLength & QTextLength::operator=(class QTextLength const &)
+ ??0QHelpEvent@@QAE@ABV0@@Z @ 13038 NONAME ; QHelpEvent::QHelpEvent(class QHelpEvent const &)
+ ??0QContextMenuEvent@@QAE@ABV0@@Z @ 13039 NONAME ; QContextMenuEvent::QContextMenuEvent(class QContextMenuEvent const &)
+ ??0QWhatsThisClickedEvent@@QAE@ABV0@@Z @ 13040 NONAME ; QWhatsThisClickedEvent::QWhatsThisClickedEvent(class QWhatsThisClickedEvent const &)
+ ??4QStyleOptionTab@@QAEAAV0@ABV0@@Z @ 13041 NONAME ; class QStyleOptionTab & QStyleOptionTab::operator=(class QStyleOptionTab const &)
+ ??0QTabletEvent@@QAE@ABV0@@Z @ 13042 NONAME ; QTabletEvent::QTabletEvent(class QTabletEvent const &)
+ ??4QItemSelectionRange@@QAEAAV0@ABV0@@Z @ 13043 NONAME ; class QItemSelectionRange & QItemSelectionRange::operator=(class QItemSelectionRange const &)
+ ??_EQStyleOptionViewItemV4@@QAE@I@Z @ 13044 NONAME ; QStyleOptionViewItemV4::~QStyleOptionViewItemV4(unsigned int)
+ ??0QSymbianGraphicsSystemEx@@QAE@XZ @ 13045 NONAME ; QSymbianGraphicsSystemEx::QSymbianGraphicsSystemEx(void)
+ ??4QEglProperties@@QAEAAV0@ABV0@@Z @ 13046 NONAME ; class QEglProperties & QEglProperties::operator=(class QEglProperties const &)
+ ??0QHoverEvent@@QAE@ABV0@@Z @ 13047 NONAME ; QHoverEvent::QHoverEvent(class QHoverEvent const &)
+ ??0QPaintEngineState@@QAE@XZ @ 13048 NONAME ; QPaintEngineState::QPaintEngineState(void)
+ ??0QKeyEvent@@QAE@ABV0@@Z @ 13049 NONAME ; QKeyEvent::QKeyEvent(class QKeyEvent const &)
+ ??0QIconEngine@@QAE@ABV0@@Z @ 13050 NONAME ; QIconEngine::QIconEngine(class QIconEngine const &)
+ ??4QStyleOptionToolBoxV2@@QAEAAV0@ABV0@@Z @ 13051 NONAME ; class QStyleOptionToolBoxV2 & QStyleOptionToolBoxV2::operator=(class QStyleOptionToolBoxV2 const &)
+ ??0QImageIOHandlerFactoryInterface@@QAE@XZ @ 13052 NONAME ; QImageIOHandlerFactoryInterface::QImageIOHandlerFactoryInterface(void)
+ ??_EQRegion@@QAE@I@Z @ 13053 NONAME ; QRegion::~QRegion(unsigned int)
+ ??4QStyleOptionComplex@@QAEAAV0@ABV0@@Z @ 13054 NONAME ; class QStyleOptionComplex & QStyleOptionComplex::operator=(class QStyleOptionComplex const &)
+ ??_EFileInfo@QZipReader@@QAE@I@Z @ 13055 NONAME ; QZipReader::FileInfo::~FileInfo(unsigned int)
+ ??0QBitmap@@QAE@ABV0@@Z @ 13056 NONAME ; QBitmap::QBitmap(class QBitmap const &)
+ ?forceToRaster@QSymbianGraphicsSystemEx@@UAEXPAVQWidget@@@Z @ 13057 NONAME ; void QSymbianGraphicsSystemEx::forceToRaster(class QWidget *)
+ ?leadingSpaceWidth@QTextEngine@@QAE?AUQFixed@@ABUQScriptLine@@@Z @ 13058 NONAME ; struct QFixed QTextEngine::leadingSpaceWidth(struct QScriptLine const &)
+ ?releaseCachedGpuResources@QSymbianGraphicsSystemEx@@UAEXXZ @ 13059 NONAME ; void QSymbianGraphicsSystemEx::releaseCachedGpuResources(void)
+ ??_EQTextFormat@@QAE@I@Z @ 13060 NONAME ; QTextFormat::~QTextFormat(unsigned int)
+ ??4QStyleOptionTabWidgetFrame@@QAEAAV0@ABV0@@Z @ 13061 NONAME ; class QStyleOptionTabWidgetFrame & QStyleOptionTabWidgetFrame::operator=(class QStyleOptionTabWidgetFrame const &)
+ ??4QMouseEvent@@QAEAAV0@ABV0@@Z @ 13062 NONAME ; class QMouseEvent & QMouseEvent::operator=(class QMouseEvent const &)
+ ??_EQPainter@@QAE@I@Z @ 13063 NONAME ; QPainter::~QPainter(unsigned int)
+ ??4QStyleOptionTabBarBaseV2@@QAEAAV0@ABV0@@Z @ 13064 NONAME ; class QStyleOptionTabBarBaseV2 & QStyleOptionTabBarBaseV2::operator=(class QStyleOptionTabBarBaseV2 const &)
+ ??4QInputEvent@@QAEAAV0@ABV0@@Z @ 13065 NONAME ; class QInputEvent & QInputEvent::operator=(class QInputEvent const &)
+ ??_EQPainterPath@@QAE@I@Z @ 13066 NONAME ; QPainterPath::~QPainterPath(unsigned int)
+ ??4QQuaternion@@QAEAAV0@ABV0@@Z @ 13067 NONAME ; class QQuaternion & QQuaternion::operator=(class QQuaternion const &)
+ ??4Symbol@QCss@@QAEAAU01@ABU01@@Z @ 13068 NONAME ; struct QCss::Symbol & QCss::Symbol::operator=(struct QCss::Symbol const &)
+ ??0QIconDragEvent@@QAE@ABV0@@Z @ 13069 NONAME ; QIconDragEvent::QIconDragEvent(class QIconDragEvent const &)
+ ??0QTextImageFormat@@QAE@ABV0@@Z @ 13070 NONAME ; QTextImageFormat::QTextImageFormat(class QTextImageFormat const &)
+ ??0QMoveEvent@@QAE@ABV0@@Z @ 13071 NONAME ; QMoveEvent::QMoveEvent(class QMoveEvent const &)
+ ??0QInputContextFactoryInterface@@QAE@XZ @ 13072 NONAME ; QInputContextFactoryInterface::QInputContextFactoryInterface(void)
+ ??0QTextFrameFormat@@QAE@ABV0@@Z @ 13073 NONAME ; QTextFrameFormat::QTextFrameFormat(class QTextFrameFormat const &)
+ ??0Symbol@QCss@@QAE@ABU01@@Z @ 13074 NONAME ; QCss::Symbol::Symbol(struct QCss::Symbol const &)
+ ??4QStyleOptionFrameV3@@QAEAAV0@ABV0@@Z @ 13075 NONAME ; class QStyleOptionFrameV3 & QStyleOptionFrameV3::operator=(class QStyleOptionFrameV3 const &)
+ ??0QGraphicsSystem@@QAE@XZ @ 13076 NONAME ; QGraphicsSystem::QGraphicsSystem(void)
+ ??4QStyleOptionViewItem@@QAEAAV0@ABV0@@Z @ 13077 NONAME ; class QStyleOptionViewItem & QStyleOptionViewItem::operator=(class QStyleOptionViewItem const &)
+ ??4QStyleOptionProgressBar@@QAEAAV0@ABV0@@Z @ 13078 NONAME ; class QStyleOptionProgressBar & QStyleOptionProgressBar::operator=(class QStyleOptionProgressBar const &)
+ ??4QStyleOptionRubberBand@@QAEAAV0@ABV0@@Z @ 13079 NONAME ; class QStyleOptionRubberBand & QStyleOptionRubberBand::operator=(class QStyleOptionRubberBand const &)
+ ??0QDragResponseEvent@@QAE@ABV0@@Z @ 13080 NONAME ; QDragResponseEvent::QDragResponseEvent(class QDragResponseEvent const &)
+ ??0QIconEngine@@QAE@XZ @ 13081 NONAME ; QIconEngine::QIconEngine(void)
+ ??_EQBrush@@QAE@I@Z @ 13082 NONAME ; QBrush::~QBrush(unsigned int)
+ ??_EQTableWidgetSelectionRange@@QAE@I@Z @ 13083 NONAME ; QTableWidgetSelectionRange::~QTableWidgetSelectionRange(unsigned int)
+ ??4QStyleOptionTabBarBase@@QAEAAV0@ABV0@@Z @ 13084 NONAME ; class QStyleOptionTabBarBase & QStyleOptionTabBarBase::operator=(class QStyleOptionTabBarBase const &)
+ ??0QTextObjectInterface@@QAE@XZ @ 13085 NONAME ; QTextObjectInterface::QTextObjectInterface(void)
+ ??0QHideEvent@@QAE@ABV0@@Z @ 13086 NONAME ; QHideEvent::QHideEvent(class QHideEvent const &)
+ ??0QCloseEvent@@QAE@ABV0@@Z @ 13087 NONAME ; QCloseEvent::QCloseEvent(class QCloseEvent const &)
+ ??0QTextFrameLayoutData@@QAE@XZ @ 13088 NONAME ; QTextFrameLayoutData::QTextFrameLayoutData(void)
+ ??4QStyleOptionTabWidgetFrameV2@@QAEAAV0@ABV0@@Z @ 13089 NONAME ; class QStyleOptionTabWidgetFrameV2 & QStyleOptionTabWidgetFrameV2::operator=(class QStyleOptionTabWidgetFrameV2 const &)
+ ??4QStyleOptionTabV2@@QAEAAV0@ABV0@@Z @ 13090 NONAME ; class QStyleOptionTabV2 & QStyleOptionTabV2::operator=(class QStyleOptionTabV2 const &)
+ ?platformExtension@QGraphicsSystem@@UAEPAVQGraphicsSystemEx@@XZ @ 13091 NONAME ; class QGraphicsSystemEx * QGraphicsSystem::platformExtension(void)
+ ??4QTextListFormat@@QAEAAV0@ABV0@@Z @ 13092 NONAME ; class QTextListFormat & QTextListFormat::operator=(class QTextListFormat const &)
+ ??_EQPalette@@QAE@I@Z @ 13093 NONAME ; QPalette::~QPalette(unsigned int)
+ ?releaseAllGpuResources@QSymbianGraphicsSystemEx@@UAEXXZ @ 13094 NONAME ; void QSymbianGraphicsSystemEx::releaseAllGpuResources(void)
+ ??0QFocusEvent@@QAE@ABV0@@Z @ 13095 NONAME ; QFocusEvent::QFocusEvent(class QFocusEvent const &)
+ ??4QStyleOptionQ3ListViewItem@@QAEAAV0@ABV0@@Z @ 13096 NONAME ; class QStyleOptionQ3ListViewItem & QStyleOptionQ3ListViewItem::operator=(class QStyleOptionQ3ListViewItem const &)
+ ??_EQIcon@@QAE@I@Z @ 13097 NONAME ; QIcon::~QIcon(unsigned int)
+ ??0QTextListFormat@@QAE@ABV0@@Z @ 13098 NONAME ; QTextListFormat::QTextListFormat(class QTextListFormat const &)
+ ??0QGuiPlatformPluginInterface@@QAE@XZ @ 13099 NONAME ; QGuiPlatformPluginInterface::QGuiPlatformPluginInterface(void)
+ ??_EQTextLayout@@QAE@I@Z @ 13100 NONAME ; QTextLayout::~QTextLayout(unsigned int)
+ ??0QWheelEvent@@QAE@ABV0@@Z @ 13101 NONAME ; QWheelEvent::QWheelEvent(class QWheelEvent const &)
+ ??0QWindowStateChangeEvent@@QAE@ABV0@@Z @ 13102 NONAME ; QWindowStateChangeEvent::QWindowStateChangeEvent(class QWindowStateChangeEvent const &)
+ ??_EQTextEngine@@QAE@I@Z @ 13103 NONAME ; QTextEngine::~QTextEngine(unsigned int)
+ ??4QStyleOptionTitleBar@@QAEAAV0@ABV0@@Z @ 13104 NONAME ; class QStyleOptionTitleBar & QStyleOptionTitleBar::operator=(class QStyleOptionTitleBar const &)
+ ??4Value@QCss@@QAEAAU01@ABU01@@Z @ 13105 NONAME ; struct QCss::Value & QCss::Value::operator=(struct QCss::Value const &)
+ ?hasBCM2727@QSymbianGraphicsSystemEx@@UAE_NXZ @ 13106 NONAME ; bool QSymbianGraphicsSystemEx::hasBCM2727(void)
+ ??0QDragLeaveEvent@@QAE@ABV0@@Z @ 13107 NONAME ; QDragLeaveEvent::QDragLeaveEvent(class QDragLeaveEvent const &)
+ ??4QBitmap@@QAEAAV0@ABV0@@Z @ 13108 NONAME ; class QBitmap & QBitmap::operator=(class QBitmap const &)
+ ??0QItemSelection@@QAE@ABV0@@Z @ 13109 NONAME ; QItemSelection::QItemSelection(class QItemSelection const &)
+ ??4QTextFrameFormat@@QAEAAV0@ABV0@@Z @ 13110 NONAME ; class QTextFrameFormat & QTextFrameFormat::operator=(class QTextFrameFormat const &)
+ ?setInstantInvalidatePropagation@QGraphicsLayout@@SAX_N@Z @ 13111 NONAME ; void QGraphicsLayout::setInstantInvalidatePropagation(bool)
+ ?instantInvalidatePropagation@QGraphicsLayout@@SA_NXZ @ 13112 NONAME ; bool QGraphicsLayout::instantInvalidatePropagation(void)
diff --git a/src/s60installs/bwins/QtMultimediau.def b/src/s60installs/bwins/QtMultimediau.def
index b8cf6b9..19e6bc7 100644
--- a/src/s60installs/bwins/QtMultimediau.def
+++ b/src/s60installs/bwins/QtMultimediau.def
@@ -274,4 +274,9 @@ EXPORTS
?sampleRate@QAudioFormat@@QBEHXZ @ 273 NONAME ; int QAudioFormat::sampleRate(void) const
?supportedSampleRates@QAudioDeviceInfo@@QBE?AV?$QList@H@@XZ @ 274 NONAME ; class QList<int> QAudioDeviceInfo::supportedSampleRates(void) const
?setChannelCount@QAudioFormat@@QAEXH@Z @ 275 NONAME ; void QAudioFormat::setChannelCount(int)
+ ??0QAbstractAudioInput@@QAE@XZ @ 276 NONAME ; QAbstractAudioInput::QAbstractAudioInput(void)
+ ??0QAudioEngineFactoryInterface@@QAE@XZ @ 277 NONAME ; QAudioEngineFactoryInterface::QAudioEngineFactoryInterface(void)
+ ??0QAbstractAudioDeviceInfo@@QAE@XZ @ 278 NONAME ; QAbstractAudioDeviceInfo::QAbstractAudioDeviceInfo(void)
+ ??0QAbstractAudioOutput@@QAE@XZ @ 279 NONAME ; QAbstractAudioOutput::QAbstractAudioOutput(void)
+ ??_EQAudioDeviceInfo@@QAE@I@Z @ 280 NONAME ; QAudioDeviceInfo::~QAudioDeviceInfo(unsigned int)
diff --git a/src/s60installs/bwins/QtNetworku.def b/src/s60installs/bwins/QtNetworku.def
index 21718d3..c044693 100644
--- a/src/s60installs/bwins/QtNetworku.def
+++ b/src/s60installs/bwins/QtNetworku.def
@@ -1145,4 +1145,18 @@ EXPORTS
?setNetworkAccessible@QNetworkAccessManager@@QAEXW4NetworkAccessibility@1@@Z @ 1144 NONAME ; void QNetworkAccessManager::setNetworkAccessible(enum QNetworkAccessManager::NetworkAccessibility)
??_EQBearerEngineFactoryInterface@@UAE@I@Z @ 1145 NONAME ; QBearerEngineFactoryInterface::~QBearerEngineFactoryInterface(unsigned int)
?enablePolling@QNetworkConfigurationManagerPrivate@@QAEXXZ @ 1146 NONAME ; void QNetworkConfigurationManagerPrivate::enablePolling(void)
+ ??_EQSslError@@QAE@I@Z @ 1147 NONAME ; QSslError::~QSslError(unsigned int)
+ ??0QBearerEngineFactoryInterface@@QAE@XZ @ 1148 NONAME ; QBearerEngineFactoryInterface::QBearerEngineFactoryInterface(void)
+ ??_EQSslCipher@@QAE@I@Z @ 1149 NONAME ; QSslCipher::~QSslCipher(unsigned int)
+ ??_EQSslConfiguration@@QAE@I@Z @ 1150 NONAME ; QSslConfiguration::~QSslConfiguration(unsigned int)
+ ??_EQSslCertificate@@QAE@I@Z @ 1151 NONAME ; QSslCertificate::~QSslCertificate(unsigned int)
+ ??_EQNetworkInterface@@QAE@I@Z @ 1152 NONAME ; QNetworkInterface::~QNetworkInterface(unsigned int)
+ ??_EQNetworkProxy@@QAE@I@Z @ 1153 NONAME ; QNetworkProxy::~QNetworkProxy(unsigned int)
+ ??_EQHostAddress@@QAE@I@Z @ 1154 NONAME ; QHostAddress::~QHostAddress(unsigned int)
+ ??_EQNetworkConfiguration@@QAE@I@Z @ 1155 NONAME ; QNetworkConfiguration::~QNetworkConfiguration(unsigned int)
+ ??_EQHostInfo@@QAE@I@Z @ 1156 NONAME ; QHostInfo::~QHostInfo(unsigned int)
+ ??_EQNetworkRequest@@QAE@I@Z @ 1157 NONAME ; QNetworkRequest::~QNetworkRequest(unsigned int)
+ ??4QIPv6Address@@QAEAAV0@ABV0@@Z @ 1158 NONAME ; class QIPv6Address & QIPv6Address::operator=(class QIPv6Address const &)
+ ??_EQNetworkAddressEntry@@QAE@I@Z @ 1159 NONAME ; QNetworkAddressEntry::~QNetworkAddressEntry(unsigned int)
+ ??_EQNetworkCookie@@QAE@I@Z @ 1160 NONAME ; QNetworkCookie::~QNetworkCookie(unsigned int)
diff --git a/src/s60installs/bwins/QtOpenGLu.def b/src/s60installs/bwins/QtOpenGLu.def
index d7c8394..75c0d5e 100644
--- a/src/s60installs/bwins/QtOpenGLu.def
+++ b/src/s60installs/bwins/QtOpenGLu.def
@@ -715,11 +715,13 @@ EXPORTS
?detachTextureFromPool@QGLPixmapData@@QAEXXZ @ 714 NONAME ; void QGLPixmapData::detachTextureFromPool(void)
?reclaimTexture@QGLPixmapData@@QAEXXZ @ 715 NONAME ; void QGLPixmapData::reclaimTexture(void)
?destroyTexture@QGLPixmapData@@QAEXXZ @ 716 NONAME ; void QGLPixmapData::destroyTexture(void)
- ?releaseCachedResources@QGLGraphicsSystem@@UAEXXZ @ 717 NONAME ; void QGLGraphicsSystem::releaseCachedResources(void)
+ ?releaseCachedResources@QGLGraphicsSystem@@UAEXXZ @ 717 NONAME ABSENT ; void QGLGraphicsSystem::releaseCachedResources(void)
?serialNumber@QGLTextureGlyphCache@@QBEHXZ @ 718 NONAME ; int QGLTextureGlyphCache::serialNumber(void) const
?forceToImage@QGLPixmapData@@QAEXXZ @ 719 NONAME ; void QGLPixmapData::forceToImage(void)
?idealFormat@QGLPixmapData@@QAE?AW4Format@QImage@@AAV3@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 720 NONAME ; enum QImage::Format QGLPixmapData::idealFormat(class QImage &, class QFlags<enum Qt::ImageConversionFlag>)
?releaseNativeImageHandle@QGLPixmapData@@QAEXXZ @ 721 NONAME ; void QGLPixmapData::releaseNativeImageHandle(void)
?createFromNativeImageHandleProvider@QGLPixmapData@@QAEXXZ @ 722 NONAME ; void QGLPixmapData::createFromNativeImageHandleProvider(void)
?initFromNativeImageHandle@QGLPixmapData@@QAE_NPAXABVQString@@@Z @ 723 NONAME ; bool QGLPixmapData::initFromNativeImageHandle(void *, class QString const &)
+ ?platformExtension@QGLGraphicsSystem@@UAEPAVQGraphicsSystemEx@@XZ @ 724 NONAME ; class QGraphicsSystemEx * QGLGraphicsSystem::platformExtension(void)
+ ?releaseCachedGpuResources@QGLGraphicsSystem@@UAEXXZ @ 725 NONAME ; void QGLGraphicsSystem::releaseCachedGpuResources(void)
diff --git a/src/s60installs/bwins/QtScriptu.def b/src/s60installs/bwins/QtScriptu.def
index 02a0819..3185819 100644
--- a/src/s60installs/bwins/QtScriptu.def
+++ b/src/s60installs/bwins/QtScriptu.def
@@ -405,4 +405,6 @@ EXPORTS
?compare@QScriptDeclarativeClass@@UAE_NPAUObject@1@0@Z @ 404 NONAME ; bool QScriptDeclarativeClass::compare(struct QScriptDeclarativeClass::Object *, struct QScriptDeclarativeClass::Object *)
?toString@PersistentIdentifier@QScriptDeclarativeClass@@QBE?AVQString@@XZ @ 405 NONAME ; class QString QScriptDeclarativeClass::PersistentIdentifier::toString(void) const
?startsWithUpper@QScriptDeclarativeClass@@QAE_NABQAX@Z @ 406 NONAME ; bool QScriptDeclarativeClass::startsWithUpper(void * const const &)
+ ??0QScriptExtensionInterface@@QAE@XZ @ 407 NONAME ; QScriptExtensionInterface::QScriptExtensionInterface(void)
+ ??_EQScriptValue@@QAE@I@Z @ 408 NONAME ; QScriptValue::~QScriptValue(unsigned int)
diff --git a/src/s60installs/bwins/QtSqlu.def b/src/s60installs/bwins/QtSqlu.def
index 75fa3d0..8b857c1 100644
--- a/src/s60installs/bwins/QtSqlu.def
+++ b/src/s60installs/bwins/QtSqlu.def
@@ -458,4 +458,7 @@ EXPORTS
?staticMetaObject@QSqlDriver@@2UQMetaObject@@B @ 457 NONAME ; struct QMetaObject const QSqlDriver::staticMetaObject
?staticMetaObject@QSqlQueryModel@@2UQMetaObject@@B @ 458 NONAME ; struct QMetaObject const QSqlQueryModel::staticMetaObject
?staticMetaObject@QSQLiteDriver@@2UQMetaObject@@B @ 459 NONAME ; struct QMetaObject const QSQLiteDriver::staticMetaObject
+ ??4QSqlRelation@@QAEAAV0@ABV0@@Z @ 460 NONAME ; class QSqlRelation & QSqlRelation::operator=(class QSqlRelation const &)
+ ??0QSqlDriverFactoryInterface@@QAE@XZ @ 461 NONAME ; QSqlDriverFactoryInterface::QSqlDriverFactoryInterface(void)
+ ??0QSqlRelation@@QAE@ABV0@@Z @ 462 NONAME ; QSqlRelation::QSqlRelation(class QSqlRelation const &)
diff --git a/src/s60installs/bwins/QtTestu.def b/src/s60installs/bwins/QtTestu.def
index a7bb9cd..40ff5e2 100644
--- a/src/s60installs/bwins/QtTestu.def
+++ b/src/s60installs/bwins/QtTestu.def
@@ -77,4 +77,94 @@ EXPORTS
?staticMetaObject@QTestEventLoop@@2UQMetaObject@@B @ 76 NONAME ; struct QMetaObject const QTestEventLoop::staticMetaObject
?setBenchmarkResult@QTest@@YAXMW4QBenchmarkMetric@1@@Z @ 77 NONAME ; void QTest::setBenchmarkResult(float, enum QTest::QBenchmarkMetric)
?endBenchmarkMeasurement@QTest@@YA_KXZ @ 78 NONAME ; unsigned long long QTest::endBenchmarkMeasurement(void)
+ ?addBenchmarkResult@QTestLog@@SAXABVQBenchmarkResult@@@Z @ 79 NONAME ; void QTestLog::addBenchmarkResult(class QBenchmarkResult const &)
+ ?currentTestLocation@QTestResult@@SA?AW4TestLocation@1@XZ @ 80 NONAME ; enum QTestResult::TestLocation QTestResult::currentTestLocation(void)
+ ?setCurrentTestLocation@QTestResult@@SAXW4TestLocation@1@@Z @ 81 NONAME ; void QTestResult::setCurrentTestLocation(enum QTestResult::TestLocation)
+ ?testFailed@QTestResult@@SA_NXZ @ 82 NONAME ; bool QTestResult::testFailed(void)
+ ?setVerboseLevel@QTestLog@@SAXH@Z @ 83 NONAME ; void QTestLog::setVerboseLevel(int)
+ ?setCurrentTestObject@QTestResult@@SAXPBD@Z @ 84 NONAME ; void QTestResult::setCurrentTestObject(char const *)
+ ?isEmpty@QTestTable@@QBE_NXZ @ 85 NONAME ; bool QTestTable::isEmpty(void) const
+ ?reset@QTestResult@@SAXXZ @ 86 NONAME ; void QTestResult::reset(void)
+ ?info@QTestLog@@SAXPBD0H@Z @ 87 NONAME ; void QTestLog::info(char const *, char const *, int)
+ ?adjustMedianIterationCount@QBenchmarkGlobalData@@QAEHXZ @ 88 NONAME ; int QBenchmarkGlobalData::adjustMedianIterationCount(void)
+ ?addColumn@QTestTable@@QAEXHPBD@Z @ 89 NONAME ; void QTestTable::addColumn(int, char const *)
+ ?setMode@QBenchmarkGlobalData@@QAEXW4Mode@1@@Z @ 90 NONAME ; void QBenchmarkGlobalData::setMode(enum QBenchmarkGlobalData::Mode)
+ ?addFailure@QTestResult@@SAXPBD0H@Z @ 91 NONAME ; void QTestResult::addFailure(char const *, char const *, int)
+ ?indexOf@QTestTable@@QBEHPBD@Z @ 92 NONAME ; int QTestTable::indexOf(char const *) const
+ ?warn@QTestLog@@SAXPBD@Z @ 93 NONAME ; void QTestLog::warn(char const *)
+ ?currentTestData@QTestResult@@SAPAVQTestData@@XZ @ 94 NONAME ; class QTestData * QTestResult::currentTestData(void)
+ ?endDataRun@QBenchmarkTestMethodData@@QAEXXZ @ 95 NONAME ; void QBenchmarkTestMethodData::endDataRun(void)
+ ?globalTestTable@QTestTable@@SAPAV1@XZ @ 96 NONAME ; class QTestTable * QTestTable::globalTestTable(void)
+ ?elementCount@QTestTable@@QBEHXZ @ 97 NONAME ; int QTestTable::elementCount(void) const
+ ??0QTestLog@@AAE@XZ @ 98 NONAME ; QTestLog::QTestLog(void)
+ ?allDataPassed@QTestResult@@SA_NXZ @ 99 NONAME ; bool QTestResult::allDataPassed(void)
+ ??0QBenchmarkTestMethodData@@QAE@XZ @ 100 NONAME ; QBenchmarkTestMethodData::QBenchmarkTestMethodData(void)
+ ?qtest_qParseArgs@QTest@@YAXHQAPAD_N@Z @ 101 NONAME ; void QTest::qtest_qParseArgs(int, char * * const, bool)
+ ?unhandledIgnoreMessages@QTestLog@@SAHXZ @ 102 NONAME ; int QTestLog::unhandledIgnoreMessages(void)
+ ?setCurrentTestFunction@QTestResult@@SAXPBD@Z @ 103 NONAME ; void QTestResult::setCurrentTestFunction(char const *)
+ ?enterTestFunction@QTestLog@@SAXPBD@Z @ 104 NONAME ; void QTestLog::enterTestFunction(char const *)
+ ?testFunctions@QTest@@3VQStringList@@A @ 105 NONAME ; class QStringList QTest::testFunctions
+ ?addSkip@QTestResult@@SAXPBDW4SkipMode@QTest@@0H@Z @ 106 NONAME ; void QTestResult::addSkip(char const *, enum QTest::SkipMode, char const *, int)
+ ?currentGlobalDataTag@QTestResult@@SAPBDXZ @ 107 NONAME ; char const * QTestResult::currentGlobalDataTag(void)
+ ?stopLogging@QTestLog@@SAXXZ @ 108 NONAME ; void QTestLog::stopLogging(void)
+ ??_EQTestData@@QAE@I@Z @ 109 NONAME ; QTestData::~QTestData(unsigned int)
+ ??1QTestLog@@AAE@XZ @ 110 NONAME ; QTestLog::~QTestLog(void)
+ ?skipCount@QTestResult@@SAHXZ @ 111 NONAME ; int QTestResult::skipCount(void)
+ ?setCurrentGlobalTestData@QTestResult@@SAXPAVQTestData@@@Z @ 112 NONAME ; void QTestResult::setCurrentGlobalTestData(class QTestData *)
+ ?elementTypeId@QTestTable@@QBEHH@Z @ 113 NONAME ; int QTestTable::elementTypeId(int) const
+ ?dataTag@QTestTable@@QBEPBDH@Z @ 114 NONAME ; char const * QTestTable::dataTag(int) const
+ ?dataCount@QTestTable@@QBEHXZ @ 115 NONAME ; int QTestTable::dataCount(void) const
+ ?printUnhandledIgnoreMessages@QTestLog@@SAXXZ @ 116 NONAME ; void QTestLog::printUnhandledIgnoreMessages(void)
+ ??1QBenchmarkTestMethodData@@QAE@XZ @ 117 NONAME ; QBenchmarkTestMethodData::~QBenchmarkTestMethodData(void)
+ ??1QTestTable@@QAE@XZ @ 118 NONAME ; QTestTable::~QTestTable(void)
+ ?current@QBenchmarkGlobalData@@2PAV1@A @ 119 NONAME ; class QBenchmarkGlobalData * QBenchmarkGlobalData::current
+ ?setFlushMode@QTestLog@@SAXW4FlushMode@1@@Z @ 120 NONAME ; void QTestLog::setFlushMode(enum QTestLog::FlushMode)
+ ?ignoreMessage@QTestResult@@SAXW4QtMsgType@@PBD@Z @ 121 NONAME ; void QTestResult::ignoreMessage(enum QtMsgType, char const *)
+ ?failCount@QTestResult@@SAHXZ @ 122 NONAME ; int QTestResult::failCount(void)
+ ?mode@QBenchmarkGlobalData@@QBE?AW4Mode@1@XZ @ 123 NONAME ; enum QBenchmarkGlobalData::Mode QBenchmarkGlobalData::mode(void) const
+ ?addSkip@QTestLog@@SAXPBDW4SkipMode@QTest@@0H@Z @ 124 NONAME ; void QTestLog::addSkip(char const *, enum QTest::SkipMode, char const *, int)
+ ?outputFileName@QTestLog@@SAPBDXZ @ 125 NONAME ; char const * QTestLog::outputFileName(void)
+ ?expectFail@QTestResult@@SA_NPBD0W4TestFailMode@QTest@@0H@Z @ 126 NONAME ; bool QTestResult::expectFail(char const *, char const *, enum QTest::TestFailMode, char const *, int)
+ ?passCount@QTestResult@@SAHXZ @ 127 NONAME ; int QTestResult::passCount(void)
+ ?logMode@QTestLog@@SA?AW4LogMode@1@XZ @ 128 NONAME ; enum QTestLog::LogMode QTestLog::logMode(void)
+ ?skipCurrentTest@QTestResult@@SA_NXZ @ 129 NONAME ; bool QTestResult::skipCurrentTest(void)
+ ?addXPass@QTestLog@@SAXPBD0H@Z @ 130 NONAME ; void QTestLog::addXPass(char const *, char const *, int)
+ ?testTags@QTest@@3VQStringList@@A @ 131 NONAME ; class QStringList QTest::testTags
+ ?isBenchmark@QBenchmarkTestMethodData@@QBE_NXZ @ 132 NONAME ; bool QBenchmarkTestMethodData::isBenchmark(void) const
+ ?adjustIterationCount@QBenchmarkTestMethodData@@QAEHH@Z @ 133 NONAME ; int QBenchmarkTestMethodData::adjustIterationCount(int)
+ ??1QBenchmarkGlobalData@@QAE@XZ @ 134 NONAME ; QBenchmarkGlobalData::~QBenchmarkGlobalData(void)
+ ?printAvailableFunctions@QTest@@3_NA @ 135 NONAME ; bool QTest::printAvailableFunctions
+ ?testData@QTestTable@@QBEPAVQTestData@@H@Z @ 136 NONAME ; class QTestData * QTestTable::testData(int) const
+ ?setCurrentTestData@QTestResult@@SAXPAVQTestData@@@Z @ 137 NONAME ; void QTestResult::setCurrentTestData(class QTestData *)
+ ?compare@QTestResult@@SA_N_NPBD1H@Z @ 138 NONAME ; bool QTestResult::compare(bool, char const *, char const *, int)
+ ?currentTestFailed@QTestResult@@SA_NXZ @ 139 NONAME ; bool QTestResult::currentTestFailed(void)
+ ?compare@QTestResult@@SA_N_NPBDPAD2111H@Z @ 140 NONAME ; bool QTestResult::compare(bool, char const *, char *, char *, char const *, char const *, char const *, int)
+ ?addXFail@QTestLog@@SAXPBD0H@Z @ 141 NONAME ; void QTestLog::addXFail(char const *, char const *, int)
+ ??_EQTestTable@@QAE@I@Z @ 142 NONAME ; QTestTable::~QTestTable(unsigned int)
+ ??0QBenchmarkGlobalData@@QAE@XZ @ 143 NONAME ; QBenchmarkGlobalData::QBenchmarkGlobalData(void)
+ ?beginDataRun@QBenchmarkTestMethodData@@QAEXXZ @ 144 NONAME ; void QBenchmarkTestMethodData::beginDataRun(void)
+ ?resultsAccepted@QBenchmarkTestMethodData@@QBE_NXZ @ 145 NONAME ; bool QBenchmarkTestMethodData::resultsAccepted(void) const
+ ?addIgnoreMessage@QTestLog@@SAXW4QtMsgType@@PBD@Z @ 146 NONAME ; void QTestLog::addIgnoreMessage(enum QtMsgType, char const *)
+ ?startLogging@QTestLog@@SAXXZ @ 147 NONAME ; void QTestLog::startLogging(void)
+ ?currentDataTag@QTestResult@@SAPBDXZ @ 148 NONAME ; char const * QTestResult::currentDataTag(void)
+ ?redirectOutput@QTestLog@@SAXPBD@Z @ 149 NONAME ; void QTestLog::redirectOutput(char const *)
+ ?currentTestObjectName@QTestResult@@SAPBDXZ @ 150 NONAME ; char const * QTestResult::currentTestObjectName(void)
+ ?newData@QTestTable@@QAEPAVQTestData@@PBD@Z @ 151 NONAME ; class QTestData * QTestTable::newData(char const *)
+ ?addPass@QTestLog@@SAXPBD@Z @ 152 NONAME ; void QTestLog::addPass(char const *)
+ ?verboseLevel@QTestLog@@SAHXZ @ 153 NONAME ; int QTestLog::verboseLevel(void)
+ ?createMeasurer@QBenchmarkGlobalData@@QAEPAVQBenchmarkMeasurerBase@@XZ @ 154 NONAME ; class QBenchmarkMeasurerBase * QBenchmarkGlobalData::createMeasurer(void)
+ ?currentGlobalTestData@QTestResult@@SAPAVQTestData@@XZ @ 155 NONAME ; class QTestData * QTestResult::currentGlobalTestData(void)
+ ?setSkipCurrentTest@QTestResult@@SAX_N@Z @ 156 NONAME ; void QTestResult::setSkipCurrentTest(bool)
+ ?setResult@QBenchmarkTestMethodData@@QAEXMW4QBenchmarkMetric@QTest@@_N@Z @ 157 NONAME ; void QBenchmarkTestMethodData::setResult(float, enum QTest::QBenchmarkMetric, bool)
+ ?verify@QTestResult@@SA_N_NPBD11H@Z @ 158 NONAME ; bool QTestResult::verify(bool, char const *, char const *, char const *, int)
+ ?leaveTestFunction@QTestLog@@SAXXZ @ 159 NONAME ; void QTestLog::leaveTestFunction(void)
+ ?finishedCurrentTestFunction@QTestResult@@SAXXZ @ 160 NONAME ; void QTestResult::finishedCurrentTestFunction(void)
+ ?currentTestTable@QTestTable@@SAPAV1@XZ @ 161 NONAME ; class QTestTable * QTestTable::currentTestTable(void)
+ ?currentTestFunction@QTestResult@@SAPBDXZ @ 162 NONAME ; char const * QTestResult::currentTestFunction(void)
+ ?setLogMode@QTestLog@@SAXW4LogMode@1@@Z @ 163 NONAME ; void QTestLog::setLogMode(enum QTestLog::LogMode)
+ ?clearGlobalTestTable@QTestTable@@SAXXZ @ 164 NONAME ; void QTestTable::clearGlobalTestTable(void)
+ ?addFail@QTestLog@@SAXPBD0H@Z @ 165 NONAME ; void QTestLog::addFail(char const *, char const *, int)
+ ??0QTestTable@@QAE@XZ @ 166 NONAME ; QTestTable::QTestTable(void)
+ ?setMaxWarnings@QTestLog@@SAXH@Z @ 167 NONAME ; void QTestLog::setMaxWarnings(int)
+ ?current@QBenchmarkTestMethodData@@2PAV1@A @ 168 NONAME ; class QBenchmarkTestMethodData * QBenchmarkTestMethodData::current
diff --git a/src/s60installs/bwins/QtXmlPatternsu.def b/src/s60installs/bwins/QtXmlPatternsu.def
index 57a75d4..5a458b3 100644
--- a/src/s60installs/bwins/QtXmlPatternsu.def
+++ b/src/s60installs/bwins/QtXmlPatternsu.def
@@ -277,4 +277,7 @@ EXPORTS
?writeEscapedAttribute@QXmlSerializer@@AAEXABVQString@@@Z @ 276 NONAME ; void QXmlSerializer::writeEscapedAttribute(class QString const &)
?staticMetaObject@QAbstractMessageHandler@@2UQMetaObject@@B @ 277 NONAME ; struct QMetaObject const QAbstractMessageHandler::staticMetaObject
?staticMetaObject@QAbstractUriResolver@@2UQMetaObject@@B @ 278 NONAME ; struct QMetaObject const QAbstractUriResolver::staticMetaObject
+ ??_EQXmlQuery@@QAE@I@Z @ 279 NONAME ; QXmlQuery::~QXmlQuery(unsigned int)
+ ??4QXmlNodeModelIndex@@QAEAAV0@ABV0@@Z @ 280 NONAME ; class QXmlNodeModelIndex & QXmlNodeModelIndex::operator=(class QXmlNodeModelIndex const &)
+ ??_EQXmlItem@@QAE@I@Z @ 281 NONAME ; QXmlItem::~QXmlItem(unsigned int)
diff --git a/src/s60installs/bwins/QtXmlu.def b/src/s60installs/bwins/QtXmlu.def
index 744a744..f54e317 100644
--- a/src/s60installs/bwins/QtXmlu.def
+++ b/src/s60installs/bwins/QtXmlu.def
@@ -400,4 +400,11 @@ EXPORTS
?warning@QXmlDefaultHandler@@UAE_NABVQXmlParseException@@@Z @ 399 NONAME ; bool QXmlDefaultHandler::warning(class QXmlParseException const &)
?EndOfDocument@QXmlInputSource@@2GB @ 400 NONAME ; unsigned short const QXmlInputSource::EndOfDocument
?EndOfData@QXmlInputSource@@2GB @ 401 NONAME ; unsigned short const QXmlInputSource::EndOfData
+ ??0QXmlContentHandler@@QAE@XZ @ 402 NONAME ; QXmlContentHandler::QXmlContentHandler(void)
+ ??0QXmlDTDHandler@@QAE@XZ @ 403 NONAME ; QXmlDTDHandler::QXmlDTDHandler(void)
+ ??0QXmlReader@@QAE@XZ @ 404 NONAME ; QXmlReader::QXmlReader(void)
+ ??0QXmlLexicalHandler@@QAE@XZ @ 405 NONAME ; QXmlLexicalHandler::QXmlLexicalHandler(void)
+ ??0QXmlDeclHandler@@QAE@XZ @ 406 NONAME ; QXmlDeclHandler::QXmlDeclHandler(void)
+ ??0QXmlEntityResolver@@QAE@XZ @ 407 NONAME ; QXmlEntityResolver::QXmlEntityResolver(void)
+ ??0QXmlErrorHandler@@QAE@XZ @ 408 NONAME ; QXmlErrorHandler::QXmlErrorHandler(void)
diff --git a/src/s60installs/bwins/phononu.def b/src/s60installs/bwins/phononu.def
index fe80e12..15f83b1 100644
--- a/src/s60installs/bwins/phononu.def
+++ b/src/s60installs/bwins/phononu.def
@@ -570,4 +570,8 @@ EXPORTS
?setOutputDevice@PulseSupport@Phonon@@QAE_NVQString@@H@Z @ 569 NONAME ; bool Phonon::PulseSupport::setOutputDevice(class QString, int)
?qt_metacast@AudioDataOutput@Phonon@@UAEPAXPBD@Z @ 570 NONAME ; void * Phonon::AudioDataOutput::qt_metacast(char const *)
?clearStreamCache@PulseSupport@Phonon@@QAEXVQString@@@Z @ 571 NONAME ; void Phonon::PulseSupport::clearStreamCache(class QString)
+ ??_EEffectParameter@Phonon@@QAE@I@Z @ 572 NONAME ; Phonon::EffectParameter::~EffectParameter(unsigned int)
+ ??_EPath@Phonon@@QAE@I@Z @ 573 NONAME ; Phonon::Path::~Path(unsigned int)
+ ??_EMediaSource@Phonon@@QAE@I@Z @ 574 NONAME ; Phonon::MediaSource::~MediaSource(unsigned int)
+ ??_EObjectDescriptionData@Phonon@@QAE@I@Z @ 575 NONAME ; Phonon::ObjectDescriptionData::~ObjectDescriptionData(unsigned int)
diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def
index b6a24ab..d0c789f 100644
--- a/src/s60installs/eabi/QtGuiu.def
+++ b/src/s60installs/eabi/QtGuiu.def
@@ -12180,6 +12180,19 @@ EXPORTS
_ZNK14QVolatileImage7toImageEv @ 12179 NONAME
_ZNK14QVolatileImage9byteCountEv @ 12180 NONAME
_ZNK14QVolatileImage9constBitsEv @ 12181 NONAME
- _ZN15QGraphicsSystem22releaseCachedResourcesEv @ 12182 NONAME
+ _ZN15QGraphicsSystem22releaseCachedResourcesEv @ 12182 NONAME ABSENT
_Z32qt_s60_setPartialScreenInputModeb @ 12183 NONAME
+ _Z29qt_draw_decoration_for_glyphsP8QPainterPKjPK11QFixedPointiP11QFontEngineRK5QFontRK15QTextCharFormat @ 12184 NONAME
+ _ZNK14QVolatileImage14paintingActiveEv @ 12185 NONAME
+ _ZN11QTextEngine17leadingSpaceWidthERK11QScriptLine @ 12186 NONAME
+ _ZN15QGraphicsLayout28instantInvalidatePropagationEv @ 12187 NONAME
+ _ZN15QGraphicsLayout31setInstantInvalidatePropagationEb @ 12188 NONAME
+ _ZN15QGraphicsSystem17platformExtensionEv @ 12189 NONAME
+ _ZN24QSymbianGraphicsSystemEx10hasBCM2727Ev @ 12190 NONAME
+ _ZN24QSymbianGraphicsSystemEx13forceToRasterEP7QWidget @ 12191 NONAME
+ _ZN24QSymbianGraphicsSystemEx22releaseAllGpuResourcesEv @ 12192 NONAME
+ _ZN24QSymbianGraphicsSystemEx25releaseCachedGpuResourcesEv @ 12193 NONAME
+ _ZTI17QGraphicsSystemEx @ 12194 NONAME
+ _ZTI24QSymbianGraphicsSystemEx @ 12195 NONAME
+ _ZTV24QSymbianGraphicsSystemEx @ 12196 NONAME
diff --git a/src/s60installs/eabi/QtOpenGLu.def b/src/s60installs/eabi/QtOpenGLu.def
index 488c6cd..5a8c0ee 100644
--- a/src/s60installs/eabi/QtOpenGLu.def
+++ b/src/s60installs/eabi/QtOpenGLu.def
@@ -719,9 +719,12 @@ EXPORTS
_ZN13QGLPixmapData14reclaimTextureEv @ 718 NONAME
_ZN13QGLPixmapData21detachTextureFromPoolEv @ 719 NONAME
_ZN13QGLPixmapData9hibernateEv @ 720 NONAME
- _ZN17QGLGraphicsSystem22releaseCachedResourcesEv @ 721 NONAME
+ _ZN17QGLGraphicsSystem22releaseCachedResourcesEv @ 721 NONAME ABSENT
_ZN13QGLPixmapData11idealFormatER6QImage6QFlagsIN2Qt19ImageConversionFlagEE @ 722 NONAME
_ZN13QGLPixmapData24releaseNativeImageHandleEv @ 723 NONAME
_ZN13QGLPixmapData25initFromNativeImageHandleEPvRK7QString @ 724 NONAME
_ZN13QGLPixmapData35createFromNativeImageHandleProviderEv @ 725 NONAME
+ _ZN17QGLGraphicsSystem17platformExtensionEv @ 726 NONAME
+ _ZN17QGLGraphicsSystem25releaseCachedGpuResourcesEv @ 727 NONAME
+ _ZThn4_N17QGLGraphicsSystem25releaseCachedGpuResourcesEv @ 728 NONAME
diff --git a/src/s60installs/eabi/QtTestu.def b/src/s60installs/eabi/QtTestu.def
index 5cb95ba..3b8c297 100644
--- a/src/s60installs/eabi/QtTestu.def
+++ b/src/s60installs/eabi/QtTestu.def
@@ -70,4 +70,97 @@ EXPORTS
_ZTI14QTestEventLoop @ 69 NONAME
_ZTV14QTestEventLoop @ 70 NONAME
_ZN5QTest18setBenchmarkResultEfNS_16QBenchmarkMetricE @ 71 NONAME
+ _ZN10QTestTable15globalTestTableEv @ 72 NONAME
+ _ZN10QTestTable16currentTestTableEv @ 73 NONAME
+ _ZN10QTestTable20clearGlobalTestTableEv @ 74 NONAME
+ _ZN10QTestTable7newDataEPKc @ 75 NONAME
+ _ZN10QTestTable9addColumnEiPKc @ 76 NONAME
+ _ZN10QTestTableC1Ev @ 77 NONAME
+ _ZN10QTestTableC2Ev @ 78 NONAME
+ _ZN10QTestTableD1Ev @ 79 NONAME
+ _ZN10QTestTableD2Ev @ 80 NONAME
+ _ZN11QTestResult10addFailureEPKcS1_i @ 81 NONAME
+ _ZN11QTestResult10expectFailEPKcS1_N5QTest12TestFailModeES1_i @ 82 NONAME
+ _ZN11QTestResult10testFailedEv @ 83 NONAME
+ _ZN11QTestResult13allDataPassedEv @ 84 NONAME
+ _ZN11QTestResult13ignoreMessageE9QtMsgTypePKc @ 85 NONAME
+ _ZN11QTestResult14currentDataTagEv @ 86 NONAME
+ _ZN11QTestResult15currentTestDataEv @ 87 NONAME
+ _ZN11QTestResult15skipCurrentTestEv @ 88 NONAME
+ _ZN11QTestResult17currentTestFailedEv @ 89 NONAME
+ _ZN11QTestResult18setCurrentTestDataEP9QTestData @ 90 NONAME
+ _ZN11QTestResult18setSkipCurrentTestEb @ 91 NONAME
+ _ZN11QTestResult19currentTestFunctionEv @ 92 NONAME
+ _ZN11QTestResult19currentTestLocationEv @ 93 NONAME
+ _ZN11QTestResult20currentGlobalDataTagEv @ 94 NONAME
+ _ZN11QTestResult20setCurrentTestObjectEPKc @ 95 NONAME
+ _ZN11QTestResult21currentGlobalTestDataEv @ 96 NONAME
+ _ZN11QTestResult21currentTestObjectNameEv @ 97 NONAME
+ _ZN11QTestResult22setCurrentTestFunctionEPKc @ 98 NONAME
+ _ZN11QTestResult22setCurrentTestLocationENS_12TestLocationE @ 99 NONAME
+ _ZN11QTestResult24setCurrentGlobalTestDataEP9QTestData @ 100 NONAME
+ _ZN11QTestResult27finishedCurrentTestFunctionEv @ 101 NONAME
+ _ZN11QTestResult5resetEv @ 102 NONAME
+ _ZN11QTestResult6verifyEbPKcS1_S1_i @ 103 NONAME
+ _ZN11QTestResult7addSkipEPKcN5QTest8SkipModeES1_i @ 104 NONAME
+ _ZN11QTestResult7compareEbPKcPcS2_S1_S1_S1_i @ 105 NONAME
+ _ZN11QTestResult7compareEbPKcS1_i @ 106 NONAME
+ _ZN11QTestResult9failCountEv @ 107 NONAME
+ _ZN11QTestResult9passCountEv @ 108 NONAME
+ _ZN11QTestResult9skipCountEv @ 109 NONAME
+ _ZN20QBenchmarkGlobalData14createMeasurerEv @ 110 NONAME
+ _ZN20QBenchmarkGlobalData26adjustMedianIterationCountEv @ 111 NONAME
+ _ZN20QBenchmarkGlobalData7currentE @ 112 NONAME DATA 4
+ _ZN20QBenchmarkGlobalData7setModeENS_4ModeE @ 113 NONAME
+ _ZN20QBenchmarkGlobalDataC1Ev @ 114 NONAME
+ _ZN20QBenchmarkGlobalDataC2Ev @ 115 NONAME
+ _ZN20QBenchmarkGlobalDataD1Ev @ 116 NONAME
+ _ZN20QBenchmarkGlobalDataD2Ev @ 117 NONAME
+ _ZN24QBenchmarkTestMethodData10endDataRunEv @ 118 NONAME
+ _ZN24QBenchmarkTestMethodData12beginDataRunEv @ 119 NONAME
+ _ZN24QBenchmarkTestMethodData20adjustIterationCountEi @ 120 NONAME
+ _ZN24QBenchmarkTestMethodData7currentE @ 121 NONAME DATA 4
+ _ZN24QBenchmarkTestMethodData9setResultEfN5QTest16QBenchmarkMetricEb @ 122 NONAME
+ _ZN24QBenchmarkTestMethodDataC1Ev @ 123 NONAME
+ _ZN24QBenchmarkTestMethodDataC2Ev @ 124 NONAME
+ _ZN24QBenchmarkTestMethodDataD1Ev @ 125 NONAME
+ _ZN24QBenchmarkTestMethodDataD2Ev @ 126 NONAME
+ _ZN5QTest13testFunctionsE @ 127 NONAME DATA 4
+ _ZN5QTest16qtest_qParseArgsEiPPcb @ 128 NONAME
+ _ZN5QTest23printAvailableFunctionsE @ 129 NONAME DATA 1
+ _ZN5QTest8testTagsE @ 130 NONAME DATA 4
+ _ZN8QTestLog10setLogModeENS_7LogModeE @ 131 NONAME
+ _ZN8QTestLog11stopLoggingEv @ 132 NONAME
+ _ZN8QTestLog12setFlushModeENS_9FlushModeE @ 133 NONAME
+ _ZN8QTestLog12startLoggingEv @ 134 NONAME
+ _ZN8QTestLog12verboseLevelEv @ 135 NONAME
+ _ZN8QTestLog14outputFileNameEv @ 136 NONAME
+ _ZN8QTestLog14redirectOutputEPKc @ 137 NONAME
+ _ZN8QTestLog14setMaxWarningsEi @ 138 NONAME
+ _ZN8QTestLog15setVerboseLevelEi @ 139 NONAME
+ _ZN8QTestLog16addIgnoreMessageE9QtMsgTypePKc @ 140 NONAME
+ _ZN8QTestLog17enterTestFunctionEPKc @ 141 NONAME
+ _ZN8QTestLog17leaveTestFunctionEv @ 142 NONAME
+ _ZN8QTestLog18addBenchmarkResultERK16QBenchmarkResult @ 143 NONAME
+ _ZN8QTestLog23unhandledIgnoreMessagesEv @ 144 NONAME
+ _ZN8QTestLog28printUnhandledIgnoreMessagesEv @ 145 NONAME
+ _ZN8QTestLog4infoEPKcS1_i @ 146 NONAME
+ _ZN8QTestLog4warnEPKc @ 147 NONAME
+ _ZN8QTestLog7addFailEPKcS1_i @ 148 NONAME
+ _ZN8QTestLog7addPassEPKc @ 149 NONAME
+ _ZN8QTestLog7addSkipEPKcN5QTest8SkipModeES1_i @ 150 NONAME
+ _ZN8QTestLog7logModeEv @ 151 NONAME
+ _ZN8QTestLog8addXFailEPKcS1_i @ 152 NONAME
+ _ZN8QTestLog8addXPassEPKcS1_i @ 153 NONAME
+ _ZN8QTestLogC1Ev @ 154 NONAME
+ _ZN8QTestLogC2Ev @ 155 NONAME
+ _ZN8QTestLogD1Ev @ 156 NONAME
+ _ZN8QTestLogD2Ev @ 157 NONAME
+ _ZNK10QTestTable12elementCountEv @ 158 NONAME
+ _ZNK10QTestTable13elementTypeIdEi @ 159 NONAME
+ _ZNK10QTestTable7dataTagEi @ 160 NONAME
+ _ZNK10QTestTable7indexOfEPKc @ 161 NONAME
+ _ZNK10QTestTable7isEmptyEv @ 162 NONAME
+ _ZNK10QTestTable8testDataEi @ 163 NONAME
+ _ZNK10QTestTable9dataCountEv @ 164 NONAME
diff --git a/src/s60installs/qt.iby b/src/s60installs/qt.iby
index 4afbf05..d6b36e0 100644
--- a/src/s60installs/qt.iby
+++ b/src/s60installs/qt.iby
@@ -15,7 +15,6 @@ file=ABI_DIR\BUILD_DIR\QtXml.dll SHARED_LIB_DIR\QtXml.dll
file=ABI_DIR\BUILD_DIR\QtNetwork.dll SHARED_LIB_DIR\QtNetwork.dll
file=ABI_DIR\BUILD_DIR\QtScript.dll SHARED_LIB_DIR\QtScript.dll
file=ABI_DIR\BUILD_DIR\QtTest.dll SHARED_LIB_DIR\QtTest.dll
-file=ABI_DIR\BUILD_DIR\QtWebKit.dll SHARED_LIB_DIR\QtWebKit.dll
file=ABI_DIR\BUILD_DIR\phonon.dll SHARED_LIB_DIR\phonon.dll
file=ABI_DIR\BUILD_DIR\QtMultimedia.dll SHARED_LIB_DIR\QtMultimedia.dll
file=ABI_DIR\BUILD_DIR\QtXmlPatterns.dll SHARED_LIB_DIR\QtXmlPatterns.dll
@@ -40,14 +39,8 @@ file=ABI_DIR\BUILD_DIR\qtwcodecs.dll SHARED_LIB_DIR\qtwcodecs.dll
file=ABI_DIR\BUILD_DIR\qsvgicon.dll SHARED_LIB_DIR\qsvgicon.dll
// Phonon MMF backend
-// This is commented out by default, as normally Helix backend will be used.
-// If the Helix backend is present, it will override MMF backend, so make sure to remove it from
-// image creation in addition to uncommenting the following lines if you want to use MMF backend.
-//file=ABI_DIR\BUILD_DIR\phonon_mmf.dll SHARED_LIB_DIR\phonon_mmf.dll
-//data=\epoc32\data\z\resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin
-
-// QtMultimedia audio backend
-file=ABI_DIR\BUILD_DIR\qaudio.dll SHARED_LIB_DIR\qaudio.dll
+file=ABI_DIR\BUILD_DIR\phonon_mmf.dll SHARED_LIB_DIR\phonon_mmf.dll
+data=\epoc32\data\z\resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin resource\qt\plugins\phonon_backend\phonon_mmf.qtplugin
// graphicssystems
file=ABI_DIR\BUILD_DIR\qvggraphicssystem.dll SHARED_LIB_DIR\qvggraphicssystem.dll
@@ -60,8 +53,6 @@ file=ABI_DIR\BUILD_DIR\qsymbianbearer.dll SHARED_LIB_DIR\qsymbianbearer.dll
// so don't bother including those plugins
file=ABI_DIR\BUILD_DIR\qts60plugin_5_0.dll SHARED_LIB_DIR\qts60plugin_5_0.dll
-S60_APP_RESOURCE(s60main)
-
// imageformats stubs
data=\epoc32\data\z\resource\qt\plugins\imageformats\qgif.qtplugin resource\qt\plugins\imageformats\qgif.qtplugin
data=\epoc32\data\z\resource\qt\plugins\imageformats\qico.qtplugin resource\qt\plugins\imageformats\qico.qtplugin
@@ -80,24 +71,18 @@ data=\epoc32\data\z\resource\qt\plugins\codecs\qtwcodecs.qtplugin resou
data=\epoc32\data\z\resource\qt\plugins\iconengines\qsvgicon.qtplugin resource\qt\plugins\iconengines\qsvgicon.qtplugin
// qml import plugins
-file=ABI_DIR\BUILD_DIR\qmlwebkitplugin.dll SHARED_LIB_DIR\qmlwebkitplugin.dll
file=ABI_DIR\BUILD_DIR\qmlfolderlistmodelplugin.dll SHARED_LIB_DIR\qmlfolderlistmodelplugin.dll
file=ABI_DIR\BUILD_DIR\qmlgesturesplugin.dll SHARED_LIB_DIR\qmlgesturesplugin.dll
file=ABI_DIR\BUILD_DIR\qmlparticlesplugin.dll SHARED_LIB_DIR\qmlparticlesplugin.dll
-data=\epoc32\data\z\resource\qt\imports\QtWebKit\qmlwebkitplugin.qtplugin resource\qt\imports\QtWebKit\qmlwebkitplugin.qtplugin
data=\epoc32\data\z\resource\qt\imports\Qt\labs\folderlistmodel\qmlfolderlistmodelplugin.qtplugin resource\qt\imports\Qt\labs\folderlistmodel\qmlfolderlistmodelplugin.qtplugin
data=\epoc32\data\z\resource\qt\imports\Qt\labs\gestures\qmlgesturesplugin.qtplugin resource\qt\imports\Qt\labs\gestures\qmlgesturesplugin.qtplugin
data=\epoc32\data\z\resource\qt\imports\Qt\labs\particles\qmlparticlesplugin.qtplugin resource\qt\imports\Qt\labs\particles\qmlparticlesplugin.qtplugin
-data=\epoc32\data\z\resource\qt\imports\QtWebKit\qmldir resource\qt\imports\QtWebKit\qmldir
data=\epoc32\data\z\resource\qt\imports\Qt\labs\folderlistmodel\qmldir resource\qt\imports\Qt\labs\folderlistmodel\qmldir
data=\epoc32\data\z\resource\qt\imports\Qt\labs\gestures\qmldir resource\qt\imports\Qt\labs\gestures\qmldir
data=\epoc32\data\z\resource\qt\imports\Qt\labs\particles\qmldir resource\qt\imports\Qt\labs\particles\qmldir
-// QtMultimedia audio backend
-data=\epoc32\data\qt\qtlibspluginstubs\qaudio.qtplugin resource\qt\plugins\audio\qaudio.qtplugin
-
// graphicssystems
data=\epoc32\data\z\resource\qt\plugins\graphicssystems\qvggraphicssystem.qtplugin resource\qt\plugins\graphicssystems\qvggraphicssystem.qtplugin
data=\epoc32\data\z\resource\qt\plugins\graphicssystems\qglgraphicssystem.qtplugin resource\qt\plugins\graphicssystems\qglgraphicssystem.qtplugin
@@ -107,7 +92,6 @@ data=\epoc32\data\z\resource\qt\plugins\bearer\qsymbianbearer.qtplugin resource\
// Stub sis file
data=ZSYSTEM\install\qt_stub.sis System\Install\qt_stub.sis
-data=ZSYSTEM\install\qtwebkit_stub.sis System\Install\qtwebkit_stub.sis
#endif // __QT_IBY__
diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp
index 495b1a6..441e355 100644
--- a/src/sql/drivers/mysql/qsql_mysql.cpp
+++ b/src/sql/drivers/mysql/qsql_mysql.cpp
@@ -1374,12 +1374,16 @@ QStringList QMYSQLDriver::tables(QSql::TableType type) const
} else {
QSqlQuery q(createResult());
if(type & QSql::Tables) {
- q.exec(QLatin1String("select table_name from information_schema.tables where table_type = 'BASE TABLE'"));
+ QString sql = QLatin1String("select table_name from information_schema.tables where table_schema = '") + QLatin1String(d->mysql->db) + QLatin1String("' and table_type = 'BASE TABLE'");
+ q.exec(sql);
+
while(q.next())
tl.append(q.value(0).toString());
}
if(type & QSql::Views) {
- q.exec(QLatin1String("select table_name from information_schema.tables where table_type = 'VIEW'"));
+ QString sql = QLatin1String("select table_name from information_schema.tables where table_schema = '") + QLatin1String(d->mysql->db) + QLatin1String("' and table_type = 'VIEW'");
+ q.exec(sql);
+
while(q.next())
tl.append(q.value(0).toString());
}
diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp
index 9698860..3fbc08c 100644
--- a/src/svg/qsvghandler.cpp
+++ b/src/svg/qsvghandler.cpp
@@ -584,7 +584,7 @@ static qreal toDouble(const QChar *&str)
++str;
}
bool exponent = false;
- if (*str == QLatin1Char('e') && pos < maxLen) {
+ if ((*str == QLatin1Char('e') || *str == QLatin1Char('E')) && pos < maxLen) {
exponent = true;
temp[pos++] = 'e';
++str;
diff --git a/src/tools/uic3/uic3.pro b/src/tools/uic3/uic3.pro
index 5ad3c4d..54f7dc8 100644
--- a/src/tools/uic3/uic3.pro
+++ b/src/tools/uic3/uic3.pro
@@ -1,5 +1,6 @@
TEMPLATE = app
CONFIG += console qt_no_compat_warning
+win32-msvc*:CONFIG += no_batch # otherwise the wrong main.cpp may be picked up
CONFIG -= app_bundle
build_all:!build_pass {
CONFIG -= build_all
diff --git a/src/xmlpatterns/expr/qevaluationcache.cpp b/src/xmlpatterns/expr/qevaluationcache.cpp
index 2d1bb56..52f5a46 100644
--- a/src/xmlpatterns/expr/qevaluationcache.cpp
+++ b/src/xmlpatterns/expr/qevaluationcache.cpp
@@ -47,7 +47,7 @@
template<bool IsForGlobal>
EvaluationCache<IsForGlobal>::EvaluationCache(const Expression::Ptr &op,
- const VariableDeclaration::Ptr &varDecl,
+ const VariableDeclaration *varDecl,
const VariableSlotID aSlot) : SingleContainer(op)
, m_declaration(varDecl)
, m_varSlot(aSlot)
diff --git a/src/xmlpatterns/expr/qevaluationcache_p.h b/src/xmlpatterns/expr/qevaluationcache_p.h
index 86aeaf8..6a2504e 100644
--- a/src/xmlpatterns/expr/qevaluationcache_p.h
+++ b/src/xmlpatterns/expr/qevaluationcache_p.h
@@ -97,7 +97,7 @@ namespace QPatternist
{
public:
EvaluationCache(const Expression::Ptr &operand,
- const VariableDeclaration::Ptr &varDecl,
+ const VariableDeclaration *varDecl,
const VariableSlotID slot);
virtual Item evaluateSingleton(const DynamicContext::Ptr &context) const;
@@ -124,7 +124,7 @@ namespace QPatternist
private:
static DynamicContext::Ptr topFocusContext(const DynamicContext::Ptr &context);
- const VariableDeclaration::Ptr m_declaration;
+ const VariableDeclaration *m_declaration;
/**
* This variable must not be called m_slot. If it so, a compiler bug on
* HP-UX-aCC-64 is triggered in the constructor initializor. See the
diff --git a/src/xmlpatterns/expr/qexpressionvariablereference.cpp b/src/xmlpatterns/expr/qexpressionvariablereference.cpp
index 3b9ecb1..fda87b5 100644
--- a/src/xmlpatterns/expr/qexpressionvariablereference.cpp
+++ b/src/xmlpatterns/expr/qexpressionvariablereference.cpp
@@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE
using namespace QPatternist;
ExpressionVariableReference::ExpressionVariableReference(const VariableSlotID slotP,
- const VariableDeclaration::Ptr &varDecl) : VariableReference(slotP)
+ const VariableDeclaration *varDecl) : VariableReference(slotP)
, m_varDecl(varDecl)
{
}
diff --git a/src/xmlpatterns/expr/qexpressionvariablereference_p.h b/src/xmlpatterns/expr/qexpressionvariablereference_p.h
index 40c835e..641be63 100644
--- a/src/xmlpatterns/expr/qexpressionvariablereference_p.h
+++ b/src/xmlpatterns/expr/qexpressionvariablereference_p.h
@@ -77,7 +77,7 @@ namespace QPatternist
{
public:
ExpressionVariableReference(const VariableSlotID slot,
- const VariableDeclaration::Ptr &varDecl);
+ const VariableDeclaration *varDecl);
virtual bool evaluateEBV(const DynamicContext::Ptr &context) const;
virtual Item evaluateSingleton(const DynamicContext::Ptr &context) const;
@@ -90,9 +90,9 @@ namespace QPatternist
virtual ExpressionVisitorResult::Ptr accept(const ExpressionVisitor::Ptr &visitor) const;
inline const Expression::Ptr &sourceExpression() const;
- inline const VariableDeclaration::Ptr &variableDeclaration() const;
+ inline const VariableDeclaration *variableDeclaration() const;
private:
- const VariableDeclaration::Ptr m_varDecl;
+ const VariableDeclaration *m_varDecl;
};
inline const Expression::Ptr &ExpressionVariableReference::sourceExpression() const
@@ -100,7 +100,7 @@ namespace QPatternist
return m_varDecl->expression();
}
- inline const VariableDeclaration::Ptr &ExpressionVariableReference::variableDeclaration() const
+ inline const VariableDeclaration *ExpressionVariableReference::variableDeclaration() const
{
return m_varDecl;
}
diff --git a/src/xmlpatterns/expr/qtemplateparameterreference.cpp b/src/xmlpatterns/expr/qtemplateparameterreference.cpp
index 550e39f..15d65f9 100644
--- a/src/xmlpatterns/expr/qtemplateparameterreference.cpp
+++ b/src/xmlpatterns/expr/qtemplateparameterreference.cpp
@@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE
using namespace QPatternist;
-TemplateParameterReference::TemplateParameterReference(const VariableDeclaration::Ptr &varDecl) : m_varDecl(varDecl)
+TemplateParameterReference::TemplateParameterReference(const VariableDeclaration *varDecl) : m_varDecl(varDecl)
{
}
diff --git a/src/xmlpatterns/expr/qtemplateparameterreference_p.h b/src/xmlpatterns/expr/qtemplateparameterreference_p.h
index 7eb9562..8fe1aa9 100644
--- a/src/xmlpatterns/expr/qtemplateparameterreference_p.h
+++ b/src/xmlpatterns/expr/qtemplateparameterreference_p.h
@@ -70,7 +70,7 @@ namespace QPatternist
class TemplateParameterReference : public EmptyContainer
{
public:
- TemplateParameterReference(const VariableDeclaration::Ptr &varDecl);
+ TemplateParameterReference(const VariableDeclaration *varDecl);
virtual bool evaluateEBV(const DynamicContext::Ptr &context) const;
virtual Item evaluateSingleton(const DynamicContext::Ptr &context) const;
@@ -81,10 +81,10 @@ namespace QPatternist
virtual Properties properties() const;
inline const Expression::Ptr &sourceExpression() const;
- inline const VariableDeclaration::Ptr &variableDeclaration() const;
+ inline const VariableDeclaration *variableDeclaration() const;
private:
- const VariableDeclaration::Ptr m_varDecl;
+ const VariableDeclaration *m_varDecl;
};
inline const Expression::Ptr &TemplateParameterReference::sourceExpression() const
@@ -92,7 +92,7 @@ namespace QPatternist
return m_varDecl->expression();
}
- inline const VariableDeclaration::Ptr &TemplateParameterReference::variableDeclaration() const
+ inline const VariableDeclaration *TemplateParameterReference::variableDeclaration() const
{
return m_varDecl;
}
diff --git a/src/xmlpatterns/expr/quserfunctioncallsite.cpp b/src/xmlpatterns/expr/quserfunctioncallsite.cpp
index 4e81484..65bbeab 100644
--- a/src/xmlpatterns/expr/quserfunctioncallsite.cpp
+++ b/src/xmlpatterns/expr/quserfunctioncallsite.cpp
@@ -227,7 +227,7 @@ void UserFunctionCallsite::setSource(const UserFunction::Ptr &userFunction,
/* Note that we pass in cacheSlotOffset + i here instead of varDecls.at(i)->slot since
* we want independent caches for each callsite. */
m_operands[i] = Expression::Ptr(new EvaluationCache<false>(m_operands.at(i),
- varDecls.at(i),
+ varDecls.at(i).data(),
cacheSlotOffset + i));
}
}
diff --git a/src/xmlpatterns/parser/qquerytransformparser.cpp b/src/xmlpatterns/parser/qquerytransformparser.cpp
index 4858e11..f937904 100644
--- a/src/xmlpatterns/parser/qquerytransformparser.cpp
+++ b/src/xmlpatterns/parser/qquerytransformparser.cpp
@@ -988,9 +988,9 @@ static Expression::Ptr pushVariable(const QXmlName name,
* In some cases the EvaluationCache instance isn't necessary, but in those cases EvaluationCache
* optimizes itself away. */
if(type == VariableDeclaration::ExpressionVariable)
- checked = create(new EvaluationCache<false>(checked, var, parseInfo->allocateCacheSlot()), sourceLocator, parseInfo);
+ checked = create(new EvaluationCache<false>(checked, var.data(), parseInfo->allocateCacheSlot()), sourceLocator, parseInfo);
else if(type == VariableDeclaration::GlobalVariable)
- checked = create(new EvaluationCache<true>(checked, var, parseInfo->allocateCacheSlot()), sourceLocator, parseInfo);
+ checked = create(new EvaluationCache<true>(checked, var.data(), parseInfo->allocateCacheSlot()), sourceLocator, parseInfo);
var->setExpression(checked);
@@ -1042,7 +1042,7 @@ static Expression::Ptr resolveVariable(const QXmlName &name,
* mechanism must. */
case VariableDeclaration::ExpressionVariable:
{
- retval = create(new ExpressionVariableReference(var->slot, var), sourceLocator, parseInfo);
+ retval = create(new ExpressionVariableReference(var->slot, var.data()), sourceLocator, parseInfo);
break;
}
case VariableDeclaration::FunctionArgument:
@@ -1057,7 +1057,7 @@ static Expression::Ptr resolveVariable(const QXmlName &name,
}
case VariableDeclaration::TemplateParameter:
{
- retval = create(new TemplateParameterReference(var), sourceLocator, parseInfo);
+ retval = create(new TemplateParameterReference(var.data()), sourceLocator, parseInfo);
break;
}
case VariableDeclaration::ExternalVariable:
diff --git a/tests/auto/declarative/qdeclarativeanimations/data/attached.qml b/tests/auto/declarative/qdeclarativeanimations/data/attached.qml
index 5da4a69..c5d5535 100644
--- a/tests/auto/declarative/qdeclarativeanimations/data/attached.qml
+++ b/tests/auto/declarative/qdeclarativeanimations/data/attached.qml
@@ -17,7 +17,7 @@ Rectangle {
transitions: Transition {
PropertyAction { target: wrapper; property: "ListView.delayRemove"; value: true }
- ScriptAction { script: console.log(ListView.delayRemove ? "on" : "off") }
+ ScriptAction { script: console.log(wrapper.ListView.delayRemove ? "on" : "off") }
}
Component.onCompleted: {
diff --git a/tests/auto/declarative/qdeclarativebehaviors/data/delayedRegistration.qml b/tests/auto/declarative/qdeclarativebehaviors/data/delayedRegistration.qml
new file mode 100644
index 0000000..aa384c3
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativebehaviors/data/delayedRegistration.qml
@@ -0,0 +1,25 @@
+import QtQuick 1.0
+
+Rectangle {
+ id: container
+
+ width: 400; height: 400;
+ property Item myItem
+
+ function doCreate() {
+ myItem = myComponent.createObject(container)
+ myItem.x = 100
+ }
+
+ Component {
+ id: myComponent
+ Rectangle {
+ width: 100
+ height: 100
+ color: "green"
+ Behavior on x { NumberAnimation { duration: 500 } }
+ }
+ }
+
+ Component.onCompleted: doCreate()
+}
diff --git a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp
index 80ba907..4536d9e 100644
--- a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp
+++ b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp
@@ -81,6 +81,7 @@ private slots:
void groupedPropertyCrash();
void runningTrue();
void sameValue();
+ void delayedRegistration();
};
void tst_qdeclarativebehaviors::simpleBehavior()
@@ -412,6 +413,23 @@ void tst_qdeclarativebehaviors::sameValue()
QTRY_VERIFY(target->x() != qreal(0) && target->x() != qreal(100));
}
+//QTBUG-18362
+void tst_qdeclarativebehaviors::delayedRegistration()
+{
+ QDeclarativeEngine engine;
+
+ QDeclarativeComponent c(&engine, SRCDIR "/data/delayedRegistration.qml");
+ QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create());
+ QVERIFY(rect != 0);
+
+ QDeclarativeItem *innerRect = rect->property("myItem").value<QDeclarativeItem*>();
+ QVERIFY(innerRect != 0);
+
+ QCOMPARE(innerRect->property("x").toInt(), int(0));
+
+ QTRY_COMPARE(innerRect->property("x").toInt(), int(100));
+}
+
QTEST_MAIN(tst_qdeclarativebehaviors)
#include "tst_qdeclarativebehaviors.moc"
diff --git a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
index d01463e..69f9732 100644
--- a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
+++ b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp
@@ -66,7 +66,6 @@
Q_DECLARE_METATYPE(QDeclarativeDebugWatch::State)
-
class tst_QDeclarativeDebug : public QObject
{
Q_OBJECT
@@ -118,6 +117,18 @@ private slots:
void setBindingInStates();
};
+class NonScriptProperty : public QObject {
+ Q_OBJECT
+ Q_PROPERTY(int nonScriptProp READ nonScriptProp WRITE setNonScriptProp NOTIFY nonScriptPropChanged SCRIPTABLE false)
+public:
+ int nonScriptProp() const { return 0; }
+ void setNonScriptProp(int) {}
+signals:
+ void nonScriptPropChanged();
+};
+QML_DECLARE_TYPE(NonScriptProperty)
+
+
QDeclarativeDebugObjectReference tst_QDeclarativeDebug::findRootObject(int context, bool recursive)
{
QDeclarativeDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this);
@@ -282,6 +293,7 @@ void tst_QDeclarativeDebug::compareProperties(const QDeclarativeDebugPropertyRef
void tst_QDeclarativeDebug::initTestCase()
{
qRegisterMetaType<QDeclarativeDebugWatch::State>();
+ qmlRegisterType<NonScriptProperty>("Test", 1, 0, "NonScriptPropertyElement");
QTest::ignoreMessage(QtWarningMsg, "Qml debugging is enabled. Only use this in a safe environment!");
QDeclarativeDebugHelper::enableDebugging();
@@ -291,7 +303,8 @@ void tst_QDeclarativeDebug::initTestCase()
QList<QByteArray> qml;
qml << "import QtQuick 1.0\n"
- "Item {"
+ "import Test 1.0\n"
+ "Item {"
"id: root\n"
"width: 10; height: 20; scale: blueRect.scale;"
"Rectangle { id: blueRect; width: 500; height: 600; color: \"blue\"; }"
@@ -307,6 +320,8 @@ void tst_QDeclarativeDebug::initTestCase()
"list[0] = blueRect;\n"
"varObjList = list;\n"
"}\n"
+ "NonScriptPropertyElement {\n"
+ "}\n"
"}";
// add second component to test multiple root contexts
@@ -725,7 +740,7 @@ void tst_QDeclarativeDebug::queryObject()
// check source as defined in main()
QDeclarativeDebugFileReference source = obj.source();
QCOMPARE(source.url(), QUrl::fromLocalFile(""));
- QCOMPARE(source.lineNumber(), 2);
+ QCOMPARE(source.lineNumber(), 3);
QCOMPARE(source.columnNumber(), 1);
// generically test all properties, children and childrens' properties
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/attachedProperty.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/attachedProperty.2.qml
new file mode 100644
index 0000000..a7184c9
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/attachedProperty.2.qml
@@ -0,0 +1,22 @@
+import Qt.test 1.0
+import Qt.test 1.0 as Namespace
+
+MyQmlObject {
+ property alias a: me.a
+ property alias b: me.a
+ property alias c: me.a
+ property alias d: me.a
+
+ property MyQmlObject obj
+ obj: MyQmlObject {
+ MyQmlObject.value2: 13
+
+ id: me
+ property int a: MyQmlObject.value2 * 2
+ property int b: Namespace.MyQmlObject.value2 * 2
+ property int c: me.Namespace.MyQmlObject.value * 2
+ property int d: me.Namespace.MyQmlObject.value * 2
+ }
+}
+
+
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/signalAssignment.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/signalAssignment.2.qml
index 8addcb9..6467c42 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/data/signalAssignment.2.qml
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/signalAssignment.2.qml
@@ -1,5 +1,5 @@
import Qt.test 1.0
MyQmlObject {
- onArgumentSignal: setString('pass ' + a + ' ' + b + ' ' + c)
+ onArgumentSignal: setString('pass ' + a + ' ' + b + ' ' + c + ' ' + d + ' ' + e)
}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/signalParameterTypes.qml b/tests/auto/declarative/qdeclarativeecmascript/data/signalParameterTypes.qml
index ffbe317..4fc2dab 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/data/signalParameterTypes.qml
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/signalParameterTypes.qml
@@ -7,10 +7,12 @@ MyQmlObject
property real realProperty
property color colorProperty
property variant variantProperty
+ property int enumProperty
+ property int qtEnumProperty
- signal mySignal(int a, real b, color c, variant d)
+ signal mySignal(int a, real b, color c, variant d, int e, int f)
- onMySignal: { intProperty = a; realProperty = b; colorProperty = c; variantProperty = d; }
+ onMySignal: { intProperty = a; realProperty = b; colorProperty = c; variantProperty = d; enumProperty = e; qtEnumProperty = f; }
- onBasicSignal: root.mySignal(10, 19.2, Qt.rgba(1, 1, 0, 1), Qt.rgba(1, 0, 1, 1))
+ onBasicSignal: root.mySignal(10, 19.2, Qt.rgba(1, 1, 0, 1), Qt.rgba(1, 0, 1, 1), MyQmlObject.EnumValue3, Qt.LeftButton)
}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp b/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp
index 7e63bd5..1d65b15 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp
@@ -127,6 +127,8 @@ void registerTypes()
qmlRegisterType<QPlainTextEdit>("Qt.test",1,0,"QPlainTextEdit");
qRegisterMetaType<MyQmlObject::MyType>("MyQmlObject::MyType");
+ qRegisterMetaType<MyQmlObject::MyType>("MyEnum2");
+ qRegisterMetaType<Qt::MouseButtons>("Qt::MouseButtons");
}
#include "testtypes.moc"
diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
index 081cc4c..ad38d27 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
+++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h
@@ -60,17 +60,18 @@ class MyQmlAttachedObject : public QObject
{
Q_OBJECT
Q_PROPERTY(int value READ value CONSTANT)
- Q_PROPERTY(int value2 READ value2 WRITE setValue2)
+ Q_PROPERTY(int value2 READ value2 WRITE setValue2 NOTIFY value2Changed)
public:
MyQmlAttachedObject(QObject *parent) : QObject(parent), m_value2(0) {}
int value() const { return 19; }
int value2() const { return m_value2; }
- void setValue2(int v) { m_value2 = v; }
+ void setValue2(int v) { if (m_value2 == v) return; m_value2 = v; emit value2Changed(); }
void emitMySignal() { emit mySignal(); }
signals:
+ void value2Changed();
void mySignal();
private:
@@ -159,7 +160,7 @@ public:
signals:
void basicSignal();
- void argumentSignal(int a, QString b, qreal c);
+ void argumentSignal(int a, QString b, qreal c, MyEnum2 d, Qt::MouseButtons e);
void stringChanged();
void objectChanged();
void anotherBasicSignal();
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 48466d5..1ec12fe 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -304,8 +304,8 @@ void tst_qdeclarativeecmascript::signalAssignment()
MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create());
QVERIFY(object != 0);
QCOMPARE(object->string(), QString());
- emit object->argumentSignal(19, "Hello world!", 10.25);
- QCOMPARE(object->string(), QString("pass 19 Hello world! 10.25"));
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
+ QCOMPARE(object->string(), QString("pass 19 Hello world! 10.25 3 2"));
}
}
@@ -650,6 +650,16 @@ void tst_qdeclarativeecmascript::attachedProperties()
}
{
+ QDeclarativeComponent component(&engine, TEST_FILE("attachedProperty.2.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(object->property("a").toInt(), 26);
+ QCOMPARE(object->property("b").toInt(), 26);
+ QCOMPARE(object->property("c").toInt(), 26);
+ QCOMPARE(object->property("d").toInt(), 26);
+ }
+
+ {
QDeclarativeComponent component(&engine, TEST_FILE("writeAttachedProperty.qml"));
QObject *object = component.create();
QVERIFY(object != 0);
@@ -870,7 +880,7 @@ void tst_qdeclarativeecmascript::scope()
QCOMPARE(object->property("test").toInt(), 0);
QCOMPARE(object->property("test2").toString(), QString());
- emit object->argumentSignal(13, "Argument Scope", 9);
+ emit object->argumentSignal(13, "Argument Scope", 9, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 13);
QCOMPARE(object->property("test2").toString(), QString("Argument Scope"));
@@ -895,6 +905,8 @@ void tst_qdeclarativeecmascript::signalParameterTypes()
QCOMPARE(object->property("realProperty").toReal(), 19.2);
QVERIFY(object->property("colorProperty").value<QColor>() == QColor(255, 255, 0, 255));
QVERIFY(object->property("variantProperty") == QVariant::fromValue(QColor(255, 0, 255, 255)));
+ QVERIFY(object->property("enumProperty") == MyQmlObject::EnumValue3);
+ QVERIFY(object->property("qtEnumProperty") == Qt::LeftButton);
}
/*
@@ -1139,7 +1151,7 @@ void tst_qdeclarativeecmascript::signalTriggeredBindings()
QCOMPARE(object->property("test1").toReal(), 200.);
QCOMPARE(object->property("test2").toReal(), 200.);
- object->argumentSignal(10, QString(), 10);
+ object->argumentSignal(10, QString(), 10, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("base").toReal(), 400.);
QCOMPARE(object->property("test1").toReal(), 400.);
@@ -1940,7 +1952,7 @@ void tst_qdeclarativeecmascript::scriptConnect()
QVERIFY(object != 0);
QCOMPARE(object->property("test").toBool(), false);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toBool(), true);
delete object;
@@ -1953,7 +1965,7 @@ void tst_qdeclarativeecmascript::scriptConnect()
QVERIFY(object != 0);
QCOMPARE(object->property("test").toBool(), false);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toBool(), true);
delete object;
@@ -1966,7 +1978,7 @@ void tst_qdeclarativeecmascript::scriptConnect()
QVERIFY(object != 0);
QCOMPARE(object->property("test").toBool(), false);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toBool(), true);
delete object;
@@ -1979,7 +1991,7 @@ void tst_qdeclarativeecmascript::scriptConnect()
QVERIFY(object != 0);
QCOMPARE(object->methodCalled(), false);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->methodCalled(), true);
delete object;
@@ -1992,7 +2004,7 @@ void tst_qdeclarativeecmascript::scriptConnect()
QVERIFY(object != 0);
QCOMPARE(object->methodCalled(), false);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->methodCalled(), true);
delete object;
@@ -2005,7 +2017,7 @@ void tst_qdeclarativeecmascript::scriptConnect()
QVERIFY(object != 0);
QCOMPARE(object->property("test").toInt(), 0);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 2);
delete object;
@@ -2021,13 +2033,13 @@ void tst_qdeclarativeecmascript::scriptDisconnect()
QVERIFY(object != 0);
QCOMPARE(object->property("test").toInt(), 0);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 1);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 2);
emit object->basicSignal();
QCOMPARE(object->property("test").toInt(), 2);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 2);
delete object;
@@ -2040,13 +2052,13 @@ void tst_qdeclarativeecmascript::scriptDisconnect()
QVERIFY(object != 0);
QCOMPARE(object->property("test").toInt(), 0);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 1);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 2);
emit object->basicSignal();
QCOMPARE(object->property("test").toInt(), 2);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 2);
delete object;
@@ -2059,13 +2071,13 @@ void tst_qdeclarativeecmascript::scriptDisconnect()
QVERIFY(object != 0);
QCOMPARE(object->property("test").toInt(), 0);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 1);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 2);
emit object->basicSignal();
QCOMPARE(object->property("test").toInt(), 2);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 3);
delete object;
@@ -2077,13 +2089,13 @@ void tst_qdeclarativeecmascript::scriptDisconnect()
QVERIFY(object != 0);
QCOMPARE(object->property("test").toInt(), 0);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 1);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 2);
emit object->basicSignal();
QCOMPARE(object->property("test").toInt(), 2);
- emit object->argumentSignal(19, "Hello world!", 10.25);
+ emit object->argumentSignal(19, "Hello world!", 10.25, MyQmlObject::EnumValue4, Qt::RightButton);
QCOMPARE(object->property("test").toInt(), 3);
delete object;
diff --git a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp
index d499edf..4fa1cb3 100644
--- a/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp
+++ b/tests/auto/declarative/qdeclarativeflickable/tst_qdeclarativeflickable.cpp
@@ -110,7 +110,7 @@ void tst_qdeclarativeflickable::create()
QCOMPARE(obj->isInteractive(), true);
QCOMPARE(obj->boundsBehavior(), QDeclarativeFlickable::DragAndOvershootBounds);
QCOMPARE(obj->pressDelay(), 0);
- QCOMPARE(obj->maximumFlickVelocity(), 2000.);
+ QCOMPARE(obj->maximumFlickVelocity(), 2500.);
delete obj;
}
diff --git a/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml b/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml
index caa28d6..a2b0a91 100644
--- a/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml
+++ b/tests/auto/declarative/qdeclarativegridview/data/gridview1.qml
@@ -2,6 +2,7 @@ import QtQuick 1.1
Rectangle {
id: root
+ property int count: grid.count
property bool showHeader: false
property bool showFooter: false
property int added: -1
diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
index c183934..dc79370 100644
--- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
+++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
@@ -97,6 +97,7 @@ private slots:
void onRemove_data();
void testQtQuick11Attributes();
void testQtQuick11Attributes_data();
+ void contentPosJump();
private:
QDeclarativeView *createView();
@@ -221,6 +222,7 @@ void tst_QDeclarativeGridView::items()
QTRY_VERIFY(contentItem != 0);
QTRY_COMPARE(gridview->count(), model.count());
+ QTRY_COMPARE(canvas->rootObject()->property("count").toInt(), model.count());
QTRY_COMPARE(contentItem->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
for (int i = 0; i < model.count(); ++i) {
@@ -304,6 +306,7 @@ void tst_QDeclarativeGridView::inserted()
QTRY_VERIFY(contentItem != 0);
model.insertItem(1, "Will", "9876");
+ QCOMPARE(canvas->rootObject()->property("count").toInt(), model.count());
QTRY_COMPARE(contentItem->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
@@ -381,6 +384,7 @@ void tst_QDeclarativeGridView::removed()
QTRY_VERIFY(contentItem != 0);
model.removeItem(1);
+ QCOMPARE(canvas->rootObject()->property("count").toInt(), model.count());
QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "textName", 1);
QTRY_VERIFY(name != 0);
@@ -2077,6 +2081,56 @@ void tst_QDeclarativeGridView::testQtQuick11Attributes_data()
<< "";
}
+void tst_QDeclarativeGridView::contentPosJump()
+{
+ QDeclarativeView *canvas = createView();
+
+ TestModel model;
+ for (int i = 0; i < 100; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QDeclarativeContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+ ctxt->setContextProperty("testRightToLeft", QVariant(false));
+ ctxt->setContextProperty("testTopToBottom", QVariant(false));
+
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/gridview1.qml"));
+ qApp->processEvents();
+
+ QDeclarativeGridView *gridview = findItem<QDeclarativeGridView>(canvas->rootObject(), "grid");
+ QVERIFY(gridview != 0);
+
+ QDeclarativeItem *contentItem = gridview->contentItem();
+ QVERIFY(contentItem != 0);
+
+ // Test jumping more than a page of items.
+ gridview->setContentY(500);
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count();
+ for (int i = 24; i < model.count() && i < itemCount; ++i) {
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->x() == (i%3)*80);
+ QVERIFY(item->y() == (i/3)*60);
+ }
+
+ gridview->setContentY(-100);
+ itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count();
+ QVERIFY(itemCount < 15);
+ // Confirm items positioned correctly
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QVERIFY(item);
+ QVERIFY(item->x() == (i%3)*80);
+ QVERIFY(item->y() == (i/3)*60);
+ }
+
+ delete canvas;
+}
+
QDeclarativeView *tst_QDeclarativeGridView::createView()
{
QDeclarativeView *canvas = new QDeclarativeView(0);
diff --git a/tests/auto/declarative/qdeclarativeimage/data/aspectratio.qml b/tests/auto/declarative/qdeclarativeimage/data/aspectratio.qml
index 739299d..cd092bc 100644
--- a/tests/auto/declarative/qdeclarativeimage/data/aspectratio.qml
+++ b/tests/auto/declarative/qdeclarativeimage/data/aspectratio.qml
@@ -1,6 +1,10 @@
import QtQuick 1.0
Image {
+ property int widthChange: 0
+ property int heightChange: 0
source: "heart.png"
fillMode: Image.PreserveAspectFit;
+ onWidthChanged: widthChange += 1
+ onHeightChanged: heightChange += 1
}
diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
index 9e090d2..87e3347 100644
--- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
+++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
@@ -91,6 +91,7 @@ private slots:
void sourceSize_QTBUG_14303();
void sourceSize_QTBUG_16389();
void nullPixmapPaint();
+ void resetSourceSize();
void testQtQuick11Attributes();
void testQtQuick11Attributes_data();
@@ -247,14 +248,22 @@ void tst_qdeclarativeimage::preserveAspectRatio()
canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/aspectratio.qml"));
QDeclarativeImage *image = qobject_cast<QDeclarativeImage*>(canvas->rootObject());
QVERIFY(image != 0);
+ QCOMPARE(image->property("widthChange").toInt(), 1);
+ QCOMPARE(image->property("heightChange").toInt(), 1);
image->setWidth(80.0);
+ QCOMPARE(image->property("widthChange").toInt(), 2);
+ QCOMPARE(image->property("heightChange").toInt(), 2);
QCOMPARE(image->width(), 80.);
QCOMPARE(image->height(), 80.);
canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/aspectratio.qml"));
image = qobject_cast<QDeclarativeImage*>(canvas->rootObject());
- image->setHeight(60.0);
QVERIFY(image != 0);
+ QCOMPARE(image->property("widthChange").toInt(), 1);
+ QCOMPARE(image->property("heightChange").toInt(), 1);
+ image->setHeight(60.0);
+ QCOMPARE(image->property("widthChange").toInt(), 2);
+ QCOMPARE(image->property("heightChange").toInt(), 2);
QCOMPARE(image->height(), 60.);
QCOMPARE(image->width(), 60.);
delete canvas;
@@ -693,6 +702,27 @@ void tst_qdeclarativeimage::nullPixmapPaint()
delete image;
}
+void tst_qdeclarativeimage::resetSourceSize()
+{
+ QString src = QUrl::fromLocalFile(SRCDIR "/data/heart200.png").toString();
+ QString componentStr = "import QtQuick 1.1\nImage { function reset() { sourceSize = undefined }\nsource: \"" + src + "\"; sourceSize: Qt.size(100,100) }";
+
+ QDeclarativeComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QDeclarativeImage *obj = qobject_cast<QDeclarativeImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->pixmap().width(), 100);
+ QCOMPARE(obj->pixmap().height(), 100);
+ QCOMPARE(obj->sourceSize().height(), 100);
+ QCOMPARE(obj->sourceSize().width(), 100);
+
+ QMetaObject::invokeMethod(obj, "reset");
+ QCOMPARE(obj->pixmap().width(), 200);
+ QCOMPARE(obj->pixmap().height(), 200);
+ QCOMPARE(obj->sourceSize().height(), 200);
+ QCOMPARE(obj->sourceSize().width(), 200);
+}
+
void tst_qdeclarativeimage::testQtQuick11Attributes()
{
QFETCH(QString, code);
diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
index 45072f3..2f7513f 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
@@ -106,6 +106,7 @@ private slots:
void property_changes_data();
void property_changes_worker();
void property_changes_worker_data();
+ void clear();
};
int tst_qdeclarativelistmodel::roleFromName(const QDeclarativeListModel *model, const QString &roleName)
{
@@ -1091,6 +1092,47 @@ void tst_qdeclarativelistmodel::property_changes_worker_data()
property_changes_data();
}
+void tst_qdeclarativelistmodel::clear()
+{
+ QDeclarativeEngine engine;
+ QDeclarativeListModel model;
+ QDeclarativeEngine::setContextForObject(&model, engine.rootContext());
+ engine.rootContext()->setContextObject(&model);
+
+ QScriptEngine *seng = QDeclarativeEnginePrivate::getScriptEngine(&engine);
+ QScriptValue sv = seng->newObject();
+ QVariant result;
+
+ model.clear();
+ QCOMPARE(model.count(), 0);
+
+ sv.setProperty("propertyA", "value a");
+ sv.setProperty("propertyB", "value b");
+ model.append(sv);
+ QCOMPARE(model.count(), 1);
+
+ model.clear();
+ QCOMPARE(model.count(), 0);
+
+ model.append(sv);
+ model.append(sv);
+ QCOMPARE(model.count(), 2);
+
+ model.clear();
+ QCOMPARE(model.count(), 0);
+
+ // clearing does not remove the roles
+ sv.setProperty("propertyC", "value c");
+ model.append(sv);
+ QList<int> roles = model.roles();
+ model.clear();
+ QCOMPARE(model.count(), 0);
+ QCOMPARE(model.roles(), roles);
+ QCOMPARE(model.toString(roles[0]), QString("propertyA"));
+ QCOMPARE(model.toString(roles[1]), QString("propertyB"));
+ QCOMPARE(model.toString(roles[2]), QString("propertyC"));
+}
+
QTEST_MAIN(tst_qdeclarativelistmodel)
#include "tst_qdeclarativelistmodel.moc"
diff --git a/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml b/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml
index 3cd6f42..75ddabb 100644
--- a/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml
+++ b/tests/auto/declarative/qdeclarativelistview/data/listviewtest.qml
@@ -6,6 +6,7 @@ Rectangle {
height: 320
color: "#ffffff"
+ property int count: list.count
property bool showHeader: false
property bool showFooter: false
property real hr: list.visibleArea.heightRatio
diff --git a/tests/auto/declarative/qdeclarativelistview/data/orientchange.qml b/tests/auto/declarative/qdeclarativelistview/data/orientchange.qml
new file mode 100644
index 0000000..c7aa0cd
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelistview/data/orientchange.qml
@@ -0,0 +1,7 @@
+import QtQuick 1.0
+
+ListView {
+ width: 240; height: 320
+ delegate: Rectangle { objectName: "wrapper"; width: 80; height: 80 }
+ model: 100
+}
diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
index 2267a89..23ac523 100644
--- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
+++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
@@ -119,6 +119,8 @@ private slots:
void testQtQuick11Attributes_data();
void rightToLeft();
void test_mirroring();
+ void orientationChange();
+ void contentPosJump();
private:
template <class T> void items();
@@ -387,6 +389,7 @@ void tst_QDeclarativeListView::items()
QTRY_VERIFY(listview->highlightItem() != 0);
QTRY_COMPARE(listview->count(), model.count());
+ QTRY_COMPARE(canvas->rootObject()->property("count").toInt(), model.count());
QTRY_COMPARE(contentItem->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
// current item should be first item
@@ -515,6 +518,7 @@ void tst_QDeclarativeListView::inserted()
model.insertItem(0, "Foo", "1111"); // zero index, and current item
+ QCOMPARE(canvas->rootObject()->property("count").toInt(), model.count());
QTRY_COMPARE(contentItem->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item
name = findItem<QDeclarativeText>(contentItem, "textName", 0);
@@ -581,6 +585,7 @@ void tst_QDeclarativeListView::removed(bool animated)
QTRY_VERIFY(contentItem != 0);
model.removeItem(1);
+ QCOMPARE(canvas->rootObject()->property("count").toInt(), model.count());
QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "textName", 1);
QTRY_VERIFY(name != 0);
@@ -709,6 +714,16 @@ void tst_QDeclarativeListView::removed(bool animated)
QTRY_VERIFY(name = findItem<QDeclarativeText>(contentItem, "textName", model.count()-1));
QCOMPARE(name->text(), QString("New"));
+ // Add some more items so that we don't run out
+ for (int i = 50; i < 100; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ // QTBUG-19198 move to end and remove all visible items one at a time.
+ listview->positionViewAtEnd();
+ for (int i = 0; i < 18; ++i)
+ model.removeItems(model.count() - 1, 1);
+ QTRY_VERIFY(findItems<QDeclarativeItem>(contentItem, "wrapper").count() > 16);
+
delete canvas;
}
@@ -2583,6 +2598,107 @@ void tst_QDeclarativeListView::test_mirroring()
delete canvasB;
}
+void tst_QDeclarativeListView::orientationChange()
+{
+ QDeclarativeView *canvas = createView();
+
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/orientchange.qml"));
+ qApp->processEvents();
+
+ QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(canvas->rootObject());
+ QVERIFY(listview != 0);
+
+ QDeclarativeItem *contentItem = listview->contentItem();
+ QVERIFY(contentItem != 0);
+
+ listview->positionViewAtIndex(50, QDeclarativeListView::Beginning);
+
+ // Confirm items positioned correctly
+ for (int i = 50; i < 54; ++i) {
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i);
+ QVERIFY(item);
+ QCOMPARE(item->y(), i*80.0);
+ }
+
+ listview->setOrientation(QDeclarativeListView::Horizontal);
+ QCOMPARE(listview->contentY(), 0.);
+
+ // Confirm items positioned correctly
+ for (int i = 0; i < 3; ++i) {
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i);
+ QVERIFY(item);
+ QCOMPARE(item->x(), i*80.0);
+ }
+
+ listview->positionViewAtIndex(50, QDeclarativeListView::Beginning);
+ listview->setOrientation(QDeclarativeListView::Vertical);
+ QCOMPARE(listview->contentX(), 0.);
+ //
+ // Confirm items positioned correctly
+ for (int i = 0; i < 4; ++i) {
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i);
+ QVERIFY(item);
+ QCOMPARE(item->y(), i*80.0);
+ }
+
+ delete canvas;
+}
+
+void tst_QDeclarativeListView::contentPosJump()
+{
+ QDeclarativeView *canvas = createView();
+
+ TestModel model;
+ for (int i = 0; i < 50; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QDeclarativeContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ TestObject *testObject = new TestObject;
+ ctxt->setContextProperty("testObject", testObject);
+
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/listviewtest.qml"));
+ qApp->processEvents();
+
+ QDeclarativeListView *listview = findItem<QDeclarativeListView>(canvas->rootObject(), "list");
+ QTRY_VERIFY(listview != 0);
+
+ QDeclarativeItem *contentItem = listview->contentItem();
+ QTRY_VERIFY(contentItem != 0);
+
+ // Confirm items positioned correctly
+ int itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count();
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QTRY_VERIFY(item);
+ QTRY_VERIFY(item->y() == i*20);
+ }
+
+ // Test jumping more than a page of items.
+ listview->setContentY(500);
+ itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count();
+ for (int i = 25; i < model.count() && i < itemCount; ++i) {
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QTRY_VERIFY(item);
+ QTRY_VERIFY(item->y() == i*20);
+ }
+
+ listview->setContentY(-100);
+ itemCount = findItems<QDeclarativeItem>(contentItem, "wrapper").count();
+ QVERIFY(itemCount < 20);
+ for (int i = 0; i < model.count() && i < itemCount; ++i) {
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", i);
+ if (!item) qWarning() << "Item" << i << "not found";
+ QTRY_VERIFY(item);
+ QTRY_VERIFY(item->y() == i*20);
+ }
+
+ delete canvas;
+}
+
void tst_QDeclarativeListView::qListModelInterface_items()
{
items<TestModel>();
diff --git a/tests/auto/declarative/qdeclarativemousearea/data/preventContextMenu.qml b/tests/auto/declarative/qdeclarativemousearea/data/preventContextMenu.qml
new file mode 100644
index 0000000..dcbb5d7
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemousearea/data/preventContextMenu.qml
@@ -0,0 +1,22 @@
+import QtQuick 1.1
+import Test 1.0
+
+Item {
+ width: 200
+ height: 200
+
+ property alias mouseAreaEnabled: mouseArea.enabled
+ property alias eventsReceived: receiver.eventCount
+
+ ContextMenuEventReceiver {
+ id: receiver
+ anchors.fill: parent
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ acceptedButtons: Qt.LeftButton | Qt.MiddleButton | Qt.RightButton
+ enabled: true
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
index e1c34fc..fea7865 100644
--- a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
+++ b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
@@ -47,6 +47,7 @@
#include <QtDeclarative/qdeclarativeview.h>
#include <QtDeclarative/qdeclarativecontext.h>
#include <QtDeclarative/qdeclarativeengine.h>
+#include <QtDeclarative/qdeclarativeproperty.h>
#ifdef Q_OS_SYMBIAN
// In Symbian OS test data is located in applications private dir
@@ -70,6 +71,9 @@ private slots:
void preventStealing();
void testQtQuick11Attributes();
void testQtQuick11Attributes_data();
+#ifndef QT_NO_CONTEXTMENU
+ void preventContextMenu();
+#endif // QT_NO_CONTEXTMENU
private:
QDeclarativeView *createView();
@@ -637,6 +641,65 @@ void tst_QDeclarativeMouseArea::testQtQuick11Attributes_data()
<< ":1 \"MouseArea.preventStealing\" is not available in QtQuick 1.0.\n";
}
+#ifndef QT_NO_CONTEXTMENU
+class ContextMenuEventReceiver : public QDeclarativeItem
+{
+ Q_OBJECT
+ Q_PROPERTY(int eventCount READ eventCount NOTIFY eventCountChanged);
+public:
+ ContextMenuEventReceiver(QDeclarativeItem *parent = 0) : QDeclarativeItem(parent), m_eventCount(0) { }
+ int eventCount() const { return m_eventCount; }
+signals:
+ void eventCountChanged(int);
+protected:
+ void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
+ if (event->reason() == QGraphicsSceneContextMenuEvent::Mouse) {
+ m_eventCount++;
+ emit eventCountChanged(m_eventCount);
+ }
+ }
+private:
+ int m_eventCount;
+};
+
+void tst_QDeclarativeMouseArea::preventContextMenu()
+{
+ // A MouseArea accepting Left, Middle and Right buttons should prevent context menu
+ // events with "Mouse" reason to hit the Item below.
+
+ qmlRegisterType<ContextMenuEventReceiver>("Test", 1, 0, "ContextMenuEventReceiver");
+
+ QDeclarativeView *view = createView();
+ view->setSource(QUrl::fromLocalFile(SRCDIR "/data/preventContextMenu.qml"));
+ view->show();
+ QVERIFY(view->rootObject() != 0);
+
+ QDeclarativeProperty mouseAreaEnabled(view->rootObject(), "mouseAreaEnabled");
+ QVERIFY(mouseAreaEnabled.read().toBool());
+
+ QDeclarativeProperty eventsReceived(view->rootObject(), "eventsReceived");
+ QCOMPARE(eventsReceived.read().toInt(), 0);
+
+ QPoint targetPoint = view->mapFromScene(QPoint(80, 80));
+
+ QContextMenuEvent fakeEvent1(QContextMenuEvent::Mouse, targetPoint);
+ QApplication::sendEvent(view->viewport(), &fakeEvent1);
+ QCOMPARE(eventsReceived.read().toInt(), 0);
+
+ mouseAreaEnabled.write(false);
+ QVERIFY(!mouseAreaEnabled.read().toBool());
+ QContextMenuEvent fakeEvent2(QContextMenuEvent::Mouse, targetPoint);
+ QApplication::sendEvent(view->viewport(), &fakeEvent2);
+ QCOMPARE(eventsReceived.read().toInt(), 1);
+
+ mouseAreaEnabled.write(true);
+ QVERIFY(mouseAreaEnabled.read().toBool());
+ QContextMenuEvent fakeEvent3(QContextMenuEvent::Mouse, targetPoint);
+ QApplication::sendEvent(view->viewport(), &fakeEvent3);
+ QCOMPARE(eventsReceived.read().toInt(), 1);
+}
+#endif // QT_NO_CONTEXTMENU
+
QTEST_MAIN(tst_QDeclarativeMouseArea)
#include "tst_qdeclarativemousearea.moc"
diff --git a/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml b/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml
index 1322025..e2c4e3d 100644
--- a/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml
+++ b/tests/auto/declarative/qdeclarativepathview/data/datamodel.qml
@@ -2,6 +2,7 @@ import QtQuick 1.0
PathView {
id: pathview
+ property int viewCount: count
objectName: "pathview"
width: 240; height: 320
pathItemCount: testObject.pathItemCount
diff --git a/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml b/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml
index 04c7717..28b6fb9 100644
--- a/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml
+++ b/tests/auto/declarative/qdeclarativepathview/data/pathview0.qml
@@ -2,6 +2,7 @@ import QtQuick 1.0
Rectangle {
id: root
+ property int count: view.count
property int currentA: -1
property int currentB: -1
property real delegateWidth: 60
diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
index 8000137..24b1115 100644
--- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
+++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
@@ -253,6 +253,8 @@ void tst_QDeclarativePathView::items()
QDeclarativePathView *pathview = findItem<QDeclarativePathView>(canvas->rootObject(), "view");
QVERIFY(pathview != 0);
+ QCOMPARE(pathview->count(), model.count());
+ QCOMPARE(canvas->rootObject()->property("count").toInt(), model.count());
QCOMPARE(pathview->childItems().count(), model.count()+1); // assumes all are visible, including highlight
for (int i = 0; i < model.count(); ++i) {
@@ -400,6 +402,7 @@ void tst_QDeclarativePathView::dataModel()
model.insertItem(4, "orange", "10");
QTest::qWait(100);
+ QCOMPARE(canvas->rootObject()->property("viewCount").toInt(), model.count());
QTRY_COMPARE(findItems<QDeclarativeItem>(pathview, "wrapper").count(), 14);
QVERIFY(pathview->currentIndex() == 0);
@@ -409,6 +412,7 @@ void tst_QDeclarativePathView::dataModel()
QCOMPARE(text->text(), model.name(4));
model.removeItem(2);
+ QCOMPARE(canvas->rootObject()->property("viewCount").toInt(), model.count());
text = findItem<QDeclarativeText>(pathview, "myText", 2);
QVERIFY(text);
QCOMPARE(text->text(), model.name(2));
@@ -458,6 +462,16 @@ void tst_QDeclarativePathView::dataModel()
model.removeItem(model.count()-1);
QCOMPARE(pathview->currentIndex(), model.count()-1);
+ // QTBUG-18825
+ // Confirm that the target offset is adjusted when removing items
+ pathview->setCurrentIndex(model.count()-1);
+ QTRY_COMPARE(pathview->offset(), 1.);
+ pathview->setCurrentIndex(model.count()-5);
+ model.removeItem(model.count()-1);
+ model.removeItem(model.count()-1);
+ model.removeItem(model.count()-1);
+ QTRY_COMPARE(pathview->offset(), 2.);
+
delete canvas;
}
diff --git a/tests/auto/declarative/qdeclarativepincharea/data/flickresize.qml b/tests/auto/declarative/qdeclarativepincharea/data/flickresize.qml
new file mode 100644
index 0000000..2da58fc
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativepincharea/data/flickresize.qml
@@ -0,0 +1,50 @@
+import QtQuick 1.1
+
+Flickable {
+ id: flick
+ property real scale: 1.0
+ width: 640
+ height: 360
+ contentWidth: 500
+ contentHeight: 500
+
+ PinchArea {
+ objectName: "pincharea"
+ width: Math.max(flick.contentWidth, flick.width)
+ height: Math.max(flick.contentHeight, flick.height)
+
+ property real initialWidth
+ property real initialHeight
+ onPinchStarted: {
+ initialWidth = flick.contentWidth
+ initialHeight = flick.contentHeight
+ }
+
+ onPinchUpdated: {
+ // adjust content pos due to drag
+ flick.contentX += pinch.previousCenter.x - pinch.center.x
+ flick.contentY += pinch.previousCenter.y - pinch.center.y
+
+ // resize content
+ flick.resizeContent(initialWidth * pinch.scale, initialHeight * pinch.scale, pinch.center)
+ flick.scale = pinch.scale
+ }
+
+ onPinchFinished: {
+ // Move its content within bounds.
+ flick.returnToBounds()
+ }
+
+ Rectangle {
+ width: flick.contentWidth
+ height: flick.contentHeight
+ color: "white"
+ Rectangle {
+ anchors.centerIn: parent
+ width: parent.width-40
+ height: parent.height-40
+ color: "blue"
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativepincharea/tst_qdeclarativepincharea.cpp b/tests/auto/declarative/qdeclarativepincharea/tst_qdeclarativepincharea.cpp
index f175033..90506ba 100644
--- a/tests/auto/declarative/qdeclarativepincharea/tst_qdeclarativepincharea.cpp
+++ b/tests/auto/declarative/qdeclarativepincharea/tst_qdeclarativepincharea.cpp
@@ -43,6 +43,7 @@
#include <QtTest/QSignalSpy>
#include <private/qdeclarativepincharea_p.h>
#include <private/qdeclarativerectangle_p.h>
+#include <private/qdeclarativeflickable_p.h>
#include <QtDeclarative/qdeclarativeview.h>
#include <QtDeclarative/qdeclarativecontext.h>
@@ -58,6 +59,7 @@ private slots:
void pinchProperties();
void scale();
void pan();
+ void flickable();
private:
QDeclarativeView *createView();
@@ -301,6 +303,77 @@ void tst_QDeclarativePinchArea::pan()
delete canvas;
}
+void tst_QDeclarativePinchArea::flickable()
+{
+ QDeclarativeView *canvas = createView();
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/flickresize.qml"));
+ canvas->show();
+ canvas->setFocus();
+ QTest::qWaitForWindowShown(canvas);
+ QVERIFY(canvas->rootObject() != 0);
+ qApp->processEvents();
+
+ QDeclarativePinchArea *pinchArea = canvas->rootObject()->findChild<QDeclarativePinchArea*>("pincharea");
+ QDeclarativePinch *pinch = pinchArea->pinch();
+ QVERIFY(pinchArea != 0);
+ QVERIFY(pinch != 0);
+
+ QDeclarativeFlickable *root = qobject_cast<QDeclarativeFlickable*>(canvas->rootObject());
+ QVERIFY(root != 0);
+
+ QWidget *vp = canvas->viewport();
+
+ QPoint p1(110, 80);
+ QPoint p2(100, 100);
+
+ // begin by moving one touch point (mouse)
+ QTest::mousePress(vp, Qt::LeftButton, 0, canvas->mapFromScene(p1));
+ QTest::touchEvent(vp).press(0, p1);
+ {
+ p1 -= QPoint(10,10);
+ QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(p1), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
+ QApplication::sendEvent(canvas->viewport(), &mv);
+ QTest::touchEvent(vp).move(0, p1);
+ }
+ {
+ p1 -= QPoint(10,10);
+ QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(p1), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
+ QApplication::sendEvent(vp, &mv);
+ QTest::touchEvent(vp).move(0, p1);
+ }
+ {
+ p1 -= QPoint(10,10);
+ QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(p1), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
+ QApplication::sendEvent(vp, &mv);
+ QTest::touchEvent(vp).move(0, p1);
+ }
+
+ // Flickable has reacted to the gesture
+ QVERIFY(root->isMoving());
+ QVERIFY(root->property("scale").toReal() == 1.0);
+
+ // add another touch point and continue moving
+ QTest::touchEvent(vp).stationary(0).press(1, p2);
+ p1 -= QPoint(10,10);
+ p2 += QPoint(10,10);
+ QTest::touchEvent(vp).move(0, p1).move(1, p2);
+
+ QCOMPARE(root->property("scale").toReal(), 1.0);
+
+ p1 -= QPoint(10,10);
+ p2 += QPoint(10,10);
+ QTest::touchEvent(vp).move(0, p1).move(1, p2);
+
+ // PinchArea has stolen the gesture.
+ QVERIFY(!root->isMoving());
+ QVERIFY(root->property("scale").toReal() > 1.0);
+
+ QTest::mouseRelease(vp, Qt::LeftButton, 0, canvas->mapFromScene(p1));
+ QTest::touchEvent(vp).release(0, p1).release(1, p2);
+
+ delete canvas;
+}
+
QDeclarativeView *tst_QDeclarativePinchArea::createView()
{
QDeclarativeView *canvas = new QDeclarativeView(0);
diff --git a/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp b/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp
index 92ab722..78821cb 100644
--- a/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp
+++ b/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp
@@ -154,6 +154,15 @@ void tst_QDeclarativePositioners::test_horizontal_rtl()
QCOMPARE(row->width(), 110.0);
QCOMPARE(row->height(), 50.0);
+ // Change the width of the row and check that items stay to the right
+ row->setWidth(200);
+ QCOMPARE(one->x(), 150.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(two->x(), 130.0);
+ QCOMPARE(two->y(), 0.0);
+ QCOMPARE(three->x(), 90.0);
+ QCOMPARE(three->y(), 0.0);
+
delete canvas;
}
@@ -527,6 +536,19 @@ void tst_QDeclarativePositioners::test_grid_rightToLeft()
QCOMPARE(grid->width(), 100.0);
QCOMPARE(grid->height(), 100.0);
+ // Change the width of the grid and check that items stay to the right
+ grid->setWidth(200);
+ QCOMPARE(one->x(), 150.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(two->x(), 130.0);
+ QCOMPARE(two->y(), 0.0);
+ QCOMPARE(three->x(), 100.0);
+ QCOMPARE(three->y(), 0.0);
+ QCOMPARE(four->x(), 150.0);
+ QCOMPARE(four->y(), 50.0);
+ QCOMPARE(five->x(), 140.0);
+ QCOMPARE(five->y(), 50.0);
+
delete canvas;
}
diff --git a/tests/auto/declarative/qdeclarativetext/data/elideimplicitwidth.qml b/tests/auto/declarative/qdeclarativetext/data/elideimplicitwidth.qml
new file mode 100644
index 0000000..60ae15c
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetext/data/elideimplicitwidth.qml
@@ -0,0 +1,7 @@
+import QtQuick 1.1
+
+Text {
+ text: "Hello World"
+ elide: Text.ElideRight
+ width: 30
+}
diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp
index ca6e87a..82b6f73 100644
--- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp
+++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp
@@ -390,6 +390,13 @@ void tst_qdeclarativetext::elide()
QCOMPARE(textObject->width(), 100.);
}
}
+
+ // QTBUG-18627
+ QUrl qmlfile = QUrl::fromLocalFile(SRCDIR "/data/elideimplicitwidth.qml");
+ QDeclarativeComponent textComponent(&engine, qmlfile);
+ QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(textComponent.create());
+ QVERIFY(item != 0);
+ QVERIFY(item->implicitWidth() > item->width());
}
void tst_qdeclarativetext::textFormat()
diff --git a/tests/auto/declarative/qdeclarativetextedit/data/CursorRect.qml b/tests/auto/declarative/qdeclarativetextedit/data/CursorRect.qml
new file mode 100644
index 0000000..3af0313
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetextedit/data/CursorRect.qml
@@ -0,0 +1,8 @@
+import QtQuick 1.0
+
+TextEdit {
+ focus: true
+ objectName: "myEdit"
+ width: 50
+ text: "This is a long piece of text"
+}
diff --git a/tests/auto/declarative/qdeclarativetextedit/data/cursorTest.qml b/tests/auto/declarative/qdeclarativetextedit/data/cursorTest.qml
index c7c21fc..f7fb3e7 100644
--- a/tests/auto/declarative/qdeclarativetextedit/data/cursorTest.qml
+++ b/tests/auto/declarative/qdeclarativetextedit/data/cursorTest.qml
@@ -2,6 +2,7 @@ import QtQuick 1.0
Rectangle { width: 300; height: 300; color: "white"
TextEdit { text: "Hello world!"; id: textEditObject; objectName: "textEditObject"
+ anchors.fill: parent
resources: [ Component { id:cursor; Item { id:cursorInstance; objectName: "cursorInstance" } } ]
cursorDelegate: cursor
}
diff --git a/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_readonly.qml b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_readonly.qml
new file mode 100644
index 0000000..4aea611
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_false_readonly.qml
@@ -0,0 +1,8 @@
+import QtQuick 1.0
+
+TextEdit {
+ focus: true
+ text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ selectByMouse: false
+ readOnly: true
+}
diff --git a/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_multiline.qml b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_multiline.qml
new file mode 100644
index 0000000..af23f6d
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_multiline.qml
@@ -0,0 +1,8 @@
+import QtQuick 1.1
+
+TextEdit {
+ focus: true
+ text: "0123456789ABCDEFGHIJKLMNOPQRS\nTUVWXYZ"
+ selectByMouse: true
+ mouseSelectionMode: TextInput.SelectWords
+}
diff --git a/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_readonly.qml b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_readonly.qml
new file mode 100644
index 0000000..959e683
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetextedit/data/mouseselection_true_readonly.qml
@@ -0,0 +1,8 @@
+import QtQuick 1.0
+
+TextEdit {
+ focus: true
+ text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ selectByMouse: true
+ readOnly: true
+}
diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp
index 04ecf91..f8af433 100644
--- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp
+++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp
@@ -119,6 +119,11 @@ private slots:
void moveCursorSelectionSequence();
void mouseSelection_data();
void mouseSelection();
+ void multilineMouseSelection();
+ void deferEnableSelectByMouse_data();
+ void deferEnableSelectByMouse();
+ void deferDisableSelectByMouse_data();
+ void deferDisableSelectByMouse();
void mouseSelectionMode_data();
void mouseSelectionMode();
void dragMouseSelection();
@@ -148,6 +153,7 @@ private slots:
void preeditMicroFocus();
void inputContextMouseHandler();
void inputMethodComposing();
+ void cursorRectangleSize();
private:
void simulateKey(QDeclarativeView *, int key, Qt::KeyboardModifiers modifiers = 0);
@@ -787,6 +793,14 @@ void tst_qdeclarativetextedit::selection()
QCOMPARE(textEditObject->selectionEnd(), i);
QVERIFY(textEditObject->selectedText().isNull());
}
+ //Test cursor follows selection
+ for(int i=0; i<= testStr.size(); i++) {
+ textEditObject->select(i,i);
+ QCOMPARE(textEditObject->cursorPosition(), i);
+ QCOMPARE(textEditObject->selectionStart(), i);
+ QCOMPARE(textEditObject->selectionEnd(), i);
+ }
+
textEditObject->setCursorPosition(0);
QVERIFY(textEditObject->cursorPosition() == 0);
@@ -811,10 +825,12 @@ void tst_qdeclarativetextedit::selection()
for(int i=0; i<= testStr.size(); i++) {
textEditObject->select(0,i);
QCOMPARE(testStr.mid(0,i), textEditObject->selectedText());
+ QCOMPARE(textEditObject->cursorPosition(), i);
}
for(int i=0; i<= testStr.size(); i++) {
textEditObject->select(i,testStr.size());
QCOMPARE(testStr.mid(i,testStr.size()-i), textEditObject->selectedText());
+ QCOMPARE(textEditObject->cursorPosition(), testStr.size());
}
textEditObject->setCursorPosition(0);
@@ -1349,6 +1365,121 @@ void tst_qdeclarativetextedit::mouseSelection()
delete canvas;
}
+void tst_qdeclarativetextedit::multilineMouseSelection()
+{
+ QDeclarativeView *canvas = createView(SRCDIR "/data/mouseselection_multiline.qml");
+
+ canvas->show();
+ QApplication::setActiveWindow(canvas);
+ QTest::qWaitForWindowShown(canvas);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas));
+
+ QVERIFY(canvas->rootObject() != 0);
+ QDeclarativeTextEdit *textEditObject = qobject_cast<QDeclarativeTextEdit *>(canvas->rootObject());
+ QVERIFY(textEditObject != 0);
+
+ // press-and-drag from x1,y1 to x2,y1
+ int x1 = 10;
+ int x2 = textEditObject->width() - 10;
+ int y1 = textEditObject->height() / 4;
+ int y2 = textEditObject->height() * 3 / 4;
+ QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x1,y1)));
+ QMouseEvent mv1(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y1)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
+ QApplication::sendEvent(canvas->viewport(), &mv1);
+ QString str1 = textEditObject->selectedText();
+ QVERIFY(str1.length() > 3); // don't reallly care *what* was selected (and it's too sensitive to platform)
+
+ // drag-and-release from x2,y1 to x2,y2
+ QMouseEvent mv2(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y2)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
+ QApplication::sendEvent(canvas->viewport(), &mv2);
+ QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y2)));
+ QString str2 = textEditObject->selectedText();
+ QVERIFY(str1 != str2);
+ QVERIFY(str2.length() > 3);
+
+ delete canvas;
+}
+
+void tst_qdeclarativetextedit::deferEnableSelectByMouse_data()
+{
+ QTest::addColumn<QString>("qmlfile");
+
+ QTest::newRow("writable") << SRCDIR "/data/mouseselection_false.qml";
+ QTest::newRow("read only") << SRCDIR "/data/mouseselection_false_readonly.qml";
+}
+
+void tst_qdeclarativetextedit::deferEnableSelectByMouse()
+{
+ // Verify text isn't selected if selectByMouse is enabled after the mouse button has been pressed.
+ QFETCH(QString, qmlfile);
+
+ QDeclarativeView *canvas = createView(qmlfile);
+
+ canvas->show();
+ QApplication::setActiveWindow(canvas);
+ QTest::qWaitForWindowShown(canvas);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas));
+
+ QVERIFY(canvas->rootObject() != 0);
+ QDeclarativeTextEdit *textEditObject = qobject_cast<QDeclarativeTextEdit *>(canvas->rootObject());
+ QVERIFY(textEditObject != 0);
+
+ // press-and-drag-and-release from x1 to x2
+ int x1 = 10;
+ int x2 = 70;
+ int y = textEditObject->height()/2;
+
+ QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x1,y)));
+ textEditObject->setSelectByMouse(true);
+ //QTest::mouseMove(canvas->viewport(), canvas->mapFromScene(QPoint(x2,y))); // doesn't work
+ QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
+ QApplication::sendEvent(canvas->viewport(), &mv);
+ QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y)));
+ QVERIFY(textEditObject->selectedText().isEmpty());
+
+ delete canvas;
+}
+
+void tst_qdeclarativetextedit::deferDisableSelectByMouse_data()
+{
+ QTest::addColumn<QString>("qmlfile");
+
+ QTest::newRow("writable") << SRCDIR "/data/mouseselection_true.qml";
+ QTest::newRow("read only") << SRCDIR "/data/mouseselection_true_readonly.qml";
+}
+
+void tst_qdeclarativetextedit::deferDisableSelectByMouse()
+{
+ // Verify text isn't selected if selectByMouse is enabled after the mouse button has been pressed.
+ QFETCH(QString, qmlfile);
+
+ QDeclarativeView *canvas = createView(qmlfile);
+
+ canvas->show();
+ QApplication::setActiveWindow(canvas);
+ QTest::qWaitForWindowShown(canvas);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas));
+
+ QVERIFY(canvas->rootObject() != 0);
+ QDeclarativeTextEdit *textEditObject = qobject_cast<QDeclarativeTextEdit *>(canvas->rootObject());
+ QVERIFY(textEditObject != 0);
+
+ // press-and-drag-and-release from x1 to x2
+ int x1 = 10;
+ int x2 = 70;
+ int y = textEditObject->height()/2;
+
+ QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x1,y)));
+ textEditObject->setSelectByMouse(false);
+ //QTest::mouseMove(canvas->viewport(), canvas->mapFromScene(QPoint(x2,y))); // doesn't work
+ QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
+ QApplication::sendEvent(canvas->viewport(), &mv);
+ QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y)));
+ QVERIFY(textEditObject->selectedText().length() > 3);
+
+ delete canvas;
+}
+
void tst_qdeclarativetextedit::dragMouseSelection()
{
QString qmlfile = SRCDIR "/data/mouseselection_true.qml";
@@ -1535,9 +1666,51 @@ void tst_qdeclarativetextedit::cursorDelegate()
QCOMPARE(textEditObject->cursorRectangle().x(), qRound(delegateObject->x()));
QCOMPARE(textEditObject->cursorRectangle().y(), qRound(delegateObject->y()));
}
+ const QString preedit = "preedit";
+ for (int i = 0; i <= preedit.length(); i++) {
+ QInputMethodEvent event(preedit, QList<QInputMethodEvent::Attribute>()
+ << QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, i, 1, QVariant()));
+ QApplication::sendEvent(view, &event);
+
+ QCOMPARE(textEditObject->cursorRectangle().x(), qRound(delegateObject->x()));
+ QCOMPARE(textEditObject->cursorRectangle().y(), qRound(delegateObject->y()));
+ }
+ // Clear preedit text;
+ QInputMethodEvent event;
+ QApplication::sendEvent(view, &event);
+
+ // Test delegate gets moved on mouse press.
+ textEditObject->setSelectByMouse(true);
+ textEditObject->setCursorPosition(0);
+ qDebug() << textEditObject->boundingRect() << textEditObject->positionToRectangle(5).center() << view->mapFromScene(textEditObject->positionToRectangle(5).center());
+ QTest::mouseClick(view->viewport(), Qt::LeftButton, 0, view->mapFromScene(textEditObject->positionToRectangle(5).center()));
+ QVERIFY(textEditObject->cursorPosition() != 0);
+ QCOMPARE(textEditObject->cursorRectangle().x(), qRound(delegateObject->x()));
+ QCOMPARE(textEditObject->cursorRectangle().y(), qRound(delegateObject->y()));
+
+ textEditObject->setReadOnly(true);
+ textEditObject->setCursorPosition(0);
+ QTest::mouseClick(view->viewport(), Qt::LeftButton, 0, view->mapFromScene(textEditObject->positionToRectangle(5).center()));
+ QVERIFY(textEditObject->cursorPosition() != 0);
+ QCOMPARE(textEditObject->cursorRectangle().x(), qRound(delegateObject->x()));
+ QCOMPARE(textEditObject->cursorRectangle().y(), qRound(delegateObject->y()));
+
textEditObject->setCursorPosition(0);
QCOMPARE(textEditObject->cursorRectangle().x(), qRound(delegateObject->x()));
QCOMPARE(textEditObject->cursorRectangle().y(), qRound(delegateObject->y()));
+ QVERIFY(textEditObject->cursorRectangle().y() >= 0);
+ QVERIFY(textEditObject->cursorRectangle().y() < textEditObject->cursorRectangle().height());
+ textEditObject->setVAlign(QDeclarativeTextEdit::AlignVCenter);
+ QCOMPARE(textEditObject->cursorRectangle().x(), qRound(delegateObject->x()));
+ QCOMPARE(textEditObject->cursorRectangle().y(), qRound(delegateObject->y()));
+ QVERIFY(textEditObject->cursorRectangle().y() > (textEditObject->height() / 2) - textEditObject->cursorRectangle().height());
+ QVERIFY(textEditObject->cursorRectangle().y() < (textEditObject->height() / 2) + textEditObject->cursorRectangle().height());
+ textEditObject->setVAlign(QDeclarativeTextEdit::AlignBottom);
+ QCOMPARE(textEditObject->cursorRectangle().x(), qRound(delegateObject->x()));
+ QCOMPARE(textEditObject->cursorRectangle().y(), qRound(delegateObject->y()));
+ QVERIFY(textEditObject->cursorRectangle().y() > textEditObject->height() - (textEditObject->cursorRectangle().height() * 2));
+ QVERIFY(textEditObject->cursorRectangle().y() < textEditObject->height());
+
//Test Delegate gets deleted
textEditObject->setCursorDelegate(0);
QVERIFY(!textEditObject->findChild<QDeclarativeItem*>("cursorInstance"));
@@ -2226,6 +2399,8 @@ void tst_qdeclarativetextedit::preeditMicroFocus()
QTest::qWaitForWindowShown(&view);
QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
+ QSignalSpy cursorRectangleSpy(&edit, SIGNAL(cursorRectangleChanged()));
+
QRect currentRect;
QRect previousRect = edit.inputMethodQuery(Qt::ImMicroFocus).toRect();
@@ -2236,8 +2411,9 @@ void tst_qdeclarativetextedit::preeditMicroFocus()
currentRect = edit.inputMethodQuery(Qt::ImMicroFocus).toRect();
QCOMPARE(currentRect, previousRect);
#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
- QCOMPARE(ic.updateReceived, true);
+ QCOMPARE(ic.updateReceived, false); // The cursor position hasn't changed.
#endif
+ QCOMPARE(cursorRectangleSpy.count(), 0);
// Verify that the micro focus rect moves to the left as the cursor position
// is incremented.
@@ -2249,6 +2425,8 @@ void tst_qdeclarativetextedit::preeditMicroFocus()
#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
QCOMPARE(ic.updateReceived, true);
#endif
+ QVERIFY(cursorRectangleSpy.count() > 0);
+ cursorRectangleSpy.clear();
previousRect = currentRect;
}
@@ -2262,6 +2440,7 @@ void tst_qdeclarativetextedit::preeditMicroFocus()
#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
QCOMPARE(ic.updateReceived, true);
#endif
+ QVERIFY(cursorRectangleSpy.count() > 0);
}
void tst_qdeclarativetextedit::inputContextMouseHandler()
@@ -2421,6 +2600,25 @@ void tst_qdeclarativetextedit::inputMethodComposing()
QCOMPARE(spy.count(), 2);
}
+void tst_qdeclarativetextedit::cursorRectangleSize()
+{
+ QDeclarativeView *canvas = createView(SRCDIR "/data/CursorRect.qml");
+ QVERIFY(canvas->rootObject() != 0);
+ canvas->show();
+ canvas->setFocus();
+ QApplication::setActiveWindow(canvas);
+ QTest::qWaitForWindowShown(canvas);
+
+ QDeclarativeTextEdit *textEdit = qobject_cast<QDeclarativeTextEdit *>(canvas->rootObject());
+ QVERIFY(textEdit != 0);
+ textEdit->setFocus(Qt::OtherFocusReason);
+ QRectF cursorRect = textEdit->positionToRectangle(textEdit->cursorPosition());
+ QRectF microFocusFromScene = canvas->scene()->inputMethodQuery(Qt::ImMicroFocus).toRectF();
+ QRectF microFocusFromApp= QApplication::focusWidget()->inputMethodQuery(Qt::ImMicroFocus).toRectF();
+
+ QCOMPARE(microFocusFromScene.size(), cursorRect.size());
+ QCOMPARE(microFocusFromApp.size(), cursorRect.size());
+}
QTEST_MAIN(tst_qdeclarativetextedit)
#include "tst_qdeclarativetextedit.moc"
diff --git a/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_default.qml b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_default.qml
new file mode 100644
index 0000000..eea83ed
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_default.qml
@@ -0,0 +1,7 @@
+import QtQuick 1.0
+
+TextInput {
+ focus: true
+ text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ selectByMouse: false
+}
diff --git a/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false.qml b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false.qml
new file mode 100644
index 0000000..eea83ed
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false.qml
@@ -0,0 +1,7 @@
+import QtQuick 1.0
+
+TextInput {
+ focus: true
+ text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ selectByMouse: false
+}
diff --git a/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false_readonly.qml b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false_readonly.qml
new file mode 100644
index 0000000..36a9563
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false_readonly.qml
@@ -0,0 +1,8 @@
+import QtQuick 1.0
+
+TextInput {
+ focus: true
+ text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ selectByMouse: false
+ readOnly: true
+}
diff --git a/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false_words.qml b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false_words.qml
new file mode 100644
index 0000000..eea83ed
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_false_words.qml
@@ -0,0 +1,7 @@
+import QtQuick 1.0
+
+TextInput {
+ focus: true
+ text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ selectByMouse: false
+}
diff --git a/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_true_readonly.qml b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_true_readonly.qml
new file mode 100644
index 0000000..678a89a
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_true_readonly.qml
@@ -0,0 +1,8 @@
+import QtQuick 1.0
+
+TextInput {
+ focus: true
+ text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ selectByMouse: true
+ readOnly: true
+}
diff --git a/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_true_words.qml b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_true_words.qml
new file mode 100644
index 0000000..8115ba0
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetextinput/data/mouseselection_true_words.qml
@@ -0,0 +1,7 @@
+import QtQuick 1.0
+
+TextInput {
+ focus: true
+ text: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ selectByMouse: true
+}
diff --git a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp
index a35a2c9..a241241 100644
--- a/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp
+++ b/tests/auto/declarative/qdeclarativetextinput/tst_qdeclarativetextinput.cpp
@@ -95,6 +95,12 @@ private slots:
void moveCursorSelection();
void moveCursorSelectionSequence_data();
void moveCursorSelectionSequence();
+ void mouseSelection_data();
+ void mouseSelection();
+ void deferEnableSelectByMouse_data();
+ void deferEnableSelectByMouse();
+ void deferDisableSelectByMouse_data();
+ void deferDisableSelectByMouse();
void dragMouseSelection();
void mouseSelectionMode_data();
void mouseSelectionMode();
@@ -135,6 +141,7 @@ private slots:
void preeditMicroFocus();
void inputContextMouseHandler();
void inputMethodComposing();
+ void cursorRectangleSize();
private:
void simulateKey(QDeclarativeView *, int key);
@@ -374,6 +381,13 @@ void tst_qdeclarativetextinput::selection()
QCOMPARE(textinputObject->selectionEnd(), i);
QVERIFY(textinputObject->selectedText().isNull());
}
+ //Test cursor follows selection
+ for(int i=0; i<= testStr.size(); i++) {
+ textinputObject->select(i,i);
+ QCOMPARE(textinputObject->cursorPosition(), i);
+ QCOMPARE(textinputObject->selectionStart(), i);
+ QCOMPARE(textinputObject->selectionEnd(), i);
+ }
textinputObject->setCursorPosition(0);
QVERIFY(textinputObject->cursorPosition() == 0);
@@ -398,10 +412,12 @@ void tst_qdeclarativetextinput::selection()
for(int i=0; i<= testStr.size(); i++) {
textinputObject->select(0,i);
QCOMPARE(testStr.mid(0,i), textinputObject->selectedText());
+ QCOMPARE(textinputObject->cursorPosition(), i);
}
for(int i=0; i<= testStr.size(); i++) {
textinputObject->select(i,testStr.size());
QCOMPARE(testStr.mid(i,testStr.size()-i), textinputObject->selectedText());
+ QCOMPARE(textinputObject->cursorPosition(), testStr.size());
}
textinputObject->setCursorPosition(0);
@@ -901,6 +917,141 @@ void tst_qdeclarativetextinput::moveCursorSelectionSequence()
QCOMPARE(textinputObject->selectionEnd(), selection2End);
}
+void tst_qdeclarativetextinput::mouseSelection_data()
+{
+ QTest::addColumn<QString>("qmlfile");
+ QTest::addColumn<bool>("expectSelection");
+
+ // import installed
+ QTest::newRow("on") << SRCDIR "/data/mouseselection_true.qml" << true;
+ QTest::newRow("off") << SRCDIR "/data/mouseselection_false.qml" << false;
+ QTest::newRow("default") << SRCDIR "/data/mouseselection_default.qml" << false;
+ QTest::newRow("on word selection") << SRCDIR "/data/mouseselection_true_words.qml" << true;
+ QTest::newRow("off word selection") << SRCDIR "/data/mouseselection_false_words.qml" << false;
+ QTest::newRow("on read only") << SRCDIR "/data/mouseselection_true_readonly.qml" << true;
+ QTest::newRow("off read only") << SRCDIR "/data/mouseselection_false_readonly.qml" << false;
+}
+
+void tst_qdeclarativetextinput::mouseSelection()
+{
+ QFETCH(QString, qmlfile);
+ QFETCH(bool, expectSelection);
+
+ QDeclarativeView *canvas = createView(qmlfile);
+
+ canvas->show();
+ QApplication::setActiveWindow(canvas);
+ QTest::qWaitForWindowShown(canvas);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas));
+
+ QVERIFY(canvas->rootObject() != 0);
+ QDeclarativeTextInput *textInputObject = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject());
+ QVERIFY(textInputObject != 0);
+
+ // press-and-drag-and-release from x1 to x2
+ int x1 = 10;
+ int x2 = 70;
+ int y = textInputObject->height()/2;
+ QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x1,y)));
+ //QTest::mouseMove(canvas->viewport(), canvas->mapFromScene(QPoint(x2,y))); // doesn't work
+ QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
+ QApplication::sendEvent(canvas->viewport(), &mv);
+ QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y)));
+ QString str = textInputObject->selectedText();
+ if (expectSelection)
+ QVERIFY(str.length() > 3); // don't reallly care *what* was selected (and it's too sensitive to platform)
+ else
+ QVERIFY(str.isEmpty());
+
+ // Clicking and shift to clicking between the same points should select the same text.
+ textInputObject->setCursorPosition(0);
+ QTest::mouseClick(canvas->viewport(), Qt::LeftButton, Qt::NoModifier, canvas->mapFromScene(QPoint(x1,y)));
+ QTest::mouseClick(canvas->viewport(), Qt::LeftButton, Qt::ShiftModifier, canvas->mapFromScene(QPoint(x2,y)));
+ QCOMPARE(textInputObject->selectedText(), str);
+
+ delete canvas;
+}
+
+void tst_qdeclarativetextinput::deferEnableSelectByMouse_data()
+{
+ QTest::addColumn<QString>("qmlfile");
+
+ QTest::newRow("writable") << SRCDIR "/data/mouseselection_false.qml";
+ QTest::newRow("read only") << SRCDIR "/data/mouseselection_false_readonly.qml";
+}
+
+void tst_qdeclarativetextinput::deferEnableSelectByMouse()
+{
+ // Verify text isn't selected if selectByMouse is enabled after the mouse button has been pressed.
+ QFETCH(QString, qmlfile);
+
+ QDeclarativeView *canvas = createView(qmlfile);
+
+ canvas->show();
+ QApplication::setActiveWindow(canvas);
+ QTest::qWaitForWindowShown(canvas);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas));
+
+ QVERIFY(canvas->rootObject() != 0);
+ QDeclarativeTextInput *textInputObject = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject());
+ QVERIFY(textInputObject != 0);
+
+ // press-and-drag-and-release from x1 to x2
+ int x1 = 10;
+ int x2 = 70;
+ int y = textInputObject->height()/2;
+
+ QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x1,y)));
+ textInputObject->setSelectByMouse(true);
+ //QTest::mouseMove(canvas->viewport(), canvas->mapFromScene(QPoint(x2,y))); // doesn't work
+ QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
+ QApplication::sendEvent(canvas->viewport(), &mv);
+ QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y)));
+ QVERIFY(textInputObject->selectedText().isEmpty());
+
+ delete canvas;
+}
+
+void tst_qdeclarativetextinput::deferDisableSelectByMouse_data()
+{
+ QTest::addColumn<QString>("qmlfile");
+
+ QTest::newRow("writable") << SRCDIR "/data/mouseselection_true.qml";
+ QTest::newRow("read only") << SRCDIR "/data/mouseselection_true_readonly.qml";
+}
+
+void tst_qdeclarativetextinput::deferDisableSelectByMouse()
+{
+ // Verify text isn't selected if selectByMouse is enabled after the mouse button has been pressed.
+ QFETCH(QString, qmlfile);
+
+ QDeclarativeView *canvas = createView(qmlfile);
+
+ canvas->show();
+ QApplication::setActiveWindow(canvas);
+ QTest::qWaitForWindowShown(canvas);
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(canvas));
+
+ QVERIFY(canvas->rootObject() != 0);
+ QDeclarativeTextInput *textInputObject = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject());
+ QVERIFY(textInputObject != 0);
+
+ // press-and-drag-and-release from x1 to x2
+ int x1 = 10;
+ int x2 = 70;
+ int y = textInputObject->height()/2;
+
+ QTest::mousePress(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x1,y)));
+ textInputObject->setSelectByMouse(false);
+ //QTest::mouseMove(canvas->viewport(), canvas->mapFromScene(QPoint(x2,y))); // doesn't work
+ QMouseEvent mv(QEvent::MouseMove, canvas->mapFromScene(QPoint(x2,y)), Qt::LeftButton, Qt::LeftButton,Qt::NoModifier);
+ QApplication::sendEvent(canvas->viewport(), &mv);
+ QTest::mouseRelease(canvas->viewport(), Qt::LeftButton, 0, canvas->mapFromScene(QPoint(x2,y)));
+ QVERIFY(textInputObject->selectedText().length() > 3);
+
+ delete canvas;
+}
+
void tst_qdeclarativetextinput::dragMouseSelection()
{
QString qmlfile = SRCDIR "/data/mouseselection_true.qml";
@@ -1363,8 +1514,10 @@ void tst_qdeclarativetextinput::inputMethods()
QVERIFY(canvas->rootObject() != 0);
QDeclarativeTextInput *input = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject());
QVERIFY(input != 0);
+ QVERIFY(input->imHints() & Qt::ImhNoPredictiveText);
QVERIFY(input->inputMethodHints() & Qt::ImhNoPredictiveText);
- input->setInputMethodHints(Qt::ImhUppercaseOnly);
+ input->setIMHints(Qt::ImhUppercaseOnly);
+ QVERIFY(input->imHints() & Qt::ImhUppercaseOnly);
QVERIFY(input->inputMethodHints() & Qt::ImhUppercaseOnly);
QVERIFY(canvas->rootObject() != 0);
@@ -1628,12 +1781,20 @@ void tst_qdeclarativetextinput::cursorDelegate()
//Test Delegate gets moved
for(int i=0; i<= textInputObject->text().length(); i++){
textInputObject->setCursorPosition(i);
- //+5 is because the TextInput cursorRectangle is just a 10xHeight area centered on cursor position
- QCOMPARE(textInputObject->cursorRectangle().x() + 5, qRound(delegateObject->x()));
+ QCOMPARE(textInputObject->cursorRectangle().x(), qRound(delegateObject->x()));
+ QCOMPARE(textInputObject->cursorRectangle().y(), qRound(delegateObject->y()));
+ }
+ const QString preedit = "preedit";
+ for (int i = 0; i <= preedit.length(); i++) {
+ QInputMethodEvent event(preedit, QList<QInputMethodEvent::Attribute>()
+ << QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, i, 1, QVariant()));
+ QApplication::sendEvent(view, &event);
+
+ QCOMPARE(textInputObject->cursorRectangle().x(), qRound(delegateObject->x()));
QCOMPARE(textInputObject->cursorRectangle().y(), qRound(delegateObject->y()));
}
textInputObject->setCursorPosition(0);
- QCOMPARE(textInputObject->cursorRectangle().x()+5, qRound(delegateObject->x()));
+ QCOMPARE(textInputObject->cursorRectangle().x(), qRound(delegateObject->x()));
QCOMPARE(textInputObject->cursorRectangle().y(), qRound(delegateObject->y()));
//Test Delegate gets deleted
textInputObject->setCursorDelegate(0);
@@ -1722,19 +1883,26 @@ void tst_qdeclarativetextinput::cursorRectangle()
QRect r;
+ // some tolerance for different fonts.
+#ifdef Q_OS_LINUX
+ const int error = 2;
+#else
+ const int error = 5;
+#endif
+
for (int i = 0; i <= 5; ++i) {
input.setCursorPosition(i);
r = input.cursorRectangle();
int textWidth = fm.width(text.mid(0, i));
- QVERIFY(r.left() < textWidth);
- QVERIFY(r.right() > textWidth);
+ QVERIFY(r.left() < textWidth + error);
+ QVERIFY(r.right() > textWidth - error);
QCOMPARE(input.inputMethodQuery(Qt::ImMicroFocus).toRect(), r);
}
// Check the cursor rectangle remains within the input bounding rect when auto scrolling.
QVERIFY(r.left() < input.boundingRect().width());
- QVERIFY(r.right() >= input.width());
+ QVERIFY(r.right() >= input.width() - error);
for (int i = 6; i < text.length(); ++i) {
input.setCursorPosition(i);
@@ -1798,6 +1966,7 @@ void tst_qdeclarativetextinput::echoMode()
ref &= ~Qt::ImhHiddenText;
ref &= ~(Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
QCOMPARE(input->inputMethodHints(), ref);
+ QCOMPARE(input->imHints(), Qt::ImhNone);
input->setEchoMode(QDeclarativeTextInput::NoEcho);
QCOMPARE(input->text(), initial);
QCOMPARE(input->displayText(), QLatin1String(""));
@@ -1806,6 +1975,7 @@ void tst_qdeclarativetextinput::echoMode()
ref |= Qt::ImhHiddenText;
ref |= (Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
QCOMPARE(input->inputMethodHints(), ref);
+ QCOMPARE(input->imHints(), Qt::ImhNone);
input->setEchoMode(QDeclarativeTextInput::Password);
//Password
ref |= Qt::ImhHiddenText;
@@ -1813,6 +1983,7 @@ void tst_qdeclarativetextinput::echoMode()
QCOMPARE(input->text(), initial);
QCOMPARE(input->displayText(), QLatin1String("********"));
QCOMPARE(input->inputMethodHints(), ref);
+ QCOMPARE(input->imHints(), Qt::ImhNone);
input->setPasswordCharacter(QChar('Q'));
QCOMPARE(input->passwordCharacter(), QLatin1String("Q"));
QCOMPARE(input->text(), initial);
@@ -1822,6 +1993,7 @@ void tst_qdeclarativetextinput::echoMode()
ref &= ~Qt::ImhHiddenText;
ref |= (Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
QCOMPARE(input->inputMethodHints(), ref);
+ QCOMPARE(input->imHints(), Qt::ImhNone);
QCOMPARE(input->text(), initial);
QCOMPARE(input->displayText(), QLatin1String("QQQQQQQQ"));
QCOMPARE(input->inputMethodQuery(Qt::ImSurroundingText).toString(), QLatin1String("QQQQQQQQ"));
@@ -1842,6 +2014,40 @@ void tst_qdeclarativetextinput::echoMode()
QCOMPARE(input->displayText(), initial);
QCOMPARE(input->inputMethodQuery(Qt::ImSurroundingText).toString(), initial);
+ // Test echo mode doesn't override imHints.
+ input->setIMHints(Qt::ImhHiddenText | Qt::ImhDialableCharactersOnly);
+ ref |= Qt::ImhDialableCharactersOnly;
+ //Normal
+ input->setEchoMode(QDeclarativeTextInput::Normal);
+ ref |= Qt::ImhHiddenText;
+ ref &= ~(Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
+ QCOMPARE(input->inputMethodHints(), ref);
+ QCOMPARE(input->imHints(), Qt::ImhHiddenText | Qt::ImhDialableCharactersOnly);
+ //NoEcho
+ input->setEchoMode(QDeclarativeTextInput::NoEcho);
+ ref |= Qt::ImhHiddenText;
+ ref |= (Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
+ QCOMPARE(input->inputMethodHints(), ref);
+ QCOMPARE(input->imHints(), Qt::ImhHiddenText | Qt::ImhDialableCharactersOnly);
+ //Password
+ input->setEchoMode(QDeclarativeTextInput::Password);
+ ref |= Qt::ImhHiddenText;
+ ref |= (Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
+ QCOMPARE(input->inputMethodHints(), ref);
+ QCOMPARE(input->imHints(), Qt::ImhHiddenText | Qt::ImhDialableCharactersOnly);
+ //PasswordEchoOnEdit
+ input->setEchoMode(QDeclarativeTextInput::PasswordEchoOnEdit);
+ ref &= ~Qt::ImhHiddenText;
+ ref |= (Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
+ QCOMPARE(input->inputMethodHints(), ref);
+ QCOMPARE(input->imHints(), Qt::ImhHiddenText | Qt::ImhDialableCharactersOnly);
+ //Normal
+ input->setEchoMode(QDeclarativeTextInput::Normal);
+ ref |= Qt::ImhHiddenText;
+ ref &= ~(Qt::ImhNoAutoUppercase | Qt::ImhNoPredictiveText);
+ QCOMPARE(input->inputMethodHints(), ref);
+ QCOMPARE(input->imHints(), Qt::ImhHiddenText | Qt::ImhDialableCharactersOnly);
+
delete canvas;
}
@@ -2235,18 +2441,25 @@ void tst_qdeclarativetextinput::preeditAutoScroll()
QCOMPARE(input.positionAt(0), 0);
QCOMPARE(input.positionAt(input.width()), 5);
+ // some tolerance for different fonts.
+#ifdef Q_OS_LINUX
+ const int error = 2;
+#else
+ const int error = 5;
+#endif
+
// test if the preedit is larger than the text input that the
// character preceding the cursor is still visible.
qreal x = input.positionToRectangle(0).x();
for (int i = 0; i < 3; ++i) {
ic.sendPreeditText(preeditText, i + 1);
- QVERIFY(input.cursorRectangle().right() >= fm.width(preeditText.at(i)));
+ QVERIFY(input.cursorRectangle().right() >= fm.width(preeditText.at(i)) - error);
QVERIFY(input.positionToRectangle(0).x() < x);
x = input.positionToRectangle(0).x();
}
for (int i = 1; i >= 0; --i) {
ic.sendPreeditText(preeditText, i + 1);
- QVERIFY(input.cursorRectangle().right() >= fm.width(preeditText.at(i)));
+ QVERIFY(input.cursorRectangle().right() >= fm.width(preeditText.at(i)) - error);
QVERIFY(input.positionToRectangle(0).x() > x);
x = input.positionToRectangle(0).x();
}
@@ -2271,6 +2484,20 @@ void tst_qdeclarativetextinput::preeditAutoScroll()
ic.sendPreeditText(preeditText.mid(0, 3), 1);
QCOMPARE(input.positionAt(0), 0);
QCOMPARE(input.positionAt(input.width()), 5);
+
+ ic.sendEvent(QInputMethodEvent());
+ input.setAutoScroll(true);
+ // Test committing pre-edit text at the start of the string. QTBUG-18789
+ input.setCursorPosition(0);
+ ic.sendPreeditText(input.text(), 5);
+ QCOMPARE(input.positionAt(0), 0);
+
+ QInputMethodEvent event;
+ event.setCommitString(input.text());
+ ic.sendEvent(event);
+
+ QCOMPARE(input.positionAt(0), 0);
+ QCOMPARE(input.positionAt(input.width()), 5);
}
void tst_qdeclarativetextinput::preeditMicroFocus()
@@ -2484,6 +2711,26 @@ void tst_qdeclarativetextinput::inputMethodComposing()
QCOMPARE(spy.count(), 2);
}
+void tst_qdeclarativetextinput::cursorRectangleSize()
+{
+ QDeclarativeView *canvas = createView(SRCDIR "/data/positionAt.qml");
+ QVERIFY(canvas->rootObject() != 0);
+ canvas->show();
+ canvas->setFocus();
+ QApplication::setActiveWindow(canvas);
+ QTest::qWaitForWindowShown(canvas);
+
+ QDeclarativeTextInput *textInput = qobject_cast<QDeclarativeTextInput *>(canvas->rootObject());
+ QVERIFY(textInput != 0);
+ textInput->setFocus(Qt::OtherFocusReason);
+ QRectF cursorRect = textInput->positionToRectangle(textInput->cursorPosition());
+ QRectF microFocusFromScene = canvas->scene()->inputMethodQuery(Qt::ImMicroFocus).toRectF();
+ QRectF microFocusFromApp= QApplication::focusWidget()->inputMethodQuery(Qt::ImMicroFocus).toRectF();
+
+ QCOMPARE(microFocusFromScene.size(), cursorRect.size());
+ QCOMPARE(microFocusFromApp.size(), cursorRect.size());
+}
+
QTEST_MAIN(tst_qdeclarativetextinput)
#include "tst_qdeclarativetextinput.moc"
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
index 85d7876..7b384f8 100644
--- a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
@@ -190,6 +190,11 @@ void tst_qdeclarativevisualdatamodel::rootIndex()
QMetaObject::invokeMethod(obj, "setRootToParent");
QVERIFY(qvariant_cast<QModelIndex>(obj->rootIndex()) == QModelIndex());
+ QMetaObject::invokeMethod(obj, "setRoot");
+ QVERIFY(qvariant_cast<QModelIndex>(obj->rootIndex()) == model.index(0,0));
+ model.clear(); // will emit modelReset()
+ QVERIFY(qvariant_cast<QModelIndex>(obj->rootIndex()) == QModelIndex());
+
delete obj;
}
diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
index af54008..a0e2547 100644
--- a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
@@ -418,7 +418,7 @@ void tst_qdeclarativexmllistmodel::headers()
QTRY_COMPARE(model->status(), QDeclarativeXmlListModel::Ready);
QVariantMap expectedHeaders;
- expectedHeaders["Accept"] = "application/xml";
+ expectedHeaders["Accept"] = "application/xml,*/*";
QCOMPARE(factory.lastSentHeaders.count(), expectedHeaders.count());
foreach (const QString &header, expectedHeaders.keys()) {
diff --git a/tests/auto/macnativeevents/tst_macnativeevents.cpp b/tests/auto/macnativeevents/tst_macnativeevents.cpp
index ac7298c..731fe0a 100644
--- a/tests/auto/macnativeevents/tst_macnativeevents.cpp
+++ b/tests/auto/macnativeevents/tst_macnativeevents.cpp
@@ -68,7 +68,7 @@ private slots:
void testMouseEnter();
void testChildDialogInFrontOfModalParent();
#ifdef QT_MAC_USE_COCOA
- void testChildWindowInFrontOfParentWindow();
+// void testChildWindowInFrontOfParentWindow();
// void testChildToolWindowInFrontOfChildNormalWindow();
void testChildWindowInFrontOfStaysOnTopParentWindow();
#endif
@@ -314,6 +314,11 @@ void tst_MacNativeEvents::testChildDialogInFrontOfModalParent()
}
#ifdef QT_MAC_USE_COCOA
+#if 0
+// This test is disabled as of Qt-4.7.4 because we cannot do it
+// unless we use the Cocoa sub window API. But using that opens up
+// a world of side effects that we cannot live with. So we rather
+// not support child-on-top-of-parent instead.
void tst_MacNativeEvents::testChildWindowInFrontOfParentWindow()
{
// Test that a child window always stacks in front of its parent window.
@@ -338,6 +343,7 @@ void tst_MacNativeEvents::testChildWindowInFrontOfParentWindow()
QTest::qWait(100);
QVERIFY(!child.isVisible());
}
+#endif
/* This test can be enabled once setStackingOrder has been fixed in qwidget_mac.mm
void tst_MacNativeEvents::testChildToolWindowInFrontOfChildNormalWindow()
diff --git a/tests/auto/q3combobox/tst_q3combobox.cpp b/tests/auto/q3combobox/tst_q3combobox.cpp
index 17bd861..825acb2 100644
--- a/tests/auto/q3combobox/tst_q3combobox.cpp
+++ b/tests/auto/q3combobox/tst_q3combobox.cpp
@@ -1004,6 +1004,10 @@ void tst_Q3ComboBox::wheelEvent()
void tst_Q3ComboBox::task231724_clear()
{
+#ifdef Q_WS_MACX
+ return; // On Mac, we don't use a ListBox for the popup
+#endif
+
Q3ComboBox box;
for ( int i = 0; i <50; i++ ) {
diff --git a/tests/auto/q3progressbar/tst_q3progressbar.cpp b/tests/auto/q3progressbar/tst_q3progressbar.cpp
index 745e2d5..3a0c3e2 100644
--- a/tests/auto/q3progressbar/tst_q3progressbar.cpp
+++ b/tests/auto/q3progressbar/tst_q3progressbar.cpp
@@ -45,6 +45,7 @@
#include <qapplication.h>
#include <qdebug.h>
#include <q3progressbar.h>
+#include "../../shared/util.h"
//TESTED_CLASS=
//TESTED_FILES=
@@ -106,7 +107,7 @@ void tst_Q3ProgressBar::setProgress()
{
MyCustomProgressBar * m_progressBar = new MyCustomProgressBar();
m_progressBar->show();
- QApplication::processEvents();
+ QTest::qWaitForWindowShown(m_progressBar);
//case with total steps = 0
m_progressBar->setTotalSteps(0);
@@ -114,10 +115,9 @@ void tst_Q3ProgressBar::setProgress()
m_progressBar->paintNumber = 0;
m_progressBar->setProgress(m_progressBar->progress() + 1);
QCOMPARE(oldValue + 1,m_progressBar->progress());
- QApplication::processEvents();
// It might be > 1 because it is animated.
- QVERIFY(m_progressBar->paintNumber >= 1);
+ QTRY_VERIFY(m_progressBar->paintNumber >= 1);
qDebug() << "Animation test: paintNumber =" << m_progressBar->paintNumber;
//standard case
@@ -125,10 +125,9 @@ void tst_Q3ProgressBar::setProgress()
m_progressBar->setProgress(0);
m_progressBar->paintNumber = 0;
m_progressBar->setProgress(m_progressBar->progress() + 1);
- QApplication::processEvents();
// It might be > 1 because other events might cause painting.
- QVERIFY(m_progressBar->paintNumber >= 1);
+ QTRY_VERIFY(m_progressBar->paintNumber >= 1);
qDebug() << "Standard test: paintNumber =" << m_progressBar->paintNumber;
}
diff --git a/tests/auto/qdiriterator/tst_qdiriterator.cpp b/tests/auto/qdiriterator/tst_qdiriterator.cpp
index f7666dc..3269379 100644
--- a/tests/auto/qdiriterator/tst_qdiriterator.cpp
+++ b/tests/auto/qdiriterator/tst_qdiriterator.cpp
@@ -118,6 +118,7 @@ private slots:
void longPath();
void task185502_dirorder();
void relativePaths();
+ void qtbug15421_hiddenDirs_hiddenFiles();
};
tst_QDirIterator::tst_QDirIterator()
@@ -163,6 +164,20 @@ tst_QDirIterator::tst_QDirIterator()
createLink("nothing", "entrylist/brokenlink.lnk");
# endif
#endif
+
+ createDirectory("qtbug15421_hiddenDirs_hiddenFiles");
+ createFile("qtbug15421_hiddenDirs_hiddenFiles/normalFile");
+ createFile("qtbug15421_hiddenDirs_hiddenFiles/.hiddenFile");
+ createDirectory("qtbug15421_hiddenDirs_hiddenFiles/normalDirectory");
+ createDirectory("qtbug15421_hiddenDirs_hiddenFiles/.hiddenDirectory");
+ createFile("qtbug15421_hiddenDirs_hiddenFiles/normalDirectory/normalFile");
+ createFile("qtbug15421_hiddenDirs_hiddenFiles/normalDirectory/.hiddenFile");
+ createFile("qtbug15421_hiddenDirs_hiddenFiles/.hiddenDirectory/normalFile");
+ createFile("qtbug15421_hiddenDirs_hiddenFiles/.hiddenDirectory/.hiddenFile");
+ createDirectory("qtbug15421_hiddenDirs_hiddenFiles/normalDirectory/normalDirectory");
+ createDirectory("qtbug15421_hiddenDirs_hiddenFiles/normalDirectory/.hiddenDirectory");
+ createDirectory("qtbug15421_hiddenDirs_hiddenFiles/.hiddenDirectory/normalDirectory");
+ createDirectory("qtbug15421_hiddenDirs_hiddenFiles/.hiddenDirectory/.hiddenDirectory");
}
tst_QDirIterator::~tst_QDirIterator()
@@ -532,6 +547,46 @@ void tst_QDirIterator::relativePaths()
}
}
+void tst_QDirIterator::qtbug15421_hiddenDirs_hiddenFiles()
+{
+ // In Unix it is easy to create hidden files, but in Windows it requires
+ // a special call since hidden files need to be "marked" while in Unix
+ // anything starting by a '.' is a hidden file.
+ // For that reason this test is not run in Windows.
+#if defined Q_OS_WIN || Q_OS_WINCE
+ QSKIP("To create hidden files a special call is required in Windows.", SkipAll);
+#else
+ // Only files
+ {
+ int matches = 0;
+ int failures = 0;
+ QDirIterator di("qtbug15421_hiddenDirs_hiddenFiles", QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
+ while (di.hasNext()) {
+ ++matches;
+ QString filename = di.next();
+ if (QFileInfo(filename).isDir())
+ ++failures; // search was only supposed to find files
+ }
+ QCOMPARE(matches, 6);
+ QCOMPARE(failures, 0);
+ }
+ // Only directories
+ {
+ int matches = 0;
+ int failures = 0;
+ QDirIterator di("qtbug15421_hiddenDirs_hiddenFiles", QDir::Dirs | QDir::Hidden | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
+ while (di.hasNext()) {
+ ++matches;
+ QString filename = di.next();
+ if (!QFileInfo(filename).isDir())
+ ++failures; // search was only supposed to find files
+ }
+ QCOMPARE(matches, 6);
+ QCOMPARE(failures, 0);
+ }
+#endif // Q_OS_WIN || Q_OS_WINCE
+}
+
QTEST_MAIN(tst_QDirIterator)
#include "tst_qdiriterator.moc"
diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
index e7c63d5..447385a 100644
--- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
+++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
@@ -1091,6 +1091,9 @@ void tst_QGraphicsAnchorLayout::setSpacing()
#ifdef Q_WS_MAC
QTest::qWait(200);
#endif
+
+ // 21x21
+ QCOMPARE(p->size(), QSizeF(41, 41));
QCOMPARE(a->geometry(), QRectF(0, 0, 20, 20));
QCOMPARE(b->geometry(), QRectF(21, 0, 20, 20));
QCOMPARE(c->geometry(), QRectF(0, 21, 41, 20));
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index 168f75e..73e5656 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -66,6 +66,7 @@
#include <QPushButton>
#include <QLineEdit>
#include <QGraphicsLinearLayout>
+#include <float.h>
#include "../../shared/util.h"
@@ -449,6 +450,8 @@ private slots:
void scroll();
void focusHandling_data();
void focusHandling();
+ void touchEventPropagation_data();
+ void touchEventPropagation();
void deviceCoordinateCache_simpleRotations();
// task specific tests below me
@@ -10637,6 +10640,80 @@ void tst_QGraphicsItem::focusHandling()
QCOMPARE(scene.focusItem(), focusableUnder);
}
+void tst_QGraphicsItem::touchEventPropagation_data()
+{
+ QTest::addColumn<QGraphicsItem::GraphicsItemFlag>("flag");
+ QTest::addColumn<int>("expectedCount");
+
+ QTest::newRow("ItemIsPanel")
+ << QGraphicsItem::ItemIsPanel << 0;
+ QTest::newRow("ItemStopsClickFocusPropagation")
+ << QGraphicsItem::ItemStopsClickFocusPropagation << 1;
+ QTest::newRow("ItemStopsFocusHandling")
+ << QGraphicsItem::ItemStopsFocusHandling << 1;
+}
+
+void tst_QGraphicsItem::touchEventPropagation()
+{
+ QFETCH(QGraphicsItem::GraphicsItemFlag, flag);
+ QFETCH(int, expectedCount);
+
+ class Testee : public QGraphicsRectItem
+ {
+ public:
+ int touchBeginEventCount;
+
+ Testee()
+ : QGraphicsRectItem(0, 0, 100, 100)
+ , touchBeginEventCount(0)
+ {
+ setAcceptTouchEvents(true);
+ setFlag(QGraphicsItem::ItemIsFocusable, false);
+ }
+
+ bool sceneEvent(QEvent *ev)
+ {
+ if (ev->type() == QEvent::TouchBegin)
+ ++touchBeginEventCount;
+
+ return QGraphicsRectItem::sceneEvent(ev);
+ }
+ };
+
+ Testee *touchEventReceiver = new Testee;
+ QGraphicsItem *topMost = new QGraphicsRectItem(touchEventReceiver->boundingRect());
+
+ QGraphicsScene scene;
+ scene.addItem(topMost);
+ scene.addItem(touchEventReceiver);
+
+ topMost->setAcceptTouchEvents(true);
+ topMost->setZValue(FLT_MAX);
+ topMost->setFlag(QGraphicsItem::ItemIsFocusable, false);
+ topMost->setFlag(flag, true);
+
+ QGraphicsView view(&scene);
+ view.setSceneRect(touchEventReceiver->boundingRect());
+ view.show();
+ QTest::qWaitForWindowShown(&view);
+
+ QCOMPARE(touchEventReceiver->touchBeginEventCount, 0);
+
+ QTouchEvent::TouchPoint tp(0);
+ tp.setState(Qt::TouchPointPressed);
+ tp.setScenePos(view.sceneRect().center());
+ tp.setLastScenePos(view.sceneRect().center());
+
+ QList<QTouchEvent::TouchPoint> touchPoints;
+ touchPoints << tp;
+
+ sendMousePress(&scene, tp.scenePos());
+ QTouchEvent touchBegin(QEvent::TouchBegin, QTouchEvent::TouchScreen, Qt::NoModifier, Qt::TouchPointPressed, touchPoints);
+
+ qApp->sendEvent(&scene, &touchBegin);
+ QCOMPARE(touchEventReceiver->touchBeginEventCount, expectedCount);
+}
+
void tst_QGraphicsItem::deviceCoordinateCache_simpleRotations()
{
// Make sure we don't invalidate the cache when applying simple
@@ -11176,6 +11253,6 @@ void tst_QGraphicsItem::QTBUG_16374_crashInDestructor()
view.show();
QTest::qWaitForWindowShown(&view);
}
-
+
QTEST_MAIN(tst_QGraphicsItem)
#include "tst_qgraphicsitem.moc"
diff --git a/tests/auto/qgraphicslayout/tst_qgraphicslayout.cpp b/tests/auto/qgraphicslayout/tst_qgraphicslayout.cpp
index 979f03d..29ea074 100644
--- a/tests/auto/qgraphicslayout/tst_qgraphicslayout.cpp
+++ b/tests/auto/qgraphicslayout/tst_qgraphicslayout.cpp
@@ -62,6 +62,7 @@ private slots:
void compressLayoutRequest();
void automaticReparenting();
void verifyActivate();
+ void invalidate();
void constructors();
void alternativeLayoutItems();
void ownership();
@@ -95,6 +96,14 @@ void tst_QGraphicsLayout::sizeHints()
}
+enum FunctionType {
+ SetGeometry = 0,
+ Invalidate,
+ NumFunctionTypes
+};
+
+
+
class TestGraphicsWidget : public QGraphicsWidget {
public:
TestGraphicsWidget(QGraphicsWidget *parent = 0) : QGraphicsWidget(parent)
@@ -108,9 +117,28 @@ public:
int eventCount(QEvent::Type type) {
return m_eventCount.value(int(type));
}
+
void clearEventCount() {
m_eventCount.clear();
}
+
+ void clearCounters() {
+ m_eventCount.clear();
+ functionCount.clear();
+ }
+
+ void setGeometry(const QRectF &rect)
+ {
+ QGraphicsWidget::setGeometry(rect);
+ ++(functionCount[SetGeometry]);
+ }
+
+ void callUpdateGeometry()
+ {
+ // updateGeometry() is protected
+ QGraphicsWidget::updateGeometry();
+ }
+ QMap<FunctionType, int> functionCount;
private:
QMap<int, int> m_eventCount;
};
@@ -122,6 +150,8 @@ void tst_QGraphicsLayout::compressLayoutRequest()
TestGraphicsWidget *tw = new TestGraphicsWidget();
scene.addItem(tw);
view.show();
+
+ QTest::qWaitForWindowShown(&view);
QGraphicsLinearLayout *lout = new QGraphicsLinearLayout(tw);
for (int i = 0; i < 4; ++i) {
QGraphicsWidget *gw = new QGraphicsWidget(tw);
@@ -217,17 +247,27 @@ class TestLayout : public QGraphicsLinearLayout
TestLayout(QGraphicsLayoutItem *parent = 0)
: QGraphicsLinearLayout(parent)
{
- m_count = 0;
+ setContentsMargins(0,0,0,0);
+ setSpacing(0);
}
- void setGeometry(const QRectF &rect) {
-
- ++m_count;
+ void setGeometry(const QRectF &rect)
+ {
+ ++(functionCount[SetGeometry]);
QGraphicsLinearLayout::setGeometry(rect);
}
+ void invalidate()
+ {
+ ++(functionCount[Invalidate]);
+ QGraphicsLinearLayout::invalidate();
+ }
+
+ void clearCounters() {
+ functionCount.clear();
+ }
- int m_count;
+ QMap<FunctionType, int> functionCount;
};
void tst_QGraphicsLayout::verifyActivate()
@@ -242,13 +282,278 @@ void tst_QGraphicsLayout::verifyActivate()
lout->addItem(w);
window->setLayout(lout);
- QCOMPARE(lout->m_count, 0);
+ QCOMPARE(lout->functionCount[SetGeometry], 0);
window->setVisible(false);
- QCOMPARE(lout->m_count, 0);
+ QCOMPARE(lout->functionCount[SetGeometry], 0);
window->setVisible(true);
// on polish or the first time a widget is shown, the widget is resized.
- QCOMPARE(lout->m_count, 1);
+ QCOMPARE(lout->functionCount[SetGeometry], 1);
+
+}
+
+static void clearAllCounters(TestGraphicsWidget *widget)
+{
+ if (!widget)
+ return;
+ widget->clearCounters();
+ TestLayout *layout = static_cast<TestLayout *>(widget->layout());
+ if (layout) {
+ layout->clearCounters();
+ for (int i = layout->count() - 1; i >=0; --i) {
+ QGraphicsLayoutItem *item = layout->itemAt(i);
+ if (item->isLayout()) {
+ // ### Not used ATM
+ //TestLayout *lay = static_cast<TestLayout*>(static_cast<QGraphicsLayout*>(item));
+ //clearAllCounters(lay);
+ } else {
+ TestGraphicsWidget *wid = static_cast<TestGraphicsWidget *>(item);
+ clearAllCounters(wid);
+ }
+ }
+ }
+}
+
+static void activateAndReset(TestGraphicsWidget *widget)
+{
+ QApplication::sendPostedEvents();
+ QApplication::processEvents();
+ if (widget->layout())
+ widget->layout()->activate();
+ clearAllCounters(widget);
+}
+
+
+void tst_QGraphicsLayout::invalidate()
+{
+ QGraphicsLayout::setInstantInvalidatePropagation(true);
+ QGraphicsScene scene;
+ QGraphicsView view(&scene);
+
+ TestGraphicsWidget *a = new TestGraphicsWidget;
+ a->setData(0, QString("a"));
+ scene.addItem(a);
+ TestLayout *alay = new TestLayout(a);
+ TestGraphicsWidget *b = new TestGraphicsWidget;
+ b->setData(0, QString("b"));
+ alay->addItem(b);
+ TestLayout *blay = new TestLayout(b);
+ TestGraphicsWidget *e = new TestGraphicsWidget;
+ e->setData(0, QString("e"));
+ blay->addItem(e);
+
+
+ TestGraphicsWidget *c = new TestGraphicsWidget;
+ c->setData(0, QString("c"));
+ alay->addItem(c);
+ TestLayout *clay = new TestLayout(c);
+ TestGraphicsWidget *f = new TestGraphicsWidget;
+ f->setData(0, QString("f"));
+ clay->addItem(f);
+
+ TestGraphicsWidget *d = new TestGraphicsWidget;
+ d->setData(0, QString("d"));
+ alay->addItem(d);
+ TestLayout *dlay = new TestLayout(d);
+ TestGraphicsWidget *g = new TestGraphicsWidget;
+ g->setData(0, QString("g"));
+ dlay->addItem(g);
+
+ view.show();
+
+ {
+ clearAllCounters(a);
+
+ QCoreApplication::sendPostedEvents();
+ QCoreApplication::processEvents();
+
+ alay->activate();
+ QCOMPARE(alay->isActivated(), true);
+ QCOMPARE(blay->isActivated(), true);
+ QCOMPARE(clay->isActivated(), true);
+ QCOMPARE(dlay->isActivated(), true);
+ }
+
+ {
+ clearAllCounters(a);
+ e->callUpdateGeometry();
+ QCOMPARE(alay->isActivated(), false);
+ QCOMPARE(blay->isActivated(), false);
+ QCOMPARE(clay->isActivated(), true);
+ QCOMPARE(dlay->isActivated(), true);
+ QCOMPARE(a->eventCount(QEvent::LayoutRequest), 0);
+ QCOMPARE(b->eventCount(QEvent::LayoutRequest), 0);
+ QCOMPARE(c->eventCount(QEvent::LayoutRequest), 0);
+ QCOMPARE(d->eventCount(QEvent::LayoutRequest), 0);
+
+ // should only invalidate ascendants of e
+ QCOMPARE(blay->functionCount[Invalidate], 1);
+ QCOMPARE(alay->functionCount[Invalidate], 1);
+ // not siblings
+ QCOMPARE(clay->functionCount[Invalidate], 0);
+ QCOMPARE(dlay->functionCount[Invalidate], 0);
+
+ QApplication::sendPostedEvents();
+ QCOMPARE(a->eventCount(QEvent::LayoutRequest), 1);
+ QCOMPARE(b->eventCount(QEvent::LayoutRequest), 1);
+ QCOMPARE(c->eventCount(QEvent::LayoutRequest), 0);
+ QCOMPARE(d->eventCount(QEvent::LayoutRequest), 0);
+ }
+
+ {
+ activateAndReset(a);
+ f->callUpdateGeometry();
+ QCOMPARE(alay->isActivated(), false);
+ QCOMPARE(blay->isActivated(), true);
+ QCOMPARE(clay->isActivated(), false);
+ QCOMPARE(dlay->isActivated(), true);
+
+ QCoreApplication::sendPostedEvents();
+ QCOMPARE(a->eventCount(QEvent::LayoutRequest), 1);
+ QCOMPARE(b->eventCount(QEvent::LayoutRequest), 0);
+ QCOMPARE(c->eventCount(QEvent::LayoutRequest), 1);
+ QCOMPARE(d->eventCount(QEvent::LayoutRequest), 0);
+
+ QCOMPARE(a->functionCount[SetGeometry], 1);
+ QCOMPARE(alay->functionCount[SetGeometry], 1);
+
+ QCOMPARE(b->functionCount[SetGeometry], 1);
+ QCOMPARE(c->functionCount[SetGeometry], 1);
+ QCOMPARE(d->functionCount[SetGeometry], 1);
+ // Since nothing really changed, blay and dlay don't need
+ // to be resized.
+ QCOMPARE(blay->functionCount[SetGeometry], 0);
+ QCOMPARE(clay->functionCount[SetGeometry], 1);
+ QCOMPARE(dlay->functionCount[SetGeometry], 0);
+
+ QCOMPARE(f->functionCount[SetGeometry], 1);
+
+ QCOMPARE(a->size(), QSizeF(150, 50));
+ }
+
+ {
+ activateAndReset(a);
+ f->setPreferredSize(QSizeF(60,50));
+ QCOMPARE(alay->isActivated(), false);
+ QCOMPARE(blay->isActivated(), true);
+ QCOMPARE(clay->isActivated(), false);
+ QCOMPARE(dlay->isActivated(), true);
+
+ QCOMPARE(c->eventCount(QEvent::LayoutRequest), 0);
+ QCoreApplication::sendPostedEvents();
+ QCOMPARE(a->eventCount(QEvent::LayoutRequest), 1);
+ QCOMPARE(b->eventCount(QEvent::LayoutRequest), 0);
+ QCOMPARE(c->eventCount(QEvent::LayoutRequest), 1);
+ QCOMPARE(d->eventCount(QEvent::LayoutRequest), 0);
+
+ QCOMPARE(a->functionCount[SetGeometry], 1);
+ QCOMPARE(alay->functionCount[SetGeometry], 1);
+
+ QCOMPARE(b->functionCount[SetGeometry], 1);
+ QCOMPARE(c->functionCount[SetGeometry], 1);
+ QCOMPARE(d->functionCount[SetGeometry], 1);
+ // f actually got wider, need to rearrange its siblings
+ QCOMPARE(blay->functionCount[SetGeometry], 1);
+ QCOMPARE(clay->functionCount[SetGeometry], 1);
+ QCOMPARE(dlay->functionCount[SetGeometry], 1);
+
+ QCOMPARE(e->functionCount[SetGeometry], 1);
+ QCOMPARE(f->functionCount[SetGeometry], 1);
+ QCOMPARE(g->functionCount[SetGeometry], 1);
+
+ QVERIFY(e->size().width() < f->size().width());
+ QVERIFY(g->size().width() < f->size().width());
+ }
+
+ {
+ // resize f so much that it'll force a resize of the top widget
+ // this will currently generate two setGeometry() calls on the child layout
+ // of the top widget.
+ activateAndReset(a);
+ f->setPreferredSize(QSizeF());
+ f->setMinimumSize(QSizeF(200,50));
+ QCOMPARE(alay->isActivated(), false);
+ QCOMPARE(blay->isActivated(), true);
+ QCOMPARE(clay->isActivated(), false);
+ QCOMPARE(dlay->isActivated(), true);
+
+ QCOMPARE(c->eventCount(QEvent::LayoutRequest), 0);
+ QCoreApplication::sendPostedEvents();
+ QCOMPARE(a->eventCount(QEvent::LayoutRequest), 1);
+ QCOMPARE(b->eventCount(QEvent::LayoutRequest), 0);
+ QCOMPARE(c->eventCount(QEvent::LayoutRequest), 1);
+ QCOMPARE(d->eventCount(QEvent::LayoutRequest), 0);
+
+ QCOMPARE(a->functionCount[SetGeometry], 1);
+
+ /* well, ideally one call to setGeometry(), but it will currently
+ * get two calls to setGeometry():
+ * 1. The first LayoutRequest will call activate() - that will call
+ * setGeometry() on the layout. This geometry will be based on
+ * the widget geometry which is not correct at this moment.
+ * (it is still 150 wide)
+ * 2. Next, we check if the widget is top level, and then we call
+ * parentWidget->resize(parentWidget->size());
+ * This will be adjusted to be minimum 200 pixels wide.
+ * The new size will then be propagated down to the layout
+ *
+ */
+ QCOMPARE(alay->functionCount[SetGeometry], 2);
+
+ QCOMPARE(b->functionCount[SetGeometry], 2);
+ QCOMPARE(c->functionCount[SetGeometry], 2);
+ QCOMPARE(d->functionCount[SetGeometry], 2);
+ // f actually got wider, need to rearrange its siblings
+ QCOMPARE(blay->functionCount[SetGeometry], 1);
+ QCOMPARE(clay->functionCount[SetGeometry], 1);
+ QCOMPARE(dlay->functionCount[SetGeometry], 1);
+
+ QCOMPARE(e->functionCount[SetGeometry], 1);
+ QCOMPARE(f->functionCount[SetGeometry], 1);
+ QCOMPARE(g->functionCount[SetGeometry], 1);
+
+ QVERIFY(e->size().width() < f->size().width());
+ QVERIFY(g->size().width() < f->size().width());
+ }
+
+ {
+ f->setPreferredSize(QSizeF());
+ f->setMinimumSize(QSizeF());
+ a->adjustSize();
+ activateAndReset(a);
+ // update two different leaf widgets,
+ // eventCount and functionCount should never be >= 2
+ e->callUpdateGeometry();
+ g->callUpdateGeometry();
+ QCOMPARE(alay->isActivated(), false);
+ QCOMPARE(blay->isActivated(), false);
+ QCOMPARE(clay->isActivated(), true);
+ QCOMPARE(dlay->isActivated(), false);
+
+ QCoreApplication::sendPostedEvents();
+ QCOMPARE(a->eventCount(QEvent::LayoutRequest), 1);
+ QCOMPARE(b->eventCount(QEvent::LayoutRequest), 1);
+ QCOMPARE(c->eventCount(QEvent::LayoutRequest), 0);
+ QCOMPARE(d->eventCount(QEvent::LayoutRequest), 1);
+
+ QCOMPARE(a->functionCount[SetGeometry], 1);
+ QCOMPARE(alay->functionCount[SetGeometry], 1);
+
+ QCOMPARE(b->functionCount[SetGeometry], 1);
+ QCOMPARE(c->functionCount[SetGeometry], 1);
+ QCOMPARE(d->functionCount[SetGeometry], 1);
+ // f actually got wider, need to rearrange its siblings
+ QCOMPARE(blay->functionCount[SetGeometry], 1);
+ QCOMPARE(clay->functionCount[SetGeometry], 0);
+ QCOMPARE(dlay->functionCount[SetGeometry], 1);
+
+ QCOMPARE(e->functionCount[SetGeometry], 1);
+ QCOMPARE(f->functionCount[SetGeometry], 0);
+ QCOMPARE(g->functionCount[SetGeometry], 1);
+
+ }
+
+ QGraphicsLayout::setInstantInvalidatePropagation(false);
}
class Layout : public QGraphicsLayout
diff --git a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
index 62ba1b4..8f8ac67 100644
--- a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
+++ b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
@@ -94,6 +94,7 @@ private slots:
void itemSpacing();
void setStretchFactor_data();
void setStretchFactor();
+ void testStretch();
void defaultStretchFactors_data();
void defaultStretchFactors();
void sizeHint_data();
@@ -667,6 +668,10 @@ void tst_QGraphicsLinearLayout::invalidate()
layout.setContentsMargins(0, 0, 0, 0);
view.show();
widget->show();
+ //QTest::qWait(1000);
+ QTest::qWaitForWindowShown(&view);
+ qApp->processEvents();
+ layout.layoutRequest = 0;
layout.setContentsMargins(1, 2, 3, 4);
QApplication::sendPostedEvents(0, 0);
@@ -1130,6 +1135,41 @@ void tst_QGraphicsLinearLayout::setStretchFactor()
delete widget;
}
+void tst_QGraphicsLinearLayout::testStretch()
+{
+ QGraphicsScene scene;
+ QGraphicsView *view = new QGraphicsView(&scene);
+ QGraphicsWidget *form = new QGraphicsWidget(0, Qt::Window);
+
+ scene.addItem(form);
+ form->setMinimumSize(600, 600);
+ form->setMaximumSize(600, 600);
+ QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Horizontal, form);
+ QGraphicsWidget *w1 = new RectWidget;
+ w1->setPreferredSize(100,100);
+ w1->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ QGraphicsWidget *w2 = new RectWidget;
+ w2->setPreferredSize(200,200);
+ w2->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ layout->setSpacing(0);
+ layout->setContentsMargins(0, 0, 0, 0);
+ layout->addItem(w1);
+ layout->addStretch(2);
+ layout->addItem(w2);
+ QCOMPARE(layout->count(), 2);
+ QVERIFY(layout->itemAt(0) == w1);
+ QVERIFY(layout->itemAt(1) == w2);
+ layout->activate();
+
+ //view->setSceneRect(-50, -50, 800, 800);
+ //view->show();
+ //QTest::qWaitForWindowShown(view);
+ //QTest::qWait(5000);
+ QCOMPARE(form->geometry().size(), QSizeF(600,600));
+ QCOMPARE(w1->geometry(), QRectF(0, 0, 100, 100));
+ QCOMPARE(w2->geometry(), QRectF(400, 0, 200, 200));
+}
+
void tst_QGraphicsLinearLayout::defaultStretchFactors_data()
{
QTest::addColumn<Qt::Orientation>("orientation");
diff --git a/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp b/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp
index 9434a0b..903d7e7 100644
--- a/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp
+++ b/tests/auto/qgraphicstransform/tst_qgraphicstransform.cpp
@@ -225,6 +225,10 @@ void tst_QGraphicsTransform::rotation()
rotation.setAngle(90);
QCOMPARE(transform2D(rotation).map(QPointF(10, 10)), QPointF(10, 10));
QCOMPARE(transform2D(rotation).map(QPointF(20, 10)), QPointF(10, 20));
+
+ rotation.setOrigin(QVector3D(0, 0, 0));
+ rotation.setAngle(qQNaN());
+ QCOMPARE(transform2D(rotation).map(QPointF(20, 10)), QPointF(20, 10));
}
Q_DECLARE_METATYPE(Qt::Axis);
diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
index e8e2e23..887026c 100644
--- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
+++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
@@ -186,7 +186,6 @@ private slots:
void task250119_shortcutContext();
void QT_BUG_6544_tabFocusFirstUnsetWhenRemovingItems();
void QT_BUG_12056_tabFocusFirstUnsetWhenRemovingItems();
- void QT_BUG_13865_doublePaintWhenAddingASubItem();
};
@@ -3367,46 +3366,6 @@ void tst_QGraphicsWidget::QT_BUG_12056_tabFocusFirstUnsetWhenRemovingItems()
//This should not crash
}
-
-struct GreenWidget : public QGraphicsWidget
-{
- GreenWidget() : count(0)
- {
- }
-
- void paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * )
- {
- count++;
- painter->setPen(Qt::green);
- painter->drawRect(option->rect.adjusted(0,0,-1,-1));
- }
-
- int count;
-};
-
-void tst_QGraphicsWidget::QT_BUG_13865_doublePaintWhenAddingASubItem()
-{
- QGraphicsScene scene;
- QGraphicsView view(&scene);
- QGraphicsWidget *widget = new QGraphicsWidget;
- widget->resize(100, 100);
- scene.addItem(widget);
- QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(widget);
-
- view.show();
- QTest::qWaitForWindowShown(&view);
- QApplication::processEvents();
-
-
- GreenWidget *sub = new GreenWidget;
- layout->addItem(sub);
-
- QTest::qWait(100);
- QCOMPARE(sub->count, 1); //it should only be painted once
-
-}
-
-
QTEST_MAIN(tst_QGraphicsWidget)
#include "tst_qgraphicswidget.moc"
diff --git a/tests/auto/qimage/tst_qimage.cpp b/tests/auto/qimage/tst_qimage.cpp
index 558dfaa..6bb08b0 100644
--- a/tests/auto/qimage/tst_qimage.cpp
+++ b/tests/auto/qimage/tst_qimage.cpp
@@ -144,6 +144,7 @@ private slots:
void rgbSwapped();
void deepCopyWhenPaintingActive();
+ void scaled_QTBUG19157();
};
tst_QImage::tst_QImage()
@@ -1902,5 +1903,12 @@ void tst_QImage::deepCopyWhenPaintingActive()
QVERIFY(copy != image);
}
+void tst_QImage::scaled_QTBUG19157()
+{
+ QImage foo(5000, 1, QImage::Format_RGB32);
+ foo = foo.scaled(1024, 1024, Qt::KeepAspectRatio);
+ QVERIFY(!foo.isNull());
+}
+
QTEST_MAIN(tst_QImage)
#include "tst_qimage.moc"
diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp
index b6e69a0..ee03386 100644
--- a/tests/auto/qlistview/tst_qlistview.cpp
+++ b/tests/auto/qlistview/tst_qlistview.cpp
@@ -1893,7 +1893,8 @@ void tst_QListView::taskQTBUG_435_deselectOnViewportClick()
QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount());
- QPoint p = view.visualRect(model.index(model.rowCount() - 1)).center() + QPoint(0, 20);
+ const QRect itemRect = view.visualRect(model.index(model.rowCount() - 1));
+ QPoint p = view.visualRect(model.index(model.rowCount() - 1)).center() + QPoint(0, itemRect.height());
//first the left button
QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p);
QVERIFY(!view.selectionModel()->hasSelection());
diff --git a/tests/auto/qnetworkconfiguration/tst_qnetworkconfiguration.cpp b/tests/auto/qnetworkconfiguration/tst_qnetworkconfiguration.cpp
index adcfd93..c31eac7 100644
--- a/tests/auto/qnetworkconfiguration/tst_qnetworkconfiguration.cpp
+++ b/tests/auto/qnetworkconfiguration/tst_qnetworkconfiguration.cpp
@@ -52,7 +52,7 @@
*/
#include <QNetworkAccessManager>
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
#include <stdio.h>
#include <iapconf.h>
#endif
@@ -73,7 +73,7 @@ private slots:
void isRoamingAvailable();
private:
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
Maemo::IAPConf *iapconf;
Maemo::IAPConf *iapconf2;
Maemo::IAPConf *gprsiap;
@@ -85,7 +85,7 @@ private:
void tst_QNetworkConfiguration::initTestCase()
{
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
iapconf = new Maemo::IAPConf("007");
iapconf->setValue("ipv4_type", "AUTO");
iapconf->setValue("wlan_wepkey1", "connt");
@@ -158,7 +158,7 @@ void tst_QNetworkConfiguration::initTestCase()
void tst_QNetworkConfiguration::cleanupTestCase()
{
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
iapconf->clear();
delete iapconf;
iapconf2->clear();
diff --git a/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp b/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp
index 443fd18..c270eb8 100644
--- a/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp
+++ b/tests/auto/qnetworkconfigurationmanager/tst_qnetworkconfigurationmanager.cpp
@@ -45,7 +45,7 @@
#include <QtNetwork/qnetworkconfiguration.h>
#include <QtNetwork/qnetworkconfigmanager.h>
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
#include <stdio.h>
#include <iapconf.h>
#endif
@@ -62,12 +62,13 @@ public slots:
void cleanup();
private slots:
+ void usedInThread(); // this test must be first, or it will falsely pass
void allConfigurations();
void defaultConfiguration();
void configurationFromIdentifier();
private:
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
Maemo::IAPConf *iapconf;
Maemo::IAPConf *iapconf2;
Maemo::IAPConf *gprsiap;
@@ -79,7 +80,7 @@ private:
void tst_QNetworkConfigurationManager::initTestCase()
{
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
iapconf = new Maemo::IAPConf("007");
iapconf->setValue("ipv4_type", "AUTO");
iapconf->setValue("wlan_wepkey1", "connt");
@@ -153,7 +154,7 @@ void tst_QNetworkConfigurationManager::initTestCase()
void tst_QNetworkConfigurationManager::cleanupTestCase()
{
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
iapconf->clear();
delete iapconf;
iapconf2->clear();
@@ -329,6 +330,47 @@ void tst_QNetworkConfigurationManager::configurationFromIdentifier()
QVERIFY(!invalid.isValid());
}
+class QNCMTestThread : public QThread
+{
+protected:
+ virtual void run()
+ {
+ QNetworkConfigurationManager manager;
+ preScanConfigs = manager.allConfigurations();
+ QSignalSpy spy(&manager, SIGNAL(updateCompleted()));
+ manager.updateConfigurations(); //initiate scans
+ QTRY_VERIFY(spy.count() == 1); //wait for scan to complete
+ configs = manager.allConfigurations();
+ }
+public:
+ QList<QNetworkConfiguration> configs;
+ QList<QNetworkConfiguration> preScanConfigs;
+};
+
+// regression test for QTBUG-18795
+void tst_QNetworkConfigurationManager::usedInThread()
+{
+#if defined Q_OS_MAC && !defined (QT_NO_COREWLAN)
+ QSKIP("QTBUG-19070 Mac CoreWlan plugin is broken", SkipAll);
+#else
+ QNCMTestThread thread;
+ connect(&thread, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ thread.start();
+ QTestEventLoop::instance().enterLoop(100); //QTRY_VERIFY could take ~90 seconds to time out in the thread
+ QVERIFY(thread.isFinished());
+ qDebug() << "prescan:" << thread.preScanConfigs.count();
+ qDebug() << "postscan:" << thread.configs.count();
+
+ QNetworkConfigurationManager manager;
+ QList<QNetworkConfiguration> preScanConfigs = manager.allConfigurations();
+ QSignalSpy spy(&manager, SIGNAL(updateCompleted()));
+ manager.updateConfigurations(); //initiate scans
+ QTRY_VERIFY(spy.count() == 1); //wait for scan to complete
+ QList<QNetworkConfiguration> configs = manager.allConfigurations();
+ QCOMPARE(thread.configs, configs);
+ QCOMPARE(thread.preScanConfigs, preScanConfigs);
+#endif
+}
QTEST_MAIN(tst_QNetworkConfigurationManager)
#include "tst_qnetworkconfigurationmanager.moc"
diff --git a/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp b/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp
index 10fa7c6..85b1944 100644
--- a/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp
+++ b/tests/auto/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
@@ -41,14 +41,17 @@
#include <QtTest/QTest>
+#include <QtTest/QTestEventLoop>
#include <qcoreapplication.h>
#include <qdebug.h>
#include <qnetworkproxy.h>
+#include <QThread>
class tst_QNetworkProxyFactory : public QObject {
Q_OBJECT
private slots:
+ void systemProxyForQueryCalledFromThread();
void systemProxyForQuery() const;
private:
@@ -96,5 +99,31 @@ void tst_QNetworkProxyFactory::systemProxyForQuery() const
QFAIL("One or more system proxy lookup failures occurred.");
}
+class QSPFQThread : public QThread
+{
+protected:
+ virtual void run()
+ {
+ proxies = QNetworkProxyFactory::systemProxyForQuery(query);
+ }
+public:
+ QNetworkProxyQuery query;
+ QList<QNetworkProxy> proxies;
+};
+
+//regression test for QTBUG-18799
+void tst_QNetworkProxyFactory::systemProxyForQueryCalledFromThread()
+{
+ QUrl url(QLatin1String("http://qt.nokia.com"));
+ QNetworkProxyQuery query(url);
+ QSPFQThread thread;
+ thread.query = query;
+ connect(&thread, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ thread.start();
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(thread.isFinished());
+ QCOMPARE(thread.proxies, QNetworkProxyFactory::systemProxyForQuery(query));
+}
+
QTEST_MAIN(tst_QNetworkProxyFactory)
#include "tst_qnetworkproxyfactory.moc"
diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
index 81278b6..c1c0744 100644
--- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
@@ -329,6 +329,8 @@ private Q_SLOTS:
void qtbug15311doubleContentLength();
+ void qtbug18232gzipContentLengthZero();
+
void synchronousRequest_data();
void synchronousRequest();
void synchronousRequestSslFailure();
@@ -4537,7 +4539,9 @@ void tst_QNetworkReply::httpProxyCommands()
QNetworkProxy proxy(QNetworkProxy::HttpProxy, "127.0.0.1", proxyServer.serverPort());
manager.setProxy(proxy);
- QNetworkReplyPtr reply = manager.get(QNetworkRequest(url));
+ QNetworkRequest request(url);
+ request.setRawHeader("User-Agent", "QNetworkReplyAutoTest/1.0");
+ QNetworkReplyPtr reply = manager.get(request);
manager.setProxy(QNetworkProxy());
// wait for the finished signal
@@ -4555,6 +4559,12 @@ void tst_QNetworkReply::httpProxyCommands()
QString receivedHeader = proxyServer.receivedData.left(expectedCommand.length());
QCOMPARE(receivedHeader, expectedCommand);
+
+ //QTBUG-17223 - make sure the user agent from the request is sent to proxy server even for CONNECT
+ int uapos = proxyServer.receivedData.indexOf("User-Agent");
+ int uaend = proxyServer.receivedData.indexOf("\r\n", uapos);
+ QByteArray uaheader = proxyServer.receivedData.mid(uapos, uaend - uapos);
+ QCOMPARE(uaheader, QByteArray("User-Agent: QNetworkReplyAutoTest/1.0"));
}
class ProxyChangeHelper : public QObject {
@@ -5217,6 +5227,25 @@ void tst_QNetworkReply::qtbug15311doubleContentLength()
QCOMPARE(reply->readAll(), QByteArray("ABC"));
}
+void tst_QNetworkReply::qtbug18232gzipContentLengthZero()
+{
+ QByteArray response("HTTP/1.0 200 OK\r\nContent-Encoding: gzip\r\nContent-Length: 0\r\n\r\n");
+ MiniHttpServer server(response);
+ server.doClose = true;
+
+ QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+ QNetworkReplyPtr reply = manager.get(request);
+
+ connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ QTestEventLoop::instance().enterLoop(10);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY(reply->isFinished());
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->size(), qint64(0));
+ QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), qint64(0));
+ QCOMPARE(reply->readAll(), QByteArray());
+}
+
void tst_QNetworkReply::synchronousRequest_data()
{
QTest::addColumn<QUrl>("url");
diff --git a/tests/auto/qnetworksession/test/tst_qnetworksession.cpp b/tests/auto/qnetworksession/test/tst_qnetworksession.cpp
index 3315836..13cedda 100644
--- a/tests/auto/qnetworksession/test/tst_qnetworksession.cpp
+++ b/tests/auto/qnetworksession/test/tst_qnetworksession.cpp
@@ -48,7 +48,7 @@
#include <QtNetwork/qnetworkconfigmanager.h>
#include <QtNetwork/qnetworksession.h>
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
#include <stdio.h>
#include <iapconf.h>
#endif
@@ -105,7 +105,7 @@ private:
int inProcessSessionManagementCount;
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
Maemo::IAPConf *iapconf;
Maemo::IAPConf *iapconf2;
Maemo::IAPConf *gprsiap;
@@ -140,7 +140,7 @@ void tst_QNetworkSession::initTestCase()
testsToRun["userChoiceSession"] = true;
testsToRun["sessionOpenCloseStop"] = true;
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
iapconf = new Maemo::IAPConf("007");
iapconf->setValue("ipv4_type", "AUTO");
iapconf->setValue("wlan_wepkey1", "connt");
@@ -226,7 +226,7 @@ void tst_QNetworkSession::cleanupTestCase()
"inProcessSessionManagement()");
}
-#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD)
+#if defined(Q_OS_UNIX) && !defined(QT_NO_ICD) && !defined (Q_OS_SYMBIAN)
iapconf->clear();
delete iapconf;
iapconf2->clear();
diff --git a/tests/auto/qpainterpath/tst_qpainterpath.cpp b/tests/auto/qpainterpath/tst_qpainterpath.cpp
index bc3b5d9..e9f09ea 100644
--- a/tests/auto/qpainterpath/tst_qpainterpath.cpp
+++ b/tests/auto/qpainterpath/tst_qpainterpath.cpp
@@ -101,6 +101,8 @@ private slots:
void testToFillPolygons();
+ void testNaNandInfinites();
+
void closing();
void operators_data();
@@ -1159,6 +1161,50 @@ void tst_QPainterPath::testToFillPolygons()
QCOMPARE(polygons.first().count(QPointF(70, 50)), 0);
}
+void tst_QPainterPath::testNaNandInfinites()
+{
+ QPainterPath path1;
+ QPainterPath path2 = path1;
+
+ QPointF p1 = QPointF(qSNaN(), 1);
+ QPointF p2 = QPointF(qQNaN(), 1);
+ QPointF p3 = QPointF(qQNaN(), 1);
+ QPointF pInf = QPointF(qInf(), 1);
+
+ // all these operations with NaN/Inf should be ignored
+ // can't test operator>> reliably, as we can't create a path with NaN to << later
+
+ path1.moveTo(p1);
+ path1.moveTo(qSNaN(), qQNaN());
+ path1.moveTo(pInf);
+
+ path1.lineTo(p1);
+ path1.lineTo(qSNaN(), qQNaN());
+ path1.lineTo(pInf);
+
+ path1.cubicTo(p1, p2, p3);
+ path1.cubicTo(p1, QPointF(1, 1), QPointF(2, 2));
+ path1.cubicTo(pInf, QPointF(10, 10), QPointF(5, 1));
+
+ path1.quadTo(p1, p2);
+ path1.quadTo(QPointF(1, 1), p3);
+ path1.quadTo(QPointF(1, 1), pInf);
+
+ path1.arcTo(QRectF(p1, p2), 5, 5);
+ path1.arcTo(QRectF(pInf, QPointF(1, 1)), 5, 5);
+
+ path1.addRect(QRectF(p1, p2));
+ path1.addRect(QRectF(pInf, QPointF(1, 1)));
+
+ path1.addEllipse(QRectF(p1, p2));
+ path1.addEllipse(QRectF(pInf, QPointF(1, 1)));
+
+ QCOMPARE(path1, path2);
+
+ path1.lineTo(QPointF(1, 1));
+ QVERIFY(path1 != path2);
+}
+
void tst_QPainterPath::connectPathDuplicatePoint()
{
QPainterPath a;
diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp
index 0b5c30b..12d31e3 100644
--- a/tests/auto/qpixmap/tst_qpixmap.cpp
+++ b/tests/auto/qpixmap/tst_qpixmap.cpp
@@ -194,6 +194,9 @@ private slots:
#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_OPENVG)
void vgImageReadBack();
#endif
+
+ void drawPixmapWhilePainterOpen();
+ void scaled_QTBUG19157();
};
static bool lenientCompare(const QPixmap &actual, const QPixmap &expected)
@@ -1881,5 +1884,71 @@ void tst_QPixmap::vgImageReadBack()
}
#endif // Symbian & OpenVG
+class PixmapWidget : public QWidget
+{
+public:
+ PixmapWidget(QPixmap &pixmap) : QWidget(0), m_pixmap(pixmap)
+ {
+ resize(pixmap.width(), pixmap.height());
+ }
+
+protected:
+ void paintEvent(QPaintEvent *)
+ {
+ QPainter p(this);
+ p.drawPixmap(0, 0, m_pixmap);
+ }
+
+private:
+ QPixmap &m_pixmap;
+};
+
+void tst_QPixmap::drawPixmapWhilePainterOpen()
+{
+ const int delay = 1000;
+ const int size = 100;
+ const QColor colors[] = { Qt::red, Qt::blue, Qt::green };
+
+ QPixmap pix(size, size);
+ pix.fill(colors[0]);
+
+ PixmapWidget w(pix);
+ w.show();
+ QTest::qWaitForWindowShown(&w);
+ QTest::qWait(delay);
+
+ QPainter p(&pix);
+ p.fillRect(0, 0, size, size, colors[1]);
+ w.update();
+ QTest::qWait(delay);
+
+ p.fillRect(0, 0, size, size, colors[2]);
+ w.update();
+ QTest::qWait(delay);
+
+ QPixmap actual = QPixmap::grabWindow(w.effectiveWinId(), 0, 0, size, size);
+
+ // If we captured some bogus content with grabWindow(), the comparison makes no sense
+ // because it cannot prove the feature is broken.
+ QPixmap guard(size, size);
+ bool matchesColors = false;
+ for (size_t i = 0; i < sizeof(colors) / sizeof(const QColor); ++i) {
+ guard.fill(colors[i]);
+ matchesColors |= lenientCompare(actual, guard);
+ }
+ if (!matchesColors) {
+ QSKIP("Skipping verification due to grabWindow() issue", SkipSingle);
+ } else {
+ QVERIFY(lenientCompare(actual, pix));
+ }
+}
+
+void tst_QPixmap::scaled_QTBUG19157()
+{
+ QPixmap foo(5000, 1);
+ foo = foo.scaled(1024, 1024, Qt::KeepAspectRatio);
+ QVERIFY(!foo.isNull());
+}
+
QTEST_MAIN(tst_QPixmap)
#include "tst_qpixmap.moc"
diff --git a/tests/auto/qstyle/tst_qstyle.cpp b/tests/auto/qstyle/tst_qstyle.cpp
index ad5d7ff..5c319f0 100644
--- a/tests/auto/qstyle/tst_qstyle.cpp
+++ b/tests/auto/qstyle/tst_qstyle.cpp
@@ -272,6 +272,18 @@ void tst_QStyle::drawItemPixmap()
QPixmap p(QString(SRCDIR) + "/task_25863.png", "PNG");
QPixmap actualPix = QPixmap::grabWidget(testWidget);
+
+#ifdef Q_OS_SYMBIAN
+ // QPixmap cannot be assumed to be exactly same, unless it is created from exactly same content.
+ // In Symbian, pixmap format might get "optimized" depending on how QPixmap is created.
+ // Therefore, force the content to specific format and compare QImages.
+ // Then re-create the QPixmaps and compare those.
+ QImage i1 = p.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied);
+ p = QPixmap::fromImage(i1);
+ QImage i2 = actualPix.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied);
+ actualPix = QPixmap::fromImage(i2);
+ QVERIFY(i1 == i2);
+#endif
QVERIFY(pixmapsAreEqual(&actualPix,&p));
testWidget->hide();
}
diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp
index bb8b8b4..a851d03 100644
--- a/tests/auto/qwidget/tst_qwidget.cpp
+++ b/tests/auto/qwidget/tst_qwidget.cpp
@@ -345,6 +345,7 @@ private slots:
void immediateRepaintAfterInvalidateBuffer();
#endif
void effectiveWinId();
+ void effectiveWinId2();
void customDpi();
void customDpiProperty();
@@ -8522,6 +8523,30 @@ void tst_QWidget::effectiveWinId()
QVERIFY(child.effectiveWinId());
}
+void tst_QWidget::effectiveWinId2()
+{
+ QWidget parent;
+
+ class MyWidget : public QWidget {
+ bool event(QEvent *e)
+ {
+ if (e->type() == QEvent::WinIdChange) {
+ // Shouldn't crash.
+ effectiveWinId();
+ }
+
+ return QWidget::event(e);
+ }
+ };
+
+ MyWidget child;
+ child.setParent(&parent);
+ parent.show();
+
+ child.setParent(0);
+ child.setParent(&parent);
+}
+
class CustomWidget : public QWidget
{
public:
diff --git a/tests/benchmarks/gui/graphicsview/graphicsview.pro b/tests/benchmarks/gui/graphicsview/graphicsview.pro
index e4fed19..1509466 100644
--- a/tests/benchmarks/gui/graphicsview/graphicsview.pro
+++ b/tests/benchmarks/gui/graphicsview/graphicsview.pro
@@ -3,6 +3,7 @@ SUBDIRS = \
functional \
qgraphicsanchorlayout \
qgraphicsitem \
+ qgraphicslayout \
qgraphicsscene \
qgraphicsview \
qgraphicswidget
diff --git a/tests/benchmarks/gui/graphicsview/qgraphicslayout/qgraphicslayout.pro b/tests/benchmarks/gui/graphicsview/qgraphicslayout/qgraphicslayout.pro
new file mode 100644
index 0000000..19e2979
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/qgraphicslayout/qgraphicslayout.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+TEMPLATE = app
+TARGET = tst_bench_qgraphicslayout
+
+SOURCES += tst_qgraphicslayout.cpp
+
diff --git a/tests/benchmarks/gui/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp b/tests/benchmarks/gui/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp
new file mode 100644
index 0000000..4bdcfb3
--- /dev/null
+++ b/tests/benchmarks/gui/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp
@@ -0,0 +1,153 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QtGui/qgraphicslayout.h>
+#include <QtGui/qgraphicslinearlayout.h>
+#include <QtGui/qgraphicswidget.h>
+#include <QtGui/qgraphicsview.h>
+
+class tst_QGraphicsLayout : public QObject
+{
+ Q_OBJECT
+public:
+ tst_QGraphicsLayout() {}
+ ~tst_QGraphicsLayout() {}
+
+private slots:
+ void invalidate();
+};
+
+
+class RectWidget : public QGraphicsWidget
+{
+public:
+ RectWidget(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0) : QGraphicsWidget(parent, wFlags), setGeometryCalls(0) {}
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+ {
+ Q_UNUSED(option);
+ Q_UNUSED(widget);
+ painter->drawRoundRect(rect());
+ painter->drawLine(rect().topLeft(), rect().bottomRight());
+ painter->drawLine(rect().bottomLeft(), rect().topRight());
+ }
+
+ void setGeometry(const QRectF &rect)
+ {
+ //qDebug() << "setGeometry():" << this->data(0).toString();
+ setGeometryCalls->insert(this, rect);
+ QGraphicsWidget::setGeometry(rect);
+ }
+
+ void callUpdateGeometry() {
+ QGraphicsWidget::updateGeometry();
+ }
+
+ QMap<RectWidget*, QRectF> *setGeometryCalls;
+};
+
+/**
+ * Test to see how much time is needed to resize all widgets in a
+ * layout-widget-layout-widget-.... hierarchy from the point where a
+ * leaf widget changes its size hint. (updateGeometry() is called).
+ *
+ * If you run the test for 4.7 you'll get some really high numbers, but
+ * that's because they also include painting (and possible processing of
+ * some other events).
+ */
+void tst_QGraphicsLayout::invalidate()
+{
+ QGraphicsLayout::setInstantInvalidatePropagation(true);
+ QGraphicsScene scene;
+ QGraphicsView *view = new QGraphicsView(&scene);
+ QMap<RectWidget*, QRectF> setGeometryCalls;
+
+ RectWidget *window = new RectWidget(0, Qt::Window);
+ window->setGeometryCalls = &setGeometryCalls;
+ window->setData(0, QString(QChar('a')));
+
+ scene.addItem(window);
+ RectWidget *leaf = 0;
+ const int depth = 100;
+ RectWidget *parent = window;
+ for (int i = 1; i < depth; ++i) {
+ QGraphicsLinearLayout *l = new QGraphicsLinearLayout(parent);
+ l->setContentsMargins(0,0,0,0);
+ RectWidget *child = new RectWidget;
+ child->setData(0, QString(QChar('a' + i)));
+ child->setGeometryCalls = &setGeometryCalls;
+ l->addItem(child);
+ parent = child;
+ }
+ leaf = parent;
+ leaf->setMinimumSize(QSizeF(1,1));
+
+ view->show();
+
+ QTest::qWaitForWindowShown(view);
+
+ // ...then measure...
+
+ int pass = 1;
+
+ // should be as small as possible, to reduce overhead of painting
+ QSizeF size(1, 1);
+ setGeometryCalls.clear();
+ QBENCHMARK {
+ leaf->setMinimumSize(size);
+ leaf->setMaximumSize(size);
+ while (setGeometryCalls.count() < depth) {
+ QApplication::sendPostedEvents();
+ }
+ // force a resize on each widget, this will ensure
+ // that each iteration will resize all 50 widgets
+ int w = int(size.width());
+ w^=2;
+ size.setWidth(w);
+ }
+ delete view;
+ QGraphicsLayout::setInstantInvalidatePropagation(false);
+}
+
+QTEST_MAIN(tst_QGraphicsLayout)
+
+#include "tst_qgraphicslayout.moc"
diff --git a/tests/manual/qgraphicslayout/flicker/flicker.pro b/tests/manual/qgraphicslayout/flicker/flicker.pro
new file mode 100644
index 0000000..323a30f
--- /dev/null
+++ b/tests/manual/qgraphicslayout/flicker/flicker.pro
@@ -0,0 +1,8 @@
+TEMPLATE = app
+TARGET =
+DEPENDPATH += .
+INCLUDEPATH += .
+
+# Input
+HEADERS += window.h
+SOURCES += main.cpp window.cpp
diff --git a/tests/manual/qgraphicslayout/flicker/main.cpp b/tests/manual/qgraphicslayout/flicker/main.cpp
new file mode 100644
index 0000000..7e75c2b
--- /dev/null
+++ b/tests/manual/qgraphicslayout/flicker/main.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+#include <windows.h>
+#include "window.h"
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+ Window *window = new Window();
+ window->resize(800, 600);
+
+ window->show();
+
+ return app.exec();
+
+}
diff --git a/tests/manual/qgraphicslayout/flicker/window.cpp b/tests/manual/qgraphicslayout/flicker/window.cpp
new file mode 100644
index 0000000..ee4db3f
--- /dev/null
+++ b/tests/manual/qgraphicslayout/flicker/window.cpp
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "window.h"
+
+void SlowWidget::setGeometry(const QRectF &rect)
+{
+ bool reiterate = false;
+ Statistics &stats = *m_stats;
+ if (stats.relayoutClicked) {
+ ++(stats.setGeometryTracker[this]);
+ ++stats.setGeometryCount;
+ qDebug() << "setGeometryCount:" << stats.setGeometryCount;
+ if (stats.setGeometryTracker.count() == m_window->m_depthSpinBox->value()) {
+ ++stats.currentBenchmarkIteration;
+ qDebug() << "currentBenchmarkIteration:" << stats.currentBenchmarkIteration;
+ if (stats.currentBenchmarkIteration == m_window->m_benchmarkIterationsSpinBox->value()) {
+ if (stats.output)
+ stats.output->setText(tr("DONE. Elapsed: %1, setGeometryCount: %2").arg(stats.time.elapsed()).arg(stats.setGeometryCount));
+ } else {
+ reiterate = true;
+ }
+ stats.setGeometryTracker.clear();
+
+ }
+ }
+
+ QGraphicsWidget::setGeometry(rect);
+
+ if (reiterate) {
+ m_window->doAgain();
+ //QTimer::singleShot(0, m_window, SLOT(doAgain()));
+ }
+}
+
diff --git a/tests/manual/qgraphicslayout/flicker/window.h b/tests/manual/qgraphicslayout/flicker/window.h
new file mode 100644
index 0000000..b4c42c0
--- /dev/null
+++ b/tests/manual/qgraphicslayout/flicker/window.h
@@ -0,0 +1,284 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, 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.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+
+#include <QtGui>
+
+static void qSleep(int msec)
+{
+
+ struct Thread : public QThread
+ {
+ static void wait(int msec)
+ {
+ QThread::msleep(msec);
+ }
+ };
+ Thread::wait(msec);
+}
+
+struct Statistics {
+ Statistics() : output(0),
+ setGeometryCount(0), currentBenchmarkIteration(0), relayoutClicked(false), sleepMsecs(0)
+ {
+ }
+ QMap<QGraphicsWidget*, int> setGeometryTracker;
+ QTime time;
+ int setGeometryCount;
+ int sleepMsecs;
+ QLabel *output;
+ void sleep()
+ {
+ qSleep(sleepMsecs);
+ }
+ int currentBenchmarkIteration;
+ bool relayoutClicked;
+
+};
+
+
+class Window;
+
+class SlowWidget : public QGraphicsWidget {
+public:
+ SlowWidget(QGraphicsWidget *w = 0, Qt::WindowFlags wFlags = 0) : QGraphicsWidget(w, wFlags)
+ {
+ m_window = 0;
+ }
+
+ void setStats(Statistics *stats)
+ {
+ m_stats = stats;
+ }
+
+ void setWindow(Window *window)
+ {
+ m_window = window;
+ }
+
+ void setGeometry(const QRectF &rect);
+
+ bool event(QEvent *e)
+ {
+ if (e->type() == QEvent::LayoutRequest) {
+ if (m_stats->sleepMsecs > 0) {
+ m_stats->sleep();
+ qDebug("sleep %d ms\n", m_stats->sleepMsecs);
+ }
+ }
+ return QGraphicsWidget::event(e);
+ }
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+ {
+ Q_UNUSED(option);
+ Q_UNUSED(widget);
+ painter->setBrush(m_brush);
+ painter->drawRoundRect(rect());
+ painter->drawLine(rect().topLeft(), rect().bottomRight());
+ painter->drawLine(rect().bottomLeft(), rect().topRight());
+ }
+
+ void setBrush(const QBrush &brush)
+ {
+ m_brush = brush;
+ }
+private:
+ QBrush m_brush;
+ Statistics *m_stats;
+ Window *m_window;
+};
+
+class Window : public QWidget {
+ Q_OBJECT
+public:
+ Window() : QWidget()
+ {
+ QGraphicsView *m_view = new QGraphicsView(&scene);
+
+ m_window = 0;
+ m_leaf = 0;
+
+ m_button = new QPushButton(tr("Relayout"));
+ m_button->setObjectName("button");
+
+ m_sleepLabel = new QLabel(tr("Sleep:"));
+ m_sleepSpinBox = new QSpinBox;
+ m_sleepSpinBox->setRange(0, 1000);
+ m_sleepSpinBox->setSingleStep(10);
+
+ m_depthLabel = new QLabel(tr("Depth:"));
+ m_depthSpinBox = new QSpinBox;
+ m_depthSpinBox->setObjectName("depthSpinBox");
+ m_depthSpinBox->setRange(1, 200);
+ m_depthSpinBox->setSingleStep(5);
+
+ m_benchmarkIterationsLabel = new QLabel(tr("Benchmark iterations"));
+ m_benchmarkIterationsSpinBox = new QSpinBox;
+ m_benchmarkIterationsSpinBox->setObjectName("benchmarkIterationsSpinBox");
+ m_benchmarkIterationsSpinBox->setRange(1, 1000);
+ m_benchmarkIterationsSpinBox->setValue(41);
+ m_benchmarkIterationsSpinBox->setSingleStep(10);
+
+ m_instantCheckBox = new QCheckBox(tr("Instant propagation"));
+ m_instantCheckBox->setObjectName("instantPropagationCheckbox");
+ QGraphicsLayout::setInstantInvalidatePropagation(true);
+ m_instantCheckBox->setChecked(QGraphicsLayout::instantInvalidatePropagation());
+
+ m_resultLabel = new QLabel(tr("Press relayout to start test"));
+
+ QHBoxLayout *hbox = new QHBoxLayout;
+ hbox->addWidget(m_sleepLabel);
+ hbox->addWidget(m_sleepSpinBox);
+ hbox->addWidget(m_depthLabel);
+ hbox->addWidget(m_depthSpinBox);
+ hbox->addWidget(m_benchmarkIterationsLabel);
+ hbox->addWidget(m_benchmarkIterationsSpinBox);
+ hbox->addWidget(m_instantCheckBox);
+ hbox->addWidget(m_resultLabel);
+ hbox->addStretch();
+ hbox->addWidget(m_button);
+
+ QVBoxLayout *vbox = new QVBoxLayout;
+ vbox->addWidget(m_view);
+ vbox->addLayout(hbox);
+ setLayout(vbox);
+
+ metaObject()->connectSlotsByName(this);
+
+ m_depthSpinBox->setValue(20); // triggers purposedly on_depthSpinBox_valueChanged
+ }
+
+private slots:
+ void on_depthSpinBox_valueChanged(int value)
+ {
+ m_stats.relayoutClicked = false;
+ if (m_window) {
+ QApplication::processEvents();
+ delete m_window;
+ }
+ m_window = new SlowWidget(0, Qt::Window);
+ m_window->setStats(&m_stats);
+ m_window->setWindow(this);
+ QColor col(Qt::black);
+ m_window->setBrush(col);
+ scene.addItem(m_window);
+ m_leaf = 0;
+ const int depth = value;
+ SlowWidget *parent = m_window;
+ for (int i = 1; i < depth; ++i) {
+ QGraphicsLinearLayout *l = new QGraphicsLinearLayout(parent);
+ l->setContentsMargins(2,2,2,2);
+ SlowWidget *child = new SlowWidget;
+ QColor col;
+ col.setHsl(0, 0, 255*i/(depth - 1));
+ child->setBrush(col);
+ child->setStats(&m_stats);
+ child->setWindow(this);
+ l->addItem(child);
+ parent = child;
+ }
+ m_leaf = parent;
+ }
+
+ void on_button_clicked(bool /*check = false*/)
+ {
+ m_stats.relayoutClicked = true;
+ if (m_leaf) {
+ QSizeF sz = m_leaf->size();
+ int w = int(sz.width());
+ w^=16;
+ sz = QSizeF(w,w);
+ m_stats.output = m_resultLabel;
+ m_stats.output->setText(QString("wait..."));
+ m_stats.setGeometryCount = 0;
+ m_stats.setGeometryTracker.clear();
+ m_stats.sleepMsecs = m_sleepSpinBox->value();
+ m_stats.time.start();
+ m_stats.currentBenchmarkIteration = 0;
+ m_leaf->setMinimumSize(sz);
+ m_leaf->setMaximumSize(sz);
+ }
+ }
+
+ void on_instantPropagationCheckbox_toggled(bool checked)
+ {
+ QGraphicsLayout::setInstantInvalidatePropagation(checked);
+ }
+
+public slots:
+ void doAgain()
+ {
+ if (m_leaf) {
+ QSizeF sz = m_leaf->size();
+ int w = int(sz.width());
+ w^=16;
+ sz = QSizeF(w,w);
+ m_leaf->setMinimumSize(sz);
+ m_leaf->setMaximumSize(sz);
+ }
+ }
+
+private:
+public:
+ QGraphicsScene scene;
+ QGraphicsView *m_view;
+ QPushButton *m_button;
+ QLabel *m_sleepLabel;
+ QSpinBox *m_sleepSpinBox;
+ QLabel *m_depthLabel;
+ QSpinBox *m_depthSpinBox;
+ QLabel *m_benchmarkIterationsLabel;
+ QSpinBox *m_benchmarkIterationsSpinBox;
+ QCheckBox *m_instantCheckBox;
+ QLabel *m_resultLabel;
+ QGraphicsWidget *m_leaf;
+ SlowWidget *m_window;
+ Statistics m_stats;
+
+
+};
+
+
+#endif //WINDOW_H
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 1b77058..be44646 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -752,7 +752,7 @@ void Configure::parseCmdLine()
} else if ( configCmdLine.at(i) == "es2" ) {
dictionary[ "OPENGL_ES_2" ] = "yes";
} else if ( configCmdLine.at(i) == "desktop" ) {
- dictionary[ "OPENGL_ES_2" ] = "yes";
+ // OPENGL=yes suffices
} else {
cout << "Argument passed to -opengl option is not valid." << endl;
dictionary[ "DONE" ] = "error";
diff --git a/tools/linguist/shared/qm.cpp b/tools/linguist/shared/qm.cpp
index 7b30643..0b4bd9e 100644
--- a/tools/linguist/shared/qm.cpp
+++ b/tools/linguist/shared/qm.cpp
@@ -723,7 +723,7 @@ static bool saveQM(const Translator &translator, QIODevice &dev, ConversionData
continue;
}
if (typ == TranslatorMessage::Unfinished) {
- if (!cd.m_idBased && msg.translation().isEmpty()) {
+ if (msg.translation().isEmpty() && !cd.m_idBased && cd.m_unTrPrefix.isEmpty()) {
++untranslated;
continue;
} else {
diff --git a/tools/linguist/shared/ts.cpp b/tools/linguist/shared/ts.cpp
index 85be5c6..4523bc5 100644
--- a/tools/linguist/shared/ts.cpp
+++ b/tools/linguist/shared/ts.cpp
@@ -264,6 +264,7 @@ bool TSReader::read(Translator &translator)
//qDebug() << "TS " << attributes();
QHash<QString, int> currentLine;
QString currentFile;
+ bool maybeRelative = false, maybeAbsolute = false;
QXmlStreamAttributes atts = attributes();
//QString version = atts.value(strversion).toString();
@@ -342,10 +343,12 @@ bool TSReader::read(Translator &translator)
msg.setTranslatorComment(readContents());
} else if (elementStarts(strlocation)) {
// <location/>
+ maybeAbsolute = true;
QXmlStreamAttributes atts = attributes();
QString fileName = atts.value(strfilename).toString();
if (fileName.isEmpty()) {
fileName = currentMsgFile;
+ maybeRelative = true;
} else {
if (refs.isEmpty())
currentFile = fileName;
@@ -353,7 +356,6 @@ bool TSReader::read(Translator &translator)
}
const QString lin = atts.value(strline).toString();
if (lin.isEmpty()) {
- translator.setLocationsType(Translator::RelativeLocations);
refs.append(TranslatorMessage::Reference(fileName, -1));
} else {
bool bOK;
@@ -361,9 +363,7 @@ bool TSReader::read(Translator &translator)
if (bOK) {
if (lin.startsWith(QLatin1Char('+')) || lin.startsWith(QLatin1Char('-'))) {
lineNo = (currentLine[fileName] += lineNo);
- translator.setLocationsType(Translator::RelativeLocations);
- } else {
- translator.setLocationsType(Translator::AbsoluteLocations);
+ maybeRelative = true;
}
refs.append(TranslatorMessage::Reference(fileName, lineNo));
}
@@ -422,6 +422,9 @@ bool TSReader::read(Translator &translator)
} else {
handleError();
}
+ translator.setLocationsType(maybeRelative ? Translator::RelativeLocations :
+ maybeAbsolute ? Translator::AbsoluteLocations :
+ Translator::NoLocations);
} // </TS>
} else {
handleError();
@@ -727,7 +730,6 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd, in
bool loadTS(Translator &translator, QIODevice &dev, ConversionData &cd)
{
- translator.setLocationsType(Translator::NoLocations);
TSReader reader(dev, cd);
return reader.read(translator);
}
diff --git a/tools/qdoc3/qdoc3.pro b/tools/qdoc3/qdoc3.pro
index 3596349..bb5ff83 100644
--- a/tools/qdoc3/qdoc3.pro
+++ b/tools/qdoc3/qdoc3.pro
@@ -95,7 +95,7 @@ include(declarativeparser/parser.pri)
qtPrepareTool(QDOC, qdoc3)
qtPrepareTool(QHELPGENERATOR, qhelpgenerator)
-$$unixstyle {
+equals(QMAKE_DIR_SEP, /) {
QDOC = QT_BUILD_TREE=$$QT_BUILD_TREE QT_SOURCE_TREE=$$QT_SOURCE_TREE $$QDOC
} else {
QDOC = set QT_BUILD_TREE=$$QT_BUILD_TREE&& set QT_SOURCE_TREE=$$QT_SOURCE_TREE&& $$QDOC
diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp
index 6ca6bfb..b2c7f4f 100644
--- a/tools/qml/main.cpp
+++ b/tools/qml/main.cpp
@@ -51,6 +51,7 @@
#include <QMessageBox>
#include <QAtomicInt>
#include "qdeclarativetester.h"
+#include <private/qdeclarativedebughelper_p.h>
QT_USE_NAMESPACE
@@ -538,6 +539,8 @@ int main(int argc, char ** argv)
QApplication::setGraphicsSystem("raster");
#endif
+ QDeclarativeDebugHelper::enableDebugging();
+
Application app(argc, argv);
app.setApplicationName("QtQmlViewer");
app.setOrganizationName("Nokia");
diff --git a/tools/qml/qml.pro b/tools/qml/qml.pro
index b1d56ea..84ebba8 100644
--- a/tools/qml/qml.pro
+++ b/tools/qml/qml.pro
@@ -39,7 +39,7 @@ symbian {
TARGET.CAPABILITY = NetworkServices ReadUserData
# Deploy plugin for remote debugging
- qmldebuggingplugin.sources = $$QT_BUILD_TREE/plugins/qmltooling/tcpserver$${QT_LIBINFIX}.dll
+ qmldebuggingplugin.sources = $$QT_BUILD_TREE/plugins/qmltooling/qmldbg_tcp$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/qmltooling/qmldbg_ost$${QT_LIBINFIX}.dll
qmldebuggingplugin.path = c:$$QT_PLUGINS_BASE_DIR/qmltooling
DEPLOYMENT += qmldebuggingplugin
}
diff --git a/tools/qml/startup/startup.qml b/tools/qml/startup/startup.qml
index fae7401..a216ac6 100644
--- a/tools/qml/startup/startup.qml
+++ b/tools/qml/startup/startup.qml
@@ -90,7 +90,7 @@ Rectangle {
NumberAnimation on rotation {
from: 0
to: 360
- loops: NumberAnimation.Infinite
+ loops: 3
running: true
duration: 2000
}
diff --git a/translations/assistant_cs.ts b/translations/assistant_cs.ts
index 9b9e486..9b9e486 100755..100644
--- a/translations/assistant_cs.ts
+++ b/translations/assistant_cs.ts
diff --git a/translations/assistant_ko.ts b/translations/assistant_ko.ts
new file mode 100644
index 0000000..1dbdf4f
--- /dev/null
+++ b/translations/assistant_ko.ts
@@ -0,0 +1,1551 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>AboutDialog</name>
+ <message>
+ <source>&amp;Close</source>
+ <translation>닫기(&amp;C)</translation>
+ </message>
+</context>
+<context>
+ <name>AboutLabel</name>
+ <message>
+ <source>Warning</source>
+ <translation>경고</translation>
+ </message>
+ <message>
+ <source>Unable to launch external application.
+</source>
+ <translation>외부 프로그램을 시작할 수 없습니다.
+</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>확인</translation>
+ </message>
+</context>
+<context>
+ <name>Assistant</name>
+ <message>
+ <source>Error registering documentation file &apos;%1&apos;: %2</source>
+ <translation>문서 파일 &apos;%1&apos;을(를) 등록하는 중 오류 발생: %2</translation>
+ </message>
+ <message>
+ <source>Error: %1</source>
+ <translation>오류: %1</translation>
+ </message>
+ <message>
+ <source>Could not register documentation file
+%1
+
+Reason:
+%2</source>
+ <translation>다음 문서 파일을 등록할 수 없음:
+%1
+
+이유:
+%2</translation>
+ </message>
+ <message>
+ <source>Documentation successfully registered.</source>
+ <translation>문서를 성공적으로 등록하였습니다.</translation>
+ </message>
+ <message>
+ <source>Could not unregister documentation file
+%1
+
+Reason:
+%2</source>
+ <translation>다음 문서 파일의 등록을 해제할 수 없음:
+%1
+
+이유:
+%2</translation>
+ </message>
+ <message>
+ <source>Documentation successfully unregistered.</source>
+ <translation>문서 파일의 등록을 해제하였습니다.</translation>
+ </message>
+ <message>
+ <source>Error reading collection file &apos;%1&apos;: %2.</source>
+ <translation>모음집 파일 &apos;%1&apos;을(를) 읽는 중 오류 발생: %2.</translation>
+ </message>
+ <message>
+ <source>Error creating collection file &apos;%1&apos;: %2.</source>
+ <translation>모음집 파일 &apos;%1&apos;을(를) 만드는 중 오류 발생: %2.</translation>
+ </message>
+ <message>
+ <source>Cannot load sqlite database driver!</source>
+ <translation>SQLite 데이터베이스 드라이버를 불러올 수 없습니다!</translation>
+ </message>
+</context>
+<context>
+ <name>BookmarkDialog</name>
+ <message>
+ <source>Add Bookmark</source>
+ <translation>책갈피 추가</translation>
+ </message>
+ <message>
+ <source>Bookmark:</source>
+ <translation>책갈피:</translation>
+ </message>
+ <message>
+ <source>Add in Folder:</source>
+ <translation>추가할 폴더:</translation>
+ </message>
+ <message>
+ <source>+</source>
+ <translation>+</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translation>새 폴더</translation>
+ </message>
+ <message>
+ <source>Rename Folder</source>
+ <translation>폴더 이름 바꾸기</translation>
+ </message>
+</context>
+<context>
+ <name>BookmarkItem</name>
+ <message>
+ <source>New Folder</source>
+ <translation>새 폴더</translation>
+ </message>
+ <message>
+ <source>Untitled</source>
+ <translation>제목 없음</translation>
+ </message>
+</context>
+<context>
+ <name>BookmarkManager</name>
+ <message>
+ <source>Untitled</source>
+ <translation>제목 없음</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>You are going to delete a Folder, this will also&lt;br&gt;remove it&apos;s content. Are you sure to continue?</source>
+ <translation>폴더를 삭제하면 내용도 제거됩니다.&lt;br&gt;계속 진행하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Manage Bookmarks...</source>
+ <translation>책갈피 관리...</translation>
+ </message>
+ <message>
+ <source>Add Bookmark...</source>
+ <translation>책갈피 추가...</translation>
+ </message>
+ <message>
+ <source>Ctrl+D</source>
+ <translation>Ctrl+D</translation>
+ </message>
+ <message>
+ <source>Delete Folder</source>
+ <translation>폴더 삭제</translation>
+ </message>
+ <message>
+ <source>Rename Folder</source>
+ <translation>폴더 이름 바꾸기</translation>
+ </message>
+ <message>
+ <source>Show Bookmark</source>
+ <translation>책갈피 열기</translation>
+ </message>
+ <message>
+ <source>Show Bookmark in New Tab</source>
+ <translation>새 탭으로 책갈피 열기</translation>
+ </message>
+ <message>
+ <source>Delete Bookmark</source>
+ <translation>책갈피 삭제</translation>
+ </message>
+ <message>
+ <source>Rename Bookmark</source>
+ <translation>책갈피 이름 바꾸기</translation>
+ </message>
+</context>
+<context>
+ <name>BookmarkManagerWidget</name>
+ <message>
+ <source>Manage Bookmarks</source>
+ <translation>책갈피 관리</translation>
+ </message>
+ <message>
+ <source>Search:</source>
+ <translation>찾기:</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Import and Backup</source>
+ <translation>가져오기 및 백업</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <source>Import...</source>
+ <translation>가져오기...</translation>
+ </message>
+ <message>
+ <source>Export...</source>
+ <translation>내보내기...</translation>
+ </message>
+ <message>
+ <source>Open File</source>
+ <translation>열기</translation>
+ </message>
+ <message>
+ <source>Files (*.xbel)</source>
+ <translation>파일 (*.xbel)</translation>
+ </message>
+ <message>
+ <source>Save File</source>
+ <translation>파일 저장</translation>
+ </message>
+ <message>
+ <source>Qt Assistant</source>
+ <translation>Qt Assistant</translation>
+ </message>
+ <message>
+ <source>Unable to save bookmarks.</source>
+ <translation>책갈피를 저장할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>You are goingto delete a Folder, this will also&lt;br&gt; remove it&apos;s content. Are you sure to continue?</source>
+ <translation>폴더를 삭제하면 내용도 제거됩니다.&lt;br&gt;계속 진행하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Delete Folder</source>
+ <translation>폴더 삭제</translation>
+ </message>
+ <message>
+ <source>Rename Folder</source>
+ <translation>폴더 이름 바꾸기</translation>
+ </message>
+ <message>
+ <source>Show Bookmark</source>
+ <translation>책갈피 열기</translation>
+ </message>
+ <message>
+ <source>Show Bookmark in New Tab</source>
+ <translation>새 탭으로 책갈피 열기</translation>
+ </message>
+ <message>
+ <source>Delete Bookmark</source>
+ <translation>책갈피 삭제</translation>
+ </message>
+ <message>
+ <source>Rename Bookmark</source>
+ <translation>책갈피 이름 바꾸기</translation>
+ </message>
+</context>
+<context>
+ <name>BookmarkModel</name>
+ <message>
+ <source>Name</source>
+ <translation>이름</translation>
+ </message>
+ <message>
+ <source>Address</source>
+ <translation>주소</translation>
+ </message>
+ <message>
+ <source>Bookmarks Menu</source>
+ <translation>책갈피 메뉴</translation>
+ </message>
+</context>
+<context>
+ <name>BookmarkWidget</name>
+ <message>
+ <source>Bookmarks</source>
+ <translation>책갈피</translation>
+ </message>
+ <message>
+ <source>Filter:</source>
+ <translation>필터:</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>추가</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+</context>
+<context>
+ <name>CentralWidget</name>
+ <message>
+ <source>Add new page</source>
+ <translation>새 쪽 추가</translation>
+ </message>
+ <message>
+ <source>Close current page</source>
+ <translation>현재 쪽 닫기</translation>
+ </message>
+ <message>
+ <source>Print Document</source>
+ <translation>문서 인쇄</translation>
+ </message>
+ <message>
+ <source>unknown</source>
+ <translation>알 수 없음</translation>
+ </message>
+ <message>
+ <source>Add New Page</source>
+ <translation>새 쪽 추가</translation>
+ </message>
+ <message>
+ <source>Close This Page</source>
+ <translation>이 쪽 닫기</translation>
+ </message>
+ <message>
+ <source>Close Other Pages</source>
+ <translation>다른 쪽 닫기</translation>
+ </message>
+ <message>
+ <source>Add Bookmark for this Page...</source>
+ <translation>이 쪽을 책갈피에 추가...</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation>찾기</translation>
+ </message>
+</context>
+<context>
+ <name>CmdLineParser</name>
+ <message>
+ <source>Usage: assistant [Options]
+
+-collectionFile file Uses the specified collection
+ file instead of the default one
+-showUrl url Shows the document with the
+ url.
+-enableRemoteControl Enables Assistant to be
+ remotely controlled.
+-show widget Shows the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-activate widget Activates the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-hide widget Hides the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-register helpFile Registers the specified help file
+ (.qch) in the given collection
+ file.
+-unregister helpFile Unregisters the specified help file
+ (.qch) from the give collection
+ file.
+-setCurrentFilter filter Set the filter as the active filter.
+-remove-search-index Removes the full text search index.
+-rebuild-search-index Re-builds the full text search index (potentially slow).
+-quiet Does not display any error or
+ status message.
+-help Displays this help.
+</source>
+ <translation>사용 방법: assistant [옵션]
+
+-collectionFile file 기본 모음집 파일 대신
+ 지정한 모음집 파일을 사용합니다.
+-showUrl url &apos;url&apos;에 있는 문서를 엽니다.
+-enableRemoteControl Assistant 원격 제어를 사용합니다.
+-show widget 지정한 도킹 가능한 위젯을 표시합니다.
+ 사용 가능한 값: &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; 및 &quot;search&quot;.
+-activate widget 지정한 도킹 가능한 위젯을 활성화합니다.
+ 사용 가능한 값: &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; 및 &quot;search&quot;.
+-hide widget 지정한 도킹 가능한 위젯을 숨깁니다.
+ 사용 가능한 값: &quot;contents&quot;, &quot;index&quot;
+ &quot;bookmarks&quot; 및 &quot;search&quot;.
+-register helpFile 지정한 모음집 파일에
+ 지정한 도움말 파일 (.qch)을
+ 등록합니다.
+-unregister helpFile 지정한 모음집 파일에서
+ 지정한 도움말 파일 (.qch)의
+ 등록을 해제합니다.
+-setCurrentFilter filter 지정한 필터를 활성 필터로 지정합니다.
+-remove-search-index 전문 검색 인덱스를 삭제합니다.
+-rebuild-search-index 전문 검색 인덱스를 다시 생성합니다 (느릴 수도 있음).
+-quiet 오류 및 상태 메시지를
+ 표시하지 않습니다.
+-help 이 도움말을 표시합니다.
+</translation>
+ </message>
+ <message>
+ <source>Unknown option: %1</source>
+ <translation>알 수 없는 옵션: %1</translation>
+ </message>
+ <message>
+ <source>The collection file &apos;%1&apos; does not exist.</source>
+ <translation>모음집 파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Missing collection file.</source>
+ <translation>모음집 파일이 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Invalid URL &apos;%1&apos;.</source>
+ <translation>잘못된 URL &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <source>Missing URL.</source>
+ <translation>URL이 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Unknown widget: %1</source>
+ <translation>알 수 없는 위젯: %1</translation>
+ </message>
+ <message>
+ <source>Missing widget.</source>
+ <translation>위젯이 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The Qt help file &apos;%1&apos; does not exist.</source>
+ <translation>Qt 도움말 파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Missing help file.</source>
+ <translation>도움말 파일이 없습니다.</translation>
+ </message>
+ <message>
+ <source>Missing filter argument.</source>
+ <translation>필터 인자가 없습니다.</translation>
+ </message>
+ <message>
+ <source>Error</source>
+ <translation>오류</translation>
+ </message>
+ <message>
+ <source>Notice</source>
+ <translation>알림</translation>
+ </message>
+</context>
+<context>
+ <name>ContentWindow</name>
+ <message>
+ <source>Open Link</source>
+ <translation>링크 열기</translation>
+ </message>
+ <message>
+ <source>Open Link in New Tab</source>
+ <translation>새 탭으로 링크 열기</translation>
+ </message>
+</context>
+<context>
+ <name>ConversionWizard</name>
+ <message>
+ <source>Help Conversion Wizard</source>
+ <translation>도움말 변환 마법사</translation>
+ </message>
+ <message>
+ <source>Converting %1...</source>
+ <translation>%1 변환 중...</translation>
+ </message>
+ <message>
+ <source>Writing help collection file...</source>
+ <translation>도움말 모음집 파일에 쓰는 중...</translation>
+ </message>
+ <message>
+ <source>Done.</source>
+ <translation>완료.</translation>
+ </message>
+</context>
+<context>
+ <name>FilesPage</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Files:</source>
+ <translation>파일:</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Remove All</source>
+ <translation>모두 삭제</translation>
+ </message>
+ <message>
+ <source>Unreferenced Files</source>
+ <translation>참조되지 않은 파일</translation>
+ </message>
+ <message>
+ <source>Remove files which are neither referenced by a keyword nor by the TOC.</source>
+ <translation>키워드나 목차에서 참조하지 않는 파일을 삭제합니다.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; When removing images or stylesheets, be aware that those files are not directly referenced by the .adp or .dcf file.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;&lt;b&gt;경고:&lt;/b&gt; 그림이나 스타일 시트를 삭제한다면, .adp 파일이나 .dcf 파일에서 직접 참조하는지 여부를 확인하십시오.&lt;/p&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>FilterNameDialogClass</name>
+ <message>
+ <source>Add Filter Name</source>
+ <translation>필터 이름 추가</translation>
+ </message>
+ <message>
+ <source>Filter Name:</source>
+ <translation>필터 이름:</translation>
+ </message>
+</context>
+<context>
+ <name>FilterPage</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Filter attributes for current documentation (comma separated list):</source>
+ <translation>현재 문서의 필터 속성 (쉼표로 구분된 목록):</translation>
+ </message>
+ <message>
+ <source>Custom Filters</source>
+ <translation>사용자 정의 필터</translation>
+ </message>
+ <message>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <source>2</source>
+ <translation>2</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>추가</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Filter Settings</source>
+ <translation>필터 설정</translation>
+ </message>
+ <message>
+ <source>Specify the filter attributes for the documentation. If filter attributes are used, also define a custom filter for it. Both the filter attributes and the custom filters are optional.</source>
+ <translation>문서의 필터 속성을 지정합니다. 필터 속성이 사용된다면 연관된 사용자 정의 필터도 정의해야 합니다. 필터 속성과 사용자 정의 필터는 선택 사항입니다.</translation>
+ </message>
+ <message>
+ <source>Filter Name</source>
+ <translation>필터 이름</translation>
+ </message>
+ <message>
+ <source>Filter Attributes</source>
+ <translation>필터 속성</translation>
+ </message>
+ <message>
+ <source>The custom filter &apos;%1&apos; is defined multiple times.</source>
+ <translation>사용자 정의 필터 &apos;%1&apos;이(가) 여러 번 정의되었습니다.</translation>
+ </message>
+ <message>
+ <source>The attributes for custom filter &apos;%1&apos; are defined multiple times.</source>
+ <translation>사용자 정의 필터의 속성 &apos;%1&apos;이(가) 여러 번 정의되었습니다.</translation>
+ </message>
+ <message>
+ <source>unfiltered</source>
+ <comment>list of available documentation</comment>
+ <translation>필터되지 않음</translation>
+ </message>
+</context>
+<context>
+ <name>FindWidget</name>
+ <message>
+ <source>Previous</source>
+ <translation>이전</translation>
+ </message>
+ <message>
+ <source>Next</source>
+ <translation>다음</translation>
+ </message>
+ <message>
+ <source>Case Sensitive</source>
+ <translation>대소문자 구분</translation>
+ </message>
+ <message>
+ <source>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
+ <translation>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;검색 다시 시작됨</translation>
+ </message>
+</context>
+<context>
+ <name>FinishPage</name>
+ <message>
+ <source>Converting File</source>
+ <translation>파일 변환 중</translation>
+ </message>
+ <message>
+ <source>Creating the new Qt help files from the old ADP file.</source>
+ <translation>이전 ADP 파일에서 새 Qt 도움말 파일을 만들고 있습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>FontPanel</name>
+ <message>
+ <source>Font</source>
+ <translation>글꼴</translation>
+ </message>
+ <message>
+ <source>&amp;Writing system</source>
+ <translation>문자 체계(&amp;W)</translation>
+ </message>
+ <message>
+ <source>&amp;Family</source>
+ <translation>글꼴 종류(&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;Style</source>
+ <translation>스타일(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Point size</source>
+ <translation>글꼴 크기(&amp;P)</translation>
+ </message>
+</context>
+<context>
+ <name>GeneralPage</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Namespace:</source>
+ <translation>네임스페이스:</translation>
+ </message>
+ <message>
+ <source>Virtual Folder:</source>
+ <translation>가상 폴더:</translation>
+ </message>
+ <message>
+ <source>General Settings</source>
+ <translation>일반 설정</translation>
+ </message>
+ <message>
+ <source>Specify the namespace and the virtual folder for the documentation.</source>
+ <translation>문서의 네임스페이스와 가상 폴더를 설정합니다.</translation>
+ </message>
+ <message>
+ <source>Namespace Error</source>
+ <translation>네임스페이스 오류</translation>
+ </message>
+ <message>
+ <source>The namespace contains some invalid characters.</source>
+ <translation>네임스페이스 이름에 올바르지 않은 문자가 포함되어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Virtual Folder Error</source>
+ <translation>가상 폴더 에러</translation>
+ </message>
+ <message>
+ <source>The virtual folder contains some invalid characters.</source>
+ <translation>가상 폴더 이름에 올바르지 않은 문자가 포함되어 있습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>HelpEngineWrapper</name>
+ <message>
+ <source>Unfiltered</source>
+ <translation>필터되지 않음</translation>
+ </message>
+</context>
+<context>
+ <name>HelpGenerator</name>
+ <message>
+ <source>Warning: %1</source>
+ <translation>경고: %1</translation>
+ </message>
+</context>
+<context>
+ <name>HelpViewer</name>
+ <message>
+ <source>&lt;title&gt;about:blank&lt;/title&gt;</source>
+ <translation>&lt;title&gt;about:blank&lt;/title&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;title&gt;Error 404...&lt;/title&gt;&lt;div align=&quot;center&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;The page could not be found&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</source>
+ <translation>&lt;title&gt;404 오류...&lt;/title&gt;&lt;div align=&quot;center&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;페이지를 찾을 수 없음&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Link Location</source>
+ <translation>링크 주소 복사(&amp;L)</translation>
+ </message>
+ <message>
+ <source>Open Link in New Tab Ctrl+LMB</source>
+ <translation>새 탭으로 링크 열기 Ctrl+LMB</translation>
+ </message>
+ <message>
+ <source>Open Link in New Tab</source>
+ <translation>새 탭으로 링크 열기</translation>
+ </message>
+</context>
+<context>
+ <name>HelpWindow</name>
+ <message>
+ <source>&lt;center&gt;&lt;b&gt;Wizard Assistant&lt;/b&gt;&lt;/center&gt;</source>
+ <translation>&lt;center&gt;&lt;b&gt;마법사 도우미&lt;/b&gt;&lt;/center&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>IdentifierPage</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Create identifiers</source>
+ <translation>식별자 만들기</translation>
+ </message>
+ <message>
+ <source>Global prefix:</source>
+ <translation>전역 접두사:</translation>
+ </message>
+ <message>
+ <source>Inherit prefix from file names</source>
+ <translation>파일 이름에서 접두사 상속받기</translation>
+ </message>
+ <message>
+ <source>Identifiers</source>
+ <translation>식별자</translation>
+ </message>
+ <message>
+ <source>This page allows you to create identifiers from the keywords found in the .adp or .dcf file.</source>
+ <translation>이 페이지에서는 .adp 및 .dcf 파일에서 찾은 키워드에서 식별자를 만들 수 있습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>IndexWindow</name>
+ <message>
+ <source>&amp;Look for:</source>
+ <translation>찾을 문자열(&amp;L):</translation>
+ </message>
+ <message>
+ <source>Open Link</source>
+ <translation>링크 열기</translation>
+ </message>
+ <message>
+ <source>Open Link in New Tab</source>
+ <translation>새 탭으로 링크 열기</translation>
+ </message>
+</context>
+<context>
+ <name>InputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>File name:</source>
+ <translation>파일 이름:</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Input File</source>
+ <translation>입력 파일</translation>
+ </message>
+ <message>
+ <source>Specify the .adp or .dcf file you want to convert to the new Qt help project format and/or collection format.</source>
+ <translation>새로운 Qt 도움말 프로젝트 및 모음집 형식으로 변환할 .adp나 .dcp 파일을 지정하십시오.</translation>
+ </message>
+ <message>
+ <source>Open file</source>
+ <translation>파일 열기</translation>
+ </message>
+ <message>
+ <source>Qt Help Files (*.adp *.dcf)</source>
+ <translation>Qt 도움말 파일 (*.adp *.dcf)</translation>
+ </message>
+ <message>
+ <source>File Open Error</source>
+ <translation>파일 열기 오류</translation>
+ </message>
+ <message>
+ <source>The specified file could not be opened!</source>
+ <translation>지정한 파일을 열 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>File Parsing Error</source>
+ <translation>파일 처리 오류</translation>
+ </message>
+ <message>
+ <source>Parsing error in line %1!</source>
+ <translation>%1번째 줄에서 처리 오류 발생!</translation>
+ </message>
+</context>
+<context>
+ <name>InstallDialog</name>
+ <message>
+ <source>Install Documentation</source>
+ <translation>문서 설치</translation>
+ </message>
+ <message>
+ <source>Available Documentation:</source>
+ <translation>사용 가능한 문서:</translation>
+ </message>
+ <message>
+ <source>Install</source>
+ <translation>설치</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>Installation Path:</source>
+ <translation>설치 경로:</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Downloading documentation info...</source>
+ <translation>문서 정보 다운로드 중...</translation>
+ </message>
+ <message>
+ <source>Download canceled.</source>
+ <translation>다운로드가 취소되었습니다.</translation>
+ </message>
+ <message>
+ <source>Done.</source>
+ <translation>완료.</translation>
+ </message>
+ <message>
+ <source>The file %1 already exists. Do you want to overwrite it?</source>
+ <translation>파일 %1이(가) 이미 존재합니다. 겹쳐 쓰시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Unable to save the file %1: %2.</source>
+ <translation>파일 %1을(를) 저장할 수 없음: %2.</translation>
+ </message>
+ <message>
+ <source>Downloading %1...</source>
+ <translation>%1 다운로드 중...</translation>
+ </message>
+ <message>
+ <source>Download failed: %1.</source>
+ <translation>다운로드 실패: %1.</translation>
+ </message>
+ <message>
+ <source>Documentation info file is corrupt!</source>
+ <translation>문서 정보 파일이 손상되었습니다!</translation>
+ </message>
+ <message>
+ <source>Download failed: Downloaded file is corrupted.</source>
+ <translation>다운로드 실패: 다운로드 받은 파일이 손상되었습니다.</translation>
+ </message>
+ <message>
+ <source>Installing documentation %1...</source>
+ <translation>문서 %1 설치 중...</translation>
+ </message>
+ <message>
+ <source>Error while installing documentation:
+%1</source>
+ <translation>문서를 설치하는 중 오류 발생:
+%1</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>Index</source>
+ <translation>색인</translation>
+ </message>
+ <message>
+ <source>Contents</source>
+ <translation>내용</translation>
+ </message>
+ <message>
+ <source>Bookmarks</source>
+ <translation>책갈피</translation>
+ </message>
+ <message>
+ <source>Qt Assistant</source>
+ <translation>Qt Assistant</translation>
+ </message>
+ <message>
+ <source>Looking for Qt Documentation...</source>
+ <translation>Qt 문서 찾는 중...</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>파일(&amp;F)</translation>
+ </message>
+ <message>
+ <source>New &amp;Tab</source>
+ <translation>새 탭(&amp;T)</translation>
+ </message>
+ <message>
+ <source>Page Set&amp;up...</source>
+ <translation>쪽 설정(&amp;U)...</translation>
+ </message>
+ <message>
+ <source>Print Preview...</source>
+ <translation>인쇄 미리 보기...</translation>
+ </message>
+ <message>
+ <source>&amp;Print...</source>
+ <translation>인쇄(&amp;P)...</translation>
+ </message>
+ <message>
+ <source>&amp;Close Tab</source>
+ <translation>탭 닫기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Quit</source>
+ <translation>끝내기(&amp;Q)</translation>
+ </message>
+ <message>
+ <source>CTRL+Q</source>
+ <translation>CTRL+Q</translation>
+ </message>
+ <message>
+ <source>&amp;Edit</source>
+ <translation>편집(&amp;E)</translation>
+ </message>
+ <message>
+ <source>&amp;Copy selected Text</source>
+ <translation>선택한 텍스트 복사(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Find in Text...</source>
+ <translation>텍스트에서 찾기(&amp;F)...</translation>
+ </message>
+ <message>
+ <source>&amp;Find</source>
+ <translation>찾기(&amp;F)</translation>
+ </message>
+ <message>
+ <source>Find &amp;Next</source>
+ <translation>다음 찾기(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Find &amp;Previous</source>
+ <translation>이전 찾기(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Preferences...</source>
+ <translation>환경 설정...</translation>
+ </message>
+ <message>
+ <source>&amp;View</source>
+ <translation>보기(&amp;V)</translation>
+ </message>
+ <message>
+ <source>Zoom &amp;in</source>
+ <translation>확대(&amp;I)</translation>
+ </message>
+ <message>
+ <source>Zoom &amp;out</source>
+ <translation>축소(&amp;O)</translation>
+ </message>
+ <message>
+ <source>Normal &amp;Size</source>
+ <translation>원래 크기(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Ctrl+0</source>
+ <translation>Ctrl+0</translation>
+ </message>
+ <message>
+ <source>ALT+C</source>
+ <translation>ALT+C</translation>
+ </message>
+ <message>
+ <source>ALT+I</source>
+ <translation>ALT+I</translation>
+ </message>
+ <message>
+ <source>ALT+O</source>
+ <translation>ALT+O</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation>찾기</translation>
+ </message>
+ <message>
+ <source>ALT+S</source>
+ <translation>ALT+S</translation>
+ </message>
+ <message>
+ <source>&amp;Go</source>
+ <translation>이동(&amp;G)</translation>
+ </message>
+ <message>
+ <source>&amp;Home</source>
+ <translation>홈 페이지(&amp;H)</translation>
+ </message>
+ <message>
+ <source>ALT+Home</source>
+ <translation>ALT+Home</translation>
+ </message>
+ <message>
+ <source>&amp;Back</source>
+ <translation>뒤로(&amp;B)</translation>
+ </message>
+ <message>
+ <source>&amp;Forward</source>
+ <translation>앞으로(&amp;F)</translation>
+ </message>
+ <message>
+ <source>Sync with Table of Contents</source>
+ <translation>목차와 동기화</translation>
+ </message>
+ <message>
+ <source>Sync</source>
+ <translation>동기화</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>다음 쪽</translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt+Right</source>
+ <translation>Ctrl+Alt+Right</translation>
+ </message>
+ <message>
+ <source>Previous Page</source>
+ <translation>이전 쪽</translation>
+ </message>
+ <message>
+ <source>Ctrl+Alt+Left</source>
+ <translation>Ctrl+Alt+Left</translation>
+ </message>
+ <message>
+ <source>&amp;Bookmarks</source>
+ <translation>책갈피(&amp;B)</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>도움말(&amp;H)</translation>
+ </message>
+ <message>
+ <source>About...</source>
+ <translation>정보...</translation>
+ </message>
+ <message>
+ <source>Navigation Toolbar</source>
+ <translation>탐색 도구 모음</translation>
+ </message>
+ <message>
+ <source>&amp;Window</source>
+ <translation>창(&amp;W)</translation>
+ </message>
+ <message>
+ <source>Zoom</source>
+ <translation>확대/축소</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>최소화</translation>
+ </message>
+ <message>
+ <source>Ctrl+M</source>
+ <translation>Ctrl+M</translation>
+ </message>
+ <message>
+ <source>Toolbars</source>
+ <translation>도구 모음</translation>
+ </message>
+ <message>
+ <source>Filter Toolbar</source>
+ <translation>필터 도구 모음</translation>
+ </message>
+ <message>
+ <source>Filtered by:</source>
+ <translation>필터 기준:</translation>
+ </message>
+ <message>
+ <source>Address Toolbar</source>
+ <translation>주소 도구 모음</translation>
+ </message>
+ <message>
+ <source>Address:</source>
+ <translation>주소:</translation>
+ </message>
+ <message>
+ <source>Could not find the associated content item.</source>
+ <translation>연결된 내용을 찾을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>&lt;center&gt;&lt;h3&gt;%1&lt;/h3&gt;&lt;p&gt;Version %2&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;</source>
+ <translation>&lt;center&gt;&lt;h3&gt;%1&lt;/h3&gt;&lt;p&gt;버전 %2&lt;/p&gt;&lt;/center&gt;&lt;p&gt;저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>About %1</source>
+ <translation>%1 정보</translation>
+ </message>
+ <message>
+ <source>Updating search index</source>
+ <translation>검색 인덱스 업데이트 중</translation>
+ </message>
+ <message>
+ <source>Could not register file &apos;%1&apos;: %2</source>
+ <translation>파일 &apos;%1&apos;을(를) 등록할 수 없음: %2</translation>
+ </message>
+</context>
+<context>
+ <name>OutputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Project file name:</source>
+ <translation>프로젝트 파일 이름:</translation>
+ </message>
+ <message>
+ <source>Collection file name:</source>
+ <translation>모음집 파일 이름:</translation>
+ </message>
+ <message>
+ <source>Output File Names</source>
+ <translation>출력 파일 이름</translation>
+ </message>
+ <message>
+ <source>Specify the file names for the output files.</source>
+ <translation>출력 파일의 이름을 지정합니다.</translation>
+ </message>
+ <message>
+ <source>Convert...</source>
+ <translation>변환...</translation>
+ </message>
+ <message>
+ <source>Qt Help Project File</source>
+ <translation>Qt 도움말 프로젝트 파일</translation>
+ </message>
+ <message>
+ <source>Qt Help Collection Project File</source>
+ <translation>Qt 도움말 모음집 프로젝트 파일</translation>
+ </message>
+ <message>
+ <source>The specified file %1 already exist.
+
+Do you want to remove it?</source>
+ <translation>지정한 파일 %1이(가) 이미 존재합니다.
+
+삭제하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+</context>
+<context>
+ <name>PathPage</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>File filters:</source>
+ <translation>파일 필터:</translation>
+ </message>
+ <message>
+ <source>Documentation source file paths:</source>
+ <translation>문서 원본 파일 경로:</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>추가</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Source File Paths</source>
+ <translation>원본 파일 경로</translation>
+ </message>
+ <message>
+ <source>Specify the paths where the sources files are located. By default, all files in those directories matched by the file filter will be included.</source>
+ <translation>원본 파일이 있는 경로를 지정하십시오. 기본적으로 필터와 일치하는 디렉터리에 있는 모든 파일이 포함됩니다.</translation>
+ </message>
+ <message>
+ <source>Source File Path</source>
+ <translation>원본 파일 경로</translation>
+ </message>
+</context>
+<context>
+ <name>PreferencesDialog</name>
+ <message>
+ <source>Add Documentation</source>
+ <translation>문서 추가</translation>
+ </message>
+ <message>
+ <source>Qt Compressed Help Files (*.qch)</source>
+ <translation>압축된 Qt 도움말 파일 (*.qch)</translation>
+ </message>
+ <message>
+ <source>The namespace %1 is already registered!</source>
+ <translation>네임스페이스 %1이(가) 이미 등록되어 있습니다!</translation>
+ </message>
+ <message>
+ <source>The specified file is not a valid Qt Help File!</source>
+ <translation>지정한 파일은 올바른 Qt 도움말 파일이 아닙니다!</translation>
+ </message>
+ <message>
+ <source>Remove Documentation</source>
+ <translation>문서 삭제</translation>
+ </message>
+ <message>
+ <source>Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents.</source>
+ <translation>삭제하려고 하는 문서 중 일부는 현재 Assistant에 열려 있습니다. 문서를 삭제하면 삭제한 문서를 닫을 것입니다.</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <source>Use custom settings</source>
+ <translation>사용자 정의 설정 사용</translation>
+ </message>
+</context>
+<context>
+ <name>PreferencesDialogClass</name>
+ <message>
+ <source>Preferences</source>
+ <translation>환경 설정</translation>
+ </message>
+ <message>
+ <source>Fonts</source>
+ <translation>글꼴</translation>
+ </message>
+ <message>
+ <source>Font settings:</source>
+ <translation>글꼴 설정:</translation>
+ </message>
+ <message>
+ <source>Browser</source>
+ <translation>브라우저</translation>
+ </message>
+ <message>
+ <source>Application</source>
+ <translation>프로그램</translation>
+ </message>
+ <message>
+ <source>Filters</source>
+ <translation>필터</translation>
+ </message>
+ <message>
+ <source>Filter:</source>
+ <translation>필터:</translation>
+ </message>
+ <message>
+ <source>Attributes:</source>
+ <translation>속성:</translation>
+ </message>
+ <message>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>추가</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Documentation</source>
+ <translation>문서</translation>
+ </message>
+ <message>
+ <source>Registered Documentation:</source>
+ <translation>등록된 문서:</translation>
+ </message>
+ <message>
+ <source>Add...</source>
+ <translation>추가...</translation>
+ </message>
+ <message>
+ <source>Options</source>
+ <translation>옵션</translation>
+ </message>
+ <message>
+ <source>On help start:</source>
+ <translation>도움말을 시작할 때:</translation>
+ </message>
+ <message>
+ <source>Show my home page</source>
+ <translation>내 홈 페이지 보이기</translation>
+ </message>
+ <message>
+ <source>Show a blank page</source>
+ <translation>빈 페이지 보이기</translation>
+ </message>
+ <message>
+ <source>Show my tabs from last session</source>
+ <translation>마지막 세션에서 연 탭 보이기</translation>
+ </message>
+ <message>
+ <source>Homepage</source>
+ <translation>홈 페이지</translation>
+ </message>
+ <message>
+ <source>Current Page</source>
+ <translation>현재 페이지</translation>
+ </message>
+ <message>
+ <source>Blank Page</source>
+ <translation>빈 페이지</translation>
+ </message>
+ <message>
+ <source>Restore to default</source>
+ <translation>기본값으로 복원</translation>
+ </message>
+</context>
+<context>
+ <name>QCollectionGenerator</name>
+ <message>
+ <source>Unknown token at line %1.</source>
+ <translation>%1번째 줄에 알 수 없는 토큰이 있습니다.</translation>
+ </message>
+ <message>
+ <source>Unknown token at line %1. Expected &quot;QtHelpCollectionProject&quot;.</source>
+ <translation>%1번째 줄에 알 수 없는 토큰이 있습니다. 예상한 토큰: &quot;QtHelpCollectionProject&quot;.</translation>
+ </message>
+ <message>
+ <source>Missing end tags.</source>
+ <translation>끝맺는 태그가 없습니다.</translation>
+ </message>
+ <message>
+ <source>Missing input or output file for help file generation.</source>
+ <translation>도움말 파일을 생성하기 위한 입력 및 출력 파일이 없습니다.</translation>
+ </message>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>출력 파일 이름이 없습니다.</translation>
+ </message>
+ <message>
+ <source>Qt Collection Generator version 1.0 (Qt %1)
+</source>
+ <translation>Qt 모음집 생성기 버전 1.0 (Qt %1)
+</translation>
+ </message>
+ <message>
+ <source>Missing collection config file.</source>
+ <translation>모음집 설정 파일이 없습니다.</translation>
+ </message>
+ <message>
+ <source>
+Usage:
+
+qcollectiongenerator &lt;collection-config-file&gt; [options]
+
+ -o &lt;collection-file&gt; Generates a collection file
+ called &lt;collection-file&gt;. If
+ this option is not specified
+ a default name will be used.
+ -v Displays the version of
+ qcollectiongenerator.
+
+</source>
+ <translation>
+사용 방법:
+
+qcollectiongenerator &lt;collection-config-file&gt; [옵션]
+
+ -o &lt;collection-file&gt; 모음집 파일 &lt;collection-file&gt;을
+ 생성합니다. 이 옵션이 지정되지
+ 않으면 기본 이름을 사용합니다.
+ -v qcollectiongenerator의
+ 버전을 표시합니다.
+
+</translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>%1을(를) 열 수 없습니다.
+</translation>
+ </message>
+ <message>
+ <source>Reading collection config file...
+</source>
+ <translation>모음집 설정 파일을 읽는 중...
+</translation>
+ </message>
+ <message>
+ <source>Collection config file error: %1
+</source>
+ <translation>모음집 설정 파일 오류: %1
+</translation>
+ </message>
+ <message>
+ <source>Generating help for %1...
+</source>
+ <translation>%1의 도움말 생성 중...
+</translation>
+ </message>
+ <message>
+ <source>Creating collection file...
+</source>
+ <translation>모음집 파일 생성 중...
+</translation>
+ </message>
+ <message>
+ <source>The file %1 cannot be overwritten.
+</source>
+ <translation>파일 %1에 겹쳐 쓸 수 없습니다.
+</translation>
+ </message>
+ <message>
+ <source>Cannot open %1.
+</source>
+ <translation>%1을(를) 열 수 없습니다.
+</translation>
+ </message>
+ <message>
+ <source>Cannot open referenced image file %1.
+</source>
+ <translation>참조하는 그림 파일 %1을(를) 열 수 없습니다.
+</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpGenerator</name>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>출력 파일 이름이 없습니다.</translation>
+ </message>
+ <message>
+ <source>Qt Help Generator version 1.0 (Qt %1)
+</source>
+ <translation>Qt 도움말 생성기 버전 1.0 (Qt %1)
+</translation>
+ </message>
+ <message>
+ <source>Missing Qt help project file.</source>
+ <translation>Qt 도움말 프로젝트 파일이 없습니다.</translation>
+ </message>
+ <message>
+ <source>
+Usage:
+
+qhelpgenerator &lt;help-project-file&gt; [options]
+
+ -o &lt;compressed-file&gt; Generates a Qt compressed help
+ file called &lt;compressed-file&gt;.
+ If this option is not specified
+ a default name will be used.
+ -c Checks whether all links in HTML files
+ point to files in this help project.
+ -v Displays the version of
+ qhelpgenerator.
+
+</source>
+ <translation>
+사용 방법:
+
+qhelpgenerator &lt;help-project-file&gt; [옵션]
+
+ -o &lt;compressed-file&gt; Qt 압축된 도움말 파일
+ &lt;compressed-file&gt;을 생성합니다.
+ 이 옵션을 지정하지 않으면
+ 기본 이름을 사용합니다.
+ -c HTML 파일에 있는 모든 링크가
+ 이 프로젝트에 있는 파일을
+ 가리키는지 확인합니다.
+ -v qhelpgenerator의 버전을
+ 표시합니다.
+
+</translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>%1을(를) 열 수 없습니다.
+</translation>
+ </message>
+ <message>
+ <source>Could not create output directory: %1
+</source>
+ <translation>출력 디렉터리를 만들 수 없습니다: %1
+</translation>
+ </message>
+</context>
+<context>
+ <name>RemoteControl</name>
+ <message>
+ <source>Debugging Remote Control</source>
+ <translation>원격 제어 디버그</translation>
+ </message>
+ <message>
+ <source>Received Command: %1 %2</source>
+ <translation>받은 명령: %1 %2</translation>
+ </message>
+</context>
+<context>
+ <name>SearchWidget</name>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>복사(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Link Location</source>
+ <translation>링크 주소 복사(&amp;L)</translation>
+ </message>
+ <message>
+ <source>Open Link in New Tab</source>
+ <translation>새 탭으로 링크 열기</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>모두 선택</translation>
+ </message>
+</context>
+<context>
+ <name>TopicChooser</name>
+ <message>
+ <source>Choose Topic</source>
+ <translation>주제 선택</translation>
+ </message>
+ <message>
+ <source>&amp;Topics</source>
+ <translation>주제(&amp;T)</translation>
+ </message>
+ <message>
+ <source>&amp;Display</source>
+ <translation>표시(&amp;D)</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>닫기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Choose a topic for &lt;b&gt;%1&lt;/b&gt;:</source>
+ <translation>&lt;b&gt;%1&lt;/b&gt;의 주제를 선택하십시오:</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/assistant_pl.ts b/translations/assistant_pl.ts
index 8d3c8a3..87524a4 100644
--- a/translations/assistant_pl.ts
+++ b/translations/assistant_pl.ts
@@ -4,7 +4,6 @@
<context>
<name>AboutDialog</name>
<message>
- <location filename="../tools/assistant/tools/assistant/aboutdialog.cpp" line="+117"/>
<source>&amp;Close</source>
<translation>Za&amp;mknij</translation>
</message>
@@ -12,18 +11,15 @@
<context>
<name>AboutLabel</name>
<message>
- <location line="-15"/>
<source>Warning</source>
<translation>Ostrzeżenie</translation>
</message>
<message>
- <location line="+1"/>
<source>Unable to launch external application.
</source>
<translation>Nie można uruchomić zewnętrznej aplikacji.</translation>
</message>
<message>
- <location line="+0"/>
<source>OK</source>
<translation>OK</translation>
</message>
@@ -31,17 +27,14 @@
<context>
<name>Assistant</name>
<message>
- <location filename="../tools/assistant/tools/assistant/main.cpp" line="+177"/>
<source>Error registering documentation file &apos;%1&apos;: %2</source>
<translation>Błąd podczas zarejestrowania pliku z dokumentacją &quot;%1&quot;: %2</translation>
</message>
<message>
- <location line="+39"/>
<source>Error: %1</source>
<translation>Błąd: %1</translation>
</message>
<message>
- <location line="+42"/>
<source>Could not register documentation file
%1
@@ -54,12 +47,10 @@ Powód:
%2</translation>
</message>
<message>
- <location line="+6"/>
<source>Documentation successfully registered.</source>
<translation>Dokumentacja poprawnie zarejestrowana.</translation>
</message>
<message>
- <location line="+12"/>
<source>Could not unregister documentation file
%1
@@ -72,27 +63,22 @@ Powód:
%2</translation>
</message>
<message>
- <location line="+8"/>
<source>Documentation successfully unregistered.</source>
<translation>Dokumentacja poprawnie wyrejestrowana.</translation>
</message>
<message>
- <location line="+55"/>
<source>Error reading collection file &apos;%1&apos;: %2.</source>
<translation>Błąd podczas czytania pliku kolekcji &quot;%1&quot;: %2.</translation>
</message>
<message>
- <location line="+11"/>
<source>Error creating collection file &apos;%1&apos;: %2.</source>
<translation>Błąd podczas tworzenia pliku kolekcji &quot;%1&quot;: %2.</translation>
</message>
<message>
- <location line="+7"/>
<source>Error reading collection file &apos;%1&apos;: %2</source>
- <translation>Błąd podczas czytania pliku kolekcji &quot;%1&quot;: %2</translation>
+ <translation type="obsolete">Błąd podczas czytania pliku kolekcji &quot;%1&quot;: %2</translation>
</message>
<message>
- <location line="+53"/>
<source>Cannot load sqlite database driver!</source>
<translation>Nie można załadować sterownika bazy danych sqlite!</translation>
</message>
@@ -100,95 +86,88 @@ Powód:
<context>
<name>BookmarkDialog</name>
<message>
- <location filename="../tools/assistant/tools/assistant/bookmarkdialog.ui"/>
<source>Add Bookmark</source>
<translation>Dodaj zakładkę</translation>
</message>
<message>
- <location/>
<source>Bookmark:</source>
<translation>Zakładka:</translation>
</message>
<message>
- <location/>
<source>Add in Folder:</source>
<translation>Dodaj do katalogu:</translation>
</message>
<message>
- <location/>
<source>+</source>
<translation>+</translation>
</message>
<message>
- <location/>
<source>New Folder</source>
<translation>Nowy katalog</translation>
</message>
<message>
- <location filename="../tools/assistant/tools/assistant/bookmarkdialog.cpp" line="+227"/>
<source>Rename Folder</source>
<translation>Zmień nazwę katalogu</translation>
</message>
</context>
<context>
+ <name>BookmarkItem</name>
+ <message>
+ <source>New Folder</source>
+ <translation>Nowy katalog</translation>
+ </message>
+ <message>
+ <source>Untitled</source>
+ <translation>Nienazwany</translation>
+ </message>
+</context>
+<context>
<name>BookmarkManager</name>
<message>
- <location filename="../tools/assistant/tools/assistant/bookmarkmanager.cpp" line="+151"/>
<source>Untitled</source>
<translation>Nienazwany</translation>
</message>
<message>
- <location line="+65"/>
<source>Remove</source>
<translation>Usuń</translation>
</message>
<message>
- <location line="+1"/>
<source>You are going to delete a Folder, this will also&lt;br&gt;remove it&apos;s content. Are you sure to continue?</source>
<translation>Zamierzasz usunąć katalog co spowoduje również usunięcie jego zawartości. Czy chcesz kontynuować?</translation>
</message>
<message>
- <location line="+148"/>
<source>Manage Bookmarks...</source>
<translation>Zarządzanie zakładkami...</translation>
</message>
<message>
- <location line="+3"/>
<source>Add Bookmark...</source>
<translation>Dodaj zakładkę...</translation>
</message>
<message>
- <location line="+1"/>
<source>Ctrl+D</source>
<translation>Ctrl+D</translation>
</message>
<message>
- <location line="+68"/>
<source>Delete Folder</source>
<translation>Usuń katalog</translation>
</message>
<message>
- <location line="+1"/>
<source>Rename Folder</source>
<translation>Zmień nazwę katalogu</translation>
</message>
<message>
- <location line="+2"/>
<source>Show Bookmark</source>
<translation>Pokaż zakładkę</translation>
</message>
<message>
- <location line="+1"/>
<source>Show Bookmark in New Tab</source>
<translation>Pokaż zakładkę w nowej karcie</translation>
</message>
<message>
- <location line="+2"/>
<source>Delete Bookmark</source>
<translation>Usuń zakładkę</translation>
</message>
<message>
- <location line="+1"/>
<source>Rename Bookmark</source>
<translation>Zmień nazwę zakładki</translation>
</message>
@@ -196,100 +175,78 @@ Powód:
<context>
<name>BookmarkManagerWidget</name>
<message>
- <location filename="../tools/assistant/tools/assistant/bookmarkmanagerwidget.ui"/>
<source>Manage Bookmarks</source>
<translation>Zarządzanie zakładkami</translation>
</message>
<message>
- <location/>
<source>Search:</source>
<translation>Wyszukaj:</translation>
</message>
<message>
- <location/>
- <location filename="../tools/assistant/tools/assistant/bookmarkmanagerwidget.cpp" line="+258"/>
<source>Remove</source>
<translation>Usuń</translation>
</message>
<message>
- <location/>
<source>Import and Backup</source>
- <translation type="unfinished"></translation>
+ <translation>Import i kopie</translation>
</message>
<message>
- <location/>
- <location filename="../tools/assistant/tools/assistant/bookmarkmanagerwidget.cpp" line="-30"/>
<source>OK</source>
<translation>OK</translation>
</message>
<message>
- <location filename="../tools/assistant/tools/assistant/bookmarkmanagerwidget.cpp" line="-142"/>
<source>Import...</source>
<translation>Importuj...</translation>
</message>
<message>
- <location line="+1"/>
<source>Export...</source>
<translation>Exportuj...</translation>
</message>
<message>
- <location line="+112"/>
<source>Open File</source>
<translation>Otwórz plik</translation>
</message>
<message>
- <location line="+1"/>
- <location line="+16"/>
<source>Files (*.xbel)</source>
<translation>Pliki (*.xbel)</translation>
</message>
<message>
- <location line="-1"/>
<source>Save File</source>
<translation>Zachowaj plik</translation>
</message>
<message>
- <location line="+12"/>
<source>Qt Assistant</source>
<translation>Qt Assistant</translation>
</message>
<message>
- <location line="+1"/>
<source>Unable to save bookmarks.</source>
<translation>Nie można zachować zakładek.</translation>
</message>
<message>
- <location line="+30"/>
<source>You are goingto delete a Folder, this will also&lt;br&gt; remove it&apos;s content. Are you sure to continue?</source>
<translation>Zamierzasz usunąć katalog co spowoduje również&lt;br&gt;usunięcie jego zawartości. Czy chcesz kontynuować?</translation>
</message>
<message>
- <location line="+28"/>
<source>Delete Folder</source>
<translation>Usuń katalog</translation>
</message>
<message>
- <location line="+1"/>
<source>Rename Folder</source>
<translation>Zmień nazwę katalogu</translation>
</message>
<message>
- <location line="+2"/>
<source>Show Bookmark</source>
<translation>Pokaż zakładkę</translation>
</message>
<message>
- <location line="+1"/>
<source>Show Bookmark in New Tab</source>
<translation>Pokaż zakładkę w nowej karcie</translation>
</message>
<message>
- <location line="+2"/>
<source>Delete Bookmark</source>
<translation>Usuń zakładkę</translation>
</message>
<message>
- <location line="+1"/>
<source>Rename Bookmark</source>
<translation>Zmień nazwę zakładki</translation>
</message>
@@ -297,17 +254,14 @@ Powód:
<context>
<name>BookmarkModel</name>
<message>
- <location filename="../tools/assistant/tools/assistant/bookmarkmodel.cpp" line="+88"/>
<source>Name</source>
<translation>Nazwa</translation>
</message>
<message>
- <location line="+0"/>
<source>Address</source>
<translation>Adres</translation>
</message>
<message>
- <location line="+2"/>
<source>Bookmarks Menu</source>
<translation>Menu zakładek</translation>
</message>
@@ -315,22 +269,18 @@ Powód:
<context>
<name>BookmarkWidget</name>
<message>
- <location filename="../tools/assistant/tools/assistant/bookmarkwidget.ui"/>
<source>Bookmarks</source>
<translation>Zakładki</translation>
</message>
<message>
- <location/>
<source>Filter:</source>
<translation>Filtr:</translation>
</message>
<message>
- <location/>
<source>Add</source>
<translation>Dodaj</translation>
</message>
<message>
- <location/>
<source>Remove</source>
<translation>Usuń</translation>
</message>
@@ -338,48 +288,38 @@ Powód:
<context>
<name>CentralWidget</name>
<message>
- <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+121"/>
<source>Add new page</source>
<translation>Dodaj nową stronę</translation>
</message>
<message>
- <location line="+9"/>
<source>Close current page</source>
<translation>Zamknij bieżącą stronę</translation>
</message>
<message>
- <location line="+287"/>
<source>Print Document</source>
<translation>Wydrukuj dokument</translation>
</message>
<message>
- <location line="+126"/>
- <location line="+2"/>
<source>unknown</source>
<translation>nieznany</translation>
</message>
<message>
- <location line="+101"/>
<source>Add New Page</source>
<translation>Dodaj nową stronę</translation>
</message>
<message>
- <location line="+3"/>
<source>Close This Page</source>
<translation>Zamknij tą stronę</translation>
</message>
<message>
- <location line="+3"/>
<source>Close Other Pages</source>
<translation>Zamknij inne strony</translation>
</message>
<message>
- <location line="+5"/>
<source>Add Bookmark for this Page...</source>
<translation>Dodaj zakładkę dla tej strony...</translation>
</message>
<message>
- <location line="+264"/>
<source>Search</source>
<translation>Wyszukaj</translation>
</message>
@@ -387,62 +327,111 @@ Powód:
<context>
<name>CmdLineParser</name>
<message>
- <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+137"/>
+ <source>Usage: assistant [Options]
+
+-collectionFile file Uses the specified collection
+ file instead of the default one
+-showUrl url Shows the document with the
+ url.
+-enableRemoteControl Enables Assistant to be
+ remotely controlled.
+-show widget Shows the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-activate widget Activates the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-hide widget Hides the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-register helpFile Registers the specified help file
+ (.qch) in the given collection
+ file.
+-unregister helpFile Unregisters the specified help file
+ (.qch) from the give collection
+ file.
+-setCurrentFilter filter Set the filter as the active filter.
+-remove-search-index Removes the full text search index.
+-rebuild-search-index Re-builds the full text search index (potentially slow).
+-quiet Does not display any error or
+ status message.
+-help Displays this help.
+</source>
+ <translation>Sposób użycia: assistant [opcje]
+
+-collectionFile plik Używa podanego pliku kolekcji
+ zamiast domyślego.
+-showUrl url Pokazuje dokument z
+ url.
+-enableRemoteControl Umożliwia zdalną kontrolę
+ nad Assistantem.
+-show widżet Pokazuje podany widżet
+ dokowalny, którym może być &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; albo &quot;search&quot;.
+-activate widżet Aktywuje podany widżet
+ dokowalny, którym może być &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; albo &quot;search&quot;.
+-hide widżet Ukrywa podany widżet
+ dokowalny, którym może być &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; albo &quot;search&quot;.
+-register plikPomocy Rejestruje podany plik pomocy
+ (.qch) w podanym pliku kolekcji.
+-unregister plikPomocy Wyrejestrowuje podany plik pomocy
+ (.qch) w podanym pliku kolekcji.
+-setCurrentFilter filtr Ustawia filtr jako aktywny.
+-remove-search-index Usuwa indeks pełnego przeszukiwania tekstu.
+-rebuild-search-index Przebudowuje indeks pełnego
+ przeszukiwania tekstu (potencjalnie wolne).
+-quiet Nie pokazuje żadnych błędów ani
+ komunikatów o stanie.
+-help Pokazuje tę pomoc.
+</translation>
+ </message>
+ <message>
<source>Unknown option: %1</source>
<translation>Nieznana opcja: %1</translation>
</message>
<message>
- <location line="+33"/>
<source>The collection file &apos;%1&apos; does not exist.</source>
<translation>Plik kolekcji &quot;%1&quot; nie istnieje.</translation>
</message>
<message>
- <location line="+3"/>
<source>Missing collection file.</source>
<translation>Brak pliku kolekcji.</translation>
</message>
<message>
- <location line="+13"/>
<source>Invalid URL &apos;%1&apos;.</source>
<translation>Niepoprawny URL &quot;%1&quot;.</translation>
</message>
<message>
- <location line="+2"/>
<source>Missing URL.</source>
<translation>Brak URL.</translation>
</message>
<message>
- <location line="+36"/>
<source>Unknown widget: %1</source>
<translation>Nieznany widżet: %1</translation>
</message>
<message>
- <location line="+2"/>
<source>Missing widget.</source>
<translation>Brak widżetu.</translation>
</message>
<message>
- <location line="+23"/>
<source>The Qt help file &apos;%1&apos; does not exist.</source>
<translation>Plik pomocy Qt &quot;%1&quot; nie istnieje.</translation>
</message>
<message>
- <location line="+4"/>
<source>Missing help file.</source>
<translation>Brak pliku pomocy.</translation>
</message>
<message>
- <location line="+10"/>
<source>Missing filter argument.</source>
<translation>Brak argumentu dla filtru.</translation>
</message>
<message>
- <location line="+20"/>
<source>Error</source>
<translation>Błąd</translation>
</message>
<message>
- <location line="+2"/>
<source>Notice</source>
<translation>Uwaga</translation>
</message>
@@ -450,222 +439,433 @@ Powód:
<context>
<name>ContentWindow</name>
<message>
- <location filename="../tools/assistant/tools/assistant/contentwindow.cpp" line="+173"/>
<source>Open Link</source>
<translation>Otwórz odsyłacz</translation>
</message>
<message>
- <location line="+1"/>
<source>Open Link in New Tab</source>
<translation>Otwórz odsyłacz w nowej karcie</translation>
</message>
</context>
<context>
+ <name>ConversionWizard</name>
+ <message>
+ <source>Help Conversion Wizard</source>
+ <translation>Kreator konwersji pomocy</translation>
+ </message>
+ <message>
+ <source>Converting %1...</source>
+ <translation>Konwertowanie %1...</translation>
+ </message>
+ <message>
+ <source>Writing help collection file...</source>
+ <translation>Zapisywanie pliku kolekcji pomocy...</translation>
+ </message>
+ <message>
+ <source>Done.</source>
+ <translation>Zrobione.</translation>
+ </message>
+</context>
+<context>
+ <name>FilesPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Formularz</translation>
+ </message>
+ <message>
+ <source>Files:</source>
+ <translation>Pliki:</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Usuń</translation>
+ </message>
+ <message>
+ <source>Remove All</source>
+ <translation>Usuń wszystko</translation>
+ </message>
+ <message>
+ <source>Unreferenced Files</source>
+ <translation>Niezreferowane pliki</translation>
+ </message>
+ <message>
+ <source>Remove files which are neither referenced by a keyword nor by the TOC.</source>
+ <translation>Usuwa pliki do których nie odnoszą się słowa kluczowe ani spis treści.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; When removing images or stylesheets, be aware that those files are not directly referenced by the .adp or .dcf file.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;&lt;b&gt;Ostrzeżenie:&lt;/b&gt; Podczas usuwania obrazów oraz arkuszy stylów, bądź świadom, iż owe pliki nie są bezpośrednio używane przez plik .adp lub .dcf.&lt;/p&gt;</translation>
+ </message>
+</context>
+<context>
<name>FilterNameDialogClass</name>
<message>
- <location filename="../tools/assistant/tools/assistant/filternamedialog.ui"/>
<source>Add Filter Name</source>
<translation>Dodaj nazwę filtru</translation>
</message>
<message>
- <location/>
<source>Filter Name:</source>
<translation>Nazwa filtru:</translation>
</message>
</context>
<context>
+ <name>FilterPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Formularz</translation>
+ </message>
+ <message>
+ <source>Filter attributes for current documentation (comma separated list):</source>
+ <translation>Atrybuty filtru bieżącej dokumentacji (lista oddzielona przecinkami):</translation>
+ </message>
+ <message>
+ <source>Custom Filters</source>
+ <translation>Własne filtry</translation>
+ </message>
+ <message>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <source>2</source>
+ <translation>2</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>Dodaj</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Usuń</translation>
+ </message>
+ <message>
+ <source>Filter Settings</source>
+ <translation>Ustawienia filtru</translation>
+ </message>
+ <message>
+ <source>Specify the filter attributes for the documentation. If filter attributes are used, also define a custom filter for it. Both the filter attributes and the custom filters are optional.</source>
+ <translation type="unfinished">Podaj atrybuty filtru dla dokumentacji. </translation>
+ </message>
+ <message>
+ <source>Filter Name</source>
+ <translation>Nazwa filtru</translation>
+ </message>
+ <message>
+ <source>Filter Attributes</source>
+ <translation>Atrybuty filtru</translation>
+ </message>
+ <message>
+ <source>The custom filter &apos;%1&apos; is defined multiple times.</source>
+ <translation>Własny filtr &quot;%1&quot; jest wielokrotnie zdefiniowany.</translation>
+ </message>
+ <message>
+ <source>The attributes for custom filter &apos;%1&apos; are defined multiple times.</source>
+ <translation>Atrybuty własnego filtru &quot;%1&quot; są wielokrotnie zdefiniowane.</translation>
+ </message>
+ <message>
+ <source>unfiltered</source>
+ <comment>list of available documentation</comment>
+ <translation>nieprzefiltrowana</translation>
+ </message>
+</context>
+<context>
<name>FindWidget</name>
<message>
- <location filename="../tools/assistant/tools/assistant/findwidget.cpp" line="+85"/>
<source>Previous</source>
<translation>Poprzedni</translation>
</message>
<message>
- <location line="+6"/>
<source>Next</source>
<translation>Następny</translation>
</message>
<message>
- <location line="+5"/>
<source>Case Sensitive</source>
<translation>Uwzględniaj wielkość liter</translation>
</message>
<message>
- <location line="+9"/>
<source>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;img src=&quot;:/trolltech/assistant/images/wrap.png&quot;&gt;&amp;nbsp;Przeszukano od początku</translation>
+ </message>
+</context>
+<context>
+ <name>FinishPage</name>
+ <message>
+ <source>Converting File</source>
+ <translation>Konwertowanie pliku</translation>
+ </message>
+ <message>
+ <source>Creating the new Qt help files from the old ADP file.</source>
+ <translation>Tworzenie nowych plików pomocy Qt ze starego pliku ADP.</translation>
</message>
</context>
<context>
<name>FontPanel</name>
<message>
- <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/>
<source>Font</source>
<translation>Czcionka</translation>
</message>
<message>
- <location line="+11"/>
<source>&amp;Writing system</source>
<translation>Sys&amp;tem pisania</translation>
</message>
<message>
- <location line="+3"/>
<source>&amp;Family</source>
<translation>&amp;Rodzina</translation>
</message>
<message>
- <location line="+4"/>
<source>&amp;Style</source>
<translation>&amp;Styl</translation>
</message>
<message>
- <location line="+4"/>
<source>&amp;Point size</source>
<translation>&amp;Wielkość punktu</translation>
</message>
</context>
<context>
+ <name>GeneralPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Formularz</translation>
+ </message>
+ <message>
+ <source>Namespace:</source>
+ <translation>Przestrzeń nazw:</translation>
+ </message>
+ <message>
+ <source>Virtual Folder:</source>
+ <translation>Wirtualny katalog:</translation>
+ </message>
+ <message>
+ <source>General Settings</source>
+ <translation>Ustawienia ogólne</translation>
+ </message>
+ <message>
+ <source>Specify the namespace and the virtual folder for the documentation.</source>
+ <translation>Podaj przestrzeń nazw i wirtualny katalog dla dokumentacji.</translation>
+ </message>
+ <message>
+ <source>Namespace Error</source>
+ <translation>Błąd przestrzeni nazw</translation>
+ </message>
+ <message>
+ <source>The namespace contains some invalid characters.</source>
+ <translation>Przestrzeń nazw zawiera niepoprawne znaki.</translation>
+ </message>
+ <message>
+ <source>Virtual Folder Error</source>
+ <translation>Błąd wirtualnego katalogu</translation>
+ </message>
+ <message>
+ <source>The virtual folder contains some invalid characters.</source>
+ <translation>Wirtualny katalog zawiera niepoprawne znaki.</translation>
+ </message>
+</context>
+<context>
+ <name>HelpEngineWrapper</name>
+ <message>
+ <source>Unfiltered</source>
+ <translation>Nieprzefiltrowane</translation>
+ </message>
+</context>
+<context>
+ <name>HelpGenerator</name>
+ <message>
+ <source>Warning: %1</source>
+ <translation>Ostrzeżenie: %1</translation>
+ </message>
+</context>
+<context>
<name>HelpViewer</name>
<message>
- <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+58"/>
<source>&lt;title&gt;about:blank&lt;/title&gt;</source>
<translation>&lt;title&gt;o:pusty&lt;/title&gt;</translation>
</message>
<message>
- <location line="+6"/>
<source>&lt;title&gt;Error 404...&lt;/title&gt;&lt;div align=&quot;center&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;The page could not be found&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</source>
<translation>&lt;title&gt;Błąd 404...&lt;/title&gt;&lt;div align=&quot;center&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;Strona nie może być znaleziona&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</translation>
</message>
<message>
- <location filename="../tools/assistant/tools/assistant/helpviewer_qtb.cpp" line="+230"/>
<source>Copy &amp;Link Location</source>
<translation>Skopiuj &amp;odsyłacz</translation>
</message>
<message>
- <location line="+3"/>
<source>Open Link in New Tab Ctrl+LMB</source>
<translation>Otwórz odsyłacz w nowej karcie Ctrl+LMB</translation>
</message>
<message>
- <location filename="../tools/assistant/tools/assistant/helpviewer_qwv.cpp" line="+260"/>
<source>Open Link in New Tab</source>
<translation>Otwórz odsyłacz w nowej karcie</translation>
</message>
</context>
<context>
+ <name>HelpWindow</name>
+ <message>
+ <source>&lt;center&gt;&lt;b&gt;Wizard Assistant&lt;/b&gt;&lt;/center&gt;</source>
+ <translation>&lt;center&gt;&lt;b&gt;Asystent kreatora&lt;/b&gt;&lt;/center&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>IdentifierPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Formularz</translation>
+ </message>
+ <message>
+ <source>Create identifiers</source>
+ <translation>Utwórz identyfikatory</translation>
+ </message>
+ <message>
+ <source>Global prefix:</source>
+ <translation>Przedrostek globalny:</translation>
+ </message>
+ <message>
+ <source>Inherit prefix from file names</source>
+ <translation>Wywiedź przedrostek z nazw plików</translation>
+ </message>
+ <message>
+ <source>Identifiers</source>
+ <translation>Identyfikatory</translation>
+ </message>
+ <message>
+ <source>This page allows you to create identifiers from the keywords found in the .adp or .dcf file.</source>
+ <translation>Ta strona umożliwia utworzenie identyfikatorów na podstawie kluczy znalezionych w pliku .adp lub .dcf.</translation>
+ </message>
+</context>
+<context>
<name>IndexWindow</name>
<message>
- <location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+68"/>
<source>&amp;Look for:</source>
<translation>Wy&amp;szukaj:</translation>
</message>
<message>
- <location line="+74"/>
<source>Open Link</source>
<translation>Otwórz odsyłacz</translation>
</message>
<message>
- <location line="+1"/>
<source>Open Link in New Tab</source>
<translation>Otwórz odsyłacz w nowej karcie</translation>
</message>
</context>
<context>
+ <name>InputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Formularz</translation>
+ </message>
+ <message>
+ <source>File name:</source>
+ <translation>Nazwa pliku:</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Input File</source>
+ <translation>Plik wejściowy</translation>
+ </message>
+ <message>
+ <source>Specify the .adp or .dcf file you want to convert to the new Qt help project format and/or collection format.</source>
+ <translation>Podaj plik .adp albo .dcf, który chcesz skonwertować do nowego formatu projektu albo kolekcji pomocy Qt.</translation>
+ </message>
+ <message>
+ <source>Open file</source>
+ <translation>Otwórz plik</translation>
+ </message>
+ <message>
+ <source>Qt Help Files (*.adp *.dcf)</source>
+ <translation>Pliki pomocy Qt (*.adp *.dcf)</translation>
+ </message>
+ <message>
+ <source>File Open Error</source>
+ <translation>Błąd otwierania pliku</translation>
+ </message>
+ <message>
+ <source>The specified file could not be opened!</source>
+ <translation>Nie można otworzyć podanego pliku!</translation>
+ </message>
+ <message>
+ <source>File Parsing Error</source>
+ <translation>Błąd parsowania pliku</translation>
+ </message>
+ <message>
+ <source>Parsing error in line %1!</source>
+ <translation>Błąd parsowania w linii %1!</translation>
+ </message>
+</context>
+<context>
<name>InstallDialog</name>
<message>
- <location filename="../tools/assistant/tools/assistant/installdialog.ui"/>
- <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+78"/>
<source>Install Documentation</source>
<translation>Zainstaluj dokumentację</translation>
</message>
<message>
- <location filename="../tools/assistant/tools/assistant/installdialog.cpp" line="+33"/>
<source>Downloading documentation info...</source>
<translation>Pobieranie informacji o dokumentacji...</translation>
</message>
<message>
- <location line="+51"/>
<source>Download canceled.</source>
<translation>Anulowano pobieranie.</translation>
</message>
<message>
- <location line="+28"/>
- <location line="+79"/>
- <location line="+27"/>
<source>Done.</source>
<translation>Zrobione.</translation>
</message>
<message>
- <location line="-91"/>
<source>The file %1 already exists. Do you want to overwrite it?</source>
<translation>Plik %1 już istnieje. Czy chcesz go nadpisać?</translation>
</message>
<message>
- <location line="+11"/>
<source>Unable to save the file %1: %2.</source>
<translation>Nie można zachować pliku %1: %2.</translation>
</message>
<message>
- <location line="+8"/>
<source>Downloading %1...</source>
<translation>Pobieranie %1...</translation>
</message>
<message>
- <location line="+20"/>
- <location line="+42"/>
- <location line="+40"/>
<source>Download failed: %1.</source>
<translation>Pobieranie nie powiodło się: %1.</translation>
</message>
<message>
- <location line="-72"/>
<source>Documentation info file is corrupt!</source>
<translation>Plik z informacjami o dokumentacji jest uszkodzony!</translation>
</message>
<message>
- <location line="+37"/>
<source>Download failed: Downloaded file is corrupted.</source>
<translation>Pobieranie nie powiodło się: pobrany plik jest uszkodzony.</translation>
</message>
<message>
- <location line="+2"/>
<source>Installing documentation %1...</source>
<translation>Instalowanie dokumentacji %1...</translation>
</message>
<message>
- <location line="+23"/>
<source>Error while installing documentation:
%1</source>
<translation>Błąd podczas instalowania dokumentacji:
%1</translation>
</message>
<message>
- <location filename="../tools/assistant/tools/assistant/installdialog.ui"/>
<source>Available Documentation:</source>
<translation>Dostępna dokumentacja:</translation>
</message>
<message>
- <location/>
<source>Install</source>
<translation>Zainstaluj</translation>
</message>
<message>
- <location/>
<source>Cancel</source>
<translation>Anuluj</translation>
</message>
<message>
- <location/>
<source>Close</source>
<translation>Zamknij</translation>
</message>
<message>
- <location/>
<source>Installation Path:</source>
<translation>Ścieżka instalacji:</translation>
</message>
<message>
- <location/>
<source>...</source>
<translation>...</translation>
</message>
@@ -673,346 +873,363 @@ Powód:
<context>
<name>MainWindow</name>
<message>
- <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+123"/>
- <location line="+369"/>
<source>Index</source>
<translation>Indeks</translation>
</message>
<message>
- <location line="-363"/>
- <location line="+361"/>
<source>Contents</source>
<translation>Spis treści</translation>
</message>
<message>
- <location line="-354"/>
- <location line="+358"/>
<source>Bookmarks</source>
<translation>Zakładki</translation>
</message>
<message>
- <location line="+2"/>
<source>Search</source>
<translation>Wyszukaj</translation>
</message>
<message>
- <location line="-338"/>
- <location line="+680"/>
- <location line="+284"/>
<source>Qt Assistant</source>
<translation>Qt Assistant</translation>
</message>
<message>
- <location line="-705"/>
<source>Page Set&amp;up...</source>
<translation>&amp;Ustawienia strony...</translation>
</message>
<message>
- <location line="+2"/>
<source>Print Preview...</source>
<translation>Podgląd wydruku...</translation>
</message>
<message>
- <location line="+3"/>
<source>&amp;Print...</source>
<translation>Wy&amp;drukuj...</translation>
</message>
<message>
- <location line="-10"/>
<source>New &amp;Tab</source>
<translation>Nowa kar&amp;ta</translation>
</message>
<message>
- <location line="+17"/>
<source>&amp;Close Tab</source>
<translation>&amp;Zamknij kartę</translation>
</message>
<message>
- <location line="+5"/>
<source>&amp;Quit</source>
<translation>Za&amp;kończ</translation>
</message>
<message>
- <location line="+3"/>
<source>CTRL+Q</source>
<translation>CTRL+Q</translation>
</message>
<message>
- <location line="+6"/>
<source>&amp;Copy selected Text</source>
<translation>S&amp;kopiuj zaznaczony tekst</translation>
</message>
<message>
- <location line="+8"/>
<source>&amp;Find in Text...</source>
<translation>Znajdź w &amp;tekście...</translation>
</message>
<message>
- <location line="+2"/>
<source>&amp;Find</source>
<translation>&amp;Znajdź</translation>
</message>
<message>
- <location line="+4"/>
<source>Find &amp;Next</source>
<translation>Znajdź &amp;następny</translation>
</message>
<message>
- <location line="+4"/>
<source>Find &amp;Previous</source>
<translation>Znajdź &amp;poprzedni</translation>
</message>
<message>
- <location line="+5"/>
<source>Preferences...</source>
<translation>Ustawienia...</translation>
</message>
<message>
- <location line="+4"/>
<source>Zoom &amp;in</source>
<translation>Po&amp;większ</translation>
</message>
<message>
- <location line="+6"/>
<source>Zoom &amp;out</source>
<translation>Po&amp;mniejsz</translation>
</message>
<message>
- <location line="+6"/>
<source>Normal &amp;Size</source>
<translation>Normalny &amp;rozmiar</translation>
</message>
<message>
- <location line="+4"/>
<source>Ctrl+0</source>
<translation>Ctrl+0</translation>
</message>
<message>
- <location line="+5"/>
<source>ALT+C</source>
<translation>ALT+C</translation>
</message>
<message>
- <location line="+2"/>
<source>ALT+I</source>
<translation>ALT+I</translation>
</message>
<message>
- <location line="+4"/>
<source>ALT+S</source>
<translation>ALT+S</translation>
</message>
<message>
- <location line="+3"/>
<source>&amp;Home</source>
<translation>Strona &amp;startowa</translation>
</message>
<message>
- <location line="+4"/>
<source>&amp;Back</source>
<translation>&amp;Wstecz</translation>
</message>
<message>
- <location line="+5"/>
<source>&amp;Forward</source>
<translation>W &amp;przód</translation>
</message>
<message>
- <location line="+6"/>
<source>Sync with Table of Contents</source>
<translation>Znajdź bieżącą stronę w spisie treści</translation>
</message>
<message>
- <location line="+2"/>
<source>Sync</source>
- <translation type="unfinished"></translation>
+ <translation>Zsynchronizuj</translation>
</message>
<message>
- <location line="+5"/>
<source>Next Page</source>
<translation>Następna strona</translation>
</message>
<message>
- <location line="+1"/>
<source>Ctrl+Alt+Right</source>
<translation></translation>
</message>
<message>
- <location line="+3"/>
<source>Previous Page</source>
<translation>Poprzednia strona</translation>
</message>
<message>
- <location line="+1"/>
<source>Ctrl+Alt+Left</source>
<translation></translation>
</message>
<message>
- <location line="+596"/>
+ <source>&lt;center&gt;&lt;h3&gt;%1&lt;/h3&gt;&lt;p&gt;Version %2&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Could not register file &apos;%1&apos;: %2</source>
<translation>Nie można zarejestrować pliku &quot;%1&quot;: %2</translation>
</message>
<message>
- <location line="-589"/>
<source>About...</source>
<translation>Informacje o programie...</translation>
</message>
<message>
- <location line="+21"/>
<source>Navigation Toolbar</source>
<translation>Pasek do nawigacji</translation>
</message>
<message>
- <location line="+69"/>
<source>Toolbars</source>
<translation>Paski narzędzi</translation>
</message>
<message>
- <location line="+16"/>
<source>Filter Toolbar</source>
<translation>Pasek filtrowania</translation>
</message>
<message>
- <location line="+2"/>
<source>Filtered by:</source>
<translation>Przefiltrowane przez:</translation>
</message>
<message>
- <location line="+26"/>
<source>Address Toolbar</source>
<translation>Pasek adresu</translation>
</message>
<message>
- <location line="+4"/>
<source>Address:</source>
<translation>Adres:</translation>
</message>
<message>
- <location line="+112"/>
<source>Could not find the associated content item.</source>
<translation>Nie można znaleźć skojarzonego elementu zawartości.</translation>
</message>
<message>
- <location line="+60"/>
<source>About %1</source>
<translation>Informacje o %1</translation>
</message>
<message>
- <location line="+175"/>
<source>Updating search index</source>
<translation>Uaktualnianie indeksu wyszukiwawczego</translation>
</message>
<message>
- <location line="-669"/>
<source>Looking for Qt Documentation...</source>
<translation>Szukanie dokumentacji Qt...</translation>
</message>
<message>
- <location line="+227"/>
<source>&amp;Window</source>
<translation>&amp;Okno</translation>
</message>
<message>
- <location line="+3"/>
<source>Minimize</source>
<translation>Zminimalizuj</translation>
</message>
<message>
- <location line="+1"/>
<source>Ctrl+M</source>
<translation></translation>
</message>
<message>
- <location line="-2"/>
<source>Zoom</source>
<translation>Powiększenie</translation>
</message>
<message>
- <location line="-169"/>
<source>&amp;File</source>
<translation>&amp;Plik</translation>
</message>
<message>
- <location line="+32"/>
<source>&amp;Edit</source>
<translation>&amp;Edycja</translation>
</message>
<message>
- <location line="+27"/>
<source>&amp;View</source>
<translation>&amp;Widok</translation>
</message>
<message>
- <location line="+30"/>
<source>&amp;Go</source>
<translation>&amp;Nawigacja</translation>
</message>
<message>
- <location line="+2"/>
<source>ALT+Home</source>
<translation>ALT+Home</translation>
</message>
<message>
- <location line="+30"/>
<source>&amp;Bookmarks</source>
<translation>&amp;Zakładki</translation>
</message>
<message>
- <location line="+2"/>
<source>&amp;Help</source>
<translation>&amp;Pomoc</translation>
</message>
<message>
- <location line="-38"/>
<source>ALT+O</source>
<translation>ALT+O</translation>
</message>
</context>
<context>
+ <name>OutputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Formularz</translation>
+ </message>
+ <message>
+ <source>Project file name:</source>
+ <translation>Nazwa pliku projektu:</translation>
+ </message>
+ <message>
+ <source>Collection file name:</source>
+ <translation>Nazwa pliku kolekcji:</translation>
+ </message>
+ <message>
+ <source>Output File Names</source>
+ <translation>Nazwy plików wyjściowych</translation>
+ </message>
+ <message>
+ <source>Specify the file names for the output files.</source>
+ <translation>Podaj nazwy plików wyjściowych.</translation>
+ </message>
+ <message>
+ <source>Convert...</source>
+ <translation>Konwertuj...</translation>
+ </message>
+ <message>
+ <source>Qt Help Project File</source>
+ <translation>Plik projektu pomocy Qt</translation>
+ </message>
+ <message>
+ <source>Qt Help Collection Project File</source>
+ <translation>Plik projektu kolekcji pomocy Qt</translation>
+ </message>
+ <message>
+ <source>The specified file %1 already exist.
+
+Do you want to remove it?</source>
+ <translation>Podany plik %1 już istnieje.
+
+Czy chcesz go usunąć?</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Usuń</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>Anuluj</translation>
+ </message>
+</context>
+<context>
+ <name>PathPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Formularz</translation>
+ </message>
+ <message>
+ <source>File filters:</source>
+ <translation>Filtry pliku:</translation>
+ </message>
+ <message>
+ <source>Documentation source file paths:</source>
+ <translation>Ścieżki do plików źródłowych dokumentacji:</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>Dodaj</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>Usuń</translation>
+ </message>
+ <message>
+ <source>Source File Paths</source>
+ <translation>Ścieżki do plików źródłowych</translation>
+ </message>
+ <message>
+ <source>Specify the paths where the sources files are located. By default, all files in those directories matched by the file filter will be included.</source>
+ <translation>Podaj ścieżki do plików źródłowych. Domyślnie dołączone zostaną wszystkie pliki przepuszczone przez filtr w tych katalogach.</translation>
+ </message>
+ <message>
+ <source>Source File Path</source>
+ <translation>Ścieżka do pliku źródłowego</translation>
+ </message>
+</context>
+<context>
<name>PreferencesDialog</name>
<message>
- <location filename="../tools/assistant/tools/assistant/preferencesdialog.cpp" line="+252"/>
- <location line="+44"/>
<source>Add Documentation</source>
<translation>Dodaj dokumentację</translation>
</message>
<message>
- <location line="-44"/>
<source>Qt Compressed Help Files (*.qch)</source>
<translation>Skompresowane pliki pomocy Qt (*.qch)</translation>
</message>
<message>
- <location line="+38"/>
<source>The specified file is not a valid Qt Help File!</source>
<translation>Podany plik nie jest poprawnym plikiem pomocy Qt!</translation>
</message>
<message>
- <location line="-8"/>
<source>The namespace %1 is already registered!</source>
<translation>Przestrzeń nazw %1 jest już zarejestrowana!</translation>
</message>
<message>
- <location line="+32"/>
<source>Remove Documentation</source>
<translation>Usuń dokumentację</translation>
</message>
<message>
- <location line="+1"/>
<source>Some documents currently opened in Assistant reference the documentation you are attempting to remove. Removing the documentation will close those documents.</source>
<translation>Niektóre dokumenty otwarte w Assistant odwołują sie do dokumentacji którą próbujesz usunąć. Usunięcie dokumentacji spowoduje zamknięcie tych dokumentów.</translation>
</message>
<message>
- <location line="+2"/>
<source>Cancel</source>
<translation>Anuluj</translation>
</message>
<message>
- <location line="+1"/>
<source>OK</source>
<translation>OK</translation>
</message>
<message>
- <location line="+83"/>
<source>Use custom settings</source>
<translation>Użyj własnych ustawień</translation>
</message>
@@ -1020,130 +1237,272 @@ Powód:
<context>
<name>PreferencesDialogClass</name>
<message>
- <location filename="../tools/assistant/tools/assistant/preferencesdialog.ui"/>
<source>Preferences</source>
<translation>Ustawienia</translation>
</message>
<message>
- <location/>
<source>Fonts</source>
<translation>Czcionki</translation>
</message>
<message>
- <location/>
<source>Font settings:</source>
<translation>Ustawienia czcionki:</translation>
</message>
<message>
- <location/>
<source>Browser</source>
<translation>Przeglądarka</translation>
</message>
<message>
- <location/>
<source>Application</source>
<translation>Aplikacja</translation>
</message>
<message>
- <location/>
<source>Filters</source>
<translation>Filtry</translation>
</message>
<message>
- <location/>
<source>Filter:</source>
<translation>Filtr:</translation>
</message>
<message>
- <location/>
<source>Attributes:</source>
<translation>Atrybuty:</translation>
</message>
<message>
- <location/>
<source>1</source>
<translation>1</translation>
</message>
<message>
- <location/>
<source>Add</source>
<translation>Dodaj</translation>
</message>
<message>
- <location/>
<source>Remove</source>
<translation>Usuń</translation>
</message>
<message>
- <location/>
<source>Documentation</source>
<translation>Dokumentacja</translation>
</message>
<message>
- <location/>
<source>Registered Documentation:</source>
<translation>Zarejestrowana dokumentacja:</translation>
</message>
<message>
- <location/>
<source>Add...</source>
<translation>Dodaj...</translation>
</message>
<message>
- <location/>
<source>Options</source>
<translation>Opcje</translation>
</message>
<message>
- <location/>
<source>Current Page</source>
<translation>Bieżąca strona</translation>
</message>
<message>
- <location/>
<source>Restore to default</source>
<translation>Przywróć domyślną</translation>
</message>
<message>
- <location/>
<source>Homepage</source>
<translation>Strona startowa</translation>
</message>
<message>
- <location/>
<source>On help start:</source>
- <translation>Po uruchomieniu</translation>
+ <translation>Po uruchomieniu:</translation>
</message>
<message>
- <location/>
<source>Show my home page</source>
<translation>Pokaż stronę startową</translation>
</message>
<message>
- <location/>
<source>Show a blank page</source>
<translation>Pokaż pustą stronę</translation>
</message>
<message>
- <location/>
<source>Show my tabs from last session</source>
<translation>Pokaż moje karty z ostatniej sesji</translation>
</message>
<message>
- <location/>
<source>Blank Page</source>
<translation>Pusta strona</translation>
</message>
</context>
<context>
+ <name>QCollectionGenerator</name>
+ <message>
+ <source>Unknown token at line %1.</source>
+ <translation>Nieznany znak w linii %1.</translation>
+ </message>
+ <message>
+ <source>Unknown token at line %1. Expected &quot;QtHelpCollectionProject&quot;.</source>
+ <translation>Nieznany znak w linii %1. Oczekiwano &quot;QtHelpCollectionProject&quot;.</translation>
+ </message>
+ <message>
+ <source>Missing end tags.</source>
+ <translation>Brak tagu końcowego.</translation>
+ </message>
+ <message>
+ <source>Missing input or output file for help file generation.</source>
+ <translation>Brak pliku wejściowego lub wyjściowego potrzebnego do wygenerowania pliku pomocy.</translation>
+ </message>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>Brak nazwy pliku wyjściowego.</translation>
+ </message>
+ <message>
+ <source>Qt Collection Generator version 1.0 (Qt %1)
+</source>
+ <translation>Wersja 1.0 (Qt %1) generatora kolekcji Qt</translation>
+ </message>
+ <message>
+ <source>Missing collection config file.</source>
+ <translation>Brak pliku konfiguracyjnego kolekcji.</translation>
+ </message>
+ <message>
+ <source>
+Usage:
+
+qcollectiongenerator &lt;collection-config-file&gt; [options]
+
+ -o &lt;collection-file&gt; Generates a collection file
+ called &lt;collection-file&gt;. If
+ this option is not specified
+ a default name will be used.
+ -v Displays the version of
+ qcollectiongenerator.
+
+</source>
+ <translation>
+Sposób użycia:
+
+qcollectiongenerator &lt;plik-konfiguracyjny-kolekcji&gt; [opcje]
+
+ -o &lt;plik-kolekcji&gt; Generuje plik kolekcji
+ &lt;plik-kolekcji&gt;. Jeśli opcja ta
+ nie jest podana, użyta zostanie
+ domyślna nazwa.
+ -v Wyświetla wersję
+ qcollectiongeneratora.
+
+</translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>Nie można otworzyć %1.
+</translation>
+ </message>
+ <message>
+ <source>Reading collection config file...
+</source>
+ <translation>Wczytywanie pliku konfiguracyjnego kolekcji...</translation>
+ </message>
+ <message>
+ <source>Collection config file error: %1
+</source>
+ <translation>Błąd pliku konfiguracyjnego kolekcji: %1
+</translation>
+ </message>
+ <message>
+ <source>Generating help for %1...
+</source>
+ <translation>Generowanie pomocy dla %1...
+</translation>
+ </message>
+ <message>
+ <source>Creating collection file...
+</source>
+ <translation>Tworzenie pliku kolekcji...
+</translation>
+ </message>
+ <message>
+ <source>The file %1 cannot be overwritten.
+</source>
+ <translation>Nie można nadpisać pliku %1.
+</translation>
+ </message>
+ <message>
+ <source>Cannot open %1.
+</source>
+ <translation>Nie można otworzyć %1.
+</translation>
+ </message>
+ <message>
+ <source>Cannot open referenced image file %1.
+</source>
+ <translation>Nie można otworzyć pliku obrazu %1.
+</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpGenerator</name>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>Brak nazwy pliku wyjściowego.</translation>
+ </message>
+ <message>
+ <source>Qt Help Generator version 1.0 (Qt %1)
+</source>
+ <translation>Wersja 1.0 (Qt %1) generatora pomocy Qt</translation>
+ </message>
+ <message>
+ <source>Missing Qt help project file.</source>
+ <translation>Brak pliku projektu pomocy Qt.</translation>
+ </message>
+ <message>
+ <source>
+Usage:
+
+qhelpgenerator &lt;help-project-file&gt; [options]
+
+ -o &lt;compressed-file&gt; Generates a Qt compressed help
+ file called &lt;compressed-file&gt;.
+ If this option is not specified
+ a default name will be used.
+ -c Checks whether all links in HTML files
+ point to files in this help project.
+ -v Displays the version of
+ qhelpgenerator.
+
+</source>
+ <translation>
+Sposób użycia:
+
+qhelpgenerator &lt;plik-projektu-pomocy&gt; [opcje]
+
+ -o &lt;skompresowany-plik&gt; Generuje skompresowany plik
+ pomocy Qt &lt;skompresowany-plik&gt;.
+ Jeśli opcja ta nie jest podana, użyta
+ zostanie domyślna nazwa.
+ -c Sprawdza czy wszystkie odnośniki w plikach HTML
+ wskazują na pliki w tym projekcie pomocy.
+ -v Wyświetla wersję
+ qhelpgeneratora.
+
+</translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>Nie można otworzyć %1.
+</translation>
+ </message>
+ <message>
+ <source>Could not create output directory: %1
+</source>
+ <translation>Nie można utorzyć katalogu wyjściowego: %1
+</translation>
+ </message>
+</context>
+<context>
<name>RemoteControl</name>
<message>
- <location filename="../tools/assistant/tools/assistant/remotecontrol.cpp" line="+165"/>
<source>Debugging Remote Control</source>
<translation>Zdalne debugowanie</translation>
</message>
<message>
- <location line="+1"/>
<source>Received Command: %1 %2</source>
<translation>Odebrano komendę: %1 %2</translation>
</message>
@@ -1151,22 +1510,18 @@ Powód:
<context>
<name>SearchWidget</name>
<message>
- <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+210"/>
<source>&amp;Copy</source>
<translation>S&amp;kopiuj</translation>
</message>
<message>
- <location line="+4"/>
<source>Copy &amp;Link Location</source>
<translation>Skopiuj &amp;odsyłacz</translation>
</message>
<message>
- <location line="+4"/>
<source>Open Link in New Tab</source>
<translation>Otwórz odsyłacz w nowej karcie</translation>
</message>
<message>
- <location line="+8"/>
<source>Select All</source>
<translation>Zaznacz wszystko</translation>
</message>
@@ -1174,27 +1529,22 @@ Powód:
<context>
<name>TopicChooser</name>
<message>
- <location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+53"/>
<source>Choose a topic for &lt;b&gt;%1&lt;/b&gt;:</source>
<translation>Wybierz temat dla &lt;b&gt;%1&lt;/b&gt;:</translation>
</message>
<message>
- <location filename="../tools/assistant/tools/assistant/topicchooser.ui"/>
<source>Choose Topic</source>
<translation>Wybierz temat</translation>
</message>
<message>
- <location/>
<source>&amp;Topics</source>
<translation>&amp;Tematy</translation>
</message>
<message>
- <location/>
<source>&amp;Display</source>
<translation>&amp;Pokaż</translation>
</message>
<message>
- <location/>
<source>&amp;Close</source>
<translation>&amp;Zamknij</translation>
</message>
diff --git a/translations/assistant_ru.ts b/translations/assistant_ru.ts
index 6743986..b16f940 100644
--- a/translations/assistant_ru.ts
+++ b/translations/assistant_ru.ts
@@ -372,14 +372,14 @@ Reason:
вместо стандартного
-showUrl ссылка Отобразить документ по ссылке.
-enableRemoteControl Включение удалённого управления Assistant.
--show виджет Отображение указанного прикрепляемого виджета,
- который может быть &quot;contents&quot;, &quot;index&quot;,
+-show панель Отображение указанной панели,
+ которая может быть &quot;contents&quot;, &quot;index&quot;,
&quot;bookmarks&quot; или &quot;search&quot;.
--activate виджет Включение указанного прикрепляемого виджета,
- который может быть &quot;contents&quot;, &quot;index&quot;,
+-activate панель Включение указанной панели,
+ которая может быть &quot;contents&quot;, &quot;index&quot;,
&quot;bookmarks&quot; или &quot;search&quot;.
--hide виджет Скрытие указанного прикрепляемого виджета,
- который может быть &quot;contents&quot;, &quot;index&quot;,
+-hide панель Скрытие указанной панели,
+ которая может быть &quot;contents&quot;, &quot;index&quot;,
&quot;bookmarks&quot; или &quot;search&quot;.
-register файлСправки Регистрация указанного файла справки (.qch)
в данном файле коллекции.
diff --git a/translations/designer_cs.ts b/translations/designer_cs.ts
index 4099695..4099695 100755..100644
--- a/translations/designer_cs.ts
+++ b/translations/designer_cs.ts
diff --git a/translations/designer_ko.ts b/translations/designer_ko.ts
new file mode 100644
index 0000000..b14273f
--- /dev/null
+++ b/translations/designer_ko.ts
@@ -0,0 +1,5817 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>AbstractFindWidget</name>
+ <message>
+ <source>&amp;Previous</source>
+ <translation>이전 찾기(&amp;P)</translation>
+ </message>
+ <message>
+ <source>&amp;Next</source>
+ <translation>다음 찾기(&amp;N)</translation>
+ </message>
+ <message>
+ <source>&amp;Case sensitive</source>
+ <translation>대소문자 구분(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Whole &amp;words</source>
+ <translation>단어 단위로(&amp;W)</translation>
+ </message>
+ <message>
+ <source>&lt;img src=&quot;:/trolltech/shared/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
+ <translation>&lt;img src=&quot;:/trolltech/shared/images/wrap.png&quot;&gt;&amp;nbsp;검색 다시 시작됨</translation>
+ </message>
+</context>
+<context>
+ <name>AbstractItemEditor</name>
+ <message>
+ <source>Selectable</source>
+ <translation>선택가능</translation>
+ </message>
+ <message>
+ <source>Editable</source>
+ <translation>편집가능</translation>
+ </message>
+ <message>
+ <source>DragEnabled</source>
+ <translation>드래그가능</translation>
+ </message>
+ <message>
+ <source>DropEnabled</source>
+ <translation>드롭가능</translation>
+ </message>
+ <message>
+ <source>UserCheckable</source>
+ <translation>사용자선택가능</translation>
+ </message>
+ <message>
+ <source>Enabled</source>
+ <translation>활성화됨</translation>
+ </message>
+ <message>
+ <source>Tristate</source>
+ <translation>삼중상태</translation>
+ </message>
+ <message>
+ <source>Unchecked</source>
+ <translation>선택안됨</translation>
+ </message>
+ <message>
+ <source>PartiallyChecked</source>
+ <translation>부분선택됨</translation>
+ </message>
+ <message>
+ <source>Checked</source>
+ <translation>선택됨</translation>
+ </message>
+</context>
+<context>
+ <name>AddLinkDialog</name>
+ <message>
+ <source>Insert Link</source>
+ <translation>링크 삽입</translation>
+ </message>
+ <message>
+ <source>Title:</source>
+ <translation>제목:</translation>
+ </message>
+ <message>
+ <source>URL:</source>
+ <translation>URL:</translation>
+ </message>
+</context>
+<context>
+ <name>AppFontDialog</name>
+ <message>
+ <source>Additional Fonts</source>
+ <translation>추가 글꼴</translation>
+ </message>
+</context>
+<context>
+ <name>AppFontManager</name>
+ <message>
+ <source>&apos;%1&apos; is not a file.</source>
+ <translation>&apos;%1&apos;은(는) 파일이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>The font file &apos;%1&apos; does not have read permissions.</source>
+ <translation>글꼴 파일 &apos;%1&apos;을(를) 읽을 수 있는 권한이 없습니다.</translation>
+ </message>
+ <message>
+ <source>The font file &apos;%1&apos; is already loaded.</source>
+ <translation>글꼴 파일 &apos;%1&apos;을(를) 이미 불러왔습니다.</translation>
+ </message>
+ <message>
+ <source>The font file &apos;%1&apos; could not be loaded.</source>
+ <translation>글꼴 파일 &apos;%1&apos;을(를) 불러올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>&apos;%1&apos; is not a valid font id.</source>
+ <translation>&apos;%1&apos;은(는) 올바른 글꼴 ID가 아닙니다.</translation>
+ </message>
+ <message>
+ <source>There is no loaded font matching the id &apos;%1&apos;.</source>
+ <translation>불러온 글꼴 중 ID &apos;%1&apos;인 글꼴이 없습니다.</translation>
+ </message>
+ <message>
+ <source>The font &apos;%1&apos; (%2) could not be unloaded.</source>
+ <translation>글꼴 &apos;%1&apos; (%2)을(를) 닫을 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>AppFontWidget</name>
+ <message>
+ <source>Fonts</source>
+ <translation>글꼴</translation>
+ </message>
+ <message>
+ <source>Add font files</source>
+ <translation>글꼴 파일 추가</translation>
+ </message>
+ <message>
+ <source>Remove current font file</source>
+ <translation>현재 글꼴 파일 삭제</translation>
+ </message>
+ <message>
+ <source>Remove all font files</source>
+ <translation>모든 글꼴 파일 삭제</translation>
+ </message>
+ <message>
+ <source>Add Font Files</source>
+ <translation>글꼴 파일 추가</translation>
+ </message>
+ <message>
+ <source>Font files (*.ttf)</source>
+ <translation>글꼴 파일 (*.ttf)</translation>
+ </message>
+ <message>
+ <source>Error Adding Fonts</source>
+ <translation>글꼴 추가 오류</translation>
+ </message>
+ <message>
+ <source>Error Removing Fonts</source>
+ <translation>글꼴 삭제 오류</translation>
+ </message>
+ <message>
+ <source>Remove Fonts</source>
+ <translation>글꼴 삭제</translation>
+ </message>
+ <message>
+ <source>Would you like to remove all fonts?</source>
+ <translation>모든 글꼴을 삭제하시겠습니까?</translation>
+ </message>
+</context>
+<context>
+ <name>AppearanceOptionsWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>User Interface Mode</source>
+ <translation>사용자 인터페이스 모드</translation>
+ </message>
+</context>
+<context>
+ <name>AssistantClient</name>
+ <message>
+ <source>Unable to send request: Assistant is not responding.</source>
+ <translation>요청을 보낼 수 없음: Assistant가 응답하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The binary &apos;%1&apos; does not exist.</source>
+ <translation>실행 파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Unable to launch assistant (%1).</source>
+ <translation>Assistant(%1)를 시작할 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>BrushPropertyManager</name>
+ <message>
+ <source>No brush</source>
+ <translation>브러시 없음</translation>
+ </message>
+ <message>
+ <source>Solid</source>
+ <translation>단색</translation>
+ </message>
+ <message>
+ <source>Dense 1</source>
+ <translation>점무늬 1</translation>
+ </message>
+ <message>
+ <source>Dense 2</source>
+ <translation>점무늬 2</translation>
+ </message>
+ <message>
+ <source>Dense 3</source>
+ <translation>점무늬 3</translation>
+ </message>
+ <message>
+ <source>Dense 4</source>
+ <translation>점무늬 4</translation>
+ </message>
+ <message>
+ <source>Dense 5</source>
+ <translation>점무늬 5</translation>
+ </message>
+ <message>
+ <source>Dense 6</source>
+ <translation>점무늬 6</translation>
+ </message>
+ <message>
+ <source>Dense 7</source>
+ <translation>점무늬 7</translation>
+ </message>
+ <message>
+ <source>Horizontal</source>
+ <translation>수평선</translation>
+ </message>
+ <message>
+ <source>Vertical</source>
+ <translation>수직선</translation>
+ </message>
+ <message>
+ <source>Cross</source>
+ <translation>교차하는 가로 및 세로선</translation>
+ </message>
+ <message>
+ <source>Backward diagonal</source>
+ <translation>대각선 (오른쪽 아래로)</translation>
+ </message>
+ <message>
+ <source>Forward diagonal</source>
+ <translation>대각선 (오른쪽 위로)</translation>
+ </message>
+ <message>
+ <source>Crossing diagonal</source>
+ <translation>교차하는 대각선</translation>
+ </message>
+ <message>
+ <source>Style</source>
+ <translation>스타일</translation>
+ </message>
+ <message>
+ <source>Color</source>
+ <translation>색상</translation>
+ </message>
+ <message>
+ <source>[%1, %2]</source>
+ <translation>[%1, %2]</translation>
+ </message>
+</context>
+<context>
+ <name>Command</name>
+ <message>
+ <source>Add connection</source>
+ <translation>연결 추가</translation>
+ </message>
+ <message>
+ <source>Adjust connection</source>
+ <translation>연결 수정</translation>
+ </message>
+ <message>
+ <source>Delete connections</source>
+ <translation>연결 삭제</translation>
+ </message>
+ <message>
+ <source>Change source</source>
+ <translation>원본 변경</translation>
+ </message>
+ <message>
+ <source>Change target</source>
+ <translation>대상 변경</translation>
+ </message>
+ <message>
+ <source>Add &apos;%1&apos; to &apos;%2&apos;</source>
+ <extracomment>Command description for adding buttons to a QButtonGroup</extracomment>
+ <translation>&apos;%1&apos;을(를) &apos;%2&apos;에 추가</translation>
+ </message>
+ <message>
+ <source>Morph %1/&apos;%2&apos; into %3</source>
+ <extracomment>MorphWidgetCommand description</extracomment>
+ <translation>%1/&apos;%2&apos;을(를) %3(으)로 변형</translation>
+ </message>
+ <message>
+ <source>Insert &apos;%1&apos;</source>
+ <translation>&apos;%1&apos; 삽입</translation>
+ </message>
+ <message>
+ <source>Change Z-order of &apos;%1&apos;</source>
+ <translation>&apos;%1&apos;의 Z 순서 변경</translation>
+ </message>
+ <message>
+ <source>Raise &apos;%1&apos;</source>
+ <translation>&apos;%1&apos; 위로 올림</translation>
+ </message>
+ <message>
+ <source>Lower &apos;%1&apos;</source>
+ <translation>&apos;%1&apos; 아래로 내림</translation>
+ </message>
+ <message>
+ <source>Delete &apos;%1&apos;</source>
+ <translation>&apos;%1&apos; 삭제</translation>
+ </message>
+ <message>
+ <source>Reparent &apos;%1&apos;</source>
+ <translation>&apos;%1&apos; 부모 변경</translation>
+ </message>
+ <message>
+ <source>Promote to custom widget</source>
+ <translation>사용자 정의 위젯으로 승격</translation>
+ </message>
+ <message>
+ <source>Demote from custom widget</source>
+ <translation>사용자 정의 위젯에서 승격 해제</translation>
+ </message>
+ <message>
+ <source>Lay out using grid</source>
+ <translation>격자형으로 배치</translation>
+ </message>
+ <message>
+ <source>Lay out vertically</source>
+ <translation>수직으로 배치</translation>
+ </message>
+ <message>
+ <source>Lay out horizontally</source>
+ <translation>수평으로 배치</translation>
+ </message>
+ <message>
+ <source>Break layout</source>
+ <translation>레이아웃 풀기</translation>
+ </message>
+ <message>
+ <source>Simplify Grid Layout</source>
+ <translation>격자 레이아웃 간단하게 하기</translation>
+ </message>
+ <message>
+ <source>Move Page</source>
+ <translation>쪽 이동</translation>
+ </message>
+ <message>
+ <source>Delete Page</source>
+ <translation>쪽 삭제</translation>
+ </message>
+ <message>
+ <source>Page</source>
+ <translation>쪽</translation>
+ </message>
+ <message>
+ <source>Insert Page</source>
+ <translation>쪽 삽입</translation>
+ </message>
+ <message>
+ <source>Change Tab order</source>
+ <translation>탭 순서 변경</translation>
+ </message>
+ <message>
+ <source>Create Menu Bar</source>
+ <translation>메뉴 표시줄 생성</translation>
+ </message>
+ <message>
+ <source>Delete Menu Bar</source>
+ <translation>메뉴 표시줄 삭제</translation>
+ </message>
+ <message>
+ <source>Create Status Bar</source>
+ <translation>상태 표시줄 생성</translation>
+ </message>
+ <message>
+ <source>Delete Status Bar</source>
+ <translation>상태 표시줄 삭제</translation>
+ </message>
+ <message>
+ <source>Add Tool Bar</source>
+ <translation>도구 모음 추가</translation>
+ </message>
+ <message>
+ <source>Add Dock Window</source>
+ <translation>독 창 추가</translation>
+ </message>
+ <message>
+ <source>Adjust Size of &apos;%1&apos;</source>
+ <translation>&apos;%1&apos;의 크기 조정</translation>
+ </message>
+ <message>
+ <source>Change Form Layout Item Geometry</source>
+ <translation>폼 레이아웃 항목 크기 변경</translation>
+ </message>
+ <message>
+ <source>Change Layout Item Geometry</source>
+ <translation>레이아웃 항목 크기 변경</translation>
+ </message>
+ <message>
+ <source>Delete Subwindow</source>
+ <translation>하위 창 삭제</translation>
+ </message>
+ <message>
+ <source>page</source>
+ <translation>쪽</translation>
+ </message>
+ <message>
+ <source>Insert Subwindow</source>
+ <translation>하위 창 삽입</translation>
+ </message>
+ <message>
+ <source>subwindow</source>
+ <translation>subwindow</translation>
+ </message>
+ <message>
+ <source>Subwindow</source>
+ <translation>하위 창</translation>
+ </message>
+ <message>
+ <source>Change Table Contents</source>
+ <translation>표 내용 변경</translation>
+ </message>
+ <message>
+ <source>Change Tree Contents</source>
+ <translation>트리 내용 변경</translation>
+ </message>
+ <message>
+ <source>Add action</source>
+ <translation>동작 추가</translation>
+ </message>
+ <message>
+ <source>Remove action</source>
+ <translation>동작 삭제</translation>
+ </message>
+ <message>
+ <source>Add menu</source>
+ <translation>메뉴 추가</translation>
+ </message>
+ <message>
+ <source>Remove menu</source>
+ <translation>메뉴 삭제</translation>
+ </message>
+ <message>
+ <source>Create submenu</source>
+ <translation>하위 메뉴 생성</translation>
+ </message>
+ <message>
+ <source>Delete Tool Bar</source>
+ <translation>도구 모음 삭제</translation>
+ </message>
+ <message>
+ <source>Change layout of &apos;%1&apos; from %2 to %3</source>
+ <translation>&apos;%1&apos;의 레이아웃을 %2에서 %3(으)로 변경</translation>
+ </message>
+ <message>
+ <source>Set action text</source>
+ <translation>동작 텍스트 설정</translation>
+ </message>
+ <message>
+ <source>Insert action</source>
+ <translation>동작 삽입</translation>
+ </message>
+ <message>
+ <source>Move action</source>
+ <translation>동작 이동</translation>
+ </message>
+ <message>
+ <source>Change Title</source>
+ <translation>제목 변경</translation>
+ </message>
+ <message>
+ <source>Insert Menu</source>
+ <translation>메뉴 추가</translation>
+ </message>
+ <message>
+ <source>Changed &apos;%1&apos; of &apos;%2&apos;</source>
+ <translation>&apos;%2&apos;의 &apos;%1&apos; 변경</translation>
+ </message>
+ <message numerus="yes">
+ <source>Changed &apos;%1&apos; of %n objects</source>
+ <translation>
+ <numerusform>객체 %n개의 &apos;%1&apos; 변경</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Reset &apos;%1&apos; of &apos;%2&apos;</source>
+ <translation>&apos;%2&apos;의 &apos;%1&apos; 초기화</translation>
+ </message>
+ <message numerus="yes">
+ <source>Reset &apos;%1&apos; of %n objects</source>
+ <translation>
+ <numerusform>객체 %n개의 &apos;%1&apos; 초기화</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Add dynamic property &apos;%1&apos; to &apos;%2&apos;</source>
+ <translation>동적 속성 &apos;%1&apos;을(를) &apos;%2&apos;에 추가</translation>
+ </message>
+ <message numerus="yes">
+ <source>Add dynamic property &apos;%1&apos; to %n objects</source>
+ <translation>
+ <numerusform>동적 속성 %1을(를) 객체 %n개에 추가</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Remove dynamic property &apos;%1&apos; from &apos;%2&apos;</source>
+ <translation>동적 속성 &apos;%1&apos;을(를) &apos;%2&apos;에서 삭제</translation>
+ </message>
+ <message numerus="yes">
+ <source>Remove dynamic property &apos;%1&apos; from %n objects</source>
+ <translation>
+ <numerusform>동적 속성 &apos;%1&apos;을(를) 객체 %n개에서 삭제</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Change script</source>
+ <translation>스크립트 변경</translation>
+ </message>
+ <message>
+ <source>Change signals/slots</source>
+ <translation>시그널/슬롯 변경</translation>
+ </message>
+ <message>
+ <source>Change signal</source>
+ <translation>시그널 변경</translation>
+ </message>
+ <message>
+ <source>Change slot</source>
+ <translation>슬롯 변경</translation>
+ </message>
+ <message>
+ <source>Change signal-slot connection</source>
+ <translation>시그널-슬롯 연결 변경</translation>
+ </message>
+ <message>
+ <source>Change sender</source>
+ <translation>송신자 변경</translation>
+ </message>
+ <message>
+ <source>Change receiver</source>
+ <translation>수신자 변경</translation>
+ </message>
+ <message>
+ <source>Create button group</source>
+ <translation>단추 그룹 생성</translation>
+ </message>
+ <message>
+ <source>Break button group</source>
+ <translation>단추 그룹 풀기</translation>
+ </message>
+ <message>
+ <source>Break button group &apos;%1&apos;</source>
+ <translation>단추 그룹 &apos;%1&apos; 풀기</translation>
+ </message>
+ <message>
+ <source>Add buttons to group</source>
+ <translation>단추를 그룹에 추가</translation>
+ </message>
+ <message>
+ <source>Remove buttons from group</source>
+ <translation>단추를 그룹에서 삭제</translation>
+ </message>
+ <message>
+ <source>Remove &apos;%1&apos; from &apos;%2&apos;</source>
+ <extracomment>Command description for removing buttons from a QButtonGroup</extracomment>
+ <translation>&apos;%2&apos;에서 &apos;%1&apos; 삭제</translation>
+ </message>
+</context>
+<context>
+ <name>ConnectDialog</name>
+ <message>
+ <source>Configure Connection</source>
+ <translation>연결 설정</translation>
+ </message>
+ <message>
+ <source>GroupBox</source>
+ <translation>그룹상자</translation>
+ </message>
+ <message>
+ <source>Edit...</source>
+ <translation>편집...</translation>
+ </message>
+ <message>
+ <source>Show signals and slots inherited from QWidget</source>
+ <translation>QWidget에서 상속받은 시그널과 슬롯 보이기</translation>
+ </message>
+</context>
+<context>
+ <name>ConnectionDelegate</name>
+ <message>
+ <source>&lt;object&gt;</source>
+ <translation>&lt;객체&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;signal&gt;</source>
+ <translation>&lt;시그널&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;slot&gt;</source>
+ <translation>&lt;슬롯&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>DPI_Chooser</name>
+ <message>
+ <source>Standard (96 x 96)</source>
+ <extracomment>Embedded device standard screen resolution</extracomment>
+ <translation>표준 (96 x 96)</translation>
+ </message>
+ <message>
+ <source>Greenphone (179 x 185)</source>
+ <extracomment>Embedded device screen resolution</extracomment>
+ <translation>Greenphone (179 x 185)</translation>
+ </message>
+ <message>
+ <source>High (192 x 192)</source>
+ <extracomment>Embedded device high definition screen resolution</extracomment>
+ <translation>고해상도 (192 x 192)</translation>
+ </message>
+</context>
+<context>
+ <name>Designer</name>
+ <message>
+ <source>Unable to launch %1.</source>
+ <translation>%1을(를) 실행할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 timed out.</source>
+ <translation>%1의 시간이 초과되었습니다.</translation>
+ </message>
+ <message>
+ <source>Custom Widgets</source>
+ <translation>사용자 정의 위젯</translation>
+ </message>
+ <message>
+ <source>Promoted Widgets</source>
+ <translation>승격된 위젯</translation>
+ </message>
+ <message>
+ <source>Qt Designer</source>
+ <translation>Qt Designer</translation>
+ </message>
+ <message>
+ <source>This file contains top level spacers.&lt;br&gt;They have &lt;b&gt;NOT&lt;/b&gt; been saved into the form.</source>
+ <translation>이 파일에는 최상위 단계 스페이서가 포함되어 있습니다.&lt;br&gt;이들은 폼에 저장되지 &lt;b&gt;않았습니다&lt;/b&gt;.</translation>
+ </message>
+ <message>
+ <source>Perhaps you forgot to create a layout?</source>
+ <translation>레이아웃을 만들지 않았습니까?</translation>
+ </message>
+ <message>
+ <source>Invalid UI file: The root element &lt;ui&gt; is missing.</source>
+ <translation>잘못된 UI 파일: 최상위 원소 &lt;ui&gt;가 없습니다.</translation>
+ </message>
+ <message>
+ <source>An error has occurred while reading the UI file at line %1, column %2: %3</source>
+ <translation>UI 파일의 %1번째 줄, %2번째 칸을 읽는 중 오류가 발생하였습니다: %3</translation>
+ </message>
+ <message>
+ <source>This file cannot be read because it was created using %1.</source>
+ <translation>이 파일은 %1을(를) 사용하여 만들었기 때문에 읽을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>This file was created using Designer from Qt-%1 and cannot be read.</source>
+ <translation>이 파일은 Qt %1의 Designer로 만들었기 때문에 읽을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The converted file could not be read.</source>
+ <translation>변환된 파일을 읽을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>This file was created using Designer from Qt-%1 and will be converted to a new form by Qt Designer.</source>
+ <translation>이 파일은 Qt %1의 Designer로 만들었으며, Qt Designer에서 새로운 폼으로 변환할 것입니다.</translation>
+ </message>
+ <message>
+ <source>The old form has not been touched, but you will have to save the form under a new name.</source>
+ <translation>이전 폼 파일은 변경되지 않았습니다. 새로운 폼을 저장하려면 다른 이름으로 저장하십시오.</translation>
+ </message>
+ <message>
+ <source>This file was created using Designer from Qt-%1 and could not be read:
+%2</source>
+ <translation>이 파일은 Qt %1의 Designer로 만들어졌으며 읽을 수 없습니다:
+%2</translation>
+ </message>
+ <message>
+ <source>Please run it through &lt;b&gt;uic3&amp;nbsp;-convert&lt;/b&gt; to convert it to Qt-4&apos;s ui format.</source>
+ <translation>&lt;b&gt;uic3&amp;nbsp;-convert&lt;/b&gt; 명령을 실행하여 Qt 4의 UI 형식으로 변환하십시오.</translation>
+ </message>
+ <message>
+ <source>This file cannot be read because the extra info extension failed to load.</source>
+ <translation>추가 정보 확장을 불러올 수 없으므로 이 파일을 읽을 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>DesignerMetaEnum</name>
+ <message>
+ <source>%1 is not a valid enumeration value of &apos;%2&apos;.</source>
+ <translation>%1은(는) 열거형 &apos;%2&apos;의 올바른 값이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>&apos;%1&apos; could not be converted to an enumeration value of type &apos;%2&apos;.</source>
+ <translation>&apos;%1&apos;을(를) 열거형 &apos;%2&apos;의 값으로 변환할 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>DesignerMetaFlags</name>
+ <message>
+ <source>&apos;%1&apos; could not be converted to a flag value of type &apos;%2&apos;.</source>
+ <translation>&apos;%1&apos;을(를) 플래그 형식 &apos;%2&apos;의 값으로 변환할 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>DeviceProfile</name>
+ <message>
+ <source>&apos;%1&apos; is not a number.</source>
+ <extracomment>Reading a number for an embedded device profile</extracomment>
+ <translation>&apos;%1&apos;은(는) 숫자가 아닙니다.</translation>
+ </message>
+ <message>
+ <source>An invalid tag &lt;%1&gt; was encountered.</source>
+ <translation>잘못된 태그 &lt;%1&gt;이(가) 있습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>DeviceProfileDialog</name>
+ <message>
+ <source>&amp;Family</source>
+ <translation>종류(&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;Point Size</source>
+ <translation>포인트 크기(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Style</source>
+ <translation>스타일</translation>
+ </message>
+ <message>
+ <source>Device DPI</source>
+ <translation>장치 DPI</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>이름</translation>
+ </message>
+</context>
+<context>
+ <name>DeviceSkin</name>
+ <message>
+ <source>The image file &apos;%1&apos; could not be loaded.</source>
+ <translation>그림 파일 &apos;%1&apos;을(를) 불러올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The skin directory &apos;%1&apos; does not contain a configuration file.</source>
+ <translation>스킨 디렉터리 &apos;%1&apos;에 설정 파일이 없습니다.</translation>
+ </message>
+ <message>
+ <source>The skin configuration file &apos;%1&apos; could not be opened.</source>
+ <translation>스킨 설정 파일 &apos;%1&apos;을(를) 열 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The skin configuration file &apos;%1&apos; could not be read: %2</source>
+ <translation>스킨 설정 파일 &apos;%1&apos;을(를) 읽을 수 없습니다: %2</translation>
+ </message>
+ <message>
+ <source>Syntax error: %1</source>
+ <translation>문법 오류: %1</translation>
+ </message>
+ <message>
+ <source>The skin &quot;up&quot; image file &apos;%1&apos; does not exist.</source>
+ <translation>스킨 &quot;up&quot; 그림 파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The skin &quot;down&quot; image file &apos;%1&apos; does not exist.</source>
+ <translation>스킨 &quot;down&quot; 그림 파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The skin &quot;closed&quot; image file &apos;%1&apos; does not exist.</source>
+ <translation>스킨 &quot;closed&quot; 그림 파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The skin cursor image file &apos;%1&apos; does not exist.</source>
+ <translation>스킨 커서 그림 파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Syntax error in area definition: %1</source>
+ <translation>영역 지정 문법 오류: %1</translation>
+ </message>
+ <message>
+ <source>Mismatch in number of areas, expected %1, got %2.</source>
+ <translation>영역 개수가 일치하지 않습니다: %1개를 예상하였지만 %2개 정의되었습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>EmbeddedOptionsControl</name>
+ <message>
+ <source>&lt;html&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Font&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%1, %2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Style&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Resolution&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%4 x %5&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/html&gt;</source>
+ <extracomment>Format embedded device profile description</extracomment>
+ <translation>&lt;html&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;글꼴&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%1, %2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;스타일&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;해상도&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%4 x %5&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/html&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>EmbeddedOptionsPage</name>
+ <message>
+ <source>Embedded Design</source>
+ <extracomment>Tab in preferences dialog</extracomment>
+ <translation>임베디드 디자인</translation>
+ </message>
+ <message>
+ <source>Device Profiles</source>
+ <extracomment>EmbeddedOptionsControl group box&quot;</extracomment>
+ <translation>장치 프로필</translation>
+ </message>
+</context>
+<context>
+ <name>FontPanel</name>
+ <message>
+ <source>Font</source>
+ <translation>글꼴</translation>
+ </message>
+ <message>
+ <source>&amp;Writing system</source>
+ <translation>문자 체계(&amp;W)</translation>
+ </message>
+ <message>
+ <source>&amp;Family</source>
+ <translation>글꼴 종류(&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;Style</source>
+ <translation>스타일(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Point size</source>
+ <translation>포인트 크기(&amp;P)</translation>
+ </message>
+</context>
+<context>
+ <name>FontPropertyManager</name>
+ <message>
+ <source>PreferDefault</source>
+ <translation>기본값우선</translation>
+ </message>
+ <message>
+ <source>NoAntialias</source>
+ <translation>앤티에일리어싱없음</translation>
+ </message>
+ <message>
+ <source>PreferAntialias</source>
+ <translation>앤티에일리어싱선호</translation>
+ </message>
+ <message>
+ <source>Antialiasing</source>
+ <translation>앤티에일리어싱</translation>
+ </message>
+</context>
+<context>
+ <name>FormBuilder</name>
+ <message>
+ <source>Invalid stretch value for &apos;%1&apos;: &apos;%2&apos;</source>
+ <extracomment>Parsing layout stretch values
+----------
+Parsing layout stretch values
+----------
+Parsing layout stretch values</extracomment>
+ <translation>&apos;%1&apos;의 stretch 값이 잘못됨: &apos;%2&apos;</translation>
+ </message>
+ <message>
+ <source>Invalid minimum size for &apos;%1&apos;: &apos;%2&apos;</source>
+ <extracomment>Parsing grid layout minimum size values
+----------
+Parsing grid layout minimum size values
+----------
+Parsing grid layout minimum size values</extracomment>
+ <translation>&apos;%1&apos;의 최소 크기가 잘못됨: &apos;%2&apos;</translation>
+ </message>
+</context>
+<context>
+ <name>FormEditorOptionsPage</name>
+ <message>
+ <source>%1 %</source>
+ <extracomment>Zoom percentage</extracomment>
+ <translation>%1 %</translation>
+ </message>
+ <message>
+ <source>Preview Zoom</source>
+ <translation>크기 미리 보기</translation>
+ </message>
+ <message>
+ <source>Default Zoom</source>
+ <translation>기본 크기</translation>
+ </message>
+ <message>
+ <source>Forms</source>
+ <extracomment>Tab in preferences dialog</extracomment>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Default Grid</source>
+ <translation>기본 격자</translation>
+ </message>
+</context>
+<context>
+ <name>FormLayoutRowDialog</name>
+ <message>
+ <source>Add Form Layout Row</source>
+ <translation>폼 레이아웃 행 추가하기</translation>
+ </message>
+ <message>
+ <source>&amp;Label text:</source>
+ <translation>레이블 텍스트(&amp;L):</translation>
+ </message>
+ <message>
+ <source>Field &amp;type:</source>
+ <translation>필드 형식(&amp;T):</translation>
+ </message>
+ <message>
+ <source>&amp;Field name:</source>
+ <translation>필드 이름(&amp;F):</translation>
+ </message>
+ <message>
+ <source>&amp;Buddy:</source>
+ <translation>친구(&amp;B):</translation>
+ </message>
+ <message>
+ <source>&amp;Row:</source>
+ <translation>행(&amp;R):</translation>
+ </message>
+ <message>
+ <source>Label &amp;name:</source>
+ <translation>레이블 이름(&amp;N):</translation>
+ </message>
+</context>
+<context>
+ <name>FormWindow</name>
+ <message>
+ <source>Unexpected element &lt;%1&gt;</source>
+ <translation>예상하지 못한 원소 &lt;%1&gt;</translation>
+ </message>
+ <message>
+ <source>Error while pasting clipboard contents at line %1, column %2: %3</source>
+ <translation>클립보드 내용을 붙여넣는 중 %1번째 줄 %2번째 칸에서 오류 발생: %3</translation>
+ </message>
+</context>
+<context>
+ <name>FormWindowSettings</name>
+ <message>
+ <source>Form Settings</source>
+ <translation>폼 설정</translation>
+ </message>
+ <message>
+ <source>Layout &amp;Default</source>
+ <translation>레이아웃 기본값(&amp;D)</translation>
+ </message>
+ <message>
+ <source>&amp;Spacing:</source>
+ <translation>간격(&amp;S):</translation>
+ </message>
+ <message>
+ <source>&amp;Margin:</source>
+ <translation>여백(&amp;M):</translation>
+ </message>
+ <message>
+ <source>&amp;Layout Function</source>
+ <translation>레이아웃 함수(&amp;L)</translation>
+ </message>
+ <message>
+ <source>Ma&amp;rgin:</source>
+ <translation>여백(&amp;R):</translation>
+ </message>
+ <message>
+ <source>Spa&amp;cing:</source>
+ <translation>간격(&amp;C):</translation>
+ </message>
+ <message>
+ <source>&amp;Pixmap Function</source>
+ <translation>픽스맵 함수(&amp;P)</translation>
+ </message>
+ <message>
+ <source>&amp;Include Hints</source>
+ <translation>힌트 포함(&amp;I)</translation>
+ </message>
+ <message>
+ <source>Grid</source>
+ <translation>격자</translation>
+ </message>
+ <message>
+ <source>Embedded Design</source>
+ <translation>임베디드 디자인</translation>
+ </message>
+ <message>
+ <source>&amp;Author</source>
+ <translation>작성자(&amp;A)</translation>
+ </message>
+</context>
+<context>
+ <name>IconSelector</name>
+ <message>
+ <source>All Pixmaps (</source>
+ <translation>모든 픽스맵 (</translation>
+ </message>
+</context>
+<context>
+ <name>ItemPropertyBrowser</name>
+ <message>
+ <source>XX Icon Selected off</source>
+ <extracomment>Sample string to determinate the width for the first column of the list item property browser</extracomment>
+ <translation>XX 아이콘 선택 해제됨</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindowBase</name>
+ <message>
+ <source>Main</source>
+ <extracomment>Not currently used (main tool bar)</extracomment>
+ <translation>주</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation>파일</translation>
+ </message>
+ <message>
+ <source>Edit</source>
+ <translation>편집</translation>
+ </message>
+ <message>
+ <source>Tools</source>
+ <translation>도구</translation>
+ </message>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Qt Designer</source>
+ <translation>Qt Designer</translation>
+ </message>
+</context>
+<context>
+ <name>NewForm</name>
+ <message>
+ <source>Show this Dialog on Startup</source>
+ <translation>시작할 때 이 대화상자 보이기</translation>
+ </message>
+ <message>
+ <source>C&amp;reate</source>
+ <translation>생성(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Recent</source>
+ <translation>최근 항목</translation>
+ </message>
+ <message>
+ <source>New Form</source>
+ <translation>새 폼</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>닫기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Open...</source>
+ <translation>열기(&amp;O)...</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Forms</source>
+ <translation>최근 폼(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Read error</source>
+ <translation>읽기 오류</translation>
+ </message>
+ <message>
+ <source>A temporary form file could not be created in %1.</source>
+ <translation>%1에 임시 폼 파일을 만들 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The temporary form file %1 could not be written.</source>
+ <translation>임시 폼 파일 %1에 쓸 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>ObjectInspectorModel</name>
+ <message>
+ <source>Object</source>
+ <translation>객체</translation>
+ </message>
+ <message>
+ <source>Class</source>
+ <translation>클래스</translation>
+ </message>
+ <message>
+ <source>separator</source>
+ <translation>구분자</translation>
+ </message>
+ <message>
+ <source>&lt;noname&gt;</source>
+ <translation>&lt;이름없음&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>ObjectNameDialog</name>
+ <message>
+ <source>Change Object Name</source>
+ <translation>객체 이름 바꾸기</translation>
+ </message>
+ <message>
+ <source>Object Name</source>
+ <translation>객체 이름</translation>
+ </message>
+</context>
+<context>
+ <name>PluginDialog</name>
+ <message>
+ <source>Plugin Information</source>
+ <translation>플러그인 정보</translation>
+ </message>
+ <message>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+</context>
+<context>
+ <name>PreferencesDialog</name>
+ <message>
+ <source>Preferences</source>
+ <translation>환경 설정</translation>
+ </message>
+</context>
+<context>
+ <name>PreviewConfigurationWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Print/Preview Configuration</source>
+ <translation>인쇄/미리보기 설정</translation>
+ </message>
+ <message>
+ <source>Style</source>
+ <translation>스타일</translation>
+ </message>
+ <message>
+ <source>Style sheet</source>
+ <translation>스타일시트</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Device skin</source>
+ <translation>장치 스킨</translation>
+ </message>
+</context>
+<context>
+ <name>PromotionModel</name>
+ <message>
+ <source>Not used</source>
+ <extracomment>Usage of promoted widgets</extracomment>
+ <translation>사용되지 않음</translation>
+ </message>
+</context>
+<context>
+ <name>Q3WizardContainer</name>
+ <message>
+ <source>Page</source>
+ <translation>쪽</translation>
+ </message>
+</context>
+<context>
+ <name>QAbstractFormBuilder</name>
+ <message>
+ <source>Unexpected element &lt;%1&gt;</source>
+ <translation>예상하지 못한 원소 &lt;%1&gt;</translation>
+ </message>
+ <message>
+ <source>An error has occurred while reading the UI file at line %1, column %2: %3</source>
+ <translation>UI 파일의 %1번째 줄, %2번째 칸을 읽는 중 오류가 발생하였습니다: %3</translation>
+ </message>
+ <message>
+ <source>Invalid UI file: The root element &lt;ui&gt; is missing.</source>
+ <translation>잘못된 UI 파일: root 원소 &lt;ui&gt;가 없습니다.</translation>
+ </message>
+ <message>
+ <source>The creation of a widget of the class &apos;%1&apos; failed.</source>
+ <translation>클래스 &apos;%1&apos;을(를) 사용하는 위젯을 만들 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Attempt to add child that is not of class QWizardPage to QWizard.</source>
+ <translation>QWizardPage에서 상속받지 않은 클래스를 QWizard에 추가할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Attempt to add a layout to a widget &apos;%1&apos; (%2) which already has a layout of non-box type %3.
+This indicates an inconsistency in the ui-file.</source>
+ <translation>상자 형식이 아닌 레이아웃 %3을(를) 가지고 있는 객체 &apos;%1&apos; (%2)에 레이아웃을 추가할 수 없습니다.
+UI 파일의 일관성이 깨졌을 수도 있습니다.</translation>
+ </message>
+ <message>
+ <source>Empty widget item in %1 &apos;%2&apos;.</source>
+ <translation>%1 &apos;%2&apos;에 빈 위젯 항목이 있습니다.</translation>
+ </message>
+ <message>
+ <source>Flags property are not supported yet.</source>
+ <translation>플래그 속성은 지원하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>While applying tab stops: The widget &apos;%1&apos; could not be found.</source>
+ <translation>탭 멈춤을 적용하는 중: 위젯 &apos;%1&apos;을(를) 찾을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Invalid QButtonGroup reference &apos;%1&apos; referenced by &apos;%2&apos;.</source>
+ <translation>&apos;%2&apos;에서 잘못된 QButtonGroup 참조 &apos;%1&apos;을(를) 참조하고 있습니다.</translation>
+ </message>
+ <message>
+ <source>This version of the uitools library is linked without script support.</source>
+ <translation>이 버전의 uitools 라이브러리는 스크립트를 지원하지 않습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QAxWidgetPlugin</name>
+ <message>
+ <source>ActiveX control</source>
+ <translation>ActiveX 컨트롤</translation>
+ </message>
+ <message>
+ <source>ActiveX control widget</source>
+ <translation>ActiveX 컨트롤 위젯</translation>
+ </message>
+</context>
+<context>
+ <name>QAxWidgetTaskMenu</name>
+ <message>
+ <source>Set Control</source>
+ <translation>컨트롤 설정</translation>
+ </message>
+ <message>
+ <source>Reset Control</source>
+ <translation>컨트롤 초기화</translation>
+ </message>
+ <message>
+ <source>Licensed Control</source>
+ <translation>라이선스된 컨트롤</translation>
+ </message>
+ <message>
+ <source>The control requires a design-time license</source>
+ <translation>이 컨트롤을 사용하려면 라이선스가 필요합니다</translation>
+ </message>
+</context>
+<context>
+ <name>QCoreApplication</name>
+ <message>
+ <source>Exception at line %1: %2</source>
+ <translation>%1번째 줄에서 예외 발생: %2</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+ <message>
+ <source>An error occurred while running the script for %1: %2
+Script: %3</source>
+ <translation>%1의 스크립트를 실행하는 중 오류 발생: %2
+스크립트: %3</translation>
+ </message>
+ <message>
+ <source>%1 is not a promoted class.</source>
+ <translation>%1은(는) 승격된 클래스가 아닙니다.</translation>
+ </message>
+ <message>
+ <source>The base class %1 is invalid.</source>
+ <translation>기본 클래스 %1이(가) 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>The class %1 already exists.</source>
+ <translation>클래스 %1이(가) 이미 존재합니다.</translation>
+ </message>
+ <message>
+ <source>Promoted Widgets</source>
+ <translation>승격된 위젯</translation>
+ </message>
+ <message>
+ <source>The class %1 cannot be removed</source>
+ <translation>클래스 %1을(를) 삭제할 수 없음</translation>
+ </message>
+ <message>
+ <source>The class %1 cannot be removed because it is still referenced.</source>
+ <translation>클래스 %1이(가) 참조되고 있기 때문에 삭제할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The class %1 cannot be renamed</source>
+ <translation>클래스 %1의 이름을 바꿀 수 없음</translation>
+ </message>
+ <message>
+ <source>The class %1 cannot be renamed to an empty name.</source>
+ <translation>클래스 %1의 이름을 빈 이름으로 바꿀 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>There is already a class named %1.</source>
+ <translation>클래스 %1이(가) 이미 존재합니다.</translation>
+ </message>
+ <message>
+ <source>Cannot set an empty include file.</source>
+ <translation>빈 포함 파일을 설정할 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QDesigner</name>
+ <message>
+ <source>%1 - warning</source>
+ <translation>%1 - 경고</translation>
+ </message>
+ <message>
+ <source>Qt Designer</source>
+ <translation>Qt Designer</translation>
+ </message>
+ <message>
+ <source>This application cannot be used for the Console edition of Qt</source>
+ <translation>이 프로그램은 Qt 콘솔 에디션에서 사용할 수 없습니다</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerActions</name>
+ <message>
+ <source>Saved %1.</source>
+ <translation>%1을(를) 저장하였습니다.</translation>
+ </message>
+ <message>
+ <source>%1 already exists.
+Do you want to replace it?</source>
+ <translation>%1이(가) 이미 존재합니다.
+겹쳐 쓰시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Edit Widgets</source>
+ <translation>위젯 편집</translation>
+ </message>
+ <message>
+ <source>&amp;New...</source>
+ <translation>새 폼(&amp;N)...</translation>
+ </message>
+ <message>
+ <source>&amp;Open...</source>
+ <translation>열기(&amp;O)...</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>저장(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Save &amp;As...</source>
+ <translation>다른 이름으로 저장(&amp;A)...</translation>
+ </message>
+ <message>
+ <source>Save A&amp;ll</source>
+ <translation>모두 저장(&amp;L)</translation>
+ </message>
+ <message>
+ <source>Save As &amp;Template...</source>
+ <translation>템플릿으로 저장(&amp;T)...</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>닫기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Save &amp;Image...</source>
+ <translation>그림 저장(&amp;I)...</translation>
+ </message>
+ <message>
+ <source>&amp;Print...</source>
+ <translation>인쇄(&amp;P)...</translation>
+ </message>
+ <message>
+ <source>&amp;Quit</source>
+ <translation>끝내기(&amp;Q)</translation>
+ </message>
+ <message>
+ <source>View &amp;Code...</source>
+ <translation>코드 보기(&amp;C)...</translation>
+ </message>
+ <message>
+ <source>&amp;Minimize</source>
+ <translation>최소화(&amp;M)</translation>
+ </message>
+ <message>
+ <source>Bring All to Front</source>
+ <translation>모두 앞으로 가져오기</translation>
+ </message>
+ <message>
+ <source>Preferences...</source>
+ <translation>환경 설정...</translation>
+ </message>
+ <message>
+ <source>Additional Fonts...</source>
+ <translation>추가 글꼴...</translation>
+ </message>
+ <message>
+ <source>ALT+CTRL+S</source>
+ <translation>ALT+CTRL+S</translation>
+ </message>
+ <message>
+ <source>CTRL+SHIFT+S</source>
+ <translation>CTRL+SHIFT+S</translation>
+ </message>
+ <message>
+ <source>CTRL+R</source>
+ <translation>CTRL+R</translation>
+ </message>
+ <message>
+ <source>CTRL+M</source>
+ <translation>CTRL+M</translation>
+ </message>
+ <message>
+ <source>Qt Designer &amp;Help</source>
+ <translation>Qt Designer 도움말(&amp;H)</translation>
+ </message>
+ <message>
+ <source>Current Widget Help</source>
+ <translation>현재 위젯 도움말</translation>
+ </message>
+ <message>
+ <source>What&apos;s New in Qt Designer?</source>
+ <translation>Qt Designer의 새로운 기능</translation>
+ </message>
+ <message>
+ <source>About Plugins</source>
+ <translation>플러그인 정보</translation>
+ </message>
+ <message>
+ <source>About Qt Designer</source>
+ <translation>Qt Designer 정보</translation>
+ </message>
+ <message>
+ <source>About Qt</source>
+ <translation>Qt 정보</translation>
+ </message>
+ <message>
+ <source>Clear &amp;Menu</source>
+ <translation>메뉴 비우기(&amp;M)</translation>
+ </message>
+ <message>
+ <source>&amp;Recent Forms</source>
+ <translation>최근 폼(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Open Form</source>
+ <translation>폼 열기</translation>
+ </message>
+ <message>
+ <source>Designer UI files (*.%1);;All Files (*)</source>
+ <translation>Designer UI 파일 (*.%1);;모든 파일 (*)</translation>
+ </message>
+ <message>
+ <source>Save Form As</source>
+ <translation>다른 이름으로 폼 저장</translation>
+ </message>
+ <message>
+ <source>Designer</source>
+ <translation>Designer</translation>
+ </message>
+ <message>
+ <source>Feature not implemented yet!</source>
+ <translation>기능이 구현되지 않았습니다!</translation>
+ </message>
+ <message>
+ <source>Code generation failed</source>
+ <translation>코드 생성 실패</translation>
+ </message>
+ <message>
+ <source>Read error</source>
+ <translation>읽기 오류</translation>
+ </message>
+ <message>
+ <source>%1
+Do you want to update the file location or generate a new form?</source>
+ <translation>%1
+파일 위치를 업데이트하거나 새 폼을 생성하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>&amp;Update</source>
+ <translation>업데이트(&amp;U)</translation>
+ </message>
+ <message>
+ <source>&amp;New Form</source>
+ <translation>새 폼 생성(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Save Form?</source>
+ <translation>폼을 저장하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Could not open file</source>
+ <translation>파일을 열 수 없음</translation>
+ </message>
+ <message>
+ <source>The file %1 could not be opened.
+Reason: %2
+Would you like to retry or select a different file?</source>
+ <translation>파일 %1을(를) 열 수 없습니다.
+이유: %2
+다시 시도하거나 새 파일을 선택하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Select New File</source>
+ <translation>새 파일 선택</translation>
+ </message>
+ <message>
+ <source>Could not write file</source>
+ <translation>파일에 쓸 수 없음</translation>
+ </message>
+ <message>
+ <source>It was not possible to write the entire file %1 to disk.
+Reason:%2
+Would you like to retry?</source>
+ <translation>파일 %1을(를) 디스크에 완전히 기록할 수 없었습니다.
+이유: %2
+다시 시도하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Assistant</source>
+ <translation>Assistant</translation>
+ </message>
+ <message>
+ <source>&amp;Close Preview</source>
+ <translation>미리 보기 닫기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>The backup file %1 could not be written.</source>
+ <translation>백업 파일 %1에 쓸 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The backup directory %1 could not be created.</source>
+ <translation>백업 디렉터리 %1을(를) 만들 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The temporary backup directory %1 could not be created.</source>
+ <translation>임시 백업 디렉터리 %1을(를) 만들 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Preview failed</source>
+ <translation>미리 보기 실패</translation>
+ </message>
+ <message>
+ <source>Image files (*.%1)</source>
+ <translation>그림 파일 (*.%1)</translation>
+ </message>
+ <message>
+ <source>Save Image</source>
+ <translation>그림 저장</translation>
+ </message>
+ <message>
+ <source>Saved image %1.</source>
+ <translation>그림 %1을(를) 저장하였습니다.</translation>
+ </message>
+ <message>
+ <source>The file %1 could not be written.</source>
+ <translation>파일 %1에 쓸 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Please close all forms to enable the loading of additional fonts.</source>
+ <translation>추가 글꼴을 불러오려면 모든 폼을 닫아야 합니다.</translation>
+ </message>
+ <message>
+ <source>Printed %1.</source>
+ <translation>%1을(를) 인쇄하였습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerAppearanceOptionsPage</name>
+ <message>
+ <source>Appearance</source>
+ <extracomment>Tab in preferences dialog</extracomment>
+ <translation>모양</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerAppearanceOptionsWidget</name>
+ <message>
+ <source>Docked Window</source>
+ <translation>도킹된 창</translation>
+ </message>
+ <message>
+ <source>Multiple Top-Level Windows</source>
+ <translation>여러 최상위 창</translation>
+ </message>
+ <message>
+ <source>Toolwindow Font</source>
+ <translation>도구 창 글꼴</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerAxWidget</name>
+ <message>
+ <source>Reset control</source>
+ <translation>컨트롤 초기화</translation>
+ </message>
+ <message>
+ <source>Set control</source>
+ <translation>컨트롤 설정</translation>
+ </message>
+ <message>
+ <source>Control loaded</source>
+ <translation>컨트롤 불러옴</translation>
+ </message>
+ <message>
+ <source>A COM exception occurred when executing a meta call of type %1, index %2 of &quot;%3&quot;.</source>
+ <translation>&quot;%3&quot;의 메타 호출(형식 %1, 인덱스 %2)을 실행하는 중 COM 오류가 발생하였습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerFormBuilder</name>
+ <message>
+ <source>Script errors occurred:</source>
+ <translation>발생한 스크립트 오류:</translation>
+ </message>
+ <message>
+ <source>The preview failed to build.</source>
+ <translation>미리 보기를 빌드할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Designer</source>
+ <translation>Designer</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerFormWindow</name>
+ <message>
+ <source>%1 - %2[*]</source>
+ <translation>%1 - %2[*]</translation>
+ </message>
+ <message>
+ <source>Save Form?</source>
+ <translation>폼을 저장하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Do you want to save the changes to this document before closing?</source>
+ <translation>닫기 전에 이 문서의 변경 사항을 저장하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>If you don&apos;t save, your changes will be lost.</source>
+ <translation>저장하지 않은 변경 사항은 손실될 것입니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerMenu</name>
+ <message>
+ <source>Type Here</source>
+ <translation>여기에 입력하십시오</translation>
+ </message>
+ <message>
+ <source>Add Separator</source>
+ <translation>구분자 추가</translation>
+ </message>
+ <message>
+ <source>Insert separator</source>
+ <translation>구분자 삽입</translation>
+ </message>
+ <message>
+ <source>Remove separator</source>
+ <translation>구분자 삭제</translation>
+ </message>
+ <message>
+ <source>Remove action &apos;%1&apos;</source>
+ <translation>동작 &apos;%1&apos; 삭제</translation>
+ </message>
+ <message>
+ <source>Add separator</source>
+ <translation>구분자 추가</translation>
+ </message>
+ <message>
+ <source>Insert action</source>
+ <translation>동작 삽입</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerMenuBar</name>
+ <message>
+ <source>Type Here</source>
+ <translation>여기에 입력하십시오</translation>
+ </message>
+ <message>
+ <source>Remove Menu &apos;%1&apos;</source>
+ <translation>&apos;%1&apos; 메뉴 삭제</translation>
+ </message>
+ <message>
+ <source>Remove Menu Bar</source>
+ <translation>메뉴 표시줄 삭제</translation>
+ </message>
+ <message>
+ <source>Menu</source>
+ <translation>메뉴</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerPluginManager</name>
+ <message>
+ <source>An XML error was encountered when parsing the XML of the custom widget %1: %2</source>
+ <translation>사용자 정의 위젯 %1의 XML을 처리하는 중 XML 오류가 발생하였습니다: %2</translation>
+ </message>
+ <message>
+ <source>A required attribute (&apos;%1&apos;) is missing.</source>
+ <translation>필요한 속성 &apos;%1&apos;이(가) 없습니다.</translation>
+ </message>
+ <message>
+ <source>An invalid property specification (&apos;%1&apos;) was encountered. Supported types: %2</source>
+ <translation>잘못된 속성 정의 &apos;%1이(가) 존재합니다. 지원하는 형식: %2</translation>
+ </message>
+ <message>
+ <source>&apos;%1&apos; is not a valid string property specification.</source>
+ <translation>&apos;%1&apos;은(는) 올바른 문자열 속성 정의가 아닙니다.</translation>
+ </message>
+ <message>
+ <source>The XML of the custom widget %1 does not contain any of the elements &lt;widget&gt; or &lt;ui&gt;.</source>
+ <translation>사용자 정의 위젯 %1의 XML 파일에 &lt;widget&gt;이나 &lt;ui&gt; 원소가 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The class attribute for the class %1 is missing.</source>
+ <translation>클래스 %1의 class 속성이 없습니다.</translation>
+ </message>
+ <message>
+ <source>The class attribute for the class %1 does not match the class name %2.</source>
+ <translation>클래스 %1의 class 속성이 클래스 이름 %2와(과) 일치하지 않습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerPropertySheet</name>
+ <message>
+ <source>Dynamic Properties</source>
+ <translation>동적 속성</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerResource</name>
+ <message>
+ <source>The layout type &apos;%1&apos; is not supported, defaulting to grid.</source>
+ <translation>레이아웃 형식 &apos;%1&apos;은(는) 지원하지 않습니다. 기본값으로 격자 레이아웃을 사용합니다.</translation>
+ </message>
+ <message>
+ <source>The container extension of the widget &apos;%1&apos; (%2) returned a widget not managed by Designer &apos;%3&apos; (%4) when queried for page #%5.
+Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget.</source>
+ <translation>위젯 &apos;%1&apos; (%2)의 컨테이너 확장에 쪽 #%5을(를) 조회하였을 때 Designer에서 관리되지 않는 위젯 &apos;%3&apos;(%4)을(를) 반환하였습니다.
+컨테이너 쪽은 사용자 정의 위젯의 domXml() 메서드에서 반환하는 XML에 정의하여야 합니다.</translation>
+ </message>
+ <message>
+ <source>Unexpected element &lt;%1&gt;</source>
+ <extracomment>Parsing clipboard contents</extracomment>
+ <translation>예상하지 못한 원소 &lt;%1&gt;</translation>
+ </message>
+ <message>
+ <source>Error while pasting clipboard contents at line %1, column %2: %3</source>
+ <extracomment>Parsing clipboard contents</extracomment>
+ <translation>클립보드 내용을 붙여넣는 중 %1번째 줄 %2번째 칸에서 오류 발생: %3</translation>
+ </message>
+ <message>
+ <source>Error while pasting clipboard contents: The root element &lt;ui&gt; is missing.</source>
+ <extracomment>Parsing clipboard contents</extracomment>
+ <translation>클립보드 내용을 붙여넣는 중 오류 발생: 루트 원소 &lt;ui&gt;가 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerSharedSettings</name>
+ <message>
+ <source>The template path %1 could not be created.</source>
+ <translation>템플릿 경로 %1을(를) 생성할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>An error has been encountered while parsing device profile XML: %1</source>
+ <translation>장치 프로필 XML을 처리하는 중 오류 발생: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerToolWindow</name>
+ <message>
+ <source>Property Editor</source>
+ <translation>속성 편집기</translation>
+ </message>
+ <message>
+ <source>Action Editor</source>
+ <translation>동작 편집기</translation>
+ </message>
+ <message>
+ <source>Object Inspector</source>
+ <translation>객체 탐색기</translation>
+ </message>
+ <message>
+ <source>Resource Browser</source>
+ <translation>리소스 탐색기</translation>
+ </message>
+ <message>
+ <source>Signal/Slot Editor</source>
+ <translation>시그널/슬롯 편집기</translation>
+ </message>
+ <message>
+ <source>Widget Box</source>
+ <translation>위젯 상자</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerWorkbench</name>
+ <message>
+ <source>&amp;File</source>
+ <translation>파일(&amp;F)</translation>
+ </message>
+ <message>
+ <source>Edit</source>
+ <translation>편집</translation>
+ </message>
+ <message>
+ <source>F&amp;orm</source>
+ <translation>폼(&amp;O)</translation>
+ </message>
+ <message>
+ <source>Preview in</source>
+ <translation>다음으로 미리 보기</translation>
+ </message>
+ <message>
+ <source>&amp;View</source>
+ <translation>보기(&amp;V)</translation>
+ </message>
+ <message>
+ <source>&amp;Settings</source>
+ <translation>설정(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Window</source>
+ <translation>창(&amp;W)</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>도움말(&amp;H)</translation>
+ </message>
+ <message>
+ <source>Toolbars</source>
+ <translation>도구 모음</translation>
+ </message>
+ <message>
+ <source>Widget Box</source>
+ <translation>위젯 상자</translation>
+ </message>
+ <message>
+ <source>Save Forms?</source>
+ <translation>폼을 저장하시겠습니까?</translation>
+ </message>
+ <message numerus="yes">
+ <source>There are %n forms with unsaved changes. Do you want to review these changes before quitting?</source>
+ <translation>
+ <numerusform>저장하지 않은 변경 사항이 있는 폼이 %n개 있습니다. 끝내기 전에 변경 사항을 검토하시겠습니까?</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>If you do not review your documents, all your changes will be lost.</source>
+ <translation>변경 사항을 검토하지 않으면 손실될 것입니다.</translation>
+ </message>
+ <message>
+ <source>Discard Changes</source>
+ <translation>변경 사항 무시</translation>
+ </message>
+ <message>
+ <source>Review Changes</source>
+ <translation>변경 사항 검토</translation>
+ </message>
+ <message>
+ <source>Backup Information</source>
+ <translation>백업 정보</translation>
+ </message>
+ <message>
+ <source>The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them?</source>
+ <translation>Designer가 마지막으로 실행되었을 때 올바르게 종료되지 않았으며, 백업 파일이 생성되었습니다. 백업 파일을 불러오시겠습니까?</translation>
+ </message>
+ <message>
+ <source>The file &lt;b&gt;%1&lt;/b&gt; could not be opened.</source>
+ <translation>파일 &lt;b&gt;%1&lt;/b&gt;을(를) 열 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The file &lt;b&gt;%1&lt;/b&gt; is not a valid Designer UI file.</source>
+ <translation>파일 &lt;b&gt;%1&lt;/b&gt;은(는) 올바른 Designer UI 파일이 아닙니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QFormBuilder</name>
+ <message>
+ <source>An empty class name was passed on to %1 (object name: &apos;%2&apos;).</source>
+ <extracomment>Empty class name passed to widget factory method
+----------
+Empty class name passed to widget factory method
+----------
+Empty class name passed to widget factory method</extracomment>
+ <translation>%1(객체 이름: &apos;%2&apos;)에 빈 클래스 이름이 전달되었습니다.</translation>
+ </message>
+ <message>
+ <source>QFormBuilder was unable to create a custom widget of the class &apos;%1&apos;; defaulting to base class &apos;%2&apos;.</source>
+ <translation>QFormBuilder에서 클래스 &apos;%1&apos;인 사용자 정의 위젯을 만들 수 없습니다. 기본 클래스 &apos;%2&apos;을(를) 사용합니다.</translation>
+ </message>
+ <message>
+ <source>QFormBuilder was unable to create a widget of the class &apos;%1&apos;.</source>
+ <translation>QFormBuilder에서 클래스 &apos;%1&apos;인 위젯을 만들 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The layout type `%1&apos; is not supported.</source>
+ <translation>레이아웃 형식 &apos;%1&apos;은(는) 지원하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The set-type property %1 could not be read.</source>
+ <translation>set 형식 속성 %1을(를) 읽을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The enumeration-type property %1 could not be read.</source>
+ <translation>열거형 속성 %1을(를) 읽을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Reading properties of the type %1 is not supported yet.</source>
+ <translation>형식이 %1인 속성에서 읽기는 지원하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The property %1 could not be written. The type %2 is not supported yet.</source>
+ <translation>속성 %1에 쓸 수 없습니다. 형식 %2은(는) 지원하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The enumeration-value &apos;%1&apos; is invalid. The default value &apos;%2&apos; will be used instead.</source>
+ <translation>열거형 값 &apos;%1&apos;이(가) 잘못되었습니다. 기본값 &apos;%2&apos;을(를) 사용합니다.</translation>
+ </message>
+ <message>
+ <source>The flag-value &apos;%1&apos; is invalid. Zero will be used instead.</source>
+ <translation>플래그 값 &apos;%1&apos;이(가) 잘못되었습니다. 0을 사용합니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QStackedWidgetEventFilter</name>
+ <message>
+ <source>Previous Page</source>
+ <translation>이전 쪽</translation>
+ </message>
+ <message>
+ <source>Next Page</source>
+ <translation>다음 쪽</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Before Current Page</source>
+ <translation>현재 쪽 앞에</translation>
+ </message>
+ <message>
+ <source>After Current Page</source>
+ <translation>현재 쪽 뒤에</translation>
+ </message>
+ <message>
+ <source>Change Page Order...</source>
+ <translation>쪽 순서 변경...</translation>
+ </message>
+ <message>
+ <source>Change Page Order</source>
+ <translation>쪽 순서 변경</translation>
+ </message>
+ <message>
+ <source>Page %1 of %2</source>
+ <translation>%2 중 %1쪽</translation>
+ </message>
+ <message>
+ <source>Insert Page</source>
+ <translation>쪽 삽입</translation>
+ </message>
+</context>
+<context>
+ <name>QStackedWidgetPreviewEventFilter</name>
+ <message>
+ <source>Go to previous page of %1 &apos;%2&apos; (%3/%4).</source>
+ <translation>%1 &apos;%2&apos;의 이전 쪽으로 이동합니다 (%3/%4).</translation>
+ </message>
+ <message>
+ <source>Go to next page of %1 &apos;%2&apos; (%3/%4).</source>
+ <translation>%1 &apos;%2&apos;의 다음 쪽으로 이동합니다 (%3/%4).</translation>
+ </message>
+</context>
+<context>
+ <name>QTabWidgetEventFilter</name>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Before Current Page</source>
+ <translation>현재 쪽 앞에</translation>
+ </message>
+ <message>
+ <source>After Current Page</source>
+ <translation>현재 쪽 다음에</translation>
+ </message>
+ <message>
+ <source>Page %1 of %2</source>
+ <translation>%2 중 %1쪽</translation>
+ </message>
+ <message>
+ <source>Insert Page</source>
+ <translation>쪽 삽입</translation>
+ </message>
+</context>
+<context>
+ <name>QToolBoxHelper</name>
+ <message>
+ <source>Delete Page</source>
+ <translation>쪽 삭제</translation>
+ </message>
+ <message>
+ <source>Before Current Page</source>
+ <translation>현재 쪽 앞에</translation>
+ </message>
+ <message>
+ <source>After Current Page</source>
+ <translation>현재 쪽 뒤에</translation>
+ </message>
+ <message>
+ <source>Change Page Order...</source>
+ <translation>쪽 순서 변경...</translation>
+ </message>
+ <message>
+ <source>Change Page Order</source>
+ <translation>쪽 순서 변경</translation>
+ </message>
+ <message>
+ <source>Page %1 of %2</source>
+ <translation>%2 중 %1쪽</translation>
+ </message>
+ <message>
+ <source>Insert Page</source>
+ <translation>쪽 삽입</translation>
+ </message>
+</context>
+<context>
+ <name>QtBoolEdit</name>
+ <message>
+ <source>True</source>
+ <translation>참</translation>
+ </message>
+ <message>
+ <source>False</source>
+ <translation>거짓</translation>
+ </message>
+</context>
+<context>
+ <name>QtBoolPropertyManager</name>
+ <message>
+ <source>True</source>
+ <translation>참</translation>
+ </message>
+ <message>
+ <source>False</source>
+ <translation>거짓</translation>
+ </message>
+</context>
+<context>
+ <name>QtCharEdit</name>
+ <message>
+ <source>Clear Char</source>
+ <translation>문자 삭제</translation>
+ </message>
+</context>
+<context>
+ <name>QtColorEditWidget</name>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+</context>
+<context>
+ <name>QtColorPropertyManager</name>
+ <message>
+ <source>Red</source>
+ <translation>빨강</translation>
+ </message>
+ <message>
+ <source>Green</source>
+ <translation>녹색</translation>
+ </message>
+ <message>
+ <source>Blue</source>
+ <translation>파랑</translation>
+ </message>
+ <message>
+ <source>Alpha</source>
+ <translation>투명도</translation>
+ </message>
+</context>
+<context>
+ <name>QtCursorDatabase</name>
+ <message>
+ <source>Arrow</source>
+ <translation>화살표</translation>
+ </message>
+ <message>
+ <source>Up Arrow</source>
+ <translation>위쪽 화살표</translation>
+ </message>
+ <message>
+ <source>Cross</source>
+ <translation>십자가</translation>
+ </message>
+ <message>
+ <source>Wait</source>
+ <translation>대기</translation>
+ </message>
+ <message>
+ <source>IBeam</source>
+ <translation>I빔</translation>
+ </message>
+ <message>
+ <source>Size Vertical</source>
+ <translation>수직 크기 조정</translation>
+ </message>
+ <message>
+ <source>Size Horizontal</source>
+ <translation>수평 크기 조정</translation>
+ </message>
+ <message>
+ <source>Size Backslash</source>
+ <translation>역슬래시 크기 조정</translation>
+ </message>
+ <message>
+ <source>Size Slash</source>
+ <translation>슬래시 크기 조정</translation>
+ </message>
+ <message>
+ <source>Size All</source>
+ <translation>모든 방향 크기 조정</translation>
+ </message>
+ <message>
+ <source>Blank</source>
+ <translation>비어 있음</translation>
+ </message>
+ <message>
+ <source>Split Vertical</source>
+ <translation>수직 나누기</translation>
+ </message>
+ <message>
+ <source>Split Horizontal</source>
+ <translation>수평 나누기</translation>
+ </message>
+ <message>
+ <source>Pointing Hand</source>
+ <translation>가리키는 손</translation>
+ </message>
+ <message>
+ <source>Forbidden</source>
+ <translation>금지됨</translation>
+ </message>
+ <message>
+ <source>Open Hand</source>
+ <translation>열린 손</translation>
+ </message>
+ <message>
+ <source>Closed Hand</source>
+ <translation>닫힌 손</translation>
+ </message>
+ <message>
+ <source>What&apos;s This</source>
+ <translation>도움말 항목</translation>
+ </message>
+ <message>
+ <source>Busy</source>
+ <translation>바쁨</translation>
+ </message>
+</context>
+<context>
+ <name>QtFontEditWidget</name>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Select Font</source>
+ <translation>글꼴 선택</translation>
+ </message>
+</context>
+<context>
+ <name>QtFontPropertyManager</name>
+ <message>
+ <source>Family</source>
+ <translation>종류</translation>
+ </message>
+ <message>
+ <source>Point Size</source>
+ <translation>포인트 크기</translation>
+ </message>
+ <message>
+ <source>Bold</source>
+ <translation>굵게</translation>
+ </message>
+ <message>
+ <source>Italic</source>
+ <translation>기울임꼴</translation>
+ </message>
+ <message>
+ <source>Underline</source>
+ <translation>밑줄</translation>
+ </message>
+ <message>
+ <source>Strikeout</source>
+ <translation>취소선</translation>
+ </message>
+ <message>
+ <source>Kerning</source>
+ <translation>커닝</translation>
+ </message>
+</context>
+<context>
+ <name>QtGradientDialog</name>
+ <message>
+ <source>Edit Gradient</source>
+ <translation>그라데이션 편집</translation>
+ </message>
+</context>
+<context>
+ <name>QtGradientEditor</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Gradient Editor</source>
+ <translation>그라데이션 편집기</translation>
+ </message>
+ <message>
+ <source>This area shows a preview of the gradient being edited. It also allows you to edit parameters specific to the gradient&apos;s type such as start and final point, radius, etc. by drag &amp; drop.</source>
+ <translation>현재 편집하고 있는 그라데이션을 미리 보여 줍니다. 그라데이션의 시작과 끝점, 반지름 등을 끌어다 놓기로 편집할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <source>2</source>
+ <translation>2</translation>
+ </message>
+ <message>
+ <source>3</source>
+ <translation>3</translation>
+ </message>
+ <message>
+ <source>4</source>
+ <translation>4</translation>
+ </message>
+ <message>
+ <source>5</source>
+ <translation>5</translation>
+ </message>
+ <message>
+ <source>Gradient Stops Editor</source>
+ <translation>그라데이션 지점 편집기</translation>
+ </message>
+ <message>
+ <source>This area allows you to edit gradient stops. Double click on the existing stop handle to duplicate it. Double click outside of the existing stop handles to create a new stop. Drag &amp; drop the handle to reposition it. Use right mouse button to popup context menu with extra actions.</source>
+ <translation>그라데이션 지점을 편집할 수 있습니다. 존재하는 지점을 두 번 누르면 복제됩니다. 존재하는 지점 밖을 두 번 누르면 새 지점을 만들 수 있습니다. 지점의 위치를 바꾸려면 끌어다 놓으십시오. 마우스 오른쪽 단추를 누르면 추가 동작이 있는 팝업 메뉴가 표시됩니다.</translation>
+ </message>
+ <message>
+ <source>Zoom</source>
+ <translation>확대/축소</translation>
+ </message>
+ <message>
+ <source>Reset Zoom</source>
+ <translation>원래 크기로</translation>
+ </message>
+ <message>
+ <source>Position</source>
+ <translation>위치</translation>
+ </message>
+ <message>
+ <source>Hue</source>
+ <translation>명도</translation>
+ </message>
+ <message>
+ <source>H</source>
+ <translation>H</translation>
+ </message>
+ <message>
+ <source>Saturation</source>
+ <translation>채도</translation>
+ </message>
+ <message>
+ <source>S</source>
+ <translation>S</translation>
+ </message>
+ <message>
+ <source>Sat</source>
+ <translation>채도</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>휘도</translation>
+ </message>
+ <message>
+ <source>V</source>
+ <translation>V</translation>
+ </message>
+ <message>
+ <source>Val</source>
+ <translation>휘도</translation>
+ </message>
+ <message>
+ <source>Alpha</source>
+ <translation>투명도</translation>
+ </message>
+ <message>
+ <source>A</source>
+ <translation>A</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <translation>종류</translation>
+ </message>
+ <message>
+ <source>Spread</source>
+ <translation>펼침</translation>
+ </message>
+ <message>
+ <source>Color</source>
+ <translation>색상</translation>
+ </message>
+ <message>
+ <source>Current stop&apos;s color</source>
+ <translation>현재 지점의 색상</translation>
+ </message>
+ <message>
+ <source>Show HSV specification</source>
+ <translation>HSV로 색상 표시</translation>
+ </message>
+ <message>
+ <source>HSV</source>
+ <translation>HSV</translation>
+ </message>
+ <message>
+ <source>Show RGB specification</source>
+ <translation>RGB로 색상 표시</translation>
+ </message>
+ <message>
+ <source>RGB</source>
+ <translation>RGB</translation>
+ </message>
+ <message>
+ <source>Current stop&apos;s position</source>
+ <translation>현재 지점의 위치</translation>
+ </message>
+ <message>
+ <source>%</source>
+ <translation>%</translation>
+ </message>
+ <message>
+ <source>Zoom In</source>
+ <translation>확대</translation>
+ </message>
+ <message>
+ <source>Zoom Out</source>
+ <translation>축소</translation>
+ </message>
+ <message>
+ <source>Toggle details extension</source>
+ <translation>자세한 정보 보이기/숨기기</translation>
+ </message>
+ <message>
+ <source>&gt;</source>
+ <translation>&gt;</translation>
+ </message>
+ <message>
+ <source>Linear Type</source>
+ <translation>선형</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Radial Type</source>
+ <translation>원형</translation>
+ </message>
+ <message>
+ <source>Conical Type</source>
+ <translation>원뿔형</translation>
+ </message>
+ <message>
+ <source>Pad Spread</source>
+ <translation>패딩</translation>
+ </message>
+ <message>
+ <source>Repeat Spread</source>
+ <translation>반복</translation>
+ </message>
+ <message>
+ <source>Reflect Spread</source>
+ <translation>반사</translation>
+ </message>
+ <message>
+ <source>Start X</source>
+ <translation>시작 X</translation>
+ </message>
+ <message>
+ <source>Start Y</source>
+ <translation>시작 Y</translation>
+ </message>
+ <message>
+ <source>Final X</source>
+ <translation>끝 X</translation>
+ </message>
+ <message>
+ <source>Final Y</source>
+ <translation>끝 Y</translation>
+ </message>
+ <message>
+ <source>Central X</source>
+ <translation>중간 X</translation>
+ </message>
+ <message>
+ <source>Central Y</source>
+ <translation>중간 Y</translation>
+ </message>
+ <message>
+ <source>Focal X</source>
+ <translation>초점 X</translation>
+ </message>
+ <message>
+ <source>Focal Y</source>
+ <translation>초점 Y</translation>
+ </message>
+ <message>
+ <source>Radius</source>
+ <translation>반지름</translation>
+ </message>
+ <message>
+ <source>Angle</source>
+ <translation>각도</translation>
+ </message>
+ <message>
+ <source>Linear</source>
+ <translation>선형</translation>
+ </message>
+ <message>
+ <source>Radial</source>
+ <translation>원형</translation>
+ </message>
+ <message>
+ <source>Conical</source>
+ <translation>원뿔형</translation>
+ </message>
+ <message>
+ <source>Pad</source>
+ <translation>패딩</translation>
+ </message>
+ <message>
+ <source>Repeat</source>
+ <translation>반복</translation>
+ </message>
+ <message>
+ <source>Reflect</source>
+ <translation>반사</translation>
+ </message>
+</context>
+<context>
+ <name>QtGradientStopsWidget</name>
+ <message>
+ <source>New Stop</source>
+ <translation>새 지점</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Flip All</source>
+ <translation>모두 뒤집기</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>모두 선택</translation>
+ </message>
+ <message>
+ <source>Zoom In</source>
+ <translation>확대</translation>
+ </message>
+ <message>
+ <source>Zoom Out</source>
+ <translation>축소</translation>
+ </message>
+ <message>
+ <source>Reset Zoom</source>
+ <translation>원래 크기로</translation>
+ </message>
+</context>
+<context>
+ <name>QtGradientView</name>
+ <message>
+ <source>Gradient View</source>
+ <translation>그라데이션 보기</translation>
+ </message>
+ <message>
+ <source>New...</source>
+ <translation>새로 만들기...</translation>
+ </message>
+ <message>
+ <source>Edit...</source>
+ <translation>편집...</translation>
+ </message>
+ <message>
+ <source>Rename</source>
+ <translation>이름 바꾸기</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Grad</source>
+ <translation>그라데이션</translation>
+ </message>
+ <message>
+ <source>Remove Gradient</source>
+ <translation>그라데이션 삭제</translation>
+ </message>
+ <message>
+ <source>Are you sure you want to remove the selected gradient?</source>
+ <translation>선택한 그라데이션을 삭제하시겠습니까?</translation>
+ </message>
+</context>
+<context>
+ <name>QtGradientViewDialog</name>
+ <message>
+ <source>Select Gradient</source>
+ <translation>그라데이션 선택</translation>
+ </message>
+</context>
+<context>
+ <name>QtKeySequenceEdit</name>
+ <message>
+ <source>Clear Shortcut</source>
+ <translation>단축키 삭제</translation>
+ </message>
+</context>
+<context>
+ <name>QtLocalePropertyManager</name>
+ <message>
+ <source>&lt;Invalid&gt;</source>
+ <translation>&lt;잘못됨&gt;</translation>
+ </message>
+ <message>
+ <source>%1, %2</source>
+ <translation>%1, %2</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>언어</translation>
+ </message>
+ <message>
+ <source>Country</source>
+ <translation>국가</translation>
+ </message>
+</context>
+<context>
+ <name>QtPointFPropertyManager</name>
+ <message>
+ <source>(%1, %2)</source>
+ <translation>(%1, %2)</translation>
+ </message>
+ <message>
+ <source>X</source>
+ <translation>X</translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation>Y</translation>
+ </message>
+</context>
+<context>
+ <name>QtPointPropertyManager</name>
+ <message>
+ <source>(%1, %2)</source>
+ <translation>(%1, %2)</translation>
+ </message>
+ <message>
+ <source>X</source>
+ <translation>X</translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation>Y</translation>
+ </message>
+</context>
+<context>
+ <name>QtPropertyBrowserUtils</name>
+ <message>
+ <source>[%1, %2, %3] (%4)</source>
+ <translation>[%1, %2, %3] (%4)</translation>
+ </message>
+ <message>
+ <source>[%1, %2]</source>
+ <translation>[%1, %2]</translation>
+ </message>
+</context>
+<context>
+ <name>QtRectFPropertyManager</name>
+ <message>
+ <source>[(%1, %2), %3 x %4]</source>
+ <translation>[(%1, %2), %3 x %4]</translation>
+ </message>
+ <message>
+ <source>X</source>
+ <translation>X</translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation>Y</translation>
+ </message>
+ <message>
+ <source>Width</source>
+ <translation>너비</translation>
+ </message>
+ <message>
+ <source>Height</source>
+ <translation>높이</translation>
+ </message>
+</context>
+<context>
+ <name>QtRectPropertyManager</name>
+ <message>
+ <source>[(%1, %2), %3 x %4]</source>
+ <translation>[(%1, %2), %3 x %4]</translation>
+ </message>
+ <message>
+ <source>X</source>
+ <translation>X</translation>
+ </message>
+ <message>
+ <source>Y</source>
+ <translation>Y</translation>
+ </message>
+ <message>
+ <source>Width</source>
+ <translation>너비</translation>
+ </message>
+ <message>
+ <source>Height</source>
+ <translation>높이</translation>
+ </message>
+</context>
+<context>
+ <name>QtResourceEditorDialog</name>
+ <message>
+ <source>Dialog</source>
+ <translation>대화 상자</translation>
+ </message>
+ <message>
+ <source>New File</source>
+ <translation>새 파일</translation>
+ </message>
+ <message>
+ <source>N</source>
+ <translation>N</translation>
+ </message>
+ <message>
+ <source>Remove File</source>
+ <translation>파일 삭제</translation>
+ </message>
+ <message>
+ <source>R</source>
+ <translation>R</translation>
+ </message>
+ <message>
+ <source>I</source>
+ <translation>I</translation>
+ </message>
+ <message>
+ <source>New Resource</source>
+ <translation>새 리소스</translation>
+ </message>
+ <message>
+ <source>A</source>
+ <translation>A</translation>
+ </message>
+ <message>
+ <source>Remove Resource or File</source>
+ <translation>리소스나 파일 삭제</translation>
+ </message>
+ <message>
+ <source>%1 already exists.
+Do you want to replace it?</source>
+ <translation>%1이(가) 이미 존재합니다.
+변경하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>The file does not appear to be a resource file; element &apos;%1&apos; was found where &apos;%2&apos; was expected.</source>
+ <translation>이 파일은 리소스 파일이 아닌 것 같습니다. 원소 &apos;%2&apos;을(를) 예상하였지만 &apos;%1&apos;이(가) 나왔습니다.</translation>
+ </message>
+ <message>
+ <source>%1 [read-only]</source>
+ <translation>%1 [읽기 전용]</translation>
+ </message>
+ <message>
+ <source>%1 [missing]</source>
+ <translation>%1 [없음]</translation>
+ </message>
+ <message>
+ <source>&lt;no prefix&gt;</source>
+ <translation>&lt;접두사 없음&gt;</translation>
+ </message>
+ <message>
+ <source>New Resource File</source>
+ <translation>새 리소스 파일</translation>
+ </message>
+ <message>
+ <source>Resource files (*.qrc)</source>
+ <translation>리소스 파일 (*.qrc)</translation>
+ </message>
+ <message>
+ <source>Import Resource File</source>
+ <translation>리소스 파일 가져오기</translation>
+ </message>
+ <message>
+ <source>newPrefix</source>
+ <translation>newPrefix</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; The file&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;is outside of the current resource file&apos;s parent directory.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;&lt;b&gt;경고:&lt;/b&gt; 파일&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;이(가) 현재 리소스 파일의 부모 디렉터리 밖에 있습니다.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;To resolve the issue, press:&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Copy&lt;/th&gt;&lt;td&gt;to copy the file to the resource file&apos;s parent directory.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Copy As...&lt;/th&gt;&lt;td&gt;to copy the file into a subdirectory of the resource file&apos;s parent directory.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Keep&lt;/th&gt;&lt;td&gt;to use its current location.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+ <translation>&lt;p&gt;이 문제를 해결하려면 다음 중에서 선택하십시오:&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;복사&lt;/th&gt;&lt;td&gt;리소스 파일의 부모 디렉터리로 파일을 복사합니다.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;다른 이름으로 복사...&lt;/th&gt;&lt;tr&gt;리소스 파일의 부모 디렉터리의 하위 디렉터리로 파일을 복사합니다.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;유지&lt;/th&gt;&lt;td&gt;현재 위치를 유지합니다.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+ </message>
+ <message>
+ <source>Add Files</source>
+ <translation>파일 추가</translation>
+ </message>
+ <message>
+ <source>Incorrect Path</source>
+ <translation>경로 잘못됨</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>복사</translation>
+ </message>
+ <message>
+ <source>Copy As...</source>
+ <translation>다른 이름으로 복사...</translation>
+ </message>
+ <message>
+ <source>Keep</source>
+ <translation>유지</translation>
+ </message>
+ <message>
+ <source>Skip</source>
+ <translation>건너뛰기</translation>
+ </message>
+ <message>
+ <source>Clone Prefix</source>
+ <translation>접두사 복제</translation>
+ </message>
+ <message>
+ <source>Enter the suffix which you want to add to the names of the cloned files.
+This could for example be a language extension like &quot;_de&quot;.</source>
+ <translation>복제된 파일의 끝에 추가할 접미사를 입력하십시오.
+예를 들어 언어 코드 &quot;_ko&quot; 등을 사용할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>Copy As</source>
+ <translation>다른 이름으로 복사</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;The selected file:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;is outside of the current resource file&apos;s directory:&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;Please select another path within this directory.&lt;p&gt;</source>
+ <translation>&lt;p&gt;선택한 파일&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;이(가) 현재 리소스 파일의 디렉터리&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;밖에 있습니다. 이 디렉터리 안에 있는 다른 경로를 선택하십시오.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Could not overwrite %1.</source>
+ <translation>%1에 겹쳐쓸 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Could not copy
+%1
+to
+%2</source>
+ <translation>%1
+을(를)
+%2
+(으)로 복사할 수 없습니다</translation>
+ </message>
+ <message>
+ <source>A parse error occurred at line %1, column %2 of %3:
+%4</source>
+ <translation>%3의 %1번째 줄, %2번째 칸에서 처리 오류가 발생하였습니다:
+%4</translation>
+ </message>
+ <message>
+ <source>Save Resource File</source>
+ <translation>리소스 파일 저장</translation>
+ </message>
+ <message>
+ <source>Could not write %1: %2</source>
+ <translation>%1에 쓸 수 없음: %2</translation>
+ </message>
+ <message>
+ <source>Edit Resources</source>
+ <translation>리소스 편집</translation>
+ </message>
+ <message>
+ <source>New...</source>
+ <translation>새로 만들기...</translation>
+ </message>
+ <message>
+ <source>Open...</source>
+ <translation>열기...</translation>
+ </message>
+ <message>
+ <source>Open Resource File</source>
+ <translation>리소스 파일 열기</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Move Up</source>
+ <translation>위로 이동</translation>
+ </message>
+ <message>
+ <source>Move Down</source>
+ <translation>아래로 이동</translation>
+ </message>
+ <message>
+ <source>Add Prefix</source>
+ <translation>접두사 추가</translation>
+ </message>
+ <message>
+ <source>Add Files...</source>
+ <translation>파일 추가...</translation>
+ </message>
+ <message>
+ <source>Change Prefix</source>
+ <translation>접두사 변경</translation>
+ </message>
+ <message>
+ <source>Change Language</source>
+ <translation>언어 변경</translation>
+ </message>
+ <message>
+ <source>Change Alias</source>
+ <translation>별명 변경</translation>
+ </message>
+ <message>
+ <source>Clone Prefix...</source>
+ <translation>접두사 복제...</translation>
+ </message>
+ <message>
+ <source>Prefix / Path</source>
+ <translation>접두사 / 경로</translation>
+ </message>
+ <message>
+ <source>Language / Alias</source>
+ <translation>언어 / 별명</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; There have been problems while reloading the resources:&lt;/p&gt;&lt;pre&gt;%1&lt;/pre&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;p&gt;&lt;b&gt;경고:&lt;/b&gt; 다음 리소스을 다시 불러오는 중 오류가 발생하였습니다:&lt;/p&gt;&lt;pre&gt;%1&lt;/pre&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Resource Warning</source>
+ <translation>리소스 경고</translation>
+ </message>
+</context>
+<context>
+ <name>QtResourceView</name>
+ <message>
+ <source>Size: %1 x %2
+%3</source>
+ <translation>크기: %1 x %2
+%3</translation>
+ </message>
+ <message>
+ <source>Edit Resources...</source>
+ <translation>리소스 편집...</translation>
+ </message>
+ <message>
+ <source>Reload</source>
+ <translation>새로 고침</translation>
+ </message>
+ <message>
+ <source>Copy Path</source>
+ <translation>경로 복사</translation>
+ </message>
+</context>
+<context>
+ <name>QtResourceViewDialog</name>
+ <message>
+ <source>Select Resource</source>
+ <translation>리소스 선택</translation>
+ </message>
+</context>
+<context>
+ <name>QtSizeFPropertyManager</name>
+ <message>
+ <source>%1 x %2</source>
+ <translation>%1 x %2</translation>
+ </message>
+ <message>
+ <source>Width</source>
+ <translation>너비</translation>
+ </message>
+ <message>
+ <source>Height</source>
+ <translation>높이</translation>
+ </message>
+</context>
+<context>
+ <name>QtSizePolicyPropertyManager</name>
+ <message>
+ <source>&lt;Invalid&gt;</source>
+ <translation>&lt;잘못됨&gt;</translation>
+ </message>
+ <message>
+ <source>[%1, %2, %3, %4]</source>
+ <translation>[%1, %2, %3, %4]</translation>
+ </message>
+ <message>
+ <source>Horizontal Policy</source>
+ <translation>수평 정책</translation>
+ </message>
+ <message>
+ <source>Vertical Policy</source>
+ <translation>수직 정책</translation>
+ </message>
+ <message>
+ <source>Horizontal Stretch</source>
+ <translation>수평 확장</translation>
+ </message>
+ <message>
+ <source>Vertical Stretch</source>
+ <translation>수직 확장</translation>
+ </message>
+</context>
+<context>
+ <name>QtSizePropertyManager</name>
+ <message>
+ <source>%1 x %2</source>
+ <translation>%1 x %2</translation>
+ </message>
+ <message>
+ <source>Width</source>
+ <translation>너비</translation>
+ </message>
+ <message>
+ <source>Height</source>
+ <translation>높이</translation>
+ </message>
+</context>
+<context>
+ <name>QtToolBarDialog</name>
+ <message>
+ <source>Customize Toolbars</source>
+ <translation>도구 모음 사용자 정의</translation>
+ </message>
+ <message>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <source>Actions</source>
+ <translation>동작</translation>
+ </message>
+ <message>
+ <source>Toolbars</source>
+ <translation>도구 모음</translation>
+ </message>
+ <message>
+ <source>Add new toolbar</source>
+ <translation>새 도구 모음 추가</translation>
+ </message>
+ <message>
+ <source>New</source>
+ <translation>새로 만들기</translation>
+ </message>
+ <message>
+ <source>Remove selected toolbar</source>
+ <translation>선택한 도구 모음 삭제</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Rename toolbar</source>
+ <translation>도구 모음 이름 바꾸기</translation>
+ </message>
+ <message>
+ <source>Rename</source>
+ <translation>이름 바꾸기</translation>
+ </message>
+ <message>
+ <source>Move action up</source>
+ <translation>동작 위로 이동</translation>
+ </message>
+ <message>
+ <source>Up</source>
+ <translation>위로</translation>
+ </message>
+ <message>
+ <source>Remove action from toolbar</source>
+ <translation>도구 모음에서 동작 삭제</translation>
+ </message>
+ <message>
+ <source>&lt;-</source>
+ <translation>&lt;-</translation>
+ </message>
+ <message>
+ <source>Add action to toolbar</source>
+ <translation>도구 모음에 동작 추가</translation>
+ </message>
+ <message>
+ <source>-&gt;</source>
+ <translation>-&gt;</translation>
+ </message>
+ <message>
+ <source>Move action down</source>
+ <translation>동작 아래로 이동</translation>
+ </message>
+ <message>
+ <source>Down</source>
+ <translation>아래로</translation>
+ </message>
+ <message>
+ <source>Current Toolbar Actions</source>
+ <translation>현재 도구 모음의 동작</translation>
+ </message>
+ <message>
+ <source>Custom Toolbar</source>
+ <translation>사용자 정의 도구 모음</translation>
+ </message>
+ <message>
+ <source>&lt; S E P A R A T O R &gt;</source>
+ <translation>&lt; 구 분 자 &gt;</translation>
+ </message>
+</context>
+<context>
+ <name>QtTreePropertyBrowser</name>
+ <message>
+ <source>Property</source>
+ <translation>속성</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>값</translation>
+ </message>
+</context>
+<context>
+ <name>SaveFormAsTemplate</name>
+ <message>
+ <source>Save Form As Template</source>
+ <translation>폼을 템플릿으로 저장</translation>
+ </message>
+ <message>
+ <source>&amp;Name:</source>
+ <translation>이름(&amp;N):</translation>
+ </message>
+ <message>
+ <source>&amp;Category:</source>
+ <translation>분류(&amp;C):</translation>
+ </message>
+ <message>
+ <source>Add path...</source>
+ <translation>경로 추가...</translation>
+ </message>
+ <message>
+ <source>Template Exists</source>
+ <translation>템플릿이 존재함</translation>
+ </message>
+ <message>
+ <source>A template with the name %1 already exists.
+Do you want overwrite the template?</source>
+ <translation>이름이 %1인 템플릿이 이미 존재합니다.
+템플릿을 겹쳐 쓰시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Overwrite Template</source>
+ <translation>템플릿 겹쳐 쓰기</translation>
+ </message>
+ <message>
+ <source>Open Error</source>
+ <translation>열기 오류</translation>
+ </message>
+ <message>
+ <source>There was an error opening template %1 for writing. Reason: %2</source>
+ <translation>템플릿 %1에 쓰기 위해 열 수 없습니다. 이유: %2</translation>
+ </message>
+ <message>
+ <source>Write Error</source>
+ <translation>쓰기 오류</translation>
+ </message>
+ <message>
+ <source>There was an error writing the template %1 to disk. Reason: %2</source>
+ <translation>템플릿 %1을(를) 디스크에 쓰는 중 오류가 발생하였습니다. 이유: %2</translation>
+ </message>
+ <message>
+ <source>Pick a directory to save templates in</source>
+ <translation>템플릿 저장 디렉터리 선택</translation>
+ </message>
+</context>
+<context>
+ <name>ScriptErrorDialog</name>
+ <message>
+ <source>An error occurred while running the scripts for &quot;%1&quot;:
+</source>
+ <translation>&quot;%1&quot;의 스크립트를 실행하는 중 오류 발생:
+</translation>
+ </message>
+</context>
+<context>
+ <name>SelectSignalDialog</name>
+ <message>
+ <source>Go to slot</source>
+ <translation>슬롯으로 이동</translation>
+ </message>
+ <message>
+ <source>Select signal</source>
+ <translation>시그널 선택</translation>
+ </message>
+ <message>
+ <source>signal</source>
+ <translation>시그널</translation>
+ </message>
+ <message>
+ <source>class</source>
+ <translation>클래스</translation>
+ </message>
+</context>
+<context>
+ <name>SignalSlotConnection</name>
+ <message>
+ <source>SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4)</source>
+ <translation>SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4)</translation>
+ </message>
+</context>
+<context>
+ <name>SignalSlotDialogClass</name>
+ <message>
+ <source>Signals and slots</source>
+ <translation>시그널과 슬롯</translation>
+ </message>
+ <message>
+ <source>Slots</source>
+ <translation>슬롯</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>추가</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Signals</source>
+ <translation>시그널</translation>
+ </message>
+</context>
+<context>
+ <name>Spacer</name>
+ <message>
+ <source>Horizontal Spacer &apos;%1&apos;, %2 x %3</source>
+ <translation>수평 스페이서 &apos;%1&apos;, %2 x %3</translation>
+ </message>
+ <message>
+ <source>Vertical Spacer &apos;%1&apos;, %2 x %3</source>
+ <translation>수직 스페이서 &apos;%1&apos;, %2 x %3</translation>
+ </message>
+</context>
+<context>
+ <name>TemplateOptionsPage</name>
+ <message>
+ <source>Template Paths</source>
+ <extracomment>Tab in preferences dialog</extracomment>
+ <translation>템플릿 경로</translation>
+ </message>
+</context>
+<context>
+ <name>ToolBarManager</name>
+ <message>
+ <source>Configure Toolbars...</source>
+ <translation>도구 모음 설정...</translation>
+ </message>
+ <message>
+ <source>Window</source>
+ <translation>창</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>도움말</translation>
+ </message>
+ <message>
+ <source>Style</source>
+ <translation>스타일</translation>
+ </message>
+ <message>
+ <source>Dock views</source>
+ <translation>보기 도킹</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation>파일</translation>
+ </message>
+ <message>
+ <source>Edit</source>
+ <translation>편집</translation>
+ </message>
+ <message>
+ <source>Tools</source>
+ <translation>도구</translation>
+ </message>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Toolbars</source>
+ <translation>도구 모음</translation>
+ </message>
+</context>
+<context>
+ <name>VersionDialog</name>
+ <message>
+ <source>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;&lt;br/&gt;Version %2</source>
+ <translation>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;&lt;br/&gt;버전 %2</translation>
+ </message>
+ <message>
+ <source>Qt Designer</source>
+ <translation>Qt Designer</translation>
+ </message>
+ <message>
+ <source>&lt;br/&gt;Qt Designer is a graphical user interface designer for Qt applications.&lt;br/&gt;</source>
+ <translation>&lt;br/&gt;Qt Designer는 Qt 프로그램의 그래픽 사용자 인터페이스 디자이너입니다.&lt;br/&gt;</translation>
+ </message>
+ <message>
+ <source>%1&lt;br/&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source>
+ <translation>%1&lt;br/&gt;저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</translation>
+ </message>
+</context>
+<context>
+ <name>VideoPlayerTaskMenu</name>
+ <message>
+ <source>Available Mime Types</source>
+ <translation>사용 가능한 MIME 형식</translation>
+ </message>
+ <message>
+ <source>Display supported mime types...</source>
+ <translation>지원하는 MIME 형식 표시...</translation>
+ </message>
+ <message>
+ <source>Load...</source>
+ <translation>불러오기...</translation>
+ </message>
+ <message>
+ <source>Play</source>
+ <translation>재생</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>일시 정지</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>정지</translation>
+ </message>
+ <message>
+ <source>Choose Video Player Media Source</source>
+ <translation>비디오 재생기 미디어 원본 선택</translation>
+ </message>
+ <message>
+ <source>An error has occurred in &apos;%1&apos;: %2</source>
+ <translation>&apos;%1&apos;에서 오류 발생: %2</translation>
+ </message>
+ <message>
+ <source>Video Player Error</source>
+ <translation>비디오 재생기 오류</translation>
+ </message>
+</context>
+<context>
+ <name>WidgetDataBase</name>
+ <message>
+ <source>The file contains a custom widget &apos;%1&apos; whose base class (%2) differs from the current entry in the widget database (%3). The widget database is left unchanged.</source>
+ <translation>이 파일에는 사용자 정의 위젯 &apos;%1&apos;이(가) 포함되어 있으며, 정의된 기본 클래스(%2)가 위젯 데이터베이스의 항목(%3)에 정의된 것과 다릅니다. 위젯 데이터베이스는 변경되지 않았습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ActionEditor</name>
+ <message>
+ <source>New...</source>
+ <translation>새로 만들기...</translation>
+ </message>
+ <message>
+ <source>Edit...</source>
+ <translation>편집...</translation>
+ </message>
+ <message>
+ <source>Go to slot...</source>
+ <translation>슬롯으로 이동...</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>복사</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation>잘라내기</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>붙여넣기</translation>
+ </message>
+ <message>
+ <source>Select all</source>
+ <translation>모두 선택</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Actions</source>
+ <translation>동작</translation>
+ </message>
+ <message>
+ <source>Configure Action Editor</source>
+ <translation>동작 편집기 설정</translation>
+ </message>
+ <message>
+ <source>Icon View</source>
+ <translation>아이콘 보기</translation>
+ </message>
+ <message>
+ <source>Detailed View</source>
+ <translation>자세히 보기</translation>
+ </message>
+ <message>
+ <source>New action</source>
+ <translation>새 동작</translation>
+ </message>
+ <message>
+ <source>Edit action</source>
+ <translation>동작 편집</translation>
+ </message>
+ <message>
+ <source>Remove action &apos;%1&apos;</source>
+ <translation>동작 &apos;%1&apos; 삭제</translation>
+ </message>
+ <message>
+ <source>Remove actions</source>
+ <translation>동작 삭제</translation>
+ </message>
+ <message>
+ <source>Used In</source>
+ <translation>다음에 사용됨</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ActionModel</name>
+ <message>
+ <source>Name</source>
+ <translation>이름</translation>
+ </message>
+ <message>
+ <source>Used</source>
+ <translation>사용됨</translation>
+ </message>
+ <message>
+ <source>Text</source>
+ <translation>텍스트</translation>
+ </message>
+ <message>
+ <source>Shortcut</source>
+ <translation>단축키</translation>
+ </message>
+ <message>
+ <source>Checkable</source>
+ <translation>선택 가능</translation>
+ </message>
+ <message>
+ <source>ToolTip</source>
+ <translation>풍선 도움말</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::BrushManagerProxy</name>
+ <message>
+ <source>The element &apos;%1&apos; is missing the required attribute &apos;%2&apos;.</source>
+ <translation>원소 &apos;%1&apos;에 필요한 속성 &apos;%2&apos;이(가) 없습니다.</translation>
+ </message>
+ <message>
+ <source>Empty brush name encountered.</source>
+ <translation>브러시 이름이 비어 있습니다.</translation>
+ </message>
+ <message>
+ <source>An unexpected element &apos;%1&apos; was encountered.</source>
+ <translation>예상하지 못한 원소 &apos;%1&apos;이(가) 있습니다.</translation>
+ </message>
+ <message>
+ <source>An error occurred when reading the brush definition file &apos;%1&apos; at line line %2, column %3: %4</source>
+ <translation>브러시 정의 파일 &apos;%1&apos;의 %2번째 줄, %3번째 칸을 읽는 중 오류 발생: %4</translation>
+ </message>
+ <message>
+ <source>An error occurred when reading the resource file &apos;%1&apos; at line %2, column %3: %4</source>
+ <translation>리소스 파일 &apos;%1&apos;의 %2번째 줄, %3번째 칸을 읽는 중 오류 발생: %4</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::BuddyEditor</name>
+ <message>
+ <source>Add buddy</source>
+ <translation>친구 추가</translation>
+ </message>
+ <message>
+ <source>Remove buddies</source>
+ <translation>친구 삭제</translation>
+ </message>
+ <message numerus="yes">
+ <source>Remove %n buddies</source>
+ <translation>
+ <numerusform>친구 %n개 삭제</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source>Add %n buddies</source>
+ <translation>
+ <numerusform>친구 %n개 추가</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Set automatically</source>
+ <translation>자동으로 설정</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::BuddyEditorPlugin</name>
+ <message>
+ <source>Edit Buddies</source>
+ <translation>친구 편집</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::BuddyEditorTool</name>
+ <message>
+ <source>Edit Buddies</source>
+ <translation>친구 편집</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ButtonGroupMenu</name>
+ <message>
+ <source>Select members</source>
+ <translation>구성원 선택</translation>
+ </message>
+ <message>
+ <source>Break</source>
+ <translation>풀기</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ButtonTaskMenu</name>
+ <message>
+ <source>Assign to button group</source>
+ <translation>단추 그룹에 할당</translation>
+ </message>
+ <message>
+ <source>Button group</source>
+ <translation>단추 그룹</translation>
+ </message>
+ <message>
+ <source>New button group</source>
+ <translation>새 단추 그룹</translation>
+ </message>
+ <message>
+ <source>Change text...</source>
+ <translation>텍스트 바꾸기...</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>없음</translation>
+ </message>
+ <message>
+ <source>Button group &apos;%1&apos;</source>
+ <translation>단추 그룹 &apos;%1&apos;</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::CodeDialog</name>
+ <message>
+ <source>Save...</source>
+ <translation>저장...</translation>
+ </message>
+ <message>
+ <source>Copy All</source>
+ <translation>모두 복사</translation>
+ </message>
+ <message>
+ <source>&amp;Find in Text...</source>
+ <translation>텍스트에서 찾기(&amp;F)...</translation>
+ </message>
+ <message>
+ <source>A temporary form file could not be created in %1.</source>
+ <translation>%1에 임시 폼 파일을 만들 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The temporary form file %1 could not be written.</source>
+ <translation>임시 폼 파일 %1에 쓸 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 - [Code]</source>
+ <translation>%1 - [코드]</translation>
+ </message>
+ <message>
+ <source>Save Code</source>
+ <translation>코드 저장</translation>
+ </message>
+ <message>
+ <source>Header Files (*.%1)</source>
+ <translation>헤더 파일 (*.%1)</translation>
+ </message>
+ <message>
+ <source>The file %1 could not be opened: %2</source>
+ <translation>파일 %1을(를) 열 수 없습니다: %2</translation>
+ </message>
+ <message>
+ <source>The file %1 could not be written: %2</source>
+ <translation>파일 %1에 쓸 수 없습니다: %2</translation>
+ </message>
+ <message>
+ <source>%1 - Error</source>
+ <translation>%1 - 오류</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ColorAction</name>
+ <message>
+ <source>Text Color</source>
+ <translation>글자 색</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ComboBoxTaskMenu</name>
+ <message>
+ <source>Edit Items...</source>
+ <translation>항목 편집...</translation>
+ </message>
+ <message>
+ <source>Change Combobox Contents</source>
+ <translation>콤보 상자 내용 변경</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::CommandLinkButtonTaskMenu</name>
+ <message>
+ <source>Change description...</source>
+ <translation>설명 변경...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ConnectionEdit</name>
+ <message>
+ <source>Select All</source>
+ <translation>모두 선택</translation>
+ </message>
+ <message>
+ <source>Deselect All</source>
+ <translation>모두 선택 해제</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ConnectionModel</name>
+ <message>
+ <source>Sender</source>
+ <translation>송신자</translation>
+ </message>
+ <message>
+ <source>Signal</source>
+ <translation>시그널</translation>
+ </message>
+ <message>
+ <source>Receiver</source>
+ <translation>수신자</translation>
+ </message>
+ <message>
+ <source>Slot</source>
+ <translation>슬롯</translation>
+ </message>
+ <message>
+ <source>&lt;sender&gt;</source>
+ <translation>&lt;송신자&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;signal&gt;</source>
+ <translation>&lt;시그널&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;receiver&gt;</source>
+ <translation>&lt;수신자&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;slot&gt;</source>
+ <translation>&lt;슬롯&gt;</translation>
+ </message>
+ <message>
+ <source>The connection already exists!&lt;br&gt;%1</source>
+ <translation>이미 연결되어 있습니다!&lt;br&gt;%1</translation>
+ </message>
+ <message>
+ <source>Signal and Slot Editor</source>
+ <translation>시그널/슬롯 편집기</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ContainerWidgetTaskMenu</name>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Insert</source>
+ <translation>삽입</translation>
+ </message>
+ <message>
+ <source>Insert Page Before Current Page</source>
+ <translation>현재 쪽 앞에 쪽 삽입</translation>
+ </message>
+ <message>
+ <source>Insert Page After Current Page</source>
+ <translation>현재 쪽 다음에 쪽 삽입</translation>
+ </message>
+ <message>
+ <source>Add Subwindow</source>
+ <translation>하위 창 추가</translation>
+ </message>
+ <message>
+ <source>Subwindow</source>
+ <translation>하위 창</translation>
+ </message>
+ <message>
+ <source>Page</source>
+ <translation>쪽</translation>
+ </message>
+ <message>
+ <source>Page %1 of %2</source>
+ <translation>%2 중 %1쪽</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::DPI_Chooser</name>
+ <message>
+ <source>System (%1 x %2)</source>
+ <extracomment>System resolution</extracomment>
+ <translation>시스템 (%1 x %2)</translation>
+ </message>
+ <message>
+ <source>User defined</source>
+ <translation>사용자 정의</translation>
+ </message>
+ <message>
+ <source> x </source>
+ <extracomment>DPI X/Y separator</extracomment>
+ <translation> x </translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::DesignerPropertyManager</name>
+ <message>
+ <source>AlignLeft</source>
+ <translation>왼쪽정렬</translation>
+ </message>
+ <message>
+ <source>AlignHCenter</source>
+ <translation>수평가운데정렬</translation>
+ </message>
+ <message>
+ <source>AlignRight</source>
+ <translation>오른쪽정렬</translation>
+ </message>
+ <message>
+ <source>AlignJustify</source>
+ <translation>양쪽맞춤</translation>
+ </message>
+ <message>
+ <source>AlignTop</source>
+ <translation>위로정렬</translation>
+ </message>
+ <message>
+ <source>AlignVCenter</source>
+ <translation>수직가운데정렬</translation>
+ </message>
+ <message>
+ <source>AlignBottom</source>
+ <translation>아래로정렬</translation>
+ </message>
+ <message>
+ <source>%1, %2</source>
+ <translation>%1, %2</translation>
+ </message>
+ <message numerus="yes">
+ <source>Customized (%n roles)</source>
+ <translation>
+ <numerusform>사용자 정의 (역할 %n개)</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Inherited</source>
+ <translation>상속됨</translation>
+ </message>
+ <message>
+ <source>Horizontal</source>
+ <translation>수평</translation>
+ </message>
+ <message>
+ <source>Vertical</source>
+ <translation>수직</translation>
+ </message>
+ <message>
+ <source>Normal Off</source>
+ <translation>일반 꺼짐</translation>
+ </message>
+ <message>
+ <source>Normal On</source>
+ <translation>일반 켜짐</translation>
+ </message>
+ <message>
+ <source>Disabled Off</source>
+ <translation>사용 불가능 꺼짐</translation>
+ </message>
+ <message>
+ <source>Disabled On</source>
+ <translation>사용 불가능 켜짐</translation>
+ </message>
+ <message>
+ <source>Active Off</source>
+ <translation>활성 꺼짐</translation>
+ </message>
+ <message>
+ <source>Active On</source>
+ <translation>활성 켜짐</translation>
+ </message>
+ <message>
+ <source>Selected Off</source>
+ <translation>선택 꺼짐</translation>
+ </message>
+ <message>
+ <source>Selected On</source>
+ <translation>선택 켜짐</translation>
+ </message>
+ <message>
+ <source>translatable</source>
+ <translation>번역가능</translation>
+ </message>
+ <message>
+ <source>disambiguation</source>
+ <translation>동음이의</translation>
+ </message>
+ <message>
+ <source>comment</source>
+ <translation>설명</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::DeviceProfileDialog</name>
+ <message>
+ <source>Device Profiles (*.%1)</source>
+ <translation>장치 프로필 (*.%1)</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <translation>기본값</translation>
+ </message>
+ <message>
+ <source>Save Profile</source>
+ <translation>프로필 저장</translation>
+ </message>
+ <message>
+ <source>Save Profile - Error</source>
+ <translation>프로필 저장 - 오류</translation>
+ </message>
+ <message>
+ <source>Unable to open the file &apos;%1&apos; for writing: %2</source>
+ <translation>파일 %1에 쓰기 위해 열 수 없습니다: %2</translation>
+ </message>
+ <message>
+ <source>Open profile</source>
+ <translation>프로필 열기</translation>
+ </message>
+ <message>
+ <source>Open Profile - Error</source>
+ <translation>프로필 열기 - 오류</translation>
+ </message>
+ <message>
+ <source>Unable to open the file &apos;%1&apos; for reading: %2</source>
+ <translation>파일 %1에서 읽기 위해 열 수 없습니다: %2</translation>
+ </message>
+ <message>
+ <source>&apos;%1&apos; is not a valid profile: %2</source>
+ <translation>&apos;%1&apos;은(는) 올바른 프로필이 아닙니다: %2</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::Dialog</name>
+ <message>
+ <source>Dialog</source>
+ <translation>대화 상자</translation>
+ </message>
+ <message>
+ <source>StringList</source>
+ <translation>문자열 목록</translation>
+ </message>
+ <message>
+ <source>New String</source>
+ <translation>새 문자열</translation>
+ </message>
+ <message>
+ <source>&amp;New</source>
+ <translation>새로 만들기(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Delete String</source>
+ <translation>문자열 삭제</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>삭제(&amp;D)</translation>
+ </message>
+ <message>
+ <source>&amp;Value:</source>
+ <translation>값(&amp;V):</translation>
+ </message>
+ <message>
+ <source>Move String Up</source>
+ <translation>문자열 위로 이동</translation>
+ </message>
+ <message>
+ <source>Up</source>
+ <translation>위로</translation>
+ </message>
+ <message>
+ <source>Move String Down</source>
+ <translation>문자열 아래로 이동</translation>
+ </message>
+ <message>
+ <source>Down</source>
+ <translation>아래로</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::EmbeddedOptionsControl</name>
+ <message>
+ <source>None</source>
+ <translation>없음</translation>
+ </message>
+ <message>
+ <source>Add a profile</source>
+ <translation>프로필 추가</translation>
+ </message>
+ <message>
+ <source>Edit the selected profile</source>
+ <translation>선택한 프로필 편집</translation>
+ </message>
+ <message>
+ <source>Delete the selected profile</source>
+ <translation>선택한 프로필 삭제</translation>
+ </message>
+ <message>
+ <source>Add Profile</source>
+ <translation>프로필 추가</translation>
+ </message>
+ <message>
+ <source>New profile</source>
+ <translation>새 프로필</translation>
+ </message>
+ <message>
+ <source>Edit Profile</source>
+ <translation>프로필 편집</translation>
+ </message>
+ <message>
+ <source>Delete Profile</source>
+ <translation>프로필 삭제</translation>
+ </message>
+ <message>
+ <source>Would you like to delete the profile &apos;%1&apos;?</source>
+ <translation>프로필 &apos;%1&apos;을(를) 삭제하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <translation>기본값</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FilterWidget</name>
+ <message>
+ <source>Filter</source>
+ <translation>필터</translation>
+ </message>
+ <message>
+ <source>Clear text</source>
+ <translation>텍스트 삭제</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormEditor</name>
+ <message>
+ <source>Resource File Changed</source>
+ <translation>리소스 파일 변경됨</translation>
+ </message>
+ <message>
+ <source>The file &quot;%1&quot; has changed outside Designer. Do you want to reload it?</source>
+ <translation>파일 &quot;%1&quot;이(가) Designer 밖에서 편집되었습니다. 다시 불러오시겠습니까?</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormLayoutMenu</name>
+ <message>
+ <source>Add form layout row...</source>
+ <translation>폼 레이아웃 행 추가...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormWindow</name>
+ <message>
+ <source>Edit contents</source>
+ <translation>내용 편집</translation>
+ </message>
+ <message>
+ <source>F2</source>
+ <translation>F2</translation>
+ </message>
+ <message>
+ <source>Insert widget &apos;%1&apos;</source>
+ <translation>위젯 &apos;%1&apos; 삽입</translation>
+ </message>
+ <message>
+ <source>Resize</source>
+ <translation>크기 조정</translation>
+ </message>
+ <message>
+ <source>Key Resize</source>
+ <translation>키 크기 조정</translation>
+ </message>
+ <message>
+ <source>Key Move</source>
+ <translation>키 이동</translation>
+ </message>
+ <message numerus="yes">
+ <source>Paste %n action(s)</source>
+ <translation>
+ <numerusform>동작 %n개 붙여넣기</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source>Paste %n widget(s)</source>
+ <translation>
+ <numerusform>위젯 %n개 붙여넣기</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Paste (%1 widgets, %2 actions)</source>
+ <translation>붙여넣기 (위젯 %1개, 동작 %2개)</translation>
+ </message>
+ <message>
+ <source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source>
+ <translation>위젯을 붙여넣을 수 없습니다. Designer에서 레이아웃이 없는 위젯을 붙여넣을 컨테이너를 찾을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Break the layout of the container you want to paste into, select this container and then paste again.</source>
+ <translation>붙여넣을 컨테이너의 레이아웃을 푼 다음, 이 컨테이너를 다시 선택하고 붙여넣으십시오.</translation>
+ </message>
+ <message>
+ <source>Paste error</source>
+ <translation>붙여넣기 오류</translation>
+ </message>
+ <message>
+ <source>Raise widgets</source>
+ <translation>위젯 올리기</translation>
+ </message>
+ <message>
+ <source>Lower widgets</source>
+ <translation>위젯 내리기</translation>
+ </message>
+ <message>
+ <source>Select Ancestor</source>
+ <translation>조상 선택</translation>
+ </message>
+ <message>
+ <source>Lay out</source>
+ <translation>배치</translation>
+ </message>
+ <message>
+ <source>Drop widget</source>
+ <translation>위젯 추가하기</translation>
+ </message>
+ <message>
+ <source>A QMainWindow-based form does not contain a central widget.</source>
+ <translation>QMainWindow 기반 폼은 중심 위젯을 포함하지 않습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormWindowBase</name>
+ <message>
+ <source>Delete &apos;%1&apos;</source>
+ <translation>&apos;%1&apos; 삭제</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormWindowManager</name>
+ <message>
+ <source>Cu&amp;t</source>
+ <translation>잘라내기(&amp;T)</translation>
+ </message>
+ <message>
+ <source>Cuts the selected widgets and puts them on the clipboard</source>
+ <translation>선택한 위젯을 잘라내고 클립보드에 붙여 넣습니다</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>복사(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Copies the selected widgets to the clipboard</source>
+ <translation>선택한 위젯을 클립보드로 복사합니다</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>붙여넣기(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Pastes the clipboard&apos;s contents</source>
+ <translation>클립보드의 내용을 붙여 넣습니다</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>삭제(&amp;D)</translation>
+ </message>
+ <message>
+ <source>Deletes the selected widgets</source>
+ <translation>선택한 위젯을 삭제합니다</translation>
+ </message>
+ <message>
+ <source>Select &amp;All</source>
+ <translation>모두 선택(&amp;A)</translation>
+ </message>
+ <message>
+ <source>Selects all widgets</source>
+ <translation>모든 위젯을 선택합니다</translation>
+ </message>
+ <message>
+ <source>Bring to &amp;Front</source>
+ <translation>앞으로 가져오기(&amp;F)</translation>
+ </message>
+ <message>
+ <source>Raises the selected widgets</source>
+ <translation>선택한 위젯을 앞으로 가져옵니다</translation>
+ </message>
+ <message>
+ <source>Send to &amp;Back</source>
+ <translation>뒤로 보내기(&amp;B)</translation>
+ </message>
+ <message>
+ <source>Lowers the selected widgets</source>
+ <translation>선택한 위젯을 뒤로 보냅니다</translation>
+ </message>
+ <message>
+ <source>Adjust &amp;Size</source>
+ <translation>크기 조정(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Adjusts the size of the selected widget</source>
+ <translation>선택한 위젯의 크기를 조정합니다</translation>
+ </message>
+ <message>
+ <source>Lay Out &amp;Horizontally</source>
+ <translation>수평으로 배치(&amp;H)</translation>
+ </message>
+ <message>
+ <source>Lays out the selected widgets horizontally</source>
+ <translation>선택한 위젯을 수평으로 배치합니다</translation>
+ </message>
+ <message>
+ <source>Lay Out &amp;Vertically</source>
+ <translation>수직으로 배치(&amp;V)</translation>
+ </message>
+ <message>
+ <source>Lays out the selected widgets vertically</source>
+ <translation>선택한 위젯을 수직으로 배치합니다</translation>
+ </message>
+ <message>
+ <source>Lay Out in a &amp;Form Layout</source>
+ <translation>폼 레이아웃으로 배치(&amp;F)</translation>
+ </message>
+ <message>
+ <source>Lays out the selected widgets in a form layout</source>
+ <translation>선택한 위젯을 폼 레이아웃으로 배치합니다</translation>
+ </message>
+ <message>
+ <source>Lay Out in a &amp;Grid</source>
+ <translation>격자형으로 배치(&amp;G)</translation>
+ </message>
+ <message>
+ <source>Lays out the selected widgets in a grid</source>
+ <translation>선택한 위젯을 격자형으로 배치합니다</translation>
+ </message>
+ <message>
+ <source>Lay Out Horizontally in S&amp;plitter</source>
+ <translation>구분자를 사용하여 수평으로 배치(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Lays out the selected widgets horizontally in a splitter</source>
+ <translation>선택한 위젯을 구분자를 사용하여 수평으로 배치합니다</translation>
+ </message>
+ <message>
+ <source>Lay Out Vertically in Sp&amp;litter</source>
+ <translation>구분자를 사용하여 수직으로 배치(&amp;L)</translation>
+ </message>
+ <message>
+ <source>Lays out the selected widgets vertically in a splitter</source>
+ <translation>선택한 위젯을 구분자를 사용하여 수직으로 배치합니다</translation>
+ </message>
+ <message>
+ <source>&amp;Break Layout</source>
+ <translation>레이아웃 풀기(&amp;B)</translation>
+ </message>
+ <message>
+ <source>Breaks the selected layout</source>
+ <translation>선택한 레이아웃을 풉니다</translation>
+ </message>
+ <message>
+ <source>Si&amp;mplify Grid Layout</source>
+ <translation>격자 레이아웃 간단하게 하기(&amp;M)</translation>
+ </message>
+ <message>
+ <source>Removes empty columns and rows</source>
+ <translation>비어 있는 행과 열을 삭제합니다</translation>
+ </message>
+ <message>
+ <source>&amp;Preview...</source>
+ <translation>미리 보기(&amp;P)...</translation>
+ </message>
+ <message>
+ <source>Preview current form</source>
+ <translation>현재 폼을 미리 봅니다</translation>
+ </message>
+ <message>
+ <source>Form &amp;Settings...</source>
+ <translation>폼 설정(&amp;S)...</translation>
+ </message>
+ <message>
+ <source>Break Layout</source>
+ <translation>레이아웃 풀기</translation>
+ </message>
+ <message>
+ <source>Adjust Size</source>
+ <translation>크기 조정</translation>
+ </message>
+ <message>
+ <source>Could not create form preview</source>
+ <comment>Title of warning message box</comment>
+ <translation>폼을 미리볼 수 없음</translation>
+ </message>
+ <message>
+ <source>Form Settings - %1</source>
+ <translation>폼 설정 - %1</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormWindowSettings</name>
+ <message>
+ <source>None</source>
+ <translation>없음</translation>
+ </message>
+ <message>
+ <source>Device Profile: %1</source>
+ <translation>장치 프로필: %1</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::GridPanel</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Grid</source>
+ <translation>격자</translation>
+ </message>
+ <message>
+ <source>Visible</source>
+ <translation>보이기</translation>
+ </message>
+ <message>
+ <source>Grid &amp;X</source>
+ <translation>격자 X 간격(&amp;X)</translation>
+ </message>
+ <message>
+ <source>Snap</source>
+ <translation>맞춤</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <translation>초기화</translation>
+ </message>
+ <message>
+ <source>Grid &amp;Y</source>
+ <translation>격자 Y 간격(&amp;Y)</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::GroupBoxTaskMenu</name>
+ <message>
+ <source>Change title...</source>
+ <translation>제목 변경...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::HtmlTextEdit</name>
+ <message>
+ <source>Insert HTML entity</source>
+ <translation>HTML 엔티티 삽입</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::IconSelector</name>
+ <message>
+ <source>The pixmap file &apos;%1&apos; cannot be read.</source>
+ <translation>픽스맵 파일 &apos;%1&apos;을(를) 읽을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The file &apos;%1&apos; does not appear to be a valid pixmap file: %2</source>
+ <translation>파일 &apos;%1&apos;은(는) 올바른 픽스맵 파일 같지 않습니다: %2</translation>
+ </message>
+ <message>
+ <source>The file &apos;%1&apos; could not be read: %2</source>
+ <translation>파일 &apos;%1&apos;을(를) 읽을 수 없습니다: %2</translation>
+ </message>
+ <message>
+ <source>Choose a Pixmap</source>
+ <translation>픽스맵 선택</translation>
+ </message>
+ <message>
+ <source>Pixmap Read Error</source>
+ <translation>픽스맵 읽기 오류</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Normal Off</source>
+ <translation>일반 꺼짐</translation>
+ </message>
+ <message>
+ <source>Normal On</source>
+ <translation>일반 켜짐</translation>
+ </message>
+ <message>
+ <source>Disabled Off</source>
+ <translation>사용 불가능 꺼짐</translation>
+ </message>
+ <message>
+ <source>Disabled On</source>
+ <translation>사용 불가능 켜짐</translation>
+ </message>
+ <message>
+ <source>Active Off</source>
+ <translation>활성 꺼짐</translation>
+ </message>
+ <message>
+ <source>Active On</source>
+ <translation>활성 켜짐</translation>
+ </message>
+ <message>
+ <source>Selected Off</source>
+ <translation>선택 꺼짐</translation>
+ </message>
+ <message>
+ <source>Selected On</source>
+ <translation>선택 켜짐</translation>
+ </message>
+ <message>
+ <source>Choose Resource...</source>
+ <translation>리소스 선택...</translation>
+ </message>
+ <message>
+ <source>Choose File...</source>
+ <translation>파일 선택...</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <translation>초기화</translation>
+ </message>
+ <message>
+ <source>Reset All</source>
+ <translation>모두 초기화</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ItemListEditor</name>
+ <message>
+ <source>Items List</source>
+ <translation>항목 목록</translation>
+ </message>
+ <message>
+ <source>New Item</source>
+ <translation>새 항목</translation>
+ </message>
+ <message>
+ <source>&amp;New</source>
+ <translation>새로 만들기(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Delete Item</source>
+ <translation>항목 삭제</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>삭제(&amp;D)</translation>
+ </message>
+ <message>
+ <source>Move Item Up</source>
+ <translation>항목 위로 이동</translation>
+ </message>
+ <message>
+ <source>U</source>
+ <translation>U</translation>
+ </message>
+ <message>
+ <source>Move Item Down</source>
+ <translation>항목 아래로 이동</translation>
+ </message>
+ <message>
+ <source>D</source>
+ <translation>D</translation>
+ </message>
+ <message>
+ <source>Properties &amp;&gt;&gt;</source>
+ <translation>속성 &amp;&gt;&gt;</translation>
+ </message>
+ <message>
+ <source>Properties &amp;&lt;&lt;</source>
+ <translation>속성 &amp;&lt;&lt;</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::LabelTaskMenu</name>
+ <message>
+ <source>Change rich text...</source>
+ <translation>서식있는 텍스트 바꾸기...</translation>
+ </message>
+ <message>
+ <source>Change plain text...</source>
+ <translation>일반 텍스트 바꾸기...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::LanguageResourceDialog</name>
+ <message>
+ <source>Choose Resource</source>
+ <translation>리소스 선택</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::LineEditTaskMenu</name>
+ <message>
+ <source>Change text...</source>
+ <translation>텍스트 선택...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ListWidgetEditor</name>
+ <message>
+ <source>New Item</source>
+ <translation>새 항목</translation>
+ </message>
+ <message>
+ <source>Edit List Widget</source>
+ <translation>목록 위젯 편집</translation>
+ </message>
+ <message>
+ <source>Edit Combobox</source>
+ <translation>콤보 상자 편집</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ListWidgetTaskMenu</name>
+ <message>
+ <source>Edit Items...</source>
+ <translation>항목 편집...</translation>
+ </message>
+ <message>
+ <source>Change List Contents</source>
+ <translation>목록 내용 변경</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::MdiContainerWidgetTaskMenu</name>
+ <message>
+ <source>Next Subwindow</source>
+ <translation>다음 하위 창</translation>
+ </message>
+ <message>
+ <source>Previous Subwindow</source>
+ <translation>이전 하위 창</translation>
+ </message>
+ <message>
+ <source>Tile</source>
+ <translation>바둑판식 배열</translation>
+ </message>
+ <message>
+ <source>Cascade</source>
+ <translation>계단식 배열</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::MenuTaskMenu</name>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::MorphMenu</name>
+ <message>
+ <source>Morph into</source>
+ <translation>다음으로 변형</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::NewActionDialog</name>
+ <message>
+ <source>New Action...</source>
+ <translation>새 동작...</translation>
+ </message>
+ <message>
+ <source>&amp;Text:</source>
+ <translation>텍스트(&amp;T):</translation>
+ </message>
+ <message>
+ <source>Object &amp;name:</source>
+ <translation>객체 이름(&amp;N):</translation>
+ </message>
+ <message>
+ <source>&amp;Icon:</source>
+ <translation>아이콘(&amp;I):</translation>
+ </message>
+ <message>
+ <source>Shortcut:</source>
+ <translation>단축키:</translation>
+ </message>
+ <message>
+ <source>Checkable:</source>
+ <translation>선택 가능:</translation>
+ </message>
+ <message>
+ <source>ToolTip:</source>
+ <translation>풍선 도움말:</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::NewDynamicPropertyDialog</name>
+ <message>
+ <source>Create Dynamic Property</source>
+ <translation>동적 속성 만들기</translation>
+ </message>
+ <message>
+ <source>Property Name</source>
+ <translation>속성 이름</translation>
+ </message>
+ <message>
+ <source>horizontalSpacer</source>
+ <translation>horizontalSpacer</translation>
+ </message>
+ <message>
+ <source>Property Type</source>
+ <translation>속성 형식</translation>
+ </message>
+ <message>
+ <source>Set Property Name</source>
+ <translation>속성 이름 설정</translation>
+ </message>
+ <message>
+ <source>The current object already has a property named &apos;%1&apos;.
+Please select another, unique one.</source>
+ <translation>현재 객체에 속성 &apos;%1&apos;이(가) 있습니다.
+다른 이름을 지정하십시오.</translation>
+ </message>
+ <message>
+ <source>The &apos;_q_&apos; prefix is reserved for the Qt library.
+Please select another name.</source>
+ <translation>&apos;_q_&apos; 접두사는 Qt 라이브러리에서 사용하기 위해 예약되어 있습니다.
+다른 이름을 사용하십시오.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::NewFormWidget</name>
+ <message>
+ <source>0</source>
+ <translation>0</translation>
+ </message>
+ <message>
+ <source>Choose a template for a preview</source>
+ <translation>미리 볼 템플릿 선택</translation>
+ </message>
+ <message>
+ <source>Embedded Design</source>
+ <translation>임베디드 디자인</translation>
+ </message>
+ <message>
+ <source>Device:</source>
+ <translation>장치:</translation>
+ </message>
+ <message>
+ <source>Screen Size:</source>
+ <translation>화면 크기:</translation>
+ </message>
+ <message>
+ <source>Default size</source>
+ <translation>기본 크기</translation>
+ </message>
+ <message>
+ <source>QVGA portrait (240x320)</source>
+ <translation>QVGA 세로 (240x320)</translation>
+ </message>
+ <message>
+ <source>QVGA landscape (320x240)</source>
+ <translation>QVGA 가로 (320x240)</translation>
+ </message>
+ <message>
+ <source>VGA portrait (480x640)</source>
+ <translation>VGA 세로 (480x640)</translation>
+ </message>
+ <message>
+ <source>VGA landscape (640x480)</source>
+ <translation>VGA 가로 (640x480)</translation>
+ </message>
+ <message>
+ <source>Widgets</source>
+ <extracomment>New Form Dialog Categories</extracomment>
+ <translation>위젯</translation>
+ </message>
+ <message>
+ <source>Custom Widgets</source>
+ <translation>사용자 정의 위젯</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>없음</translation>
+ </message>
+ <message>
+ <source>Error loading form</source>
+ <translation>폼 불러오는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>Unable to open the form template file &apos;%1&apos;: %2</source>
+ <translation>폼 템플릿 파일 &apos;%1&apos;을(를) 열 수 없음: %2</translation>
+ </message>
+ <message>
+ <source>Internal error: No template selected.</source>
+ <translation>내부 오류: 템플릿이 선택되지 않았습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::NewPromotedClassPanel</name>
+ <message>
+ <source>Add</source>
+ <translation>추가</translation>
+ </message>
+ <message>
+ <source>New Promoted Class</source>
+ <translation>새 승격된 클래스</translation>
+ </message>
+ <message>
+ <source>Base class name:</source>
+ <translation>기반 클래스 이름:</translation>
+ </message>
+ <message>
+ <source>Promoted class name:</source>
+ <translation>승격된 클래스 이름:</translation>
+ </message>
+ <message>
+ <source>Header file:</source>
+ <translation>헤더 파일:</translation>
+ </message>
+ <message>
+ <source>Global include</source>
+ <translation>전역 포함</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <translation>초기화</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ObjectInspector</name>
+ <message>
+ <source>Change Current Page</source>
+ <translation>현재 쪽 변경</translation>
+ </message>
+ <message>
+ <source>&amp;Find in Text...</source>
+ <translation>텍스트에서 찾기(&amp;F)...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::OrderDialog</name>
+ <message>
+ <source>Change Page Order</source>
+ <translation>쪽 순서 변경</translation>
+ </message>
+ <message>
+ <source>Page Order</source>
+ <translation>쪽 순서</translation>
+ </message>
+ <message>
+ <source>Move page up</source>
+ <translation>쪽 위로 이동</translation>
+ </message>
+ <message>
+ <source>Move page down</source>
+ <translation>쪽 아래로 이동</translation>
+ </message>
+ <message>
+ <source>Index %1 (%2)</source>
+ <translation>인덱스 %1 (%2)</translation>
+ </message>
+ <message>
+ <source>%1 %2</source>
+ <translation>%1 %2</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PaletteEditor</name>
+ <message>
+ <source>Edit Palette</source>
+ <translation>팔레트 편집</translation>
+ </message>
+ <message>
+ <source>Tune Palette</source>
+ <translation>팔레트 조정</translation>
+ </message>
+ <message>
+ <source>Show Details</source>
+ <translation>팔레트 직접 편집</translation>
+ </message>
+ <message>
+ <source>Compute Details</source>
+ <translation>팔레트 자동 생성</translation>
+ </message>
+ <message>
+ <source>Quick</source>
+ <translation>빠른 설정</translation>
+ </message>
+ <message>
+ <source>Preview</source>
+ <translation>미리 보기</translation>
+ </message>
+ <message>
+ <source>Disabled</source>
+ <translation>사용 불가능</translation>
+ </message>
+ <message>
+ <source>Inactive</source>
+ <translation>비활성</translation>
+ </message>
+ <message>
+ <source>Active</source>
+ <translation>활성</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PaletteEditorButton</name>
+ <message>
+ <source>Change Palette</source>
+ <translation>팔레트 변경</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PaletteModel</name>
+ <message>
+ <source>Color Role</source>
+ <translation>색상 역할</translation>
+ </message>
+ <message>
+ <source>Active</source>
+ <translation>활성</translation>
+ </message>
+ <message>
+ <source>Inactive</source>
+ <translation>비활성</translation>
+ </message>
+ <message>
+ <source>Disabled</source>
+ <translation>사용 불가능</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PixmapEditor</name>
+ <message>
+ <source>Choose Resource...</source>
+ <translation>리소스 선택...</translation>
+ </message>
+ <message>
+ <source>Choose File...</source>
+ <translation>파일 선택...</translation>
+ </message>
+ <message>
+ <source>Copy Path</source>
+ <translation>경로 복사</translation>
+ </message>
+ <message>
+ <source>Paste Path</source>
+ <translation>경로 붙여넣기</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PlainTextEditorDialog</name>
+ <message>
+ <source>Edit text</source>
+ <translation>텍스트 편집</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PluginDialog</name>
+ <message>
+ <source>Components</source>
+ <translation>구성 요소</translation>
+ </message>
+ <message>
+ <source>Plugin Information</source>
+ <translation>플러그인 정보</translation>
+ </message>
+ <message>
+ <source>Refresh</source>
+ <translation>새로 고침</translation>
+ </message>
+ <message>
+ <source>Scan for newly installed custom widget plugins.</source>
+ <translation>새로 설치된 사용자 정의 위젯 플러그인을 검사합니다.</translation>
+ </message>
+ <message>
+ <source>Loaded Plugins</source>
+ <translation>불러온 플러그인</translation>
+ </message>
+ <message>
+ <source>Failed Plugins</source>
+ <translation>실패한 플러그인</translation>
+ </message>
+ <message>
+ <source>Qt Designer couldn&apos;t find any plugins</source>
+ <translation>Qt Designer에서 플러그인을 찾을 수 없습니다</translation>
+ </message>
+ <message>
+ <source>Qt Designer found the following plugins</source>
+ <translation>Qt Designer에서 다음 플러그인을 찾았습니다</translation>
+ </message>
+ <message>
+ <source>New custom widget plugins have been found.</source>
+ <translation>새 사용자 정의 위젯 플러그인을 찾았습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewActionGroup</name>
+ <message>
+ <source>%1 Style</source>
+ <translation>%1 스타일</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewConfigurationWidget</name>
+ <message>
+ <source>Default</source>
+ <translation>기본값</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>없음</translation>
+ </message>
+ <message>
+ <source>Browse...</source>
+ <translation>찾아보기...</translation>
+ </message>
+ <message>
+ <source>Load Custom Device Skin</source>
+ <translation>사용자 정의 장치 스킨 불러오기</translation>
+ </message>
+ <message>
+ <source>All QVFB Skins (*.%1)</source>
+ <translation>모든 QVFB 스킨 (*.%1)</translation>
+ </message>
+ <message>
+ <source>%1 - Duplicate Skin</source>
+ <translation>%1 - 중복된 스킨</translation>
+ </message>
+ <message>
+ <source>The skin &apos;%1&apos; already exists.</source>
+ <translation>스킨 &apos;%1&apos;이(가) 이미 존재합니다.</translation>
+ </message>
+ <message>
+ <source>%1 - Error</source>
+ <translation>%1 - 오류</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid skin directory:
+%2</source>
+ <translation>%1은(는) 올바른 스킨 디렉터리가 아닙니다:
+%2</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewDeviceSkin</name>
+ <message>
+ <source>&amp;Portrait</source>
+ <translation>세로(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Landscape (&amp;CCW)</source>
+ <extracomment>Rotate form preview counter-clockwise</extracomment>
+ <translation>가로 (반시계방향)(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Landscape (CW)</source>
+ <extracomment>Rotate form preview clockwise</extracomment>
+ <translation>가로 (시계방향)(&amp;L)</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>닫기(&amp;C)</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewManager</name>
+ <message>
+ <source>%1 - [Preview]</source>
+ <translation>%1 - [미리 보기]</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewMdiArea</name>
+ <message>
+ <source>The moose in the noose
+ate the goose who was loose.</source>
+ <extracomment>Palette editor background</extracomment>
+ <translation>키스의 고유 조건은 입술끼리
+만나야 되고 특별한 요령은 필요치 않다.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewWidget</name>
+ <message>
+ <source>Preview Window</source>
+ <translation>미리 보기 창</translation>
+ </message>
+ <message>
+ <source>LineEdit</source>
+ <translation>라인 편집기</translation>
+ </message>
+ <message>
+ <source>ComboBox</source>
+ <translation>콤보 상자</translation>
+ </message>
+ <message>
+ <source>PushButton</source>
+ <translation>누름 단추</translation>
+ </message>
+ <message>
+ <source>ButtonGroup2</source>
+ <translation>단추 그룹 2</translation>
+ </message>
+ <message>
+ <source>CheckBox1</source>
+ <translation>체크 상자 1</translation>
+ </message>
+ <message>
+ <source>CheckBox2</source>
+ <translation>체크 상자 2</translation>
+ </message>
+ <message>
+ <source>ButtonGroup</source>
+ <translation>단추 그룹</translation>
+ </message>
+ <message>
+ <source>RadioButton1</source>
+ <translation>라디오 단추 1</translation>
+ </message>
+ <message>
+ <source>RadioButton2</source>
+ <translation>라디오 단추 2</translation>
+ </message>
+ <message>
+ <source>RadioButton3</source>
+ <translation>라디오 단추 3</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PromotionModel</name>
+ <message>
+ <source>Name</source>
+ <translation>이름</translation>
+ </message>
+ <message>
+ <source>Header file</source>
+ <translation>헤더 파일</translation>
+ </message>
+ <message>
+ <source>Global include</source>
+ <translation>전역 포함</translation>
+ </message>
+ <message>
+ <source>Usage</source>
+ <translation>사용 여부</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PromotionTaskMenu</name>
+ <message>
+ <source>Promoted widgets...</source>
+ <translation>승격된 위젯...</translation>
+ </message>
+ <message>
+ <source>Promote to ...</source>
+ <translation>다음으로 승격...</translation>
+ </message>
+ <message>
+ <source>Change signals/slots...</source>
+ <translation>시그널/슬롯 변경...</translation>
+ </message>
+ <message>
+ <source>Promote to</source>
+ <translation>다음으로 승격</translation>
+ </message>
+ <message>
+ <source>Demote to %1</source>
+ <translation>%1(으)로 승격 해제</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PropertyEditor</name>
+ <message>
+ <source>Add Dynamic Property...</source>
+ <translation>동적 속성 추가...</translation>
+ </message>
+ <message>
+ <source>Remove Dynamic Property</source>
+ <translation>동적 속성 삭제</translation>
+ </message>
+ <message>
+ <source>Sorting</source>
+ <translation>정렬</translation>
+ </message>
+ <message>
+ <source>Color Groups</source>
+ <translation>색 그룹</translation>
+ </message>
+ <message>
+ <source>Tree View</source>
+ <translation>트리 보기</translation>
+ </message>
+ <message>
+ <source>Drop Down Button View</source>
+ <translation>드롭다운 단추 보기</translation>
+ </message>
+ <message>
+ <source>String...</source>
+ <translation>문자열...</translation>
+ </message>
+ <message>
+ <source>Bool...</source>
+ <translation>참/거짓...</translation>
+ </message>
+ <message>
+ <source>Other...</source>
+ <translation>기타...</translation>
+ </message>
+ <message>
+ <source>Configure Property Editor</source>
+ <translation>속성 편집기 설정</translation>
+ </message>
+ <message>
+ <source>Object: %1
+Class: %2</source>
+ <translation>객체: %1
+클래스: %2</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PropertyLineEdit</name>
+ <message>
+ <source>Insert line break</source>
+ <translation>줄 띄우기</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::QDesignerPromotionDialog</name>
+ <message>
+ <source>Promoted Widgets</source>
+ <translation>승격된 위젯</translation>
+ </message>
+ <message>
+ <source>Promoted Classes</source>
+ <translation>승격된 클래스</translation>
+ </message>
+ <message>
+ <source>Promote</source>
+ <translation>승격</translation>
+ </message>
+ <message>
+ <source>Change signals/slots...</source>
+ <translation>시그널/슬롯 변경...</translation>
+ </message>
+ <message>
+ <source>%1 - Error</source>
+ <translation>%1 - 오류</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::QDesignerResource</name>
+ <message>
+ <source>Loading qrc file</source>
+ <translation>qrc 파일 불러오는 중</translation>
+ </message>
+ <message>
+ <source>The specified qrc file &lt;p&gt;&lt;b&gt;%1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;could not be found. Do you want to update the file location?&lt;/p&gt;</source>
+ <translation>지정한 qrc 파일 &lt;p&gt;&lt;b&gt;%1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;을(를) 찾을 수 없습니다. 파일 위치를 변경하시겠습니까?&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>New location for %1</source>
+ <translation>%1의 새로운 위치</translation>
+ </message>
+ <message>
+ <source>Resource files (*.qrc)</source>
+ <translation>리소스 파일 (*.qrc)</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::QDesignerTaskMenu</name>
+ <message>
+ <source>Change objectName...</source>
+ <translation>objectName 바꾸기...</translation>
+ </message>
+ <message>
+ <source>Change toolTip...</source>
+ <translation>toolTip 바꾸기...</translation>
+ </message>
+ <message>
+ <source>Change whatsThis...</source>
+ <translation>whatsThis 바꾸기...</translation>
+ </message>
+ <message>
+ <source>Change styleSheet...</source>
+ <translation>styleSheet 바꾸기...</translation>
+ </message>
+ <message>
+ <source>Create Menu Bar</source>
+ <translation>메뉴 표시줄 생성</translation>
+ </message>
+ <message>
+ <source>Add Tool Bar</source>
+ <translation>도구 모음 추가</translation>
+ </message>
+ <message>
+ <source>Create Status Bar</source>
+ <translation>상태 표시줄 생성</translation>
+ </message>
+ <message>
+ <source>Remove Status Bar</source>
+ <translation>상태 표시줄 삭제</translation>
+ </message>
+ <message>
+ <source>Change script...</source>
+ <translation>스크립트 변경...</translation>
+ </message>
+ <message>
+ <source>Change signals/slots...</source>
+ <translation>시그널/슬롯 변경...</translation>
+ </message>
+ <message>
+ <source>Go to slot...</source>
+ <translation>슬롯으로 이동...</translation>
+ </message>
+ <message>
+ <source>Size Constraints</source>
+ <translation>크기 제한</translation>
+ </message>
+ <message>
+ <source>Set Minimum Width</source>
+ <translation>최소 너비 설정</translation>
+ </message>
+ <message>
+ <source>Set Minimum Height</source>
+ <translation>최소 높이 설정</translation>
+ </message>
+ <message>
+ <source>Set Minimum Size</source>
+ <translation>최소 크기 설정</translation>
+ </message>
+ <message>
+ <source>Set Maximum Width</source>
+ <translation>최대 너비 설정</translation>
+ </message>
+ <message>
+ <source>Set Maximum Height</source>
+ <translation>최대 높이 설정</translation>
+ </message>
+ <message>
+ <source>Set Maximum Size</source>
+ <translation>최대 크기 설정</translation>
+ </message>
+ <message>
+ <source>Edit ToolTip</source>
+ <translation>풍선 도움말 편집</translation>
+ </message>
+ <message>
+ <source>Edit WhatsThis</source>
+ <translation>컨텍스트 도움말 편집</translation>
+ </message>
+ <message>
+ <source>no signals available</source>
+ <translation>사용 가능한 시그널 없음</translation>
+ </message>
+ <message numerus="yes">
+ <source>Set size constraint on %n widget(s)</source>
+ <translation>
+ <numerusform>위젯 %n개의 크기 제한 설정</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::QDesignerWidgetBox</name>
+ <message>
+ <source>Unexpected element &lt;%1&gt;</source>
+ <translation>예상하지 못한 원소 &lt;%1&gt;</translation>
+ </message>
+ <message>
+ <source>A parse error occurred at line %1, column %2 of the XML code specified for the widget %3: %4
+%5</source>
+ <translation>위젯 %3 XML 코드의 %1번째 줄, %2번째 칸에서 처리 오류 발생: %4
+%5</translation>
+ </message>
+ <message>
+ <source>The XML code specified for the widget %1 does not contain any widget elements.
+%2</source>
+ <translation>위젯 %1의 XML 코드에 widget 원소가 없습니다.
+%2</translation>
+ </message>
+ <message>
+ <source>An error has been encountered at line %1 of %2: %3</source>
+ <translation>%2의 %1번째 줄에서 오류 발생: %3</translation>
+ </message>
+ <message>
+ <source>Unexpected element &lt;%1&gt; encountered when parsing for &lt;widget&gt; or &lt;ui&gt;</source>
+ <translation>&lt;widget&gt;이나 &lt;ui&gt;를 처리하는 중 예상하지 못한 원소 &lt;%1&gt;을(를) 만남</translation>
+ </message>
+ <message>
+ <source>Unexpected end of file encountered when parsing widgets.</source>
+ <translation>위젯을 처리하는 중 예상하지 못한 곳에서 파일이 끝났습니다.</translation>
+ </message>
+ <message>
+ <source>A widget element could not be found.</source>
+ <translation>widget 원소를 찾을 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::QtGradientStopsController</name>
+ <message>
+ <source>H</source>
+ <translation>H</translation>
+ </message>
+ <message>
+ <source>S</source>
+ <translation>S</translation>
+ </message>
+ <message>
+ <source>V</source>
+ <translation>V</translation>
+ </message>
+ <message>
+ <source>Hue</source>
+ <translation>명도</translation>
+ </message>
+ <message>
+ <source>Sat</source>
+ <translation>채도</translation>
+ </message>
+ <message>
+ <source>Val</source>
+ <translation>휘도</translation>
+ </message>
+ <message>
+ <source>Saturation</source>
+ <translation>채도</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>휘도</translation>
+ </message>
+ <message>
+ <source>R</source>
+ <translation>R</translation>
+ </message>
+ <message>
+ <source>G</source>
+ <translation>G</translation>
+ </message>
+ <message>
+ <source>B</source>
+ <translation>B</translation>
+ </message>
+ <message>
+ <source>Red</source>
+ <translation>빨강</translation>
+ </message>
+ <message>
+ <source>Green</source>
+ <translation>녹색</translation>
+ </message>
+ <message>
+ <source>Blue</source>
+ <translation>파랑</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::RichTextEditorDialog</name>
+ <message>
+ <source>Edit text</source>
+ <translation>텍스트 편집</translation>
+ </message>
+ <message>
+ <source>Rich Text</source>
+ <translation>서식있는 텍스트</translation>
+ </message>
+ <message>
+ <source>Source</source>
+ <translation>원본</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>확인(&amp;O)</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>취소(&amp;C)</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::RichTextEditorToolBar</name>
+ <message>
+ <source>Bold</source>
+ <translation>굵게</translation>
+ </message>
+ <message>
+ <source>CTRL+B</source>
+ <translation>CTRL+B</translation>
+ </message>
+ <message>
+ <source>Italic</source>
+ <translation>기울임꼴</translation>
+ </message>
+ <message>
+ <source>CTRL+I</source>
+ <translation>CTRL+I</translation>
+ </message>
+ <message>
+ <source>Underline</source>
+ <translation>밑줄</translation>
+ </message>
+ <message>
+ <source>CTRL+U</source>
+ <translation>CTRL+U</translation>
+ </message>
+ <message>
+ <source>Left Align</source>
+ <translation>왼쪽 정렬</translation>
+ </message>
+ <message>
+ <source>Center</source>
+ <translation>가운데 정렬</translation>
+ </message>
+ <message>
+ <source>Right Align</source>
+ <translation>오른쪽 정렬</translation>
+ </message>
+ <message>
+ <source>Justify</source>
+ <translation>양쪽 맞춤</translation>
+ </message>
+ <message>
+ <source>Superscript</source>
+ <translation>위 첨자</translation>
+ </message>
+ <message>
+ <source>Subscript</source>
+ <translation>아래 첨자</translation>
+ </message>
+ <message>
+ <source>Insert &amp;Link</source>
+ <translation>링크 삽입 (&amp;L)</translation>
+ </message>
+ <message>
+ <source>Insert &amp;Image</source>
+ <translation>그림 삽입(&amp;I)</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ScriptDialog</name>
+ <message>
+ <source>Edit script</source>
+ <translation>스크립트 편집</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;Enter a Qt Script snippet to be executed while loading the form.&lt;br&gt;The widget and its children are accessible via the variables &lt;i&gt;widget&lt;/i&gt; and &lt;i&gt;childWidgets&lt;/i&gt;, respectively.</source>
+ <translation>&lt;html&gt;폼을 불러오는 동안 실행할 Qt 스크립트를 입력하십시오.&lt;br&gt;위젯과 자식 위젯은 각각 &lt;i&gt;widget&lt;/i&gt;과 &lt;i&gt;childWidgets&lt;/i&gt; 변수로 접근할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>Syntax error</source>
+ <translation>문법 오류</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ScriptErrorDialog</name>
+ <message>
+ <source>Script errors</source>
+ <translation>스크립트 오류</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::SignalSlotDialog</name>
+ <message>
+ <source>There is already a slot with the signature &apos;%1&apos;.</source>
+ <translation>형식이 &apos;%1&apos;인 슬롯이 이미 존재합니다.</translation>
+ </message>
+ <message>
+ <source>There is already a signal with the signature &apos;%1&apos;.</source>
+ <translation>형식이 &apos;%1&apos;인 시그널이 이미 존재합니다.</translation>
+ </message>
+ <message>
+ <source>%1 - Duplicate Signature</source>
+ <translation>%1 - 중복된 형식</translation>
+ </message>
+ <message>
+ <source>Signals/Slots of %1</source>
+ <translation>%1의 시그널/슬롯</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::SignalSlotEditorPlugin</name>
+ <message>
+ <source>Edit Signals/Slots</source>
+ <translation>시그널/슬롯 편집</translation>
+ </message>
+ <message>
+ <source>F4</source>
+ <translation>F4</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::SignalSlotEditorTool</name>
+ <message>
+ <source>Edit Signals/Slots</source>
+ <translation>시그널/슬롯 편집</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::StatusBarTaskMenu</name>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::StringListEditorButton</name>
+ <message>
+ <source>Change String List</source>
+ <translation>문자열 목록 변경</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::StyleSheetEditorDialog</name>
+ <message>
+ <source>Valid Style Sheet</source>
+ <translation>올바른 스타일시트</translation>
+ </message>
+ <message>
+ <source>Add Resource...</source>
+ <translation>리소스 추가...</translation>
+ </message>
+ <message>
+ <source>Add Gradient...</source>
+ <translation>그라데이션 추가...</translation>
+ </message>
+ <message>
+ <source>Add Color...</source>
+ <translation>색 추가...</translation>
+ </message>
+ <message>
+ <source>Add Font...</source>
+ <translation>글꼴 추가...</translation>
+ </message>
+ <message>
+ <source>Edit Style Sheet</source>
+ <translation>스타일시트 편집</translation>
+ </message>
+ <message>
+ <source>Invalid Style Sheet</source>
+ <translation>잘못된 스타일시트</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TabOrderEditor</name>
+ <message>
+ <source>Start from Here</source>
+ <translation>이 번호로 설정</translation>
+ </message>
+ <message>
+ <source>Restart</source>
+ <translation>1번부터 설정</translation>
+ </message>
+ <message>
+ <source>Tab Order List...</source>
+ <translation>탭 순서 목록...</translation>
+ </message>
+ <message>
+ <source>Tab Order List</source>
+ <translation>탭 순서 목록</translation>
+ </message>
+ <message>
+ <source>Tab Order</source>
+ <translation>탭 순서</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TabOrderEditorPlugin</name>
+ <message>
+ <source>Edit Tab Order</source>
+ <translation>탭 순서 편집</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TabOrderEditorTool</name>
+ <message>
+ <source>Edit Tab Order</source>
+ <translation>탭 순서 편집</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TableWidgetEditor</name>
+ <message>
+ <source>Edit Table Widget</source>
+ <translation>표 위젯 편집</translation>
+ </message>
+ <message>
+ <source>&amp;Items</source>
+ <translation>항목(&amp;I)</translation>
+ </message>
+ <message>
+ <source>Table Items</source>
+ <translation>표 항목</translation>
+ </message>
+ <message>
+ <source>Properties &amp;&gt;&gt;</source>
+ <translation>속성 &amp;&gt;&gt;</translation>
+ </message>
+ <message>
+ <source>New Column</source>
+ <translation>새 행</translation>
+ </message>
+ <message>
+ <source>New Row</source>
+ <translation>새 열</translation>
+ </message>
+ <message>
+ <source>&amp;Columns</source>
+ <translation>행(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Rows</source>
+ <translation>열(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Properties &amp;&lt;&lt;</source>
+ <translation>속성 &amp;&lt;&lt;</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TableWidgetTaskMenu</name>
+ <message>
+ <source>Edit Items...</source>
+ <translation>항목 편집...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TemplateOptionsWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Additional Template Paths</source>
+ <translation>추가 템플릿 경로</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Pick a directory to save templates in</source>
+ <translation>템플릿을 저장할 디렉터리를 지정하십시오</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TextEditTaskMenu</name>
+ <message>
+ <source>Edit HTML</source>
+ <translation>HTML 편집</translation>
+ </message>
+ <message>
+ <source>Change HTML...</source>
+ <translation>HTML 바꾸기...</translation>
+ </message>
+ <message>
+ <source>Edit Text</source>
+ <translation>텍스트 편집</translation>
+ </message>
+ <message>
+ <source>Change Plain Text...</source>
+ <translation>일반 텍스트 바꾸기...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TextEditor</name>
+ <message>
+ <source>Choose Resource...</source>
+ <translation>리소스 선택...</translation>
+ </message>
+ <message>
+ <source>Choose File...</source>
+ <translation>파일 선택...</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Choose a File</source>
+ <translation>파일 선택</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ToolBarEventFilter</name>
+ <message>
+ <source>Insert Separator before &apos;%1&apos;</source>
+ <translation>&apos;%1&apos; 앞에 구분자 삽입</translation>
+ </message>
+ <message>
+ <source>Append Separator</source>
+ <translation>구분자 덧붙이기</translation>
+ </message>
+ <message>
+ <source>Remove action &apos;%1&apos;</source>
+ <translation>동작 &apos;%1&apos; 삭제</translation>
+ </message>
+ <message>
+ <source>Remove Toolbar &apos;%1&apos;</source>
+ <translation>도구 모음 &apos;%1&apos; 삭제</translation>
+ </message>
+ <message>
+ <source>Insert Separator</source>
+ <translation>구분자 삽입</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TreeWidgetEditor</name>
+ <message>
+ <source>Edit Tree Widget</source>
+ <translation>트리 위젯 편집</translation>
+ </message>
+ <message>
+ <source>&amp;Items</source>
+ <translation>항목(&amp;I)</translation>
+ </message>
+ <message>
+ <source>Tree Items</source>
+ <translation>트리 항목</translation>
+ </message>
+ <message>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <source>New Item</source>
+ <translation>새 항목</translation>
+ </message>
+ <message>
+ <source>&amp;New</source>
+ <translation>새로 만들기(&amp;N)</translation>
+ </message>
+ <message>
+ <source>New Subitem</source>
+ <translation>새 하위 항목</translation>
+ </message>
+ <message>
+ <source>New &amp;Subitem</source>
+ <translation>새 하위 항목(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Delete Item</source>
+ <translation>항목 삭제</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>삭제(&amp;D)</translation>
+ </message>
+ <message>
+ <source>Move Item Left (before Parent Item)</source>
+ <translation>항목 왼쪽으로 이동 (부모 항목 이전)</translation>
+ </message>
+ <message>
+ <source>L</source>
+ <translation>L</translation>
+ </message>
+ <message>
+ <source>Move Item Right (as a First Subitem of the Next Sibling Item)</source>
+ <translation>항목 오른쪽으로 이동 (다음 자식 항목의 첫 하위 항목으로)</translation>
+ </message>
+ <message>
+ <source>R</source>
+ <translation>R</translation>
+ </message>
+ <message>
+ <source>Move Item Up</source>
+ <translation>항목 위로 이동</translation>
+ </message>
+ <message>
+ <source>U</source>
+ <translation>U</translation>
+ </message>
+ <message>
+ <source>Move Item Down</source>
+ <translation>항목 아래로 이동</translation>
+ </message>
+ <message>
+ <source>D</source>
+ <translation>D</translation>
+ </message>
+ <message>
+ <source>Properties &amp;&gt;&gt;</source>
+ <translation>속성 &amp;&gt;&gt;</translation>
+ </message>
+ <message>
+ <source>New Column</source>
+ <translation>새 행</translation>
+ </message>
+ <message>
+ <source>&amp;Columns</source>
+ <translation>행(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Per column properties</source>
+ <translation>행별 속성</translation>
+ </message>
+ <message>
+ <source>Common properties</source>
+ <translation>공통 속성</translation>
+ </message>
+ <message>
+ <source>Properties &amp;&lt;&lt;</source>
+ <translation>속성 &amp;&lt;&lt;</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TreeWidgetTaskMenu</name>
+ <message>
+ <source>Edit Items...</source>
+ <translation>항목 편집...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WidgetBox</name>
+ <message>
+ <source>Warning: Widget creation failed in the widget box. This could be caused by invalid custom widget XML.</source>
+ <translation>경고: 위젯 상자에 위젯을 만들 수 없습니다. 잘못된 사용자 정의 위젯 XML 때문일 수 있습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WidgetBoxTreeWidget</name>
+ <message>
+ <source>Scratchpad</source>
+ <translation>연습장</translation>
+ </message>
+ <message>
+ <source>Custom Widgets</source>
+ <translation>사용자 정의 위젯</translation>
+ </message>
+ <message>
+ <source>Expand all</source>
+ <translation>모두 펴기</translation>
+ </message>
+ <message>
+ <source>Collapse all</source>
+ <translation>모두 접기</translation>
+ </message>
+ <message>
+ <source>List View</source>
+ <translation>목록 보기</translation>
+ </message>
+ <message>
+ <source>Icon View</source>
+ <translation>아이콘 보기</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Edit name</source>
+ <translation>이름 편집</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WidgetDataBase</name>
+ <message>
+ <source>A custom widget plugin whose class name (%1) matches that of an existing class has been found.</source>
+ <translation>사용자 정의 위젯 플러그인의 전체 클래스 이름(%1)이 기존의 클래스 이름과 일치합니다.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WidgetEditorTool</name>
+ <message>
+ <source>Edit Widgets</source>
+ <translation>위젯 편집</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WidgetFactory</name>
+ <message>
+ <source>The custom widget factory registered for widgets of class %1 returned 0.</source>
+ <translation>클래스 %1인 위젯의 사용자 정의 위젯 팩터리에서 0을 반환하였습니다.</translation>
+ </message>
+ <message>
+ <source>A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class %1. It returned a widget of class %2.</source>
+ <translation>클래스 %1인 위젯에 등록된 사용자 정의 위젯 팩터리를 사용하여 위젯을 만드는 중 클래스 이름이 일치하지 않았습니다. 클래스 %2인 위젯을 반환하였습니다.</translation>
+ </message>
+ <message>
+ <source>%1 Widget</source>
+ <translation>%1 위젯</translation>
+ </message>
+ <message>
+ <source>The current page of the container &apos;%1&apos; (%2) could not be determined while creating a layout.This indicates an inconsistency in the ui-file, probably a layout being constructed on a container widget.</source>
+ <translation>레이아웃을 만드는 중 컨테이너 &apos;%1&apos; (%2)의 현재 쪽을 결정할 수 없습니다. UI 파일 내부에 불일치가 발생한 것 같으며, 컨테이너 위젯에 레이아웃이 만들어진 것 같습니다.</translation>
+ </message>
+ <message>
+ <source>Attempt to add a layout to a widget &apos;%1&apos; (%2) which already has an unmanaged layout of type %3.
+This indicates an inconsistency in the ui-file.</source>
+ <translation>관리되지 않은 %3 형식의 레이아웃이 있는 위젯 &apos;%1&apos; (%2)에 레이아웃을 추가할 수 없습니다.
+UI 파일 내부에 불일치가 발생하였습니다.</translation>
+ </message>
+ <message>
+ <source>Cannot create style &apos;%1&apos;.</source>
+ <translation>스타일 &apos;%1&apos;을(를) 만들 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WizardContainerWidgetTaskMenu</name>
+ <message>
+ <source>Next</source>
+ <translation>다음</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>이전</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ZoomMenu</name>
+ <message>
+ <source>%1 %</source>
+ <extracomment>Zoom factor</extracomment>
+ <translation>%1 %</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ZoomablePreviewDeviceSkin</name>
+ <message>
+ <source>&amp;Zoom</source>
+ <translation>확대/축소(&amp;Z)</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/designer_pl.ts b/translations/designer_pl.ts
index 0c9b863..c2b5eba 100644
--- a/translations/designer_pl.ts
+++ b/translations/designer_pl.ts
@@ -25,6 +25,49 @@
</message>
</context>
<context>
+ <name>AbstractItemEditor</name>
+ <message>
+ <source>Selectable</source>
+ <translation>Do wyboru</translation>
+ </message>
+ <message>
+ <source>Editable</source>
+ <translation>Do edycji</translation>
+ </message>
+ <message>
+ <source>DragEnabled</source>
+ <translation>Do przeciągania</translation>
+ </message>
+ <message>
+ <source>DropEnabled</source>
+ <translation>Do upuszczania</translation>
+ </message>
+ <message>
+ <source>UserCheckable</source>
+ <translation>Do zaznaczania</translation>
+ </message>
+ <message>
+ <source>Enabled</source>
+ <translation>Włączony</translation>
+ </message>
+ <message>
+ <source>Tristate</source>
+ <translation>Trójstanowy</translation>
+ </message>
+ <message>
+ <source>Unchecked</source>
+ <translation>Niezaznaczony</translation>
+ </message>
+ <message>
+ <source>PartiallyChecked</source>
+ <translation>Częściowo zaznaczony</translation>
+ </message>
+ <message>
+ <source>Checked</source>
+ <translation>Zaznaczony</translation>
+ </message>
+</context>
+<context>
<name>AddLinkDialog</name>
<message>
<source>Insert Link</source>
@@ -852,6 +895,7 @@ Parsing grid layout minimum size values</extracomment>
<name>FormEditorOptionsPage</name>
<message>
<source>%1 %</source>
+ <extracomment>Zoom percentage</extracomment>
<translation>%1 %</translation>
</message>
<message>
@@ -2513,6 +2557,10 @@ Empty class name passed to widget factory method</extracomment>
<context>
<name>QtLocalePropertyManager</name>
<message>
+ <source>&lt;Invalid&gt;</source>
+ <translation>&lt;Niepoprawny&gt;</translation>
+ </message>
+ <message>
<source>%1, %2</source>
<translation>%1, %2</translation>
</message>
@@ -4654,7 +4702,7 @@ Wybierz inną nazwę.</translation>
</message>
<message>
<source>Disabled</source>
- <translation>Wyszarzony</translation>
+ <translation>Wyłączony</translation>
</message>
<message>
<source>Inactive</source>
@@ -4680,15 +4728,15 @@ Wybierz inną nazwę.</translation>
</message>
<message>
<source>Active</source>
- <translation>Aktywna</translation>
+ <translation>Aktywny</translation>
</message>
<message>
<source>Inactive</source>
- <translation>Nieaktywna</translation>
+ <translation>Nieaktywny</translation>
</message>
<message>
<source>Disabled</source>
- <translation>Wyszarzona</translation>
+ <translation>Wyłączony</translation>
</message>
</context>
<context>
@@ -4732,6 +4780,14 @@ Wybierz inną nazwę.</translation>
<translation>Informacje o wtyczkach</translation>
</message>
<message>
+ <source>Loaded Plugins</source>
+ <translation>Załadowane wtyczki</translation>
+ </message>
+ <message>
+ <source>Failed Plugins</source>
+ <translation>Wtyczki których nie można załadować</translation>
+ </message>
+ <message>
<source>Qt Designer couldn&apos;t find any plugins</source>
<translation>Qt Designer nie mógł znaleźć żadnej wtyczki</translation>
</message>
diff --git a/translations/designer_ru.ts b/translations/designer_ru.ts
index 1b0b939..fec098c 100644
--- a/translations/designer_ru.ts
+++ b/translations/designer_ru.ts
@@ -439,7 +439,7 @@
</message>
<message>
<source>Add Dock Window</source>
- <translation>Добавить прикрепляемое окно</translation>
+ <translation>Добавить панель</translation>
</message>
<message>
<source>Adjust Size of &apos;%1&apos;</source>
@@ -2699,7 +2699,7 @@ Do you want to replace it?</source>
</message>
<message>
<source>newPrefix</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; The file&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;is outside of the current resource file&apos;s parent directory.&lt;/p&gt;</source>
@@ -3222,7 +3222,7 @@ Do you want overwrite the template?</source>
</message>
<message>
<source>Dock views</source>
- <translation>Прикрепляемые панели</translation>
+ <translation>Панели</translation>
</message>
<message>
<source>File</source>
diff --git a/translations/designer_uk.ts b/translations/designer_uk.ts
index dccfb5f..7d1065c 100644
--- a/translations/designer_uk.ts
+++ b/translations/designer_uk.ts
@@ -4860,21 +4860,21 @@ Please select another name.</source>
<name>qdesigner_internal::PreviewDeviceSkin</name>
<message>
<source>&amp;Portrait</source>
- <translation>Книжка</translation>
+ <translation>&amp;Книжка</translation>
</message>
<message>
<source>Landscape (&amp;CCW)</source>
<extracomment>Rotate form preview counter-clockwise</extracomment>
- <translation>Альбом (проти ГС)</translation>
+ <translation>Альбом (проти &amp;ГС)</translation>
</message>
<message>
<source>&amp;Landscape (CW)</source>
<extracomment>Rotate form preview clockwise</extracomment>
- <translation>Альбом (за ГС)</translation>
+ <translation>А&amp;льбом (за ГС)</translation>
</message>
<message>
<source>&amp;Close</source>
- <translation>Закрити</translation>
+ <translation>З&amp;акрити</translation>
</message>
</context>
<context>
@@ -5833,7 +5833,7 @@ This indicates an inconsistency in the ui-file.</source>
<name>qdesigner_internal::ZoomablePreviewDeviceSkin</name>
<message>
<source>&amp;Zoom</source>
- <translation>Масштаб</translation>
+ <translation>Мас&amp;штаб</translation>
</message>
</context>
</TS>
diff --git a/translations/linguist_cs.ts b/translations/linguist_cs.ts
index 5023355..5023355 100755..100644
--- a/translations/linguist_cs.ts
+++ b/translations/linguist_cs.ts
diff --git a/translations/linguist_de.ts b/translations/linguist_de.ts
index cb0b36d..bb4889b 100644
--- a/translations/linguist_de.ts
+++ b/translations/linguist_de.ts
@@ -85,6 +85,10 @@
<context>
<name>DataModel</name>
<message>
+ <source>The translation file &apos;%1&apos; will not be loaded because it is empty.</source>
+ <translation>Die Übersetzungsdatei &apos;%1&apos; ist leer und wird daher nicht geladen.</translation>
+ </message>
+ <message>
<source>&lt;qt&gt;Duplicate messages found in &apos;%1&apos;:</source>
<translation>&lt;qt&gt;Mehrfach vorhandene Meldungen in &apos;%1&apos;:</translation>
</message>
@@ -724,7 +728,8 @@ Options:
<message>
<source>Updating &apos;%1&apos;...
</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Bringe &apos;%1&apos; auf aktuellen Stand...
+</translation>
</message>
<message>
<source>Stripping non plural forms in &apos;%1&apos;...
diff --git a/translations/linguist_ko.ts b/translations/linguist_ko.ts
new file mode 100644
index 0000000..7545dbc
--- /dev/null
+++ b/translations/linguist_ko.ts
@@ -0,0 +1,2500 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>AboutDialog</name>
+ <message>
+ <source>Qt Linguist</source>
+ <translation>Qt Linguist</translation>
+ </message>
+</context>
+<context>
+ <name>BatchTranslationDialog</name>
+ <message>
+ <source>Qt Linguist - Batch Translation</source>
+ <translation>Qt Linguist - 일괄 번역</translation>
+ </message>
+ <message>
+ <source>Options</source>
+ <translation>옵션</translation>
+ </message>
+ <message>
+ <source>Set translated entries to finished</source>
+ <translation>번역된 항목을 완료됨으로 표시</translation>
+ </message>
+ <message>
+ <source>Retranslate entries with existing translation</source>
+ <translation>이미 번역된 항목을 다시 번역</translation>
+ </message>
+ <message>
+ <source>Note that the modified entries will be reset to unfinished if &apos;Set translated entries to finished&apos; above is unchecked</source>
+ <translation>&apos;번역된 항목을 완료됨으로 표시&apos;를 선택하지 않으면 수정된 항목은 완료되지 않음으로 표시됩니다</translation>
+ </message>
+ <message>
+ <source>Translate also finished entries</source>
+ <translation>완료된 항목도 다시 번역</translation>
+ </message>
+ <message>
+ <source>Phrase book preference</source>
+ <translation>선호하는 단어장</translation>
+ </message>
+ <message>
+ <source>Move up</source>
+ <translation>위로 이동</translation>
+ </message>
+ <message>
+ <source>Move down</source>
+ <translation>아래로 이동</translation>
+ </message>
+ <message>
+ <source>The batch translator will search through the selected phrase books in the order given above</source>
+ <translation>일괄 번역 과정에서 위에 지정한 순서대로 단어장을 사용합니다</translation>
+ </message>
+ <message>
+ <source>&amp;Run</source>
+ <translation>실행(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+ <message>
+ <source>Batch Translation of &apos;%1&apos; - Qt Linguist</source>
+ <translation>&apos;%1&apos;의 일괄 번역 - Qt Linguist</translation>
+ </message>
+ <message>
+ <source>Searching, please wait...</source>
+ <translation>검색 중, 기다려 주십시오...</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>취소(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Linguist batch translator</source>
+ <translation>Linguist 일괄 번역 도구</translation>
+ </message>
+ <message numerus="yes">
+ <source>Batch translated %n entries</source>
+ <translation>
+ <numerusform>항목 %n개를 일괄 번역하였습니다</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>DataModel</name>
+ <message>
+ <source>&lt;qt&gt;Duplicate messages found in &apos;%1&apos;:</source>
+ <translation>&lt;qt&gt;&apos;%1&apos;에 중복된 메시지가 있음:</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;[more duplicates omitted]</source>
+ <translation>&lt;p&gt;[더 많은 항목 생략됨]</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;* ID: %1</source>
+ <translation>&lt;p&gt;* ID: %1</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;* Context: %1&lt;br&gt;* Source: %2</source>
+ <translation>&lt;p&gt;* 컨텍스트: %1&lt;br&gt;* 원본: %2</translation>
+ </message>
+ <message>
+ <source>&lt;br&gt;* Comment: %3</source>
+ <translation>&lt;br&gt;* 설명: %3</translation>
+ </message>
+ <message>
+ <source>Linguist does not know the plural rules for &apos;%1&apos;.
+Will assume a single universal form.</source>
+ <translation>Linguist는 &apos;%1&apos;의 복수형을 알지 못합니다.
+별도의 복수형이 없음을 가정합니다.</translation>
+ </message>
+ <message>
+ <source>Cannot create &apos;%2&apos;: %1</source>
+ <translation>&apos;%2&apos;을(를) 만들 수 없음: %1</translation>
+ </message>
+ <message>
+ <source>Universal Form</source>
+ <translation>단일 형태</translation>
+ </message>
+</context>
+<context>
+ <name>ErrorsView</name>
+ <message>
+ <source>Accelerator possibly superfluous in translation.</source>
+ <translation>번역된 메시지에 불필요한 가속기가 있습니다.</translation>
+ </message>
+ <message>
+ <source>Accelerator possibly missing in translation.</source>
+ <translation>번역된 메시지에 가속기가 빠졌습니다.</translation>
+ </message>
+ <message>
+ <source>Translation does not end with the same punctuation as the source text.</source>
+ <translation>번역된 메시지가 원본 메시지와 같은 문장 부호로 끝나지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>A phrase book suggestion for &apos;%1&apos; was ignored.</source>
+ <translation>단어장에서 제안한 &apos;%1&apos;을(를) 무시하였습니다.</translation>
+ </message>
+ <message>
+ <source>Translation does not refer to the same place markers as in the source text.</source>
+ <translation>번역된 메시지와 원본 메시지의 자리 표시자가 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Translation does not contain the necessary %n place marker.</source>
+ <translation>필요한 %n개의 자리 표시자가 번역된 메시지에 포함되지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+</context>
+<context>
+ <name>FindDialog</name>
+ <message>
+ <source>Find</source>
+ <translation>찾기</translation>
+ </message>
+ <message>
+ <source>This window allows you to search for some text in the translation source file.</source>
+ <translation>번역 원본 파일의 텍스트를 찾을 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Find what:</source>
+ <translation>찾을 문자열(&amp;F):</translation>
+ </message>
+ <message>
+ <source>Type in the text to search for.</source>
+ <translation>찾을 문자열을 입력하십시오.</translation>
+ </message>
+ <message>
+ <source>Options</source>
+ <translation>옵션</translation>
+ </message>
+ <message>
+ <source>Source texts are searched when checked.</source>
+ <translation>선택하면 원본 텍스트에서 찾습니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Source texts</source>
+ <translation>원본 텍스트(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Translations are searched when checked.</source>
+ <translation>선택하면 번역된 텍스트에서 찾습니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Translations</source>
+ <translation>번역(&amp;T)</translation>
+ </message>
+ <message>
+ <source>Texts such as &apos;TeX&apos; and &apos;tex&apos; are considered as different when checked.</source>
+ <translation>선택하면 &apos;TeX&apos;와 &apos;tex&apos;를 다른 문자열로 취급합니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Match case</source>
+ <translation>대소문자 구분(&amp;M)</translation>
+ </message>
+ <message>
+ <source>Comments and contexts are searched when checked.</source>
+ <translation>선택하면 설명과 컨텍스트에서 찾습니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Comments</source>
+ <translation>설명(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Ignore &amp;accelerators</source>
+ <translation>가속기 무시(&amp;A)</translation>
+ </message>
+ <message>
+ <source>Click here to find the next occurrence of the text you typed in.</source>
+ <translation>입력한 텍스트가 다음에 등장하는 곳을 찾습니다.</translation>
+ </message>
+ <message>
+ <source>Find Next</source>
+ <translation>다음 찾기</translation>
+ </message>
+ <message>
+ <source>Click here to close this window.</source>
+ <translation>이 창을 닫습니다.</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+ <message>
+ <source></source>
+ <comment>Choose Edit|Find from the menu bar or press Ctrl+F to pop up the Find dialog</comment>
+ <translation></translation>
+ </message>
+</context>
+<context>
+ <name>FormMultiWidget</name>
+ <message>
+ <source>Alt+Delete</source>
+ <extracomment>translate, but don&apos;t change</extracomment>
+ <translation>Alt+Delete</translation>
+ </message>
+ <message>
+ <source>Shift+Alt+Insert</source>
+ <extracomment>translate, but don&apos;t change</extracomment>
+ <translation>Shift+Alt+Insert</translation>
+ </message>
+ <message>
+ <source>Alt+Insert</source>
+ <extracomment>translate, but don&apos;t change</extracomment>
+ <translation>Alt+Insert</translation>
+ </message>
+ <message>
+ <source>Confirmation - Qt Linguist</source>
+ <translation>확인 - Qt Linguist</translation>
+ </message>
+ <message>
+ <source>Delete non-empty length variant?</source>
+ <translation>내용이 있는 길이가 다른 형태를 삭제하시겠습니까?</translation>
+ </message>
+</context>
+<context>
+ <name>LConvert</name>
+ <message>
+ <source>
+Usage:
+ lconvert [options] &lt;infile&gt; [&lt;infile&gt;...]
+
+lconvert is part of Qt&apos;s Linguist tool chain. It can be used as a
+stand-alone tool to convert and filter translation data files.
+The following file formats are supported:
+
+%1
+If multiple input files are specified, they are merged with
+translations from later files taking precedence.
+
+Options:
+ -h
+ --help Display this information and exit.
+
+ -i &lt;infile&gt;
+ --input-file &lt;infile&gt;
+ Specify input file. Use if &lt;infile&gt; might start with a dash.
+ This option can be used several times to merge inputs.
+ May be &apos;-&apos; (standard input) for use in a pipe.
+
+ -o &lt;outfile&gt;
+ --output-file &lt;outfile&gt;
+ Specify output file. Default is &apos;-&apos; (standard output).
+
+ -if &lt;informat&gt;
+ --input-format &lt;format&gt;
+ Specify input format for subsequent &lt;infile&gt;s.
+ The format is auto-detected from the file name and defaults to &apos;ts&apos;.
+
+ -of &lt;outformat&gt;
+ --output-format &lt;outformat&gt;
+ Specify output format. See -if.
+
+ --input-codec &lt;codec&gt;
+ Specify encoding for QM and PO input files. Default is &apos;Latin1&apos;
+ for QM and &apos;UTF-8&apos; for PO files. UTF-8 is always tried as well for
+ QM, corresponding to the possible use of the trUtf8() function.
+
+ --output-codec &lt;codec&gt;
+ Specify encoding for PO output files. Default is &apos;UTF-8&apos;.
+
+ --drop-tags &lt;regexp&gt;
+ Drop named extra tags when writing TS or XLIFF files.
+ May be specified repeatedly.
+
+ --drop-translations
+ Drop existing translations and reset the status to &apos;unfinished&apos;.
+ Note: this implies --no-obsolete.
+
+ --source-language &lt;language&gt;[_&lt;region&gt;]
+ Specify/override the language of the source strings. Defaults to
+ POSIX if not specified and the file does not name it yet.
+
+ --target-language &lt;language&gt;[_&lt;region&gt;]
+ Specify/override the language of the translation.
+ The target language is guessed from the file name if this option
+ is not specified and the file contents name no language yet.
+
+ --no-obsolete
+ Drop obsolete messages.
+
+ --no-finished
+ Drop finished messages.
+
+ --sort-contexts
+ Sort contexts in output TS file alphabetically.
+
+ --locations {absolute|relative|none}
+ Override how source code references are saved in TS files.
+ Default is absolute.
+
+ --no-ui-lines
+ Drop line numbers from references to UI files.
+
+ --verbose
+ be a bit more verbose
+
+Long options can be specified with only one leading dash, too.
+
+Return value:
+ 0 on success
+ 1 on command line parse failures
+ 2 on read failures
+ 3 on write failures
+</source>
+ <translation>
+사용 방법:
+ lconvert [옵션] &lt;infile&gt; [&lt;infile&gt;...]
+
+lconvert는 Qt Linguist 도구 모음의 일부입니다. 번역 데이터
+파일을 변환하고 처리하는 데 사용할 수 있습니다.
+다음 파일 형식을 지원합니다:
+
+%1
+여러 개의 입력 파일을 지정하면, 나중에 지정한 파일에
+있는 내용을 우선으로 합칩니다.
+
+옵션:
+ -h
+ --help 이 정보를 표시하고 끝냅니다.
+
+ -i &lt;infile&gt;
+ --input-file &lt;infile&gt;
+ 입력 파일을 지정합니다. &lt;infile&gt;이 이음표(-)로 시작한다면
+ 사용하십시오. 여러 입력 파일을 합치려면 여러 번 사용할
+ 수 있습니다. 파이프 내부에서 사용하려면 &apos;-&apos;를 사용하십시오.
+
+ -o &lt;outfile&gt;
+ --output-file &lt;outfile&gt;
+ 출력 파일을 지정합니다. 기본값은 &apos;-&apos;(표준 출력)입니다.
+
+ -if &lt;informat&gt;
+ --input-format &lt;format&gt;
+ 입력 파일 &lt;infile&gt; 바로 앞에 붙이며, 입력 파일의 형식을 지정합니다.
+ 파일 이름에서 형식을 자동으로 식별하며, 기본값은 &apos;ts&apos;입니다.
+
+ -of &lt;outformat&gt;
+ --output-format &lt;outformat&gt;
+ 출력 형식을 지정합니다. -if를 참고하십시오.
+
+ --input-codec &lt;codec&gt;
+ QM과 PO 입력 파일의 인코딩을 지정합니다. QM 파일의 기본값은
+ &apos;Latin1&apos;이며, PO 파일의 기본값은 &apos;UTF-8&apos;입니다. trUtf8() 함수를
+ 사용했을 수도 있기 때문에 QM 파일에서도 UTF-8을 시도합니다.
+
+ --output-codec &lt;codec&gt;
+ PO 출력 파일의 인코딩을 지정합니다. 기본값은 &apos;UTF-8&apos;입니다.
+
+ --drop-tags &lt;regexp&gt;
+ TS나 XLIFF 파일을 쓸 때 추가 태그를 기록하지 않습니다.
+ 여러 번 사용할 수 있습니다.
+
+ --drop-translations
+ 이미 있는 번역을 삭제하며 상태를 &apos;완료되지 않음&apos;으로 초기화합니다.
+ 알림: --no-obsolete 옵션을 암시적으로 지정합니다.
+
+ --source-language &lt;language&gt;[_&lt;region&gt;]
+ 원본 문자열의 언어를 (재)지정합니다. 파일 이름에서 언어를 알 수
+ 없거나 지정되지 않았을 때의 기본값은 POSIX입니다.
+
+ --target-language &lt;language&gt;[_&lt;region&gt;]
+ 번역물의 언어를 (재)지정합니다. 이 옵션을 지정하지 않았고
+ 파일 내용에 언어를 지정하지 않았으면 파일 이름에서
+ 대상 언어를 추정합니다.
+
+ --no-obsolete
+ 오래된 메시지를 삭제합니다.
+
+ --no-finished
+ 완료되지 않은 메시지를 삭제합니다.
+
+ --sort-contexts
+ 출력 TS 파일의 컨텍스트를 가나다순으로 정렬합니다.
+
+ --locations {absolute|relative|none}
+ 원본 코드 참조를 TS 파일에 저장할 법을 지정합니다.
+ 기본값은 absolute입니다.
+
+ --no-ui-lines
+ UI 파일 참조에서 줄 번호를 삭제합니다.
+
+ --verbose
+ 더 자세한 메시지를 출력합니다.
+
+긴 옵션을 지정할 때에는 이음표 하나만 사용할 수 있습니다.
+
+반환값:
+ 0: 성공
+ 1: 명령행 인자 처리 오류
+ 2: 읽기 오류
+ 3: 쓰기 오류
+</translation>
+ </message>
+</context>
+<context>
+ <name>LRelease</name>
+ <message>
+ <source>Usage:
+ lrelease [options] project-file
+ lrelease [options] ts-files [-qm qm-file]
+
+lrelease is part of Qt&apos;s Linguist tool chain. It can be used as a
+stand-alone tool to convert XML-based translations files in the TS
+format into the &apos;compiled&apos; QM format used by QTranslator objects.
+
+Options:
+ -help Display this information and exit
+ -idbased
+ Use IDs instead of source strings for message keying
+ -compress
+ Compress the QM files
+ -nounfinished
+ Do not include unfinished translations
+ -removeidentical
+ If the translated text is the same as
+ the source text, do not include the message
+ -markuntranslated &lt;prefix&gt;
+ If a message has no real translation, use the source text
+ prefixed with the given string instead
+ -silent
+ Do not explain what is being done
+ -version
+ Display the version of lrelease and exit
+</source>
+ <translation>사용 방법:
+ lrelease [옵션] project-file
+ lrelease [옵션] ts-files [-qm qm-file]
+
+lrelease는 Qt Linguist 도구 모음의 일부입니다. TS 형식으로 되어 있는
+XML 기반 번역물은 QTranslator에서 사용할 수 있는 &apos;컴파일된&apos; QM
+형식으로 변환하는 독립 실행 가능한 도구입니다.
+
+옵션:
+ -help 이 정보를 표시하고 끝냅니다.
+ -idbased
+ 메시지 키로 원본 문자열 대신 ID를 사용합니다.
+ -compress
+ QM 파일을 압축합니다.
+ -nounfinished
+ 완료되지 않은 번역을 포함하지 않습니다.
+ -removeidentical
+ 원문과 번역문이 같으면 메시지를 포함하지 않습니다.
+ -markuntranslated &lt;prefix&gt;
+ 메시지가 번역되지 않았으면 원본 문자열 앞에
+ &lt;prefix&gt;를 붙인 것을 번역문 대신 사용합니다.
+ -silent
+ 진행 상황을 표시하지 않습니다.
+ -version
+ lrelease 버전을 표시하고 끝냅니다
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: %1</source>
+ <translation>lrelease 오류: %1</translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation>&apos;%1&apos; 업데이트 중...
+</translation>
+ </message>
+ <message>
+ <source>Removing translations equal to source text in &apos;%1&apos;...
+</source>
+ <translation>&apos;%1&apos;의 원문과 동일한 번역문 삭제 중...
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot create &apos;%1&apos;: %2
+</source>
+ <translation>lrelease 오류: &apos;%1&apos;을(를) 만들 수 없음: %2
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot save &apos;%1&apos;: %2</source>
+ <translation>lrelease 오류: &apos;%1&apos;을(를) 저장할 수 없음: %2</translation>
+ </message>
+ <message>
+ <source>lrelease version %1
+</source>
+ <translation>lrelease 버전 %1
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot read project file &apos;%1&apos;.
+</source>
+ <translation>lrelease 오류: 프로젝트 파일 &apos;%1&apos;을(를) 읽을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot process project file &apos;%1&apos;.
+</source>
+ <translation>lrelease 오류: 프로젝트 파일 &apos;%1&apos;을(를) 처리할 수 없습니다.
+</translation>
+ </message>
+ <message>
+ <source>lrelease warning: Met no &apos;TRANSLATIONS&apos; entry in project file &apos;%1&apos;
+</source>
+ <translation>lrelease 경고: 프로젝트 파일 &apos;%1&apos;에 &apos;TRANSLATIONS&apos; 항목이 없음
+</translation>
+ </message>
+ <message numerus="yes">
+ <source>Dropped %n message(s) which had no ID.</source>
+ <translation>
+ <numerusform>ID가 없는 메시지 %n개를 삭제하였습니다.</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source>Excess context/disambiguation dropped from %n message(s).</source>
+ <translation>
+ <numerusform>메시지 %n개에서 불필요한 컨텍스트/동음이의 정보를 삭제하였습니다.</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Generated %n translation(s) (%1 finished and %2 unfinished)</source>
+ <translation>
+ <numerusform> %n개의 번역 생성됨 (%1개 완료됨, %2개 완료되지 않음)</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Ignored %n untranslated source text(s)</source>
+ <translation>
+ <numerusform> %n개의 번역되지 않은 원문 무시함</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>LUpdate</name>
+ <message>
+ <source>Parenthesis/bracket/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation>#if와 #else 분기 사이에서 소/중/대괄호가 일치하지 않음. #if 분기를 사용함
+</translation>
+ </message>
+ <message>
+ <source>Parenthesis/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation>#if와 #else 분기 사이에서 소/중괄호가 일치하지 않음. #if 분기를 사용함
+</translation>
+ </message>
+ <message>
+ <source>Unterminated C++ comment
+</source>
+ <translation>C++ 주석이 종료되지 않음
+</translation>
+ </message>
+ <message>
+ <source>Unterminated C++ string
+</source>
+ <translation>C++ 문자열이 종료되지 않음
+</translation>
+ </message>
+ <message>
+ <source>Excess closing brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ 코드에 불필요한 닫는 중괄호가 있음(또는 C++ 전처리기의 잘못된 사용)
+</translation>
+ </message>
+ <message>
+ <source>Excess closing parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ 코드에 불필요한 닫는 소괄호가 있음(또는 C++ 전처리기의 잘못된 사용)
+</translation>
+ </message>
+ <message>
+ <source>Excess closing bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ 코드에 불필요한 닫는 대괄호가 있음(또는 C++ 전처리기의 잘못된 사용)
+</translation>
+ </message>
+ <message>
+ <source>circular inclusion of %1
+</source>
+ <translation>%1이(가) 재귀적으로 포함됨
+</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2
+</source>
+ <translation>%1을(를) 열 수 없음: %2
+</translation>
+ </message>
+ <message>
+ <source>//% cannot be used with tr() / QT_TR_NOOP(). Ignoring
+</source>
+ <translation>//%는 tr()/QT_TR_NOOP()와 같이 사용할 수 없음. 무시함
+</translation>
+ </message>
+ <message>
+ <source>Qualifying with unknown namespace/class %1::%2
+</source>
+ <translation>알 수 없는 네임스페이스/클래스 %1::%2와(과) 일치함</translation>
+ </message>
+ <message>
+ <source>tr() cannot be called without context
+</source>
+ <translation>tr()은 컨텍스트 없이 호출될 수 없음
+</translation>
+ </message>
+ <message>
+ <source>Class &apos;%1&apos; lacks Q_OBJECT macro
+</source>
+ <translation>클래스 &apos;%1&apos;에 Q_OBJECT 매크로가 없음
+</translation>
+ </message>
+ <message>
+ <source>It is not recommended to call tr() from within a constructor &apos;%1::%2&apos;
+</source>
+ <translation>생성자 &apos;%1::%2&apos;에서 tr()을 호출하는 것은 권장하지 않음
+</translation>
+ </message>
+ <message>
+ <source>//% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring
+</source>
+ <translation>//%는 translate()/QT_TR_NOOP()와 같이 사용할 수 없음. 무시함
+</translation>
+ </message>
+ <message>
+ <source>//= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring
+</source>
+ <translation>//=은 qtTrId()/QT_TRID_NOOP()와 같이 사용할 수 없음. 무시함
+</translation>
+ </message>
+ <message>
+ <source>Unexpected character in meta string
+</source>
+ <translation>메타 문자열에 예상하지 못한 글자가 있음
+</translation>
+ </message>
+ <message>
+ <source>Unterminated meta string
+</source>
+ <translation>메타 문자열이 종료되지 않음
+</translation>
+ </message>
+ <message>
+ <source>Cannot invoke tr() like this
+</source>
+ <translation>tr()을 이렇게 호출할 수 없음
+</translation>
+ </message>
+ <message>
+ <source>Discarding unconsumed meta data
+</source>
+ <translation>사용되지 않은 메타데이터를 무시함
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ 코드의 여는 중괄호 쌍이 맞지 않음(또는 C++ 전처리기의 잘못된 사용)
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ 코드의 여는 소괄호 쌍이 맞지 않음(또는 C++ 전처리기의 잘못된 사용)
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ 코드의 여는 대괄호 쌍이 맞지 않음(또는 C++ 전처리기의 잘못된 사용)
+</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2</source>
+ <translation>%1을(를) 열 수 없음: %2</translation>
+ </message>
+ <message>
+ <source>Unterminated Java comment.
+</source>
+ <translation>Java 주석이 종료되지 않았습니다.
+</translation>
+ </message>
+ <message>
+ <source>Invalid Unicode value.
+</source>
+ <translation>유니코드 값이 잘못되었습니다.
+</translation>
+ </message>
+ <message>
+ <source>Unterminated string.
+</source>
+ <translation>문자열이 종료되지 않았습니다.
+</translation>
+ </message>
+ <message>
+ <source>String used in translation can contain only literals concatenated with other literals, not expressions or numbers.
+</source>
+ <translation>번역에 사용하는 문자열은 서로 다른 문자열끼리만 연결되어 있어야 하며, 표현식이나 숫자와는 연결할 수 없습니다.
+</translation>
+ </message>
+ <message>
+ <source>&apos;class&apos; must be followed by a class name.
+</source>
+ <translation>&apos;class&apos; 다음에는 클래스 이름이 와야 합니다.
+</translation>
+ </message>
+ <message>
+ <source>Excess closing brace.
+</source>
+ <translation>불필요한 닫는 중괄호가 있습니다.</translation>
+ </message>
+ <message>
+ <source>&apos;package&apos; must be followed by package name.
+</source>
+ <translation>&apos;package&apos; 다음에는 패키지 이름이 와야 합니다.
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace.
+</source>
+ <translation>여는 중괄호의 쌍이 맞지 않습니다.
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis.
+</source>
+ <translation>여는 소괄호의 쌍이 맞지 않습니다.
+</translation>
+ </message>
+ <message>
+ <source>Usage:
+ lupdate [options] [project-file]...
+ lupdate [options] [source-file|path|@lst-file]... -ts ts-files|@lst-file
+
+lupdate is part of Qt&apos;s Linguist tool chain. It extracts translatable
+messages from Qt UI files, C++, Java and JavaScript/QtScript source code.
+Extracted messages are stored in textual translation source files (typically
+Qt TS XML). New and modified messages can be merged into existing TS files.
+
+Options:
+ -help Display this information and exit.
+ -no-obsolete
+ Drop all obsolete strings.
+ -extensions &lt;ext&gt;[,&lt;ext&gt;]...
+ Process files with the given extensions only.
+ The extension list must be separated with commas, not with whitespace.
+ Default: &apos;%1&apos;.
+ -pluralonly
+ Only include plural form messages.
+ -silent
+ Do not explain what is being done.
+ -no-sort
+ Do not sort contexts in TS files.
+ -no-recursive
+ Do not recursively scan the following directories.
+ -recursive
+ Recursively scan the following directories (default).
+ -I &lt;includepath&gt; or -I&lt;includepath&gt;
+ Additional location to look for include files.
+ May be specified multiple times.
+ -locations {absolute|relative|none}
+ Specify/override how source code references are saved in TS files.
+ Default is absolute.
+ -no-ui-lines
+ Do not record line numbers in references to UI files.
+ -disable-heuristic {sametext|similartext|number}
+ Disable the named merge heuristic. Can be specified multiple times.
+ -pro &lt;filename&gt;
+ Name of a .pro file. Useful for files with .pro file syntax but
+ different file suffix. Projects are recursed into and merged.
+ -source-language &lt;language&gt;[_&lt;region&gt;]
+ Specify the language of the source strings for new files.
+ Defaults to POSIX if not specified.
+ -target-language &lt;language&gt;[_&lt;region&gt;]
+ Specify the language of the translations for new files.
+ Guessed from the file name if not specified.
+ -ts &lt;ts-file&gt;...
+ Specify the output file(s). This will override the TRANSLATIONS
+ and nullify the CODECFORTR from possibly specified project files.
+ -codecfortr &lt;codec&gt;
+ Specify the codec assumed for tr() calls. Effective only with -ts.
+ -version
+ Display the version of lupdate and exit.
+ @lst-file
+ Read additional file names (one per line) from lst-file.
+</source>
+ <translation>사용 방법:
+ lupdate [옵션] [project-file]...
+ lupdate [옵션] [source-file|path|@lst-file]... -ts ts-files|@lst-file
+
+lupdate는 Qt Linguist 도구 모음의 일부입니다. Qt UI 파일, C++,
+Java, JavaScript/QtScript 원본 코드에서 번역 가능한 문자열을 추출합니다.
+추출한 메시지는 번역 원본 파일(대개의 경우 Qt TS XML)에 저장됩니다.
+기존 TS 파일에 새로 추가되었거나 수정된 메시지를 추가할 수 있습니다.
+
+옵션:
+ -help 이 정보를 표시하고 끝냅니다.
+ -no-obsolete
+ 모든 오래된 문자열을 삭제합니다.
+ -extensions &lt;ext&gt;[,&lt;ext&gt;]...
+ 주어진 확장자를 가진 파일만 처리합니다.
+ 확장자 목록은 쉼표로 구분하며, 공백을 사용하면 안 됩니다.
+ 기본값: &apos;%1&apos;.
+ -pluralonly
+ 복수형 메시지만 포함합니다.
+ -silent
+ 진행 상황을 표시하지 않습니다.
+ -no-sort
+ TS 파일의 컨텍스트를 정렬하지 않습니다.
+ -no-recursive
+ 하위 디렉터리를 재귀적으로 탐색하지 않습니다.
+ -recursive
+ 하위 디렉터리를 재귀적으로 탐색합니다. (기본값)
+ -I &lt;includepath&gt; 또는 -I&lt;includepath&gt;
+ 포함할 파일을 찾을 추가 경로입니다.
+ 여러 번 사용할 수 있습니다.
+ -locations {absolute|relative|none}
+ TS 파일에 원본 코드 위치를 저장할 방법을 (재)지정합니다.
+ 기본값은 absolute(절대 위치)입니다.
+ -no-ui-lines
+ UI 파일을 참조할 때 줄 번호를 기록하지 않습니다.
+ -disable-heuristic {sametext|similartext|number}
+ 지정한 메시지 휴리스틱을 사용하지 않습니다.
+ 여러 번 사용할 수 있습니다.
+ -pro &lt;filename&gt;
+ .pro 파일 이름입니다. .pro 파일 문법을 사용하지만 확장자가
+ .pro가 아닌 경우에 사용하십시오. 재귀적으로 프로젝트를
+ 탐색하며 합칩니다.
+ -source-language &lt;language&gt;[_&lt;region&gt;]
+ 새 파일의 원문 언어를 지정합니다.
+ 지정하지 않으면 POSIX를 사용합니다.
+ -target-language &lt;language&gt;[_&lt;region&gt;]
+ 새 파일의 번역문 언어를 지정합니다.
+ 지정하지 않으면 파일 이름에서 추측합니다.
+ -ts &lt;ts-file&gt;...
+ 출력 파일을 지정합니다. TRANSLATIONS를 다시 지정하며
+ 프로젝트 파일에서 지정했을 수도 있는 CODECFORTR을
+ 무효화합니다.
+ -codecfortr &lt;codec&gt;
+ tr() 함수에 사용하는 코덱을 지정합니다.
+ -ts 옵션과 같이 사용할 때만 유효합니다.
+ -version
+ lupdate 버전을 표시하고 끝냅니다.
+ @lst-file
+ lst-file에서 추가 파일 목록(한 줄에 하나)을 읽습니다.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: Codec for tr() &apos;%1&apos; disagrees with existing file&apos;s codec &apos;%2&apos;. Expect trouble.
+</source>
+ <translation>lupdate 경고: tr()의 코덱 &apos;%1&apos;이(가) 파일의 코덱 &apos;%2&apos;와(과) 일치하지 않습니다. 내보낼 때 문제가 생길 수 있습니다.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: Specified target language &apos;%1&apos; disagrees with existing file&apos;s language &apos;%2&apos;. Ignoring.
+</source>
+ <translation>lupdate 경고: 지정한 대상 언어 &apos;%1&apos;이(가) 파일의 언어 &apos;%2&apos;와(과) 다릅니다. 무시합니다.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: Specified source language &apos;%1&apos; disagrees with existing file&apos;s language &apos;%2&apos;. Ignoring.
+</source>
+ <translation>lupdate 경고: 지정한 원본 언어 &apos;%1&apos;이(가) 파일의 언어 &apos;%2&apos;와(과) 다릅니다. 무시합니다.
+</translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation>&apos;%1&apos; 업데이트 중...
+</translation>
+ </message>
+ <message>
+ <source>Stripping non plural forms in &apos;%1&apos;...
+</source>
+ <translation>&apos;%1&apos;의 단수형 삭제하는 중...
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: Codec for source &apos;%1&apos; is invalid. Falling back to codec for tr().
+</source>
+ <translation>lupdate 경고: 원본 코덱 &apos;%1&apos;이(가) 올바르지 않습니다. tr()의 코덱을 사용합니다.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line will override TRANSLATIONS in %1.
+</source>
+ <translation>lupdate 경고: 명령행으로 지정한 TS 파일이 %1의 TRANSLATIONS를 재정의합니다.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line prevent recursing into %1.
+</source>
+ <translation>lupdate 경고: 명령행으로 지정한 TS 파일이 %1(으)로 재귀하는 것을 방지합니다.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced for &apos;%1&apos;.
+</source>
+ <translation>lupdate 경고: TS 파일이 지정되지 않았습니다. &apos;%1&apos;의 검사만 진행됩니다.
+</translation>
+ </message>
+ <message>
+ <source>The option -target-language requires a parameter.
+</source>
+ <translation>--target-language 옵션에는 인자가 필요합니다.
+</translation>
+ </message>
+ <message>
+ <source>The option -source-language requires a parameter.
+</source>
+ <translation>--source-language 옵션에는 인자가 필요합니다.
+</translation>
+ </message>
+ <message>
+ <source>The option -disable-heuristic requires a parameter.
+</source>
+ <translation>--disable-heuristic 옵션에는 인자가 필요합니다.
+</translation>
+ </message>
+ <message>
+ <source>Invalid heuristic name passed to -disable-heuristic.
+</source>
+ <translation>--disable-heuristic에 잘못된 휴리스틱 이름이 전달되었습니다.</translation>
+ </message>
+ <message>
+ <source>The option -locations requires a parameter.
+</source>
+ <translation>-locations 옵션에는 인자가 필요합니다.
+</translation>
+ </message>
+ <message>
+ <source>Invalid parameter passed to -locations.
+</source>
+ <translation>-locations 옵션에 잘못된 인자가 전달되었습니다.
+</translation>
+ </message>
+ <message>
+ <source>The -codecfortr option should be followed by a codec name.
+</source>
+ <translation>-codecfortr 옵션 다음에는 코덱 이름이 와야 합니다.
+</translation>
+ </message>
+ <message>
+ <source>The -extensions option should be followed by an extension list.
+</source>
+ <translation>-extensions 옵션 다음에는 확장자 목록이 와야 합니다.
+</translation>
+ </message>
+ <message>
+ <source>The -pro option should be followed by a filename of .pro file.
+</source>
+ <translation>-pro 옵션 다음에는 .pro 파일이 와야 합니다.
+</translation>
+ </message>
+ <message>
+ <source>The -I option should be followed by a path.
+</source>
+ <translation>-I 옵션 다음에는 경로가 와야 합니다.
+</translation>
+ </message>
+ <message>
+ <source>Unrecognized option &apos;%1&apos;.
+</source>
+ <translation>알 수 없는 옵션 &apos;%1&apos;.
+</translation>
+ </message>
+ <message>
+ <source>lupdate error: List file &apos;%1&apos; is not readable.
+</source>
+ <translation>lupdate 오류: 목록 파일 &apos;%1&apos;을(를) 읽을 수 없습니다.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: For some reason, &apos;%1&apos; is not writable.
+</source>
+ <translation>lupdate 경고: 파일 &apos;%1&apos;에 쓸 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; has no recognized extension.
+</source>
+ <translation>lupdate 오류: 파일 &apos;%1&apos;의 확장자는 알려져 있지 않습니다.
+</translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; does not exist.
+</source>
+ <translation>lupdate 오류: 파일 &apos;%1&apos;이(가) 없습니다.
+</translation>
+ </message>
+ <message>
+ <source>Scanning directory &apos;%1&apos;...
+</source>
+ <translation>디렉터리 &apos;%1&apos; 검사 중...
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: -target-language usually only makes sense with exactly one TS file.
+</source>
+ <translation>lupdate 경고: -target-language는 TS 파일을 하나만 지정했을 때 적용됩니다.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: -codecfortr has no effect without -ts.
+</source>
+ <translation>lupdate 경고: --codecfortr 옵션은 -ts 옵션을 지정해야 적용됩니다.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced.
+</source>
+ <translation>lupdate 경고: TS 파일이 지정되지 않았습니다. 검사만 진행됩니다.
+</translation>
+ </message>
+ <message>
+ <source>lupdate error: Both project and source files / include paths specified.
+</source>
+ <translation>lupdate 오류: 프로젝트 파일과 원본 파일/포함 경로 둘 다를 지정하였습니다.
+</translation>
+ </message>
+ <message numerus="yes">
+ <source> Found %n source text(s) (%1 new and %2 already existing)
+</source>
+ <translation>
+ <numerusform> 원본 문자열 %n개 찾음 (새 문자열 %1개, 기존 문자열 %2개)
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Removed %n obsolete entries
+</source>
+ <translation>
+ <numerusform> 오래된 항목 %n개 삭제됨
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Kept %n obsolete entries
+</source>
+ <translation>
+ <numerusform> 오래된 항목 %n개 보존됨
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Number heuristic provided %n translation(s)
+</source>
+ <translation>
+ <numerusform> 숫자 휴리스틱으로 %n개 번역됨
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Same-text heuristic provided %n translation(s)
+</source>
+ <translation>
+ <numerusform> 동일 텍스트 휴리스틱으로 %n개 번역됨
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Similar-text heuristic provided %n translation(s)
+</source>
+ <translation>
+ <numerusform> 비슷한 텍스트 휴리스틱으로 %n개 번역됨
+</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Illegal character</source>
+ <translation>잘못된 문자</translation>
+ </message>
+ <message>
+ <source>Unclosed string at end of line</source>
+ <translation>줄 끝에서 문자열이 닫히지 않았음</translation>
+ </message>
+ <message>
+ <source>Illegal escape squence</source>
+ <translation>잘못된 탈출 문자</translation>
+ </message>
+ <message>
+ <source>Illegal unicode escape sequence</source>
+ <translation>잘못된 유니코드 탈출 문자</translation>
+ </message>
+ <message>
+ <source>Unclosed comment at end of file</source>
+ <translation>파일 끝에서 주석이 닫히지 않았음</translation>
+ </message>
+ <message>
+ <source>Illegal syntax for exponential number</source>
+ <translation>지수 표기법이 잘못됨</translation>
+ </message>
+ <message>
+ <source>Identifier cannot start with numeric literal</source>
+ <translation>식별자는 숫자 리터럴로 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression literal</source>
+ <translation>종료되지 않은 정규 표현식 리터럴</translation>
+ </message>
+ <message>
+ <source>//% cannot be used with %1(). Ignoring
+</source>
+ <translation>//%는 %1()와(과) 사용될 수 없음. 무시함
+</translation>
+ </message>
+ <message>
+ <source>%1() requires at least two arguments.
+</source>
+ <translation>%1()에는 최소 2개의 인자가 필요합니다.
+</translation>
+ </message>
+ <message>
+ <source>%1(): both arguments must be literal strings.
+</source>
+ <translation>%1(): 두 인자는 문자열 리터럴이어야 합니다.
+</translation>
+ </message>
+ <message>
+ <source>%1() requires at least one argument.
+</source>
+ <translation>%1()에는 최소 1개의 인자가 필요합니다.
+</translation>
+ </message>
+ <message>
+ <source>%1(): text to translate must be a literal string.
+</source>
+ <translation>%1(): 번역할 텍스트는 문자열 리터럴이어야 합니다.
+</translation>
+ </message>
+ <message>
+ <source>//= cannot be used with %1(). Ignoring
+</source>
+ <translation>//=은 %1()와(과) 같이 사용할 수 없음. 무시함
+</translation>
+ </message>
+ <message>
+ <source>%1(): identifier must be a literal string.
+</source>
+ <translation>%1(): 식별자는 문자열 리터럴이어야 합니다.
+</translation>
+ </message>
+ <message>
+ <source>Expected </source>
+ <extracomment>Beginning of the string that contains comma-separated list of expected tokens</extracomment>
+ <translation>예상한 토큰</translation>
+ </message>
+ <message>
+ <source>XML error: Parse error at line %1, column %2 (%3).</source>
+ <translation>XML 오류: %1번째 줄, %2번째 칸에서 처리 오류 발생(%3).</translation>
+ </message>
+ <message>
+ <source>Parse error in UI file</source>
+ <translation>UI 파일 처리 오류</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>MainWindow</source>
+ <translation>MainWindow</translation>
+ </message>
+ <message>
+ <source>&amp;Phrases</source>
+ <translation>단어장(&amp;P)</translation>
+ </message>
+ <message>
+ <source>&amp;Close Phrase Book</source>
+ <translation>단어장 닫기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Edit Phrase Book</source>
+ <translation>단어장 편집(&amp;E)</translation>
+ </message>
+ <message>
+ <source>&amp;Print Phrase Book</source>
+ <translation>단어장 인쇄(&amp;P)</translation>
+ </message>
+ <message>
+ <source>V&amp;alidation</source>
+ <translation>검사(&amp;A)</translation>
+ </message>
+ <message>
+ <source>&amp;View</source>
+ <translation>보기(&amp;V)</translation>
+ </message>
+ <message>
+ <source>Vie&amp;ws</source>
+ <translation>보기(&amp;W)</translation>
+ </message>
+ <message>
+ <source>&amp;Toolbars</source>
+ <translation>도구 모음(&amp;T)</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>도움말(&amp;H)</translation>
+ </message>
+ <message>
+ <source>&amp;Translation</source>
+ <translation>번역(&amp;T)</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>파일(&amp;F)</translation>
+ </message>
+ <message>
+ <source>Recently Opened &amp;Files</source>
+ <translation>최근에 연 파일(&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;Edit</source>
+ <translation>편집(&amp;E)</translation>
+ </message>
+ <message>
+ <source>&amp;Open...</source>
+ <translation>열기(&amp;O)...</translation>
+ </message>
+ <message>
+ <source>Open a Qt translation source file (TS file) for editing</source>
+ <translation>편집할 Qt 번역 원본 파일(TS 파일)을 엽니다</translation>
+ </message>
+ <message>
+ <source>Ctrl+O</source>
+ <translation>Ctrl+O</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>끝내기(&amp;X)</translation>
+ </message>
+ <message>
+ <source>Close this window and exit.</source>
+ <translation>이 창을 닫고 종료합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+Q</source>
+ <translation>Ctrl+Q</translation>
+ </message>
+ <message>
+ <source>Save</source>
+ <translation>저장</translation>
+ </message>
+ <message>
+ <source>Save changes made to this Qt translation source file</source>
+ <translation>Qt 번역 원본 파일을 저장합니다</translation>
+ </message>
+ <message>
+ <source>Save &amp;As...</source>
+ <translation>다른 이름으로 저장(&amp;A)...</translation>
+ </message>
+ <message>
+ <source>Save As...</source>
+ <translation>다른 이름으로 저장...</translation>
+ </message>
+ <message>
+ <source>Save changes made to this Qt translation source file into a new file.</source>
+ <translation>변경된 Qt 번역 원본 파일을 다른 이름으로 저장합니다.</translation>
+ </message>
+ <message>
+ <source>Release</source>
+ <translation>배포</translation>
+ </message>
+ <message>
+ <source>Create a Qt message file suitable for released applications from the current message file.</source>
+ <translation>현재 메시지 파일을 프로그램에 사용할 수 있는 형태로 배포합니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Print...</source>
+ <translation>인쇄(&amp;P)...</translation>
+ </message>
+ <message>
+ <source>Print a list of all the translation units in the current translation source file.</source>
+ <translation>번역 원본 파일에 있는 모든 번역 단위 목록을 인쇄합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+P</source>
+ <translation>Ctrl+P</translation>
+ </message>
+ <message>
+ <source>&amp;Undo</source>
+ <translation>실행 취소(&amp;U)</translation>
+ </message>
+ <message>
+ <source>Undo the last editing operation performed on the current translation.</source>
+ <translation>현재 번역물에 실행한 마지막 작업을 취소합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+Z</source>
+ <translation>Ctrl+Z</translation>
+ </message>
+ <message>
+ <source>&amp;Redo</source>
+ <translation>다시 실행(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Redo an undone editing operation performed on the translation.</source>
+ <translation>마지막으로 취소한 작업을 다시 실행합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+Y</source>
+ <translation>Ctrl+Y</translation>
+ </message>
+ <message>
+ <source>Cu&amp;t</source>
+ <translation>잘라내기(&amp;T)</translation>
+ </message>
+ <message>
+ <source>Copy the selected translation text to the clipboard and deletes it.</source>
+ <translation>선택한 텍스트를 클립보드로 복사하고 입력 창에서 삭제합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+X</source>
+ <translation>Ctrl+X</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>복사(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Copy the selected translation text to the clipboard.</source>
+ <translation>선택한 텍스트를 클립보드에 복사합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+C</source>
+ <translation>Ctrl+C</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>붙여넣기(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Paste the clipboard text into the translation.</source>
+ <translation>클립보드에 있는 텍스트를 붙여 넣습니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+V</source>
+ <translation>Ctrl+V</translation>
+ </message>
+ <message>
+ <source>Select &amp;All</source>
+ <translation>모두 선택(&amp;A)</translation>
+ </message>
+ <message>
+ <source>Select the whole translation text.</source>
+ <translation>모든 번역 메시지를 선택합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+A</source>
+ <translation>Ctrl+A</translation>
+ </message>
+ <message>
+ <source>&amp;Find...</source>
+ <translation>찾기(&amp;F)...</translation>
+ </message>
+ <message>
+ <source>Search for some text in the translation source file.</source>
+ <translation>번역 원본 파일의 텍스트를 찾습니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+F</source>
+ <translation>Ctrl+F</translation>
+ </message>
+ <message>
+ <source>Find &amp;Next</source>
+ <translation>다음 찾기(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Continue the search where it was left.</source>
+ <translation>입력한 문자열이 다음에 나오는 곳을 찾습니다.</translation>
+ </message>
+ <message>
+ <source>F3</source>
+ <translation>F3</translation>
+ </message>
+ <message>
+ <source>&amp;Prev Unfinished</source>
+ <translation>이전 미완료(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Previous unfinished item</source>
+ <translation>이전 미완료 항목</translation>
+ </message>
+ <message>
+ <source>Move to the previous unfinished item.</source>
+ <translation>이전 미완료 항목으로 이동합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+K</source>
+ <translation>Ctrl+K</translation>
+ </message>
+ <message>
+ <source>&amp;Next Unfinished</source>
+ <translation>다음 미완료(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Next unfinished item</source>
+ <translation>다음 미완료 항목</translation>
+ </message>
+ <message>
+ <source>Move to the next unfinished item.</source>
+ <translation>다음 미완료 항목으로 이동합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+J</source>
+ <translation>Ctrl+J</translation>
+ </message>
+ <message>
+ <source>P&amp;rev</source>
+ <translation>이전(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Move to previous item</source>
+ <translation>이전 항목으로 이동</translation>
+ </message>
+ <message>
+ <source>Move to the previous item.</source>
+ <translation>이전 항목으로 이동합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+Shift+K</source>
+ <translation>Ctrl+Shift+K</translation>
+ </message>
+ <message>
+ <source>Ne&amp;xt</source>
+ <translation>다음(&amp;X)</translation>
+ </message>
+ <message>
+ <source>Next item</source>
+ <translation>다음 항목</translation>
+ </message>
+ <message>
+ <source>Move to the next item.</source>
+ <translation>다음 항목으로 이동합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+Shift+J</source>
+ <translation>Ctrl+Shift+J</translation>
+ </message>
+ <message>
+ <source>&amp;Done and Next</source>
+ <translation>완료 표시 후 다음(&amp;D)</translation>
+ </message>
+ <message>
+ <source>Mark item as done and move to the next unfinished item</source>
+ <translation>항목을 완료된 것으로 표시하고 다음 미완료 항목으로 이동</translation>
+ </message>
+ <message>
+ <source>Mark this item as done and move to the next unfinished item.</source>
+ <translation>항목을 완료된 것으로 표시하고 다음 미완료 항목으로 이동합니다.</translation>
+ </message>
+ <message>
+ <source>Copy from source text</source>
+ <translation>원본 텍스트 복사</translation>
+ </message>
+ <message>
+ <source>Copies the source text into the translation field</source>
+ <translation>원본 텍스트를 번역문으로 복사</translation>
+ </message>
+ <message>
+ <source>Copies the source text into the translation field.</source>
+ <translation>원본 텍스트를 번역문으로 복사합니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+B</source>
+ <translation>Ctrl+B</translation>
+ </message>
+ <message>
+ <source>&amp;Accelerators</source>
+ <translation>가속기(&amp;A)</translation>
+ </message>
+ <message>
+ <source>Toggle the validity check of accelerators</source>
+ <translation>가속기 키 유효성 검사 활성화/비활성화</translation>
+ </message>
+ <message>
+ <source>Toggle the validity check of accelerators, i.e. whether the number of ampersands in the source and translation text is the same. If the check fails, a message is shown in the warnings window.</source>
+ <translation>가속기 키 검사를 켜거나 끕니다. 검사가 켜져 있으면 원문과 번역문의 &amp; 기호 개수가 똑같은 지 검사합니다. 검사가 실패하면 경고 창에 메시지를 표시합니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Ending Punctuation</source>
+ <translation>끝맺는 문장 부호(&amp;E)</translation>
+ </message>
+ <message>
+ <source>Toggle the validity check of ending punctuation</source>
+ <translation>끝맺는 문장 부호 유효성 검사 활성화/비활성화</translation>
+ </message>
+ <message>
+ <source>Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window.</source>
+ <translation>원문과 번역문의 끝맺는 문장 부호가 서로 같은지 검사합니다. 검사가 실패하면 경고 창에 메시지를 표시합니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Phrase matches</source>
+ <translation>단어장 일치(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Toggle checking that phrase suggestions are used</source>
+ <translation>단어장에서 제안한 단어 사용 여부 검사 활성화/비활성화</translation>
+ </message>
+ <message>
+ <source>Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window.</source>
+ <translation>단어장에서 제안한 단어를 사용했는지 여부를 검사합니다. 검사가 실패하면 경고 창에 메시지를 표시합니다.</translation>
+ </message>
+ <message>
+ <source>Place &amp;Marker Matches</source>
+ <translation>자리 표시자 일치(&amp;M)</translation>
+ </message>
+ <message>
+ <source>Toggle the validity check of place markers</source>
+ <translation>자리 표시자 일치 검사 활성화/비활성화</translation>
+ </message>
+ <message>
+ <source>Toggle the validity check of place markers, i.e. whether %1, %2, ... are used consistently in the source text and translation text. If the check fails, a message is shown in the warnings window.</source>
+ <translation>원문과 번역문에 있는 %1, %2와 같은 자리 표시자가 올바르게 사용되었는지 검사합니다. 검사가 실패하면 경고 창에 메시지를 표시합니다.</translation>
+ </message>
+ <message>
+ <source>&amp;New Phrase Book...</source>
+ <translation>새 단어장(&amp;N)...</translation>
+ </message>
+ <message>
+ <source>Create a new phrase book.</source>
+ <translation>새 단어장을 만듭니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+N</source>
+ <translation>Ctrl+N</translation>
+ </message>
+ <message>
+ <source>&amp;Open Phrase Book...</source>
+ <translation>단어장 열기(&amp;O)...</translation>
+ </message>
+ <message>
+ <source>Open a phrase book to assist translation.</source>
+ <translation>번역을 돕는 단어장을 엽니다.</translation>
+ </message>
+ <message>
+ <source>Ctrl+H</source>
+ <translation>Ctrl+H</translation>
+ </message>
+ <message>
+ <source>&amp;Reset Sorting</source>
+ <translation>정렬 초기화(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Sort the items back in the same order as in the message file.</source>
+ <translation>항목 정렬을 메시지 파일 순서로 초기화합니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Display guesses</source>
+ <translation>추측 표시(&amp;D)</translation>
+ </message>
+ <message>
+ <source>Set whether or not to display translation guesses.</source>
+ <translation>번역 추측을 표시할 지 여부입니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Statistics</source>
+ <translation>통계(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Display translation statistics.</source>
+ <translation>번역 통계를 표시합니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Manual</source>
+ <translation>도움말(&amp;M)</translation>
+ </message>
+ <message>
+ <source>F1</source>
+ <translation>F1</translation>
+ </message>
+ <message>
+ <source>About Qt Linguist</source>
+ <translation>Qt Linguist 정보</translation>
+ </message>
+ <message>
+ <source>About Qt</source>
+ <translation>Qt 정보</translation>
+ </message>
+ <message>
+ <source>Display information about the Qt toolkit by Nokia.</source>
+ <translation>Qt 툴킷의 정보를 표시합니다.</translation>
+ </message>
+ <message>
+ <source>&amp;What&apos;s This?</source>
+ <translation>이것에 대한 설명(&amp;W)</translation>
+ </message>
+ <message>
+ <source>What&apos;s This?</source>
+ <translation>항목별 도움말</translation>
+ </message>
+ <message>
+ <source>Enter What&apos;s This? mode.</source>
+ <translation>항목별 도움말을 표시합니다.</translation>
+ </message>
+ <message>
+ <source>Shift+F1</source>
+ <translation>Shift+F1</translation>
+ </message>
+ <message>
+ <source>&amp;Search And Translate...</source>
+ <translation>찾아서 번역(&amp;S)...</translation>
+ </message>
+ <message>
+ <source>Replace the translation on all entries that matches the search source text.</source>
+ <translation>원본 텍스트가 찾을 텍스트와 일치하는 모든 항목을 찾아서 번역합니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Batch Translation...</source>
+ <translation>일괄 번역(&amp;B)...</translation>
+ </message>
+ <message>
+ <source>Batch translate all entries using the information in the phrase books.</source>
+ <translation>단어장의 정보를 사용하여 일괄적으로 번역합니다.</translation>
+ </message>
+ <message>
+ <source>Release As...</source>
+ <translation>다른 이름으로 배포...</translation>
+ </message>
+ <message>
+ <source>Create a Qt message file suitable for released applications from the current message file. The filename will automatically be determined from the name of the TS file.</source>
+ <translation>현재 메시지 파일을 프로그램에 사용할 수 있는 형태로 배포합니다. 파일 이름은 TS 파일 이름에서 자동으로 정해집니다.</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation>파일</translation>
+ </message>
+ <message>
+ <source>Edit</source>
+ <translation>편집</translation>
+ </message>
+ <message>
+ <source>Translation</source>
+ <translation>번역</translation>
+ </message>
+ <message>
+ <source>Validation</source>
+ <translation>검사</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>도움말</translation>
+ </message>
+ <message>
+ <source>Open/Refresh Form &amp;Preview</source>
+ <translation>폼 미리보기 열기/새로 고침(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Form Preview Tool</source>
+ <translation>폼 미리보기 도구</translation>
+ </message>
+ <message>
+ <source>F5</source>
+ <translation>F5</translation>
+ </message>
+ <message>
+ <source>Translation File &amp;Settings...</source>
+ <translation>번역 파일 설정(&amp;S)...</translation>
+ </message>
+ <message>
+ <source>&amp;Add to Phrase Book</source>
+ <translation>단어장에 추가(&amp;A)</translation>
+ </message>
+ <message>
+ <source>Ctrl+T</source>
+ <translation>Ctrl+T</translation>
+ </message>
+ <message>
+ <source>Open Read-O&amp;nly...</source>
+ <translation>읽기 전용으로 열기(&amp;N)...</translation>
+ </message>
+ <message>
+ <source>&amp;Save All</source>
+ <translation>모두 저장(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>&amp;Release All</source>
+ <translation>모두 배포(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>&amp;Close All</source>
+ <translation>모두 닫기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Ctrl+W</source>
+ <translation>Ctrl+W</translation>
+ </message>
+ <message>
+ <source>Length Variants</source>
+ <translation>다른 길이 문자열</translation>
+ </message>
+ <message>
+ <source></source>
+ <comment>This is the application&apos;s main window.</comment>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Source text</source>
+ <translation>원본 텍스트</translation>
+ </message>
+ <message>
+ <source>Index</source>
+ <translation>인덱스</translation>
+ </message>
+ <message>
+ <source>Context</source>
+ <translation>컨텍스트</translation>
+ </message>
+ <message>
+ <source>Items</source>
+ <translation>항목</translation>
+ </message>
+ <message>
+ <source>This panel lists the source contexts.</source>
+ <translation>이 패널은 원본 컨텍스트 목록입니다.</translation>
+ </message>
+ <message>
+ <source>Strings</source>
+ <translation>문자열</translation>
+ </message>
+ <message>
+ <source>Phrases and guesses</source>
+ <translation>단어장과 추측</translation>
+ </message>
+ <message>
+ <source>Sources and Forms</source>
+ <translation>원본 코드와 폼</translation>
+ </message>
+ <message>
+ <source>Warnings</source>
+ <translation>경고</translation>
+ </message>
+ <message>
+ <source> MOD </source>
+ <comment>status bar: file(s) modified</comment>
+ <translation>수정됨</translation>
+ </message>
+ <message>
+ <source>Loading...</source>
+ <translation>불러오는 중...</translation>
+ </message>
+ <message>
+ <source>Loading File - Qt Linguist</source>
+ <translation>파일 불러오기 - Qt Linguist</translation>
+ </message>
+ <message>
+ <source>The file &apos;%1&apos; does not seem to be related to the currently open file(s) &apos;%2&apos;.
+
+Close the open file(s) first?</source>
+ <translation>파일 &apos;%1&apos;이(가) 현재 열려 있는 파일 &apos;%2&apos;와(과) 관련이 없는 것 같습니다.
+
+열려 있는 파일을 닫으시겠습니까?</translation>
+ </message>
+ <message>
+ <source>The file &apos;%1&apos; does not seem to be related to the file &apos;%2&apos; which is being loaded as well.
+
+Skip loading the first named file?</source>
+ <translation>파일 &apos;%1&apos;이(가) 같이 열려고 하는 파일 &apos;%2&apos;와(과) 관련이 없는 것 같습니다.
+
+첫 번째 파일을 열지 않으시겠습니까?</translation>
+ </message>
+ <message numerus="yes">
+ <source>%n translation unit(s) loaded.</source>
+ <translation>
+ <numerusform>번역 단위 %n개를 불러 왔습니다.</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Related files (%1);;</source>
+ <translation>관련된 파일 (%1);;</translation>
+ </message>
+ <message>
+ <source>Open Translation Files</source>
+ <translation>번역 파일 열기</translation>
+ </message>
+ <message>
+ <source>File saved.</source>
+ <translation>파일이 저장되었습니다.</translation>
+ </message>
+ <message>
+ <source>Qt message files for released applications (*.qm)
+All files (*)</source>
+ <translation>배포된 프로그램을 위한 Qt 메시지 파일 (*.qm)
+모든 파일 (*)</translation>
+ </message>
+ <message>
+ <source>File created.</source>
+ <translation>파일을 생성하였습니다.</translation>
+ </message>
+ <message>
+ <source>Printing...</source>
+ <translation>인쇄 중...</translation>
+ </message>
+ <message>
+ <source>Context: %1</source>
+ <translation>컨텍스트: %1</translation>
+ </message>
+ <message>
+ <source>finished</source>
+ <translation>완료됨</translation>
+ </message>
+ <message>
+ <source>unresolved</source>
+ <translation>해결되지 않음</translation>
+ </message>
+ <message>
+ <source>obsolete</source>
+ <translation>오래됨</translation>
+ </message>
+ <message>
+ <source>Printing... (page %1)</source>
+ <translation>인쇄 중... (%1쪽)</translation>
+ </message>
+ <message>
+ <source>Printing completed</source>
+ <translation>인쇄가 완료되었습니다</translation>
+ </message>
+ <message>
+ <source>Printing aborted</source>
+ <translation>인쇄가 중단되었습니다</translation>
+ </message>
+ <message>
+ <source>Search wrapped.</source>
+ <translation>검색이 다시 시작되었습니다.</translation>
+ </message>
+ <message>
+ <source>Qt Linguist</source>
+ <translation>Qt Linguist</translation>
+ </message>
+ <message>
+ <source>Cannot find the string &apos;%1&apos;.</source>
+ <translation>문자열 &apos;%1&apos;을(를) 찾을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Search And Translate in &apos;%1&apos; - Qt Linguist</source>
+ <translation>&apos;%1&apos;에서 찾아서 번역하기 - Qt Linguist</translation>
+ </message>
+ <message>
+ <source>Translate - Qt Linguist</source>
+ <translation>번역 - Qt Linguist</translation>
+ </message>
+ <message numerus="yes">
+ <source>Translated %n entry(s)</source>
+ <translation>
+ <numerusform>항목 %n개를 번역하였습니다</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>No more occurrences of &apos;%1&apos;. Start over?</source>
+ <translation>&apos;%1&apos;을(를) 더 이상 찾을 수 없습니다. 처음부터 다시 시작하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Create New Phrase Book</source>
+ <translation>새 단어장 만들기</translation>
+ </message>
+ <message>
+ <source>Qt phrase books (*.qph)
+All files (*)</source>
+ <translation>Qt 단어장 (*.qph)
+모든 파일 (*)</translation>
+ </message>
+ <message>
+ <source>Phrase book created.</source>
+ <translation>단어장을 만들었습니다.</translation>
+ </message>
+ <message>
+ <source>Open Phrase Book</source>
+ <translation>단어장 열기</translation>
+ </message>
+ <message>
+ <source>Qt phrase books (*.qph);;All files (*)</source>
+ <translation>Qt 단어장 (*.qph);;모든 파일 (*)</translation>
+ </message>
+ <message numerus="yes">
+ <source>%n phrase(s) loaded.</source>
+ <translation>
+ <numerusform>단어 %n개를 불러왔습니다.</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Add to phrase book</source>
+ <translation>단어장에 추가</translation>
+ </message>
+ <message>
+ <source>No appropriate phrasebook found.</source>
+ <translation>사용 가능한 단어장이 없습니다.</translation>
+ </message>
+ <message>
+ <source>Adding entry to phrasebook %1</source>
+ <translation>단어장 %1에 항목 추가</translation>
+ </message>
+ <message>
+ <source>Select phrase book to add to</source>
+ <translation>추가할 단어장 선택</translation>
+ </message>
+ <message>
+ <source>Unable to launch Qt Assistant (%1)</source>
+ <translation>Qt Assistant (%1)를 실행할 수 없습니다</translation>
+ </message>
+ <message>
+ <source>Version %1</source>
+ <translation>버전 %1</translation>
+ </message>
+ <message>
+ <source>&lt;center&gt;&lt;img src=&quot;:/images/splash.png&quot;/&gt;&lt;/img&gt;&lt;p&gt;%1&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Qt Linguist is a tool for adding translations to Qt applications.&lt;/p&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source>
+ <translation>&lt;center&gt;&lt;img src=&quot;:/images/splash.png&quot;/&gt;&lt;/img&gt;&lt;p&gt;%1&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Qt Linguist는 Qt 프로그램을 번역하는 도구입니다.&lt;/p&gt;&lt;p&gt;저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</translation>
+ </message>
+ <message>
+ <source>Do you want to save the modified files?</source>
+ <translation>수정된 파일을 저장하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Do you want to save &apos;%1&apos;?</source>
+ <translation>&apos;%1&apos;을(를) 저장하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Qt Linguist[*]</source>
+ <translation>Qt Linguist[*]</translation>
+ </message>
+ <message>
+ <source>%1[*] - Qt Linguist</source>
+ <translation>%1[*] - Qt Linguist</translation>
+ </message>
+ <message>
+ <source>No untranslated translation units left.</source>
+ <translation>모든 번역 단위가 번역되었습니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Window</source>
+ <translation>창(&amp;W)</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>최소화</translation>
+ </message>
+ <message>
+ <source>Ctrl+M</source>
+ <translation>Ctrl+M</translation>
+ </message>
+ <message>
+ <source>Display the manual for %1.</source>
+ <translation>%1의 도움말을 표시합니다.</translation>
+ </message>
+ <message>
+ <source>Display information about %1.</source>
+ <translation>%1의 정보를 표시합니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Save &apos;%1&apos;</source>
+ <translation>&apos;%1&apos; 저장(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Save &apos;%1&apos; &amp;As...</source>
+ <translation>&apos;%1&apos; 다른 이름으로 저장(&amp;A)...</translation>
+ </message>
+ <message>
+ <source>Release &apos;%1&apos;</source>
+ <translation>&apos;%1&apos; 배포</translation>
+ </message>
+ <message>
+ <source>Release &apos;%1&apos; As...</source>
+ <translation>&apos;%1&apos; 다른 이름으로 배포...</translation>
+ </message>
+ <message>
+ <source>&amp;Close &apos;%1&apos;</source>
+ <translation>&apos;%1&apos; 닫기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>저장(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>닫기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Save All</source>
+ <translation>모두 저장</translation>
+ </message>
+ <message>
+ <source>Close All</source>
+ <translation>모두 닫기</translation>
+ </message>
+ <message>
+ <source>&amp;Release</source>
+ <translation>배포(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Translation File &amp;Settings for &apos;%1&apos;...</source>
+ <translation>&apos;%1&apos;의 번역 파일 설정(&amp;S)...</translation>
+ </message>
+ <message>
+ <source>&amp;Batch Translation of &apos;%1&apos;...</source>
+ <translation>&apos;%1&apos; 일괄 번역(&amp;B)...</translation>
+ </message>
+ <message>
+ <source>Search And &amp;Translate in &apos;%1&apos;...</source>
+ <translation>&apos;%1&apos;에서 찾아서 번역(&amp;T)...</translation>
+ </message>
+ <message>
+ <source>Search And &amp;Translate...</source>
+ <translation>찾아서 번역(&amp;T)...</translation>
+ </message>
+ <message>
+ <source>Cannot read from phrase book &apos;%1&apos;.</source>
+ <translation>단어장 &apos;%1&apos;에서 읽을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Close this phrase book.</source>
+ <translation>이 단어장을 닫습니다.</translation>
+ </message>
+ <message>
+ <source>Enables you to add, modify, or delete entries in this phrase book.</source>
+ <translation>단어장의 항목을 추가, 수정, 삭제할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>Print the entries in this phrase book.</source>
+ <translation>이 단어장의 항목을 인쇄합니다.</translation>
+ </message>
+ <message>
+ <source>Cannot create phrase book &apos;%1&apos;.</source>
+ <translation>단어장 &apos;%1&apos;을(를) 만들 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Do you want to save phrase book &apos;%1&apos;?</source>
+ <translation>단어장 &apos;%1&apos;을(를) 저장하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>All</source>
+ <translation>모두</translation>
+ </message>
+</context>
+<context>
+ <name>MessageEditor</name>
+ <message>
+ <source></source>
+ <comment>This is the right panel of the main window.</comment>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Russian</source>
+ <translation>러시아어</translation>
+ </message>
+ <message>
+ <source>German</source>
+ <translation>독일어</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>일본어</translation>
+ </message>
+ <message>
+ <source>French</source>
+ <translation>프랑스어</translation>
+ </message>
+ <message>
+ <source>Polish</source>
+ <translation>폴란드어</translation>
+ </message>
+ <message>
+ <source>Chinese</source>
+ <translation>중국어</translation>
+ </message>
+ <message>
+ <source>This whole panel allows you to view and edit the translation of some source text.</source>
+ <translation>이 패널에서는 원본 텍스트의 번역을 보거나 편집할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>Source text</source>
+ <translation>원본 텍스트</translation>
+ </message>
+ <message>
+ <source>This area shows the source text.</source>
+ <translation>이 영역은 원본 텍스트를 표시합니다.</translation>
+ </message>
+ <message>
+ <source>Source text (Plural)</source>
+ <translation>원본 텍스트 (복수형)</translation>
+ </message>
+ <message>
+ <source>This area shows the plural form of the source text.</source>
+ <translation>이 영역은 원본 텍스트의 복수형을 표시합니다.</translation>
+ </message>
+ <message>
+ <source>Developer comments</source>
+ <translation>개발자 주석</translation>
+ </message>
+ <message>
+ <source>This area shows a comment that may guide you, and the context in which the text occurs.</source>
+ <translation>이 영역은 개발자가 입력한 설명이나 텍스트가 나오는 상황을 알려 줍니다.</translation>
+ </message>
+ <message>
+ <source>Here you can enter comments for your own use. They have no effect on the translated applications.</source>
+ <translation>역자주를 입력할 수 있습니다. 번역된 프로그램에는 나타나지 않습니다.</translation>
+ </message>
+ <message>
+ <source>%1 translation (%2)</source>
+ <translation>%1 번역 (%2)</translation>
+ </message>
+ <message>
+ <source>This is where you can enter or modify the translation of the above source text.</source>
+ <translation>원본 텍스트의 번역을 입력하거나 수정할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>%1 translation</source>
+ <translation>%1 번역</translation>
+ </message>
+ <message>
+ <source>%1 translator comments</source>
+ <translation>%1 역자주</translation>
+ </message>
+ <message>
+ <source>&apos;%1&apos;
+Line: %2</source>
+ <translation>&apos;%1&apos;
+줄: %2</translation>
+ </message>
+</context>
+<context>
+ <name>MessageModel</name>
+ <message>
+ <source>Completion status for %1</source>
+ <translation>%1의 번역 상태</translation>
+ </message>
+ <message>
+ <source>&lt;file header&gt;</source>
+ <translation>&lt;파일 헤더&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;context comment&gt;</source>
+ <translation>&lt;컨텍스트 주석&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;unnamed context&gt;</source>
+ <translation>&lt;이름 없는 컨텍스트&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>PhraseBook</name>
+ <message>
+ <source>Parse error at line %1, column %2 (%3).</source>
+ <translation>%1번째 줄, %2번째 칸에서 처리 오류 발생(%3).</translation>
+ </message>
+</context>
+<context>
+ <name>PhraseBookBox</name>
+ <message>
+ <source>Edit Phrase Book</source>
+ <translation>단어장 편집</translation>
+ </message>
+ <message>
+ <source>This window allows you to add, modify, or delete entries in a phrase book.</source>
+ <translation>단어장의 항목을 추가, 수정, 삭제할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Translation:</source>
+ <translation>번역(&amp;T):</translation>
+ </message>
+ <message>
+ <source>This is the phrase in the target language corresponding to the source phrase.</source>
+ <translation>원문의 대상 언어로 된 번역문입니다.</translation>
+ </message>
+ <message>
+ <source>S&amp;ource phrase:</source>
+ <translation>원문(&amp;O):</translation>
+ </message>
+ <message>
+ <source>This is a definition for the source phrase.</source>
+ <translation>원문의 정의입니다.</translation>
+ </message>
+ <message>
+ <source>This is the phrase in the source language.</source>
+ <translation>원문 텍스트입니다.</translation>
+ </message>
+ <message>
+ <source>&amp;Definition:</source>
+ <translation>정의(&amp;D):</translation>
+ </message>
+ <message>
+ <source>Click here to add the phrase to the phrase book.</source>
+ <translation>단어장에 단어를 추가하려면 누르십시오.</translation>
+ </message>
+ <message>
+ <source>&amp;New Entry</source>
+ <translation>새 항목(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Click here to remove the entry from the phrase book.</source>
+ <translation>단어장에서 항목을 삭제하려면 누르십시오.</translation>
+ </message>
+ <message>
+ <source>&amp;Remove Entry</source>
+ <translation>항목 삭제(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Settin&amp;gs...</source>
+ <translation>설정(&amp;G)...</translation>
+ </message>
+ <message>
+ <source>Click here to save the changes made.</source>
+ <translation>변경 사항을 저장하려면 누르십시오.</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>저장(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Click here to close this window.</source>
+ <translation>이 창을 닫으려면 누르십시오.</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source></source>
+ <comment>Go to Phrase &gt; Edit Phrase Book... The dialog that pops up is a PhraseBookBox.</comment>
+ <translation></translation>
+ </message>
+ <message>
+ <source>(New Entry)</source>
+ <translation>(새 항목)</translation>
+ </message>
+ <message>
+ <source>%1[*] - Qt Linguist</source>
+ <translation>%1[*] - Qt Linguist</translation>
+ </message>
+ <message>
+ <source>Qt Linguist</source>
+ <translation>Qt Linguist</translation>
+ </message>
+ <message>
+ <source>Cannot save phrase book &apos;%1&apos;.</source>
+ <translation>단어장 &apos;%1&apos;을(를) 저장할 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>PhraseModel</name>
+ <message>
+ <source>Source phrase</source>
+ <translation>원문</translation>
+ </message>
+ <message>
+ <source>Translation</source>
+ <translation>번역</translation>
+ </message>
+ <message>
+ <source>Definition</source>
+ <translation>정의</translation>
+ </message>
+</context>
+<context>
+ <name>PhraseView</name>
+ <message>
+ <source>Insert</source>
+ <translation>삽입</translation>
+ </message>
+ <message>
+ <source>Edit</source>
+ <translation>편집</translation>
+ </message>
+ <message>
+ <source>Guess (%1)</source>
+ <translation>추측 (%1)</translation>
+ </message>
+ <message>
+ <source>Guess</source>
+ <translation>추측</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>GNU Gettext localization files</source>
+ <translation>GNU Gettext 번역 파일</translation>
+ </message>
+ <message>
+ <source>GNU Gettext localization template files</source>
+ <translation>GNU Gettext 번역 템플릿 파일</translation>
+ </message>
+ <message>
+ <source>Compiled Qt translations</source>
+ <translation>컴파일된 Qt 번역</translation>
+ </message>
+ <message>
+ <source>Qt Linguist &apos;Phrase Book&apos;</source>
+ <translation>Qt Linguist &apos;단어장&apos;</translation>
+ </message>
+ <message>
+ <source>Qt translation sources (format 1.1)</source>
+ <translation>Qt 번역 원본 파일 (1.1 형식)</translation>
+ </message>
+ <message>
+ <source>Qt translation sources (format 2.0)</source>
+ <translation>Qt 번역 원본 파일 (2.0 형식)</translation>
+ </message>
+ <message>
+ <source>Qt translation sources (latest format)</source>
+ <translation>Qt 번역 원본 파일 (최신 형식)</translation>
+ </message>
+ <message>
+ <source>XLIFF localization files</source>
+ <translation>XLIFF 번역 파일</translation>
+ </message>
+ <message>
+ <source>lupdate version %1
+</source>
+ <translation>lupdate 버전 %1
+</translation>
+ </message>
+ <message>
+ <source>Translation files (%1);;</source>
+ <translation>번역 파일 (%1);;</translation>
+ </message>
+ <message>
+ <source>All files (*)</source>
+ <translation>모든 파일 (*)</translation>
+ </message>
+ <message>
+ <source>Qt Linguist</source>
+ <translation>Qt Linguist</translation>
+ </message>
+</context>
+<context>
+ <name>SourceCodeView</name>
+ <message>
+ <source>&lt;i&gt;Source code not available&lt;/i&gt;</source>
+ <translation>&lt;i&gt;원본 코드를 사용할 수 없음&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;File %1 not available&lt;/i&gt;</source>
+ <translation>&lt;i&gt;파일 %1을(를) 사용할 수 없음&lt;/i&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;i&gt;File %1 not readable&lt;/i&gt;</source>
+ <translation>&lt;i&gt;파일 %1에서 읽을 수 없음&lt;/i&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>Statistics</name>
+ <message>
+ <source>Statistics</source>
+ <translation>통계</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>Translation</source>
+ <translation>번역</translation>
+ </message>
+ <message>
+ <source>Source</source>
+ <translation>원문</translation>
+ </message>
+ <message>
+ <source>0</source>
+ <translation>0</translation>
+ </message>
+ <message>
+ <source>Words:</source>
+ <translation>단어 수:</translation>
+ </message>
+ <message>
+ <source>Characters:</source>
+ <translation>글자 수:</translation>
+ </message>
+ <message>
+ <source>Characters (with spaces):</source>
+ <translation>글자 수(공백 포함):</translation>
+ </message>
+</context>
+<context>
+ <name>TranslateDialog</name>
+ <message>
+ <source>This window allows you to search for some text in the translation source file.</source>
+ <translation>번역 원본 파일의 텍스트를 찾을 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>Type in the text to search for.</source>
+ <translation>검색할 텍스트를 입력하십시오.</translation>
+ </message>
+ <message>
+ <source>Find &amp;source text:</source>
+ <translation>찾을 문자열(&amp;S):</translation>
+ </message>
+ <message>
+ <source>&amp;Translate to:</source>
+ <translation>다음으로 번역(&amp;T):</translation>
+ </message>
+ <message>
+ <source>Search options</source>
+ <translation>찾기 옵션</translation>
+ </message>
+ <message>
+ <source>Texts such as &apos;TeX&apos; and &apos;tex&apos; are considered as different when checked.</source>
+ <translation>선택하면 &apos;TeX&apos;와 &apos;tex&apos;를 다른 문자열로 취급합니다.</translation>
+ </message>
+ <message>
+ <source>Match &amp;case</source>
+ <translation>대소문자 구분(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Mark new translation as &amp;finished</source>
+ <translation>새 번역을 완료됨으로 표시(&amp;F)</translation>
+ </message>
+ <message>
+ <source>Click here to find the next occurrence of the text you typed in.</source>
+ <translation>입력한 텍스트가 다음에 등장하는 곳을 찾습니다.</translation>
+ </message>
+ <message>
+ <source>Find Next</source>
+ <translation>다음 찾기</translation>
+ </message>
+ <message>
+ <source>Translate</source>
+ <translation>번역</translation>
+ </message>
+ <message>
+ <source>Translate All</source>
+ <translation>모두 번역</translation>
+ </message>
+ <message>
+ <source>Click here to close this window.</source>
+ <translation>이 창을 닫으려면 누르십시오.</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+</context>
+<context>
+ <name>TranslationSettingsDialog</name>
+ <message>
+ <source>Source language</source>
+ <translation>원본 언어</translation>
+ </message>
+ <message>
+ <source>Language</source>
+ <translation>언어</translation>
+ </message>
+ <message>
+ <source>Country/Region</source>
+ <translation>국가/지역</translation>
+ </message>
+ <message>
+ <source>Target language</source>
+ <translation>대상 언어</translation>
+ </message>
+ <message>
+ <source>Settings for &apos;%1&apos; - Qt Linguist</source>
+ <translation>&apos;%1&apos; 설정 - Qt Linguist</translation>
+ </message>
+ <message>
+ <source>Any Country</source>
+ <translation>임의의 국가</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/linguist_pl.ts b/translations/linguist_pl.ts
index 661f060..550d76b 100644
--- a/translations/linguist_pl.ts
+++ b/translations/linguist_pl.ts
@@ -4,7 +4,6 @@
<context>
<name>AboutDialog</name>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1366"/>
<source>Qt Linguist</source>
<translation>Qt Linguist</translation>
</message>
@@ -12,7 +11,6 @@
<context>
<name>BatchTranslationDialog</name>
<message numerus="yes">
- <location filename="../tools/linguist/linguist/batchtranslationdialog.cpp" line="+159"/>
<source>Batch translated %n entries</source>
<translation>
<numerusform>Automat przetłumaczył %n wpis</numerusform>
@@ -21,82 +19,66 @@
</translation>
</message>
<message>
- <location line="-43"/>
<source>&amp;Cancel</source>
<translation>&amp;Anuluj</translation>
</message>
<message>
- <location line="-37"/>
<source>Batch Translation of &apos;%1&apos; - Qt Linguist</source>
<translation>Automatyczne tłumaczenie &apos;%1&apos; - Qt Linguist</translation>
</message>
<message>
- <location line="+79"/>
<source>Linguist batch translator</source>
<translation>Zautomatyzowany tłumacz Linguist&apos;a</translation>
</message>
<message>
- <location line="-42"/>
<source>Searching, please wait...</source>
<translation>Przeszukiwanie, proszę czekać...</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/batchtranslation.ui"/>
<source>Qt Linguist - Batch Translation</source>
<translation>Qt Linguist - automatyczne tłumaczenie</translation>
</message>
<message>
- <location/>
<source>Options</source>
<translation>Opcje</translation>
</message>
<message>
- <location/>
<source>Set translated entries to finished</source>
<translation>Ustaw przetłumaczone wpisy jako ukończone</translation>
</message>
<message>
- <location/>
<source>Retranslate entries with existing translation</source>
<translation>Przetłumacz wpisy z istniejącymi tłumaczeniami</translation>
</message>
<message>
- <location/>
<source>Translate also finished entries</source>
<translation>Przetłumacz również ukończone wpisy</translation>
</message>
<message>
- <location/>
<source>Phrase book preference</source>
<translation>Ustawienia książki wyrażeń</translation>
</message>
<message>
- <location/>
<source>Move up</source>
<translation>Przenieś do góry</translation>
</message>
<message>
- <location/>
<source>Move down</source>
<translation>Przenieś w dół</translation>
</message>
<message>
- <location/>
<source>&amp;Run</source>
<translation>&amp;Uruchom</translation>
</message>
<message>
- <location/>
<source>Cancel</source>
<translation>Anuluj</translation>
</message>
<message>
- <location/>
<source>Note that the modified entries will be reset to unfinished if &apos;Set translated entries to finished&apos; above is unchecked</source>
<translation>Zwróć uwagę że zmodyfikowane wpisy będą ustawione jako nieukończone jeśli znajdujące się powyżej &apos;Ustaw przetłumaczone wpisy jako ukończone&apos; nie jest zaznaczone</translation>
</message>
<message>
- <location/>
<source>The batch translator will search through the selected phrase books in the order given above</source>
<translation>Automatyczny tłumacz będzie przeszukiwał wybrane książki wyrażeń w porządku ustalonym powyżej</translation>
</message>
@@ -104,45 +86,40 @@
<context>
<name>DataModel</name>
<message>
- <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+214"/>
+ <source>The translation file &apos;%1&apos; will not be loaded because it is empty.</source>
+ <translation>Plik z tłumaczeniami &quot;%1&quot; nie zostanie załadowany ponieważ jest pusty.</translation>
+ </message>
+ <message>
<source>&lt;qt&gt;Duplicate messages found in &apos;%1&apos;:</source>
<translation>&lt;qt&gt;Znaleziono powtórzenia w &apos;%1&apos;:</translation>
</message>
<message>
- <location line="+4"/>
- <location line="+8"/>
<source>&lt;p&gt;[more duplicates omitted]</source>
<translation>&lt;p&gt;[pominięto resztę powtórzeń]</translation>
</message>
<message>
- <location line="-5"/>
<source>&lt;p&gt;* ID: %1</source>
<translation>&lt;p&gt;* identyfikator: %1</translation>
</message>
<message>
- <location line="+8"/>
<source>&lt;p&gt;* Context: %1&lt;br&gt;* Source: %2</source>
<translation>&lt;p&gt;* Kontekst: %1&lt;br&gt;* Źródło: %2</translation>
</message>
<message>
- <location line="+3"/>
<source>&lt;br&gt;* Comment: %3</source>
<translation>&lt;br&gt;* Komentarz: %3</translation>
</message>
<message>
- <location line="+71"/>
<source>Linguist does not know the plural rules for &apos;%1&apos;.
Will assume a single universal form.</source>
<translation>Linguist nie zna reguł liczby mnogiej dla &quot;%1&quot;.
Przyjmie on uniwersalną formę liczby pojedynczej.</translation>
</message>
<message>
- <location line="+56"/>
<source>Cannot create &apos;%2&apos;: %1</source>
<translation>Nie można utworzyć &apos;%2&apos;: %1</translation>
</message>
<message>
- <location line="+56"/>
<source>Universal Form</source>
<translation>Forma uniwersalna</translation>
</message>
@@ -150,37 +127,30 @@ Przyjmie on uniwersalną formę liczby pojedynczej.</translation>
<context>
<name>ErrorsView</name>
<message>
- <location filename="../tools/linguist/linguist/errorsview.cpp" line="+76"/>
<source>Accelerator possibly superfluous in translation.</source>
<translation>Prawdopodobnie nadmiarowy klawisz skrótu w tłumaczeniu.</translation>
</message>
<message>
- <location line="+3"/>
<source>Accelerator possibly missing in translation.</source>
<translation>Prawdopodobnie brakuje klawisza skrótu w tłumaczeniu.</translation>
</message>
<message>
- <location line="+3"/>
<source>Translation does not end with the same punctuation as the source text.</source>
<translation>Tłumaczenie nie kończy się tym samym znakiem interpunkcyjnym co tekst źródłowy.</translation>
</message>
<message>
- <location line="+3"/>
<source>A phrase book suggestion for &apos;%1&apos; was ignored.</source>
<translation>Podpowiedź &apos;%1&apos; z książki wyrażeń została zignorowana.</translation>
</message>
<message>
- <location line="+3"/>
<source>Translation does not refer to the same place markers as in the source text.</source>
<translation>Tłumaczenie nie zawiera tych samych znaczników co tekst źródłowy.</translation>
</message>
<message>
- <location line="+3"/>
<source>Translation does not contain the necessary %n place marker.</source>
<translation>Tłumaczenie nie zawiera koniecznego znacznika %n.</translation>
</message>
<message>
- <location line="+3"/>
<source>Unknown error</source>
<translation>Nieznany błąd</translation>
</message>
@@ -188,97 +158,78 @@ Przyjmie on uniwersalną formę liczby pojedynczej.</translation>
<context>
<name>FindDialog</name>
<message>
- <location filename="../tools/linguist/linguist/finddialog.ui"/>
<source>Cancel</source>
<translation>Anuluj</translation>
</message>
<message>
- <location/>
<source>Click here to close this window.</source>
<translation>Kliknij tutaj aby zamknąć to okno.</translation>
</message>
<message>
- <location/>
<source>Click here to find the next occurrence of the text you typed in.</source>
<translation>Kliknij tutaj aby znaleźć następne wystąpienie szukanego tekstu.</translation>
</message>
<message>
- <location/>
<source>Comments and contexts are searched when checked.</source>
<translation>Jeśli zaznaczone, przeszukuje także komentarze i konteksty.</translation>
</message>
<message>
- <location/>
<source>Find Next</source>
<translation>Znajdź następny</translation>
</message>
<message>
- <location/>
<source>Options</source>
<translation>Opcje</translation>
</message>
<message>
- <location/>
<source>Source texts are searched when checked.</source>
<translation>Jeśli zaznaczone przeszukuje także teksty źródłowe.</translation>
</message>
<message>
- <location/>
<source>Texts such as &apos;TeX&apos; and &apos;tex&apos; are considered as different when checked.</source>
<translation>Jeśli zaznaczone, teksty &apos;TeX&apos; oraz &apos;tex&apos; są interpretowane jako różne.</translation>
</message>
<message>
- <location/>
<source>This window allows you to search for some text in the translation source file.</source>
<translation>Pozwala na szukanie w językowym pliku źródłowym.</translation>
</message>
<message>
- <location/>
<source>Translations are searched when checked.</source>
<translation>Jeśli zaznaczone, przeszukuje także tłumaczenia.</translation>
</message>
<message>
- <location/>
<source>Type in the text to search for.</source>
<translation>Wprowadź tekst do wyszukania.</translation>
</message>
<message>
- <location/>
<source>Find</source>
<translation>Znajdź</translation>
</message>
<message>
- <location/>
<source>&amp;Find what:</source>
<translation>&amp;Znajdź:</translation>
</message>
<message>
- <location/>
<source>&amp;Source texts</source>
<translation>Teksty ź&amp;ródłowe</translation>
</message>
<message>
- <location/>
<source>&amp;Translations</source>
<translation>&amp;Tłumaczenia</translation>
</message>
<message>
- <location/>
<source>&amp;Match case</source>
<translation>Uwzględniaj &amp;wielkość liter</translation>
</message>
<message>
- <location/>
<source>&amp;Comments</source>
<translation>&amp;Komentarze</translation>
</message>
<message>
- <location/>
<source>Ignore &amp;accelerators</source>
<translation>Ignoruj kl&amp;awisze skrótów</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/finddialog.cpp" line="+14"/>
<source></source>
<comment>Choose Edit|Find from the menu bar or press Ctrl+F to pop up the Find dialog</comment>
<translation></translation>
@@ -287,38 +238,125 @@ Przyjmie on uniwersalną formę liczby pojedynczej.</translation>
<context>
<name>FormMultiWidget</name>
<message>
- <location filename="../tools/linguist/linguist/messageeditorwidgets.cpp" line="+302"/>
<source>Alt+Delete</source>
<extracomment>translate, but don&apos;t change</extracomment>
<translation>Alt+Delete</translation>
</message>
<message>
- <location line="+1"/>
<source>Shift+Alt+Insert</source>
<extracomment>translate, but don&apos;t change</extracomment>
<translation>Shift+Alt+Insert</translation>
</message>
<message>
- <location line="+1"/>
<source>Alt+Insert</source>
<extracomment>translate, but don&apos;t change</extracomment>
<translation>Alt+Insert</translation>
</message>
<message>
- <location line="+131"/>
<source>Confirmation - Qt Linguist</source>
<translation>Potwierdzenie - Qt Linguist</translation>
</message>
<message>
- <location line="+1"/>
<source>Delete non-empty length variant?</source>
<translation>Skasować niepusty wariant?</translation>
</message>
</context>
<context>
+ <name>LConvert</name>
+ <message>
+ <source>
+Usage:
+ lconvert [options] &lt;infile&gt; [&lt;infile&gt;...]
+
+lconvert is part of Qt&apos;s Linguist tool chain. It can be used as a
+stand-alone tool to convert and filter translation data files.
+The following file formats are supported:
+
+%1
+If multiple input files are specified, they are merged with
+translations from later files taking precedence.
+
+Options:
+ -h
+ --help Display this information and exit.
+
+ -i &lt;infile&gt;
+ --input-file &lt;infile&gt;
+ Specify input file. Use if &lt;infile&gt; might start with a dash.
+ This option can be used several times to merge inputs.
+ May be &apos;-&apos; (standard input) for use in a pipe.
+
+ -o &lt;outfile&gt;
+ --output-file &lt;outfile&gt;
+ Specify output file. Default is &apos;-&apos; (standard output).
+
+ -if &lt;informat&gt;
+ --input-format &lt;format&gt;
+ Specify input format for subsequent &lt;infile&gt;s.
+ The format is auto-detected from the file name and defaults to &apos;ts&apos;.
+
+ -of &lt;outformat&gt;
+ --output-format &lt;outformat&gt;
+ Specify output format. See -if.
+
+ --input-codec &lt;codec&gt;
+ Specify encoding for QM and PO input files. Default is &apos;Latin1&apos;
+ for QM and &apos;UTF-8&apos; for PO files. UTF-8 is always tried as well for
+ QM, corresponding to the possible use of the trUtf8() function.
+
+ --output-codec &lt;codec&gt;
+ Specify encoding for PO output files. Default is &apos;UTF-8&apos;.
+
+ --drop-tags &lt;regexp&gt;
+ Drop named extra tags when writing TS or XLIFF files.
+ May be specified repeatedly.
+
+ --drop-translations
+ Drop existing translations and reset the status to &apos;unfinished&apos;.
+ Note: this implies --no-obsolete.
+
+ --source-language &lt;language&gt;[_&lt;region&gt;]
+ Specify/override the language of the source strings. Defaults to
+ POSIX if not specified and the file does not name it yet.
+
+ --target-language &lt;language&gt;[_&lt;region&gt;]
+ Specify/override the language of the translation.
+ The target language is guessed from the file name if this option
+ is not specified and the file contents name no language yet.
+
+ --no-obsolete
+ Drop obsolete messages.
+
+ --no-finished
+ Drop finished messages.
+
+ --sort-contexts
+ Sort contexts in output TS file alphabetically.
+
+ --locations {absolute|relative|none}
+ Override how source code references are saved in TS files.
+ Default is absolute.
+
+ --no-ui-lines
+ Drop line numbers from references to UI files.
+
+ --verbose
+ be a bit more verbose
+
+Long options can be specified with only one leading dash, too.
+
+Return value:
+ 0 on success
+ 1 on command line parse failures
+ 2 on read failures
+ 3 on write failures
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>LRelease</name>
<message numerus="yes">
- <location filename="../tools/linguist/shared/qm.cpp" line="+763"/>
<source>Dropped %n message(s) which had no ID.</source>
<translation>
<numerusform>Opuszczono %n wyrażenie które nie miało identyfikatora.</numerusform>
@@ -327,7 +365,6 @@ Przyjmie on uniwersalną formę liczby pojedynczej.</translation>
</translation>
</message>
<message numerus="yes">
- <location line="+4"/>
<source>Excess context/disambiguation dropped from %n message(s).</source>
<translation>
<numerusform>Opuszczono nadmiarowy kontekst / ujednoznacznienie w %n wyrażeniu.</numerusform>
@@ -336,7 +373,6 @@ Przyjmie on uniwersalną formę liczby pojedynczej.</translation>
</translation>
</message>
<message numerus="yes">
- <location line="+8"/>
<source> Generated %n translation(s) (%1 finished and %2 unfinished)</source>
<translation>
<numerusform> Wygenerowano %n tłumaczenie (przetłumaczonych %1, nieprzetłumaczonych %2)</numerusform>
@@ -345,7 +381,6 @@ Przyjmie on uniwersalną formę liczby pojedynczej.</translation>
</translation>
</message>
<message numerus="yes">
- <location line="+4"/>
<source> Ignored %n untranslated source text(s)</source>
<translation>
<numerusform> Pominięto %n nieprzetłumaczony tekst źródłowy</numerusform>
@@ -377,431 +412,1010 @@ Przyjmie on uniwersalną formę liczby pojedynczej.</translation>
</numerusform>
</translation>
</message>
+ <message>
+ <source>Usage:
+ lrelease [options] project-file
+ lrelease [options] ts-files [-qm qm-file]
+
+lrelease is part of Qt&apos;s Linguist tool chain. It can be used as a
+stand-alone tool to convert XML-based translations files in the TS
+format into the &apos;compiled&apos; QM format used by QTranslator objects.
+
+Options:
+ -help Display this information and exit
+ -idbased
+ Use IDs instead of source strings for message keying
+ -compress
+ Compress the QM files
+ -nounfinished
+ Do not include unfinished translations
+ -removeidentical
+ If the translated text is the same as
+ the source text, do not include the message
+ -markuntranslated &lt;prefix&gt;
+ If a message has no real translation, use the source text
+ prefixed with the given string instead
+ -silent
+ Do not explain what is being done
+ -version
+ Display the version of lrelease and exit
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lrelease error: %1</source>
+ <translation>Błąd lrelease: %1</translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation>Uaktualnianie &quot;%1&quot;...
+</translation>
+ </message>
+ <message>
+ <source>Removing translations equal to source text in &apos;%1&apos;...
+</source>
+ <translation>Usuwanie tłumaczeń tożsamych z tekstem źródłowym w &quot;%1&quot;...
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot create &apos;%1&apos;: %2
+</source>
+ <translation>Błąd lrelease: nie można utworzyć &quot;%1&quot;: %2
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot save &apos;%1&apos;: %2</source>
+ <translation>Błąd lrelease: nie można zachować &quot;%1&quot;: %2</translation>
+ </message>
+ <message>
+ <source>lrelease version %1
+</source>
+ <translation>Wersja lrelease %1
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot read project file &apos;%1&apos;.
+</source>
+ <translation>Błąd lrelease: nie można odczytać pliku projektu &quot;%1&quot;.
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot process project file &apos;%1&apos;.
+</source>
+ <translation>Błąd lrelease: nie można przetworzyć pliku projektu &quot;%1&quot;.
+</translation>
+ </message>
+ <message>
+ <source>lrelease warning: Met no &apos;TRANSLATIONS&apos; entry in project file &apos;%1&apos;
+</source>
+ <translation>Ostrzeżenie lrelease: Brak &quot;TRANSLATIONS&quot; w pliku projektu &quot;%1&quot;
+</translation>
+ </message>
+</context>
+<context>
+ <name>LUpdate</name>
+ <message>
+ <source>Parenthesis/bracket/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation>Niezgodność nawiasów pomiędzy #if a #else w gałęzi #if
+</translation>
+ </message>
+ <message>
+ <source>Parenthesis/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation>Niezgodność nawiasów okrągłych/klamrowych pomiędzy #if a #else w gałęzi #if
+</translation>
+ </message>
+ <message>
+ <source>Unterminated C++ comment
+</source>
+ <translation>Niedokończony komentarz C++
+</translation>
+ </message>
+ <message>
+ <source>Unterminated C++ string
+</source>
+ <translation>Niedokończony ciąg C++
+</translation>
+ </message>
+ <message>
+ <source>Excess closing brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>Nadmiar zamykających nawiasów klamrowych w kodzie C++ (lub nadużycie preprocesora C++)
+</translation>
+ </message>
+ <message>
+ <source>Excess closing parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>Nadmiar zamykających nawiasów okrągłych w kodzie C++ (lub nadużycie preprocesora C++)
+</translation>
+ </message>
+ <message>
+ <source>Excess closing bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>Nadmiar zamykających nawiasów kwadratowych w kodzie C++ (lub nadużycie preprocesora C++)
+</translation>
+ </message>
+ <message>
+ <source>circular inclusion of %1
+</source>
+ <translation>cykliczne dołączenie %1
+</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2
+</source>
+ <translation>Nie można otworzyć %1: %2
+</translation>
+ </message>
+ <message>
+ <source>//% cannot be used with tr() / QT_TR_NOOP(). Ignoring
+</source>
+ <translation>//% nie można użyć z tr() / QT_TR_NOOP() i zostanie pominięte
+</translation>
+ </message>
+ <message>
+ <source>Qualifying with unknown namespace/class %1::%2
+</source>
+ <translation>Kwalifikowanie z nieznaną przestrzenią nazw/klasą %1::%2
+</translation>
+ </message>
+ <message>
+ <source>tr() cannot be called without context
+</source>
+ <translation>Nie można użyć tr() bez kontekstu
+</translation>
+ </message>
+ <message>
+ <source>Class &apos;%1&apos; lacks Q_OBJECT macro
+</source>
+ <translation>Brak makra &quot;Q_OBJECT&quot; w klasie &quot;%1&quot;
+</translation>
+ </message>
+ <message>
+ <source>It is not recommended to call tr() from within a constructor &apos;%1::%2&apos;
+</source>
+ <translation>Nie jest rekomendowane użycie tr() w konstruktorze &quot;%1::%2&quot;
+</translation>
+ </message>
+ <message>
+ <source>//% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring
+</source>
+ <translation>//% nie można użyć z translate() / QT_TRANSLATE_NOOP() i zostanie pominięte
+</translation>
+ </message>
+ <message>
+ <source>//= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring
+</source>
+ <translation>//= nie można użyć z qtTrId() / QT_TRID_NOOP() i zostanie pominięte
+</translation>
+ </message>
+ <message>
+ <source>Unexpected character in meta string
+</source>
+ <translation>Nieoczekiwany znak w ciągu meta
+</translation>
+ </message>
+ <message>
+ <source>Unterminated meta string
+</source>
+ <translation>Niedokończony ciąg meta
+</translation>
+ </message>
+ <message>
+ <source>Cannot invoke tr() like this
+</source>
+ <translation>W ten sposób nie można wywołać tr()
+</translation>
+ </message>
+ <message>
+ <source>Discarding unconsumed meta data
+</source>
+ <translation>Nieskonsumowane metadane zostają porzucone
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>Niezbalansowane otwierające nawiasy klamrowe w kodzie C++ (lub nadużycie preprocesora C++)
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>Niezbalansowane otwierające nawiasy okrągłe w kodzie C++ (lub nadużycie preprocesora C++)
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>Niezbalansowane otwierające nawiasy kwadratowe w kodzie C++ (lub nadużycie preprocesora C++)
+</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2</source>
+ <translation>Nie można otworzyc %1: %2</translation>
+ </message>
+ <message>
+ <source>Unterminated Java comment.
+</source>
+ <translation>Niedokończony komentarz Java.
+</translation>
+ </message>
+ <message>
+ <source>Invalid Unicode value.
+</source>
+ <translation>Niepoprawna wartość Unicode.
+</translation>
+ </message>
+ <message>
+ <source>Unterminated string.
+</source>
+ <translation>Niedokończony ciąg.
+</translation>
+ </message>
+ <message>
+ <source>String used in translation can contain only literals concatenated with other literals, not expressions or numbers.
+</source>
+ <translation>Ciągi użyte w tłumaczeniach mogą zawierać jedynie literały połączone z innymi literałami, nie mogą być to wyrażenia ani liczby.
+</translation>
+ </message>
+ <message>
+ <source>&apos;class&apos; must be followed by a class name.
+</source>
+ <translation>Po &quot;class&quot; musi następować nazwa klasy.
+</translation>
+ </message>
+ <message>
+ <source>Excess closing brace.
+</source>
+ <translation>Nadmiar zamykających nawiasów.
+</translation>
+ </message>
+ <message>
+ <source>&apos;package&apos; must be followed by package name.
+</source>
+ <translation>Po &quot;package&quot; musi nasępować nazwa pakietu.
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace.
+</source>
+ <translation>Niezbalansowana ilość otwierających nawiasów.
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis.
+</source>
+ <translation>Niezbalansowana ilość otwierających cudzysłowów.
+</translation>
+ </message>
+ <message>
+ <source>Usage:
+ lupdate [options] [project-file]...
+ lupdate [options] [source-file|path|@lst-file]... -ts ts-files|@lst-file
+
+lupdate is part of Qt&apos;s Linguist tool chain. It extracts translatable
+messages from Qt UI files, C++, Java and JavaScript/QtScript source code.
+Extracted messages are stored in textual translation source files (typically
+Qt TS XML). New and modified messages can be merged into existing TS files.
+
+Options:
+ -help Display this information and exit.
+ -no-obsolete
+ Drop all obsolete strings.
+ -extensions &lt;ext&gt;[,&lt;ext&gt;]...
+ Process files with the given extensions only.
+ The extension list must be separated with commas, not with whitespace.
+ Default: &apos;%1&apos;.
+ -pluralonly
+ Only include plural form messages.
+ -silent
+ Do not explain what is being done.
+ -no-sort
+ Do not sort contexts in TS files.
+ -no-recursive
+ Do not recursively scan the following directories.
+ -recursive
+ Recursively scan the following directories (default).
+ -I &lt;includepath&gt; or -I&lt;includepath&gt;
+ Additional location to look for include files.
+ May be specified multiple times.
+ -locations {absolute|relative|none}
+ Specify/override how source code references are saved in TS files.
+ Default is absolute.
+ -no-ui-lines
+ Do not record line numbers in references to UI files.
+ -disable-heuristic {sametext|similartext|number}
+ Disable the named merge heuristic. Can be specified multiple times.
+ -pro &lt;filename&gt;
+ Name of a .pro file. Useful for files with .pro file syntax but
+ different file suffix. Projects are recursed into and merged.
+ -source-language &lt;language&gt;[_&lt;region&gt;]
+ Specify the language of the source strings for new files.
+ Defaults to POSIX if not specified.
+ -target-language &lt;language&gt;[_&lt;region&gt;]
+ Specify the language of the translations for new files.
+ Guessed from the file name if not specified.
+ -ts &lt;ts-file&gt;...
+ Specify the output file(s). This will override the TRANSLATIONS
+ and nullify the CODECFORTR from possibly specified project files.
+ -codecfortr &lt;codec&gt;
+ Specify the codec assumed for tr() calls. Effective only with -ts.
+ -version
+ Display the version of lupdate and exit.
+ @lst-file
+ Read additional file names (one per line) from lst-file.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>lupdate warning: Codec for tr() &apos;%1&apos; disagrees with existing file&apos;s codec &apos;%2&apos;. Expect trouble.
+</source>
+ <translation>Ostrzeżenie lupdate: Kodek dla tr() &quot;%1&quot; nie zgadza się z istniejącym kodekiem pliku &quot;%2&quot;. Spodziewaj się problemów.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: Specified target language &apos;%1&apos; disagrees with existing file&apos;s language &apos;%2&apos;. Ignoring.
+</source>
+ <translation>Ostrzeżenie lupdate: Podany język docelowy &quot;%1&quot; nie zgadza się z istniejącym językiem pliku &quot;%2&quot; i zostanie pominięty.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: Specified source language &apos;%1&apos; disagrees with existing file&apos;s language &apos;%2&apos;. Ignoring.
+</source>
+ <translation>Ostrzeżenie lupdate: Podany język źródłowy &quot;%1&quot; nie zgadza się z istniejącym językiem pliku &quot;%2&quot; i zostanie pominięty.
+</translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation>Uaktualnianie &quot;%1&quot;...
+</translation>
+ </message>
+ <message>
+ <source>Stripping non plural forms in &apos;%1&apos;...
+</source>
+ <translation>Rozbieranie niemnogich form w &quot;%1&quot;...
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: Codec for source &apos;%1&apos; is invalid. Falling back to codec for tr().
+</source>
+ <translation>Ostrzeżenie lupdate: Kodek dla źródła &quot;%1&quot; nie jest poprawny. Przywracanie kodeka dla tr().
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line will override TRANSLATIONS in %1.
+</source>
+ <translation>Ostrzeżenie lupdate: Pliki TS z linii komend nadpiszą TRANSLATIONS w %1.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line prevent recursing into %1.
+</source>
+ <translation>Ostrzeżenie lupdate: Pliki TS z linii komend zapobiegają rekursji %1.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced for &apos;%1&apos;.
+</source>
+ <translation>Ostrzeżenie lupdate: Brak podanych plików TS. Zostaną utworzone tylko wyniki diagnostyki dla &quot;%1&quot;.
+</translation>
+ </message>
+ <message>
+ <source>The option -target-language requires a parameter.
+</source>
+ <translation>Opcja -target-language wymaga podania parametru.
+</translation>
+ </message>
+ <message>
+ <source>The option -source-language requires a parameter.
+</source>
+ <translation>Opcja -source-language wymaga podania parametru.
+</translation>
+ </message>
+ <message>
+ <source>The option -disable-heuristic requires a parameter.
+</source>
+ <translation>Opcja -disable-heuristic wymaga podania parametru.
+</translation>
+ </message>
+ <message>
+ <source>Invalid heuristic name passed to -disable-heuristic.
+</source>
+ <translation>Niepoprawna nazwa heurystyki przekazana do -disable-heuristic.
+</translation>
+ </message>
+ <message>
+ <source>The option -locations requires a parameter.
+</source>
+ <translation>Opcja -locations wymaga podania parametru.
+</translation>
+ </message>
+ <message>
+ <source>Invalid parameter passed to -locations.
+</source>
+ <translation>Niepoprawny parametr przekazany do -locations.
+</translation>
+ </message>
+ <message>
+ <source>The -codecfortr option should be followed by a codec name.
+</source>
+ <translation>Po opcji -codecfortr powinna następować nazwa kodeka.
+</translation>
+ </message>
+ <message>
+ <source>The -extensions option should be followed by an extension list.
+</source>
+ <translation>Po opcji -extenstions powinna następować lista rozszerzeń.
+</translation>
+ </message>
+ <message>
+ <source>The -pro option should be followed by a filename of .pro file.
+</source>
+ <translation>Po opcji -pro powinna następować nazwa pliku .pro.
+</translation>
+ </message>
+ <message>
+ <source>The -I option should be followed by a path.
+</source>
+ <translation>Po opcji -I powinna następować ścieżka.
+</translation>
+ </message>
+ <message>
+ <source>Unrecognized option &apos;%1&apos;.
+</source>
+ <translation>Nierozpoznana opcja &quot;%1&quot;.
+</translation>
+ </message>
+ <message>
+ <source>lupdate error: List file &apos;%1&apos; is not readable.
+</source>
+ <translation>Błąd lrelease: plik listy &quot;%1&quot; nie jest do odczytu.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: For some reason, &apos;%1&apos; is not writable.
+</source>
+ <translation>Ostrzeżenie lupdate: &quot;%1&quot; nie jest zapisywalny.
+</translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; has no recognized extension.
+</source>
+ <translation>Błąd lupdate: Plik &quot;%1&quot; nie posiada rozpoznawalnego rozszerzenia.
+</translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; does not exist.
+</source>
+ <translation>Błąs lupdate: Plik &quot;%1&quot; nie istnieje.
+</translation>
+ </message>
+ <message>
+ <source>Scanning directory &apos;%1&apos;...
+</source>
+ <translation>Skanowanie katalogu &quot;%1&quot;...
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: -target-language usually only makes sense with exactly one TS file.
+</source>
+ <translation>Ostrzeżenie lupdate: zwykle opcja -target-language ma sens z dokładnie jednym plikiem TS.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: -codecfortr has no effect without -ts.
+</source>
+ <translation>Ostrzeżenie lupdate: opcja -codecfortr nie działa bez -ts.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced.
+</source>
+ <translation>Ostrzeżenie lupdate: Brak podanych plików TS. Zostaną utworzone tylko wyniki diagnostyki.
+</translation>
+ </message>
+ <message>
+ <source>lupdate error: Both project and source files / include paths specified.
+</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message numerus="yes">
+ <source> Found %n source text(s) (%1 new and %2 already existing)
+</source>
+ <translation>
+ <numerusform> Znaleziono %n tekst źródłowy (%1 nowych oraz %2 istniejących)
+</numerusform>
+ <numerusform> Znaleziono %n teksty źródłowe (%1 nowych oraz %2 istniejących)
+</numerusform>
+ <numerusform> Znaleziono %n tekstów źródłowych (%1 nowych oraz %2 istniejących)
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Removed %n obsolete entries
+</source>
+ <translation>
+ <numerusform> Usunięto %n zdezaktualizowany wpis
+</numerusform>
+ <numerusform> Usunięto %n zdezaktualizowane wpisy
+</numerusform>
+ <numerusform> Usunięto %n zdezaktualizowanych wpisów
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Kept %n obsolete entries
+</source>
+ <translation>
+ <numerusform> Zachowano %n zdezaktualizowany wpis
+</numerusform>
+ <numerusform> Zachowano %n zdezaktualizowane wpisy
+</numerusform>
+ <numerusform> Zachowano %n zdezaktualizowanych wpisów
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Number heuristic provided %n translation(s)
+</source>
+ <translation>
+ <numerusform> Heurystyka liczbowa dostarczyła %n tłumaczenie
+</numerusform>
+ <numerusform> Heurystyka liczbowa dostarczyła %n tłumaczeń
+</numerusform>
+ <numerusform> Heurystyka liczbowa dostarczyła %n tłumaczeń
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Same-text heuristic provided %n translation(s)
+</source>
+ <translation>
+ <numerusform> Heurystyka &quot;ten sam tekst&quot; dostarczyła %n tłumaczenie
+</numerusform>
+ <numerusform> Heurystyka &quot;ten sam tekst&quot; dostarczyła %n tłumaczeń
+</numerusform>
+ <numerusform> Heurystyka &quot;ten sam tekst&quot; dostarczyła %n tłumaczeń
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Similar-text heuristic provided %n translation(s)
+</source>
+ <translation>
+ <numerusform> Heurystyka &quot;podobny tekst&quot; dostarczyła %n tłumaczenie
+</numerusform>
+ <numerusform> Heurystyka &quot;podobny tekst&quot; dostarczyła %n tłumaczeń
+</numerusform>
+ <numerusform> Heurystyka &quot;podobny tekst&quot; dostarczyła %n tłumaczeń
+</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Illegal character</source>
+ <translation>Niepoprawny znak</translation>
+ </message>
+ <message>
+ <source>Unclosed string at end of line</source>
+ <translation>Niedomknięty ciąg na końcu linii</translation>
+ </message>
+ <message>
+ <source>Illegal escape sequence</source>
+ <translation>Niepoprawna sekwencja escape</translation>
+ </message>
+ <message>
+ <source>Illegal unicode escape sequence</source>
+ <translation>Niepoprawna sekwencja escape unicode</translation>
+ </message>
+ <message>
+ <source>Unclosed comment at end of file</source>
+ <translation>Niedomknięty komentarz na końcu pliku</translation>
+ </message>
+ <message>
+ <source>Illegal syntax for exponential number</source>
+ <translation>Niepoprawna składnia liczby wykładniczej</translation>
+ </message>
+ <message>
+ <source>Identifier cannot start with numeric literal</source>
+ <translation>Identyfikator nie może rozpoczynać się literałem liczbowym</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression literal</source>
+ <translation>Niedokończone wyrażenie regularne</translation>
+ </message>
+ <message>
+ <source>//% cannot be used with %1(). Ignoring
+</source>
+ <translation>//% nie można użyć z %1() i zostanie pominięte
+</translation>
+ </message>
+ <message>
+ <source>%1() requires at least two arguments.
+</source>
+ <translation>%1() wymaga przynajmniej dwóch argumentów.
+</translation>
+ </message>
+ <message>
+ <source>%1(): both arguments must be literal strings.
+</source>
+ <translation>%1(): oba argumenty muszą być literałami znakowymi.
+</translation>
+ </message>
+ <message>
+ <source>%1() requires at least one argument.
+</source>
+ <translation>%1() wymaga przynajmniej jednego argumentu.
+</translation>
+ </message>
+ <message>
+ <source>%1(): text to translate must be a literal string.
+</source>
+ <translation>%1(): tekst do przetłumaczenia musi być literałem znakowym.
+</translation>
+ </message>
+ <message>
+ <source>//= cannot be used with %1(). Ignoring
+</source>
+ <translation>//= nie można użyć z %1() i zostanie pominięte
+</translation>
+ </message>
+ <message>
+ <source>%1(): identifier must be a literal string.
+</source>
+ <translation>%1(): identyfikator musi być literałem znakowym.
+</translation>
+ </message>
+ <message>
+ <source>Expected </source>
+ <extracomment>Beginning of the string that contains comma-separated list of expected tokens</extracomment>
+ <translation>Oczekiwano </translation>
+ </message>
+ <message>
+ <source>XML error: Parse error at line %1, column %2 (%3).</source>
+ <translation>Błąd XML: Błąd parsowania w linii %1, w kolumnie %2 (%3).</translation>
+ </message>
+ <message>
+ <source>Parse error in UI file</source>
+ <translation>Błąd parsowania w pliku UI</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.ui"/>
<source>About Qt</source>
<translation>Informacje o Qt</translation>
</message>
<message>
- <location/>
<source>About Qt Linguist</source>
<translation>Informacje o Qt Linguist</translation>
</message>
<message>
- <location/>
<source>&amp;Accelerators</source>
<translation>Klawisze &amp;skrótów</translation>
</message>
<message>
- <location/>
<source>Batch translate all entries using the information in the phrase books.</source>
<translation>Automatycznie tłumaczy wszystkie wpisy używając książek wyrażeń.</translation>
</message>
<message>
- <location/>
<source>&amp;Close Phrase Book</source>
<translation>&amp;Zamknij książkę wyrażeń</translation>
</message>
<message>
- <location/>
<source>Close this window and exit.</source>
<translation>Zamknij okno i zakończ program.</translation>
</message>
<message>
- <location/>
<source>Continue the search where it was left.</source>
<translation>Kontynuuj przeszukiwanie od miejsca gdzie je zatrzymano.</translation>
</message>
<message>
- <location/>
<source>Copies the source text into the translation field.</source>
<translation>Kopiuje tekst źródłowy do pola z tłumaczeniem.</translation>
</message>
<message>
- <location/>
<source>&amp;Copy</source>
<translation>S&amp;kopiuj</translation>
</message>
<message>
- <location/>
<source>Copy the selected translation text to the clipboard.</source>
<translation>Skopiuj zaznaczony tekst do schowka.</translation>
</message>
<message>
- <location/>
<source>Copy the selected translation text to the clipboard and deletes it.</source>
<translation>Skopiuj zaznaczony tekst do schowka i usuń go.</translation>
</message>
<message>
- <location/>
<source>Create a new phrase book.</source>
<translation>Utwórz nową książkę wyrażeń.</translation>
</message>
<message>
- <location/>
<source>Create a Qt message file suitable for released applications from the current message file.</source>
<translation>Utwórz binarny plik z tłumaczeniami na podstawie bieżącego tłumaczenia, gotowy do użycia w aplikacjach.</translation>
</message>
<message>
- <location/>
<source>Ctrl+A</source>
<translation>Ctrl+A</translation>
</message>
<message>
- <location/>
<source>Ctrl+B</source>
<translation>Ctrl+B</translation>
</message>
<message>
- <location/>
<source>Ctrl+C</source>
<translation>Ctrl+C</translation>
</message>
<message>
- <location/>
<source>Ctrl+F</source>
<translation>Ctrl+F</translation>
</message>
<message>
- <location/>
<source>Ctrl+H</source>
<translation>Ctrl+H</translation>
</message>
<message>
- <location/>
<source>Ctrl+K</source>
<translation>Ctrl+K</translation>
</message>
<message>
- <location/>
<source>Ctrl+N</source>
<translation>Ctrl+N</translation>
</message>
<message>
- <location/>
<source>Ctrl+O</source>
<translation>Ctrl+O</translation>
</message>
<message>
- <location/>
<source>Ctrl+P</source>
<translation>Ctrl+P</translation>
</message>
<message>
- <location/>
<source>Ctrl+Q</source>
<translation>Ctrl+Q</translation>
</message>
<message>
- <location/>
<source>Open Read-O&amp;nly...</source>
<translation>Otwórz tylko do od&amp;czytu...</translation>
</message>
<message>
- <location/>
<source>&amp;Save All</source>
<translation>Zapisz &amp;wszystko</translation>
</message>
<message>
- <location/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
- <location/>
<source>Ctrl+Shift+K</source>
<translation>Ctrl+Shift+K</translation>
</message>
<message>
- <location/>
<source>Ctrl+V</source>
<translation>Ctrl+V</translation>
</message>
<message>
- <location/>
<source>Ctrl+X</source>
<translation>Ctrl+X</translation>
</message>
<message>
- <location/>
<source>Ctrl+Y</source>
<translation>Ctrl+Y</translation>
</message>
<message>
- <location/>
<source>Ctrl+Z</source>
<translation>Ctrl+Z</translation>
</message>
<message>
- <location/>
<source>Cu&amp;t</source>
<translation>Wy&amp;tnij</translation>
</message>
<message>
- <location/>
<source>&amp;Display guesses</source>
<translation>Pokaż &amp;podpowiedzi</translation>
</message>
<message>
- <location/>
<source>&amp;Done and Next</source>
<translation>&amp;Zrobione i do następnego</translation>
</message>
<message>
- <location/>
<source>&amp;Edit</source>
<translation>&amp;Edycja</translation>
</message>
<message>
- <location/>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+764"/>
<source>Edit</source>
<translation>Edycja</translation>
</message>
<message>
- <location/>
<source>&amp;Edit Phrase Book</source>
<translation>&amp;Redaguj książkę wyrażeń</translation>
</message>
<message>
- <location/>
<source>&amp;Ending Punctuation</source>
<translation>Za&amp;kończenia interpunkcyjne</translation>
</message>
<message>
- <location/>
<source>Enter What&apos;s This? mode.</source>
<translation>Wejdź do trybu &quot;Co to jest?&quot;.</translation>
</message>
<message>
- <location/>
<source>E&amp;xit</source>
<translation>Za&amp;kończ</translation>
</message>
<message>
- <location/>
<source>F1</source>
<translation>F1</translation>
</message>
<message>
- <location/>
<source>F3</source>
<translation>F3</translation>
</message>
<message>
- <location/>
<source>F5</source>
<translation>F5</translation>
</message>
<message>
- <location/>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-7"/>
<source>File</source>
<translation>Plik</translation>
</message>
<message>
- <location/>
<source>&amp;File</source>
<translation>&amp;Plik</translation>
</message>
<message>
- <location/>
<source>Find &amp;Next</source>
<translation>Znajdź &amp;następny</translation>
</message>
<message>
- <location/>
<source>Form Preview Tool</source>
<translation>Podgląd formularzy</translation>
</message>
<message>
- <location/>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+26"/>
<source>Help</source>
<translation>Pomoc</translation>
</message>
<message>
- <location/>
<source>&amp;Help</source>
<translation>P&amp;omoc</translation>
</message>
<message>
- <location/>
<source>MainWindow</source>
<translation>Okno główne</translation>
</message>
<message>
- <location/>
<source>&amp;Manual</source>
<translation>Pod&amp;ręcznik</translation>
</message>
<message>
- <location/>
<source>Ne&amp;xt</source>
<translation>N&amp;astępne</translation>
</message>
<message>
- <location/>
<source>&amp;Next Unfinished</source>
<translation>&amp;Następne nieukończone</translation>
</message>
<message>
- <location/>
<source>Open a phrase book to assist translation.</source>
<translation>Otwórz książkę wyrażeń pomocną przy tłumaczeniu.</translation>
</message>
<message>
- <location/>
<source>Open a Qt translation source file (TS file) for editing</source>
<translation>Otwórz plik z tłumaczeniami Qt (plik TS) do redagowania</translation>
</message>
<message>
- <location/>
<source>Open/Refresh Form &amp;Preview</source>
<translation>Otwórz/odśwież &amp;podgląd formularzy</translation>
</message>
<message>
- <location/>
<source>&amp;Paste</source>
<translation>Wk&amp;lej</translation>
</message>
<message>
- <location/>
<source>Paste the clipboard text into the translation.</source>
<translation>Wklej tekst ze schowka do pola z tłumaczeniem.</translation>
</message>
<message>
- <location/>
<source>&amp;Phrase matches</source>
<translation>&amp;Cudzysłowy</translation>
</message>
<message>
- <location/>
<source>&amp;Phrases</source>
<translation>W&amp;yrażenia</translation>
</message>
<message>
- <location/>
<source>Place &amp;Marker Matches</source>
<translation>Z&amp;naczniki</translation>
</message>
<message>
- <location/>
<source>P&amp;rev</source>
<translation>P&amp;oprzednie</translation>
</message>
<message>
- <location/>
<source>&amp;Prev Unfinished</source>
<translation>&amp;Poprzednie nieukończone</translation>
</message>
<message>
- <location/>
<source>&amp;Print Phrase Book</source>
<translation>Wy&amp;drukuj książkę wyrażeń</translation>
</message>
<message>
- <location/>
<source>&amp;Redo</source>
<translation>&amp;Przywróć</translation>
</message>
<message>
- <location/>
<source>Redo an undone editing operation performed on the translation.</source>
<translation>Przywróć ostatnio cofniętą zmianę w tłumaczeniach.</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-99"/>
<source>&amp;Release</source>
<translation>W&amp;ydaj</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.ui"/>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-13"/>
- <location line="+10"/>
<source>Release As...</source>
<translation>Wydaj jako...</translation>
</message>
<message>
- <location/>
<source>Replace the translation on all entries that matches the search source text.</source>
<translation>Zamienia tłumaczenia we wszystkich pasujących do wzorca wpisach.</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2035"/>
<source></source>
<comment>This is the application&apos;s main window.</comment>
<translation></translation>
</message>
<message>
- <location line="+190"/>
<source>Source text</source>
<translation>Tekst źródłowy</translation>
</message>
<message>
- <location line="+1"/>
- <location line="+25"/>
<source>Index</source>
<translation>Indeks</translation>
</message>
<message>
- <location line="-2"/>
- <location line="+63"/>
<source>Context</source>
<translation>Kontekst</translation>
</message>
<message>
- <location line="-62"/>
<source>Items</source>
<translation>Elementy</translation>
</message>
<message>
- <location line="+79"/>
<source>This panel lists the source contexts.</source>
<translation>Ten panel pokazuje listę kontekstów.</translation>
</message>
<message>
- <location line="+13"/>
<source>Strings</source>
<translation>Tłumaczenia</translation>
</message>
<message>
- <location line="+37"/>
<source>Phrases and guesses</source>
<translation>Wyrażenia i podpowiedzi</translation>
</message>
<message>
- <location line="+10"/>
<source>Sources and Forms</source>
<translation>Źródła i formularze</translation>
</message>
<message>
- <location line="+15"/>
<source>Warnings</source>
<translation>Ostrzeżenia</translation>
</message>
<message>
- <location line="+59"/>
<source> MOD </source>
<comment>status bar: file(s) modified</comment>
<translation> MOD </translation>
</message>
<message>
- <location line="+139"/>
<source>Loading...</source>
<translation>Ładowanie...</translation>
</message>
<message>
- <location line="+32"/>
- <location line="+22"/>
<source>Loading File - Qt Linguist</source>
<translation>Wczytywanie pliku - Qt Linguist</translation>
</message>
<message>
- <location line="-21"/>
<source>The file &apos;%1&apos; does not seem to be related to the currently open file(s) &apos;%2&apos;.
Close the open file(s) first?</source>
@@ -810,7 +1424,6 @@ Close the open file(s) first?</source>
Czy chcesz najpierw zamknąć otwarty plik (pliki)?</translation>
</message>
<message>
- <location line="+22"/>
<source>The file &apos;%1&apos; does not seem to be related to the file &apos;%2&apos; which is being loaded as well.
Skip loading the first named file?</source>
@@ -819,7 +1432,6 @@ Skip loading the first named file?</source>
Czy chcesz pominąć pierwszy plik?</translation>
</message>
<message numerus="yes">
- <location line="+61"/>
<source>%n translation unit(s) loaded.</source>
<translation>
<numerusform>Załadowano %n część z tłumaczeniami.</numerusform>
@@ -828,129 +1440,88 @@ Czy chcesz pominąć pierwszy plik?</translation>
</translation>
</message>
<message>
- <location line="+94"/>
<source>Related files (%1);;</source>
<translation>Związane pliki (%1);;</translation>
</message>
<message>
- <location line="+4"/>
<source>Open Translation Files</source>
<translation>Otwórz pliki z tłumaczeniami</translation>
</message>
<message>
- <location line="+10"/>
- <location line="+31"/>
<source>File saved.</source>
<translation>Plik zachowany.</translation>
</message>
<message>
- <location line="+526"/>
<source>&lt;center&gt;&lt;img src=&quot;:/images/splash.png&quot;/&gt;&lt;/img&gt;&lt;p&gt;%1&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Qt Linguist is a tool for adding translations to Qt applications.&lt;/p&gt;&lt;p&gt;Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.ui"/>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-511"/>
- <location line="+1187"/>
<source>Release</source>
<translation>Wydaj</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1186"/>
<source>Qt message files for released applications (*.qm)
All files (*)</source>
<translation>Pliki z wydanymi tłumaczeniami (*.qm)
Wszystkie pliki (*)</translation>
</message>
<message>
- <location line="+3"/>
- <location line="+12"/>
<source>File created.</source>
<translation>Plik utworzony.</translation>
</message>
<message>
- <location line="+34"/>
- <location line="+355"/>
<source>Printing...</source>
<translation>Drukowanie...</translation>
</message>
<message>
- <location line="-347"/>
<source>Context: %1</source>
<translation>Kontekst: %1</translation>
</message>
<message>
- <location line="+32"/>
<source>finished</source>
<translation>zakończony</translation>
</message>
<message>
- <location line="+3"/>
<source>unresolved</source>
<translation>nierozwiązany</translation>
</message>
<message>
- <location line="+3"/>
<source>obsolete</source>
<translation>przestarzały</translation>
</message>
<message>
- <location line="+15"/>
- <location line="+307"/>
<source>Printing... (page %1)</source>
<translation>Drukowanie...(strona %1)</translation>
</message>
<message>
- <location line="-300"/>
- <location line="+307"/>
<source>Printing completed</source>
<translation>Drukowanie zakończone</translation>
</message>
<message>
- <location line="-305"/>
- <location line="+307"/>
<source>Printing aborted</source>
<translation>Drukowanie przerwane</translation>
</message>
<message>
- <location line="-232"/>
<source>Search wrapped.</source>
<translation>Szukanie od początku.</translation>
</message>
<message>
- <location line="+17"/>
- <location line="+278"/>
- <location line="+34"/>
- <location line="+24"/>
- <location line="+22"/>
- <location line="+538"/>
- <location line="+1"/>
- <location line="+274"/>
- <location line="+40"/>
- <location line="+10"/>
<source>Qt Linguist</source>
<translation>Qt Linguist</translation>
</message>
<message>
- <location line="-1220"/>
- <location line="+102"/>
<source>Cannot find the string &apos;%1&apos;.</source>
<translation>Nie można znaleźć tekstu &apos;%1&apos;.</translation>
</message>
<message>
- <location line="-82"/>
<source>Search And Translate in &apos;%1&apos; - Qt Linguist</source>
<translation>Wyszukiwanie i tłumaczenie w &apos;%1&apos; - Qt Linguist</translation>
</message>
<message>
- <location line="+34"/>
- <location line="+23"/>
- <location line="+24"/>
<source>Translate - Qt Linguist</source>
<translation>Tłumaczenie - Qt Linguist</translation>
</message>
<message numerus="yes">
- <location line="-46"/>
<source>Translated %n entry(s)</source>
<translation>
<numerusform>Przetłumaczono %n wpis</numerusform>
@@ -959,39 +1530,32 @@ Wszystkie pliki (*)</translation>
</translation>
</message>
<message>
- <location line="+23"/>
<source>No more occurrences of &apos;%1&apos;. Start over?</source>
<translation>Brak więcej &quot;%1&quot;. Rozpocząć od nowa?</translation>
</message>
<message>
- <location line="+30"/>
<source>Create New Phrase Book</source>
<translation>Utwórz nową książkę wyrażeń</translation>
</message>
<message>
- <location line="+1"/>
<source>Qt phrase books (*.qph)
All files (*)</source>
<translation>Książki wyrażeń Qt (*.qph)
Wszystkie pliki (*)</translation>
</message>
<message>
- <location line="+11"/>
<source>Phrase book created.</source>
<translation>Utworzono podręcznik wyrażeń.</translation>
</message>
<message>
- <location line="+17"/>
<source>Open Phrase Book</source>
<translation>Otwórz książkę wyrażeń</translation>
</message>
<message>
- <location line="+1"/>
<source>Qt phrase books (*.qph);;All files (*)</source>
<translation>Książki wyrażeń Qt (*.qph);;Wszystkie pliki (*)</translation>
</message>
<message numerus="yes">
- <location line="+7"/>
<source>%n phrase(s) loaded.</source>
<translation>
<numerusform>Wczytano %n wyrażenie.</numerusform>
@@ -1000,524 +1564,410 @@ Wszystkie pliki (*)</translation>
</translation>
</message>
<message>
- <location line="+93"/>
- <location line="+3"/>
- <location line="+7"/>
<source>Add to phrase book</source>
<translation>Dodaj do książki wyrażeń</translation>
</message>
<message>
- <location line="-9"/>
<source>No appropriate phrasebook found.</source>
<translation>Brak odpowiedniej książki wyrażeń.</translation>
</message>
<message>
- <location line="+3"/>
<source>Adding entry to phrasebook %1</source>
<translation>Dodawanie wpisu do książki wyrażeń %1</translation>
</message>
<message>
- <location line="+7"/>
<source>Select phrase book to add to</source>
<translation>Wybierz książkę do której chcesz dodać</translation>
</message>
<message>
- <location line="+29"/>
<source>Unable to launch Qt Assistant (%1)</source>
<translation>Nie można uruchomić Qt Assistant (%1)</translation>
</message>
<message>
- <location line="+17"/>
<source>Version %1</source>
<translation>Wersja %1</translation>
</message>
<message>
- <location line="+41"/>
<source>Do you want to save the modified files?</source>
<translation>Czy chcesz zachować zmodyfikowane pliki?</translation>
</message>
<message>
- <location line="+22"/>
<source>Do you want to save &apos;%1&apos;?</source>
<translation>Czy chcesz zachować &apos;%1&apos;?</translation>
</message>
<message>
- <location line="+43"/>
<source>Qt Linguist[*]</source>
<translation>Qt Linguist[*]</translation>
</message>
<message>
- <location line="+2"/>
<source>%1[*] - Qt Linguist</source>
<translation>%1[*] - Qt Linguist</translation>
</message>
<message>
- <location line="+267"/>
- <location line="+12"/>
<source>No untranslated translation units left.</source>
<translation>Wszystkie wyrażenia są przetłumaczone.</translation>
</message>
<message>
- <location line="+198"/>
<source>&amp;Window</source>
<translation>&amp;Okno</translation>
</message>
<message>
- <location line="+2"/>
<source>Minimize</source>
<translation>Zminimalizuj</translation>
</message>
<message>
- <location line="+1"/>
<source>Ctrl+M</source>
<translation>Ctrl+M</translation>
</message>
<message>
- <location line="+12"/>
<source>Display the manual for %1.</source>
<translation>Pokaż podręcznik dla %1.</translation>
</message>
<message>
- <location line="+1"/>
<source>Display information about %1.</source>
<translation>Pokaż informacje o %1.</translation>
</message>
<message>
- <location line="+70"/>
<source>&amp;Save &apos;%1&apos;</source>
<translation>&amp;Zachowaj &apos;%1&apos;</translation>
</message>
<message>
- <location line="+1"/>
<source>Save &apos;%1&apos; &amp;As...</source>
<translation>Zachowaj &apos;%1&apos; &amp;jako...</translation>
</message>
<message>
- <location line="+1"/>
<source>Release &apos;%1&apos;</source>
<translation>Wydaj &apos;%1&apos;</translation>
</message>
<message>
- <location line="+1"/>
<source>Release &apos;%1&apos; As...</source>
<translation>Wydaj &apos;%1&apos; jako...</translation>
</message>
<message>
- <location line="+1"/>
<source>&amp;Close &apos;%1&apos;</source>
<translation>Za&amp;mknij &apos;%1&apos;</translation>
</message>
<message>
- <location line="+2"/>
- <location line="+15"/>
<source>&amp;Save</source>
<translation>&amp;Zachowaj</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.ui"/>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-14"/>
- <location line="+11"/>
<source>Save &amp;As...</source>
<translation>Zachowaj j&amp;ako...</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-8"/>
- <location line="+13"/>
<source>&amp;Close</source>
<translation>Za&amp;mknij</translation>
</message>
<message>
- <location line="-10"/>
<source>Save All</source>
<translation>Zachowaj wszystko</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.ui"/>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/>
<source>&amp;Release All</source>
<translation>Wydaj &amp;wszystko</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/>
<source>Close All</source>
<translation>Zamknij wszystko</translation>
</message>
<message>
- <location line="+23"/>
<source>Translation File &amp;Settings for &apos;%1&apos;...</source>
<translation>&amp;Ustawienia pliku z tłumaczeniami dla &apos;%1&apos;...</translation>
</message>
<message>
- <location line="+1"/>
<source>&amp;Batch Translation of &apos;%1&apos;...</source>
<translation>&amp;Automatyczne tłumaczenie &apos;%1&apos;...</translation>
</message>
<message>
- <location line="+1"/>
<source>Search And &amp;Translate in &apos;%1&apos;...</source>
<translation>Wyszukiwanie i &amp;tłumaczenie w &apos;%1&apos;...</translation>
</message>
<message>
- <location line="+4"/>
<source>Search And &amp;Translate...</source>
<translation>Wyszukiwanie i &amp;tłumaczenie...</translation>
</message>
<message>
- <location line="+161"/>
<source>Cannot read from phrase book &apos;%1&apos;.</source>
<translation>Nie można odczytać z książki wyrażeń &apos;%1&apos;.</translation>
</message>
<message>
- <location line="+15"/>
<source>Close this phrase book.</source>
<translation>Zamknij tą książkę wyrażeń.</translation>
</message>
<message>
- <location line="+4"/>
<source>Enables you to add, modify, or delete entries in this phrase book.</source>
<translation>Pozwala na dodawanie, modyfikowanie i usuwanie wpisów w tej książce.</translation>
</message>
<message>
- <location line="+5"/>
<source>Print the entries in this phrase book.</source>
<translation>Wydrukuj wpisy z książki wyrażeń.</translation>
</message>
<message>
- <location line="+16"/>
<source>Cannot create phrase book &apos;%1&apos;.</source>
<translation>Nie można utworzyć książki wyrażeń &apos;%1&apos;.</translation>
</message>
<message>
- <location line="+10"/>
<source>Do you want to save phrase book &apos;%1&apos;?</source>
<translation>Czy chcesz zachować książke wyrażeń &apos;%1&apos;?</translation>
</message>
<message>
- <location line="+349"/>
<source>All</source>
<translation>Wszystko</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.ui"/>
<source>Save As...</source>
<translation>Zachowaj jako...</translation>
</message>
<message>
- <location/>
<source>Save changes made to this Qt translation source file</source>
<translation>Zachowaj wprowadzone zmiany w tym pliku z tłumaczeniami</translation>
</message>
<message>
- <location/>
<source>Save changes made to this Qt translation source file into a new file.</source>
<translation>Zachowaj wprowadzone zmiany w tym pliku z tłumaczeniami jako nowy plik.</translation>
</message>
<message>
- <location/>
<source>Search for some text in the translation source file.</source>
<translation>Szukaj tekstu w pliku z tłumaczeniem.</translation>
</message>
<message>
- <location/>
<source>Select &amp;All</source>
<translation>Zaznacz &amp;wszystko</translation>
</message>
<message>
- <location/>
<source>Select the whole translation text.</source>
<translation>Zaznacz cały tekst tłumaczenia.</translation>
</message>
<message>
- <location/>
<source>Set whether or not to display translation guesses.</source>
<translation>Ustaw czy pokazywać podpowiedzi tłumaczeń.</translation>
</message>
<message>
- <location/>
<source>Shift+F1</source>
<translation>Shift+F1</translation>
</message>
<message>
- <location/>
<source>Sort the items back in the same order as in the message file.</source>
<translation>Z powrotem sortuj elementy w takiej samej kolejności jak w pliku źródłowym.</translation>
</message>
<message>
- <location/>
<source>&amp;Statistics</source>
<translation>&amp;Statystyki</translation>
</message>
<message>
- <location/>
<source>&amp;Toolbars</source>
<translation>Paski &amp;narzędzi</translation>
</message>
<message>
- <location/>
<source>&amp;Translation</source>
<translation>&amp;Tłumaczenie</translation>
</message>
<message>
- <location/>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-496"/>
<source>Translation</source>
<translation>Tłumaczenie</translation>
</message>
<message>
- <location/>
<source>&amp;Undo</source>
<translation>&amp;Cofnij</translation>
</message>
<message>
- <location/>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/>
<source>Validation</source>
<translation>Walidacja</translation>
</message>
<message>
- <location/>
<source>V&amp;alidation</source>
<translation>W&amp;alidacja</translation>
</message>
<message>
- <location/>
<source>&amp;View</source>
<translation>&amp;Widok</translation>
</message>
<message>
- <location/>
<source>Vie&amp;ws</source>
<translation>&amp;Widoki</translation>
</message>
<message>
- <location/>
<source>&amp;What&apos;s This?</source>
<translation>&amp;Co to jest?</translation>
</message>
<message>
- <location/>
<source>What&apos;s This?</source>
<translation>Co to jest?</translation>
</message>
<message>
- <location/>
<source>&amp;Open...</source>
<translation>&amp;Otwórz...</translation>
</message>
<message>
- <location/>
<source>&amp;Print...</source>
<translation>Wy&amp;drukuj...</translation>
</message>
<message>
- <location/>
<source>&amp;Find...</source>
<translation>&amp;Znajdź...</translation>
</message>
<message>
- <location/>
<source>Toggle the validity check of ending punctuation. If the check fails, a message is shown in the warnings window.</source>
<translation>Przełącz sprawdzanie zgodności końcowych znaków interpunkcyjnych. W przypadku niezgodności pojawia się komunikat w oknie z ostrzeżeniami.</translation>
</message>
<message>
- <location/>
<source>&amp;New Phrase Book...</source>
<translation>&amp;Nowa książka wyrażeń...</translation>
</message>
<message>
- <location/>
<source>&amp;Open Phrase Book...</source>
<translation>&amp;Otwórz książkę wyrażeń...</translation>
</message>
<message>
- <location/>
<source>&amp;Reset Sorting</source>
<translation>Wyłącz so&amp;rtowanie</translation>
</message>
<message>
- <location/>
<source>Display translation statistics.</source>
<translation>Pokaż statystyki tłumaczeń.</translation>
</message>
<message>
- <location/>
<source>&amp;Search And Translate...</source>
<translation>Wy&amp;szukiwanie i tłumaczenie...</translation>
</message>
<message>
- <location/>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-71"/>
<source>&amp;Batch Translation...</source>
<translation>Automatyczne &amp;tłumaczenie...</translation>
</message>
<message>
- <location/>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1"/>
<source>Translation File &amp;Settings...</source>
<translation>&amp;Ustawienia pliku z tłumaczeniami...</translation>
</message>
<message>
- <location/>
<source>&amp;Add to Phrase Book</source>
<translation>Dod&amp;aj do książki wyrażeń</translation>
</message>
<message>
- <location/>
<source>Ctrl+T</source>
<translation>Ctrl+T</translation>
</message>
<message>
- <location/>
<source>Recently Opened &amp;Files</source>
<translation>Os&amp;tatnio otwierane pliki</translation>
</message>
<message>
- <location/>
<source>Save</source>
<translation>Zachowaj</translation>
</message>
<message>
- <location/>
<source>Print a list of all the translation units in the current translation source file.</source>
<translation>Wydrukuj pełną listę wyrażeń z bieżącego pliku z tłumaczeniami.</translation>
</message>
<message>
- <location/>
<source>Undo the last editing operation performed on the current translation.</source>
<translation>Cofnij ostatnio wykonaną zmianę w bieżącym tłumaczeniu.</translation>
</message>
<message>
- <location/>
<source>Move to the previous unfinished item.</source>
<translation>Przechodzi do poprzedniego nieukończonego elementu.</translation>
</message>
<message>
- <location/>
<source>Move to the next unfinished item.</source>
<translation>Przechodzi do następnego nieukończonego elementu.</translation>
</message>
<message>
- <location/>
<source>Move to the previous item.</source>
<translation>Przejdź do poprzedniego elementu.</translation>
</message>
<message>
- <location/>
<source>Move to the next item.</source>
<translation>Przejdź do następnego elementu.</translation>
</message>
<message>
- <location/>
<source>Mark this item as done and move to the next unfinished item.</source>
<translation>Oznacz ten element jako ukończony i przejdź do następnego nieukończonego elementu.</translation>
</message>
<message>
- <location/>
<source>Copy from source text</source>
<translation>Skopiuj ze źródła tekstu</translation>
</message>
<message>
- <location/>
<source>Toggle the validity check of accelerators, i.e. whether the number of ampersands in the source and translation text is the same. If the check fails, a message is shown in the warnings window.</source>
<translation>Przełącz sprawdzanie zgodności klawiszy skrótów, tzn. czy liczba znaków: &amp; w tekście źródłowym i w tłumaczeniu jest taka sama. W przypadku niezgodności pojawia się komunikat w oknie z ostrzeżeniami.</translation>
</message>
<message>
- <location/>
<source>Close</source>
<translation>Zamknij</translation>
</message>
<message>
- <location/>
<source>&amp;Close All</source>
<translation>Zam&amp;knij wszystko</translation>
</message>
<message>
- <location/>
<source>Ctrl+W</source>
<translation>Ctrl+W</translation>
</message>
<message>
- <location/>
<source>Toggle checking that phrase suggestions are used. If the check fails, a message is shown in the warnings window.</source>
<translation>Przełącz sprawdzanie czy użyto zasugerowanego wyrażenia. W przypadku niezgodności pojawia się komunikat w oknie z ostrzeżeniami.</translation>
</message>
<message>
- <location/>
<source>Toggle the validity check of place markers, i.e. whether %1, %2, ... are used consistently in the source text and translation text. If the check fails, a message is shown in the warnings window.</source>
<translation>Przełącz sprawdzanie zgodności znaczników, tzn. czy: %1, %2, ... są spójnie użyte w tekście źródłowym i tłumaczeniu. W przypadku niezgodności pojawia się komunikat w oknie z ostrzeżeniami.</translation>
</message>
<message>
- <location/>
<source>Ctrl+J</source>
<translation>Ctrl+J</translation>
</message>
<message>
- <location/>
<source>Ctrl+Shift+J</source>
<translation>Ctrl+Shift+J</translation>
</message>
<message>
- <location/>
<source>Previous unfinished item</source>
<translation>Poprzedni nieukończony element</translation>
</message>
<message>
- <location/>
<source>Next unfinished item</source>
<translation>Następny nieukończony element</translation>
</message>
<message>
- <location/>
<source>Move to previous item</source>
<translation>Przejdź do poprzedniego elementu</translation>
</message>
<message>
- <location/>
<source>Next item</source>
<translation>Następny element</translation>
</message>
<message>
- <location/>
<source>Mark item as done and move to the next unfinished item</source>
<translation>Oznacz element jako ukończony i przejdź do następnego nieukończonego elementu</translation>
</message>
<message>
- <location/>
<source>Copies the source text into the translation field</source>
<translation>Kopiuje tekst źródłowy do pola z tłumaczeniem</translation>
</message>
<message>
- <location/>
<source>Toggle the validity check of accelerators</source>
<translation>Przełącz sprawdzanie zgodności klawiszy skrótów</translation>
</message>
<message>
- <location/>
<source>Toggle the validity check of ending punctuation</source>
<translation>Przełącz sprawdzanie zgodności końcowych znaków interpunkcyjnych</translation>
</message>
<message>
- <location/>
<source>Toggle checking that phrase suggestions are used</source>
<translation>Przełącz sprawdzanie czy użyto zasugerowanego wyrażenia</translation>
</message>
<message>
- <location/>
<source>Toggle the validity check of place markers</source>
<translation>Przełącz sprawdzanie zgodności znaczników</translation>
</message>
<message>
- <location/>
<source>Create a Qt message file suitable for released applications from the current message file. The filename will automatically be determined from the name of the TS file.</source>
<translation>Utwórz binarny plik &quot;.qm&quot; z tłumaczeniami na podstawie bieżącego tłumaczenia, gotowy do użycia w aplikacjach. Nazwa pliku będzie automatycznie określona na podstawie nazwy pliku &quot;.ts&quot; z bieżącym tłumaczeniem.</translation>
</message>
<message>
- <location/>
<source>Length Variants</source>
<translation>Warianty tłumaczeń</translation>
</message>
<message>
- <location/>
<source>Display information about the Qt toolkit by Nokia.</source>
<translation>Pokaż informacje o pakiecie narzędziowym Qt oferowanym przez Nokię.</translation>
</message>
@@ -1525,103 +1975,83 @@ Wszystkie pliki (*)</translation>
<context>
<name>MessageEditor</name>
<message>
- <location filename="../tools/linguist/linguist/messageeditor.cpp" line="+42"/>
<source></source>
<comment>This is the right panel of the main window.</comment>
<translation></translation>
</message>
<message>
- <location line="+30"/>
<source>Russian</source>
<translation>rosyjski</translation>
</message>
<message>
- <location line="+1"/>
<source>German</source>
<translation>niemiecki</translation>
</message>
<message>
- <location line="+1"/>
<source>Japanese</source>
<translation>japoński</translation>
</message>
<message>
- <location line="+1"/>
<source>French</source>
<translation>francuski</translation>
</message>
<message>
- <location line="+1"/>
<source>Polish</source>
<translation>polski</translation>
</message>
<message>
- <location line="+1"/>
<source>Chinese</source>
<translation>chiński</translation>
</message>
<message>
- <location line="+47"/>
<source>This whole panel allows you to view and edit the translation of some source text.</source>
<translation>Ten panel pozwala na podgląd i redagowanie tłumaczenia tekstu źródłowego.</translation>
</message>
<message>
- <location line="+10"/>
<source>Source text</source>
<translation>Tekst źródłowy</translation>
</message>
<message>
- <location line="+2"/>
<source>This area shows the source text.</source>
<translation>W tym obszarze wyświetlany jest tekst źródłowy.</translation>
</message>
<message>
- <location line="+4"/>
<source>Source text (Plural)</source>
<translation>Tekst źródłowy (liczba mnoga)</translation>
</message>
<message>
- <location line="+2"/>
<source>This area shows the plural form of the source text.</source>
<translation>W tym obszarze wyświetlana jest forma mnoga źródłowego tekstu.</translation>
</message>
<message>
- <location line="+4"/>
<source>Developer comments</source>
<translation>Komentarze programisty</translation>
</message>
<message>
- <location line="+3"/>
<source>This area shows a comment that may guide you, and the context in which the text occurs.</source>
<translation>W tym obszarze wyświetlany jest komentarz oraz kontekst, w którym dany tekst wystąpił.</translation>
</message>
<message>
- <location line="+59"/>
<source>Here you can enter comments for your own use. They have no effect on the translated applications.</source>
<translation>Tutaj można wprowadzić komentarze na własny użytek. One nie mają wpływu na przetłumaczoną aplikację.</translation>
</message>
<message>
- <location line="+234"/>
<source>%1 translation (%2)</source>
<translation>Tłumaczenie na język %1 (%2)</translation>
</message>
<message>
- <location line="+9"/>
<source>This is where you can enter or modify the translation of the above source text.</source>
<translation>Tutaj można wprowadzić lub zmodyfikować tłumaczenie tekstu źródłowego.</translation>
</message>
<message>
- <location line="+5"/>
<source>%1 translation</source>
<translation>Tłumaczenie na język %1</translation>
</message>
<message>
- <location line="+1"/>
<source>%1 translator comments</source>
<translation>Komentarze tłumacza (język %1).</translation>
</message>
<message>
- <location line="+157"/>
<source>&apos;%1&apos;
Line: %2</source>
<translation>&apos;%1&apos;
@@ -1631,22 +2061,18 @@ Linia: %2</translation>
<context>
<name>MessageModel</name>
<message>
- <location filename="../tools/linguist/linguist/messagemodel.cpp" line="+839"/>
<source>Completion status for %1</source>
<translation>Stan ukończenia dla %1</translation>
</message>
<message>
- <location line="+15"/>
<source>&lt;file header&gt;</source>
<translation>&lt;nagłówek pliku&gt;</translation>
</message>
<message>
- <location line="+2"/>
<source>&lt;context comment&gt;</source>
<translation>&lt;komentarz kontekstu&gt;</translation>
</message>
<message>
- <location line="+71"/>
<source>&lt;unnamed context&gt;</source>
<translation>nienazwany kontekst</translation>
</message>
@@ -1654,121 +2080,105 @@ Linia: %2</translation>
<context>
<name>MsgEdit</name>
<message>
- <location filename="../tools/linguist/linguist/messageeditor.cpp" line="-600"/>
<source></source>
<comment>This is the right panel of the main window.</comment>
<translation></translation>
</message>
</context>
<context>
+ <name>PhraseBook</name>
+ <message>
+ <source>Parse error at line %1, column %2 (%3).</source>
+ <translation>Błąd parsowania w linii %1, w kolumnie %2 (%3).</translation>
+ </message>
+</context>
+<context>
<name>PhraseBookBox</name>
<message>
- <location filename="../tools/linguist/linguist/phrasebookbox.cpp" line="+66"/>
<source>(New Entry)</source>
<translation>(Nowe wyrażenie)</translation>
</message>
<message>
- <location line="+3"/>
<source>%1[*] - Qt Linguist</source>
<translation>%1[*] - Qt Linguist</translation>
</message>
<message>
- <location line="+91"/>
<source>Cannot save phrase book &apos;%1&apos;.</source>
<translation>Nie można zachować książki wyrażeń &apos;%1&apos;.</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/phrasebookbox.ui"/>
<source>Click here to add the phrase to the phrase book.</source>
<translation>Kliknij aby dodać wyrażenie do książki.</translation>
</message>
<message>
- <location/>
<source>&amp;New Entry</source>
<translation>&amp;Nowy wpis</translation>
</message>
<message>
- <location/>
<source>Click here to remove the entry from the phrase book.</source>
<translation>Kliknij tutaj aby usunąć wpis z książki.</translation>
</message>
<message>
- <location/>
<source>&amp;Remove Entry</source>
<translation>&amp;Usuń wpis</translation>
</message>
<message>
- <location/>
<source>Settin&amp;gs...</source>
<translation>&amp;Ustawienia</translation>
</message>
<message>
- <location/>
<source>Click here to close this window.</source>
<translation>Kliknij tutaj aby zamknąć to okno.</translation>
</message>
<message>
- <location/>
<source>Click here to save the changes made.</source>
<translation>Kliknij tutaj aby zachować wprowadzone zmiany.</translation>
</message>
<message>
- <location/>
<source>Close</source>
<translation>Zamknij</translation>
</message>
<message>
- <location/>
<source>&amp;Definition:</source>
<translation>&amp;Definicja:</translation>
</message>
<message>
- <location/>
<source>Edit Phrase Book</source>
<translation>Edytuj książkę wyrażeń</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/phrasebookbox.cpp" line="-1"/>
<source>Qt Linguist</source>
<translation>Qt Linguist</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/phrasebookbox.ui"/>
<source>&amp;Save</source>
<translation>&amp;Zachowaj</translation>
</message>
<message>
- <location/>
<source>S&amp;ource phrase:</source>
<translation>Wyrażenie źródł&amp;owe:</translation>
</message>
<message>
- <location/>
<source>This window allows you to add, modify, or delete entries in a phrase book.</source>
<translation>To okno pozwala na dodawanie, modyfikowanie i usuwanie wpisów w książce.</translation>
</message>
<message>
- <location/>
<source>This is a definition for the source phrase.</source>
<translation>To jest definicja wyrażenia źródłowego.</translation>
</message>
<message>
- <location/>
<source>This is the phrase in the source language.</source>
<translation>To jest wyrażenie zapisane w języku źródłowym.</translation>
</message>
<message>
- <location/>
<source>This is the phrase in the target language corresponding to the source phrase.</source>
<translation>To jest wyrażenie w języku docelowym odpowiadające wyrażeniu w języku źródłowym.</translation>
</message>
<message>
- <location/>
<source>&amp;Translation:</source>
<translation>&amp;Tłumaczenie:</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/phrasebookbox.cpp" line="-145"/>
<source></source>
<comment>Go to Phrase &gt; Edit Phrase Book... The dialog that pops up is a PhraseBookBox.</comment>
<translation></translation>
@@ -1777,17 +2187,14 @@ Linia: %2</translation>
<context>
<name>PhraseModel</name>
<message>
- <location filename="../tools/linguist/linguist/phrasemodel.cpp" line="+121"/>
<source>Definition</source>
<translation>Definicja</translation>
</message>
<message>
- <location line="-4"/>
<source>Source phrase</source>
<translation>Wyrażenie źródłowe</translation>
</message>
<message>
- <location line="+2"/>
<source>Translation</source>
<translation>Tłumaczenie</translation>
</message>
@@ -1795,22 +2202,18 @@ Linia: %2</translation>
<context>
<name>PhraseView</name>
<message>
- <location filename="../tools/linguist/linguist/phraseview.cpp" line="+122"/>
<source>Insert</source>
<translation>Wstaw</translation>
</message>
<message>
- <location line="+3"/>
<source>Edit</source>
<translation>Edycja</translation>
</message>
<message>
- <location line="+113"/>
<source>Guess (%1)</source>
<translation>Podpowiedź (%1)</translation>
</message>
<message>
- <location line="+2"/>
<source>Guess</source>
<translation>Podpowiedź</translation>
</message>
@@ -1818,81 +2221,67 @@ Linia: %2</translation>
<context>
<name>QObject</name>
<message>
- <location filename="../tools/linguist/shared/qm.cpp" line="+12"/>
<source>Compiled Qt translations</source>
<translation>Skompilowane tłumaczenia Qt</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-1302"/>
<source>Translation files (%1);;</source>
<translation>Pliki z tłumaczeniami (%1);;</translation>
</message>
<message>
- <location line="+5"/>
<source>All files (*)</source>
<translation>Wszystkie pliki (*)</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1134"/>
- <location line="+27"/>
- <location line="+67"/>
- <location line="+39"/>
- <location line="+17"/>
- <location line="+15"/>
- <location filename="../tools/linguist/linguist/phrase.cpp" line="+196"/>
<source>Qt Linguist</source>
<translation>Qt Linguist</translation>
</message>
<message>
- <location filename="../tools/linguist/shared/po.cpp" line="+870"/>
<source>GNU Gettext localization files</source>
<translation>Pliki GNU Gettext</translation>
</message>
<message>
- <location line="+7"/>
<source>GNU Gettext localization template files</source>
<translation>Szablony plików GNU Gettext</translation>
</message>
<message>
- <location filename="../tools/linguist/shared/ts.cpp" line="+752"/>
<source>Qt translation sources (format 1.1)</source>
<translation>Źródła tłumaczeń Qt (format 1.1)</translation>
</message>
<message>
- <location line="+8"/>
<source>Qt translation sources (format 2.0)</source>
<translation>Źródła tłumaczeń Qt (format 2.0)</translation>
</message>
<message>
- <location line="+9"/>
<source>Qt translation sources (latest format)</source>
<translation>Źródła tłumaczeń Qt (najnowszy format)</translation>
</message>
<message>
- <location filename="../tools/linguist/shared/xliff.cpp" line="+829"/>
<source>XLIFF localization files</source>
<translation>Pliki XLIFF</translation>
</message>
<message>
- <location filename="../tools/linguist/shared/qph.cpp" line="+195"/>
<source>Qt Linguist &apos;Phrase Book&apos;</source>
<translation>Qt Linguist &quot;Książka wyrażeń&quot;</translation>
</message>
+ <message>
+ <source>lupdate version %1
+</source>
+ <translation>Wersja lrelease %1
+</translation>
+ </message>
</context>
<context>
<name>SourceCodeView</name>
<message>
- <location filename="../tools/linguist/linguist/sourcecodeview.cpp" line="+70"/>
<source>&lt;i&gt;Source code not available&lt;/i&gt;</source>
<translation>&lt;i&gt;Kod źródłowy nie jest dostępny&lt;/i&gt;</translation>
</message>
<message>
- <location line="+33"/>
<source>&lt;i&gt;File %1 not available&lt;/i&gt;</source>
<translation>&lt;i&gt;Plik %1 nie jest dostępny&lt;/i&gt;</translation>
</message>
<message>
- <location line="+5"/>
<source>&lt;i&gt;File %1 not readable&lt;/i&gt;</source>
<translation>&lt;i&gt;Nie można odczytać pliku %1&lt;/i&gt;</translation>
</message>
@@ -1900,42 +2289,34 @@ Linia: %2</translation>
<context>
<name>Statistics</name>
<message>
- <location filename="../tools/linguist/linguist/statistics.ui"/>
<source>0</source>
<translation>0</translation>
</message>
<message>
- <location/>
<source>Characters:</source>
<translation>Znaków:</translation>
</message>
<message>
- <location/>
<source>Characters (with spaces):</source>
<translation>Znaków (ze spacjami):</translation>
</message>
<message>
- <location/>
<source>Source</source>
<translation>Źródło</translation>
</message>
<message>
- <location/>
<source>Statistics</source>
<translation>Statystyki</translation>
</message>
<message>
- <location/>
<source>Translation</source>
<translation>Tłumaczenie</translation>
</message>
<message>
- <location/>
<source>Words:</source>
<translation>Słów:</translation>
</message>
<message>
- <location/>
<source>Close</source>
<translation>Zamknij</translation>
</message>
@@ -1943,7 +2324,6 @@ Linia: %2</translation>
<context>
<name>TrWindow</name>
<message>
- <location filename="../tools/linguist/linguist/trwindow.cpp" line="+14"/>
<source></source>
<comment>This is the application&apos;s main window.</comment>
<translation></translation>
@@ -1952,72 +2332,58 @@ Linia: %2</translation>
<context>
<name>TranslateDialog</name>
<message>
- <location filename="../tools/linguist/linguist/translatedialog.ui"/>
<source>Cancel</source>
<translation>Anuluj</translation>
</message>
<message>
- <location/>
<source>Click here to close this window.</source>
<translation>Kliknij tutaj aby zamknąć to okno.</translation>
</message>
<message>
- <location/>
<source>Click here to find the next occurrence of the text you typed in.</source>
<translation>Kliknij tutaj aby znaleźć następne wystąpienie wprowadzonego tekstu.</translation>
</message>
<message>
- <location/>
<source>Find Next</source>
<translation>Znajdź następny</translation>
</message>
<message>
- <location/>
<source>Find &amp;source text:</source>
<translation>Szukaj tek&amp;stu źródłowego:</translation>
</message>
<message>
- <location/>
<source>Mark new translation as &amp;finished</source>
<translation>Zaznacz nowe tłumaczenie jako &amp;zrobione</translation>
</message>
<message>
- <location/>
<source>Match &amp;case</source>
<translation>Uwzględniaj &amp;wielkość liter</translation>
</message>
<message>
- <location/>
<source>Search options</source>
<translation>Opcje szukania</translation>
</message>
<message>
- <location/>
<source>Texts such as &apos;TeX&apos; and &apos;tex&apos; are considered as different when checked.</source>
<translation>Jeśli zaznaczone, teksty &apos;TeX&apos; oraz &apos;tex&apos; są interpretowane jako różne.</translation>
</message>
<message>
- <location/>
<source>This window allows you to search for some text in the translation source file.</source>
<translation>To okno pozwala na szukanie tekstów w pliku źródłowym tłumaczenia.</translation>
</message>
<message>
- <location/>
<source>Translate</source>
<translation>Przetłumacz</translation>
</message>
<message>
- <location/>
<source>Translate All</source>
<translation>Przetłumacz wszystko</translation>
</message>
<message>
- <location/>
<source>&amp;Translate to:</source>
<translation>Prze&amp;tłumacz na:</translation>
</message>
<message>
- <location/>
<source>Type in the text to search for.</source>
<translation>Wprowadź tekst do wyszukania.</translation>
</message>
@@ -2025,33 +2391,26 @@ Linia: %2</translation>
<context>
<name>TranslationSettingsDialog</name>
<message>
- <location filename="../tools/linguist/linguist/translationsettingsdialog.cpp" line="+93"/>
<source>Any Country</source>
<translation>Dowolny kraj</translation>
</message>
<message>
- <location line="-22"/>
- <location line="+8"/>
<source>Settings for &apos;%1&apos; - Qt Linguist</source>
<translation>Ustawienia dla &apos;%1&apos; - Qt Linguist</translation>
</message>
<message>
- <location filename="../tools/linguist/linguist/translationsettings.ui"/>
<source>Source language</source>
<translation>Język źródłowy</translation>
</message>
<message>
- <location/>
<source>Language</source>
<translation>Język</translation>
</message>
<message>
- <location/>
<source>Country/Region</source>
<translation>Kraj/Region</translation>
</message>
<message>
- <location/>
<source>Target language</source>
<translation>Język docelowy</translation>
</message>
diff --git a/translations/linguist_ru.ts b/translations/linguist_ru.ts
index dfda98e..e5f57de 100644
--- a/translations/linguist_ru.ts
+++ b/translations/linguist_ru.ts
@@ -86,6 +86,10 @@
<context>
<name>DataModel</name>
<message>
+ <source>The translation file &apos;%1&apos; will not be loaded because it is empty.</source>
+ <translation>Невозможно загрузить файл перевода &quot;%1&quot;, так как он пуст.</translation>
+ </message>
+ <message>
<source>&lt;qt&gt;Duplicate messages found in &apos;%1&apos;:</source>
<translation>&lt;qt&gt;В &apos;%1&apos; обнаружены повторяющиеся сообщения:</translation>
</message>
@@ -1268,7 +1272,7 @@ lupdate - это один из инструментов Qt Linguist. Он изв
</message>
<message>
<source>Phrases and guesses</source>
- <translation>Фразы и похожие переводы</translation>
+ <translation>Похожие переводы</translation>
</message>
<message>
<source>Sources and Forms</source>
@@ -1633,7 +1637,7 @@ All files (*)</source>
</message>
<message>
<source>&amp;Phrases</source>
- <translation>Фра&amp;зы</translation>
+ <translation>&amp;Глоссарии</translation>
</message>
<message>
<source>&amp;Close Phrase Book</source>
@@ -1657,7 +1661,7 @@ All files (*)</source>
</message>
<message>
<source>Vie&amp;ws</source>
- <translation>Вид&amp;ы</translation>
+ <translation>&amp;Панели</translation>
</message>
<message>
<source>&amp;Toolbars</source>
@@ -1977,7 +1981,7 @@ All files (*)</source>
</message>
<message>
<source>&amp;Display guesses</source>
- <translation>&amp;Предлагать похожие</translation>
+ <translation>П&amp;охожие переводы</translation>
</message>
<message>
<source>Set whether or not to display translation guesses.</source>
diff --git a/translations/linguist_uk.ts b/translations/linguist_uk.ts
index 56db6ba..a503475 100644
--- a/translations/linguist_uk.ts
+++ b/translations/linguist_uk.ts
@@ -86,6 +86,10 @@
<context>
<name>DataModel</name>
<message>
+ <source>The translation file &apos;%1&apos; will not be loaded because it is empty.</source>
+ <translation>Файл перекладу &apos;%1&apos; не буде завантажено, бо він порожній.</translation>
+ </message>
+ <message>
<source>&lt;qt&gt;Duplicate messages found in &apos;%1&apos;:</source>
<translation>&lt;qt&gt;Повідомлення-дублікати знайдено в &apos;%1&apos;:</translation>
</message>
diff --git a/translations/qt_cs.ts b/translations/qt_cs.ts
index 3e72f01..3e72f01 100755..100644
--- a/translations/qt_cs.ts
+++ b/translations/qt_cs.ts
diff --git a/translations/qt_de.ts b/translations/qt_de.ts
index f56978f..0e62340 100644
--- a/translations/qt_de.ts
+++ b/translations/qt_de.ts
@@ -320,6 +320,10 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass
<source>Playback complete</source>
<translation>Abspielen beendet</translation>
</message>
+ <message>
+ <source>Download error</source>
+ <translation>Fehler beim Download</translation>
+ </message>
</context>
<context>
<name>Phonon::MMF::AbstractVideoPlayer</name>
@@ -439,6 +443,10 @@ Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass
<source>Error opening source: media type could not be determined</source>
<translation>Die Quelle konnte nicht geöffnet werden: Der Medientyp konnte nicht bestimmt werden</translation>
</message>
+ <message>
+ <source>Failed to set requested IAP</source>
+ <translation>Der angeforderte Internetzugriffspunkt konnte nicht gesetzt werden</translation>
+ </message>
</context>
<context>
<name>Phonon::MMF::StereoWidening</name>
@@ -1214,6 +1222,11 @@ nach
<translation>%1: Keine Ressourcen mehr verfügbar</translation>
</message>
<message>
+ <source>%1: permission denied</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: Zugriff verweigert</translation>
+ </message>
+ <message>
<source>%1: unknown error %2</source>
<comment>QSystemSemaphore</comment>
<translation>%1: Unbekannter Fehler %2</translation>
@@ -1365,6 +1378,13 @@ nach
</message>
</context>
<context>
+ <name>QDeclarativeApplication</name>
+ <message>
+ <source>Application is an abstract class</source>
+ <translation>&apos;Application&apos; ist eine abstrakte Klasse</translation>
+ </message>
+</context>
+<context>
<name>QDeclarativeBehavior</name>
<message>
<source>Cannot change the animation assigned to a Behavior.</source>
@@ -1544,6 +1564,14 @@ nach
<translation>Komponentenobjekte können keine neuen Funktionen deklarieren.</translation>
</message>
<message>
+ <source>&quot;%1.%2&quot; is not available in %3 %4.%5.</source>
+ <translation>&quot;%1.%2&quot; ist in %3 %4.%5 nicht verfügbar.</translation>
+ </message>
+ <message>
+ <source>&quot;%1.%2&quot; is not available due to component versioning.</source>
+ <translation>&quot;%1.%2&quot; ist in dieser Version der Komponente nicht verfügbar </translation>
+ </message>
+ <message>
<source>Cannot assign a value to a signal (expecting a script to be run)</source>
<translation>Einem Signal können keine Werte zugewiesen werden (es wird ein Skript erwartet)</translation>
</message>
@@ -1596,6 +1624,10 @@ nach
<translation>Ungültige Zuweisung bei Eigenschaft: Es wird ein Skript erwartet</translation>
</message>
<message>
+ <source>Cannot assign multiple values to a singular property</source>
+ <translation>Eine Zuweisung mehrerer Werte an eine einfache Eigenschaft ist nicht zulässig</translation>
+ </message>
+ <message>
<source>Cannot assign object to property</source>
<translation>Zuweisung eines Objekts an eine Eigenschaft nicht zulässig</translation>
</message>
@@ -1688,8 +1720,16 @@ nach
<translation>Ungültige Quellangabe bei Alias-Eigenschaft</translation>
</message>
<message>
+ <source>Invalid alias reference. An alias reference must be specified as &lt;id&gt;, &lt;id&gt;.&lt;property&gt; or &lt;id&gt;.&lt;value property&gt;.&lt;property&gt;</source>
+ <translation>Ungültige Alias-Referenz. Eine Alias-Referenz muss in der Form &lt;id&gt;, &lt;id&gt;.&lt;property&gt; or &lt;id&gt;.&lt;value property&gt;.&lt;property&gt; angegeben werden</translation>
+ </message>
+ <message>
+ <source>Alias property exceeds alias bounds</source>
+ <translation>Die Alias-Eigenschaft überschreitet die Grenzen des Alias</translation>
+ </message>
+ <message>
<source>Invalid alias reference. An alias reference must be specified as &lt;id&gt; or &lt;id&gt;.&lt;property&gt;</source>
- <translation>Ungültige Referenzierung einer Alias-Eigenschaft. Die Referenz muss in der Form &lt;id&gt; oder &lt;id&gt;.&lt;property&gt; angegeben werden</translation>
+ <translation type="obsolete">Ungültige Referenzierung einer Alias-Eigenschaft. Die Referenz muss in der Form &lt;id&gt; oder &lt;id&gt;.&lt;property&gt; angegeben werden</translation>
</message>
<message>
<source>Invalid alias reference. Unable to find id &quot;%1&quot;</source>
@@ -1702,6 +1742,10 @@ nach
<source>Invalid empty URL</source>
<translation>Ungültige (leere) URL</translation>
</message>
+ <message>
+ <source>createObject: value is not an object</source>
+ <translation>createObject: Der Wert ist kein Objekt</translation>
+ </message>
</context>
<context>
<name>QDeclarativeCompositeTypeManager</name>
@@ -1782,6 +1826,10 @@ nach
<context>
<name>QDeclarativeImportDatabase</name>
<message>
+ <source>cannot load module &quot;%1&quot;: File name case mismatch for &quot;%2&quot;</source>
+ <translation>Der Module &quot;%1&quot; kann nicht geladen werden: Der Dateiname &quot;%2&quot; unterscheidet sich in der Groß/Kleinschreibung</translation>
+ </message>
+ <message>
<source>module &quot;%1&quot; definition &quot;%2&quot; not readable</source>
<translation>Modul &quot;%1&quot; Definition &quot;%2&quot; kann nicht gelesen werden</translation>
</message>
@@ -1837,6 +1885,10 @@ nach
<source>is not a type</source>
<translation>ist kein Typ</translation>
</message>
+ <message>
+ <source>File name case mismatch for &quot;%2&quot;</source>
+ <translation>Die Groß/Kleinschreibung des Dateinamens &quot;%2&quot; stimmt nicht überein</translation>
+ </message>
</context>
<context>
<name>QDeclarativeKeyNavigationAttached</name>
@@ -1853,6 +1905,17 @@ nach
</message>
</context>
<context>
+ <name>QDeclarativeLayoutMirroringAttached</name>
+ <message>
+ <source>LayoutDirection attached property only works with Items</source>
+ <translation>Eigenschaften des Typs &apos;attached&apos; können nur mit Elementen der Klasse Item verwendet werden</translation>
+ </message>
+ <message>
+ <source>LayoutMirroring is only available via attached properties</source>
+ <translation>LayoutMirroring ist nur in Verbindung mit Eigenschaften des Typs &quot;attached&quot; möglich</translation>
+ </message>
+</context>
+<context>
<name>QDeclarativeListModel</name>
<message>
<source>remove: index %1 out of range</source>
@@ -6187,7 +6250,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
</message>
<message>
<source>Voice Dial</source>
- <extracomment>Button to trigger voice dialling</extracomment>
+ <extracomment>Button to trigger voice dialing</extracomment>
<translation>Sprachwahl</translation>
</message>
<message>
@@ -6556,6 +6619,10 @@ Bitte wählen Sie einen anderen Dateinamen.</translation>
<translation>Es konnte keine SSL-Sitzung erzeugt werden: %1</translation>
</message>
<message>
+ <source>The peer certificate is blacklisted</source>
+ <translation>Das Zertifikat der Gegenstelle ist in einer Schwarzen Liste enthalten</translation>
+ </message>
+ <message>
<source>Cannot provide a certificate with no key, %1</source>
<translation>Ohne Schlüssel kann kein Zertifikat zur Verfügung gestellt werden, %1</translation>
</message>
diff --git a/translations/qt_help_cs.ts b/translations/qt_help_cs.ts
index 6e425d6..6e425d6 100755..100644
--- a/translations/qt_help_cs.ts
+++ b/translations/qt_help_cs.ts
diff --git a/translations/qt_help_ko.ts b/translations/qt_help_ko.ts
new file mode 100644
index 0000000..4a62287
--- /dev/null
+++ b/translations/qt_help_ko.ts
@@ -0,0 +1,318 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>QCLuceneResultWidget</name>
+ <message>
+ <source>Search Results</source>
+ <translation>검색 결과</translation>
+ </message>
+ <message>
+ <source>Note:</source>
+ <translation>메모:</translation>
+ </message>
+ <message>
+ <source>The search results may not be complete since the documentation is still being indexed!</source>
+ <translation>문서의 인덱싱 작업이 진행 중이므로 검색 결과가 완전하지 않을 수도 있습니다!</translation>
+ </message>
+ <message>
+ <source>Your search did not match any documents.</source>
+ <translation>검색 결과가 없습니다.</translation>
+ </message>
+ <message>
+ <source>(The reason for this might be that the documentation is still being indexed.)</source>
+ <translation>(문서를 현재 인덱싱 중이므로 결과가 없을 수도 있습니다.)</translation>
+ </message>
+</context>
+<context>
+ <name>QHelp</name>
+ <message>
+ <source>Untitled</source>
+ <translation>제목 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpCollectionHandler</name>
+ <message>
+ <source>The collection file &apos;%1&apos; is not set up yet!</source>
+ <translation>모음집 파일 &apos;%1&apos;이(가) 설정되지 않았습니다!</translation>
+ </message>
+ <message>
+ <source>Cannot load sqlite database driver!</source>
+ <translation>sqlite 데이터베이스 드라이버를 불러올 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>Cannot open collection file: %1</source>
+ <translation>모음집 파일을 열 수 없음: %1</translation>
+ </message>
+ <message>
+ <source>Cannot create tables in file %1!</source>
+ <translation>파일 %1에 테이블을 만들 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>The collection file &apos;%1&apos; already exists!</source>
+ <translation>모음집 파일 &apos;%1&apos;이(가) 이미 존재합니다!</translation>
+ </message>
+ <message>
+ <source>Cannot create directory: %1</source>
+ <translation>디렉터리를 만들 수 없음: %1</translation>
+ </message>
+ <message>
+ <source>Cannot copy collection file: %1</source>
+ <translation>모음집 파일을 복사할 수 없음: %1</translation>
+ </message>
+ <message>
+ <source>Unknown filter &apos;%1&apos;!</source>
+ <translation>알 수 없는 필터 &apos;%1&apos;!</translation>
+ </message>
+ <message>
+ <source>Cannot register filter %1!</source>
+ <translation>필터 &apos;%1&apos;을(를) 등록할 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>Cannot open documentation file %1!</source>
+ <translation>문서 파일 %1을(를) 열 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>Invalid documentation file &apos;%1&apos;!</source>
+ <translation>문서 파일 &apos;%1&apos;이(가) 잘못되었습니다!</translation>
+ </message>
+ <message>
+ <source>The namespace %1 was not registered!</source>
+ <translation>네임스페이스 %1이(가) 등록되지 않았습니다!</translation>
+ </message>
+ <message>
+ <source>Namespace %1 already exists!</source>
+ <translation>네임스페이스 %1이(가) 이미 존재합니다!</translation>
+ </message>
+ <message>
+ <source>Cannot register namespace &apos;%1&apos;!</source>
+ <translation>네임스페이스 &apos;%1&apos;을(를) 등록할 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>Cannot open database &apos;%1&apos; to optimize!</source>
+ <translation>데이터베이스 &apos;%1&apos;을(를) 최적화하기 위하여 열 수 없습니다!</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpDBReader</name>
+ <message>
+ <source>Cannot open database &apos;%1&apos; &apos;%2&apos;: %3</source>
+ <extracomment>The placeholders are: %1 - The name of the database which cannot be opened %2 - The unique id for the connection %3 - The actual error string</extracomment>
+ <translation>데이터베이스 &apos;%1&apos; &apos;%2&apos;을(를) 열 수 없음: %3</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpEngineCore</name>
+ <message>
+ <source>Cannot open documentation file %1: %2!</source>
+ <translation>문서 파일 %1을(를) 열 수 없음: %2!</translation>
+ </message>
+ <message>
+ <source>The specified namespace does not exist!</source>
+ <translation>지정한 네임스페이스가 존재하지 않습니다!</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpGenerator</name>
+ <message>
+ <source>Invalid help data!</source>
+ <translation>도움말 데이터가 잘못되었습니다!</translation>
+ </message>
+ <message>
+ <source>No output file name specified!</source>
+ <translation>출력 파일 이름이 지정되지 않았습니다!</translation>
+ </message>
+ <message>
+ <source>The file %1 cannot be overwritten!</source>
+ <translation>파일 %1에 겹쳐쓸 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>Building up file structure...</source>
+ <translation>파일 구조 생성 중...</translation>
+ </message>
+ <message>
+ <source>Cannot open data base file %1!</source>
+ <translation>데이터베이스 파일 %1을(를) 열 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>Cannot register namespace %1!</source>
+ <translation>네임스페이스 %1을(를) 등록할 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>Insert custom filters...</source>
+ <translation>사용자 정의 필터 추가...</translation>
+ </message>
+ <message>
+ <source>Insert help data for filter section (%1 of %2)...</source>
+ <translation>필터 섹션 (%2 중 %1)에 도움말 데이터 추가...</translation>
+ </message>
+ <message>
+ <source>Documentation successfully generated.</source>
+ <translation>문서가 성공적으로 생성되었습니다.</translation>
+ </message>
+ <message>
+ <source>Some tables already exist!</source>
+ <translation>일부 테이블이 이미 존재합니다!</translation>
+ </message>
+ <message>
+ <source>Cannot create tables!</source>
+ <translation>테이블을 만들 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>Cannot register virtual folder!</source>
+ <translation>가상 폴더를 등록할 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>Insert files...</source>
+ <translation>파일 추가...</translation>
+ </message>
+ <message>
+ <source>The referenced file %1 must be inside or within a subdirectory of (%2). Skipping it.</source>
+ <translation>참조되는 파일 %1은(는) (%2) 그 자체 및 하위 디렉터리에 있어야 합니다. 건너뜁니다.</translation>
+ </message>
+ <message>
+ <source>The file %1 does not exist! Skipping it.</source>
+ <translation>파일 %1이(가) 존재하지 않습니다! 건너뜁니다.</translation>
+ </message>
+ <message>
+ <source>Cannot open file %1! Skipping it.</source>
+ <translation>파일 %1을(를) 열 수 없습니다! 건너뜁니다.</translation>
+ </message>
+ <message>
+ <source>The filter %1 is already registered!</source>
+ <translation>필터 %1이(가) 이미 등록되었습니다!</translation>
+ </message>
+ <message>
+ <source>Cannot register filter %1!</source>
+ <translation>필터 %1을(를) 등록할 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>Insert indices...</source>
+ <translation>인덱스 추가...</translation>
+ </message>
+ <message>
+ <source>Insert contents...</source>
+ <translation>내용 추가...</translation>
+ </message>
+ <message>
+ <source>Cannot insert contents!</source>
+ <translation>내용을 추가할 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>Cannot register contents!</source>
+ <translation>내용을 등록할 수 없습니다!</translation>
+ </message>
+ <message>
+ <source>File &apos;%1&apos; does not exist.</source>
+ <translation>파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>File &apos;%1&apos; cannot be opened.</source>
+ <translation>파일 &apos;%1&apos;을(를) 열 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>File &apos;%1&apos; contains an invalid link to file &apos;%2&apos;</source>
+ <translation>파일 &apos;%1&apos;이(가) 파일 &apos;%2&apos;(으)로 가는 올바르지 않은 링크를 포함합니다</translation>
+ </message>
+ <message>
+ <source>Invalid links in HTML files.</source>
+ <translation>HTML 파일에 잘못된 링크가 있습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpProject</name>
+ <message>
+ <source>Unknown token.</source>
+ <translation>알 수 없는 토큰.</translation>
+ </message>
+ <message>
+ <source>Unknown token. Expected &quot;QtHelpProject&quot;!</source>
+ <translation>알 수 없는 토큰. &quot;QtHelpProject&quot;를 예상하였습니다!</translation>
+ </message>
+ <message>
+ <source>Error in line %1: %2</source>
+ <translation>%1줄에 오류가 있음: %2</translation>
+ </message>
+ <message>
+ <source>Virtual folder has invalid syntax.</source>
+ <translation>가상 폴더 문법이 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>Namespace has invalid syntax.</source>
+ <translation>네임스페이스 문법이 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>Missing namespace in QtHelpProject.</source>
+ <translation>QtHelpProject에 네임스페이스가 없습니다.</translation>
+ </message>
+ <message>
+ <source>Missing virtual folder in QtHelpProject</source>
+ <translation>QtHelpProject에 가상 폴더가 없습니다</translation>
+ </message>
+ <message>
+ <source>Missing attribute in keyword at line %1.</source>
+ <translation>%1줄에 있는 키워드에 속성이 없습니다.</translation>
+ </message>
+ <message>
+ <source>The input file %1 could not be opened!</source>
+ <translation>입력 파일 %1을(를) 열 수 없습니다!</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpSearchQueryWidget</name>
+ <message>
+ <source>Search for:</source>
+ <translation>찾을 단어:</translation>
+ </message>
+ <message>
+ <source>Previous search</source>
+ <translation>이전 찾기</translation>
+ </message>
+ <message>
+ <source>Next search</source>
+ <translation>다음 찾기</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation>찾기</translation>
+ </message>
+ <message>
+ <source>Advanced search</source>
+ <translation>고급 검색</translation>
+ </message>
+ <message>
+ <source>words &lt;B&gt;similar&lt;/B&gt; to:</source>
+ <translation>다음과 &lt;B&gt;비슷한&lt;/B&gt; 단어:</translation>
+ </message>
+ <message>
+ <source>&lt;B&gt;without&lt;/B&gt; the words:</source>
+ <translation>다음 단어 &lt;B&gt;제외&lt;/B&gt;:</translation>
+ </message>
+ <message>
+ <source>with &lt;B&gt;exact phrase&lt;/B&gt;:</source>
+ <translation>다음 &lt;B&gt;정확한 구절&lt;/B&gt;:</translation>
+ </message>
+ <message>
+ <source>with &lt;B&gt;all&lt;/B&gt; of the words:</source>
+ <translation>다음 단어 &lt;B&gt;모두&lt;/B&gt; 포함:</translation>
+ </message>
+ <message>
+ <source>with &lt;B&gt;at least one&lt;/B&gt; of the words:</source>
+ <translation>다음 단어 중 &lt;B&gt;최소한 한 단어&lt;/B&gt; 포함:</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpSearchResultWidget</name>
+ <message numerus="yes">
+ <source>%1 - %2 of %n Hits</source>
+ <translation>
+ <numerusform>검색 결과 %n개 중 %1 - %2</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>0 - 0 of 0 Hits</source>
+ <translation>검색 결과 0개 중 0 - 0</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/qt_help_pl.ts b/translations/qt_help_pl.ts
index de3cce0..f5cfa79 100644
--- a/translations/qt_help_pl.ts
+++ b/translations/qt_help_pl.ts
@@ -4,27 +4,22 @@
<context>
<name>QCLuceneResultWidget</name>
<message>
- <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+110"/>
<source>Search Results</source>
<translation>Wyniki wyszukiwania</translation>
</message>
<message>
- <location line="+7"/>
<source>Note:</source>
<translation>Uwaga:</translation>
</message>
<message>
- <location line="+1"/>
<source>The search results may not be complete since the documentation is still being indexed!</source>
<translation>Wyniki wyszukiwania mogą być niekompletne ponieważ dokumentacja jest wciąż indeksowana!</translation>
</message>
<message>
- <location line="+11"/>
<source>Your search did not match any documents.</source>
<translation>Nie znaleziono żadnych pasujących dokumentów.</translation>
</message>
<message>
- <location line="+4"/>
<source>(The reason for this might be that the documentation is still being indexed.)</source>
<translation>(Może to być spowodowane tym że dokumentacja jest wciąż indeksowana.)</translation>
</message>
@@ -32,7 +27,6 @@
<context>
<name>QHelp</name>
<message>
- <location filename="../tools/assistant/lib/qhelp_global.cpp" line="+64"/>
<source>Untitled</source>
<translation>Nienazwany</translation>
</message>
@@ -40,78 +34,62 @@
<context>
<name>QHelpCollectionHandler</name>
<message>
- <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/>
<source>The collection file &apos;%1&apos; is not set up yet!</source>
<translation>Plik z kolekcją &quot;%1&quot; nie jest jeszcze ustawiony!</translation>
</message>
<message>
- <location line="+23"/>
<source>Cannot load sqlite database driver!</source>
<translation>Nie można załadować sterownika bazy danych sqlite!</translation>
</message>
<message>
- <location line="+11"/>
- <location line="+52"/>
<source>Cannot open collection file: %1</source>
<translation>Nie można otworzyć pliku z kolekcją: %1</translation>
</message>
<message>
- <location line="-40"/>
<source>Cannot create tables in file %1!</source>
<translation>Nie można utworzyć tabel w pliku %1!</translation>
</message>
<message>
- <location line="+16"/>
<source>The collection file &apos;%1&apos; already exists!</source>
<translation>Plik z kolekcją &quot;%1&quot; już istnieje!</translation>
</message>
<message>
- <location line="+151"/>
<source>Unknown filter &apos;%1&apos;!</source>
<translation>Nieznany filtr &quot;%1&quot;!</translation>
</message>
<message>
- <location line="+103"/>
<source>Invalid documentation file &apos;%1&apos;!</source>
<translation>Niepoprawny plik z dokumentacją &quot;%1&quot;!</translation>
</message>
<message>
- <location line="+167"/>
<source>Cannot register namespace &apos;%1&apos;!</source>
<translation>Nie można zarejestrować przestrzeni nazw &quot;%1&quot;!</translation>
</message>
<message>
- <location line="+24"/>
<source>Cannot open database &apos;%1&apos; to optimize!</source>
<translation>Nie można otworzyć bazy danych &quot;%1&quot; do zoptymalizowania!</translation>
</message>
<message>
- <location line="-439"/>
<source>Cannot create directory: %1</source>
<translation>Nie można utworzyć katalogu: %1</translation>
</message>
<message>
- <location line="+26"/>
<source>Cannot copy collection file: %1</source>
<translation>Nie można skopiować pliku z kolekcją: %1</translation>
</message>
<message>
- <location line="+172"/>
<source>Cannot register filter %1!</source>
<translation>Nie można zarejestrować pliku %1!</translation>
</message>
<message>
- <location line="+44"/>
<source>Cannot open documentation file %1!</source>
<translation>Nie można otworzyć pliku z dokumentacją %1!</translation>
</message>
<message>
- <location line="+40"/>
<source>The namespace %1 was not registered!</source>
<translation>Przestrzeń nazw %1 nie została zarejestrowana!</translation>
</message>
<message>
- <location line="+120"/>
<source>Namespace %1 already exists!</source>
<translation>Przestrzeń nazw %1 już istnieje!</translation>
</message>
@@ -119,7 +97,6 @@
<context>
<name>QHelpDBReader</name>
<message>
- <location filename="../tools/assistant/lib/qhelpdbreader.cpp" line="+98"/>
<source>Cannot open database &apos;%1&apos; &apos;%2&apos;: %3</source>
<extracomment>The placeholders are: %1 - The name of the database which cannot be opened %2 - The unique id for the connection %3 - The actual error string</extracomment>
<translation>Nie można otworzyć bazy danych &apos;%1&apos; &apos;%2&apos;: %3</translation>
@@ -128,12 +105,10 @@
<context>
<name>QHelpEngineCore</name>
<message>
- <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+122"/>
<source>Cannot open documentation file %1: %2!</source>
<translation>Nie można otworzyć pliku z dokumentacją %1: %2!</translation>
</message>
<message>
- <location line="+404"/>
<source>The specified namespace does not exist!</source>
<translation>Podana przestrzeń nazw nie istnieje!</translation>
</message>
@@ -141,132 +116,106 @@
<context>
<name>QHelpGenerator</name>
<message>
- <location filename="../tools/assistant/lib/qhelpgenerator.cpp" line="+158"/>
<source>Invalid help data!</source>
<translation>Niepoprawne dane pomocy!</translation>
</message>
<message>
- <location line="+6"/>
<source>No output file name specified!</source>
<translation>Nie podano nazwy pliku wyjściowego!</translation>
</message>
<message>
- <location line="+14"/>
<source>Building up file structure...</source>
<translation>Budowanie struktury plików...</translation>
</message>
<message>
- <location line="-7"/>
<source>The file %1 cannot be overwritten!</source>
<translation>Nie można nadpisać pliku %1!</translation>
</message>
<message>
- <location line="+18"/>
<source>Cannot open data base file %1!</source>
<translation>Nie można otworzyć pliku z bazą danych %1!</translation>
</message>
<message>
- <location line="+14"/>
<source>Cannot register namespace %1!</source>
<translation>Nie można zarejestrować przestrzeni nazw %1!</translation>
</message>
<message>
- <location line="+6"/>
<source>Insert custom filters...</source>
<translation>Wstaw własne filtry...</translation>
</message>
<message>
- <location line="+12"/>
<source>Insert help data for filter section (%1 of %2)...</source>
<translation>Wstaw dane pomocy dla sekcji filtra (%1 z %2)...</translation>
</message>
<message>
- <location line="+18"/>
<source>Documentation successfully generated.</source>
<translation>Dokumentacja została poprawnie wygenerowana.</translation>
</message>
<message>
- <location line="+76"/>
<source>Some tables already exist!</source>
<translation>Niektóre tabele już istnieją!</translation>
</message>
<message>
- <location line="+61"/>
<source>Cannot create tables!</source>
<translation>Nie można utworzyć tabel!</translation>
</message>
<message>
- <location line="+86"/>
<source>Cannot register virtual folder!</source>
<translation>Nie można zarejestrować wirtualnego katalogu!</translation>
</message>
<message>
- <location line="+10"/>
<source>Insert files...</source>
<translation>Wstaw pliki...</translation>
</message>
<message>
- <location line="+42"/>
<source>The referenced file %1 must be inside or within a subdirectory of (%2). Skipping it.</source>
<translation>Plik %1 do którego się odwołano musi być wewnątrz poddrzewa (%2). Plik ten został pominięty.</translation>
</message>
<message>
- <location line="+7"/>
<source>The file %1 does not exist! Skipping it.</source>
<translation>Plik %1 nie istnieje! Zostaje on opuszczony.</translation>
</message>
<message>
- <location line="+6"/>
<source>Cannot open file %1! Skipping it.</source>
<translation>Nie można otworzyć pliku %1! Zostaje on opuszczony.</translation>
</message>
<message>
- <location line="+133"/>
<source>The filter %1 is already registered!</source>
<translation>Filtr %1 jest już zarejestrowany!</translation>
</message>
<message>
- <location line="+5"/>
<source>Cannot register filter %1!</source>
<translation>Nie można zarejestrować filtru %1!</translation>
</message>
<message>
- <location line="+24"/>
<source>Insert indices...</source>
<translation>Wstaw indeksy...</translation>
</message>
<message>
- <location line="+91"/>
<source>Insert contents...</source>
<translation>Wstaw zawartość...</translation>
</message>
<message>
- <location line="+8"/>
<source>Cannot insert contents!</source>
<translation>Nie można wstawić zawartości!</translation>
</message>
<message>
- <location line="+12"/>
<source>Cannot register contents!</source>
<translation>Nie można zarejestrować zawartości!</translation>
</message>
<message>
- <location line="+56"/>
<source>File &apos;%1&apos; does not exist.</source>
<translation>Plik %1 nie istnieje.</translation>
</message>
<message>
- <location line="+19"/>
<source>File &apos;%1&apos; cannot be opened.</source>
<translation>Nie można otworzyć pliku &quot;%1&quot;.</translation>
</message>
<message>
- <location line="+19"/>
<source>File &apos;%1&apos; contains an invalid link to file &apos;%2&apos;</source>
<translation>Plik &quot;%1&quot; zawiera niepoprawny odnośnik do pliku &quot;%2&quot;</translation>
</message>
<message>
- <location line="+9"/>
<source>Invalid links in HTML files.</source>
<translation>Niepoprawne odnośniki w plikach HTML.</translation>
</message>
@@ -274,47 +223,38 @@
<context>
<name>QHelpProject</name>
<message>
- <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+88"/>
<source>Unknown token.</source>
<translation>Nieznany znak.</translation>
</message>
<message>
- <location line="+13"/>
<source>Unknown token. Expected &quot;QtHelpProject&quot;!</source>
<translation>Nieznany znak. Spodziewano się &quot;QtHelpProject&quot;!</translation>
</message>
<message>
- <location line="+6"/>
<source>Error in line %1: %2</source>
<translation>Błąd w linii %1: %2</translation>
</message>
<message>
- <location line="+14"/>
<source>Virtual folder has invalid syntax.</source>
<translation>Wirtualny katalog posiada niepoprawną składnię.</translation>
</message>
<message>
- <location line="+5"/>
<source>Namespace has invalid syntax.</source>
<translation>Przestrzeń nazw posiada niepoprawną składnię.</translation>
</message>
<message>
- <location line="+19"/>
<source>Missing namespace in QtHelpProject.</source>
<translation>Brak przestrzeni nazw w QtHelpProject.</translation>
</message>
<message>
- <location line="+3"/>
<source>Missing virtual folder in QtHelpProject</source>
<translation>Brak wirtualnego katalogu QtHelpProject</translation>
</message>
<message>
- <location line="+89"/>
<source>Missing attribute in keyword at line %1.</source>
<translation>Brak atrybutu w słowie kluczowym w linii %1.</translation>
</message>
<message>
- <location line="+143"/>
<source>The input file %1 could not be opened!</source>
<translation>Nie można otworzyć pliku wejściowego %1!</translation>
</message>
@@ -322,52 +262,42 @@
<context>
<name>QHelpSearchQueryWidget</name>
<message>
- <location filename="../tools/assistant/lib/qhelpsearchquerywidget.cpp" line="+124"/>
<source>Search for:</source>
<translation>Wyszukaj:</translation>
</message>
<message>
- <location line="+1"/>
<source>Previous search</source>
<translation>Poprzednie wyszukiwanie</translation>
</message>
<message>
- <location line="+1"/>
<source>Next search</source>
<translation>Następne wyszukiwanie</translation>
</message>
<message>
- <location line="+1"/>
<source>Search</source>
<translation>Wyszukaj</translation>
</message>
<message>
- <location line="+2"/>
<source>Advanced search</source>
<translation>Wyszukiwanie zaawansowane</translation>
</message>
<message>
- <location line="+1"/>
<source>words &lt;B&gt;similar&lt;/B&gt; to:</source>
<translation>słowa &lt;B&gt;podobne&lt;/B&gt; do:</translation>
</message>
<message>
- <location line="+1"/>
<source>&lt;B&gt;without&lt;/B&gt; the words:</source>
<translation>&lt;B&gt;bez&lt;/B&gt; słów:</translation>
</message>
<message>
- <location line="+1"/>
<source>with &lt;B&gt;exact phrase&lt;/B&gt;:</source>
<translation>z &lt;B&gt;dokładnym wyrażeniem&lt;/B&gt;:</translation>
</message>
<message>
- <location line="+1"/>
<source>with &lt;B&gt;all&lt;/B&gt; of the words:</source>
<translation>ze &lt;B&gt;wszystkimi&lt;/B&gt; słowami:</translation>
</message>
<message>
- <location line="+1"/>
<source>with &lt;B&gt;at least one&lt;/B&gt; of the words:</source>
<translation>z &lt;B&gt;przynajmniej jednym&lt;/B&gt; ze słów:</translation>
</message>
@@ -375,7 +305,6 @@
<context>
<name>QHelpSearchResultWidget</name>
<message numerus="yes">
- <location filename="../tools/assistant/lib/qhelpsearchresultwidget.cpp" line="+174"/>
<source>%1 - %2 of %n Hits</source>
<translation>
<numerusform>%1 - %2 z %n trafienia</numerusform>
@@ -384,7 +313,6 @@
</translation>
</message>
<message>
- <location line="+61"/>
<source>0 - 0 of 0 Hits</source>
<translation>0 - 0 z 0 Trafień</translation>
</message>
diff --git a/translations/qt_ko.ts b/translations/qt_ko.ts
new file mode 100644
index 0000000..c7ab8e3
--- /dev/null
+++ b/translations/qt_ko.ts
@@ -0,0 +1,9941 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>CloseButton</name>
+ <message>
+ <source>Close Tab</source>
+ <translation>탭 닫기</translation>
+ </message>
+</context>
+<context>
+ <name>FakeReply</name>
+ <message>
+ <source>Fake error !</source>
+ <translation>가짜 오류!</translation>
+ </message>
+ <message>
+ <source>Invalid URL</source>
+ <translation>잘못된 URL</translation>
+ </message>
+</context>
+<context>
+ <name>MAC_APPLICATION_MENU</name>
+ <message>
+ <source>Services</source>
+ <translation>서비스</translation>
+ </message>
+ <message>
+ <source>Hide %1</source>
+ <translation>%1 숨기기</translation>
+ </message>
+ <message>
+ <source>Hide Others</source>
+ <translation>다른 항목 숨기기</translation>
+ </message>
+ <message>
+ <source>Show All</source>
+ <translation>모두 보이기</translation>
+ </message>
+ <message>
+ <source>Preferences...</source>
+ <translation>설정...</translation>
+ </message>
+ <message>
+ <source>Quit %1</source>
+ <translation>%1 끝내기</translation>
+ </message>
+ <message>
+ <source>About %1</source>
+ <translation>%1 정보</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::</name>
+ <message>
+ <source>Notifications</source>
+ <translation>알림</translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation>음악</translation>
+ </message>
+ <message>
+ <source>Video</source>
+ <translation>비디오</translation>
+ </message>
+ <message>
+ <source>Communication</source>
+ <translation>대화</translation>
+ </message>
+ <message>
+ <source>Games</source>
+ <translation>게임</translation>
+ </message>
+ <message>
+ <source>Accessibility</source>
+ <translation>접근성</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::AudioOutput</name>
+ <message>
+ <source>&lt;html&gt;The audio playback device &lt;b&gt;%1&lt;/b&gt; does not work.&lt;br/&gt;Falling back to &lt;b&gt;%2&lt;/b&gt;.&lt;/html&gt;</source>
+ <translation>&lt;html&gt;오디오 재생 장치 &lt;b&gt;%1&lt;/b&gt;을(를) 사용할 수 없습니다.&lt;br /&gt;장치 &lt;b&gt;%2&lt;/b&gt;(으)로 전환합니다.&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which just became available and has higher preference.&lt;/html&gt;</source>
+ <translation>&lt;html&gt;지금 사용할 수 있게 된 우선 순위가 높은 오디오 장치&lt;br /&gt;&lt;b&gt;%1&lt;/b&gt;(으)로 전환합니다.&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>Revert back to device &apos;%1&apos;</source>
+ <translation>장치 &apos;%1&apos;(으)로 전환함</translation>
+ </message>
+ <message>
+ <source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which has higher preference or is specifically configured for this stream.&lt;/html&gt;</source>
+ <translation>&lt;html&gt;이 스트림을 위하여 설정하였거나 우선 순위가 더 높은&lt;br /&gt;오디오 재생 장치 &lt;b&gt;%1&lt;/b&gt;(으)로 전환합니다.&lt;/html&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::Gstreamer::Backend</name>
+ <message>
+ <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed.
+ Some video features have been disabled.</source>
+ <translation>경고: gstreamer0.10-plugins-good 패키지가 없는 것 같습니다.
+ 일부 비디오 기능을 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Warning: You do not seem to have the base GStreamer plugins installed.
+ All audio and video support has been disabled</source>
+ <translation>경고: GStreamer 기본 플러그인이 없는 것 같습니다.
+ 모든 오디오 및 비디오 지원을 사용할 수 없습니다</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::Gstreamer::MediaObject</name>
+ <message>
+ <source>Cannot start playback.
+Check your GStreamer installation and make sure you
+have libgstreamer-plugins-base installed.</source>
+ <translation type="obsolete">재생을 시작할 수 없습니다.
+
+Gstreamer 설치 상태를 확인해 보시고
+libgstreamer-plugins-base 패키지의 설치 상태를 확인해 보십시오.</translation>
+ </message>
+ <message>
+ <source>Cannot start playback.
+
+Check your GStreamer installation and make sure you
+have libgstreamer-plugins-base installed.</source>
+ <translation>재생을 시작할 수 없습니다.
+
+Gstreamer 설치 상태를 확인해 보시고
+libgstreamer-plugins-base 패키지의 설치 상태를 확인해 보십시오.</translation>
+ </message>
+ <message>
+ <source>Missing codec helper script assistant.</source>
+ <translation>코덱 도우미 스크립트가 없습니다.</translation>
+ </message>
+ <message>
+ <source>Plugin codec installation failed for codec: %0</source>
+ <translation>다음 코덱을 위한 플러그인을 설치할 수 없음: %0</translation>
+ </message>
+ <message>
+ <source>A required codec is missing. You need to install the following codec(s) to play this content: %0</source>
+ <translation>필요한 코덱이 없습니다. 이 컨텐츠를 재생하려면 다음 코덱이 필요합니다: %0</translation>
+ </message>
+ <message>
+ <source>Could not open media source.</source>
+ <translation>미디어 원본을 열 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Invalid source type.</source>
+ <translation>원본 종류가 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>Could not locate media source.</source>
+ <translation>미디어 원본을 찾을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Could not open audio device. The device is already in use.</source>
+ <translation>오디오 장치를 열 수 없습니다. 장치가 사용 중입니다.</translation>
+ </message>
+ <message>
+ <source>Could not decode media source.</source>
+ <translation>미디어 원본을 디코딩할 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF</name>
+ <message>
+ <source>Audio Output</source>
+ <translation>오디오 출력</translation>
+ </message>
+ <message>
+ <source>The audio output device</source>
+ <translation>오디오 출력 장치</translation>
+ </message>
+ <message>
+ <source>No error</source>
+ <translation>오류 없음</translation>
+ </message>
+ <message>
+ <source>Not found</source>
+ <translation>찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>Out of memory</source>
+ <translation>메모리 부족</translation>
+ </message>
+ <message>
+ <source>Not supported</source>
+ <translation>지원하지 않음</translation>
+ </message>
+ <message>
+ <source>Overflow</source>
+ <translation>넘침</translation>
+ </message>
+ <message>
+ <source>Underflow</source>
+ <comment>Underline context menu item</comment>
+ <translation type="obsolete">비어 있음</translation>
+ </message>
+ <message>
+ <source>Already exists</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">이미 존재함</translation>
+ </message>
+ <message>
+ <source>Underflow</source>
+ <translation>비어 있음</translation>
+ </message>
+ <message>
+ <source>Already exists</source>
+ <translation>이미 존재함</translation>
+ </message>
+ <message>
+ <source>Path not found</source>
+ <translation>경로를 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>In use</source>
+ <translation>사용 중</translation>
+ </message>
+ <message>
+ <source>Not ready</source>
+ <translation>준비되지 않았음</translation>
+ </message>
+ <message>
+ <source>Access denied</source>
+ <translation>접근이 거부됨</translation>
+ </message>
+ <message>
+ <source>Could not connect</source>
+ <translation>연결할 수 없음</translation>
+ </message>
+ <message>
+ <source>Disconnected</source>
+ <translation>연결 끊김</translation>
+ </message>
+ <message>
+ <source>Permission denied</source>
+ <translation>권한이 거부됨</translation>
+ </message>
+ <message>
+ <source>Insufficient bandwidth</source>
+ <translation>대역폭 부족</translation>
+ </message>
+ <message>
+ <source>Network unavailable</source>
+ <translation>네트워크를 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>Network communication error</source>
+ <translation>네트워크 통신 오류</translation>
+ </message>
+ <message>
+ <source>Streaming not supported</source>
+ <translation>스트리밍 지원하지 않음</translation>
+ </message>
+ <message>
+ <source>Server alert</source>
+ <translation>서버 알림</translation>
+ </message>
+ <message>
+ <source>Invalid protocol</source>
+ <translation>잘못된 프로토콜</translation>
+ </message>
+ <message>
+ <source>Invalid URL</source>
+ <translation>잘못된 URL</translation>
+ </message>
+ <message>
+ <source>Multicast error</source>
+ <translation>멀티캐스트 오류</translation>
+ </message>
+ <message>
+ <source>Proxy server error</source>
+ <translation>프록시 서버 오류</translation>
+ </message>
+ <message>
+ <source>Proxy server not supported</source>
+ <translation>프록시 서버 지원하지 않음</translation>
+ </message>
+ <message>
+ <source>Audio output error</source>
+ <translation>오디오 출력 오류</translation>
+ </message>
+ <message>
+ <source>Video output error</source>
+ <translation>비디오 출력 오류</translation>
+ </message>
+ <message>
+ <source>Decoder error</source>
+ <translation>디코더 오류</translation>
+ </message>
+ <message>
+ <source>Audio or video components could not be played</source>
+ <translation>오디오나 비디오 구성 요소를 재생할 수 없음</translation>
+ </message>
+ <message>
+ <source>DRM error</source>
+ <translation>DRM 오류</translation>
+ </message>
+ <message>
+ <source>Unknown error (%1)</source>
+ <translation>알 수 없는 오류 (%1)</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AbstractMediaPlayer</name>
+ <message>
+ <source>Not ready to play</source>
+ <translation>재생이 준비되지 않았음</translation>
+ </message>
+ <message>
+ <source>Error opening file</source>
+ <translation>파일 열기 오류</translation>
+ </message>
+ <message>
+ <source>Error opening URL</source>
+ <translation>URL 열기 오류</translation>
+ </message>
+ <message>
+ <source>Error opening resource</source>
+ <translation>자원 열기 오류</translation>
+ </message>
+ <message>
+ <source>Error opening source: resource not opened</source>
+ <translation>원본을 열 수 없음: 자원이 열리지 않았음</translation>
+ </message>
+ <message>
+ <source>Setting volume failed</source>
+ <translation>음량 설정 실패</translation>
+ </message>
+ <message>
+ <source>Loading clip failed</source>
+ <translation>클립 불러오기 실패</translation>
+ </message>
+ <message>
+ <source>Playback complete</source>
+ <translation>재생 완료됨</translation>
+ </message>
+ <message>
+ <source>Download error</source>
+ <translation>다운로드 오류</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AbstractVideoPlayer</name>
+ <message>
+ <source>Pause failed</source>
+ <translation>일시 정지 실패</translation>
+ </message>
+ <message>
+ <source>Seek failed</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">검색 실패</translation>
+ </message>
+ <message>
+ <source>Seek failed</source>
+ <translation>검색 실패</translation>
+ </message>
+ <message>
+ <source>Getting position failed</source>
+ <translation>위치 가져오기 실패</translation>
+ </message>
+ <message>
+ <source>Opening clip failed</source>
+ <translation>클립 열기 실패</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AudioEqualizer</name>
+ <message>
+ <source>%1 Hz</source>
+ <translation>%1 Hz</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::AudioPlayer</name>
+ <message>
+ <source>Getting position failed</source>
+ <translation>위치 가져오기 실패</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::DsaVideoPlayer</name>
+ <message>
+ <source>Video display error</source>
+ <translation>비디오 표시 오류</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::EffectFactory</name>
+ <message>
+ <source>Enabled</source>
+ <translation>사용 가능</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::EnvironmentalReverb</name>
+ <message>
+ <source>Decay HF ratio (%)</source>
+ <extracomment>DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime.</extracomment>
+ <translation>붕괴 HF 비율 (%)</translation>
+ </message>
+ <message>
+ <source>Decay time (ms)</source>
+ <extracomment>DecayTime: Time over which reverberation is diminished.</extracomment>
+ <translation>붕괴 시간 (ms)</translation>
+ </message>
+ <message>
+ <source>Density (%)</source>
+ <extracomment>Density Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Diffusion value.</extracomment>
+ <translation>밀도 (%)</translation>
+ </message>
+ <message>
+ <source>Diffusion (%)</source>
+ <extracomment>Diffusion: Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Density value.</extracomment>
+ <translation>혼합 (%)</translation>
+ </message>
+ <message>
+ <source>Reflections delay (ms)</source>
+ <extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment>
+ <translation>반사 지연 시간 (ms)</translation>
+ </message>
+ <message>
+ <source>Reflections level (mB)</source>
+ <extracomment>ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude.</extracomment>
+ <translation>반사 레벨 (mB)</translation>
+ </message>
+ <message>
+ <source>Reverb delay (ms)</source>
+ <extracomment>ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation.</extracomment>
+ <translation>리버브 지연 시간 (ms)</translation>
+ </message>
+ <message>
+ <source>Reverb level (mB)</source>
+ <extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment>
+ <translation>리버브 레벨 (mB)</translation>
+ </message>
+ <message>
+ <source>Room HF level</source>
+ <extracomment>RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound.</extracomment>
+ <translation>룸 HF 레벨</translation>
+ </message>
+ <message>
+ <source>Room level (mB)</source>
+ <extracomment>RoomLevel: Master volume control for all reflected sound.</extracomment>
+ <translation>룸 레벨 (mB)</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::MediaObject</name>
+ <message>
+ <source>Error opening source: type not supported</source>
+ <translation>원본 열기 오류: 형식을 지원하지 않음</translation>
+ </message>
+ <message>
+ <source>Error opening source: resource is compressed</source>
+ <translation>원본 열기 오류: 자원이 압축되어 있음</translation>
+ </message>
+ <message>
+ <source>Error opening source: resource not valid</source>
+ <translation>원본 열기 오류: 자원이 올바르지 않음</translation>
+ </message>
+ <message>
+ <source>Error opening source: media type could not be determined</source>
+ <translation>원본 열기 오류: 미디어 형식을 결정할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::StereoWidening</name>
+ <message>
+ <source>Level (%)</source>
+ <translation>레벨 (%)</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::MMF::SurfaceVideoPlayer</name>
+ <message>
+ <source>Video display error</source>
+ <translation>비디오 표시 오류</translation>
+ </message>
+</context>
+<context>
+ <name>Phonon::VolumeSlider</name>
+ <message>
+ <source>Volume: %1%</source>
+ <translation>음량: %1%</translation>
+ </message>
+ <message>
+ <source>Use this slider to adjust the volume. The leftmost position is 0%, the rightmost is %1%</source>
+ <translation>이 슬라이더를 사용하여 음량을 조정하십시오. 맨 왼쪽은 0%, 맨 오른쪽은 %1%입니다</translation>
+ </message>
+ <message>
+ <source>Muted</source>
+ <translation>음소거</translation>
+ </message>
+</context>
+<context>
+ <name>Q3Accel</name>
+ <message>
+ <source>%1, %2 not defined</source>
+ <translation>%1, %2이(가) 정의되지 않았습니다</translation>
+ </message>
+ <message>
+ <source>Ambiguous %1 not handled</source>
+ <translation>모호한 %1이(가) 처리되지 않았습니다</translation>
+ </message>
+</context>
+<context>
+ <name>Q3DataTable</name>
+ <message>
+ <source>True</source>
+ <translation>참</translation>
+ </message>
+ <message>
+ <source>False</source>
+ <translation>거짓</translation>
+ </message>
+ <message>
+ <source>Insert</source>
+ <translation>삽입</translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translation>업데이트</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+</context>
+<context>
+ <name>Q3FileDialog</name>
+ <message>
+ <source>Copy or Move a File</source>
+ <translation>파일 복사 또는 이동</translation>
+ </message>
+ <message>
+ <source>Read: %1</source>
+ <translation>읽기: %1</translation>
+ </message>
+ <message>
+ <source>Write: %1</source>
+ <translation>쓰기: %1</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+ <message>
+ <source>All Files (*)</source>
+ <translation>모든 파일 (*)</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>이름</translation>
+ </message>
+ <message>
+ <source>Size</source>
+ <translation>크기</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <translation>형식</translation>
+ </message>
+ <message>
+ <source>Date</source>
+ <translation>날짜</translation>
+ </message>
+ <message>
+ <source>Attributes</source>
+ <translation>속성</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>확인(&amp;O)</translation>
+ </message>
+ <message>
+ <source>Look &amp;in:</source>
+ <translation>다음에서 찾기(&amp;I):</translation>
+ </message>
+ <message>
+ <source>File &amp;name:</source>
+ <translation>파일 이름(&amp;N):</translation>
+ </message>
+ <message>
+ <source>File &amp;type:</source>
+ <translation>파일 형식(&amp;T):</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>뒤로</translation>
+ </message>
+ <message>
+ <source>One directory up</source>
+ <translation>한 단계 위로</translation>
+ </message>
+ <message>
+ <source>Create New Folder</source>
+ <translation>새 폴더 만들기</translation>
+ </message>
+ <message>
+ <source>List View</source>
+ <translation>목록으로 보기</translation>
+ </message>
+ <message>
+ <source>Detail View</source>
+ <translation>자세히 보기</translation>
+ </message>
+ <message>
+ <source>Preview File Info</source>
+ <translation>파일 정보 미리 보기</translation>
+ </message>
+ <message>
+ <source>Preview File Contents</source>
+ <translation>파일 내용 미리 보기</translation>
+ </message>
+ <message>
+ <source>Read-write</source>
+ <translation>읽기-쓰기</translation>
+ </message>
+ <message>
+ <source>Read-only</source>
+ <translation>읽기 전용</translation>
+ </message>
+ <message>
+ <source>Write-only</source>
+ <translation>쓰기 전용</translation>
+ </message>
+ <message>
+ <source>Inaccessible</source>
+ <translation>접근할 수 없음</translation>
+ </message>
+ <message>
+ <source>Symlink to File</source>
+ <translation>파일로 향한 심볼릭 링크</translation>
+ </message>
+ <message>
+ <source>Symlink to Directory</source>
+ <translation>디렉터리로 향한 심볼릭 링크</translation>
+ </message>
+ <message>
+ <source>Symlink to Special</source>
+ <translation>특수 파일로 향한 심볼릭 링크</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation>파일</translation>
+ </message>
+ <message>
+ <source>Dir</source>
+ <translation>디렉터리</translation>
+ </message>
+ <message>
+ <source>Special</source>
+ <translation>특수 파일</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>열기</translation>
+ </message>
+ <message>
+ <source>Save As</source>
+ <translation>다른 이름으로 저장</translation>
+ </message>
+ <message>
+ <source>&amp;Open</source>
+ <translation>열기(&amp;O)</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>저장(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Rename</source>
+ <translation>이름 바꾸기(&amp;R)</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>삭제(&amp;D)</translation>
+ </message>
+ <message>
+ <source>R&amp;eload</source>
+ <translation>새로 고침(&amp;E)</translation>
+ </message>
+ <message>
+ <source>Sort by &amp;Name</source>
+ <translation>이름으로 정렬(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Sort by &amp;Size</source>
+ <translation>크기로 정렬(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Sort by &amp;Date</source>
+ <translation>날짜로 정렬(&amp;D)</translation>
+ </message>
+ <message>
+ <source>&amp;Unsorted</source>
+ <translation>정렬하지 않음(&amp;U)</translation>
+ </message>
+ <message>
+ <source>Sort</source>
+ <translation>정렬</translation>
+ </message>
+ <message>
+ <source>Show &amp;hidden files</source>
+ <translation>숨김 파일 보이기(&amp;H)</translation>
+ </message>
+ <message>
+ <source>the file</source>
+ <translation>파일</translation>
+ </message>
+ <message>
+ <source>the directory</source>
+ <translation>디렉터리</translation>
+ </message>
+ <message>
+ <source>the symlink</source>
+ <translation>심볼릭 링크</translation>
+ </message>
+ <message>
+ <source>Delete %1</source>
+ <translation>%1 삭제</translation>
+ </message>
+ <message>
+ <source>&lt;qt&gt;Are you sure you wish to delete %1 &quot;%2&quot;?&lt;/qt&gt;</source>
+ <translation>&lt;qt&gt;%1 &quot;%2&quot;을(를) 삭제하시겠습니까?&lt;/qt&gt;</translation>
+ </message>
+ <message>
+ <source>&amp;Yes</source>
+ <translation>예(&amp;Y)</translation>
+ </message>
+ <message>
+ <source>&amp;No</source>
+ <translation>아니오(&amp;N)</translation>
+ </message>
+ <message>
+ <source>New Folder 1</source>
+ <translation>새 폴더 1</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translation>새 폴더</translation>
+ </message>
+ <message>
+ <source>New Folder %1</source>
+ <translation>새 폴더 %1</translation>
+ </message>
+ <message>
+ <source>Find Directory</source>
+ <translation>디렉터리 찾기</translation>
+ </message>
+ <message>
+ <source>Directories</source>
+ <translation>디렉터리</translation>
+ </message>
+ <message>
+ <source>Directory:</source>
+ <translation>디렉터리:</translation>
+ </message>
+ <message>
+ <source>Error</source>
+ <translation>오류</translation>
+ </message>
+ <message>
+ <source>%1
+File not found.
+Check path and filename.</source>
+ <translation>%1
+파일을 찾을 수 없습니다.
+경로와 파일 이름을 확인하십시오.</translation>
+ </message>
+ <message>
+ <source>All Files (*.*)</source>
+ <translation>모든 파일 (*.*)</translation>
+ </message>
+ <message>
+ <source>Open </source>
+ <translation>열기</translation>
+ </message>
+ <message>
+ <source>Select a Directory</source>
+ <translation>디렉터리 선택</translation>
+ </message>
+</context>
+<context>
+ <name>Q3LocalFs</name>
+ <message>
+ <source>Could not read directory
+%1</source>
+ <translation>다음 디렉터리를 읽을 수 없음
+%1</translation>
+ </message>
+ <message>
+ <source>Could not create directory
+%1</source>
+ <translation>다음 디렉터리를 만들 수 없음
+%1</translation>
+ </message>
+ <message>
+ <source>Could not remove file or directory
+%1</source>
+ <translation>파일이나 디렉터리를 삭제할 수 없음
+%1</translation>
+ </message>
+ <message>
+ <source>Could not rename
+%1
+to
+%2</source>
+ <translation>%1
+의 이름을
+%2
+(으)로 바꿀 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not open
+%1</source>
+ <translation>다음을 열 수 없음
+%1</translation>
+ </message>
+ <message>
+ <source>Could not write
+%1</source>
+ <translation>다음에 쓸 수 없음
+%1</translation>
+ </message>
+</context>
+<context>
+ <name>Q3MainWindow</name>
+ <message>
+ <source>Line up</source>
+ <translation>정렬하기</translation>
+ </message>
+ <message>
+ <source>Customize...</source>
+ <translation>사용자 정의...</translation>
+ </message>
+</context>
+<context>
+ <name>Q3NetworkProtocol</name>
+ <message>
+ <source>Operation stopped by the user</source>
+ <translation>사용자가 동작을 중지함</translation>
+ </message>
+</context>
+<context>
+ <name>Q3ProgressDialog</name>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+</context>
+<context>
+ <name>Q3TabDialog</name>
+ <message>
+ <source>OK</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <source>Apply</source>
+ <translation>적용</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>도움말</translation>
+ </message>
+ <message>
+ <source>Defaults</source>
+ <translation>기본값 복원</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+</context>
+<context>
+ <name>Q3TextEdit</name>
+ <message>
+ <source>&amp;Undo</source>
+ <translation>실행 취소(&amp;U)</translation>
+ </message>
+ <message>
+ <source>&amp;Redo</source>
+ <translation>다시 실행(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Cu&amp;t</source>
+ <translation>잘라내기(&amp;T)</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>복사(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>붙여넣기(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>지우기</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>모두 선택</translation>
+ </message>
+</context>
+<context>
+ <name>Q3TitleBar</name>
+ <message>
+ <source>System</source>
+ <translation>시스템</translation>
+ </message>
+ <message>
+ <source>Restore up</source>
+ <translation>복원</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>최소화</translation>
+ </message>
+ <message>
+ <source>Restore down</source>
+ <translation>복원</translation>
+ </message>
+ <message>
+ <source>Maximize</source>
+ <translation>최대화</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>Contains commands to manipulate the window</source>
+ <translation>창을 조작하는 명령을 포함합니다</translation>
+ </message>
+ <message>
+ <source>Puts a minimized window back to normal</source>
+ <translation>최소화된 창을 되돌립니다</translation>
+ </message>
+ <message>
+ <source>Moves the window out of the way</source>
+ <translation>창을 숨깁니다</translation>
+ </message>
+ <message>
+ <source>Puts a maximized window back to normal</source>
+ <translation>최대화된 창을 되돌립니다</translation>
+ </message>
+ <message>
+ <source>Makes the window full screen</source>
+ <translation>창을 전체 화면으로 만듭니다</translation>
+ </message>
+ <message>
+ <source>Closes the window</source>
+ <translation>창을 닫습니다</translation>
+ </message>
+ <message>
+ <source>Displays the name of the window and contains controls to manipulate it</source>
+ <translation>창의 이름을 보여주고 조작하기 위한 컨트롤을 포함합니다</translation>
+ </message>
+</context>
+<context>
+ <name>Q3ToolBar</name>
+ <message>
+ <source>More...</source>
+ <translation>더 보기...</translation>
+ </message>
+</context>
+<context>
+ <name>Q3UrlOperator</name>
+ <message>
+ <source>The protocol `%1&apos; is not supported</source>
+ <translation>프로토콜 `%1&apos;은(는) 지원하지 않습니다</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support listing directories</source>
+ <translation>프로토콜 `%1&apos;에서 디렉터리 목록을 볼 수 없습니다</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support creating new directories</source>
+ <translation>프로토콜 `%1&apos;에서 새 디렉터리를 만들 수 없습니다</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support removing files or directories</source>
+ <translation>프로토콜 `%1&apos;에서 파일이나 디렉터리를 삭제할 수 없습니다</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support renaming files or directories</source>
+ <translation>프로토콜 `%1&apos;에서 파일이나 디렉터리의 이름을 바꿀 수 없습니다</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support getting files</source>
+ <translation>프로토콜 `%1&apos;에서 파일을 가져올 수 없습니다</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support putting files</source>
+ <translation>프로토콜 `%1&apos;에서 파일을 올릴 수 없습니다</translation>
+ </message>
+ <message>
+ <source>The protocol `%1&apos; does not support copying or moving files or directories</source>
+ <translation>프로토콜 `%1&apos;에서 파일이나 디렉터리를 복사하거나 이동할 수 없습니다</translation>
+ </message>
+ <message>
+ <source>(unknown)</source>
+ <translation>(알 수 없음)</translation>
+ </message>
+</context>
+<context>
+ <name>Q3Wizard</name>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>취소(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&lt; &amp;Back</source>
+ <translation>&lt; 이전(&amp;B)</translation>
+ </message>
+ <message>
+ <source>&amp;Next &gt;</source>
+ <translation>다음 (&amp;N) &gt;</translation>
+ </message>
+ <message>
+ <source>&amp;Finish</source>
+ <translation>완료(&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>도움말(&amp;H)</translation>
+ </message>
+</context>
+<context>
+ <name>QAbstractSocket</name>
+ <message>
+ <source>Socket operation timed out</source>
+ <translation>소켓 작업 시간 초과</translation>
+ </message>
+ <message>
+ <source>Operation on socket is not supported</source>
+ <translation>소켓 작업이 지원되지 않음</translation>
+ </message>
+ <message>
+ <source>Host not found</source>
+ <translation>호스트를 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>Connection refused</source>
+ <translation>연결이 거부됨</translation>
+ </message>
+ <message>
+ <source>Connection timed out</source>
+ <translation>연결 시간 초과됨</translation>
+ </message>
+ <message>
+ <source>Socket is not connected</source>
+ <translation>소켓이 연결되지 않음</translation>
+ </message>
+ <message>
+ <source>Network unreachable</source>
+ <translation>네트워크에 접근할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QAbstractSpinBox</name>
+ <message>
+ <source>&amp;Select All</source>
+ <translation>모두 선택(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;Step up</source>
+ <translation>한 단계 위로(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Step &amp;down</source>
+ <translation>한 단계 아래로(&amp;D)</translation>
+ </message>
+</context>
+<context>
+ <name>QAccessibleButton</name>
+ <message>
+ <source>Press</source>
+ <translation>누름</translation>
+ </message>
+</context>
+<context>
+ <name>QApplication</name>
+ <message>
+ <source>Activate</source>
+ <translation>활성화</translation>
+ </message>
+ <message>
+ <source>Activates the program&apos;s main window</source>
+ <translation>프로그램의 주 창 활성화</translation>
+ </message>
+ <message>
+ <source>Executable &apos;%1&apos; requires Qt %2, found Qt %3.</source>
+ <translation>실행 파일 &apos;%1&apos;은(는) Qt %2을(를) 필요로 하지만 현재 Qt %3이(가) 설치되어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Incompatible Qt Library Error</source>
+ <translation>Qt 라이브러리 호환성 오류</translation>
+ </message>
+ <message>
+ <source>QT_LAYOUT_DIRECTION</source>
+ <comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
+ <translation>LTR</translation>
+ </message>
+</context>
+<context>
+ <name>QAxSelect</name>
+ <message>
+ <source>Select ActiveX Control</source>
+ <translation>ActiveX 컨트롤 선택</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>취소(&amp;C)</translation>
+ </message>
+ <message>
+ <source>COM &amp;Object:</source>
+ <translation>COM 객체(&amp;O):</translation>
+ </message>
+</context>
+<context>
+ <name>QCheckBox</name>
+ <message>
+ <source>Uncheck</source>
+ <translation>선택 해제</translation>
+ </message>
+ <message>
+ <source>Check</source>
+ <translation>선택</translation>
+ </message>
+ <message>
+ <source>Toggle</source>
+ <translation>선택 반전</translation>
+ </message>
+</context>
+<context>
+ <name>QColorDialog</name>
+ <message>
+ <source>Hu&amp;e:</source>
+ <translation>색상(&amp;E):</translation>
+ </message>
+ <message>
+ <source>&amp;Sat:</source>
+ <translation>채도(&amp;S):</translation>
+ </message>
+ <message>
+ <source>&amp;Val:</source>
+ <translation>휘도(&amp;V):</translation>
+ </message>
+ <message>
+ <source>&amp;Red:</source>
+ <translation>빨강(&amp;R):</translation>
+ </message>
+ <message>
+ <source>&amp;Green:</source>
+ <translation>녹색(&amp;G):</translation>
+ </message>
+ <message>
+ <source>Bl&amp;ue:</source>
+ <translation>파랑(&amp;U):</translation>
+ </message>
+ <message>
+ <source>A&amp;lpha channel:</source>
+ <translation>투명도(&amp;L):</translation>
+ </message>
+ <message>
+ <source>Select Color</source>
+ <translation>색 선택</translation>
+ </message>
+ <message>
+ <source>&amp;Basic colors</source>
+ <translation>기본 색상(&amp;B)</translation>
+ </message>
+ <message>
+ <source>&amp;Custom colors</source>
+ <translation>사용자 정의 색상(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Add to Custom Colors</source>
+ <translation>사용자 정의 색상에 추가(&amp;A)</translation>
+ </message>
+</context>
+<context>
+ <name>QComboBox</name>
+ <message>
+ <source>False</source>
+ <translation>거짓</translation>
+ </message>
+ <message>
+ <source>True</source>
+ <translation>참</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>열기</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+</context>
+<context>
+ <name>QCoreApplication</name>
+ <message>
+ <source>%1: already exists</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: 이미 존재함</translation>
+ </message>
+ <message>
+ <source>%1: does not exist</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: 존재하지 않음</translation>
+ </message>
+ <message>
+ <source>%1: out of resources</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: 자원 부족</translation>
+ </message>
+ <message>
+ <source>%1: unknown error %2</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: 알 수 없는 오류 %2</translation>
+ </message>
+ <message>
+ <source>%1: key is empty</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: 키가 없음</translation>
+ </message>
+ <message>
+ <source>%1: unable to make key</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: 키를 만들 수 없음</translation>
+ </message>
+ <message>
+ <source>%1: ftok failed</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: ftok 실패</translation>
+ </message>
+</context>
+<context>
+ <name>QDB2Driver</name>
+ <message>
+ <source>Unable to connect</source>
+ <translation>연결할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>트랜잭션을 커밋할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>트랜잭션을 되돌릴 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to set autocommit</source>
+ <translation>자동 커밋을 설정할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QDB2Result</name>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>구문을 실행할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>구문을 준비할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to bind variable</source>
+ <translation>변수를 바인딩할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to fetch record %1</source>
+ <translation>레코드 %1을(를) 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to fetch next</source>
+ <translation>다음 항목을 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to fetch first</source>
+ <translation>이전 항목을 가져올 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QDateTimeEdit</name>
+ <message>
+ <source>AM</source>
+ <translation>오전</translation>
+ </message>
+ <message>
+ <source>am</source>
+ <translation>오전</translation>
+ </message>
+ <message>
+ <source>PM</source>
+ <translation>오후</translation>
+ </message>
+ <message>
+ <source>pm</source>
+ <translation>오후</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAbstractAnimation</name>
+ <message>
+ <source>Cannot animate non-existent property &quot;%1&quot;</source>
+ <translation>존재하지 않는 속성 &quot;%1&quot;에 애니메이션을 설정할 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot animate read-only property &quot;%1&quot;</source>
+ <translation>읽기 전용 속성 &quot;%1&quot;에 애니메이션을 설정할 수 없음</translation>
+ </message>
+ <message>
+ <source>Animation is an abstract class</source>
+ <translation>애니메이션이 추상 클래스임</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAnchorAnimation</name>
+ <message>
+ <source>Cannot set a duration of &lt; 0</source>
+ <translation>0보다 작은 지속 시간을 설정할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAnchors</name>
+ <message>
+ <source>Possible anchor loop detected on fill.</source>
+ <translation>fill에서 앵커 반복 감지됨.</translation>
+ </message>
+ <message>
+ <source>Possible anchor loop detected on centerIn.</source>
+ <translation>centerIn에서 앵커 반복 감지됨.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor to an item that isn&apos;t a parent or sibling.</source>
+ <translation>부모나 자식이 아닌 항목에 앵커를 설정할 수 없음.</translation>
+ </message>
+ <message>
+ <source>Possible anchor loop detected on vertical anchor.</source>
+ <translation>수직 앵커에서 앵커 반복 감지됨.</translation>
+ </message>
+ <message>
+ <source>Possible anchor loop detected on horizontal anchor.</source>
+ <translation>수평 앵커에서 앵커 반복 감지됨.</translation>
+ </message>
+ <message>
+ <source>Cannot specify left, right, and hcenter anchors.</source>
+ <translation>left, right, hcenter 앵커를 지정할 수 없음.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor to a null item.</source>
+ <translation>빈 항목에 앵커를 설정할 수 없음.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor a horizontal edge to a vertical edge.</source>
+ <translation>수평선을 수직선에 앵커로 설정할 수 없음.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor item to self.</source>
+ <translation>자기 자신에 앵커를 설정할 수 없음.</translation>
+ </message>
+ <message>
+ <source>Cannot specify top, bottom, and vcenter anchors.</source>
+ <translation>top, bottom, vcenter 앵커를 설정할 수 없음.</translation>
+ </message>
+ <message>
+ <source>Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.</source>
+ <translation>베이스라인 앵커를 top, bottom, vcenter 앵커와 같이 사용할 수 없음.</translation>
+ </message>
+ <message>
+ <source>Cannot anchor a vertical edge to a horizontal edge.</source>
+ <translation>수직선을 수평선에 앵커로 설정할 수 없음.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeAnimatedImage</name>
+ <message>
+ <source>Qt was built without support for QMovie</source>
+ <translation>Qt 빌드에 QMovie 지원이 빠졌음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeBehavior</name>
+ <message>
+ <source>Cannot change the animation assigned to a Behavior.</source>
+ <translation>Behavior에 할당된 애니메이션을 변경할 수 없음.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeBinding</name>
+ <message>
+ <source>Binding loop detected for property &quot;%1&quot;</source>
+ <translation>속성 &quot;%1&quot;에서 바인딩 반복이 감지됨</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeCompiledBindings</name>
+ <message>
+ <source>Binding loop detected for property &quot;%1&quot;</source>
+ <translation>속성 &quot;%1&quot;에서 바인딩 반복이 감지됨</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeCompiler</name>
+ <message>
+ <source>Invalid property assignment: &quot;%1&quot; is a read-only property</source>
+ <translation>잘못된 속성 대입: &quot;%1&quot;은(는) 읽기 전용 속성</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: unknown enumeration</source>
+ <translation>잘못된 속성 대입: 알 수 없는 열거형</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: string expected</source>
+ <translation>잘못된 속성 대입: 문자열이 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: url expected</source>
+ <translation>잘못된 속성 대입: url이 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: unsigned int expected</source>
+ <translation>잘못된 속성 대입: 부호 없는 int가 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: int expected</source>
+ <translation>잘못된 속성 대입: int가 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: number expected</source>
+ <translation>잘못된 속성 대입: 숫자가 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: color expected</source>
+ <translation>잘못된 속성 대입: 색상이 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: date expected</source>
+ <translation>잘못된 속성 대입: 날짜가 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: time expected</source>
+ <translation>잘못된 속성 대입: 시간이 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: datetime expected</source>
+ <translation>잘못된 속성 대입: 날짜와 시간이 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: point expected</source>
+ <translation>잘못된 속성 대입: 점이 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: size expected</source>
+ <translation>잘못된 속성 대입: 크기가 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: rect expected</source>
+ <translation>잘못된 속성 대입: 사각형이 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: boolean expected</source>
+ <translation>잘못된 속성 대입: 참/거짓이 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: 3D vector expected</source>
+ <translation>잘못된 속성 대입: 3차원 벡터가 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: unsupported type &quot;%1&quot;</source>
+ <translation>잘못된 속성 대입: 지원하지 않는 형식 &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <source>Element is not creatable.</source>
+ <translation>원소를 만들 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Component elements may not contain properties other than id</source>
+ <translation>Component 원소는 id 이외의 다른 속성을 포함할 수 없음</translation>
+ </message>
+ <message>
+ <source>Invalid component id specification</source>
+ <translation>잘못된 컴포넌트 id 지정</translation>
+ </message>
+ <message>
+ <source>id is not unique</source>
+ <translation>중복되는 id가 있음</translation>
+ </message>
+ <message>
+ <source>Invalid component body specification</source>
+ <translation>잘못된 컴포넌트 body 지정</translation>
+ </message>
+ <message>
+ <source>Component objects cannot declare new properties.</source>
+ <translation>컴포넌트 개체에서는 새로운 속성을 정의할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Component objects cannot declare new signals.</source>
+ <translation>컴포넌트 개체에서는 새로운 시그널을 정의할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Component objects cannot declare new functions.</source>
+ <translation>컴포넌트 개체에서는 새로운 함수를 정의할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Cannot create empty component specification</source>
+ <translation>비어 있는 컴포넌트 정의를 만들 수 없음</translation>
+ </message>
+ <message>
+ <source>Incorrectly specified signal assignment</source>
+ <translation>잘못 지정된 시그널 할당</translation>
+ </message>
+ <message>
+ <source>Cannot assign a value to a signal (expecting a script to be run)</source>
+ <translation>값을 시그널에 지정할 수 없음 (스크립트가 실행될 것을 예상함)</translation>
+ </message>
+ <message>
+ <source>Empty signal assignment</source>
+ <translation>빈 시그널 할당</translation>
+ </message>
+ <message>
+ <source>Empty property assignment</source>
+ <translation>빈 속성 할당</translation>
+ </message>
+ <message>
+ <source>Attached properties cannot be used here</source>
+ <translation>첨부된 속성을 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>Non-existent attached object</source>
+ <translation>존재하지 않는 첨부된 개체</translation>
+ </message>
+ <message>
+ <source>Invalid attached object assignment</source>
+ <translation>잘못된 첨부된 개체 할당</translation>
+ </message>
+ <message>
+ <source>Cannot assign to non-existent default property</source>
+ <translation>존재하지 않는 기본 속성에 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+ <translation>존재하지 않는 속성 &quot;%1&quot;에 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Invalid use of namespace</source>
+ <translation>잘못된 네임스페이스 사용</translation>
+ </message>
+ <message>
+ <source>Not an attached property name</source>
+ <translation>첨부된 속성 이름이 아님</translation>
+ </message>
+ <message>
+ <source>Invalid use of id property</source>
+ <translation>id 속성을 잘못 사용함</translation>
+ </message>
+ <message>
+ <source>Property has already been assigned a value</source>
+ <translation>속성에 이미 값이 할당됨</translation>
+ </message>
+ <message>
+ <source>Invalid grouped property access</source>
+ <translation>잘못된 그룹 속성 접근</translation>
+ </message>
+ <message>
+ <source>Cannot assign a value directly to a grouped property</source>
+ <translation>그룹 속성에 값을 직접 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Invalid property use</source>
+ <translation>속성을 잘못 사용함</translation>
+ </message>
+ <message>
+ <source>Property assignment expected</source>
+ <translation>속성 할당이 필요함</translation>
+ </message>
+ <message>
+ <source>Single property assignment expected</source>
+ <translation>단일 속성 할당이 필요함</translation>
+ </message>
+ <message>
+ <source>Unexpected object assignment</source>
+ <translation>예상하지 못한 개체 할당</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to list</source>
+ <translation>개체를 목록에 대입할 수 없음</translation>
+ </message>
+ <message>
+ <source>Can only assign one binding to lists</source>
+ <translation>목록에는 한 바인딩만 할당할 수 있음</translation>
+ </message>
+ <message>
+ <source>Cannot assign primitives to lists</source>
+ <translation>원시 타입을 목록에 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot assign multiple values to a script property</source>
+ <translation>스크립트 속성에 다중 값을 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Invalid property assignment: script expected</source>
+ <translation>잘못된 속성 대입: script가 필요함</translation>
+ </message>
+ <message>
+ <source>Cannot assign multiple values to a singular property</source>
+ <translation>단일 속성에 여러 값을 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to property</source>
+ <translation>개체를 속성에 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>&quot;%1&quot; cannot operate on &quot;%2&quot;</source>
+ <translation>&quot;%1&quot;은(는) &quot;%2&quot;에서 작동할 수 없음</translation>
+ </message>
+ <message>
+ <source>Duplicate default property</source>
+ <translation>중복된 기본 속성</translation>
+ </message>
+ <message>
+ <source>Duplicate property name</source>
+ <translation>중복된 속성 이름</translation>
+ </message>
+ <message>
+ <source>Property names cannot begin with an upper case letter</source>
+ <translation>속성 이름은 대문자로 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Illegal property name</source>
+ <translation>잘못된 속성 이름</translation>
+ </message>
+ <message>
+ <source>Duplicate signal name</source>
+ <translation>중복된 시그널 이름</translation>
+ </message>
+ <message>
+ <source>Signal names cannot begin with an upper case letter</source>
+ <translation>시그널 이름은 대문자로 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Illegal signal name</source>
+ <translation>잘못된 시그널 이름</translation>
+ </message>
+ <message>
+ <source>Duplicate method name</source>
+ <translation>중복된 메서드 이름</translation>
+ </message>
+ <message>
+ <source>Method names cannot begin with an upper case letter</source>
+ <translation>메서드 이름은 대문자로 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Illegal method name</source>
+ <translation>잘못된 메서드 이름</translation>
+ </message>
+ <message>
+ <source>Property value set multiple times</source>
+ <translation>속성 값이 여러 번 설정됨</translation>
+ </message>
+ <message>
+ <source>Invalid property nesting</source>
+ <translation>잘못된 속성 중첩</translation>
+ </message>
+ <message>
+ <source>Cannot override FINAL property</source>
+ <translation>FINAL 속성을 재정의할 수 없음</translation>
+ </message>
+ <message>
+ <source>Invalid property type</source>
+ <translation>잘못된 속성 형식</translation>
+ </message>
+ <message>
+ <source>Invalid empty ID</source>
+ <translation>잘못된 빈 ID</translation>
+ </message>
+ <message>
+ <source>IDs cannot start with an uppercase letter</source>
+ <translation>ID는 대문자로 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>IDs must start with a letter or underscore</source>
+ <translation>ID는 글자나 밑줄로 시작해야 함</translation>
+ </message>
+ <message>
+ <source>IDs must contain only letters, numbers, and underscores</source>
+ <translation>ID는 글자, 숫자, 밑줄만 포함해야 함</translation>
+ </message>
+ <message>
+ <source>ID illegally masks global JavaScript property</source>
+ <translation>ID가 전역 자바스크립트 속성을 가림</translation>
+ </message>
+ <message>
+ <source>No property alias location</source>
+ <translation>속성 별명 위치가 지정되지 않음</translation>
+ </message>
+ <message>
+ <source>Invalid alias location</source>
+ <translation>잘못된 별명 위치</translation>
+ </message>
+ <message>
+ <source>Invalid alias reference. An alias reference must be specified as &lt;id&gt;, &lt;id&gt;.&lt;property&gt; or &lt;id&gt;.&lt;value property&gt;.&lt;property&gt;</source>
+ <translation>잘못된 별명 참조. 별명 참조는 &lt;id&gt;, &lt;id&gt;.&lt;property&gt; 또는 &lt;id&gt;.&lt;value property&gt;.&lt;property&gt;여야 함</translation>
+ </message>
+ <message>
+ <source>Invalid alias reference. Unable to find id &quot;%1&quot;</source>
+ <translation>잘못된 별명 참조. id &quot;%1&quot;을(를) 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>Alias property exceeds alias bounds</source>
+ <translation>별명 속성이 경계를 벗어남</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeComponent</name>
+ <message>
+ <source>Invalid empty URL</source>
+ <translation>잘못된 빈 URL</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeConnections</name>
+ <message>
+ <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+ <translation>존재하지 않는 속성 &quot;%1&quot;에 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Connections: nested objects not allowed</source>
+ <translation>연결: 중첩된 개체를 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>Connections: syntax error</source>
+ <translation>연결: 문법 오류</translation>
+ </message>
+ <message>
+ <source>Connections: script expected</source>
+ <translation>연결: 스크립트가 필요함</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeEngine</name>
+ <message>
+ <source>executeSql called outside transaction()</source>
+ <translation>transaction() 밖에서 executeSql이 호출됨</translation>
+ </message>
+ <message>
+ <source>Read-only Transaction</source>
+ <translation>읽기 전용 트랜잭션</translation>
+ </message>
+ <message>
+ <source>Version mismatch: expected %1, found %2</source>
+ <translation>버전 불일치: 사용 중인 버전 %2, 필요한 버전 %1</translation>
+ </message>
+ <message>
+ <source>SQL transaction failed</source>
+ <translation>SQL 트랜잭션 실패</translation>
+ </message>
+ <message>
+ <source>transaction: missing callback</source>
+ <translation>트랜잭션: 콜백이 없음</translation>
+ </message>
+ <message>
+ <source>SQL: database version mismatch</source>
+ <translation>SQL: 데이터베이스 버전 불일치</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeFlipable</name>
+ <message>
+ <source>front is a write-once property</source>
+ <translation>front는 한 번만 쓸 수 있는 속성임</translation>
+ </message>
+ <message>
+ <source>back is a write-once property</source>
+ <translation>back은 한 번만 쓸 수 있는 속성임</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeImportDatabase</name>
+ <message>
+ <source>cannot load module &quot;%1&quot;: File name case mismatch for &quot;%2&quot;</source>
+ <translation>모듈 &quot;%1&quot;을(를) 불러올 수 없음: &quot;%2&quot;와(과) 파일 이름 대소문자가 일치하지 않음</translation>
+ </message>
+ <message>
+ <source>module &quot;%1&quot; definition &quot;%2&quot; not readable</source>
+ <translation>모듈 &quot;%1&quot;의 정의 &quot;%2&quot;을(를) 읽을 수 없음</translation>
+ </message>
+ <message>
+ <source>plugin cannot be loaded for module &quot;%1&quot;: %2</source>
+ <translation>모듈 &quot;%1&quot;의 플러그인을 불러올 수 없음: %2</translation>
+ </message>
+ <message>
+ <source>module &quot;%1&quot; plugin &quot;%2&quot; not found</source>
+ <translation>모듈 &quot;%1&quot;의 플러그인 &quot;%2&quot;을(를) 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>module &quot;%1&quot; version %2.%3 is not installed</source>
+ <translation>모듈 &quot;%1&quot;의 버전 %2.%3이(가) 설치되지 않았음</translation>
+ </message>
+ <message>
+ <source>module &quot;%1&quot; is not installed</source>
+ <translation>모듈 &quot;%1&quot;이(가) 설치되지 않았음</translation>
+ </message>
+ <message>
+ <source>&quot;%1&quot;: no such directory</source>
+ <translation>&quot;%1&quot;: 그러한 디렉터리가 없음</translation>
+ </message>
+ <message>
+ <source>import &quot;%1&quot; has no qmldir and no namespace</source>
+ <translation>import &quot;%1&quot;에 qmldir과 네임스페이스가 없음</translation>
+ </message>
+ <message>
+ <source>- %1 is not a namespace</source>
+ <translation>- %1이(가) 네임스페이스가 아님</translation>
+ </message>
+ <message>
+ <source>- nested namespaces not allowed</source>
+ <translation>- 중첩된 네임스페이스를 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>local directory</source>
+ <translation>로컬 디렉터리</translation>
+ </message>
+ <message>
+ <source>is ambiguous. Found in %1 and in %2</source>
+ <translation>이(가) 모호합니다. %1와(과) %2에서 찾았습니다</translation>
+ </message>
+ <message>
+ <source>is ambiguous. Found in %1 in version %2.%3 and %4.%5</source>
+ <translation>이(가) 모호합니다. %1에서 버전 %2.%3, %4.%5을(를) 찾았습니다</translation>
+ </message>
+ <message>
+ <source>is instantiated recursively</source>
+ <translation>이(가) 재귀적으로 인스턴스화되었습니다</translation>
+ </message>
+ <message>
+ <source>is not a type</source>
+ <translation>이(가) 형식이 아닙니다</translation>
+ </message>
+ <message>
+ <source>File name case mismatch for &quot;%2&quot;</source>
+ <translation>파일 이름의 대소문자가 &quot;%2&quot;와(과) 일치하지 않습니다</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeKeyNavigationAttached</name>
+ <message>
+ <source>KeyNavigation is only available via attached properties</source>
+ <translation>KeyNavigation은 연결된 속성에만 사용할 수 있음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeKeysAttached</name>
+ <message>
+ <source>Keys is only available via attached properties</source>
+ <translation>Keys는 연결된 속성에만 사용할 수 있음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeListModel</name>
+ <message>
+ <source>remove: index %1 out of range</source>
+ <translation>remove: 인덱스 %1이(가) 범위를 벗어남</translation>
+ </message>
+ <message>
+ <source>insert: value is not an object</source>
+ <translation>insert: 값이 개체가 아님</translation>
+ </message>
+ <message>
+ <source>insert: index %1 out of range</source>
+ <translation>insert: 인덱스 %1이(가) 범위를 벗어남</translation>
+ </message>
+ <message>
+ <source>move: out of range</source>
+ <translation>move: 범위를 벗어남</translation>
+ </message>
+ <message>
+ <source>append: value is not an object</source>
+ <translation>append: 값이 개체가 아님</translation>
+ </message>
+ <message>
+ <source>set: value is not an object</source>
+ <translation>set: 값이 개체가 아님</translation>
+ </message>
+ <message>
+ <source>set: index %1 out of range</source>
+ <translation>set: 인덱스 %1이(가) 범위를 벗어남</translation>
+ </message>
+ <message>
+ <source>ListElement: cannot contain nested elements</source>
+ <translation>ListElement: 중첩된 원소를 포함할 수 없음</translation>
+ </message>
+ <message>
+ <source>ListElement: cannot use reserved &quot;id&quot; property</source>
+ <translation>ListElement: 예약된 &quot;id&quot; 속성을 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>ListElement: cannot use script for property value</source>
+ <translation>ListElement: 속성 값으로 스크립트를 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>ListModel: undefined property &apos;%1&apos;</source>
+ <translation>ListModel: 정의되지 않은 속성 &apos;%1&apos;</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeLoader</name>
+ <message>
+ <source>Loader does not support loading non-visual elements.</source>
+ <translation>로더에서 비 시각적 구성 요소를 불러올 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeParentAnimation</name>
+ <message>
+ <source>Unable to preserve appearance under complex transform</source>
+ <translation>복합 변형 이후 모양을 보존할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under non-uniform scale</source>
+ <translation>불균일 크기 조정 이후 모양을 보존할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under scale of 0</source>
+ <translation>0 이하로 크기를 조정했을 때 모양을 보존할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeParentChange</name>
+ <message>
+ <source>Unable to preserve appearance under complex transform</source>
+ <translation>복합 변형 이후 모양을 보존할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under non-uniform scale</source>
+ <translation>불균일 크기 조정 이후 모양을 보존할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to preserve appearance under scale of 0</source>
+ <translation>0 이하로 크기를 조정했을 때 모양을 보존할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeParser</name>
+ <message>
+ <source>Illegal unicode escape sequence</source>
+ <translation>잘못된 유니코드 탈출 시퀀스</translation>
+ </message>
+ <message>
+ <source>Illegal character</source>
+ <translation>잘못된 글자</translation>
+ </message>
+ <message>
+ <source>Unclosed string at end of line</source>
+ <translation>줄 끝에서 닫히지 않은 문자열</translation>
+ </message>
+ <message>
+ <source>Illegal escape squence</source>
+ <translation>잘못된 탈출 시퀀스</translation>
+ </message>
+ <message>
+ <source>Unclosed comment at end of file</source>
+ <translation>줄 끝에서 닫히지 않은 주석</translation>
+ </message>
+ <message>
+ <source>Illegal syntax for exponential number</source>
+ <translation>잘못된 지수 문법</translation>
+ </message>
+ <message>
+ <source>Identifier cannot start with numeric literal</source>
+ <translation>식별자는 숫자로 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression literal</source>
+ <translation>끝나지 않은 정규 표현식 리터럴</translation>
+ </message>
+ <message>
+ <source>Invalid regular expression flag &apos;%0&apos;</source>
+ <translation>잘못된 정규 표현식 플래그 &apos;%0&apos;</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression backslash sequence</source>
+ <translation>종료되지 않은 정규 표현식 백슬래시 시퀀스</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression class</source>
+ <translation>종료되지 않은 정규 표현식 클래스</translation>
+ </message>
+ <message>
+ <source>Syntax error</source>
+ <translation>구문 오류</translation>
+ </message>
+ <message>
+ <source>Unexpected token `%1&apos;</source>
+ <translation>예상하지 못한 토큰 &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <source>Expected token `%1&apos;</source>
+ <translation>토큰 &apos;%1&apos;이(가) 필요함</translation>
+ </message>
+ <message>
+ <source>Property value set multiple times</source>
+ <translation>속성 값이 여러 번 설정됨</translation>
+ </message>
+ <message>
+ <source>Expected type name</source>
+ <translation>형식 이름이 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid import qualifier ID</source>
+ <translation>잘못된 가져오기 식별자 ID</translation>
+ </message>
+ <message>
+ <source>Reserved name &quot;Qt&quot; cannot be used as an qualifier</source>
+ <translation>예약됨 이름 &quot;Qt&quot;는 지정자 이름으로 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>Script import qualifiers must be unique.</source>
+ <translation>스크립트 가져오기 지정자는 고유해야 합니다.</translation>
+ </message>
+ <message>
+ <source>Script import requires a qualifier</source>
+ <translation>스크립트를 가져오려면 지정자가 필요함</translation>
+ </message>
+ <message>
+ <source>Library import requires a version</source>
+ <translation>라이브러리를 가져오려면 버전이 필요함</translation>
+ </message>
+ <message>
+ <source>Expected parameter type</source>
+ <translation>인자 type이 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid property type modifier</source>
+ <translation>잘못된 속성 type 수정자</translation>
+ </message>
+ <message>
+ <source>Unexpected property type modifier</source>
+ <translation>예상하지 못한 속성 type 수정자</translation>
+ </message>
+ <message>
+ <source>Expected property type</source>
+ <translation>속성 type이 필요함</translation>
+ </message>
+ <message>
+ <source>Readonly not yet supported</source>
+ <translation>읽기 전용이 지원되지 않음</translation>
+ </message>
+ <message>
+ <source>JavaScript declaration outside Script element</source>
+ <translation>Script 원소 밖에서 자바스크립트가 선언됨</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePauseAnimation</name>
+ <message>
+ <source>Cannot set a duration of &lt; 0</source>
+ <translation>0보다 작은 지속 시간을 설정할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePixmap</name>
+ <message>
+ <source>Error decoding: %1: %2</source>
+ <translation>%1 디코딩 중 오류 발생: %2</translation>
+ </message>
+ <message>
+ <source>Failed to get image from provider: %1</source>
+ <translation>공급자에서 그림을 가져올 수 없음: %1</translation>
+ </message>
+ <message>
+ <source>Cannot open: %1</source>
+ <translation>다음을 열 수 없음: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePropertyAnimation</name>
+ <message>
+ <source>Cannot set a duration of &lt; 0</source>
+ <translation>0보다 작은 지속 시간을 설정할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativePropertyChanges</name>
+ <message>
+ <source>PropertyChanges does not support creating state-specific objects.</source>
+ <translation>PropertyChanges는 상태별 개체를 만들 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Cannot assign to non-existent property &quot;%1&quot;</source>
+ <translation>존재하지 않는 속성 &quot;%1&quot;에 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot assign to read-only property &quot;%1&quot;</source>
+ <translation>읽기 전용 속성 &quot;%1&quot;에 할당할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeTextInput</name>
+ <message>
+ <source>Could not load cursor delegate</source>
+ <translation>커서 선언을 불러올 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not instantiate cursor delegate</source>
+ <translation>커서 선언을 인스턴스화할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeTypeLoader</name>
+ <message>
+ <source>Script %1 unavailable</source>
+ <translation>스크립트 %1을(를) 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>Type %1 unavailable</source>
+ <translation>형식 %1을(를) 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>Namespace %1 cannot be used as a type</source>
+ <translation>네임스페이스 %1을(를) 형식으로 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>%1 %2</source>
+ <translation>%1 %2</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeVME</name>
+ <message>
+ <source>Unable to create object of type %1</source>
+ <translation>형식 %1인 개체를 만들 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot assign value %1 to property %2</source>
+ <translation>속성 %2에 값 %1을(를) 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot assign object type %1 with no default method</source>
+ <translation>개체 타입 %1에 기본 메서드를 지정하지 않고 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot connect mismatched signal/slot %1 %vs. %2</source>
+ <translation>일치하지 않는 시그널/슬롯 %1 %vs %2을(를) 연결할 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot assign an object to signal property %1</source>
+ <translation>개체를 시그널 속성 %1에 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to list</source>
+ <translation>개체를 목록에 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot assign object to interface property</source>
+ <translation>개체를 인터페이스 속성에 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to create attached object</source>
+ <translation>첨부된 개체를 만들 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot set properties on %1 as it is null</source>
+ <translation>%1이(가) null이므로 속성을 설정할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeVisualDataModel</name>
+ <message>
+ <source>Delegate component must be Item type.</source>
+ <translation>하위 구성 요소는 Item 형식이어야 합니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeXmlListModel</name>
+ <message>
+ <source>Qt was built without support for xmlpatterns</source>
+ <translation>Qt 빌드에 xmlpatterns 지원이 빠졌음</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeXmlListModelRole</name>
+ <message>
+ <source>An XmlRole query must not start with &apos;/&apos;</source>
+ <translation>XmlRole 쿼리는 &apos;/&apos;로 시작하면 안 됨</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeXmlRoleList</name>
+ <message>
+ <source>An XmlListModel query must start with &apos;/&apos; or &quot;//&quot;</source>
+ <translation>XmlListModel 쿼리는 &apos;/&apos;나 &apos;//&apos;로 시작해야 함</translation>
+ </message>
+</context>
+<context>
+ <name>QDial</name>
+ <message>
+ <source>QDial</source>
+ <translation>QDial</translation>
+ </message>
+ <message>
+ <source>SpeedoMeter</source>
+ <translation>속도계</translation>
+ </message>
+ <message>
+ <source>SliderHandle</source>
+ <translation>슬라이더 핸들</translation>
+ </message>
+</context>
+<context>
+ <name>QDialog</name>
+ <message>
+ <source>Done</source>
+ <translation>완료</translation>
+ </message>
+ <message>
+ <source>What&apos;s This?</source>
+ <translation>이것에 대한 설명</translation>
+ </message>
+</context>
+<context>
+ <name>QDialogButtonBox</name>
+ <message>
+ <source>OK</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>확인(&amp;O)</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>저장(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Save</source>
+ <translation>저장</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>열기</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>취소(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>닫기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>Apply</source>
+ <translation>적용</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <translation>초기화</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>도움말</translation>
+ </message>
+ <message>
+ <source>Don&apos;t Save</source>
+ <translation>저장하지 않음</translation>
+ </message>
+ <message>
+ <source>Close without Saving</source>
+ <translation>저장하지 않고 닫기</translation>
+ </message>
+ <message>
+ <source>Discard</source>
+ <translation>무시</translation>
+ </message>
+ <message>
+ <source>&amp;Yes</source>
+ <translation>예(&amp;Y)</translation>
+ </message>
+ <message>
+ <source>Yes to &amp;All</source>
+ <translation>모두 예(&amp;A)</translation>
+ </message>
+ <message>
+ <source>&amp;No</source>
+ <translation>아니오(&amp;N)</translation>
+ </message>
+ <message>
+ <source>N&amp;o to All</source>
+ <translation>모두 아니오(&amp;O)</translation>
+ </message>
+ <message>
+ <source>Save All</source>
+ <translation>모두 저장</translation>
+ </message>
+ <message>
+ <source>Abort</source>
+ <translation>중단</translation>
+ </message>
+ <message>
+ <source>Retry</source>
+ <translation>다시 시도</translation>
+ </message>
+ <message>
+ <source>Ignore</source>
+ <translation>무시</translation>
+ </message>
+ <message>
+ <source>Restore Defaults</source>
+ <translation>기본값 복원</translation>
+ </message>
+</context>
+<context>
+ <name>QDirModel</name>
+ <message>
+ <source>Name</source>
+ <translation>이름</translation>
+ </message>
+ <message>
+ <source>Size</source>
+ <translation>크기</translation>
+ </message>
+ <message>
+ <source>Kind</source>
+ <comment>Match OS X Finder</comment>
+ <translation>형식</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <comment>All other platforms</comment>
+ <translation>형식</translation>
+ </message>
+ <message>
+ <source>Date Modified</source>
+ <translation>수정한 날짜</translation>
+ </message>
+</context>
+<context>
+ <name>QDockWidget</name>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>Dock</source>
+ <translation>붙이기</translation>
+ </message>
+ <message>
+ <source>Float</source>
+ <translation>띄우기</translation>
+ </message>
+</context>
+<context>
+ <name>QDoubleSpinBox</name>
+ <message>
+ <source>More</source>
+ <translation>더 보기</translation>
+ </message>
+ <message>
+ <source>Less</source>
+ <translation>덜 보기</translation>
+ </message>
+</context>
+<context>
+ <name>QErrorMessage</name>
+ <message>
+ <source>Debug Message:</source>
+ <translation>디버그 메시지:</translation>
+ </message>
+ <message>
+ <source>Warning:</source>
+ <translation>경고:</translation>
+ </message>
+ <message>
+ <source>Fatal Error:</source>
+ <translation>치명적 오류:</translation>
+ </message>
+ <message>
+ <source>&amp;Show this message again</source>
+ <translation>이 메시지를 다시 보이기(&amp;S)</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>확인(&amp;O)</translation>
+ </message>
+</context>
+<context>
+ <name>QFile</name>
+ <message>
+ <source>Destination file exists</source>
+ <translation>대상 파일이 존재함</translation>
+ </message>
+ <message>
+ <source>Will not rename sequential file using block copy</source>
+ <translation>블록 복사를 사용하여 연속적인 파일 이름을 바꾸지 않음</translation>
+ </message>
+ <message>
+ <source>Cannot remove source file</source>
+ <translation>원본 파일을 삭제할 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot open %1 for input</source>
+ <translation>%1에서 입력을 받기 위하여 열 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot open for output</source>
+ <translation>출력을 위하여 열 수 없음</translation>
+ </message>
+ <message>
+ <source>Failure to write block</source>
+ <translation>블록을 쓸 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot create %1 for output</source>
+ <translation>%1에 쓰기 위하여 열 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QFileDialog</name>
+ <message>
+ <source>Look in:</source>
+ <translation>다음에서 찾기:</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>뒤로</translation>
+ </message>
+ <message>
+ <source>Go back</source>
+ <translation>뒤로 가기</translation>
+ </message>
+ <message>
+ <source>Forward</source>
+ <translation>앞으로</translation>
+ </message>
+ <message>
+ <source>Go forward</source>
+ <comment>Forward context menu item</comment>
+ <translation type="obsolete">앞으로 가기</translation>
+ </message>
+ <message>
+ <source>Parent Directory</source>
+ <translation>부모 디렉터리</translation>
+ </message>
+ <message>
+ <source>Go to the parent directory</source>
+ <translation>부모 디렉터리로 가기</translation>
+ </message>
+ <message>
+ <source>Create New Folder</source>
+ <translation>새 폴더 만들기</translation>
+ </message>
+ <message>
+ <source>Create a New Folder</source>
+ <translation>새 폴더 만들기</translation>
+ </message>
+ <message>
+ <source>List View</source>
+ <translation>목록으로 보기</translation>
+ </message>
+ <message>
+ <source>Change to list view mode</source>
+ <translation>목록 보기 모드로 전환</translation>
+ </message>
+ <message>
+ <source>Detail View</source>
+ <translation>자세히 보기</translation>
+ </message>
+ <message>
+ <source>Change to detail view mode</source>
+ <translation>자세히 보기 모드로 전환</translation>
+ </message>
+ <message>
+ <source>Files of type:</source>
+ <translation>파일 형식:</translation>
+ </message>
+ <message>
+ <source>Find Directory</source>
+ <translation>디렉터리 찾기</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>열기</translation>
+ </message>
+ <message>
+ <source>Save As</source>
+ <translation>다른 이름으로 저장</translation>
+ </message>
+ <message>
+ <source>All Files (*)</source>
+ <translation>모든 파일 (*)</translation>
+ </message>
+ <message>
+ <source>Show </source>
+ <translation>보이기</translation>
+ </message>
+ <message>
+ <source>&amp;Rename</source>
+ <translation>이름 바꾸기(&amp;R)</translation>
+ </message>
+ <message>
+ <source>&amp;Delete</source>
+ <translation>삭제(&amp;D)</translation>
+ </message>
+ <message>
+ <source>Show &amp;hidden files</source>
+ <translation>숨김 파일 보이기(&amp;H)</translation>
+ </message>
+ <message>
+ <source>&amp;New Folder</source>
+ <translation>새 폴더(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Directory:</source>
+ <translation>디렉터리:</translation>
+ </message>
+ <message>
+ <source>File &amp;name:</source>
+ <translation>파일 이름(&amp;N):</translation>
+ </message>
+ <message>
+ <source>&amp;Open</source>
+ <translation>열기(&amp;O)</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>저장(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Directories</source>
+ <translation>디렉터리</translation>
+ </message>
+ <message>
+ <source>&amp;Choose</source>
+ <translation>선택(&amp;C)</translation>
+ </message>
+ <message>
+ <source>%1
+Directory not found.
+Please verify the correct directory name was given.</source>
+ <translation>%1
+디렉터리를 찾을 수 없습니다.
+경로와 파일 이름을 확인하십시오.</translation>
+ </message>
+ <message>
+ <source>%1 already exists.
+Do you want to replace it?</source>
+ <translation>%1이(가) 이미 존재합니다.
+바꾸시겠습니까?</translation>
+ </message>
+ <message>
+ <source>%1
+File not found.
+Please verify the correct file name was given.</source>
+ <translation>%1
+파일을 찾을 수 없습니다.
+경로와 파일 이름을 확인하십시오.</translation>
+ </message>
+ <message>
+ <source>New Folder</source>
+ <translation>새 폴더</translation>
+ </message>
+ <message>
+ <source>&apos;%1&apos; is write protected.
+Do you want to delete it anyway?</source>
+ <translation>&apos;%1&apos;이(가) 쓰기 금지되어 있습니다.
+그래도 삭제하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Are sure you want to delete &apos;%1&apos;?</source>
+ <translation>&apos;%1&apos;을(를) 삭제하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Could not delete directory.</source>
+ <translation>디렉터리를 삭제할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Recent Places</source>
+ <translation>최근 장소</translation>
+ </message>
+ <message>
+ <source>Recent Places</source>
+ <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment>
+ <translation type="obsolete">최근 장소</translation>
+ </message>
+ <message>
+ <source>All Files (*.*)</source>
+ <translation>모든 파일 (*)</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>My Computer</source>
+ <translation>내 컴퓨터</translation>
+ </message>
+ <message>
+ <source>Drive</source>
+ <translation>드라이브</translation>
+ </message>
+ <message>
+ <source>File</source>
+ <translation>파일</translation>
+ </message>
+ <message>
+ <source>File Folder</source>
+ <comment>Match Windows Explorer</comment>
+ <translation>파일 폴더</translation>
+ </message>
+ <message>
+ <source>Folder</source>
+ <comment>All other platforms</comment>
+ <translation>폴더</translation>
+ </message>
+ <message>
+ <source>Alias</source>
+ <comment>Mac OS X Finder</comment>
+ <translation>별명</translation>
+ </message>
+ <message>
+ <source>File Folder</source>
+ <translation type="obsolete">파일 폴더</translation>
+ </message>
+ <message>
+ <source>Folder</source>
+ <translation type="obsolete">폴더</translation>
+ </message>
+ <message>
+ <source>Alias</source>
+ <translation type="obsolete">별명</translation>
+ </message>
+ <message>
+ <source>Shortcut</source>
+ <comment>All other platforms</comment>
+ <translation>바로 가기</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <translation>알 수 없음</translation>
+ </message>
+ <message>
+ <source>Go forward</source>
+ <translation>앞으로 가기</translation>
+ </message>
+</context>
+<context>
+ <name>QFileSystemModel</name>
+ <message>
+ <source>%1 TB</source>
+ <translation>%1 TB</translation>
+ </message>
+ <message>
+ <source>%1 GB</source>
+ <translation>%1 GB</translation>
+ </message>
+ <message>
+ <source>%1 MB</source>
+ <translation>%1 MB</translation>
+ </message>
+ <message>
+ <source>%1 KB</source>
+ <translation>%1 KB</translation>
+ </message>
+ <message>
+ <source>%1 bytes</source>
+ <translation>%1바이트</translation>
+ </message>
+ <message>
+ <source>Invalid filename</source>
+ <translation>잘못된 파일 이름</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;The name &quot;%1&quot; can not be used.&lt;/b&gt;&lt;p&gt;Try using another name, with fewer characters or no punctuations marks.</source>
+ <translation>&lt;b&gt;&quot;%1&quot; 이름을 사용할 수 없습니다.&lt;/b&gt;&lt;p&gt;다른 이름을 사용하거나, 글자 수를 줄이거나, 구두점을 사용하지 마십시오.</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>이름</translation>
+ </message>
+ <message>
+ <source>Size</source>
+ <translation>크기</translation>
+ </message>
+ <message>
+ <source>Kind</source>
+ <comment>Match OS X Finder</comment>
+ <translation>형식</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <comment>All other platforms</comment>
+ <translation>형식</translation>
+ </message>
+ <message>
+ <source>Type</source>
+ <translation type="obsolete">종류</translation>
+ </message>
+ <message>
+ <source>Date Modified</source>
+ <translation>수정한 날짜</translation>
+ </message>
+ <message>
+ <source>My Computer</source>
+ <translation>내 컴퓨터</translation>
+ </message>
+ <message>
+ <source>Computer</source>
+ <translation>컴퓨터</translation>
+ </message>
+ <message>
+ <source>%1 byte(s)</source>
+ <translation>%1바이트</translation>
+ </message>
+</context>
+<context>
+ <name>QFontDatabase</name>
+ <message>
+ <source>Normal</source>
+ <translation>일반</translation>
+ </message>
+ <message>
+ <source>Bold</source>
+ <translation>굵게</translation>
+ </message>
+ <message>
+ <source>Demi Bold</source>
+ <translation>데미볼드</translation>
+ </message>
+ <message>
+ <source>Black</source>
+ <translation>블랙</translation>
+ </message>
+ <message>
+ <source>Demi</source>
+ <translation>데미</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>라이트</translation>
+ </message>
+ <message>
+ <source>Italic</source>
+ <translation>이탤릭</translation>
+ </message>
+ <message>
+ <source>Oblique</source>
+ <translation>기울임꼴</translation>
+ </message>
+ <message>
+ <source>Any</source>
+ <translation>임의</translation>
+ </message>
+ <message>
+ <source>Latin</source>
+ <translation>라틴</translation>
+ </message>
+ <message>
+ <source>Greek</source>
+ <translation>그리스</translation>
+ </message>
+ <message>
+ <source>Cyrillic</source>
+ <translation>키릴</translation>
+ </message>
+ <message>
+ <source>Armenian</source>
+ <translation>아르메니아</translation>
+ </message>
+ <message>
+ <source>Hebrew</source>
+ <translation>히브리</translation>
+ </message>
+ <message>
+ <source>Arabic</source>
+ <translation>아랍</translation>
+ </message>
+ <message>
+ <source>Syriac</source>
+ <translation>시리아</translation>
+ </message>
+ <message>
+ <source>Thaana</source>
+ <translation>타나</translation>
+ </message>
+ <message>
+ <source>Devanagari</source>
+ <translation>데바나가리</translation>
+ </message>
+ <message>
+ <source>Bengali</source>
+ <translation>벵골</translation>
+ </message>
+ <message>
+ <source>Gurmukhi</source>
+ <translation>굴묵키</translation>
+ </message>
+ <message>
+ <source>Gujarati</source>
+ <translation>구자라트</translation>
+ </message>
+ <message>
+ <source>Oriya</source>
+ <translation>오리야</translation>
+ </message>
+ <message>
+ <source>Tamil</source>
+ <translation>타밀</translation>
+ </message>
+ <message>
+ <source>Telugu</source>
+ <translation>텔루구</translation>
+ </message>
+ <message>
+ <source>Kannada</source>
+ <translation>칸나다</translation>
+ </message>
+ <message>
+ <source>Malayalam</source>
+ <translation>말라얄람</translation>
+ </message>
+ <message>
+ <source>Sinhala</source>
+ <translation>신할라</translation>
+ </message>
+ <message>
+ <source>Thai</source>
+ <translation>타이</translation>
+ </message>
+ <message>
+ <source>Lao</source>
+ <translation>라오</translation>
+ </message>
+ <message>
+ <source>Tibetan</source>
+ <translation>티베트</translation>
+ </message>
+ <message>
+ <source>Myanmar</source>
+ <translation>미얀마</translation>
+ </message>
+ <message>
+ <source>Georgian</source>
+ <translation>조지아</translation>
+ </message>
+ <message>
+ <source>Khmer</source>
+ <translation>크메르</translation>
+ </message>
+ <message>
+ <source>Simplified Chinese</source>
+ <translation>중국어 간체</translation>
+ </message>
+ <message>
+ <source>Traditional Chinese</source>
+ <translation>중국어 번체</translation>
+ </message>
+ <message>
+ <source>Japanese</source>
+ <translation>가나</translation>
+ </message>
+ <message>
+ <source>Korean</source>
+ <translation>한글</translation>
+ </message>
+ <message>
+ <source>Vietnamese</source>
+ <translation>베트남</translation>
+ </message>
+ <message>
+ <source>Symbol</source>
+ <translation>기호</translation>
+ </message>
+ <message>
+ <source>Ogham</source>
+ <translation>오검</translation>
+ </message>
+ <message>
+ <source>Runic</source>
+ <translation>룬</translation>
+ </message>
+ <message>
+ <source>N&apos;Ko</source>
+ <translation>은코</translation>
+ </message>
+</context>
+<context>
+ <name>QFontDialog</name>
+ <message>
+ <source>Select Font</source>
+ <translation>글꼴 선택</translation>
+ </message>
+ <message>
+ <source>&amp;Font</source>
+ <translation>글꼴(&amp;F)</translation>
+ </message>
+ <message>
+ <source>Font st&amp;yle</source>
+ <translation>글꼴 스타일(&amp;Y)</translation>
+ </message>
+ <message>
+ <source>&amp;Size</source>
+ <translation>크기(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Effects</source>
+ <translation>효과</translation>
+ </message>
+ <message>
+ <source>Stri&amp;keout</source>
+ <translation>취소선(&amp;K)</translation>
+ </message>
+ <message>
+ <source>&amp;Underline</source>
+ <translation>밑줄(&amp;U)</translation>
+ </message>
+ <message>
+ <source>Sample</source>
+ <translation>미리 보기</translation>
+ </message>
+ <message>
+ <source>Wr&amp;iting System</source>
+ <translation>문자 체계(&amp;I)</translation>
+ </message>
+</context>
+<context>
+ <name>QFtp</name>
+ <message>
+ <source>Not connected</source>
+ <translation>연결되지 않음</translation>
+ </message>
+ <message>
+ <source>Host %1 not found</source>
+ <translation>호스트 %1을(를) 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>Connection refused to host %1</source>
+ <translation>호스트 %1와(과)의 연결이 거부됨</translation>
+ </message>
+ <message>
+ <source>Connection timed out to host %1</source>
+ <translation>호스트 %1와(과)의 연결 시간이 초과됨</translation>
+ </message>
+ <message>
+ <source>Connected to host %1</source>
+ <translation>호스트 %1에 연결이 거부됨</translation>
+ </message>
+ <message>
+ <source>Connection refused for data connection</source>
+ <translation>데이터 연결이 거부됨</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+ <message>
+ <source>Connecting to host failed:
+%1</source>
+ <translation>호스트 연결 실패:
+%1</translation>
+ </message>
+ <message>
+ <source>Login failed:
+%1</source>
+ <translation>로그인 실패:
+%1</translation>
+ </message>
+ <message>
+ <source>Listing directory failed:
+%1</source>
+ <translation>디렉터리 목록 표시 실패:
+%1</translation>
+ </message>
+ <message>
+ <source>Changing directory failed:
+%1</source>
+ <translation>디렉터리 변경 실패:
+%1</translation>
+ </message>
+ <message>
+ <source>Downloading file failed:
+%1</source>
+ <translation>파일 다운로드 실패:
+%1</translation>
+ </message>
+ <message>
+ <source>Uploading file failed:
+%1</source>
+ <translation>파일 업로드 실패:
+%1</translation>
+ </message>
+ <message>
+ <source>Removing file failed:
+%1</source>
+ <translation>파일 삭제 실패:
+%1</translation>
+ </message>
+ <message>
+ <source>Creating directory failed:
+%1</source>
+ <translation>디렉터리 생성 실패:
+%1</translation>
+ </message>
+ <message>
+ <source>Removing directory failed:
+%1</source>
+ <translation>디렉터리 삭제 실패:
+%1</translation>
+ </message>
+ <message>
+ <source>Connection closed</source>
+ <translation>연결이 종료됨</translation>
+ </message>
+ <message>
+ <source>Host %1 found</source>
+ <translation>호스트 %1을(를) 찾았음</translation>
+ </message>
+ <message>
+ <source>Connection to %1 closed</source>
+ <translation>%1와(과)의 연결이 종료됨</translation>
+ </message>
+ <message>
+ <source>Host found</source>
+ <translation>호스트를 찾았음</translation>
+ </message>
+ <message>
+ <source>Connected to host</source>
+ <translation>호스트에 연결됨</translation>
+ </message>
+</context>
+<context>
+ <name>QHostInfo</name>
+ <message>
+ <source>No host name given</source>
+ <translation>호스트 이름이 지정되지 않음</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+</context>
+<context>
+ <name>QHostInfoAgent</name>
+ <message>
+ <source>No host name given</source>
+ <translation>호스트 이름이 지정되지 않았음</translation>
+ </message>
+ <message>
+ <source>Invalid hostname</source>
+ <translation>호스트 이름이 잘못됨</translation>
+ </message>
+ <message>
+ <source>Unknown address type</source>
+ <translation>알 수 없는 주소 형식</translation>
+ </message>
+ <message>
+ <source>Host not found</source>
+ <translation>호스트를 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+</context>
+<context>
+ <name>QHttp</name>
+ <message>
+ <source>HTTPS connection requested but SSL support not compiled in</source>
+ <translation>HTTPS 연결을 요청했지만 SSL 지원을 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+ <message>
+ <source>Request aborted</source>
+ <translation>요청이 중단됨</translation>
+ </message>
+ <message>
+ <source>No server set to connect to</source>
+ <translation>연결할 서버가 설정되지 않음</translation>
+ </message>
+ <message>
+ <source>Wrong content length</source>
+ <translation>내용 길이가 잘못됨</translation>
+ </message>
+ <message>
+ <source>Server closed connection unexpectedly</source>
+ <translation>서버에서 예상하지 못하게 연결을 종료함</translation>
+ </message>
+ <message>
+ <source>Connection refused (or timed out)</source>
+ <translation>연결이 거부됨 (또는 시간 초과됨)</translation>
+ </message>
+ <message>
+ <source>Host %1 not found</source>
+ <translation>호스트 %1을(를) 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>HTTP request failed</source>
+ <translation>HTTP 요청이 실패함</translation>
+ </message>
+ <message>
+ <source>Invalid HTTP response header</source>
+ <translation>HTTP 응답 헤더가 잘못됨</translation>
+ </message>
+ <message>
+ <source>Unknown authentication method</source>
+ <translation>알 수 없는 인증 방법</translation>
+ </message>
+ <message>
+ <source>Proxy authentication required</source>
+ <translation>프록시 인증이 필요함</translation>
+ </message>
+ <message>
+ <source>Authentication required</source>
+ <translation>인증이 필요함</translation>
+ </message>
+ <message>
+ <source>Invalid HTTP chunked body</source>
+ <translation>HTTP 조각난 본문이 잘못됨</translation>
+ </message>
+ <message>
+ <source>Error writing response to device</source>
+ <translation>장치에 응답을 쓰는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>Connection refused</source>
+ <translation>연결이 거부됨</translation>
+ </message>
+ <message>
+ <source>Connection closed</source>
+ <translation>연결이 종료됨</translation>
+ </message>
+ <message>
+ <source>Proxy requires authentication</source>
+ <translation>프록시 인증이 필요함</translation>
+ </message>
+ <message>
+ <source>Host requires authentication</source>
+ <translation>호스트 인증이 필요함</translation>
+ </message>
+ <message>
+ <source>Data corrupted</source>
+ <translation>데이터 손상됨</translation>
+ </message>
+ <message>
+ <source>Unknown protocol specified</source>
+ <translation>알 수 없는 프로토콜</translation>
+ </message>
+ <message>
+ <source>SSL handshake failed</source>
+ <translation>SSL 악수 실패</translation>
+ </message>
+ <message>
+ <source>Host %1 found</source>
+ <translation>호스트 %1을(를) 찾았음</translation>
+ </message>
+ <message>
+ <source>Connected to host %1</source>
+ <translation>호스트 %1에 연결됨</translation>
+ </message>
+ <message>
+ <source>Connection to %1 closed</source>
+ <translation>%1와(과)의 연결이 종료됨</translation>
+ </message>
+ <message>
+ <source>Host found</source>
+ <translation>호스트를 찾았음</translation>
+ </message>
+ <message>
+ <source>Connected to host</source>
+ <translation>호스트에 연결됨</translation>
+ </message>
+</context>
+<context>
+ <name>QHttpSocketEngine</name>
+ <message>
+ <source>Did not receive HTTP response from proxy</source>
+ <translation>프록시에서 HTTP 응답을 받지 못함</translation>
+ </message>
+ <message>
+ <source>Error parsing authentication request from proxy</source>
+ <translation>프록시 인증을 처리하는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>Authentication required</source>
+ <translation>인증이 필요함</translation>
+ </message>
+ <message>
+ <source>Proxy denied connection</source>
+ <translation>프록시에서 연결 거부됨</translation>
+ </message>
+ <message>
+ <source>Error communicating with HTTP proxy</source>
+ <translation>HTTP 프록시와 통신하는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>Proxy server not found</source>
+ <translation>프록시 서버를 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>Proxy connection refused</source>
+ <translation>프록시 서버에 연결이 거부됨</translation>
+ </message>
+ <message>
+ <source>Proxy server connection timed out</source>
+ <translation>프록시 서버 연결 시간 초과됨</translation>
+ </message>
+ <message>
+ <source>Proxy connection closed prematurely</source>
+ <translation>프록시 서버 연결이 일찍 종료됨</translation>
+ </message>
+</context>
+<context>
+ <name>QIBaseDriver</name>
+ <message>
+ <source>Error opening database</source>
+ <translation>데이터베이스를 여는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>Could not start transaction</source>
+ <translation>트랙잭션을 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>트랜잭션을 커밋할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>트랜잭션을 되돌릴 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QIBaseResult</name>
+ <message>
+ <source>Unable to create BLOB</source>
+ <translation>BLOB을 만들 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to write BLOB</source>
+ <translation>BLOB에 쓸 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to open BLOB</source>
+ <translation>BLOB을 열 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to read BLOB</source>
+ <translation>BLOB에서 읽을 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not find array</source>
+ <translation>배열을 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not get array data</source>
+ <translation>배열 데이터를 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not get query info</source>
+ <translation>쿼리 정보를 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not start transaction</source>
+ <translation>트랜잭션을 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>트랜잭션을 커밋할 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not allocate statement</source>
+ <translation>구문을 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not prepare statement</source>
+ <translation>구문을 준비할 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not describe input statement</source>
+ <translation>입력 구문을 설명할 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not describe statement</source>
+ <translation>구문을 설명할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to close statement</source>
+ <translation>구문을 닫을 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to execute query</source>
+ <translation>쿼리를 실행할 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not fetch next item</source>
+ <translation>다음 항목을 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not get statement info</source>
+ <translation>구문 정보를 가져올 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QIODevice</name>
+ <message>
+ <source>Permission denied</source>
+ <translation>권한이 거부됨</translation>
+ </message>
+ <message>
+ <source>Too many open files</source>
+ <translation>너무 많은 파일이 열렸음</translation>
+ </message>
+ <message>
+ <source>No such file or directory</source>
+ <translation>그러한 파일이나 디렉터리가 없음</translation>
+ </message>
+ <message>
+ <source>No space left on device</source>
+ <translation>장치에 공간이 부족함</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+</context>
+<context>
+ <name>QInputContext</name>
+ <message>
+ <source>XIM</source>
+ <translation>XIM</translation>
+ </message>
+ <message>
+ <source>FEP</source>
+ <translation>FEP</translation>
+ </message>
+ <message>
+ <source>XIM input method</source>
+ <translation>XIM 입력기</translation>
+ </message>
+ <message>
+ <source>Windows input method</source>
+ <translation>윈도 입력기</translation>
+ </message>
+ <message>
+ <source>Mac OS X input method</source>
+ <translation>Mac OS X 입력기</translation>
+ </message>
+ <message>
+ <source>S60 FEP input method</source>
+ <translation>S60 FEP 입력기</translation>
+ </message>
+</context>
+<context>
+ <name>QInputDialog</name>
+ <message>
+ <source>Enter a value:</source>
+ <translation>값을 입력하십시오:</translation>
+ </message>
+</context>
+<context>
+ <name>QLibrary</name>
+ <message>
+ <source>Plugin verification data mismatch in &apos;%1&apos;</source>
+ <translation>&apos;%1&apos;의 플러그인 확인 데이터가 일치하지 않음</translation>
+ </message>
+ <message>
+ <source>The shared library was not found.</source>
+ <translation>공유 라이브러리를 찾을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The file &apos;%1&apos; is not a valid Qt plugin.</source>
+ <translation>파일 &apos;%1&apos;은(는) 올바른 Qt 플러그인이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
+ <translation>플러그인 &apos;%1&apos;은(는) 호환되지 않는 Qt 라이브러리를 사용합니다. (%2.%3.%4) [%5]</translation>
+ </message>
+ <message>
+ <source>The plugin &apos;%1&apos; uses incompatible Qt library. Expected build key &quot;%2&quot;, got &quot;%3&quot;</source>
+ <translation>플러그인 &apos;%1&apos;은(는) 호환되지 않는 Qt 라이브러리를 사용합니다. 빌드 키 &quot;%2&quot;을(를) 예상했지만 &quot;%3&quot;이(가) 돌아왔습니다</translation>
+ </message>
+ <message>
+ <source>The plugin &apos;%1&apos; uses incompatible Qt library. (Cannot mix debug and release libraries.)</source>
+ <translation>플러그인 &apos;%1&apos;은(는) 호환되지 않는 Qt 라이브러리를 사용합니다. (디버그와 릴리즈 라이브러리를 섞을 수 없습니다.)</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+ <message>
+ <source>Cannot load library %1: %2</source>
+ <translation>라이브러리 %1을(를) 불러올 수 없음: %2</translation>
+ </message>
+ <message>
+ <source>Cannot unload library %1: %2</source>
+ <translation>라이브러리 %1을(를) 닫을 수 없음: %2</translation>
+ </message>
+ <message>
+ <source>Cannot resolve symbol &quot;%1&quot; in %2: %3</source>
+ <translation>%2의 심볼 &quot;%1&quot;을(를) 불러올 수 없음: %3</translation>
+ </message>
+</context>
+<context>
+ <name>QLineEdit</name>
+ <message>
+ <source>&amp;Undo</source>
+ <translation>실행 취소(&amp;U)</translation>
+ </message>
+ <message>
+ <source>&amp;Redo</source>
+ <translation>다시 실행(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Cu&amp;t</source>
+ <translation>잘라내기(&amp;T)</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>복사(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>붙여넣기(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>모두 선택</translation>
+ </message>
+</context>
+<context>
+ <name>QLocalServer</name>
+ <message>
+ <source>%1: Name error</source>
+ <translation>%1: 이름 오류</translation>
+ </message>
+ <message>
+ <source>%1: Permission denied</source>
+ <translation>%1: 권한이 거부됨</translation>
+ </message>
+ <message>
+ <source>%1: Address in use</source>
+ <translation>%1: 주소가 사용 중</translation>
+ </message>
+ <message>
+ <source>%1: Unknown error %2</source>
+ <translation>%1: 알 수 없는 오류 %2</translation>
+ </message>
+</context>
+<context>
+ <name>QLocalSocket</name>
+ <message>
+ <source>%1: Connection refused</source>
+ <translation>%1: 연결이 거부됨</translation>
+ </message>
+ <message>
+ <source>%1: Remote closed</source>
+ <translation>%1: 원격 호스트가 연결 닫음</translation>
+ </message>
+ <message>
+ <source>%1: Invalid name</source>
+ <translation>%1: 잘못된 이름</translation>
+ </message>
+ <message>
+ <source>%1: Socket access error</source>
+ <translation>%1: 소켓 접근 오류</translation>
+ </message>
+ <message>
+ <source>%1: Socket resource error</source>
+ <translation>%1: 소켓 자원 오류</translation>
+ </message>
+ <message>
+ <source>%1: Socket operation timed out</source>
+ <translation>%1: 소켓 작업 시간 초과됨</translation>
+ </message>
+ <message>
+ <source>%1: Datagram too large</source>
+ <translation>%1: 데이터그램이 너무 큼</translation>
+ </message>
+ <message>
+ <source>%1: Connection error</source>
+ <translation>%1: 연결 오류</translation>
+ </message>
+ <message>
+ <source>%1: The socket operation is not supported</source>
+ <translation>%1: 소켓 작업이 지원되지 않음</translation>
+ </message>
+ <message>
+ <source>%1: Unknown error</source>
+ <translation>%1: 알 수 없는 오류</translation>
+ </message>
+ <message>
+ <source>%1: Unknown error %2</source>
+ <translation>%1: 알 수 없는 오류 %2</translation>
+ </message>
+</context>
+<context>
+ <name>QMYSQLDriver</name>
+ <message>
+ <source>Unable to open database &apos;</source>
+ <translation>다음 데이터베이스를 열 수 없음: &apos;</translation>
+ </message>
+ <message>
+ <source>Unable to connect</source>
+ <translation>연결할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>트랜잭션을 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>트랜잭션을 커밋할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>트랜잭션을 되돌릴 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QMYSQLResult</name>
+ <message>
+ <source>Unable to fetch data</source>
+ <translation>데이터를 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to execute query</source>
+ <translation>쿼리를 실행할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to store result</source>
+ <translation>결과를 저장할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to execute next query</source>
+ <translation>다음 쿼리를 실행할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to store next result</source>
+ <translation>다음 결과를 저장할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>구문을 준비할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to reset statement</source>
+ <translation>구문을 초기화할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to bind value</source>
+ <translation>값을 바인딩할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>구문을 실행할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to bind outvalues</source>
+ <translation>outvalue를 바인딩할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to store statement results</source>
+ <translation>구문 실행 결과를 저장할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QMdiArea</name>
+ <message>
+ <source>(Untitled)</source>
+ <translation>(제목 없음)</translation>
+ </message>
+</context>
+<context>
+ <name>QMdiSubWindow</name>
+ <message>
+ <source>- [%1]</source>
+ <translation>- [%1]</translation>
+ </message>
+ <message>
+ <source>%1 - [%2]</source>
+ <translation>%1 - [%2]</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>최소화</translation>
+ </message>
+ <message>
+ <source>Maximize</source>
+ <translation>최대화</translation>
+ </message>
+ <message>
+ <source>Unshade</source>
+ <translation>풀어 내리기</translation>
+ </message>
+ <message>
+ <source>Shade</source>
+ <translation>말아 올리기</translation>
+ </message>
+ <message>
+ <source>Restore Down</source>
+ <translation>복원</translation>
+ </message>
+ <message>
+ <source>Restore</source>
+ <translation>복원</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>도움말</translation>
+ </message>
+ <message>
+ <source>Menu</source>
+ <translation>메뉴</translation>
+ </message>
+ <message>
+ <source>&amp;Restore</source>
+ <translation>복원(&amp;R)</translation>
+ </message>
+ <message>
+ <source>&amp;Move</source>
+ <translation>이동(&amp;M)</translation>
+ </message>
+ <message>
+ <source>&amp;Size</source>
+ <translation>크기(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Mi&amp;nimize</source>
+ <translation>최소화(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Ma&amp;ximize</source>
+ <translation>최대화(&amp;X)</translation>
+ </message>
+ <message>
+ <source>Stay on &amp;Top</source>
+ <translation>항상 위(&amp;T)</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>닫기(&amp;C)</translation>
+ </message>
+</context>
+<context>
+ <name>QMenu</name>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>열기</translation>
+ </message>
+ <message>
+ <source>Execute</source>
+ <translation>실행</translation>
+ </message>
+</context>
+<context>
+ <name>QMenuBar</name>
+ <message>
+ <source>Actions</source>
+ <translation>동작</translation>
+ </message>
+</context>
+<context>
+ <name>QMessageBox</name>
+ <message>
+ <source>Show Details...</source>
+ <translation>자세한 정보 보기...</translation>
+ </message>
+ <message>
+ <source>Hide Details...</source>
+ <translation>자세한 정보 숨기기...</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>도움말</translation>
+ </message>
+ <message>
+ <source>&lt;h3&gt;About Qt&lt;/h3&gt;&lt;p&gt;This program uses Qt version %1.&lt;/p&gt;</source>
+ <translation>&lt;h3&gt;Qt 정보&lt;/h3&gt;&lt;p&gt;이 프로그램은 Qt 버전 %1을(를) 사용합니다.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;Qt is a C++ toolkit for cross-platform application development.&lt;/p&gt;&lt;p&gt;Qt provides single-source portability across MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.&lt;/p&gt;&lt;p&gt;Qt is available under three different licensing options designed to accommodate the needs of our various users.&lt;/p&gt;&lt;p&gt;Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Please see &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; for an overview of Qt licensing.&lt;/p&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;Qt is a Nokia product. See &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; for more information.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Qt는 크로스 플랫폼 프로그램 개발을 위한 C++ 툴킷입니다.&lt;/p&gt;&lt;p&gt;Qt는 마이크로소프트&amp;nbsp;윈도, Mac&amp;nbsp;OS&amp;nbsp;X, 리눅스, 여러 상용 유닉스 간 소스 호환성을 제공합니다. Qt는 Qt for Embedded Linux, Qt for Windows CE와 같은 임베디드 장치도 지원합니다.&lt;/p&gt;&lt;p&gt;Qt는 여러 사용자의 조건에 맞는 세 가지 조건으로 라이선스됩니다.&lt;/p&gt;&lt;p&gt;Qt의 상용 라이선스는 제 3자와 코드를 공유할 수 없거나, GNU LGPL 2.1, GNU GPL 3.0의 조건을 따를 수 없는 독점/상용 소프트웨어 개발에 사용할 수 있습니다.&lt;/p&gt;&lt;p&gt;Qt의 GNU LGPL 2.1 라이선스는 GNU LGPL 2.1의 조건을 따르는 독점 및 오픈소스 Qt 프로그램을 개발할 수 있습니다.&lt;/p&gt;&lt;p&gt;Qt의 GNU GPL 3.0 라이선스는 GNU GPL 3.0의 조건을 적용받거나 GNU GPL 3.0으로 라이선싱할 Qt 프로그램을 개발할 수 있습니다.&lt;/p&gt;&lt;p&gt;Qt 라이선싱 조건을 알아 보려면 &lt;a href=&quot;http://qt.nokia.con/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; 페이지를 참고하십시오.&lt;/p&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;Qt는 노키아의 제품입니다. 더 많은 정보를 보려면 &lt;a href=&quot;http://qt.nokia.com&quot;&gt;qt.nokia.com&lt;/a&gt;을 참조하십시오.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>About Qt</source>
+ <translation>Qt 정보</translation>
+ </message>
+</context>
+<context>
+ <name>QMultiInputContext</name>
+ <message>
+ <source>Select IM</source>
+ <translation>입력기 선택</translation>
+ </message>
+</context>
+<context>
+ <name>QMultiInputContextPlugin</name>
+ <message>
+ <source>Multiple input method switcher</source>
+ <translation>다중 입력기 전환기</translation>
+ </message>
+ <message>
+ <source>Multiple input method switcher that uses the context menu of the text widgets</source>
+ <translation>텍스트 위젯의 컨텍스트 메뉴를 사용하는 다중 입력기 전환기</translation>
+ </message>
+</context>
+<context>
+ <name>QNativeSocketEngine</name>
+ <message>
+ <source>Unable to initialize non-blocking socket</source>
+ <translation>논블러킹 소켓을 초기화할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to initialize broadcast socket</source>
+ <translation>브로드캐스트 소켓을 초기화할 수 없음</translation>
+ </message>
+ <message>
+ <source>Attempt to use IPv6 socket on a platform with no IPv6 support</source>
+ <translation>IPv6을 지원하지 않는 플랫폼에서 IPv6 소켓을 사용하려고 시도함</translation>
+ </message>
+ <message>
+ <source>The remote host closed the connection</source>
+ <translation>원격 호스트에서 연결을 닫음</translation>
+ </message>
+ <message>
+ <source>Network operation timed out</source>
+ <translation>네트워크 작업 시간 초과</translation>
+ </message>
+ <message>
+ <source>Out of resources</source>
+ <translation>자원 부족</translation>
+ </message>
+ <message>
+ <source>Unsupported socket operation</source>
+ <translation>지원하지 않는 소켓 작업</translation>
+ </message>
+ <message>
+ <source>Protocol type not supported</source>
+ <translation>지원하지 않는 프로토콜 형식</translation>
+ </message>
+ <message>
+ <source>Invalid socket descriptor</source>
+ <translation>잘못된 소켓 설명자</translation>
+ </message>
+ <message>
+ <source>Host unreachable</source>
+ <translation>호스트에 접근할 수 없음</translation>
+ </message>
+ <message>
+ <source>Network unreachable</source>
+ <translation>네트워크에 접근할 수 없음</translation>
+ </message>
+ <message>
+ <source>Permission denied</source>
+ <translation>권한이 거부됨</translation>
+ </message>
+ <message>
+ <source>Connection timed out</source>
+ <translation>연결 시간 초과됨</translation>
+ </message>
+ <message>
+ <source>Connection refused</source>
+ <translation>연결이 거부됨</translation>
+ </message>
+ <message>
+ <source>The bound address is already in use</source>
+ <translation>지정한 주소가 이미 사용 중</translation>
+ </message>
+ <message>
+ <source>The address is not available</source>
+ <translation>주소를 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>The address is protected</source>
+ <translation>주소가 보호되어 있음</translation>
+ </message>
+ <message>
+ <source>Datagram was too large to send</source>
+ <translation>한 번에 보낼 데이터그램이 너무 큼</translation>
+ </message>
+ <message>
+ <source>Unable to send a message</source>
+ <translation>메시지를 보낼 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to receive a message</source>
+ <translation>메시지를 받을 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to write</source>
+ <translation>쓸 수 없음</translation>
+ </message>
+ <message>
+ <source>Network error</source>
+ <translation>네트워크 오류</translation>
+ </message>
+ <message>
+ <source>Another socket is already listening on the same port</source>
+ <translation>다른 소켓이 지정한 포트에서 듣고 있음</translation>
+ </message>
+ <message>
+ <source>Operation on non-socket</source>
+ <translation>비 소켓에서 작업 실행됨</translation>
+ </message>
+ <message>
+ <source>The proxy type is invalid for this operation</source>
+ <translation>이 작업에 사용할 프록시 형식이 잘못되었습니다</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessCacheBackend</name>
+ <message>
+ <source>Error opening %1</source>
+ <translation>%1을(를) 여는 중 오류 발생</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessDataBackend</name>
+ <message>
+ <source>Operation not supported on %1</source>
+ <translation>%1에는 작업이 지원되지 않음</translation>
+ </message>
+ <message>
+ <source>Invalid URI: %1</source>
+ <translation>잘못된 URI: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessDebugPipeBackend</name>
+ <message>
+ <source>Write error writing to %1: %2</source>
+ <translation>%1에 쓰는 중 오류 발생: %2</translation>
+ </message>
+ <message>
+ <source>Socket error on %1: %2</source>
+ <translation>%1에서 소켓 오류 발생: %2</translation>
+ </message>
+ <message>
+ <source>Remote host closed the connection prematurely on %1</source>
+ <translation>%1에서 원격 호스트가 일찍 연결을 닫음</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessFileBackend</name>
+ <message>
+ <source>Request for opening non-local file %1</source>
+ <translation>비 로컬 파일 %1을(를) 여는 요청 들어옴</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: Path is a directory</source>
+ <translation>%1을(를) 열 수 없음: 디렉터리임</translation>
+ </message>
+ <message>
+ <source>Error opening %1: %2</source>
+ <translation>%1을(를) 여는 중 오류 발생: %2</translation>
+ </message>
+ <message>
+ <source>Write error writing to %1: %2</source>
+ <translation>%1에 쓰는 중 오류 발생: %2</translation>
+ </message>
+ <message>
+ <source>Read error reading from %1: %2</source>
+ <translation>%1에서 읽는 중 오류 발생: %2</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessFtpBackend</name>
+ <message>
+ <source>No suitable proxy found</source>
+ <translation>적합한 프록시를 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: is a directory</source>
+ <translation>%1을(를) 열 수 없음: 디렉터리임</translation>
+ </message>
+ <message>
+ <source>Logging in to %1 failed: authentication required</source>
+ <translation>%1에 로그인할 수 없음: 인증 필요함</translation>
+ </message>
+ <message>
+ <source>Error while downloading %1: %2</source>
+ <translation>%1 다운로드 중 오류 발생: %2</translation>
+ </message>
+ <message>
+ <source>Error while uploading %1: %2</source>
+ <translation>%1 업로드 중 오류 발생: %2</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessHttpBackend</name>
+ <message>
+ <source>No suitable proxy found</source>
+ <translation>적합한 프록시를 찾을 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkAccessManager</name>
+ <message>
+ <source>Network access is disabled.</source>
+ <translation>네트워크 접근이 비활성화되었습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkReply</name>
+ <message>
+ <source>Error downloading %1 - server replied: %2</source>
+ <translation>%1을(를) 다운로드하는 중 오류 발생 - 서버 응답: %2</translation>
+ </message>
+ <message>
+ <source>Protocol &quot;%1&quot; is unknown</source>
+ <translation>알 수 없는 프로토콜 &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <source>Network session error.</source>
+ <translation>네트워크 세션 오류.</translation>
+ </message>
+ <message>
+ <source>Temporary network failure.</source>
+ <translation>일시적인 네트워크 실패.</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkReplyImpl</name>
+ <message>
+ <source>Operation canceled</source>
+ <translation>작업 취소됨</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkSession</name>
+ <message>
+ <source>Invalid configuration.</source>
+ <translation>설정이 잘못되었습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QNetworkSessionPrivateImpl</name>
+ <message>
+ <source>Roaming error</source>
+ <translation>로밍 오류</translation>
+ </message>
+ <message>
+ <source>Session aborted by user or system</source>
+ <translation>사용자나 시스템에서 세션 종료함</translation>
+ </message>
+ <message>
+ <source>The specified configuration cannot be used.</source>
+ <translation>지정한 설정을 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Unidentified Error</source>
+ <translation>지정되지 않은 오류</translation>
+ </message>
+ <message>
+ <source>Unknown session error.</source>
+ <translation>알 수 없는 세션 오류.</translation>
+ </message>
+ <message>
+ <source>The session was aborted by the user or system.</source>
+ <translation>사용자나 시스템에서 세션을 중단하였습니다.</translation>
+ </message>
+ <message>
+ <source>The requested operation is not supported by the system.</source>
+ <translation>시스템에서 요청한 구성을 지원하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Roaming was aborted or is not possible.</source>
+ <translation>로밍이 중단되었거나 사용할 수 없습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QOCIDriver</name>
+ <message>
+ <source>Unable to initialize</source>
+ <comment>QOCIDriver</comment>
+ <translation>초기화할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to logon</source>
+ <translation>로그온할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>트랜잭션을 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>트랜잭션을 커밋할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>트랜잭션을 되돌릴 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QOCIResult</name>
+ <message>
+ <source>Unable to bind column for batch execute</source>
+ <translation>배치 실행의 열을 바인딩할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to execute batch statement</source>
+ <translation>배치 구문을 실행할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to goto next</source>
+ <translation>다음으로 이동할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to alloc statement</source>
+ <translation>구문을 할당할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>구문을 준비할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to get statement type</source>
+ <translation>구문 형식을 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to bind value</source>
+ <translation>값을 바인딩할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>구문을 실행할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QODBCDriver</name>
+ <message>
+ <source>Unable to connect</source>
+ <translation>연결할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to connect - Driver doesn&apos;t support all functionality required</source>
+ <translation>연결할 수 없음 - 드라이버가 모든 필요한 기능을 제공하지 않습니다</translation>
+ </message>
+ <message>
+ <source>Unable to disable autocommit</source>
+ <translation>자동 커밋을 해제할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>트랜잭션을 커밋할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>트랜잭션을 되돌릴 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to enable autocommit</source>
+ <translation>자동 커밋을 설정할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QODBCResult</name>
+ <message>
+ <source>Unable to fetch last</source>
+ <translation>마지막 항목을 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>QODBCResult::reset: Unable to set &apos;SQL_CURSOR_STATIC&apos; as statement attribute. Please check your ODBC driver configuration</source>
+ <translation>QODBCResult::reset: &apos;SQL_CURSOR_STATIC&apos;을 구문 속성으로 설정할 수 없음. ODBC 드라이버의 설정을 확인하십시오</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>구문을 실행할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to fetch</source>
+ <translation>항목을 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to fetch next</source>
+ <translation>다음 항목을 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to fetch first</source>
+ <translation>이전 항목을 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to fetch previous</source>
+ <translation>이전 항목을 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>구문을 준비할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to bind variable</source>
+ <translation>변수를 바인딩할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>PulseAudio Sound Server</source>
+ <translation>PulseAudio 소리 서버</translation>
+ </message>
+ <message>
+ <source>&quot;%1&quot; duplicates a previous role name and will be disabled.</source>
+ <translation>&quot;%1&quot;이(가) 이전 역할 이름과 중복되므로 비활성화될 것입니다.</translation>
+ </message>
+ <message>
+ <source>invalid query: &quot;%1&quot;</source>
+ <translation>잘못된 쿼리: &quot;%1&quot;</translation>
+ </message>
+</context>
+<context>
+ <name>QPPDOptionsModel</name>
+ <message>
+ <source>Name</source>
+ <translation>이름</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>값</translation>
+ </message>
+</context>
+<context>
+ <name>QPSQLDriver</name>
+ <message>
+ <source>Unable to connect</source>
+ <translation>연결할 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not begin transaction</source>
+ <translation>트랙잭션을 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not commit transaction</source>
+ <translation>트랙잭션을 커밋할 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not rollback transaction</source>
+ <translation>트랙잭션을 되돌릴 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to subscribe</source>
+ <translation>등록할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to unsubscribe</source>
+ <translation>등록 해제할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QPSQLResult</name>
+ <message>
+ <source>Unable to create query</source>
+ <translation>쿼리를 만들 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to prepare statement</source>
+ <translation>구문을 준비할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QPageSetupWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Paper</source>
+ <translation>종이</translation>
+ </message>
+ <message>
+ <source>Page size:</source>
+ <translation>쪽 크기:</translation>
+ </message>
+ <message>
+ <source>Width:</source>
+ <translation>너비:</translation>
+ </message>
+ <message>
+ <source>Height:</source>
+ <translation>높이:</translation>
+ </message>
+ <message>
+ <source>Paper source:</source>
+ <translation>종이 공급:</translation>
+ </message>
+ <message>
+ <source>Orientation</source>
+ <translation>방향</translation>
+ </message>
+ <message>
+ <source>Portrait</source>
+ <translation>세로</translation>
+ </message>
+ <message>
+ <source>Landscape</source>
+ <translation>가로</translation>
+ </message>
+ <message>
+ <source>Reverse landscape</source>
+ <translation>뒤집은 가로</translation>
+ </message>
+ <message>
+ <source>Reverse portrait</source>
+ <translation>뒤집은 세로</translation>
+ </message>
+ <message>
+ <source>Margins</source>
+ <translation>여백</translation>
+ </message>
+ <message>
+ <source>top margin</source>
+ <translation>위쪽 여백</translation>
+ </message>
+ <message>
+ <source>left margin</source>
+ <translation>왼쪽 여백</translation>
+ </message>
+ <message>
+ <source>right margin</source>
+ <translation>오른쪽 여백</translation>
+ </message>
+ <message>
+ <source>bottom margin</source>
+ <translation>아래쪽 여백</translation>
+ </message>
+ <message>
+ <source>Centimeters (cm)</source>
+ <translation>센티미터 (cm)</translation>
+ </message>
+ <message>
+ <source>Millimeters (mm)</source>
+ <translation>밀리미터 (mm)</translation>
+ </message>
+ <message>
+ <source>Inches (in)</source>
+ <translation>인치 (in)</translation>
+ </message>
+ <message>
+ <source>Points (pt)</source>
+ <translation>포인트 (pt)</translation>
+ </message>
+</context>
+<context>
+ <name>QPluginLoader</name>
+ <message>
+ <source>The plugin was not loaded.</source>
+ <translation>플러그인을 불러오지 못했습니다.</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintDialog</name>
+ <message>
+ <source>Print</source>
+ <translation>인쇄</translation>
+ </message>
+ <message>
+ <source>A0</source>
+ <translation>A0</translation>
+ </message>
+ <message>
+ <source>A1</source>
+ <translation>A1</translation>
+ </message>
+ <message>
+ <source>A2</source>
+ <translation>A2</translation>
+ </message>
+ <message>
+ <source>A3</source>
+ <translation>A3</translation>
+ </message>
+ <message>
+ <source>A4</source>
+ <translation>A4</translation>
+ </message>
+ <message>
+ <source>A5</source>
+ <translation>A5</translation>
+ </message>
+ <message>
+ <source>A6</source>
+ <translation>A6</translation>
+ </message>
+ <message>
+ <source>A7</source>
+ <translation>A7</translation>
+ </message>
+ <message>
+ <source>A8</source>
+ <translation>A8</translation>
+ </message>
+ <message>
+ <source>A9</source>
+ <translation>A9</translation>
+ </message>
+ <message>
+ <source>B0</source>
+ <translation>B0</translation>
+ </message>
+ <message>
+ <source>B1</source>
+ <translation>B1</translation>
+ </message>
+ <message>
+ <source>B2</source>
+ <translation>B2</translation>
+ </message>
+ <message>
+ <source>B3</source>
+ <translation>B3</translation>
+ </message>
+ <message>
+ <source>B4</source>
+ <translation>B4</translation>
+ </message>
+ <message>
+ <source>B5</source>
+ <translation>B5</translation>
+ </message>
+ <message>
+ <source>B6</source>
+ <translation>B6</translation>
+ </message>
+ <message>
+ <source>B7</source>
+ <translation>B7</translation>
+ </message>
+ <message>
+ <source>B8</source>
+ <translation>B8</translation>
+ </message>
+ <message>
+ <source>B9</source>
+ <translation>B9</translation>
+ </message>
+ <message>
+ <source>B10</source>
+ <translation>B10</translation>
+ </message>
+ <message>
+ <source>C5E</source>
+ <translation>C5E</translation>
+ </message>
+ <message>
+ <source>DLE</source>
+ <translation>DLE</translation>
+ </message>
+ <message>
+ <source>Executive</source>
+ <translation>Executive</translation>
+ </message>
+ <message>
+ <source>Folio</source>
+ <translation>폴리오</translation>
+ </message>
+ <message>
+ <source>Ledger</source>
+ <translation>레저</translation>
+ </message>
+ <message>
+ <source>Legal</source>
+ <translation>리갈</translation>
+ </message>
+ <message>
+ <source>Letter</source>
+ <translation>레터</translation>
+ </message>
+ <message>
+ <source>Tabloid</source>
+ <translation>타블로이드</translation>
+ </message>
+ <message>
+ <source>US Common #10 Envelope</source>
+ <translation>미국 공용 봉투 #10</translation>
+ </message>
+ <message>
+ <source>Custom</source>
+ <translation>사용자 정의</translation>
+ </message>
+ <message>
+ <source>File exists</source>
+ <translation>파일이 존재함</translation>
+ </message>
+ <message>
+ <source>&lt;qt&gt;Do you want to overwrite it?&lt;/qt&gt;</source>
+ <translation>&lt;qt&gt;덮어쓰시겠습니까?&lt;/qt&gt;</translation>
+ </message>
+ <message>
+ <source>A0 (841 x 1189 mm)</source>
+ <translation>A0 (841 x 1189 mm)</translation>
+ </message>
+ <message>
+ <source>A1 (594 x 841 mm)</source>
+ <translation>A1 (594 x 841 mm)</translation>
+ </message>
+ <message>
+ <source>A2 (420 x 594 mm)</source>
+ <translation>A2 (420 x 594 mm)</translation>
+ </message>
+ <message>
+ <source>A3 (297 x 420 mm)</source>
+ <translation>A3 (297 x 420 mm)</translation>
+ </message>
+ <message>
+ <source>A4 (210 x 297 mm, 8.26 x 11.7 inches)</source>
+ <translation>A4 (210 x 297 mm, 8.26 x 11.7 인치)</translation>
+ </message>
+ <message>
+ <source>A5 (148 x 210 mm)</source>
+ <translation>A5 (148 x 210 mm)</translation>
+ </message>
+ <message>
+ <source>A6 (105 x 148 mm)</source>
+ <translation>A6 (105 x 148 mm)</translation>
+ </message>
+ <message>
+ <source>A7 (74 x 105 mm)</source>
+ <translation>A7 (74 x 105 mm)</translation>
+ </message>
+ <message>
+ <source>A8 (52 x 74 mm)</source>
+ <translation>A8 (52 x 74 mm)</translation>
+ </message>
+ <message>
+ <source>A9 (37 x 52 mm)</source>
+ <translation>A9 (37 x 52 mm)</translation>
+ </message>
+ <message>
+ <source>B0 (1000 x 1414 mm)</source>
+ <translation>B0 (1000 x 1414 mm)</translation>
+ </message>
+ <message>
+ <source>B1 (707 x 1000 mm)</source>
+ <translation>B1 (707 x 1000 mm)</translation>
+ </message>
+ <message>
+ <source>B2 (500 x 707 mm)</source>
+ <translation>B2 (500 x 707 mm)</translation>
+ </message>
+ <message>
+ <source>B3 (353 x 500 mm)</source>
+ <translation>B3 (353 x 500 mm)</translation>
+ </message>
+ <message>
+ <source>B4 (250 x 353 mm)</source>
+ <translation>B4 (250 x 353 mm)</translation>
+ </message>
+ <message>
+ <source>B5 (176 x 250 mm, 6.93 x 9.84 inches)</source>
+ <translation>B5 (176 x 250 mm, 6.93 x 9.84 인치)</translation>
+ </message>
+ <message>
+ <source>B6 (125 x 176 mm)</source>
+ <translation>B6 (125 x 176 mm)</translation>
+ </message>
+ <message>
+ <source>B7 (88 x 125 mm)</source>
+ <translation>B7 (88 x 125 mm)</translation>
+ </message>
+ <message>
+ <source>B8 (62 x 88 mm)</source>
+ <translation>B8 (62 x 88 mm)</translation>
+ </message>
+ <message>
+ <source>B9 (44 x 62 mm)</source>
+ <translation>B9 (44 x 62 mm)</translation>
+ </message>
+ <message>
+ <source>B10 (31 x 44 mm)</source>
+ <translation>B10 (31 x 44 mm)</translation>
+ </message>
+ <message>
+ <source>C5E (163 x 229 mm)</source>
+ <translation>C5E (163 x 229 mm)</translation>
+ </message>
+ <message>
+ <source>DLE (110 x 220 mm)</source>
+ <translation>DLE (110 x 220 mm)</translation>
+ </message>
+ <message>
+ <source>Executive (7.5 x 10 inches, 191 x 254 mm)</source>
+ <translation>Executive (7.5 x 10 인치, 191 x 254 mm)</translation>
+ </message>
+ <message>
+ <source>Folio (210 x 330 mm)</source>
+ <translation>폴리오 (210 x 330 mm)</translation>
+ </message>
+ <message>
+ <source>Ledger (432 x 279 mm)</source>
+ <translation>레저 (432 x 279 mm)</translation>
+ </message>
+ <message>
+ <source>Legal (8.5 x 14 inches, 216 x 356 mm)</source>
+ <translation>리갈 (8.5 x 14 인치, 216 x 356 mm)</translation>
+ </message>
+ <message>
+ <source>Letter (8.5 x 11 inches, 216 x 279 mm)</source>
+ <translation>레터 (8.5 x 11 인치, 216 x 279 mm)</translation>
+ </message>
+ <message>
+ <source>Tabloid (279 x 432 mm)</source>
+ <translation>타블로이드 (279 x 432 mm)</translation>
+ </message>
+ <message>
+ <source>US Common #10 Envelope (105 x 241 mm)</source>
+ <translation>미국 공용 봉투 #10 (105 x 241 mm)</translation>
+ </message>
+ <message>
+ <source>Print all</source>
+ <translation>모두 인쇄</translation>
+ </message>
+ <message>
+ <source>Print selection</source>
+ <translation>선택 영역만 인쇄</translation>
+ </message>
+ <message>
+ <source>Print range</source>
+ <translation>인쇄 범위</translation>
+ </message>
+ <message>
+ <source>Print current page</source>
+ <translation>현재 쪽 인쇄</translation>
+ </message>
+ <message>
+ <source>&amp;Options &gt;&gt;</source>
+ <translation>설정(&amp;O) &gt;&gt;</translation>
+ </message>
+ <message>
+ <source>&amp;Print</source>
+ <translation>인쇄(&amp;P)</translation>
+ </message>
+ <message>
+ <source>&amp;Options &lt;&lt;</source>
+ <translation>설정(&amp;O) &lt;&lt;</translation>
+ </message>
+ <message>
+ <source>Print to File (PDF)</source>
+ <translation>파일로 인쇄 (PDF)</translation>
+ </message>
+ <message>
+ <source>Print to File (Postscript)</source>
+ <translation>파일로 인쇄 (포스트스크립트)</translation>
+ </message>
+ <message>
+ <source>Local file</source>
+ <translation>로컬 파일</translation>
+ </message>
+ <message>
+ <source>Write %1 file</source>
+ <translation>%1 파일로 쓰기</translation>
+ </message>
+ <message>
+ <source>Print To File ...</source>
+ <translation>파일로 인쇄...</translation>
+ </message>
+ <message>
+ <source>%1 is a directory.
+Please choose a different file name.</source>
+ <translation>%1은(는) 디렉터리입니다.
+다른 파일 이름을 선택하십시오.</translation>
+ </message>
+ <message>
+ <source>File %1 is not writable.
+Please choose a different file name.</source>
+ <translation>파일 %1에 쓸 수 없습니다.
+다른 파일 이름을 선택하십시오.</translation>
+ </message>
+ <message>
+ <source>%1 already exists.
+Do you want to overwrite it?</source>
+ <translation>%1이(가) 이미 존재합니다.
+덮어쓰시겠습니까?</translation>
+ </message>
+ <message>
+ <source>The &apos;From&apos; value cannot be greater than the &apos;To&apos; value.</source>
+ <translation>&apos;시작&apos; 값이 &apos;끝&apos; 값보다 클 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <source>locally connected</source>
+ <translation>로컬로 연결됨</translation>
+ </message>
+ <message>
+ <source>Aliases: %1</source>
+ <translation>별명: %1</translation>
+ </message>
+ <message>
+ <source>unknown</source>
+ <translation>알 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintPreviewDialog</name>
+ <message>
+ <source>Page Setup</source>
+ <translation>쪽 설정</translation>
+ </message>
+ <message>
+ <source>%1%</source>
+ <translation>%1%</translation>
+ </message>
+ <message>
+ <source>Print Preview</source>
+ <translation>인쇄 미리 보기</translation>
+ </message>
+ <message>
+ <source>Next page</source>
+ <translation>다음 쪽</translation>
+ </message>
+ <message>
+ <source>Previous page</source>
+ <translation>이전 쪽</translation>
+ </message>
+ <message>
+ <source>First page</source>
+ <translation>첫 쪽</translation>
+ </message>
+ <message>
+ <source>Last page</source>
+ <translation>마지막 쪽</translation>
+ </message>
+ <message>
+ <source>Fit width</source>
+ <translation>폭 맞춤</translation>
+ </message>
+ <message>
+ <source>Fit page</source>
+ <translation>쪽 맞춤</translation>
+ </message>
+ <message>
+ <source>Zoom in</source>
+ <translation>확대</translation>
+ </message>
+ <message>
+ <source>Zoom out</source>
+ <translation>축소</translation>
+ </message>
+ <message>
+ <source>Portrait</source>
+ <translation>세로</translation>
+ </message>
+ <message>
+ <source>Landscape</source>
+ <translation>가로</translation>
+ </message>
+ <message>
+ <source>Show single page</source>
+ <translation>한 쪽 보이기</translation>
+ </message>
+ <message>
+ <source>Show facing pages</source>
+ <translation>맞쪽 보기</translation>
+ </message>
+ <message>
+ <source>Show overview of all pages</source>
+ <translation>전체 쪽 보기</translation>
+ </message>
+ <message>
+ <source>Print</source>
+ <translation>인쇄</translation>
+ </message>
+ <message>
+ <source>Page setup</source>
+ <translation>쪽 설정</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>Export to PDF</source>
+ <translation>PDF로 내보내기</translation>
+ </message>
+ <message>
+ <source>Export to PostScript</source>
+ <translation>포스트스크립트로 내보내기</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintPropertiesWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Page</source>
+ <translation>쪽</translation>
+ </message>
+ <message>
+ <source>Advanced</source>
+ <translation>고급</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintSettingsOutput</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Copies</source>
+ <translation>복사 부수</translation>
+ </message>
+ <message>
+ <source>Print range</source>
+ <translation>인쇄 범위</translation>
+ </message>
+ <message>
+ <source>Print all</source>
+ <translation>모두 인쇄</translation>
+ </message>
+ <message>
+ <source>Pages from</source>
+ <translation>시작 쪽</translation>
+ </message>
+ <message>
+ <source>to</source>
+ <translation>끝 쪽</translation>
+ </message>
+ <message>
+ <source>Current Page</source>
+ <translation>현재 쪽</translation>
+ </message>
+ <message>
+ <source>Selection</source>
+ <translation>선택</translation>
+ </message>
+ <message>
+ <source>Output Settings</source>
+ <translation>출력 설정</translation>
+ </message>
+ <message>
+ <source>Copies:</source>
+ <translation>복사 부수:</translation>
+ </message>
+ <message>
+ <source>Collate</source>
+ <translation>한 부씩 인쇄</translation>
+ </message>
+ <message>
+ <source>Reverse</source>
+ <translation>역순 인쇄</translation>
+ </message>
+ <message>
+ <source>Options</source>
+ <translation>옵션</translation>
+ </message>
+ <message>
+ <source>Color Mode</source>
+ <translation>색 모드</translation>
+ </message>
+ <message>
+ <source>Color</source>
+ <translation>색상</translation>
+ </message>
+ <message>
+ <source>Grayscale</source>
+ <translation>그레이스케일</translation>
+ </message>
+ <message>
+ <source>Duplex Printing</source>
+ <translation>양면 인쇄</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>없음</translation>
+ </message>
+ <message>
+ <source>Long side</source>
+ <translation>긴 쪽</translation>
+ </message>
+ <message>
+ <source>Short side</source>
+ <translation>짧은 쪽</translation>
+ </message>
+</context>
+<context>
+ <name>QPrintWidget</name>
+ <message>
+ <source>Form</source>
+ <translation>폼</translation>
+ </message>
+ <message>
+ <source>Printer</source>
+ <translation>프린터</translation>
+ </message>
+ <message>
+ <source>&amp;Name:</source>
+ <translation>이름(&amp;N):</translation>
+ </message>
+ <message>
+ <source>P&amp;roperties</source>
+ <translation>속성(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Location:</source>
+ <translation>위치:</translation>
+ </message>
+ <message>
+ <source>Preview</source>
+ <translation>미리 보기</translation>
+ </message>
+ <message>
+ <source>Type:</source>
+ <translation>종류:</translation>
+ </message>
+ <message>
+ <source>Output &amp;file:</source>
+ <translation>출력 파일(&amp;F):</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+</context>
+<context>
+ <name>QProcess</name>
+ <message>
+ <source>Error reading from process</source>
+ <translation>프로세스에서 읽을 수 없음</translation>
+ </message>
+ <message>
+ <source>Error writing to process</source>
+ <translation>프로세스에 쓸 수 없음</translation>
+ </message>
+ <message>
+ <source>Process crashed</source>
+ <translation>프로세스가 충돌함</translation>
+ </message>
+ <message>
+ <source>No program defined</source>
+ <translation>프로그램이 지정되지 않음</translation>
+ </message>
+ <message>
+ <source>Could not open input redirection for reading</source>
+ <translation>읽기 위해 입력 리다이렉션을 열 수 없음</translation>
+ </message>
+ <message>
+ <source>Could not open output redirection for writing</source>
+ <translation>쓰기 위해 출력 리다이렉션을 열 수 없음</translation>
+ </message>
+ <message>
+ <source>Resource error (fork failure): %1</source>
+ <translation>자원 오류 (fork 실패): %1</translation>
+ </message>
+ <message>
+ <source>Process operation timed out</source>
+ <translation>프로세스 작업 시간 초과</translation>
+ </message>
+ <message>
+ <source>Process failed to start: %1</source>
+ <translation>프로세스를 시작할 수 없음: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QProgressDialog</name>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+</context>
+<context>
+ <name>QPushButton</name>
+ <message>
+ <source>Open</source>
+ <translation>열기</translation>
+ </message>
+</context>
+<context>
+ <name>QRadioButton</name>
+ <message>
+ <source>Check</source>
+ <translation>선택</translation>
+ </message>
+</context>
+<context>
+ <name>QRegExp</name>
+ <message>
+ <source>no error occurred</source>
+ <translation>오류 없음</translation>
+ </message>
+ <message>
+ <source>disabled feature used</source>
+ <translation>비활성화된 기능 사용됨</translation>
+ </message>
+ <message>
+ <source>bad char class syntax</source>
+ <translation>잘못된 문자열 클래스 문법</translation>
+ </message>
+ <message>
+ <source>bad lookahead syntax</source>
+ <translation>잘못된 룩어헤드 문법</translation>
+ </message>
+ <message>
+ <source>bad repetition syntax</source>
+ <translation>잘못된 반복 문법</translation>
+ </message>
+ <message>
+ <source>invalid octal value</source>
+ <translation>잘못된 8진 값</translation>
+ </message>
+ <message>
+ <source>missing left delim</source>
+ <translation>왼쪽 구분자 없음</translation>
+ </message>
+ <message>
+ <source>unexpected end</source>
+ <translation>예상하지 못한 끝</translation>
+ </message>
+ <message>
+ <source>met internal limit</source>
+ <translation>내부 한계에 도달함</translation>
+ </message>
+ <message>
+ <source>invalid interval</source>
+ <translation>잘못된 간격</translation>
+ </message>
+ <message>
+ <source>invalid category</source>
+ <translation>잘못된 분류</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLite2Driver</name>
+ <message>
+ <source>Error opening database</source>
+ <translation>데이터베이스를 여는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>트랜잭션을 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>트랜잭션을 커밋할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>트랜잭션을 되돌릴 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLite2Result</name>
+ <message>
+ <source>Unable to fetch results</source>
+ <translation>결과를 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>구문을 실행할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLiteDriver</name>
+ <message>
+ <source>Error opening database</source>
+ <translation>데이터베이스를 여는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>Error closing database</source>
+ <translation>데이터베이스를 닫는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>Unable to begin transaction</source>
+ <translation>트랜잭션을 시작할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to commit transaction</source>
+ <translation>트랜잭션을 커밋할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to rollback transaction</source>
+ <translation>트랜잭션을 되돌릴 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QSQLiteResult</name>
+ <message>
+ <source>Unable to fetch row</source>
+ <translation>열을 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>No query</source>
+ <translation>쿼리 없음</translation>
+ </message>
+ <message>
+ <source>Unable to execute statement</source>
+ <translation>구문을 실행할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to reset statement</source>
+ <translation>구문을 초기화할 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to bind parameters</source>
+ <translation>인자를 바인딩할 수 없음</translation>
+ </message>
+ <message>
+ <source>Parameter count mismatch</source>
+ <translation>인자 수가 일치하지 않음</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptBreakpointsModel</name>
+ <message>
+ <source>ID</source>
+ <translation>ID</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>위치</translation>
+ </message>
+ <message>
+ <source>Condition</source>
+ <translation>조건</translation>
+ </message>
+ <message>
+ <source>Ignore-count</source>
+ <translation>무시 개수</translation>
+ </message>
+ <message>
+ <source>Single-shot</source>
+ <translation>싱글 샷</translation>
+ </message>
+ <message>
+ <source>Hit-count</source>
+ <translation>일치 개수</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptBreakpointsWidget</name>
+ <message>
+ <source>New</source>
+ <translation>새로 만들기</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebugger</name>
+ <message>
+ <source>Go to Line</source>
+ <translation>줄로 가기</translation>
+ </message>
+ <message>
+ <source>Line:</source>
+ <translation>줄:</translation>
+ </message>
+ <message>
+ <source>Interrupt</source>
+ <translation>인터럽트</translation>
+ </message>
+ <message>
+ <source>Shift+F5</source>
+ <translation>Shift+F5</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>계속</translation>
+ </message>
+ <message>
+ <source>F5</source>
+ <translation>F5</translation>
+ </message>
+ <message>
+ <source>Step Into</source>
+ <translation>안으로 들어가기</translation>
+ </message>
+ <message>
+ <source>F11</source>
+ <translation>F11</translation>
+ </message>
+ <message>
+ <source>Step Over</source>
+ <translation>넘어가기</translation>
+ </message>
+ <message>
+ <source>F10</source>
+ <translation>F10</translation>
+ </message>
+ <message>
+ <source>Step Out</source>
+ <translation>빠져 나가기</translation>
+ </message>
+ <message>
+ <source>Shift+F11</source>
+ <translation>Shift+F11</translation>
+ </message>
+ <message>
+ <source>Run to Cursor</source>
+ <translation>커서까지 실행</translation>
+ </message>
+ <message>
+ <source>Ctrl+F10</source>
+ <translation>Ctrl+F10</translation>
+ </message>
+ <message>
+ <source>Run to New Script</source>
+ <translation>새 스크립트까지 실행</translation>
+ </message>
+ <message>
+ <source>Toggle Breakpoint</source>
+ <translation>중단점 지정/해제</translation>
+ </message>
+ <message>
+ <source>F9</source>
+ <translation>F9</translation>
+ </message>
+ <message>
+ <source>Clear Debug Output</source>
+ <translation>디버그 출력 삭제</translation>
+ </message>
+ <message>
+ <source>Clear Error Log</source>
+ <translation>오류 로그 삭제</translation>
+ </message>
+ <message>
+ <source>Clear Console</source>
+ <translation>콘솔 삭제</translation>
+ </message>
+ <message>
+ <source>&amp;Find in Script...</source>
+ <translation>스크립트에서 찾기(&amp;F)...</translation>
+ </message>
+ <message>
+ <source>Ctrl+F</source>
+ <translation>Ctrl+F</translation>
+ </message>
+ <message>
+ <source>Find &amp;Next</source>
+ <translation>다음 찾기(&amp;N)</translation>
+ </message>
+ <message>
+ <source>F3</source>
+ <translation>F3</translation>
+ </message>
+ <message>
+ <source>Find &amp;Previous</source>
+ <translation>이전 찾기(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Shift+F3</source>
+ <translation>Shift+F3</translation>
+ </message>
+ <message>
+ <source>Ctrl+G</source>
+ <translation>Ctrl+G</translation>
+ </message>
+ <message>
+ <source>Debug</source>
+ <translation>디버그</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebuggerCodeFinderWidget</name>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>Previous</source>
+ <translation>이전</translation>
+ </message>
+ <message>
+ <source>Next</source>
+ <translation>다음</translation>
+ </message>
+ <message>
+ <source>Case Sensitive</source>
+ <translation>대소문자 구분</translation>
+ </message>
+ <message>
+ <source>Whole words</source>
+ <translation>단어 단위로</translation>
+ </message>
+ <message>
+ <source>&lt;img src=&quot;:/qt/scripttools/debugging/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
+ <translation>&lt;img src=&quot;:/qt/scripttools/debugging/images/wrap.png&quot;&gt;&amp;nbsp;검색 다시 시작됨</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebuggerLocalsModel</name>
+ <message>
+ <source>Name</source>
+ <translation>이름</translation>
+ </message>
+ <message>
+ <source>Value</source>
+ <translation>값</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptDebuggerStackModel</name>
+ <message>
+ <source>Level</source>
+ <translation>단계</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <translation>이름</translation>
+ </message>
+ <message>
+ <source>Location</source>
+ <translation>위치</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptEdit</name>
+ <message>
+ <source>Toggle Breakpoint</source>
+ <translation>중단점 설정/해제</translation>
+ </message>
+ <message>
+ <source>Disable Breakpoint</source>
+ <translation>중단점 해제</translation>
+ </message>
+ <message>
+ <source>Enable Breakpoint</source>
+ <translation>중단점 설정</translation>
+ </message>
+ <message>
+ <source>Breakpoint Condition:</source>
+ <translation>중단점 조건:</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptEngineDebugger</name>
+ <message>
+ <source>Loaded Scripts</source>
+ <translation>불러온 스크립트</translation>
+ </message>
+ <message>
+ <source>Breakpoints</source>
+ <translation>중단점</translation>
+ </message>
+ <message>
+ <source>Stack</source>
+ <translation>스택</translation>
+ </message>
+ <message>
+ <source>Locals</source>
+ <translation>지역 변수</translation>
+ </message>
+ <message>
+ <source>Console</source>
+ <translation>콘솔</translation>
+ </message>
+ <message>
+ <source>Debug Output</source>
+ <translation>디버그 출력</translation>
+ </message>
+ <message>
+ <source>Error Log</source>
+ <translation>오류 로그</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation>검색</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>보기</translation>
+ </message>
+ <message>
+ <source>Qt Script Debugger</source>
+ <translation>Qt 스크립트 디버거</translation>
+ </message>
+</context>
+<context>
+ <name>QScriptNewBreakpointWidget</name>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+</context>
+<context>
+ <name>QScrollBar</name>
+ <message>
+ <source>Scroll here</source>
+ <translation>여기로 스크롤</translation>
+ </message>
+ <message>
+ <source>Left edge</source>
+ <translation>왼쪽 경계</translation>
+ </message>
+ <message>
+ <source>Top</source>
+ <translation>맨 위</translation>
+ </message>
+ <message>
+ <source>Right edge</source>
+ <translation>오른쪽 경계</translation>
+ </message>
+ <message>
+ <source>Bottom</source>
+ <translation>맨 아래</translation>
+ </message>
+ <message>
+ <source>Page left</source>
+ <translation>왼쪽 페이지</translation>
+ </message>
+ <message>
+ <source>Page up</source>
+ <translation>위쪽 페이지</translation>
+ </message>
+ <message>
+ <source>Page right</source>
+ <translation>오른쪽 페이지</translation>
+ </message>
+ <message>
+ <source>Page down</source>
+ <translation>아래쪽 페이지</translation>
+ </message>
+ <message>
+ <source>Scroll left</source>
+ <translation>왼쪽으로 스크롤</translation>
+ </message>
+ <message>
+ <source>Scroll up</source>
+ <translation>위로 스크롤</translation>
+ </message>
+ <message>
+ <source>Scroll right</source>
+ <translation>오른쪽으로 스크롤</translation>
+ </message>
+ <message>
+ <source>Scroll down</source>
+ <translation>아래로 스크롤</translation>
+ </message>
+ <message>
+ <source>Line up</source>
+ <translation>한 줄 위로</translation>
+ </message>
+ <message>
+ <source>Position</source>
+ <translation>위치</translation>
+ </message>
+ <message>
+ <source>Line down</source>
+ <translation>한 줄 아래로</translation>
+ </message>
+</context>
+<context>
+ <name>QSharedMemory</name>
+ <message>
+ <source>%1: unable to set key on lock</source>
+ <translation>%1: 잠금에 키를 설정할 수 없음</translation>
+ </message>
+ <message>
+ <source>%1: create size is less then 0</source>
+ <translation>%1: 생성 크기가 0 미만임</translation>
+ </message>
+ <message>
+ <source>%1: unable to lock</source>
+ <translation>%1: 잠글 수 없음</translation>
+ </message>
+ <message>
+ <source>%1: unable to unlock</source>
+ <translation>%1: 잠금을 풀 수 없음</translation>
+ </message>
+ <message>
+ <source>%1: already exists</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 이미 존재함</translation>
+ </message>
+ <message>
+ <source>%1: doesn&apos;t exists</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 존재하지 않음</translation>
+ </message>
+ <message>
+ <source>%1: already exists</source>
+ <translation>%1: 이미 존재함</translation>
+ </message>
+ <message>
+ <source>%1: doesn&apos;t exists</source>
+ <translation>%1: 존재하지 않음</translation>
+ </message>
+ <message>
+ <source>%1: invalid size</source>
+ <translation>%1: 잘못된 크기</translation>
+ </message>
+ <message>
+ <source>%1: out of resources</source>
+ <translation>%1: 자원 부족</translation>
+ </message>
+ <message>
+ <source>%1: permission denied</source>
+ <translation>%1: 권한이 거부됨</translation>
+ </message>
+ <message>
+ <source>%1: unknown error %2</source>
+ <translation>%1: 알 수 없는 오류 %2</translation>
+ </message>
+ <message>
+ <source>%1: unable to make key</source>
+ <translation>%1: 키를 만들 수 없음</translation>
+ </message>
+ <message>
+ <source>%1: permission denied</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 권한이 거부됨</translation>
+ </message>
+ <message>
+ <source>%1: unknown error %2</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 알 수 없는 오류 %2</translation>
+ </message>
+ <message>
+ <source>%1: key error</source>
+ <translation>%1: 키 오류</translation>
+ </message>
+ <message>
+ <source>%1: unable to make key</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 키를 만들 수 없음</translation>
+ </message>
+ <message>
+ <source>%1: doesn&apos;t exist</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 존재하지 않음</translation>
+ </message>
+ <message>
+ <source>%1: key is empty</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 키가 비어 있음</translation>
+ </message>
+ <message>
+ <source>%1: UNIX key file doesn&apos;t exist</source>
+ <translation>%1: 유닉스 키 파일이 없음</translation>
+ </message>
+ <message>
+ <source>%1: ftok failed</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: ftok 실패</translation>
+ </message>
+ <message>
+ <source>%1: doesn&apos;t exist</source>
+ <translation>%1: 존재하지 않음</translation>
+ </message>
+ <message>
+ <source>%1: key is empty</source>
+ <translation>%1: 키가 비어 있음</translation>
+ </message>
+ <message>
+ <source>%1: ftok failed</source>
+ <translation>%1: ftok 실패</translation>
+ </message>
+ <message>
+ <source>%1: system-imposed size restrictions</source>
+ <translation>%1: 시스템에서 크게를 제한함</translation>
+ </message>
+ <message>
+ <source>%1: not attached</source>
+ <translation>%1: 연결되지 않음</translation>
+ </message>
+ <message>
+ <source>%1: size query failed</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 크기 조회 실패</translation>
+ </message>
+ <message>
+ <source>%1: size query failed</source>
+ <translation>%1: 크기 조회 실패</translation>
+ </message>
+</context>
+<context>
+ <name>QShortcut</name>
+ <message>
+ <source>Space</source>
+ <extracomment>This and all following &quot;incomprehensible&quot; strings in QShortcut context are key names. Please use the localized names appearing on actual keyboards or whatever is commonly used.</extracomment>
+ <translation>Space</translation>
+ </message>
+ <message>
+ <source>Esc</source>
+ <translation>Esc</translation>
+ </message>
+ <message>
+ <source>Tab</source>
+ <translation>Tab</translation>
+ </message>
+ <message>
+ <source>Backtab</source>
+ <translation>Backtab</translation>
+ </message>
+ <message>
+ <source>Backspace</source>
+ <translation>Backspace</translation>
+ </message>
+ <message>
+ <source>Return</source>
+ <translation>Return</translation>
+ </message>
+ <message>
+ <source>Enter</source>
+ <translation>Enter</translation>
+ </message>
+ <message>
+ <source>Ins</source>
+ <translation>Ins</translation>
+ </message>
+ <message>
+ <source>Del</source>
+ <translation>Del</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>Pause</translation>
+ </message>
+ <message>
+ <source>Print</source>
+ <translation>Print</translation>
+ </message>
+ <message>
+ <source>SysReq</source>
+ <translation>SysReq</translation>
+ </message>
+ <message>
+ <source>Home</source>
+ <translation>Home</translation>
+ </message>
+ <message>
+ <source>End</source>
+ <translation>End</translation>
+ </message>
+ <message>
+ <source>Left</source>
+ <translation>왼쪽</translation>
+ </message>
+ <message>
+ <source>Up</source>
+ <translation>위</translation>
+ </message>
+ <message>
+ <source>Right</source>
+ <translation>오른쪽</translation>
+ </message>
+ <message>
+ <source>Down</source>
+ <translation>아래</translation>
+ </message>
+ <message>
+ <source>PgUp</source>
+ <translation>PgUp</translation>
+ </message>
+ <message>
+ <source>PgDown</source>
+ <translation>PgDown</translation>
+ </message>
+ <message>
+ <source>CapsLock</source>
+ <translation>CapsLock</translation>
+ </message>
+ <message>
+ <source>NumLock</source>
+ <translation>NumLock</translation>
+ </message>
+ <message>
+ <source>ScrollLock</source>
+ <translation>ScrollLock</translation>
+ </message>
+ <message>
+ <source>Menu</source>
+ <translation>메뉴</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>도움말</translation>
+ </message>
+ <message>
+ <source>Back</source>
+ <translation>뒤로</translation>
+ </message>
+ <message>
+ <source>Forward</source>
+ <translation>앞으로</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation>정지</translation>
+ </message>
+ <message>
+ <source>Refresh</source>
+ <translation>새로 고침</translation>
+ </message>
+ <message>
+ <source>Volume Down</source>
+ <translation>음량 감소</translation>
+ </message>
+ <message>
+ <source>Volume Mute</source>
+ <translation>음소거</translation>
+ </message>
+ <message>
+ <source>Volume Up</source>
+ <translation>음량 증가</translation>
+ </message>
+ <message>
+ <source>Bass Boost</source>
+ <translation>저음 강조</translation>
+ </message>
+ <message>
+ <source>Bass Up</source>
+ <translation>저음 증가</translation>
+ </message>
+ <message>
+ <source>Bass Down</source>
+ <translation>저음 감소</translation>
+ </message>
+ <message>
+ <source>Treble Up</source>
+ <translation>고음 증가</translation>
+ </message>
+ <message>
+ <source>Treble Down</source>
+ <translation>고음 감소</translation>
+ </message>
+ <message>
+ <source>Media Play</source>
+ <translation>미디어 재생</translation>
+ </message>
+ <message>
+ <source>Media Stop</source>
+ <translation>미디어 정지</translation>
+ </message>
+ <message>
+ <source>Media Previous</source>
+ <translation>미디어 이전</translation>
+ </message>
+ <message>
+ <source>Media Next</source>
+ <translation>미디어 다음</translation>
+ </message>
+ <message>
+ <source>Media Record</source>
+ <translation>미디어 녹음</translation>
+ </message>
+ <message>
+ <source>Media Pause</source>
+ <extracomment>Media player pause button</extracomment>
+ <translation>미디어 일시 정지</translation>
+ </message>
+ <message>
+ <source>Toggle Media Play/Pause</source>
+ <extracomment>Media player button to toggle between playing and paused</extracomment>
+ <translation>미디어 재생/일시 정지</translation>
+ </message>
+ <message>
+ <source>Home Page</source>
+ <translation>홈 페이지</translation>
+ </message>
+ <message>
+ <source>Favorites</source>
+ <translation>즐겨찾기</translation>
+ </message>
+ <message>
+ <source>Search</source>
+ <translation>검색</translation>
+ </message>
+ <message>
+ <source>Standby</source>
+ <translation>대기 모드</translation>
+ </message>
+ <message>
+ <source>Open URL</source>
+ <translation>URL 열기</translation>
+ </message>
+ <message>
+ <source>Launch Mail</source>
+ <translation>메일 실행</translation>
+ </message>
+ <message>
+ <source>Launch Media</source>
+ <translation>미디어 실행</translation>
+ </message>
+ <message>
+ <source>Launch (0)</source>
+ <translation>(0) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (1)</source>
+ <translation>(1) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (2)</source>
+ <translation>(2) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (3)</source>
+ <translation>(3) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (4)</source>
+ <translation>(4) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (5)</source>
+ <translation>(5) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (6)</source>
+ <translation>(6) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (7)</source>
+ <translation>(7) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (8)</source>
+ <translation>(8) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (9)</source>
+ <translation>(9) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (A)</source>
+ <translation>(A) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (B)</source>
+ <translation>(B) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (C)</source>
+ <translation>(C) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (D)</source>
+ <translation>(D) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (E)</source>
+ <translation>(E) 실행</translation>
+ </message>
+ <message>
+ <source>Launch (F)</source>
+ <translation>(F) 실행</translation>
+ </message>
+ <message>
+ <source>Monitor Brightness Up</source>
+ <translation>모니터 밝기 증가</translation>
+ </message>
+ <message>
+ <source>Monitor Brightness Down</source>
+ <translation>모니터 밝기 감소</translation>
+ </message>
+ <message>
+ <source>Keyboard Light On/Off</source>
+ <translation>키보드 백라이트 켬/끔</translation>
+ </message>
+ <message>
+ <source>Keyboard Brightness Up</source>
+ <translation>키보드 밝기 증가</translation>
+ </message>
+ <message>
+ <source>Keyboard Brightness Down</source>
+ <translation>키보드 밝기 감소</translation>
+ </message>
+ <message>
+ <source>Power Off</source>
+ <translation>전원 끄기</translation>
+ </message>
+ <message>
+ <source>Wake Up</source>
+ <translation>깨어나기</translation>
+ </message>
+ <message>
+ <source>Eject</source>
+ <translation>꺼내기</translation>
+ </message>
+ <message>
+ <source>Screensaver</source>
+ <translation>화면 보호기</translation>
+ </message>
+ <message>
+ <source>WWW</source>
+ <translation>WWW</translation>
+ </message>
+ <message>
+ <source>Sleep</source>
+ <translation>대기 모드</translation>
+ </message>
+ <message>
+ <source>LightBulb</source>
+ <translation>조명등</translation>
+ </message>
+ <message>
+ <source>Shop</source>
+ <translation>쇼핑</translation>
+ </message>
+ <message>
+ <source>History</source>
+ <translation>과거 기록</translation>
+ </message>
+ <message>
+ <source>Add Favorite</source>
+ <translation>즐겨찾기에 추가</translation>
+ </message>
+ <message>
+ <source>Hot Links</source>
+ <translation>인기있는 링크</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <translation>복사</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <translation>잘라내기</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <translation>붙여넣기</translation>
+ </message>
+ <message>
+ <source>Reload</source>
+ <translation>새로 고침</translation>
+ </message>
+ <message>
+ <source>Audio Forward</source>
+ <translation>오디오 빨리 감기</translation>
+ </message>
+ <message>
+ <source>Hot Links</source>
+ <comment>Copy Link context menu item</comment>
+ <translation type="obsolete">인기있는 링크</translation>
+ </message>
+ <message>
+ <source>Adjust Brightness</source>
+ <translation>밝기 조정</translation>
+ </message>
+ <message>
+ <source>Finance</source>
+ <translation>금융</translation>
+ </message>
+ <message>
+ <source>Community</source>
+ <translation>커뮤니티</translation>
+ </message>
+ <message>
+ <source>Audio Rewind</source>
+ <translation>오디오 되감기</translation>
+ </message>
+ <message>
+ <source>Back Forward</source>
+ <translation>뒤로 앞으로</translation>
+ </message>
+ <message>
+ <source>Application Left</source>
+ <translation>왼쪽 프로그램</translation>
+ </message>
+ <message>
+ <source>Application Right</source>
+ <translation>오른쪽 프로그램</translation>
+ </message>
+ <message>
+ <source>Book</source>
+ <translation>책</translation>
+ </message>
+ <message>
+ <source>CD</source>
+ <translation>CD</translation>
+ </message>
+ <message>
+ <source>Calculator</source>
+ <translation>계산기</translation>
+ </message>
+ <message>
+ <source>Clear</source>
+ <translation>지우기</translation>
+ </message>
+ <message>
+ <source>Clear Grab</source>
+ <translation>선택 지우기</translation>
+ </message>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <comment>Copy context menu item</comment>
+ <translation type="obsolete">복사</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <comment>Cut context menu item</comment>
+ <translation type="obsolete">잘라내기</translation>
+ </message>
+ <message>
+ <source>Display</source>
+ <translation>디스플레이</translation>
+ </message>
+ <message>
+ <source>DOS</source>
+ <translation>DOS</translation>
+ </message>
+ <message>
+ <source>Documents</source>
+ <translation>문서</translation>
+ </message>
+ <message>
+ <source>Spreadsheet</source>
+ <translation>스프레드시트</translation>
+ </message>
+ <message>
+ <source>Browser</source>
+ <translation>브라우저</translation>
+ </message>
+ <message>
+ <source>Game</source>
+ <translation>게임</translation>
+ </message>
+ <message>
+ <source>Go</source>
+ <translation>이동</translation>
+ </message>
+ <message>
+ <source>iTouch</source>
+ <translation>iTouch</translation>
+ </message>
+ <message>
+ <source>Logoff</source>
+ <translation>로그오프</translation>
+ </message>
+ <message>
+ <source>Market</source>
+ <translation>마켓</translation>
+ </message>
+ <message>
+ <source>Meeting</source>
+ <translation>미팅</translation>
+ </message>
+ <message>
+ <source>Keyboard Menu</source>
+ <translation>키보드 메뉴</translation>
+ </message>
+ <message>
+ <source>Menu PB</source>
+ <translation>메뉴 PB</translation>
+ </message>
+ <message>
+ <source>My Sites</source>
+ <translation>내 사이트</translation>
+ </message>
+ <message>
+ <source>News</source>
+ <translation>뉴스</translation>
+ </message>
+ <message>
+ <source>Home Office</source>
+ <translation>홈 오피스</translation>
+ </message>
+ <message>
+ <source>Option</source>
+ <translation>옵션</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <comment>Paste context menu item</comment>
+ <translation type="obsolete">붙여넣기</translation>
+ </message>
+ <message>
+ <source>Phone</source>
+ <translation>전화</translation>
+ </message>
+ <message>
+ <source>Reply</source>
+ <translation>답장</translation>
+ </message>
+ <message>
+ <source>Reload</source>
+ <comment>Reload context menu item</comment>
+ <translation type="obsolete">새로 고침</translation>
+ </message>
+ <message>
+ <source>Rotate Windows</source>
+ <translation>창 회전</translation>
+ </message>
+ <message>
+ <source>Rotation PB</source>
+ <translation>회전 PB</translation>
+ </message>
+ <message>
+ <source>Rotation KB</source>
+ <translation>회전 KB</translation>
+ </message>
+ <message>
+ <source>Save</source>
+ <translation>저장</translation>
+ </message>
+ <message>
+ <source>Send</source>
+ <translation>보내기</translation>
+ </message>
+ <message>
+ <source>Spellchecker</source>
+ <translation>맞춤법 검사</translation>
+ </message>
+ <message>
+ <source>Split Screen</source>
+ <translation>화면 나누기</translation>
+ </message>
+ <message>
+ <source>Support</source>
+ <translation>지원</translation>
+ </message>
+ <message>
+ <source>Task Panel</source>
+ <translation>작업 패널</translation>
+ </message>
+ <message>
+ <source>Terminal</source>
+ <translation>터미널</translation>
+ </message>
+ <message>
+ <source>Tools</source>
+ <translation>도구</translation>
+ </message>
+ <message>
+ <source>Travel</source>
+ <translation>여행</translation>
+ </message>
+ <message>
+ <source>Video</source>
+ <translation>비디오</translation>
+ </message>
+ <message>
+ <source>Word Processor</source>
+ <translation>워드 프로세서</translation>
+ </message>
+ <message>
+ <source>XFer</source>
+ <translation>전송</translation>
+ </message>
+ <message>
+ <source>Zoom In</source>
+ <translation>확대</translation>
+ </message>
+ <message>
+ <source>Zoom Out</source>
+ <translation>축소</translation>
+ </message>
+ <message>
+ <source>Away</source>
+ <translation>자리 비움</translation>
+ </message>
+ <message>
+ <source>Messenger</source>
+ <translation>메신저</translation>
+ </message>
+ <message>
+ <source>WebCam</source>
+ <translation>웹캠</translation>
+ </message>
+ <message>
+ <source>Mail Forward</source>
+ <translation>메일 전달</translation>
+ </message>
+ <message>
+ <source>Pictures</source>
+ <translation>그림</translation>
+ </message>
+ <message>
+ <source>Music</source>
+ <translation>음악</translation>
+ </message>
+ <message>
+ <source>Battery</source>
+ <translation>배터리</translation>
+ </message>
+ <message>
+ <source>Bluetooth</source>
+ <translation>블루투스</translation>
+ </message>
+ <message>
+ <source>Wireless</source>
+ <translation>무선</translation>
+ </message>
+ <message>
+ <source>Ultra Wide Band</source>
+ <translation>광대역</translation>
+ </message>
+ <message>
+ <source>Audio Forward</source>
+ <comment>Forward context menu item</comment>
+ <translation type="obsolete">오디오 빨리 감기</translation>
+ </message>
+ <message>
+ <source>Audio Repeat</source>
+ <translation>오디오 반복</translation>
+ </message>
+ <message>
+ <source>Audio Random Play</source>
+ <translation>오디오 무순서 연주</translation>
+ </message>
+ <message>
+ <source>Subtitle</source>
+ <translation>자막</translation>
+ </message>
+ <message>
+ <source>Audio Cycle Track</source>
+ <translation>오디오 트랙 회전</translation>
+ </message>
+ <message>
+ <source>Time</source>
+ <translation>시간</translation>
+ </message>
+ <message>
+ <source>Select</source>
+ <translation>선택</translation>
+ </message>
+ <message>
+ <source>View</source>
+ <translation>보기</translation>
+ </message>
+ <message>
+ <source>Top Menu</source>
+ <translation>최상위 메뉴</translation>
+ </message>
+ <message>
+ <source>Suspend</source>
+ <translation>대기 모드</translation>
+ </message>
+ <message>
+ <source>Hibernate</source>
+ <translation>최대 절전 모드</translation>
+ </message>
+ <message>
+ <source>Print Screen</source>
+ <translation>Print Screen</translation>
+ </message>
+ <message>
+ <source>Page Up</source>
+ <translation>Page Up</translation>
+ </message>
+ <message>
+ <source>Page Down</source>
+ <translation>Page Down</translation>
+ </message>
+ <message>
+ <source>Caps Lock</source>
+ <translation>Caps Lock</translation>
+ </message>
+ <message>
+ <source>Num Lock</source>
+ <translation>Num Lock</translation>
+ </message>
+ <message>
+ <source>Number Lock</source>
+ <translation>Number Lock</translation>
+ </message>
+ <message>
+ <source>Scroll Lock</source>
+ <translation>Scroll Lock</translation>
+ </message>
+ <message>
+ <source>Insert</source>
+ <translation>Insert</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>Delete</translation>
+ </message>
+ <message>
+ <source>Escape</source>
+ <translation>Escape</translation>
+ </message>
+ <message>
+ <source>System Request</source>
+ <translation>System Request</translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation>예</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>아니오</translation>
+ </message>
+ <message>
+ <source>Context1</source>
+ <translation>Context1</translation>
+ </message>
+ <message>
+ <source>Context2</source>
+ <translation>Context2</translation>
+ </message>
+ <message>
+ <source>Context3</source>
+ <translation>Context3</translation>
+ </message>
+ <message>
+ <source>Context4</source>
+ <translation>Context4</translation>
+ </message>
+ <message>
+ <source>Call</source>
+ <extracomment>Button to start a call (note: a separate button is used to end the call)</extracomment>
+ <translation>호출</translation>
+ </message>
+ <message>
+ <source>Hangup</source>
+ <extracomment>Button to end a call (note: a separate button is used to start the call)</extracomment>
+ <translation>끊기</translation>
+ </message>
+ <message>
+ <source>Toggle Call/Hangup</source>
+ <extracomment>Button that will hang up if we&apos;re in call, or make a call if we&apos;re not.</extracomment>
+ <translation>전화 걸기/끊기</translation>
+ </message>
+ <message>
+ <source>Flip</source>
+ <translation>뒤집기</translation>
+ </message>
+ <message>
+ <source>Voice Dial</source>
+ <extracomment>Button to trigger voice dialing</extracomment>
+ <translation>음성 다이얼</translation>
+ </message>
+ <message>
+ <source>Last Number Redial</source>
+ <extracomment>Button to redial the last number called</extracomment>
+ <translation>마지막 번호 재다이얼</translation>
+ </message>
+ <message>
+ <source>Camera Shutter</source>
+ <extracomment>Button to trigger the camera shutter (take a picture)</extracomment>
+ <translation>카메라 셔터</translation>
+ </message>
+ <message>
+ <source>Camera Focus</source>
+ <extracomment>Button to focus the camera</extracomment>
+ <translation>카메라 초점</translation>
+ </message>
+ <message>
+ <source>Kanji</source>
+ <translation>한자</translation>
+ </message>
+ <message>
+ <source>Muhenkan</source>
+ <translation>무변환</translation>
+ </message>
+ <message>
+ <source>Henkan</source>
+ <translation>변환</translation>
+ </message>
+ <message>
+ <source>Romaji</source>
+ <translation>로마자</translation>
+ </message>
+ <message>
+ <source>Hiragana</source>
+ <translation>히라가나</translation>
+ </message>
+ <message>
+ <source>Katakana</source>
+ <translation>가타가나</translation>
+ </message>
+ <message>
+ <source>Hiragana Katakana</source>
+ <translation>히라가나 가타가나</translation>
+ </message>
+ <message>
+ <source>Zenkaku</source>
+ <translation>전각</translation>
+ </message>
+ <message>
+ <source>Hankaku</source>
+ <translation>반각</translation>
+ </message>
+ <message>
+ <source>Zenkaku Hankaku</source>
+ <translation>전각 반각</translation>
+ </message>
+ <message>
+ <source>Touroku</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Massyo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Kana Lock</source>
+ <translation>가나 Lock</translation>
+ </message>
+ <message>
+ <source>Kana Shift</source>
+ <translation>가나 Shift</translation>
+ </message>
+ <message>
+ <source>Eisu Shift</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Eisu toggle</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Code input</source>
+ <translation>코드 입력</translation>
+ </message>
+ <message>
+ <source>Multiple Candidate</source>
+ <translation>다중 후보</translation>
+ </message>
+ <message>
+ <source>Previous Candidate</source>
+ <translation>이전 후보</translation>
+ </message>
+ <message>
+ <source>Hangul</source>
+ <translation>한글</translation>
+ </message>
+ <message>
+ <source>Hangul Start</source>
+ <translation>한글 시작</translation>
+ </message>
+ <message>
+ <source>Hangul End</source>
+ <translation>한글 끝</translation>
+ </message>
+ <message>
+ <source>Hangul Hanja</source>
+ <translation>한글 한자</translation>
+ </message>
+ <message>
+ <source>Hangul Jamo</source>
+ <translation>한글 자모</translation>
+ </message>
+ <message>
+ <source>Hangul Romaja</source>
+ <translation>한글 로마자</translation>
+ </message>
+ <message>
+ <source>Hangul Jeonja</source>
+ <translation>한글 전자</translation>
+ </message>
+ <message>
+ <source>Hangul Banja</source>
+ <translation>한글 반자</translation>
+ </message>
+ <message>
+ <source>Hangul PreHanja</source>
+ <translation>한글 한자 시작</translation>
+ </message>
+ <message>
+ <source>Hangul PostHanja</source>
+ <translation>한글 한자 끝</translation>
+ </message>
+ <message>
+ <source>Hangul Special</source>
+ <translation>한글 특수 기호</translation>
+ </message>
+ <message>
+ <source>Ctrl</source>
+ <translation>Ctrl</translation>
+ </message>
+ <message>
+ <source>Shift</source>
+ <translation>Shift</translation>
+ </message>
+ <message>
+ <source>Alt</source>
+ <translation>Alt</translation>
+ </message>
+ <message>
+ <source>Meta</source>
+ <translation>Meta</translation>
+ </message>
+ <message>
+ <source>+</source>
+ <translation>+</translation>
+ </message>
+ <message>
+ <source>F%1</source>
+ <translation>F%1</translation>
+ </message>
+</context>
+<context>
+ <name>QSlider</name>
+ <message>
+ <source>Page left</source>
+ <translation>한 쪽 왼쪽으로</translation>
+ </message>
+ <message>
+ <source>Page up</source>
+ <translation>한 쪽 위로</translation>
+ </message>
+ <message>
+ <source>Position</source>
+ <translation>위치</translation>
+ </message>
+ <message>
+ <source>Page right</source>
+ <translation>한 쪽 오른쪽으로</translation>
+ </message>
+ <message>
+ <source>Page down</source>
+ <translation>한 쪽 아래로</translation>
+ </message>
+</context>
+<context>
+ <name>QSocks5SocketEngine</name>
+ <message>
+ <source>Connection to proxy refused</source>
+ <translation>프록시 연결이 거부됨</translation>
+ </message>
+ <message>
+ <source>Connection to proxy closed prematurely</source>
+ <translation>프록시 연결이 일찍 종료됨</translation>
+ </message>
+ <message>
+ <source>Proxy host not found</source>
+ <translation>프록시 호스트를 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>Connection to proxy timed out</source>
+ <translation>연결 시간 초과됨</translation>
+ </message>
+ <message>
+ <source>Proxy authentication failed</source>
+ <translation>프록시 인증 실패</translation>
+ </message>
+ <message>
+ <source>Proxy authentication failed: %1</source>
+ <translation>프록시 인증 실패: %1</translation>
+ </message>
+ <message>
+ <source>SOCKS version 5 protocol error</source>
+ <translation>SOCKS 버전 5 프로토콜 오류</translation>
+ </message>
+ <message>
+ <source>General SOCKSv5 server failure</source>
+ <translation>일반 SOCKSv5 서버 오류</translation>
+ </message>
+ <message>
+ <source>Connection not allowed by SOCKSv5 server</source>
+ <translation>SOCKSv5 서버 연결이 허용되지 않음</translation>
+ </message>
+ <message>
+ <source>TTL expired</source>
+ <translation>TTL 만료됨</translation>
+ </message>
+ <message>
+ <source>SOCKSv5 command not supported</source>
+ <translation>SOCKSv5 명령을 지원하지 않음</translation>
+ </message>
+ <message>
+ <source>Address type not supported</source>
+ <translation>주소 형식을 지원하지 않음</translation>
+ </message>
+ <message>
+ <source>Unknown SOCKSv5 proxy error code 0x%1</source>
+ <translation>알 수 없는 SOCKSv5 프록시 오류 코드 0x%1</translation>
+ </message>
+ <message>
+ <source>Network operation timed out</source>
+ <translation>네트워크 작업 시간 초과</translation>
+ </message>
+</context>
+<context>
+ <name>QSoftKeyManager</name>
+ <message>
+ <source>Ok</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <source>Select</source>
+ <translation>선택</translation>
+ </message>
+ <message>
+ <source>Done</source>
+ <translation>완료</translation>
+ </message>
+ <message>
+ <source>Options</source>
+ <translation>옵션</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+ <message>
+ <source>Exit</source>
+ <translation>끝내기</translation>
+ </message>
+</context>
+<context>
+ <name>QSpinBox</name>
+ <message>
+ <source>More</source>
+ <translation>더 보기</translation>
+ </message>
+ <message>
+ <source>Less</source>
+ <translation>덜 보기</translation>
+ </message>
+</context>
+<context>
+ <name>QSql</name>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Delete this record?</source>
+ <translation>이 레코드를 삭제하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Yes</source>
+ <translation>예</translation>
+ </message>
+ <message>
+ <source>No</source>
+ <translation>아니오</translation>
+ </message>
+ <message>
+ <source>Insert</source>
+ <translation>삽입</translation>
+ </message>
+ <message>
+ <source>Update</source>
+ <translation>업데이트</translation>
+ </message>
+ <message>
+ <source>Save edits?</source>
+ <translation>편집을 저장하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+ <message>
+ <source>Confirm</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <source>Cancel your edits?</source>
+ <translation>편집을 취소하시겠습니까?</translation>
+ </message>
+</context>
+<context>
+ <name>QSslSocket</name>
+ <message>
+ <source>No error</source>
+ <translation>오류 없음</translation>
+ </message>
+ <message>
+ <source>The issuer certificate could not be found</source>
+ <translation>발급자 인증서를 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>The certificate signature could not be decrypted</source>
+ <translation>인증서 서명을 복호화할 수 없음</translation>
+ </message>
+ <message>
+ <source>The public key in the certificate could not be read</source>
+ <translation>인증서의 공개 키를 읽을 수 없음</translation>
+ </message>
+ <message>
+ <source>The signature of the certificate is invalid</source>
+ <translation>인증서의 서명이 올바르지 않음</translation>
+ </message>
+ <message>
+ <source>The certificate is not yet valid</source>
+ <translation>인증서가 아직 유효하지 않음</translation>
+ </message>
+ <message>
+ <source>The certificate has expired</source>
+ <translation>인증서가 만료됨</translation>
+ </message>
+ <message>
+ <source>The certificate&apos;s notBefore field contains an invalid time</source>
+ <translation>인증서의 notBefore 필드에 올바르지 않은 시간이 들어 있음</translation>
+ </message>
+ <message>
+ <source>The certificate&apos;s notAfter field contains an invalid time</source>
+ <translation>인증서의 notAfter 필드에 올바르지 않은 시간이 들어 있음</translation>
+ </message>
+ <message>
+ <source>The certificate is self-signed, and untrusted</source>
+ <translation>인증서가 자가 서명되었고 믿을 수 없음</translation>
+ </message>
+ <message>
+ <source>The root certificate of the certificate chain is self-signed, and untrusted</source>
+ <translation>인증서 체인의 루트 인증서가 자가 서명되었고 믿을 수 없음</translation>
+ </message>
+ <message>
+ <source>The issuer certificate of a locally looked up certificate could not be found</source>
+ <translation>로컬에서 찾은 인증서의 발급자 인증서를 찾을 수 없음</translation>
+ </message>
+ <message>
+ <source>No certificates could be verified</source>
+ <translation>아무 인증서도 검증할 수 없음</translation>
+ </message>
+ <message>
+ <source>One of the CA certificates is invalid</source>
+ <translation>CA 인증서 중 하나 이상이 올바르지 않음</translation>
+ </message>
+ <message>
+ <source>The basicConstraints path length parameter has been exceeded</source>
+ <translation>basicConstraints 경로 길이 인자가 초과됨</translation>
+ </message>
+ <message>
+ <source>The supplied certificate is unsuitable for this purpose</source>
+ <translation>지정한 인증서를 이 목적으로는 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>The root CA certificate is not trusted for this purpose</source>
+ <translation>루트 CA 인증서를 이 목적으로 신뢰할 수 없음</translation>
+ </message>
+ <message>
+ <source>The root CA certificate is marked to reject the specified purpose</source>
+ <translation>루트 CA 인증서는 이 목적으로 사용이 거부됨</translation>
+ </message>
+ <message>
+ <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source>
+ <translation>현재 인증서의 발급자 이름과 상위 인증서의 이름이 일치하지 않아서 현재 후보 발급자 인증서가 거부되었습니다</translation>
+ </message>
+ <message>
+ <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source>
+ <translation>현재 인증서의 인증자 키 식별자와 발급자 이름 및 시리얼 번호가 일치하지 않아서 현재 후보 발급자 인증서가 거부되었습니다</translation>
+ </message>
+ <message>
+ <source>The peer did not present any certificate</source>
+ <translation>동료 측이 인증서를 제시하지 않았음</translation>
+ </message>
+ <message>
+ <source>The host name did not match any of the valid hosts for this certificate</source>
+ <translation>호스트 이름이 이 인증서에서 지정한 유효한 호스트 중 아무 것도 일치하지 않음</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+ <message>
+ <source>Error creating SSL context (%1)</source>
+ <translation>SSL 컨텍스트를 만드는 중 오류 발생(%1)</translation>
+ </message>
+ <message>
+ <source>Invalid or empty cipher list (%1)</source>
+ <translation>잘못되거나 비어 있는 암호화 키 목록 (%1)</translation>
+ </message>
+ <message>
+ <source>Cannot provide a certificate with no key, %1</source>
+ <translation>키가 없는 인증서를 제공할 수 없음, %1</translation>
+ </message>
+ <message>
+ <source>Error loading local certificate, %1</source>
+ <translation>로컬 인증서를 불러올 수 없음, %1</translation>
+ </message>
+ <message>
+ <source>Error loading private key, %1</source>
+ <translation>개인 키를 불러올 수 없음, %1</translation>
+ </message>
+ <message>
+ <source>Private key does not certify public key, %1</source>
+ <translation>개인 키가 공개 키를 인증하지 않음, %1</translation>
+ </message>
+ <message>
+ <source>Error creating SSL session, %1</source>
+ <translation>SSL 세션을 만드는 중 오류 발생, %1</translation>
+ </message>
+ <message>
+ <source>Error creating SSL session: %1</source>
+ <translation>SSL 세션을 만드는 중 오류 발생: %1</translation>
+ </message>
+ <message>
+ <source>Unable to write data: %1</source>
+ <translation>데이터를 쓸 수 없음: %1</translation>
+ </message>
+ <message>
+ <source>Unable to decrypt data: %1</source>
+ <translation>데이터를 복호화할 수 없음: %1</translation>
+ </message>
+ <message>
+ <source>Error while reading: %1</source>
+ <translation>읽는 중 오류 발생: %1</translation>
+ </message>
+ <message>
+ <source>Error during SSL handshake: %1</source>
+ <translation>SSL 악수 중 오류 발생: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QStateMachine</name>
+ <message>
+ <source>Missing initial state in compound state &apos;%1&apos;</source>
+ <translation>복합 상태 &apos;%1&apos;의 초기 상태가 없음</translation>
+ </message>
+ <message>
+ <source>Missing default state in history state &apos;%1&apos;</source>
+ <translation>과거 기록 상태 &apos;%1&apos;에 기본 상태가 없음</translation>
+ </message>
+ <message>
+ <source>No common ancestor for targets and source of transition from state &apos;%1&apos;</source>
+ <translation>상태 &apos;%1&apos;에서 전환되는 원본과 대상에 공통된 조상이 없음</translation>
+ </message>
+ <message>
+ <source>Unknown error</source>
+ <translation>알 수 없는 오류</translation>
+ </message>
+</context>
+<context>
+ <name>QSystemSemaphore</name>
+ <message>
+ <source>%1: permission denied</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 권한이 거부됨</translation>
+ </message>
+ <message>
+ <source>%1: already exists</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 이미 존재함</translation>
+ </message>
+ <message>
+ <source>%1: does not exist</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 존재하지 않음</translation>
+ </message>
+ <message>
+ <source>%1: out of resources</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 자원 부족</translation>
+ </message>
+ <message>
+ <source>%1: unknown error %2</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 알 수 없는 오류 %2</translation>
+ </message>
+ <message>
+ <source>%1: permission denied</source>
+ <translation>%1: 권한이 거부됨</translation>
+ </message>
+ <message>
+ <source>%1: already exists</source>
+ <translation>%1: 이미 존재함</translation>
+ </message>
+ <message>
+ <source>%1: does not exist</source>
+ <translation>%1: 존재하지 않음</translation>
+ </message>
+ <message>
+ <source>%1: out of resources</source>
+ <translation>%1: 자원 부족</translation>
+ </message>
+ <message>
+ <source>%1: unknown error %2</source>
+ <translation>%1: 알 수 없는 오류 %2</translation>
+ </message>
+</context>
+<context>
+ <name>QTDSDriver</name>
+ <message>
+ <source>Unable to open connection</source>
+ <translation>연결을 열 수 없음</translation>
+ </message>
+ <message>
+ <source>Unable to use database</source>
+ <translation>데이터베이스를 사용할 수 없음</translation>
+ </message>
+</context>
+<context>
+ <name>QTabBar</name>
+ <message>
+ <source>Scroll Left</source>
+ <translation>왼쪽으로 스크롤</translation>
+ </message>
+ <message>
+ <source>Scroll Right</source>
+ <translation>오른쪽으로 스크롤</translation>
+ </message>
+</context>
+<context>
+ <name>QTcpServer</name>
+ <message>
+ <source>Operation on socket is not supported</source>
+ <translation>소켓 작업을 지원하지 않음</translation>
+ </message>
+</context>
+<context>
+ <name>QTextControl</name>
+ <message>
+ <source>&amp;Undo</source>
+ <translation>실행 취소(&amp;U)</translation>
+ </message>
+ <message>
+ <source>&amp;Redo</source>
+ <translation>다시 실행(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Cu&amp;t</source>
+ <translation>잘라내기(&amp;T)</translation>
+ </message>
+ <message>
+ <source>&amp;Copy</source>
+ <translation>복사(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Copy &amp;Link Location</source>
+ <translation>링크 주소 복사(&amp;L)</translation>
+ </message>
+ <message>
+ <source>&amp;Paste</source>
+ <translation>붙여넣기(&amp;P)</translation>
+ </message>
+ <message>
+ <source>Delete</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Select All</source>
+ <translation>모두 선택</translation>
+ </message>
+</context>
+<context>
+ <name>QToolButton</name>
+ <message>
+ <source>Press</source>
+ <translation>누름</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <translation>열기</translation>
+ </message>
+</context>
+<context>
+ <name>QUdpSocket</name>
+ <message>
+ <source>This platform does not support IPv6</source>
+ <translation>이 플랫폼은 IPv6을 지원하지 않습니다</translation>
+ </message>
+</context>
+<context>
+ <name>QUndoGroup</name>
+ <message>
+ <source>Undo</source>
+ <translation>실행 취소</translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation>다시 실행</translation>
+ </message>
+</context>
+<context>
+ <name>QUndoModel</name>
+ <message>
+ <source>&lt;empty&gt;</source>
+ <translation>&lt;비어 있음&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>QUndoStack</name>
+ <message>
+ <source>Undo</source>
+ <translation>실행 취소</translation>
+ </message>
+ <message>
+ <source>Redo</source>
+ <translation>다시 실행</translation>
+ </message>
+</context>
+<context>
+ <name>QUnicodeControlCharacterMenu</name>
+ <message>
+ <source>LRM Left-to-right mark</source>
+ <translation>LRM 왼쪽에서 오른쪽 기호</translation>
+ </message>
+ <message>
+ <source>RLM Right-to-left mark</source>
+ <translation>RLM 오른쪽에서 왼쪽 기호</translation>
+ </message>
+ <message>
+ <source>ZWJ Zero width joiner</source>
+ <translation>ZWJ 폭이 0인 결합자</translation>
+ </message>
+ <message>
+ <source>ZWNJ Zero width non-joiner</source>
+ <translation>ZWNJ 폭이 0인 비결합자</translation>
+ </message>
+ <message>
+ <source>ZWSP Zero width space</source>
+ <translation>ZWSP 폭이 0인 공백</translation>
+ </message>
+ <message>
+ <source>LRE Start of left-to-right embedding</source>
+ <translation>LRE 왼쪽에서 오른쪽 임베딩 시작</translation>
+ </message>
+ <message>
+ <source>RLE Start of right-to-left embedding</source>
+ <translation>RLE 오른쪽에서 왼쪽 임베딩 시작</translation>
+ </message>
+ <message>
+ <source>LRO Start of left-to-right override</source>
+ <translation>LRO 왼쪽에서 오른쪽 재정의 시작</translation>
+ </message>
+ <message>
+ <source>RLO Start of right-to-left override</source>
+ <translation>RLO 오른쪽에서 왼쪽 재정의 시작</translation>
+ </message>
+ <message>
+ <source>PDF Pop directional formatting</source>
+ <translation>PDF Pop 방향 포매팅</translation>
+ </message>
+ <message>
+ <source>Insert Unicode control character</source>
+ <translation>유니코드 제어 문자 삽입</translation>
+ </message>
+</context>
+<context>
+ <name>QWebFrame</name>
+ <message>
+ <source>Request cancelled</source>
+ <translation>요청 취소됨</translation>
+ </message>
+ <message>
+ <source>Request blocked</source>
+ <translation>요청 거부됨</translation>
+ </message>
+ <message>
+ <source>Cannot show URL</source>
+ <translation>URL을 표시할 수 없음</translation>
+ </message>
+ <message>
+ <source>Frame load interrupted by policy change</source>
+ <translation>정책 변경으로 프레임 불러오기 취소됨</translation>
+ </message>
+ <message>
+ <source>Cannot show mimetype</source>
+ <translation>MIME 형식을 표시할 수 없음</translation>
+ </message>
+ <message>
+ <source>File does not exist</source>
+ <translation>파일이 존재하지 않음</translation>
+ </message>
+</context>
+<context>
+ <name>QWebPage</name>
+ <message>
+ <source>Redirection limit reached</source>
+ <translation>넘겨주기 한계에 도달함</translation>
+ </message>
+ <message>
+ <source>Bad HTTP request</source>
+ <translation>잘못된 HTTP 요청</translation>
+ </message>
+ <message numerus="yes">
+ <source>%n file(s)</source>
+ <comment>number of chosen file</comment>
+ <translation>
+ <numerusform>파일 %n개</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Submit</source>
+ <comment>default label for Submit buttons in forms on web pages</comment>
+ <translation>보내기</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <translation type="obsolete">초기화</translation>
+ </message>
+ <message>
+ <source>This is a searchable index. Enter search keywords: </source>
+ <comment>text that appears at the start of nearly-obsolete web pages in the form of a &apos;searchable index&apos;</comment>
+ <translation>검색 가능한 인덱스입니다. 검색할 단어를 입력하십시오: </translation>
+ </message>
+ <message>
+ <source>Choose File</source>
+ <comment>title for file button used in HTML forms</comment>
+ <translation>파일 선택</translation>
+ </message>
+ <message>
+ <source>No file selected</source>
+ <comment>text to display in file button used in HTML forms when no file is selected</comment>
+ <translation>파일이 선택되지 않음</translation>
+ </message>
+ <message>
+ <source>Open in New Window</source>
+ <comment>Open in New Window context menu item</comment>
+ <translation>새 창으로 열기</translation>
+ </message>
+ <message>
+ <source>Save Link...</source>
+ <comment>Download Linked File context menu item</comment>
+ <translation>링크 저장...</translation>
+ </message>
+ <message>
+ <source>Copy Link</source>
+ <comment>Copy Link context menu item</comment>
+ <translation>링크 복사</translation>
+ </message>
+ <message>
+ <source>Open Image</source>
+ <comment>Open Image in New Window context menu item</comment>
+ <translation>그림 열기</translation>
+ </message>
+ <message>
+ <source>Save Image</source>
+ <comment>Download Image context menu item</comment>
+ <translation>그림 저장</translation>
+ </message>
+ <message>
+ <source>Copy Image</source>
+ <comment>Copy Link context menu item</comment>
+ <translation>그림 복사</translation>
+ </message>
+ <message>
+ <source>Open Frame</source>
+ <comment>Open Frame in New Window context menu item</comment>
+ <translation>프레임 열기</translation>
+ </message>
+ <message>
+ <source>Copy</source>
+ <comment>Copy context menu item</comment>
+ <translation>복사</translation>
+ </message>
+ <message>
+ <source>Go Back</source>
+ <comment>Back context menu item</comment>
+ <translation>뒤로 가기</translation>
+ </message>
+ <message>
+ <source>Go Forward</source>
+ <comment>Forward context menu item</comment>
+ <translation>앞으로 가기</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <translation type="obsolete">정지</translation>
+ </message>
+ <message>
+ <source>Reload</source>
+ <comment>Reload context menu item</comment>
+ <translation>새로 고침</translation>
+ </message>
+ <message>
+ <source>Cut</source>
+ <comment>Cut context menu item</comment>
+ <translation>잘라내기</translation>
+ </message>
+ <message>
+ <source>Paste</source>
+ <comment>Paste context menu item</comment>
+ <translation>붙여넣기</translation>
+ </message>
+ <message>
+ <source>No Guesses Found</source>
+ <comment>No Guesses Found context menu item</comment>
+ <translation>추천 단어 없음</translation>
+ </message>
+ <message>
+ <source>Ignore</source>
+ <translation type="obsolete">무시</translation>
+ </message>
+ <message>
+ <source>Add To Dictionary</source>
+ <comment>Learn Spelling context menu item</comment>
+ <translation>사전에 추가하기</translation>
+ </message>
+ <message>
+ <source>Search The Web</source>
+ <comment>Search The Web context menu item</comment>
+ <translation>웹 검색하기</translation>
+ </message>
+ <message>
+ <source>Look Up In Dictionary</source>
+ <comment>Look Up in Dictionary context menu item</comment>
+ <translation>사전 찾기</translation>
+ </message>
+ <message>
+ <source>Open Link</source>
+ <comment>Open Link context menu item</comment>
+ <translation>링크 열기</translation>
+ </message>
+ <message>
+ <source>Spelling</source>
+ <comment>Spelling and Grammar context sub-menu item</comment>
+ <translation>맞춤법</translation>
+ </message>
+ <message>
+ <source>Show Spelling and Grammar</source>
+ <comment>menu item title</comment>
+ <translation>맞춤법 오류 보이기</translation>
+ </message>
+ <message>
+ <source>Hide Spelling and Grammar</source>
+ <comment>menu item title</comment>
+ <translation>맞춤법 오류 숨기기</translation>
+ </message>
+ <message>
+ <source>Check Spelling</source>
+ <comment>Check spelling context menu item</comment>
+ <translation>맞춤법 검사</translation>
+ </message>
+ <message>
+ <source>Check Spelling While Typing</source>
+ <comment>Check spelling while typing context menu item</comment>
+ <translation>입력하는 동안 맞춤법 검사</translation>
+ </message>
+ <message>
+ <source>Check Grammar With Spelling</source>
+ <comment>Check grammar with spelling context menu item</comment>
+ <translation>문법 오류 검사하기</translation>
+ </message>
+ <message>
+ <source>Fonts</source>
+ <comment>Font context sub-menu item</comment>
+ <translation>글꼴</translation>
+ </message>
+ <message>
+ <source>Bold</source>
+ <translation type="obsolete">굵게</translation>
+ </message>
+ <message>
+ <source>Italic</source>
+ <translation type="obsolete">이탤릭</translation>
+ </message>
+ <message>
+ <source>Underline</source>
+ <comment>Underline context menu item</comment>
+ <translation>밑줄</translation>
+ </message>
+ <message>
+ <source>Outline</source>
+ <comment>Outline context menu item</comment>
+ <translation>외곽선</translation>
+ </message>
+ <message>
+ <source>Direction</source>
+ <comment>Writing direction context sub-menu item</comment>
+ <translation>방향</translation>
+ </message>
+ <message>
+ <source>Text Direction</source>
+ <comment>Writing direction context sub-menu item</comment>
+ <translation type="obsolete">텍스트 방향</translation>
+ </message>
+ <message>
+ <source>Default</source>
+ <comment>Default writing direction context menu item</comment>
+ <translation>기본</translation>
+ </message>
+ <message>
+ <source>Left to Right</source>
+ <comment>Left to Right context menu item</comment>
+ <translation>왼쪽에서 오른쪽</translation>
+ </message>
+ <message>
+ <source>Right to Left</source>
+ <translation type="obsolete">오른쪽에서 왼쪽</translation>
+ </message>
+ <message>
+ <source>Inspect</source>
+ <comment>Inspect Element context menu item</comment>
+ <translation>들여다 보기</translation>
+ </message>
+ <message>
+ <source>No recent searches</source>
+ <comment>Label for only item in menu that appears when clicking on the search field image, when no searches have been performed</comment>
+ <translation>최근 검색 없음</translation>
+ </message>
+ <message>
+ <source>Recent searches</source>
+ <comment>label for first item in the menu that appears when clicking on the search field image, used as embedded menu title</comment>
+ <translation>최근 검색</translation>
+ </message>
+ <message>
+ <source>Clear recent searches</source>
+ <comment>menu item in Recent Searches menu that empties menu&apos;s contents</comment>
+ <translation>최근 검색 지우기</translation>
+ </message>
+ <message>
+ <source>Missing Plug-in</source>
+ <comment>Label text to be used when a plug-in is missing</comment>
+ <translation>플러그인이 존재하지 않음</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <translation type="obsolete">알 수 없음</translation>
+ </message>
+ <message>
+ <source>%1 (%2x%3 pixels)</source>
+ <comment>Title string for images</comment>
+ <translation>%1 (%2x%3 픽셀)</translation>
+ </message>
+ <message>
+ <source>Loading...</source>
+ <comment>Media controller status message when the media is loading</comment>
+ <translation>불러오는 중...</translation>
+ </message>
+ <message>
+ <source>Live Broadcast</source>
+ <comment>Media controller status message when watching a live broadcast</comment>
+ <translation>라이브 방송</translation>
+ </message>
+ <message>
+ <source>Audio Element</source>
+ <comment>Media controller element</comment>
+ <translation>오디오 구성 요소</translation>
+ </message>
+ <message>
+ <source>Video Element</source>
+ <comment>Media controller element</comment>
+ <translation>비디오 구성 요소</translation>
+ </message>
+ <message>
+ <source>Mute Button</source>
+ <comment>Media controller element</comment>
+ <translation>음소거 단추</translation>
+ </message>
+ <message>
+ <source>Unmute Button</source>
+ <comment>Media controller element</comment>
+ <translation>음소거 해제 단추</translation>
+ </message>
+ <message>
+ <source>Play Button</source>
+ <comment>Media controller element</comment>
+ <translation>재생 단추</translation>
+ </message>
+ <message>
+ <source>Pause Button</source>
+ <comment>Media controller element</comment>
+ <translation>일시 정지 단추</translation>
+ </message>
+ <message>
+ <source>Slider</source>
+ <translation type="obsolete">슬라이더</translation>
+ </message>
+ <message>
+ <source>Submit</source>
+ <comment>Submit (input element) alt text for &lt;input&gt; elements with no alt, title, or value</comment>
+ <translation>보내기</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <comment>default label for Reset buttons in forms on web pages</comment>
+ <translation>초기화</translation>
+ </message>
+ <message>
+ <source>Stop</source>
+ <comment>Stop context menu item</comment>
+ <translation>정지</translation>
+ </message>
+ <message>
+ <source>Ignore</source>
+ <comment>Ignore Spelling context menu item</comment>
+ <translation>무시</translation>
+ </message>
+ <message>
+ <source>Ignore</source>
+ <comment>Ignore Grammar context menu item</comment>
+ <translation>무시</translation>
+ </message>
+ <message>
+ <source>Bold</source>
+ <comment>Bold context menu item</comment>
+ <translation>굵게</translation>
+ </message>
+ <message>
+ <source>Italic</source>
+ <comment>Italic context menu item</comment>
+ <translation>이탤릭</translation>
+ </message>
+ <message>
+ <source>Text Direction</source>
+ <comment>Text direction context sub-menu item</comment>
+ <translation>텍스트 방향</translation>
+ </message>
+ <message>
+ <source>Right to Left</source>
+ <comment>Right to Left context menu item</comment>
+ <translation>오른쪽에서 왼쪽</translation>
+ </message>
+ <message>
+ <source>Unknown</source>
+ <comment>Unknown filesize FTP directory listing item</comment>
+ <translation>알 수 없음</translation>
+ </message>
+ <message>
+ <source>Slider</source>
+ <comment>Media controller element</comment>
+ <translation>슬라이더</translation>
+ </message>
+ <message>
+ <source>Slider Thumb</source>
+ <comment>Media controller element</comment>
+ <translation>슬라이더 핸들</translation>
+ </message>
+ <message>
+ <source>Rewind Button</source>
+ <comment>Media controller element</comment>
+ <translation>되감기 단추</translation>
+ </message>
+ <message>
+ <source>Return to Real-time Button</source>
+ <comment>Media controller element</comment>
+ <translation>실시간으로 복귀 단추</translation>
+ </message>
+ <message>
+ <source>Elapsed Time</source>
+ <comment>Media controller element</comment>
+ <translation>경과 시간</translation>
+ </message>
+ <message>
+ <source>Remaining Time</source>
+ <comment>Media controller element</comment>
+ <translation>남은 시간</translation>
+ </message>
+ <message>
+ <source>Status Display</source>
+ <comment>Media controller element</comment>
+ <translation>상태 디스플레이</translation>
+ </message>
+ <message>
+ <source>Fullscreen Button</source>
+ <comment>Media controller element</comment>
+ <translation>전체 화면 단추</translation>
+ </message>
+ <message>
+ <source>Seek Forward Button</source>
+ <comment>Media controller element</comment>
+ <translation>앞으로 이동 단추</translation>
+ </message>
+ <message>
+ <source>Seek Back Button</source>
+ <comment>Media controller element</comment>
+ <translation>뒤로 이동 단추</translation>
+ </message>
+ <message>
+ <source>Audio element playback controls and status display</source>
+ <comment>Media controller element</comment>
+ <translation>오디오 구성 요소 재생 제어 및 상태 표시</translation>
+ </message>
+ <message>
+ <source>Video element playback controls and status display</source>
+ <comment>Media controller element</comment>
+ <translation>비디오 구성 요소 제어 및 상태 표시</translation>
+ </message>
+ <message>
+ <source>Mute audio tracks</source>
+ <comment>Media controller element</comment>
+ <translation>오디오 트랙 음소거</translation>
+ </message>
+ <message>
+ <source>Unmute audio tracks</source>
+ <comment>Media controller element</comment>
+ <translation>오디오 트랙 음소거 해제</translation>
+ </message>
+ <message>
+ <source>Begin playback</source>
+ <comment>Media controller element</comment>
+ <translation>재생 시작</translation>
+ </message>
+ <message>
+ <source>Pause playback</source>
+ <comment>Media controller element</comment>
+ <translation>재생 일시 정지</translation>
+ </message>
+ <message>
+ <source>Movie time scrubber</source>
+ <comment>Media controller element</comment>
+ <translation>동영상 시간 표시기</translation>
+ </message>
+ <message>
+ <source>Movie time scrubber thumb</source>
+ <comment>Media controller element</comment>
+ <translation>동영상 시간 표시기 핸들</translation>
+ </message>
+ <message>
+ <source>Rewind movie</source>
+ <comment>Media controller element</comment>
+ <translation>동영상 되감기</translation>
+ </message>
+ <message>
+ <source>Return streaming movie to real-time</source>
+ <comment>Media controller element</comment>
+ <translation>스트리밍 동영상 실시간으로 전환</translation>
+ </message>
+ <message>
+ <source>Current movie time</source>
+ <comment>Media controller element</comment>
+ <translation>현재 동영상 시간</translation>
+ </message>
+ <message>
+ <source>Remaining movie time</source>
+ <comment>Media controller element</comment>
+ <translation>남은 동영상 시간</translation>
+ </message>
+ <message>
+ <source>Current movie status</source>
+ <comment>Media controller element</comment>
+ <translation>현재 동영상 상태</translation>
+ </message>
+ <message>
+ <source>Play movie in full-screen mode</source>
+ <comment>Media controller element</comment>
+ <translation>전체 화면으로 동영상 재생</translation>
+ </message>
+ <message>
+ <source>Seek quickly back</source>
+ <comment>Media controller element</comment>
+ <translation>뒤로 빨리 이동</translation>
+ </message>
+ <message>
+ <source>Seek quickly forward</source>
+ <comment>Media controller element</comment>
+ <translation>앞으로 빨리 이동</translation>
+ </message>
+ <message>
+ <source>Indefinite time</source>
+ <comment>Media time description</comment>
+ <translation>무한한 시간</translation>
+ </message>
+ <message>
+ <source>%1 days %2 hours %3 minutes %4 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1일 %2시간 %3분 %4초</translation>
+ </message>
+ <message>
+ <source>%1 hours %2 minutes %3 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1시간 %2분 %3초</translation>
+ </message>
+ <message>
+ <source>%1 minutes %2 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1분 %2초</translation>
+ </message>
+ <message>
+ <source>%1 seconds</source>
+ <comment>Media time description</comment>
+ <translation>%1초</translation>
+ </message>
+ <message>
+ <source>Scroll here</source>
+ <translation>여기로 스크롤</translation>
+ </message>
+ <message>
+ <source>Left edge</source>
+ <translation>왼쪽 경계</translation>
+ </message>
+ <message>
+ <source>Top</source>
+ <translation>맨 위</translation>
+ </message>
+ <message>
+ <source>Right edge</source>
+ <translation>오른쪽 경계</translation>
+ </message>
+ <message>
+ <source>Bottom</source>
+ <translation>맨 아래</translation>
+ </message>
+ <message>
+ <source>Page left</source>
+ <translation>왼쪽 페이지</translation>
+ </message>
+ <message>
+ <source>Page up</source>
+ <translation>위쪽 페이지</translation>
+ </message>
+ <message>
+ <source>Page right</source>
+ <translation>오른쪽 페이지</translation>
+ </message>
+ <message>
+ <source>Page down</source>
+ <translation>아래쪽 페이지</translation>
+ </message>
+ <message>
+ <source>Scroll left</source>
+ <translation>왼쪽으로 스크롤</translation>
+ </message>
+ <message>
+ <source>Scroll up</source>
+ <translation>위로 스크롤</translation>
+ </message>
+ <message>
+ <source>Scroll right</source>
+ <translation>오른쪽으로 스크롤</translation>
+ </message>
+ <message>
+ <source>Scroll down</source>
+ <translation>아래로 스크롤</translation>
+ </message>
+ <message>
+ <source>JavaScript Alert - %1</source>
+ <translation>자바스크립트 알림 - %1</translation>
+ </message>
+ <message>
+ <source>JavaScript Confirm - %1</source>
+ <translation>자바스크립트 확인 - %1</translation>
+ </message>
+ <message>
+ <source>JavaScript Prompt - %1</source>
+ <translation>자바스크립트 질문 - %1</translation>
+ </message>
+ <message>
+ <source>JavaScript Problem - %1</source>
+ <translation>자바스크립트 오류 - %1</translation>
+ </message>
+ <message>
+ <source>The script on this page appears to have a problem. Do you want to stop the script?</source>
+ <translation>이 페이지에 있는 스크립트에 문제가 있는 것 같습니다. 스크립트 실행을 중단하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the next character</source>
+ <translation>다음 글자로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the previous character</source>
+ <translation>이전 글자로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the next word</source>
+ <translation>다음 단어로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the previous word</source>
+ <translation>이전 단어로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the next line</source>
+ <translation>다음 줄로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the previous line</source>
+ <translation>앞 줄로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the start of the line</source>
+ <translation>줄 처음으로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the end of the line</source>
+ <translation>줄 끝으로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the start of the block</source>
+ <translation>블록 시작으로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the end of the block</source>
+ <translation>블록 끝으로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the start of the document</source>
+ <translation>문서 시작으로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Move the cursor to the end of the document</source>
+ <translation>문서 끝으로 커서 이동</translation>
+ </message>
+ <message>
+ <source>Select all</source>
+ <translation>모두 선택</translation>
+ </message>
+ <message>
+ <source>Select to the next character</source>
+ <translation>다음 글자 선택</translation>
+ </message>
+ <message>
+ <source>Select to the previous character</source>
+ <translation>이전 글자 선택</translation>
+ </message>
+ <message>
+ <source>Select to the next word</source>
+ <translation>다음 단어 선택</translation>
+ </message>
+ <message>
+ <source>Select to the previous word</source>
+ <translation>이전 단어 선택</translation>
+ </message>
+ <message>
+ <source>Select to the next line</source>
+ <translation>다음 줄 선택</translation>
+ </message>
+ <message>
+ <source>Select to the previous line</source>
+ <translation>앞 줄 선택</translation>
+ </message>
+ <message>
+ <source>Select to the start of the line</source>
+ <translation>줄 처음까지 선택</translation>
+ </message>
+ <message>
+ <source>Select to the end of the line</source>
+ <translation>줄 끝까지 선택</translation>
+ </message>
+ <message>
+ <source>Select to the start of the block</source>
+ <translation>블록 처음까지 선택</translation>
+ </message>
+ <message>
+ <source>Select to the end of the block</source>
+ <translation>블록 끝까지 선택</translation>
+ </message>
+ <message>
+ <source>Select to the start of the document</source>
+ <translation>문서 처음까지 선택</translation>
+ </message>
+ <message>
+ <source>Select to the end of the document</source>
+ <translation>문서 끝까지 선택</translation>
+ </message>
+ <message>
+ <source>Delete to the start of the word</source>
+ <translation>단어 처음까지 삭제</translation>
+ </message>
+ <message>
+ <source>Delete to the end of the word</source>
+ <translation>단어 끝까지 삭제</translation>
+ </message>
+ <message>
+ <source>Insert a new paragraph</source>
+ <translation>새 문단 삽입</translation>
+ </message>
+ <message>
+ <source>Insert a new line</source>
+ <translation>새 줄 삽입</translation>
+ </message>
+ <message>
+ <source>Paste and Match Style</source>
+ <translation>붙여넣고 스타일 일치시키기</translation>
+ </message>
+ <message>
+ <source>Remove formatting</source>
+ <translation>서식 삭제</translation>
+ </message>
+ <message>
+ <source>Strikethrough</source>
+ <translation>취소선</translation>
+ </message>
+ <message>
+ <source>Subscript</source>
+ <translation>아래 첨자</translation>
+ </message>
+ <message>
+ <source>Superscript</source>
+ <translation>위 첨자</translation>
+ </message>
+ <message>
+ <source>Insert Bulleted List</source>
+ <translation>불릿 목록 삽입하기</translation>
+ </message>
+ <message>
+ <source>Insert Numbered List</source>
+ <translation>번호 목록 삽입하기</translation>
+ </message>
+ <message>
+ <source>Indent</source>
+ <translation>들여쓰기</translation>
+ </message>
+ <message>
+ <source>Outdent</source>
+ <translation>내어쓰기</translation>
+ </message>
+ <message>
+ <source>Center</source>
+ <translation>가운데</translation>
+ </message>
+ <message>
+ <source>Justify</source>
+ <translation>맞춤</translation>
+ </message>
+ <message>
+ <source>Align Left</source>
+ <translation>왼쪽으로 정렬</translation>
+ </message>
+ <message>
+ <source>Align Right</source>
+ <translation>오른쪽으로 정렬</translation>
+ </message>
+ <message>
+ <source>Web Inspector - %2</source>
+ <translation>웹 들여다보기 - %2</translation>
+ </message>
+</context>
+<context>
+ <name>QWhatsThisAction</name>
+ <message>
+ <source>What&apos;s This?</source>
+ <translation>이것에 대한 설명</translation>
+ </message>
+</context>
+<context>
+ <name>QWidget</name>
+ <message>
+ <source>*</source>
+ <translation>*</translation>
+ </message>
+</context>
+<context>
+ <name>QWizard</name>
+ <message>
+ <source>Go Back</source>
+ <translation>뒤로 가기</translation>
+ </message>
+ <message>
+ <source>&lt; &amp;Back</source>
+ <translation>&lt; 뒤로(&amp;B)</translation>
+ </message>
+ <message>
+ <source>Continue</source>
+ <translation>계속</translation>
+ </message>
+ <message>
+ <source>&amp;Next</source>
+ <translation>다음(&amp;N)</translation>
+ </message>
+ <message>
+ <source>&amp;Next &gt;</source>
+ <translation>다음 (&amp;N) &gt;</translation>
+ </message>
+ <message>
+ <source>Commit</source>
+ <translation>커밋</translation>
+ </message>
+ <message>
+ <source>Done</source>
+ <translation>완료</translation>
+ </message>
+ <message>
+ <source>&amp;Finish</source>
+ <translation>완료(&amp;F)</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+ <message>
+ <source>Help</source>
+ <translation>도움말</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>도움말(&amp;H)</translation>
+ </message>
+</context>
+<context>
+ <name>QWorkspace</name>
+ <message>
+ <source>Close</source>
+ <translation>닫기</translation>
+ </message>
+ <message>
+ <source>Minimize</source>
+ <translation>최소화</translation>
+ </message>
+ <message>
+ <source>Restore Down</source>
+ <translation>복원</translation>
+ </message>
+ <message>
+ <source>&amp;Restore</source>
+ <translation>복원(&amp;R)</translation>
+ </message>
+ <message>
+ <source>&amp;Move</source>
+ <translation>이동(&amp;M)</translation>
+ </message>
+ <message>
+ <source>&amp;Size</source>
+ <translation>크기(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Mi&amp;nimize</source>
+ <translation>최소화(&amp;N)</translation>
+ </message>
+ <message>
+ <source>Ma&amp;ximize</source>
+ <translation>최대화(&amp;N)</translation>
+ </message>
+ <message>
+ <source>&amp;Close</source>
+ <translation>닫기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>Stay on &amp;Top</source>
+ <translation>항상 위(&amp;T)</translation>
+ </message>
+ <message>
+ <source>Sh&amp;ade</source>
+ <translation>말아 올리기(&amp;A)</translation>
+ </message>
+ <message>
+ <source>%1 - [%2]</source>
+ <translation>%1 - [%2]</translation>
+ </message>
+ <message>
+ <source>&amp;Unshade</source>
+ <translation>풀어 내리기(&amp;U)</translation>
+ </message>
+</context>
+<context>
+ <name>QXml</name>
+ <message>
+ <source>no error occurred</source>
+ <translation>오류 없음</translation>
+ </message>
+ <message>
+ <source>error triggered by consumer</source>
+ <translation>사용자가 오류를 발생시킴</translation>
+ </message>
+ <message>
+ <source>unexpected end of file</source>
+ <translation>예상하지 못한 파일의 끝</translation>
+ </message>
+ <message>
+ <source>more than one document type definition</source>
+ <translation>하나 이상의 문서 형식 정의가 있음</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing element</source>
+ <translation>원소를 처리하는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>tag mismatch</source>
+ <translation>태그가 일치하지 않음</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing content</source>
+ <translation>내용을 처리하는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>unexpected character</source>
+ <translation>예상하지 못한 글자</translation>
+ </message>
+ <message>
+ <source>invalid name for processing instruction</source>
+ <translation>잘못된 이름이나 처리 방법</translation>
+ </message>
+ <message>
+ <source>version expected while reading the XML declaration</source>
+ <translation>XML 선언을 읽는 중 버전이 필요함</translation>
+ </message>
+ <message>
+ <source>wrong value for standalone declaration</source>
+ <translation>독립 문서 선언의 값이 잘못됨</translation>
+ </message>
+ <message>
+ <source>encoding declaration or standalone declaration expected while reading the XML declaration</source>
+ <translation>XML 선언을 읽는 중 인코딩이나 독립 문서 선언이 필요함</translation>
+ </message>
+ <message>
+ <source>standalone declaration expected while reading the XML declaration</source>
+ <translation>XML 선언을 읽는 중 독립 문서 선언이 필요함</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing document type definition</source>
+ <translation>문서 형식 정의를 처리하는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>letter is expected</source>
+ <translation>글자가 필요함</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing comment</source>
+ <translation>주석을 처리하는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>error occurred while parsing reference</source>
+ <translation>참조를 처리하는 중 오류 발생</translation>
+ </message>
+ <message>
+ <source>internal general entity reference not allowed in DTD</source>
+ <translation>DTD에서 내부 일반 엔티티 참조를 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>external parsed general entity reference not allowed in attribute value</source>
+ <translation>속성 값에는 외부에서 처리한 일반 엔티티 참조를 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>external parsed general entity reference not allowed in DTD</source>
+ <translation>DTD에서 외부에서 처리한 일반 엔티티 참조를 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>unparsed entity reference in wrong context</source>
+ <translation>잘못된 컨텍스트에 처리되지 않은 엔티티 참조가 있음</translation>
+ </message>
+ <message>
+ <source>recursive entities</source>
+ <translation>재귀적 엔티티</translation>
+ </message>
+ <message>
+ <source>error in the text declaration of an external entity</source>
+ <translation>외부 엔티티 텍스트 선언에 오류가 있음</translation>
+ </message>
+</context>
+<context>
+ <name>QXmlPatternistCLI</name>
+ <message>
+ <source>Warning in %1, at line %2, column %3: %4</source>
+ <translation>%1의 %2번째 줄 %3번째 글자에서 경고 발생: %4</translation>
+ </message>
+ <message>
+ <source>Warning in %1: %2</source>
+ <translation>%1에서 경고 발생: %2</translation>
+ </message>
+ <message>
+ <source>Unknown location</source>
+ <translation>알 수 없는 위치</translation>
+ </message>
+ <message>
+ <source>Error %1 in %2, at line %3, column %4: %5</source>
+ <translation>%2의 %3번째 줄 %4번째 글자에서 오류 %1 발생: %5</translation>
+ </message>
+ <message>
+ <source>Error %1 in %2: %3</source>
+ <translation>%2에서 오류 %1 발생: %3</translation>
+ </message>
+</context>
+<context>
+ <name>QXmlStream</name>
+ <message>
+ <source>Extra content at end of document.</source>
+ <translation>문서의 끝에 내용이 더 있습니다.</translation>
+ </message>
+ <message>
+ <source>Invalid entity value.</source>
+ <translation>엔티티 값이 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>Invalid XML character.</source>
+ <translation>XML 글자가 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>Sequence &apos;]]&gt;&apos; not allowed in content.</source>
+ <translation>내용에 문자열 &apos;]]&gt;&apos;가 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Encountered incorrectly encoded content.</source>
+ <translation>잘못 인코딩된 내용을 발견하였습니다.</translation>
+ </message>
+ <message>
+ <source>Namespace prefix &apos;%1&apos; not declared</source>
+ <translation>네임스페이스 접두사 &apos;%1&apos;이(가) 선언되지 않았음</translation>
+ </message>
+ <message>
+ <source>Illegal namespace declaration.</source>
+ <translation>네임스페이스 선언이 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>Attribute redefined.</source>
+ <translation>속성이 재정의되었습니다.</translation>
+ </message>
+ <message>
+ <source>Unexpected character &apos;%1&apos; in public id literal.</source>
+ <translation>공개 ID 리터럴에 예상하지 못한 문자 &apos;%1&apos;이(가) 있습니다.</translation>
+ </message>
+ <message>
+ <source>Invalid XML version string.</source>
+ <translation>XML 버전 문자열이 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>Unsupported XML version.</source>
+ <translation>지원하지 않는 XML 버전입니다.</translation>
+ </message>
+ <message>
+ <source>The standalone pseudo attribute must appear after the encoding.</source>
+ <translation>standalone 의사 속성은 인코딩 다음에 와야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid encoding name.</source>
+ <translation>인코딩 이름 %1이(가) 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>Encoding %1 is unsupported</source>
+ <translation>인코딩 %1은(는) 지원되지 않습니다</translation>
+ </message>
+ <message>
+ <source>Standalone accepts only yes or no.</source>
+ <translation>Standalone에는 yes나 no만 지정할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>Invalid attribute in XML declaration.</source>
+ <translation>XML 선언에서 속성이 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>Premature end of document.</source>
+ <translation>문서가 완전하지 못하게 끝났습니다.</translation>
+ </message>
+ <message>
+ <source>Invalid document.</source>
+ <translation>문서가 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>Expected </source>
+ <translation>다음을 예상했지만</translation>
+ </message>
+ <message>
+ <source>, but got &apos;</source>
+ <translation>, 돌아온 것은 &apos;</translation>
+ </message>
+ <message>
+ <source>Unexpected &apos;</source>
+ <translation>예상하지 못한 &apos;</translation>
+ </message>
+ <message>
+ <source>Expected character data.</source>
+ <translation>예상하지 못한 문자열 데이터입니다.</translation>
+ </message>
+ <message>
+ <source>Recursive entity detected.</source>
+ <translation>재귀적 엔티티가 감지되었습니다.</translation>
+ </message>
+ <message>
+ <source>Start tag expected.</source>
+ <translation>시작 태그가 필요합니다.</translation>
+ </message>
+ <message>
+ <source>NDATA in parameter entity declaration.</source>
+ <translation>인자 엔티티 선언에 NDATA가 있습니다.</translation>
+ </message>
+ <message>
+ <source>XML declaration not at start of document.</source>
+ <translation>XML 선언이 문서 시작에 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid processing instruction name.</source>
+ <translation>%1은(는) 잘못된 처리 방법 이름입니다.</translation>
+ </message>
+ <message>
+ <source>Invalid processing instruction name.</source>
+ <translation>잘못된 처리 방법 이름입니다.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid PUBLIC identifier.</source>
+ <translation>%1은(는) 잘못된 PUBLIC 식별자입니다.</translation>
+ </message>
+ <message>
+ <source>Invalid XML name.</source>
+ <translation>XML 이름이 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>Opening and ending tag mismatch.</source>
+ <translation>여는 태그와 닫는 태그가 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Entity &apos;%1&apos; not declared.</source>
+ <translation>엔티티 &apos;%1&apos;이(가) 선언되지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>Reference to unparsed entity &apos;%1&apos;.</source>
+ <translation>처리되지 않은 엔티티 &apos;%1&apos;을(를) 참고합니다.</translation>
+ </message>
+ <message>
+ <source>Reference to external entity &apos;%1&apos; in attribute value.</source>
+ <translation>속성 값에서 외부 엔티티 &apos;%1&apos;을(를) 참조하고 있습니다.</translation>
+ </message>
+ <message>
+ <source>Invalid character reference.</source>
+ <translation>잘못된 문자 참조입니다.</translation>
+ </message>
+</context>
+<context>
+ <name>QtXmlPatterns</name>
+ <message>
+ <source>%1 is an unsupported encoding.</source>
+ <translation>인코딩 %1은(는) 지원하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>%1 contains octets which are disallowed in the requested encoding %2.</source>
+ <translation>%1은(는) 요청한 인코딩 %2에서 사용할 수 없는 바이트 배열을 포함합니다.</translation>
+ </message>
+ <message>
+ <source>The codepoint %1, occurring in %2 using encoding %3, is an invalid XML character.</source>
+ <translation>인코딩 %3을(를) 사용하며 %2에 있는 코드포인트 %1은(는) 올바르지 않은 XML 문자입니다.</translation>
+ </message>
+ <message>
+ <source>Network timeout.</source>
+ <translation>네트워크 시간 초과됨.</translation>
+ </message>
+ <message>
+ <source>Element %1 can&apos;t be serialized because it appears outside the document element.</source>
+ <translation>원소 %1이(가) 문서 밖에 나오므로 시리얼화할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 can&apos;t be serialized because it appears at the top level.</source>
+ <translation>속성 %1이(가) 최상위 단계에 나타나므로 시리얼화할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Year %1 is invalid because it begins with %2.</source>
+ <translation>%1년은 %2(으)로 시작하므로 올바르지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Day %1 is outside the range %2..%3.</source>
+ <translation>날짜 %1은(는) %2..%3 범위 밖에 있습니다.</translation>
+ </message>
+ <message>
+ <source>Month %1 is outside the range %2..%3.</source>
+ <translation>달 %1은(는) 범위 %2..%3 밖에 있습니다.</translation>
+ </message>
+ <message>
+ <source>Overflow: Can&apos;t represent date %1.</source>
+ <translation>넘침: 날짜 %1을(를) 표시할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Day %1 is invalid for month %2.</source>
+ <translation>%2월에는 %1일이 없습니다.</translation>
+ </message>
+ <message>
+ <source>Time 24:%1:%2.%3 is invalid. Hour is 24, but minutes, seconds, and milliseconds are not all 0; </source>
+ <translation>24시간제 시간 24:%1:%2.%3이(가) 올바르지 않습니다. 시간은 24이나 분, 초, 밀리초가 모두 0 이상입니다;</translation>
+ </message>
+ <message>
+ <source>Time %1:%2:%3.%4 is invalid.</source>
+ <translation>시간 %1:%2:%3.%4이(가) 올바르지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Overflow: Date can&apos;t be represented.</source>
+ <translation>넘침: 날짜를 표시할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>At least one component must be present.</source>
+ <translation>최소한 하나의 구성 요소가 필요합니다.</translation>
+ </message>
+ <message>
+ <source>At least one time component must appear after the %1-delimiter.</source>
+ <translation>구분자 %1 이후에 최소 하나의 시간 구성 요소가 나와야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid value of type %2.</source>
+ <translation>%1은(는) 올바른 %2 형식의 값이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>When casting to %1 from %2, the source value cannot be %3.</source>
+ <translation>%1에서 %2(으)로 변환할 때 원본 값이 %3일 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Integer division (%1) by zero (%2) is undefined.</source>
+ <translation>0(%2)으로 나누는 정수 나눗셈(%1)은 정의되지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>Division (%1) by zero (%2) is undefined.</source>
+ <translation>0(%2)으로 나누는 나눗셈(%1)은 정의되지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>Modulus division (%1) by zero (%2) is undefined.</source>
+ <translation>0(%2)으로 나눈 나머지(%1)는 정의되지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source>
+ <translation>%1 형식의 값을 %2(숫자가 아님)(으)로 나누는 것은 허용되지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Dividing a value of type %1 by %2 or %3 (plus or minus zero) is not allowed.</source>
+ <translation>%1 형식의 값을 %2나 %3(+0/-0)(으)로 나누는 것은 허용되지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Multiplication of a value of type %1 by %2 or %3 (plus or minus infinity) is not allowed.</source>
+ <translation>%1 형식의 값을 %2나 %3(양이나 음의 무한대)(으)로 곱하는 것은 허용되지 않습니다.</translation>
+ </message>
+ <message>
+ <source>A value of type %1 cannot have an Effective Boolean Value.</source>
+ <translation>%1 형식의 값은 유효한 참/거짓을 가질 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Effective Boolean Value cannot be calculated for a sequence containing two or more atomic values.</source>
+ <translation>유효한 참/거짓 값은 두 개 이상의 원자적인 값을 포함하는 배열과 함께 계산될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Value %1 of type %2 exceeds maximum (%3).</source>
+ <translation>%2 형식의 값 %1이(가) 최댓값 %3보다 큽니다.</translation>
+ </message>
+ <message>
+ <source>Value %1 of type %2 is below minimum (%3).</source>
+ <translation>%2 형식의 값 %1이(가) 최솟값 %3보다 작습니다.</translation>
+ </message>
+ <message>
+ <source>A value of type %1 must contain an even number of digits. The value %2 does not.</source>
+ <translation>%1 형식의 값은 짝수 자리수만 포함할 수 있으나, 값 %2은(는) 그렇지 않습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not valid as a value of type %2.</source>
+ <translation>%1은(는) 올바른 %2 형식의 값이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>Ambiguous rule match.</source>
+ <translation>모호한 규칙 일치.</translation>
+ </message>
+ <message>
+ <source>Operator %1 cannot be used on type %2.</source>
+ <translation>연산자 %1은(는) 형식 %2에 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Operator %1 cannot be used on atomic values of type %2 and %3.</source>
+ <translation>연산자 %1은(는) %2, %3 형식의 원자적인 값에 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The namespace URI in the name for a computed attribute cannot be %1.</source>
+ <translation>계산된 속성 이름의 네임스페이스 URL는 %1일 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The name for a computed attribute cannot have the namespace URI %1 with the local name %2.</source>
+ <translation>계산된 속성 이름의 네임스페이스 URL는 %1, 로컬 이름은 %2일 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Type error in cast, expected %1, received %2.</source>
+ <translation>변환 중 형식 오류, %1을(를) 예상했지만 %2을(를) 받음.</translation>
+ </message>
+ <message>
+ <source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source>
+ <translation>%1 및 파생 형식으로 변환하려면 원본 값은 같은 형식이거나 문자열 리터럴이어야 합니다. %2 형식은 허용되지 않습니다.</translation>
+ </message>
+ <message>
+ <source>A comment cannot contain %1</source>
+ <translation>주석에는 %1을(를) 포함할 수 없음</translation>
+ </message>
+ <message>
+ <source>A comment cannot end with a %1.</source>
+ <translation>주석은 %1(으)로 끝날 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source>
+ <translation>네임스페이스 생성자에서 네임스페이스의 값은 빈 문자열일 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The prefix must be a valid %1, which %2 is not.</source>
+ <translation>접두사는 올바른 %1이어야 하지만, %2은(는) 그렇지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The prefix %1 cannot be bound.</source>
+ <translation>접두사 %1이(가) 바인딩될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Only the prefix %1 can be bound to %2 and vice versa.</source>
+ <translation>접두사 %1만 %2에 바인딩할 수 있으며, 그 역도 마찬가지입니다.</translation>
+ </message>
+ <message>
+ <source>An attribute node cannot be a child of a document node. Therefore, the attribute %1 is out of place.</source>
+ <translation>속성 노드는 문서 노드의 자식이 될 수 없습니다. 따라서 속성 %1의 위치가 잘못되었습니다.</translation>
+ </message>
+ <message>
+ <source>A library module cannot be evaluated directly. It must be imported from a main module.</source>
+ <translation>라이브러리 모듈은 직접적으로 실행될 수 없으며, 주 모듈에서 가져와야 합니다.</translation>
+ </message>
+ <message>
+ <source>No template by name %1 exists.</source>
+ <translation>이름이 %1인 템플릿이 없습니다.</translation>
+ </message>
+ <message>
+ <source>A value of type %1 cannot be a predicate. A predicate must have either a numeric type or an Effective Boolean Value type.</source>
+ <translation>%1 형식의 값은 술어가 될 수 없습니다. 술어는 숫자 형식이나 유효한 참/거짓 형식의 값을 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>A positional predicate must evaluate to a single numeric value.</source>
+ <translation>위치가 정해진 술어는 유일한 숫자 값으로 해석되어야 합니다.</translation>
+ </message>
+ <message>
+ <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid.</source>
+ <translation>처리 과정의 대상 이름은 %1을(를) 모두 대문자나 소문자로 써야 하므로, %2은(는) 올바르지 않습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source>
+ <translation>%1은(는) 올바른 처리 방법 대상 이름이 아닙니다. %3와(과) 같은 %2 값이어야 합니다.</translation>
+ </message>
+ <message>
+ <source>The last step in a path must contain either nodes or atomic values. It cannot be a mixture between the two.</source>
+ <translation>경로의 마지막 단계는 노드나 원자적 값만 포함할 수 있으며, 둘을 같이 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The data of a processing instruction cannot contain the string %1</source>
+ <translation>처리 과정의 데이터는 문자열 %1을(를) 포함할 수 없습니다</translation>
+ </message>
+ <message>
+ <source>No namespace binding exists for the prefix %1</source>
+ <translation>접두사 %1의 네임스페이스 바인딩이 존재하지 않습니다</translation>
+ </message>
+ <message>
+ <source>No namespace binding exists for the prefix %1 in %2</source>
+ <translation>%2의 접두사 %1의 네임스페이스 바인딩이 존재하지 않습니다</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid %2</source>
+ <translation>%1은(는) 올바르지 않은 %2입니다</translation>
+ </message>
+ <message>
+ <source>The parameter %1 is passed, but no corresponding %2 exists.</source>
+ <translation>인자 %1이(가) 전달되었으나 대응하는 %2이(가) 없습니다.</translation>
+ </message>
+ <message>
+ <source>The parameter %1 is required, but no corresponding %2 is supplied.</source>
+ <translation>인자 %1이(가) 필요하나, 해당하는 %2이(가) 없습니다.</translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source>
+ <translation>
+ <numerusform>%1은(는) 최대 %n개의 인자를 받아들이므로, %2은(는) 올바르지 않습니다.</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source>%1 requires at least %n argument(s). %2 is therefore invalid.</source>
+ <translation>
+ <numerusform>%1은(는) 최소 %n개의 인자를 받아들이므로, %2은(는) 올바르지 않습니다.</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>The first argument to %1 cannot be of type %2. It must be a numeric type, xs:yearMonthDuration or xs:dayTimeDuration.</source>
+ <translation>%1의 첫 번째 인자는 %2 형식일 수 없습니다. 숫자나 xs:yearMonthDuration, xs:dayTimeDuration 형식이어야 합니다.</translation>
+ </message>
+ <message>
+ <source>The first argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
+ <translation>%1의 첫 번째 인자는 %2 형식일 수 없습니다. %3, %4, %5 형식이어야 합니다.</translation>
+ </message>
+ <message>
+ <source>The second argument to %1 cannot be of type %2. It must be of type %3, %4, or %5.</source>
+ <translation>%1의 두 번째 인자는 %2 형식일 수 없습니다. %3, %4, %5 형식이어야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid XML 1.0 character.</source>
+ <translation>%1은(는) 올바르지 않은 XML 1.0 글자입니다.</translation>
+ </message>
+ <message>
+ <source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source>
+ <translation>함수 %1의 두 번째 인자의 루트 노드는 문서 노드여야 합니다. %2은(는) 문서 노드가 아닙니다.</translation>
+ </message>
+ <message>
+ <source>If both values have zone offsets, they must have the same zone offset. %1 and %2 are not the same.</source>
+ <translation>두 값이 모두 지역 오프셋을 가지고 있다면 같아야 합니다. %1와(과) %2은(는) 같지 않습니다.</translation>
+ </message>
+ <message>
+ <source>%1 was called.</source>
+ <translation>%1이(가) 호출되었습니다.</translation>
+ </message>
+ <message>
+ <source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source>
+ <translation>%1은(는) %2(이)나 %3 뒤에 와야 하며, 바꿀 문자열 뒤에 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source>
+ <translation>바꿀 문자열이 이스케이핑되지 않았다면 %1 뒤에 숫자가 최소 하나는 와야 합니다.</translation>
+ </message>
+ <message>
+ <source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source>
+ <translation>바꿀 문자열에서 %1은(는) 자기 자신이나 %2을(를) 이스케이핑하는 데 사용해야 하며, %3에는 사용할 수 없습니다</translation>
+ </message>
+ <message>
+ <source>%1 matches newline characters</source>
+ <translation>%1은(는) 새 줄 문자에 일치합니다</translation>
+ </message>
+ <message>
+ <source>%1 and %2 match the start and end of a line.</source>
+ <translation>%1와(과) %2은(는) 각각 줄의 시작과 끝에 일치합니다.</translation>
+ </message>
+ <message>
+ <source>Matches are case insensitive</source>
+ <translation>대소문자를 구분하여 일치시킵니다</translation>
+ </message>
+ <message>
+ <source>Whitespace characters are removed, except when they appear in character classes</source>
+ <translation>문자 클래스에 나타나지 않으면 공백 문자는 삭제됩니다</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid regular expression pattern: %2</source>
+ <translation>%1은(는) 올바른 정규 표현식 패턴이 아닙니다: %2</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid flag for regular expressions. Valid flags are:</source>
+ <translation>%1은(는) 올바르지 않은 정규 표현식 플래그입니다. 올바른 플래그는 다음과 같습니다:</translation>
+ </message>
+ <message>
+ <source>If the first argument is the empty sequence or a zero-length string (no namespace), a prefix cannot be specified. Prefix %1 was specified.</source>
+ <translation>첫 번째 인자가 빈 시퀀스나 빈 문자열(네임스페이스 없음)인 경우, 접두사를 지정할 수 없습니다. 접두사 %1이(가) 지정되었습니다.</translation>
+ </message>
+ <message>
+ <source>It will not be possible to retrieve %1.</source>
+ <translation>%1을(를) 가져올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The default collection is undefined</source>
+ <translation>기본 조건이 정의되지 않았음</translation>
+ </message>
+ <message>
+ <source>%1 cannot be retrieved</source>
+ <translation>%1을(를) 가져올 수 없음</translation>
+ </message>
+ <message>
+ <source>The normalization form %1 is unsupported. The supported forms are %2, %3, %4, and %5, and none, i.e. the empty string (no normalization).</source>
+ <translation>정규화 형식 %1은(는) 지원하지 않습니다. 지원하는 형식은 %2, %3, %4, %5이며, 빈 문자열을 입력하면 정규화하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>A zone offset must be in the range %1..%2 inclusive. %3 is out of range.</source>
+ <translation>시간대 오프셋은 %1..%2 범위 안에 있어야 하며 이 두 값을 포함합니다. %3은(는) 범위를 벗어났습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not a whole number of minutes.</source>
+ <translation>%1은(는) 올바른 분 숫자가 아닙니다.</translation>
+ </message>
+ <message>
+ <source>The URI cannot have a fragment</source>
+ <translation>URI에는 조각이 올 수 없음</translation>
+ </message>
+ <message>
+ <source>Required cardinality is %1; got cardinality %2.</source>
+ <translation>필요한 농도는 %1이지만, %2이(가) 지정되었습니다.</translation>
+ </message>
+ <message>
+ <source>The item %1 did not match the required type %2.</source>
+ <translation>항목 %1은(는) 필요한 형식 %2과(와) 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The variable %1 is unused</source>
+ <translation>변수 %1이(가) 사용되지 않습니다</translation>
+ </message>
+ <message>
+ <source>W3C XML Schema identity constraint selector</source>
+ <translation>W3C XML 스키마 아이덴티티 제약 조건 선택자</translation>
+ </message>
+ <message>
+ <source>W3C XML Schema identity constraint field</source>
+ <translation>W3C XML 스키마 아이덴티티 제약 조건 필드</translation>
+ </message>
+ <message>
+ <source>A construct was encountered which is disallowed in the current language(%1).</source>
+ <translation>현재 언어(%1)에 사용할 수 없는 생성자가 있습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is an unknown schema type.</source>
+ <translation>%1은(는) 알 수 없는 스키마 형식입니다.</translation>
+ </message>
+ <message>
+ <source>A template with name %1 has already been declared.</source>
+ <translation>이름이 %1인 템플릿이 이미 선언되었습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid numeric literal.</source>
+ <translation>%1은(는) 올바른 숫자 리터럴이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>Only one %1 declaration can occur in the query prolog.</source>
+ <translation>쿼리 선두부에는 %1 선언이 하나만 올 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>The initialization of variable %1 depends on itself</source>
+ <translation>변수 %1의 초기화 과정이 자기 자신에게 의존함</translation>
+ </message>
+ <message>
+ <source>No variable with name %1 exists</source>
+ <translation>이름이 %1인 변수가 없음</translation>
+ </message>
+ <message>
+ <source>Version %1 is not supported. The supported XQuery version is 1.0.</source>
+ <translation>버전 %1은(는) 지원하지 않습니다. 지원하는 XQuery 버전은 1.0입니다.</translation>
+ </message>
+ <message>
+ <source>The encoding %1 is invalid. It must contain Latin characters only, must not contain whitespace, and must match the regular expression %2.</source>
+ <translation>인코딩 %1은(는) 올바르지 않습니다. 라틴 알파벳만 포함해야 하며, 공백이 들어가지 않아야 하며, 정규 표현식 %2와(과) 일치해야 합니다.</translation>
+ </message>
+ <message>
+ <source>No function with signature %1 is available</source>
+ <translation>선언이 %1인 함수가 없습니다</translation>
+ </message>
+ <message>
+ <source>A default namespace declaration must occur before function, variable, and option declarations.</source>
+ <translation>기본 네임스페이스 선언은 함수, 변수, 옵션 선언 이전에 와야 합니다.</translation>
+ </message>
+ <message>
+ <source>Namespace declarations must occur before function, variable, and option declarations.</source>
+ <translation>네임스페이스 선언은 함수, 변수, 옵션 선언 이전에 와야 합니다.</translation>
+ </message>
+ <message>
+ <source>Module imports must occur before function, variable, and option declarations.</source>
+ <translation>모듈 가져오기는 함수, 변수, 옵션 선언 이전에 와야 합니다.</translation>
+ </message>
+ <message>
+ <source>The keyword %1 cannot occur with any other mode name.</source>
+ <translation>키워드 %1은(는) 다른 모드 이름과 같이 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The value of attribute %1 must be of type %2, which %3 isn&apos;t.</source>
+ <translation>속성 %1의 값은 %2 형식이어야 하지만, %3은(는) 그렇지 않습니다.</translation>
+ </message>
+ <message>
+ <source>It is not possible to redeclare prefix %1.</source>
+ <translation>접두사 %1을(를) 다시 선언할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The prefix %1 cannot be bound. By default, it is already bound to the namespace %2.</source>
+ <translation>접두사 %1이(가) 바인딩될 수 없습니다. 기본적으로 이 값은 네임스페이스 %2에 바인딩되어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Prefix %1 is already declared in the prolog.</source>
+ <translation>접두사 %1이(가) 선두부에 이미 선언되어 있습니다.</translation>
+ </message>
+ <message>
+ <source>The name of an option must have a prefix. There is no default namespace for options.</source>
+ <translation>옵션의 이름은 접두사를 포함해야 합니다. 옵션에는 기본 네임스페이스가 없습니다.</translation>
+ </message>
+ <message>
+ <source>The Schema Import feature is not supported, and therefore %1 declarations cannot occur.</source>
+ <translation>스키마 가져오기 기능은 지원하지 않으며, %1 선언이 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The target namespace of a %1 cannot be empty.</source>
+ <translation>%1의 대상 네임스페이스가 비어 있으면 안 됩니다.</translation>
+ </message>
+ <message>
+ <source>The module import feature is not supported</source>
+ <translation>모듈 가져오기 기능은 지원하지 않습니다</translation>
+ </message>
+ <message>
+ <source>A variable with name %1 has already been declared.</source>
+ <translation>이름이 %1인 변수가 이미 선언되었습니다.</translation>
+ </message>
+ <message>
+ <source>No value is available for the external variable with name %1.</source>
+ <translation>이름이 %1인 외부 변수의 사용할 수 있는 값이 없습니다.</translation>
+ </message>
+ <message>
+ <source>A stylesheet function must have a prefixed name.</source>
+ <translation>스타일시트 함수는 접두사가 있는 이름을 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>The namespace for a user defined function cannot be empty (try the predefined prefix %1 which exists for cases like this)</source>
+ <translation>사용자 정의 함수의 네임스페이스는 비어 있을 수 없습니다. (이러한 경우에 사용할 수 있는 미리 정의된 접두사 %1을(를) 사용하십시오)</translation>
+ </message>
+ <message>
+ <source>The namespace %1 is reserved; therefore user defined functions may not use it. Try the predefined prefix %2, which exists for these cases.</source>
+ <translation>네임스페이스 %1은(는) 예약되어 있으므로 사용자 정의 함수에서 사용할 수 없습니다. 이러한 경우에 사용할 수 있는 미리 정의된 접두사 %2을(를) 사용하십시오.</translation>
+ </message>
+ <message>
+ <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source>
+ <translation>라이브러리 모듈에 있는 사용자 정의 함수의 네임스페이스는 모듈의 네임스페이스와 같아야 합니다. 즉 %2이(가) 아니라 %1이어야 합니다</translation>
+ </message>
+ <message>
+ <source>A function already exists with the signature %1.</source>
+ <translation>선언이 %1인 함수가 이미 존재합니다.</translation>
+ </message>
+ <message>
+ <source>No external functions are supported. All supported functions can be used directly, without first declaring them as external</source>
+ <translation>외부 함수는 지원하지 않습니다. 모든 지원하는 함수는 external로 선언하지 않고 바로 사용할 수 있습니다</translation>
+ </message>
+ <message>
+ <source>An argument with name %1 has already been declared. Every argument name must be unique.</source>
+ <translation>이름이 %1인 인자가 이미 선언되었습니다. 모든 인자의 이름은 달라야 합니다.</translation>
+ </message>
+ <message>
+ <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source>
+ <translation>함수 %1이(가) 패턴 안쪽에서 일치하는 데 사용되는 경우에는 인자 형식이 변수 참조나 문자열 리터럴이어야 합니다.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source>
+ <translation>XSL-T 패턴에서 함수 %1을(를) 일치하는 데 사용하려면 첫 번째 인자는 문자열 리터럴이어야 합니다.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source>
+ <translation>XSL-T 패턴에서 함수 %1을(를) 일치하는 데 사용하려면 첫 번째 인자 형식이 변수 참조나 문자열 리터럴이어야 합니다.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, function %1 cannot have a third argument.</source>
+ <translation>XSL-T 패턴에서 함수 %1에는 세 번째 인자가 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, only function %1 and %2, not %3, can be used for matching.</source>
+ <translation>XSL-T 패턴에서 일치하는 데에는 함수 %1, %2만 사용할 수 있으며, %3은(는) 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>In an XSL-T pattern, axis %1 cannot be used, only axis %2 or %3 can.</source>
+ <translation>XSL-T 패턴에서 축 %2, %3만 사용할 수 있으며, %1은(는) 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid template mode name.</source>
+ <translation>%1은(는) 잘못된 템플릿 모드 이름입니다.</translation>
+ </message>
+ <message>
+ <source>The name of a variable bound in a for-expression must be different from the positional variable. Hence, the two variables named %1 collide.</source>
+ <translation>for 표현식에서 사용되는 바운딩된 변수의 이름은 위치 변수의 이름과 달라야 합니다. 따라서 두 변수 %1이(가) 충돌합니다.</translation>
+ </message>
+ <message>
+ <source>The Schema Validation Feature is not supported. Hence, %1-expressions may not be used.</source>
+ <translation>스키마 검사 기능은 지원하지 않습니다. 따라서 %1 표현식은 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>None of the pragma expressions are supported. Therefore, a fallback expression must be present</source>
+ <translation>pragma 표현식은 지원하지 않습니다. 따라서 폴백 표현식이 필요합니다</translation>
+ </message>
+ <message>
+ <source>Each name of a template parameter must be unique; %1 is duplicated.</source>
+ <translation>템플릿 인자의 이름은 중복되지 않아야 하므로 같은 이름 %1이(가) 충돌합니다.</translation>
+ </message>
+ <message>
+ <source>The %1-axis is unsupported in XQuery</source>
+ <translation>XQuery에서 %1 축은 지원하지 않음</translation>
+ </message>
+ <message>
+ <source>No function with name %1 is available.</source>
+ <translation>이름이 %1인 함수를 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source>
+ <translation>접두사 %1에 바인딩될 때 네임스페이스 URI는 빈 문자열일 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is an invalid namespace URI.</source>
+ <translation>%1은(는) 잘못된 네임스페이스 URI입니다.</translation>
+ </message>
+ <message>
+ <source>It is not possible to bind to the prefix %1</source>
+ <translation>접두사 %1에 바인딩할 수 없습니다</translation>
+ </message>
+ <message>
+ <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
+ <translation>네임스페이스 %1은(는) %2에만 바인딩할 수 있습니다 (미리 선언되어야 합니다).</translation>
+ </message>
+ <message>
+ <source>Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared).</source>
+ <translation>접두사 %1은(는) %2에만 바인딩할 수 있습니다 (미리 선언되어야 합니다).</translation>
+ </message>
+ <message>
+ <source>Two namespace declaration attributes have the same name: %1.</source>
+ <translation>두 네임스페이스 선언 속성의 이름이 중복됩니다: %1.</translation>
+ </message>
+ <message>
+ <source>The namespace URI must be a constant and cannot use enclosed expressions.</source>
+ <translation>네임스페이스 URI는 상수여야 하며 내장된 표현식을 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>An attribute with name %1 has already appeared on this element.</source>
+ <translation>이름이 %1인 속성이 이 원소에 이미 나타났습니다.</translation>
+ </message>
+ <message>
+ <source>A direct element constructor is not well-formed. %1 is ended with %2.</source>
+ <translation>직접 원소 생성자의 형식이 올바르지 않습니다. %1이(가) %2(으)로 끝납니다.</translation>
+ </message>
+ <message>
+ <source>The name %1 does not refer to any schema type.</source>
+ <translation>이름 %1은(는) 어떠한 스키마 형식도 참조하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is an complex type. Casting to complex types is not possible. However, casting to atomic types such as %2 works.</source>
+ <translation>%1은(는) 복합 형식입니다. 복합 형식으로 캐스팅은 불가능하지만, %2와(과) 같은 원자적 형식으로의 캐스팅은 가능합니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not an atomic type. Casting is only possible to atomic types.</source>
+ <translation>%1은(는) 원자적 타입이 아닙니다. 원자적 타입으로만 변환할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not a valid name for a processing-instruction.</source>
+ <translation>%1은(는) 올바른 처리 방법 이름이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source>
+ <translation>%1은(는) 범위 내에 있는 속성 선언에 존재하지 않습니다. 스키마 가져오기 기능은 지원하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The name of an extension expression must be in a namespace.</source>
+ <translation>확장 표현식의 이름은 네임스페이스 안에 있어야 합니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed at this location.</source>
+ <translation>이 위치에 원소 %1이(가) 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Text nodes are not allowed at this location.</source>
+ <translation>이 위치에 텍스트 노드가 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Parse error: %1</source>
+ <translation>처리 오류: %1</translation>
+ </message>
+ <message>
+ <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn&apos;t.</source>
+ <translation>XSL-T 버전 속성의 값은 %1 형식이어야 하며, %2은(는) 이 형식이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source>
+ <translation>XSL-T 1.0 스타일시트를 2.0 프로세서로 실행하고 있습니다.</translation>
+ </message>
+ <message>
+ <source>Unknown XSL-T attribute %1.</source>
+ <translation>알 수 없는 XSL-T 속성 %1.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 and %2 are mutually exclusive.</source>
+ <translation>속성 %1와(과) %2은(는) 상호 배제적입니다.</translation>
+ </message>
+ <message>
+ <source>In a simplified stylesheet module, attribute %1 must be present.</source>
+ <translation>간단한 스타일시트 모듈에서 속성 %1은(는) 반드시 존재해야 합니다.</translation>
+ </message>
+ <message>
+ <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source>
+ <translation>원소 %1에 속성 %2이(가) 없으면, 속성 %3 또는 %4을(를) 가질 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 must have at least one of the attributes %2 or %3.</source>
+ <translation>원소 %1에는 %2, %3 중 최소한 하나의 속성이 있어야 합니다.</translation>
+ </message>
+ <message>
+ <source>At least one mode must be specified in the %1-attribute on element %2.</source>
+ <translation>원소 %2의 %1 속성에는 최소한 하나의 모드가 지정되어야 합니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 must come last.</source>
+ <translation>원소 %1은(는) 맨 마지막에 와야 합니다.</translation>
+ </message>
+ <message>
+ <source>At least one %1-element must occur before %2.</source>
+ <translation>최소한 하나의 %1 원소가 %2 이전에 와야 합니다.</translation>
+ </message>
+ <message>
+ <source>Only one %1-element can appear.</source>
+ <translation>%1 원소는 최대 하나만 올 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>At least one %1-element must occur inside %2.</source>
+ <translation>%2 안에 최소한 하나의 %1 원소가 와야 합니다.</translation>
+ </message>
+ <message>
+ <source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source>
+ <translation>속성 %1이(가) %2에 존재하면 시퀀스 생성자를 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 must have either a %2-attribute or a sequence constructor.</source>
+ <translation>원소 %1은(는) %2 속성이나 시퀀스 생성자 중 하나를 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source>
+ <translation>인자가 필요한 경우에는 %1 속성이나 시퀀스 생성자를 통해서 기본값을 지정할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 cannot have children.</source>
+ <translation>원소 %1은(는) 자식을 가질 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 cannot have a sequence constructor.</source>
+ <translation>원소 %1은(는) 시퀀스 생성자를 가질 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The attribute %1 cannot appear on %2, when it is a child of %3.</source>
+ <translation>속성 %1은(는) %3의 자식일 때 %2에 나타날 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>A parameter in a function cannot be declared to be a tunnel.</source>
+ <translation>함수의 인자는 터널로 선언될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>This processor is not Schema-aware and therefore %1 cannot be used.</source>
+ <translation>이 프로세서는 스키마를 인지하지 못하므로 %1을(를) 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Top level stylesheet elements must be in a non-null namespace, which %1 isn&apos;t.</source>
+ <translation>최상위 스타일시트 원소는 비어 있지 않은 네임스페이스에 있어야 하지만 %1은(는) 그렇지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source>
+ <translation>원소 %2의 속성 %1의 값은 %3, %4여야 하며, %5이(가) 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 cannot have the value %2.</source>
+ <translation>속성 %1은(는) 값 %2을(를) 가질 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The attribute %1 can only appear on the first %2 element.</source>
+ <translation>속성 %1은(는) 첫 %2 원소에만 올 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>At least one %1 element must appear as child of %2.</source>
+ <translation>%2 원소의 자식으로 최소한 하나의 %1 원소가 와야 합니다.</translation>
+ </message>
+ <message>
+ <source>Empty particle cannot be derived from non-empty particle.</source>
+ <translation>비어 있지 않은 입자에서 비어 있는 입자가 파생될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Derived particle is missing element %1.</source>
+ <translation>파생된 입자에 %1 원소가 없습니다.</translation>
+ </message>
+ <message>
+ <source>Derived element %1 is missing value constraint as defined in base particle.</source>
+ <translation>파생된 원소 %1에는 기본 입자에 선언되어 있는 값 제약 조건이 없습니다.</translation>
+ </message>
+ <message>
+ <source>Derived element %1 has weaker value constraint than base particle.</source>
+ <translation>파생된 원소 %1은(는) 기본 입자보다 약한 값 제약 조건을 가지고 있습니다.</translation>
+ </message>
+ <message>
+ <source>Fixed value constraint of element %1 differs from value constraint in base particle.</source>
+ <translation>원소 %1의 고정 값 제약 조건은 부모 입자의 값 제약 조건과 다릅니다.</translation>
+ </message>
+ <message>
+ <source>Derived element %1 cannot be nillable as base element is not nillable.</source>
+ <translation>기본 원소에 nil 값이 올 수 없으므로 파생된 원소 %1에도 nil 값이 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Block constraints of derived element %1 must not be more weaker than in the base element.</source>
+ <translation>파생된 원소 %1의 블럭 제약 조건은 기본 원소의 제약 조건보다 약할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Simple type of derived element %1 cannot be validly derived from base element.</source>
+ <translation>파생된 원소 %1의 간단한 형식은 기본 원소에서 올바르게 파생될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Complex type of derived element %1 cannot be validly derived from base element.</source>
+ <translation>파생된 원소 %1의 복합 형식은 기본 원소에서 올바르게 파생될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 is missing in derived particle.</source>
+ <translation>원소 %1이(가) 파생된 입자에 없습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 does not match namespace constraint of wildcard in base particle.</source>
+ <translation>원소 %1은(는) 기본 입자의 와일드카드 네임스페이스 제약 조건과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Wildcard in derived particle is not a valid subset of wildcard in base particle.</source>
+ <translation>파생 입자의 와일드카드는 기본 입자의 와일드카드의 올바른 부분 집합이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>processContent of wildcard in derived particle is weaker than wildcard in base particle.</source>
+ <translation>파생 입자의 와일드카드의 processContent는 기본 입자의 와일드카드보다 약합니다.</translation>
+ </message>
+ <message>
+ <source>Derived particle allows content that is not allowed in the base particle.</source>
+ <translation>기본 입자에서 허용하지 않는 내용이 파생 입자에 올 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>%1 has inheritance loop in its base type %2.</source>
+ <translation>%1의 부모 형식 %2에서 상속 루프가 발견되었습니다.</translation>
+ </message>
+ <message>
+ <source>Circular inheritance of base type %1.</source>
+ <translation>기본 형식 %1의 순환 상속입니다.</translation>
+ </message>
+ <message>
+ <source>Circular inheritance of union %1.</source>
+ <translation>공용체 %1의 순환 상속입니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to derive from %2 by restriction as the latter defines it as final.</source>
+ <translation>%1은(는) %2에서 final로 선언되었기 때문에 제한으로 분기될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to derive from %2 by extension as the latter defines it as final.</source>
+ <translation>%1은(는) %2에서 final로 선언되었기 때문에 확장으로 분기될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Base type of simple type %1 cannot be complex type %2.</source>
+ <translation>간단한 형식 %1의 기본 형식은 복합 형식 %2일 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 cannot have direct base type %2.</source>
+ <translation>간단한 형식 %1은(는) 직접적인 기본 형식 %2을(를) 가질 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 is not allowed to have base type %2.</source>
+ <translation>간단한 형식 %1에는 기본 형식 %2가 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 can only have simple atomic type as base type.</source>
+ <translation>간단한 형식 %1은(는) 간단한 원자적 형식만을 기본 형식으로 가질 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 cannot derive from %2 as the latter defines restriction as final.</source>
+ <translation>형식 %2이(가) final로 선언되었으므로, 간단한 형식 %1은(는) 여기에서 파생될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Variety of item type of %1 must be either atomic or union.</source>
+ <translation>%1 형식의 항목의 파생형은 원자적이거나 공용체여야 합니다.</translation>
+ </message>
+ <message>
+ <source>Variety of member types of %1 must be atomic.</source>
+ <translation>%1 형식의 항목의 파생형은 원자적이어야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to derive from %2 by list as the latter defines it as final.</source>
+ <translation>%1은(는) %2에서 final로 선언되었기 때문에 목록으로 분기될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 is only allowed to have %2 facet.</source>
+ <translation>간단한 형식 %1은(는) %2 패싯만 포함할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>Base type of simple type %1 must have variety of type list.</source>
+ <translation>간단한 형식 %1의 기본 형식은 파생형 목록을 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>Base type of simple type %1 has defined derivation by restriction as final.</source>
+ <translation>간단한 형식 %1의 기본 형식이 final로 선언되어 있어서 파생이 제한되어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Item type of base type does not match item type of %1.</source>
+ <translation>기본 형식의 항목 형식이 %1의 항목 형식과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Simple type %1 contains not allowed facet type %2.</source>
+ <translation>간단한 형식 %1에 허용되지 않는 패싯 형식 %2이(가) 존재합니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to derive from %2 by union as the latter defines it as final.</source>
+ <translation>%1은(는) %2에서 final로 선언되었기 때문에 공용체로 분기될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to have any facets.</source>
+ <translation>%1에는 패싯을 추가할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Base type %1 of simple type %2 must have variety of union.</source>
+ <translation>간단한 형식 %2의 기본 형식 %1에는 공용체의 파생형이 있어야 합니다.</translation>
+ </message>
+ <message>
+ <source>Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute.</source>
+ <translation>간단한 형식 %2의 기본 형식 %1에는 %3 속성에 제한을 걸 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Member type %1 cannot be derived from member type %2 of %3&apos;s base type %4.</source>
+ <translation>%3의 기본 형식 %4의 형식 %2 멤버 형식에서 멤버 형식 %1을(를) 파생할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Derivation method of %1 must be extension because the base type %2 is a simple type.</source>
+ <translation>기본 형식 %2이(가) 간단한 형식이므로 %1의 파생 방식은 확장이어야 합니다.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 has duplicated element %2 in its content model.</source>
+ <translation>복합 형식 %1의 내용 모델에 중복된 원소 %2이(가) 있습니다.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 has non-deterministic content.</source>
+ <translation>복합 형식 %1에 비 결정적 내용이 있습니다.</translation>
+ </message>
+ <message>
+ <source>Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3.</source>
+ <translation>복합 형식 %1의 속성이 기본 형식 %2의 속성의 올바른 확장이 아닙니다: %3.</translation>
+ </message>
+ <message>
+ <source>Content model of complex type %1 is not a valid extension of content model of %2.</source>
+ <translation>복합 형식 %1의 내용 모델이 %2의 내용 모델의 올바른 확장이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 must have simple content.</source>
+ <translation>복합 형식 %1에는 간단한 내용이 있어야 합니다.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 must have the same simple type as its base class %2.</source>
+ <translation>복합 형식 %1은(는) 기본 클래스 %2와(과) 같은 간단한 형식이 필요합니다.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 cannot be derived from base type %2%3.</source>
+ <translation>복합 형식 %1은(는) 기본 형식 %2%3에서 파생될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3.</source>
+ <translation>복합 형식 %1의 속성에 기본 형식 %2의 속성에서 온 올바른 제한이 없음: %3.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 with simple content cannot be derived from complex base type %2.</source>
+ <translation>간단한 내용이 있는 복합 형식 %1은(는) 복합 기본 형식 %2에서 파생될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Item type of simple type %1 cannot be a complex type.</source>
+ <translation>간단한 형식 %1의 항목 형식은 복합 형식이 될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Member type of simple type %1 cannot be a complex type.</source>
+ <translation>간단한 형식 %1의 구성원 형식은 복합 형식이 될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 is not allowed to have a member type with the same name as itself.</source>
+ <translation>%1에는 자기 자신을 종류로 갖는 구성 요소를 추가할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet collides with %2 facet.</source>
+ <translation>%1와(과) %2 패싯이 충돌합니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet must have the same value as %2 facet of base type.</source>
+ <translation>%1 패싯은 기본 형식의 패싯 %2와(과) 같은 값을 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be equal or greater than %2 facet of base type.</source>
+ <translation>%1 패싯은 기본 형식의 %2 패싯의 값보다 크거나 같아야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than or equal to %2 facet of base type.</source>
+ <translation>%1 패싯은 기본 형식의 %2 패싯의 값보다 작거나 같아야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet contains invalid regular expression</source>
+ <translation>%1 패싯에 잘못된 정규 표현식이 있음</translation>
+ </message>
+ <message>
+ <source>Unknown notation %1 used in %2 facet.</source>
+ <translation>%2 패싯에 알 수 없는 표기법 %1이(가) 사용되었습니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet contains invalid value %2: %3.</source>
+ <translation>%1 패싯에 잘못된 값 %2이(가) 포함됨: %3.</translation>
+ </message>
+ <message>
+ <source>%1 facet cannot be %2 or %3 if %4 facet of base type is %5.</source>
+ <translation>%1 패싯은 기본 형식의 %4 패싯이 %5 형식일 때 %2, %3일 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet cannot be %2 if %3 facet of base type is %4.</source>
+ <translation>%1 패싯은 기본 형식의 %3 패싯이 %4 형식일 때 %2일 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than or equal to %2 facet.</source>
+ <translation>%1 패싯은 %2 패싯보다 작거나 같아야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than %2 facet of base type.</source>
+ <translation>%1 패싯은 기본 형식의 %2 패싯보다 작아야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet and %2 facet cannot appear together.</source>
+ <translation>%1 패싯과 %2 패싯은 같이 등장할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be greater than %2 facet of base type.</source>
+ <translation>%1 패싯은 기본 형식의 %2 패싯보다 커야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be less than %2 facet.</source>
+ <translation>%1 패싯은 %2 패싯보다 작아야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 facet must be greater than or equal to %2 facet of base type.</source>
+ <translation>%1 패싯은 기본 형식의 %2 패싯보다 크거나 같아야 합니다.</translation>
+ </message>
+ <message>
+ <source>Simple type contains not allowed facet %1.</source>
+ <translation>간단한 형식에는 패싯 %1이(가) 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list.</source>
+ <translation>목록에서 파생된 경우 %1, %2, %3, %4, %5, %6 패싯은 허용되지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Only %1 and %2 facets are allowed when derived by union.</source>
+ <translation>공용체에서 파생되었을 때에는 %1, %2 패싯만 사용할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>%1 contains %2 facet with invalid data: %3.</source>
+ <translation>%1에 잘못된 데이터가 들어 있는 %2 패싯이 있음: %3.</translation>
+ </message>
+ <message>
+ <source>Attribute group %1 contains attribute %2 twice.</source>
+ <translation>속성 그룹 %1에 속성 %2이(가) 두 번 들어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Attribute group %1 contains two different attributes that both have types derived from %2.</source>
+ <translation>속성 그룹 %1에 %2에서 파생된 형식을 포함하는 두 개의 서로 다른 속성이 있습니다.</translation>
+ </message>
+ <message>
+ <source>Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3.</source>
+ <translation>속성 그룹 %1에 값 제약 조건이 있지만 %3 형식에서 파생된 형식을 갖는 %2 속성이 있습니다.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 contains attribute %2 twice.</source>
+ <translation>복합 형식 %1에 속성 %2이(가) 두 번 들어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 contains two different attributes that both have types derived from %2.</source>
+ <translation>복합 형식 %1에 %2에서 파생된 형식을 포함하는 두 개의 서로 다른 속성이 있습니다.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3.</source>
+ <translation>복합 형식 %1에 값 제약 조건이 있지만 %3 형식에서 파생된 형식을 갖는 %2 속성이 있습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed to have a value constraint if its base type is complex.</source>
+ <translation>기본 형식이 complex인 경우 원소 %1은(는) 값 제약 조건을 가질 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed to have a value constraint if its type is derived from %2.</source>
+ <translation>형식이 %2에서 파생된 경우 원소 %1은(는) 값 제약 조건을 가질 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Value constraint of element %1 is not of elements type: %2.</source>
+ <translation>원소 %1의 값 제약 조건이 elements 형식이 아님: %2.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed to have substitution group affiliation as it is no global element.</source>
+ <translation>원소 %1은(는) 전역 원소가 아니므로 대체 그룹 친화성을 가질 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Type of element %1 cannot be derived from type of substitution group affiliation.</source>
+ <translation>원소 %1의 형식은 대체 그룹 친화력의 형식에서 파생될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Value constraint of attribute %1 is not of attributes type: %2.</source>
+ <translation>속성 %1의 값 제약이 attributes 형식이 아님: %2.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 has value constraint but has type derived from %2.</source>
+ <translation>속성 %1에는 값 제약이 있지만 %2 형식에서 파생된 형식을 가지고 있습니다.</translation>
+ </message>
+ <message>
+ <source>%1 attribute in derived complex type must be %2 like in base type.</source>
+ <translation>파생된 복합체 형식의 %1 속성은 기본 형식처럼 %2 형식의 값을 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 in derived complex type must have %2 value constraint like in base type.</source>
+ <translation>파생된 복합 형식의 속성 %1은(는) 기본 형식처럼 값 제약 %2을(를) 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 in derived complex type must have the same %2 value constraint like in base type.</source>
+ <translation>파생된 복합 형식의 속성 %1은(는) 기본 형식과 같은 값 제약 %2을(를) 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 in derived complex type must have %2 value constraint.</source>
+ <translation>파생된 복합체 형식의 %1 속성은 %2 형식의 값 제약을 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>processContent of base wildcard must be weaker than derived wildcard.</source>
+ <translation>기본 와일드카드의 processContent는 파생 와일드카드보다 약해야 합니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 exists twice with different types.</source>
+ <translation>서로 다른 형식의 원소 %1이(가) 존재합니다.</translation>
+ </message>
+ <message>
+ <source>Particle contains non-deterministic wildcards.</source>
+ <translation>입자에 비 결정적인 와일드카드가 존재합니다.</translation>
+ </message>
+ <message>
+ <source>Base attribute %1 is required but derived attribute is not.</source>
+ <translation>기본 속성 %1이(가) 필요하지만 파생 속성은 필요하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Type of derived attribute %1 cannot be validly derived from type of base attribute.</source>
+ <translation>파생 속성 %1의 형식이 기본 속성의 형식에서 올바르게 파생될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Value constraint of derived attribute %1 does not match value constraint of base attribute.</source>
+ <translation>파생 속성 %1의 값 제약이 기본 속성의 값 제약과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Derived attribute %1 does not exist in the base definition.</source>
+ <translation>파생 속성 %1이(가) 기본 정의에 없습니다.</translation>
+ </message>
+ <message>
+ <source>Derived attribute %1 does not match the wildcard in the base definition.</source>
+ <translation>파생 속성 %1이(가) 기본 속성의 와일드카드와 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Base attribute %1 is required but missing in derived definition.</source>
+ <translation>기본 속성 %1이(가) 필요하지만 파생 정의에 없습니다.</translation>
+ </message>
+ <message>
+ <source>Derived definition contains an %1 element that does not exists in the base definition</source>
+ <translation>파생 정의에서 기본 정의에 없는 %1 원소를 포함합니다</translation>
+ </message>
+ <message>
+ <source>Derived wildcard is not a subset of the base wildcard.</source>
+ <translation>파생 와일드카드가 기본 와일드카드의 부분 집합이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>%1 of derived wildcard is not a valid restriction of %2 of base wildcard</source>
+ <translation>파생 와일드카드의 %1은(는) 기본 와일드카드의 %2의 올바른 제약 조건이 아닙니다</translation>
+ </message>
+ <message>
+ <source>Attribute %1 from base type is missing in derived type.</source>
+ <translation>기본 형식의 속성 %1이(가) 파생 형식에 없습니다.</translation>
+ </message>
+ <message>
+ <source>Type of derived attribute %1 differs from type of base attribute.</source>
+ <translation>파생 속성 %1의 형식이 기본 속성과 다릅니다.</translation>
+ </message>
+ <message>
+ <source>Base definition contains an %1 element that is missing in the derived definition</source>
+ <translation>파생 정의에 없는 %1 원소가 기본 정의에 포함되어 있습니다</translation>
+ </message>
+ <message>
+ <source>Can not process unknown element %1, expected elements are: %2.</source>
+ <translation>알 수 없는 원소 %1을(를) 처리할 수 없습니다. 예상하는 원소는 다음과 같습니다: %2.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not allowed in this scope, possible elements are: %2.</source>
+ <translation>원소 %1은(는) 이 범위에 올 수 없습니다. 가능한 원소는 다음과 같습니다: %2.</translation>
+ </message>
+ <message>
+ <source>Child element is missing in that scope, possible child elements are: %1.</source>
+ <translation>그 범위에 자식 원소가 없습니다. 가능한 자식 원소는 다음과 같습니다: %1.</translation>
+ </message>
+ <message>
+ <source>Document is not a XML schema.</source>
+ <translation>문서가 XML 스키마가 아닙니다.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4.</source>
+ <translation>%2 원소의 %1 속성에 올바르지 않은 내용이 있음: {%3}은(는) %4 형식의 값이 아님.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element contains invalid content: {%3}.</source>
+ <translation>%2 원소의 %1 속성에 올바르지 않은 내용이 있음: {%3}.</translation>
+ </message>
+ <message>
+ <source>Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema.</source>
+ <translation>포함된 스키마의 대상 네임스페이스 %1은(는) 포함하는 스키마에 정의된 대상 네임스페이스 %2와(과) 다릅니다.</translation>
+ </message>
+ <message>
+ <source>Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema.</source>
+ <translation>가져온 스키마의 대상 네임스페이스 %1은(는) 가져온 스키마에 정의된 대상 네임스페이스 %2와(과) 다릅니다.</translation>
+ </message>
+ <message>
+ <source>%1 element is not allowed to have the same %2 attribute value as the target namespace %3.</source>
+ <translation>원소 %1의 속성 %2의 값으로는 대상 네임스페이스 %3와(과) 같은 값이 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 element without %2 attribute is not allowed inside schema without target namespace.</source>
+ <translation>대상 네임스페이스가 없는 스키마에는 %2 속성이 없는 %1 원소가 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 element is not allowed inside %2 element if %3 attribute is present.</source>
+ <translation>%3 속성이 존재하면 %2 원소 안에 %1 원소가 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 element has neither %2 attribute nor %3 child element.</source>
+ <translation>%1 원소에 %2 속성이나 %3 자식 원소가 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 element with %2 child element must not have a %3 attribute.</source>
+ <translation>%2 자식 원소가 있는 %1 원소에는 %3 속성이 존재할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must be %3 or %4.</source>
+ <translation>%2 원소의 %1 속성은 %3(이)나 %4여야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must have a value of %3.</source>
+ <translation>%2 원소의 %1 속성은 %3 형식의 값을 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must have a value of %3 or %4.</source>
+ <translation>%2 원소의 %1 속성은 값 %3(이)나 %4이(가) 있어야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 element must not have %2 and %3 attribute together.</source>
+ <translation>%1 원소는 %2, %3 속성 둘 다를 가질 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Content of %1 attribute of %2 element must not be from namespace %3.</source>
+ <translation>%2 원소의 %1 속성의 내용은 %3 네임스페이스에서 올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must not be %3.</source>
+ <translation>%2 원소의 %1 속성은 %3일 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must have the value %3 because the %4 attribute is set.</source>
+ <translation>%4 속성이 설정되어 있으므로 %2 원소의 %1 속성 값으로는 %3이(가) 지정되어야 합니다.</translation>
+ </message>
+ <message>
+ <source>Specifying use=&apos;prohibited&apos; inside an attribute group has no effect.</source>
+ <translation>속성 그룹 안에서 use=&apos;prohibited&apos;를 사용하여도 효과가 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 element must have either %2 or %3 attribute.</source>
+ <translation>%1 원소는 %2, %3 중 하나의 속성만 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 element must have either %2 attribute or %3 or %4 as child element.</source>
+ <translation>%1 원소는 %2 속성이나 자식 원소로 %3, %4을(를) 가져야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 element requires either %2 or %3 attribute.</source>
+ <translation>%1 원소에는 %2, %3 중 하나의 속성이 필요합니다.</translation>
+ </message>
+ <message>
+ <source>Text or entity references not allowed inside %1 element</source>
+ <translation>%1 원소 안에 텍스트나 엔티티 참조를 사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must contain %3, %4 or a list of URIs.</source>
+ <translation>%2 원소의 %1 속성에는 %3, %4, 또는 URI 목록이 포함되어야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 element is not allowed in this context.</source>
+ <translation>이 컨텍스트에는 %1 원소가 허용되지 않습니다.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element has larger value than %3 attribute.</source>
+ <translation>%2 원소의 %1 속성이 %3 속성보다 큰 값을 가지고 있습니다.</translation>
+ </message>
+ <message>
+ <source>Prefix of qualified name %1 is not defined.</source>
+ <translation>접두사나 완전한 이름 %1이(가) 정의되지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>%1 attribute of %2 element must either contain %3 or the other values.</source>
+ <translation>%2 원소의 %1 속성에는 %3(이)나 다른 값이 포함되어야 합니다.</translation>
+ </message>
+ <message>
+ <source>Component with ID %1 has been defined previously.</source>
+ <translation>ID가 %1인 구성 요소가 이미 정의되었습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 already defined.</source>
+ <translation>원소 %1이(가) 이미 정의되었습니다.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 already defined.</source>
+ <translation>속성 %1이(가) 이미 정의되었습니다.</translation>
+ </message>
+ <message>
+ <source>Type %1 already defined.</source>
+ <translation>형식 %1이(가) 이미 정의되었습니다.</translation>
+ </message>
+ <message>
+ <source>Type %1 already defined.</source>
+ <comment>QSystemSemaphore</comment>
+ <translation type="obsolete">%1: 이미 존재함</translation>
+ </message>
+ <message>
+ <source>Attribute group %1 already defined.</source>
+ <translation>속성 그룹 %1이(가) 이미 정의되었습니다.</translation>
+ </message>
+ <message>
+ <source>Element group %1 already defined.</source>
+ <translation>원소 그룹 %1이(가) 이미 정의되었습니다.</translation>
+ </message>
+ <message>
+ <source>Notation %1 already defined.</source>
+ <translation>표기법 %1이(가) 이미 정의되었습니다.</translation>
+ </message>
+ <message>
+ <source>Identity constraint %1 already defined.</source>
+ <translation>아이덴티티 제약 조건 %1이(가) 이미 정의되었습니다.</translation>
+ </message>
+ <message>
+ <source>Duplicated facets in simple type %1.</source>
+ <translation>간단한 형식 %1에 중복된 패싯이 있습니다.</translation>
+ </message>
+ <message>
+ <source>%1 references unknown %2 or %3 element %4.</source>
+ <translation>%1에서 알 수 없는 %2 또는 %3 원소 %4을(를) 참조합니다.</translation>
+ </message>
+ <message>
+ <source>%1 references identity constraint %2 that is no %3 or %4 element.</source>
+ <translation>%1에서 %3, %4 원소가 없는 아이덴티티 제약 조건 %2을(를) 참조합니다.</translation>
+ </message>
+ <message>
+ <source>%1 has a different number of fields from the identity constraint %2 that it references.</source>
+ <translation>%1에서 참조하는 아이덴티티 제약 조건 %2와(과) 필드 개수가 다릅니다.</translation>
+ </message>
+ <message>
+ <source>Base type %1 of %2 element cannot be resolved.</source>
+ <translation>%2 원소의 기본 형식 %1을(를) 해석할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Item type %1 of %2 element cannot be resolved.</source>
+ <translation>%2 원소의 항목 형식 %1을(를) 해석할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Member type %1 of %2 element cannot be resolved.</source>
+ <translation>%2 원소의 구성 요소 형식 %1을(를) 해석할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Type %1 of %2 element cannot be resolved.</source>
+ <translation>%2 원소의 형식 %1을(를) 해석할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Base type %1 of complex type cannot be resolved.</source>
+ <translation>복합 형식 %1의 기본 형식을 해석할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>%1 cannot have complex base type that has a %2.</source>
+ <translation>%1에는 %2을(를) 포함하는 복합 기본 형식을 추가할 수 없음.</translation>
+ </message>
+ <message>
+ <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source>
+ <translation>복합 형식 %1의 내용 모델은 %2 원소를 포함하므로 비어 있지 않은 형식의 확장으로 파생될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model.</source>
+ <translation>복합 형식 %1은(는) %2의 내용 모델에 %3 원소를 포함하므로 여기에서 확장으로 파생될 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Type of %1 element must be a simple type, %2 is not.</source>
+ <translation>%1 원소의 형식은 간단한 형식이어야 하며, %2은(는) 그렇지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Substitution group %1 of %2 element cannot be resolved.</source>
+ <translation>%2의 대체 그룹 %1을(를) 해석할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Substitution group %1 has circular definition.</source>
+ <translation>대체 그룹 %1에 순환 정의가 있습니다.</translation>
+ </message>
+ <message>
+ <source>Duplicated element names %1 in %2 element.</source>
+ <translation>%2 원소에 중복된 원소 이름 %1이(가) 있습니다.</translation>
+ </message>
+ <message>
+ <source>Reference %1 of %2 element cannot be resolved.</source>
+ <translation>%2 원소의 참조 %1을(를) 해석할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Circular group reference for %1.</source>
+ <translation>%1의 순환 그룹 참조가 발견되었습니다.</translation>
+ </message>
+ <message>
+ <source>%1 element is not allowed in this scope</source>
+ <translation>이 범위에 %1 원소가 올 수 없습니다</translation>
+ </message>
+ <message>
+ <source>%1 element cannot have %2 attribute with value other than %3.</source>
+ <translation>%1 원소의 %2 속성 값은 %3이어야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 element cannot have %2 attribute with value other than %3 or %4.</source>
+ <translation>%1 원소의 %2 속성 값은 %3(이)나 %4여야 합니다.</translation>
+ </message>
+ <message>
+ <source>%1 or %2 attribute of reference %3 does not match with the attribute declaration %4.</source>
+ <translation>참조 %3의 속성 %1이나 %2이(가) 속성 선언 %4와(과) 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Attribute group %1 has circular reference.</source>
+ <translation>속성 그룹 %1에 순환 참조가 있습니다.</translation>
+ </message>
+ <message>
+ <source>%1 attribute in %2 must have %3 use like in base type %4.</source>
+ <translation>%2의 %1 속성은 기본 형식 %4처럼 %3을(를) 사용하여야 합니다.</translation>
+ </message>
+ <message>
+ <source>Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2.</source>
+ <translation>%1의 속성 와일드카드는 기본 형식 %2의 속성 와일드카드의 올바른 제한이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>%1 has attribute wildcard but its base type %2 has not.</source>
+ <translation>%1에는 속성 와일드카드가 있지만 기본 형식 %2에는 없습니다.</translation>
+ </message>
+ <message>
+ <source>Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible.</source>
+ <translation>%1 형식의 속성 와일드카드와 기본 형식 %2의 속성 와일드카드의 공용체는 표현할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Enumeration facet contains invalid content: {%1} is not a value of type %2.</source>
+ <translation>Enumeration 패싯에 올바르지 않은 내용이 있습니다: {%1}은(는) %2 형식의 값이 아닙니다.</translation>
+ </message>
+ <message>
+ <source>Namespace prefix of qualified name %1 is not defined.</source>
+ <translation>완전한 이름 %1을(를) 사용하는 네임스페이스 접두사가 선언되지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>%1 element %2 is not a valid restriction of the %3 element it redefines: %4.</source>
+ <translation>%1 원소 %2은(는) 재정의하는 %3 원소의 올바른 제약 조건이 아닙니다: %4.</translation>
+ </message>
+ <message>
+ <source>%1 is not valid according to %2.</source>
+ <translation>%2에 의하면 %1은(는) 올바르지 않습니다.</translation>
+ </message>
+ <message>
+ <source>String content does not match the length facet.</source>
+ <translation>문자열 내용이 length 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>String content does not match the minLength facet.</source>
+ <translation>문자열 내용이 minLength 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>String content does not match the maxLength facet.</source>
+ <translation>문자열 내용이 maxLength 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>String content does not match pattern facet.</source>
+ <translation>문자열 내용이 pattern 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>String content is not listed in the enumeration facet.</source>
+ <translation>문자열 내용이 enumeration 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the maxInclusive facet.</source>
+ <translation>부호 있는 정수 내용이 maxInclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the maxExclusive facet.</source>
+ <translation>부호 있는 정수 내용이 maxExclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the minInclusive facet.</source>
+ <translation>부호 있는 정수 내용이 minInclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match the minExclusive facet.</source>
+ <translation>부호 있는 정수 내용이 minExclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Signed integer content is not listed in the enumeration facet.</source>
+ <translation>부호 있는 정수 내용이 enumeration 패싯에 없습니다.</translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match pattern facet.</source>
+ <translation>부호 있는 정수 내용이 pattern 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Signed integer content does not match in the totalDigits facet.</source>
+ <translation>부호 있는 정수 내용이 totalDigits 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the maxInclusive facet.</source>
+ <translation>부호 없는 정수 내용이 maxInclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the maxExclusive facet.</source>
+ <translation>부호 없는 정수 내용이 maxExclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the minInclusive facet.</source>
+ <translation>부호 없는 정수 내용이 minInclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match the minExclusive facet.</source>
+ <translation>부호 없는 정수 내용이 minExclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Unsigned integer content is not listed in the enumeration facet.</source>
+ <translation>부호 없는 정수 내용이 enumeration 패싯에 없습니다.</translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match pattern facet.</source>
+ <translation>부호 없는 정수 내용이 pattern 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Unsigned integer content does not match in the totalDigits facet.</source>
+ <translation>부호 없는 정수 내용이 totalDigits 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Double content does not match the maxInclusive facet.</source>
+ <translation>실수 내용이 maxLength 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Double content does not match the maxExclusive facet.</source>
+ <translation>실수 내용이 maxExclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Double content does not match the minInclusive facet.</source>
+ <translation>실수 내용이 minInclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Double content does not match the minExclusive facet.</source>
+ <translation>실수 내용이 minExclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Double content is not listed in the enumeration facet.</source>
+ <translation>실수 내용이 enumeration 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Double content does not match pattern facet.</source>
+ <translation>실수 내용이 pattern 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Decimal content does not match in the fractionDigits facet.</source>
+ <translation>십진수 내용이 fractionDigits 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Decimal content does not match in the totalDigits facet.</source>
+ <translation>십진수 내용이 totalDigits 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Date time content does not match the maxInclusive facet.</source>
+ <translation>날짜 및 시간 내용이 maxInclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Date time content does not match the maxExclusive facet.</source>
+ <translation>날짜 및 시간 내용이 maxExclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Date time content does not match the minInclusive facet.</source>
+ <translation>날짜 및 시간 내용이 minInclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Date time content does not match the minExclusive facet.</source>
+ <translation>날짜 및 시간 내용이 minExclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Date time content is not listed in the enumeration facet.</source>
+ <translation>날짜 및 시간 내용이 enumeration 패싯에 없습니다.</translation>
+ </message>
+ <message>
+ <source>Date time content does not match pattern facet.</source>
+ <translation>날짜 및 시간 내용이 pattern 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Duration content does not match the maxInclusive facet.</source>
+ <translation>지속 시간 내용이 maxInclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Duration content does not match the maxExclusive facet.</source>
+ <translation>지속 시간 내용이 maxExclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Duration content does not match the minInclusive facet.</source>
+ <translation>지속 시간 내용이 minInclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Duration content does not match the minExclusive facet.</source>
+ <translation>지속 시간 내용이 minExclusive 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Duration content is not listed in the enumeration facet.</source>
+ <translation>지속 시간 내용이 enumeration 패싯에 없습니다.</translation>
+ </message>
+ <message>
+ <source>Duration content does not match pattern facet.</source>
+ <translation>지속 시간 내용이 pattern 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Boolean content does not match pattern facet.</source>
+ <translation>참/거짓 내용이 pattern 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Binary content does not match the length facet.</source>
+ <translation>참/거짓 내용이 length 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Binary content does not match the minLength facet.</source>
+ <translation>참/거짓 내용이 minLength 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Binary content does not match the maxLength facet.</source>
+ <translation>참/거짓 내용이 maxLength 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Binary content is not listed in the enumeration facet.</source>
+ <translation>참/거짓 내용이 enumeration 패싯에 없습니다.</translation>
+ </message>
+ <message>
+ <source>Invalid QName content: %1.</source>
+ <translation>잘못된 QName 내용: %1.</translation>
+ </message>
+ <message>
+ <source>QName content is not listed in the enumeration facet.</source>
+ <translation>QName 내용이 enumeration 패싯에 없습니다.</translation>
+ </message>
+ <message>
+ <source>QName content does not match pattern facet.</source>
+ <translation>QName 내용이 pattern 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Notation content is not listed in the enumeration facet.</source>
+ <translation>Notation 내용이 enumeration 패싯에 없습니다.</translation>
+ </message>
+ <message>
+ <source>List content does not match length facet.</source>
+ <translation>목록 내용이 length 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>List content does not match minLength facet.</source>
+ <translation>목록 내용이 minLength 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>List content does not match maxLength facet.</source>
+ <translation>목록 내용이 maxLength 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>List content is not listed in the enumeration facet.</source>
+ <translation>목록 내용이 enumeration 패싯에 없습니다.</translation>
+ </message>
+ <message>
+ <source>List content does not match pattern facet.</source>
+ <translation>목록 내용이 pattern 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Union content is not listed in the enumeration facet.</source>
+ <translation>공용체 내용이 enumeration 패싯에 없습니다.</translation>
+ </message>
+ <message>
+ <source>Union content does not match pattern facet.</source>
+ <translation>공용체 내용이 pattern 패싯과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Data of type %1 are not allowed to be empty.</source>
+ <translation>%1 형식 데이터는 비어 있으면 안 됩니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 is missing child element.</source>
+ <translation>원소 %1에 자식 원소가 없습니다.</translation>
+ </message>
+ <message>
+ <source>There is one IDREF value with no corresponding ID: %1.</source>
+ <translation>대응하는 ID가 없는 IDREF 값이 있습니다: %1.</translation>
+ </message>
+ <message>
+ <source>Loaded schema file is invalid.</source>
+ <translation>불러온 스키마 파일이 올바르지 않습니다.</translation>
+ </message>
+ <message>
+ <source>%1 contains invalid data.</source>
+ <translation>%1에 올바르지 않은 데이터가 있습니다.</translation>
+ </message>
+ <message>
+ <source>xsi:schemaLocation namespace %1 has already appeared earlier in the instance document.</source>
+ <translation>xsi:schemaLocation 네임스페이스 %1이(가) 인스턴스 문서의 더 위에 존재합니다.</translation>
+ </message>
+ <message>
+ <source>xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute.</source>
+ <translation>xsi:noNamespaceSchemaLocation은 첫 no-namespace 원소나 속성 다음에 나올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>No schema defined for validation.</source>
+ <translation>검증할 스키마가 정의되지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>No definition for element %1 available.</source>
+ <translation>원소 %1의 정의를 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Specified type %1 is not known to the schema.</source>
+ <translation>스키마에 지정한 형식 %1이(가) 정의되어 있지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not defined in this scope.</source>
+ <translation>원소 %1은(는) 이 범위에 정의되지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>Declaration for element %1 does not exist.</source>
+ <translation>원소 %1의 선언이 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 contains invalid content.</source>
+ <translation>원소 %1에 올바르지 않은 내용이 있습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 is declared as abstract.</source>
+ <translation>원소 %1이 추상 원소로 선언되었습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 is not nillable.</source>
+ <translation>원소 %1에 nil 값을 대입할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 contains invalid data: %2</source>
+ <translation>속성 %1에 잘못된 데이터가 있음: %2</translation>
+ </message>
+ <message>
+ <source>Element contains content although it is nillable.</source>
+ <translation>원소에 nil 값을 할당할 수 있지만 내용이 들어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Fixed value constraint not allowed if element is nillable.</source>
+ <translation>원소에 nil 값을 대입할 수 있으면 고정된 값 제약 조건을 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Specified type %1 is not validly substitutable with element type %2.</source>
+ <translation>지정한 형식 %1은(는) %2 형식의 원소로 올바르게 대체할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Complex type %1 is not allowed to be abstract.</source>
+ <translation>복합 형식 %1은(는) 추상으로 선언할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed attributes.</source>
+ <translation>원소 %1에 허용되지 않은 속성이 포함되어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed child element.</source>
+ <translation>원소 %1에 허용되지 않은 자식 원소가 포함되어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Content of element %1 does not match its type definition: %2.</source>
+ <translation>원소 %1의 내용은 형식 선언과 일치하지 않습니다: %2.</translation>
+ </message>
+ <message>
+ <source>Content of element %1 does not match defined value constraint.</source>
+ <translation>원소 %1의 내용은 정의된 값 제약 조건과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed child content.</source>
+ <translation>원소 %1에 허용되지 않은 자식 내용이 포함되어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 contains not allowed text content.</source>
+ <translation>원소 %1에 허용되지 않은 텍스트 내용이 포함되어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 cannot contain other elements, as it has a fixed content.</source>
+ <translation>원소 %1의 내용은 고정되어 있으므로 다른 원소를 포함할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 is missing required attribute %2.</source>
+ <translation>원소 %1에 필요한 속성 %2이(가) 없습니다.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 does not match the attribute wildcard.</source>
+ <translation>속성 %1이(가) 속성 와일드카드와 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Declaration for attribute %1 does not exist.</source>
+ <translation>속성 %1 선언이 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 contains two attributes of type %2.</source>
+ <translation>원소 %1은(는) 형식이 %2인 속성을 두 개 포함하고 있습니다.</translation>
+ </message>
+ <message>
+ <source>Attribute %1 contains invalid content.</source>
+ <translation>속성 %1에 잘못된 데이터가 있습니다.</translation>
+ </message>
+ <message>
+ <source>Element %1 contains unknown attribute %2.</source>
+ <translation>원소 %1에 알 수 없는 속성 %2이(가) 포함되어 있습니다.</translation>
+ </message>
+ <message>
+ <source>Content of attribute %1 does not match its type definition: %2.</source>
+ <translation>속성 %1의 내용과 형식 정의가 일치하지 않습니다: %2.</translation>
+ </message>
+ <message>
+ <source>Content of attribute %1 does not match defined value constraint.</source>
+ <translation>속성 %1의 내용이 정의된 값 제약 조건과 일치하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Non-unique value found for constraint %1.</source>
+ <translation>제약 조건 %1에 중복되는 값이 있습니다.</translation>
+ </message>
+ <message>
+ <source>Key constraint %1 contains absent fields.</source>
+ <translation>키 제약 조건 %1에 비어 있는 필드가 있습니다.</translation>
+ </message>
+ <message>
+ <source>Key constraint %1 contains references nillable element %2.</source>
+ <translation>키 제약 조건 %1에서 nil 값이 올 수 있는 원소 %2을(를) 참조합니다.</translation>
+ </message>
+ <message>
+ <source>No referenced value found for key reference %1.</source>
+ <translation>키 참조 %1에 대한 참조되는 값을 찾을 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>More than one value found for field %1.</source>
+ <translation>필드 %1에 하나 이상의 값이 있습니다.</translation>
+ </message>
+ <message>
+ <source>Field %1 has no simple type.</source>
+ <translation>필드 %1에 간단한 형식이 없습니다.</translation>
+ </message>
+ <message>
+ <source>ID value &apos;%1&apos; is not unique.</source>
+ <translation>ID 값 &apos;%1&apos;이(가) 유일하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>&apos;%1&apos; attribute contains invalid QName content: %2.</source>
+ <translation>속성 &apos;%1&apos;에 올바르지 않은 QName 내용이 있음: %2.</translation>
+ </message>
+ <message>
+ <source>empty</source>
+ <translation>비어 있음</translation>
+ </message>
+ <message>
+ <source>zero or one</source>
+ <translation>0이나 1</translation>
+ </message>
+ <message>
+ <source>exactly one</source>
+ <translation>정확히 1</translation>
+ </message>
+ <message>
+ <source>one or more</source>
+ <translation>1 이상</translation>
+ </message>
+ <message>
+ <source>zero or more</source>
+ <translation>0 이상</translation>
+ </message>
+ <message>
+ <source>Required type is %1, but %2 was found.</source>
+ <translation>요청한 형식은 %1(이)나 %2이(가) 요청되었습니다.</translation>
+ </message>
+ <message>
+ <source>Promoting %1 to %2 may cause loss of precision.</source>
+ <translation>%1을(를) %2(으)로 변환하면 정밀도를 잃어버릴 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>The focus is undefined.</source>
+ <translation>초점이 정의되지 않았습니다.</translation>
+ </message>
+ <message>
+ <source>It&apos;s not possible to add attributes after any other kind of node.</source>
+ <translation>노드 뒤에 속성을 추가할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>An attribute by name %1 has already been created.</source>
+ <translation>이름이 %1인 속성이 이미 생성되었습니다.</translation>
+ </message>
+ <message>
+ <source>Only the Unicode Codepoint Collation is supported(%1). %2 is unsupported.</source>
+ <translation>유니코드 코드 포인트 순 정렬만 지원합니다(%1). %2은(는) 지원하지 않습니다.</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/qt_pl.ts b/translations/qt_pl.ts
index 37fbee1..0c9c01e 100644
--- a/translations/qt_pl.ts
+++ b/translations/qt_pl.ts
@@ -321,6 +321,10 @@ zainstalowałeś libgstreamer-plugins-base.</translation>
<source>Playback complete</source>
<translation>Zakończono odtwarzanie</translation>
</message>
+ <message>
+ <source>Download error</source>
+ <translation>Błąd pobierania</translation>
+ </message>
</context>
<context>
<name>Phonon::MMF::AbstractVideoPlayer</name>
@@ -440,6 +444,10 @@ zainstalowałeś libgstreamer-plugins-base.</translation>
<source>Error opening source: media type could not be determined</source>
<translation>Błąd otwierania źródła: nie można określić typu multimediów</translation>
</message>
+ <message>
+ <source>Failed to set requested IAP</source>
+ <translation>Nie można ustawić żądanego IAP</translation>
+ </message>
</context>
<context>
<name>Phonon::MMF::StereoWidening</name>
@@ -1200,6 +1208,11 @@ na
<translation>%1: zasoby wyczerpane</translation>
</message>
<message>
+ <source>%1: permission denied</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: brak uprawnień</translation>
+ </message>
+ <message>
<source>%1: unknown error %2</source>
<comment>QSystemSemaphore</comment>
<translation>%1: nieznany błąd %2</translation>
@@ -1366,6 +1379,13 @@ na
</message>
</context>
<context>
+ <name>QDeclarativeApplication</name>
+ <message>
+ <source>Application is an abstract class</source>
+ <translation>&quot;Application&quot; jest klasą abstrakcyjną</translation>
+ </message>
+</context>
+<context>
<name>QDeclarativeBehavior</name>
<message>
<source>Cannot change the animation assigned to a Behavior.</source>
@@ -1501,6 +1521,14 @@ na
<translation>Nie można utworzyć pustej specyfikacji komponentu</translation>
</message>
<message>
+ <source>&quot;%1.%2&quot; is not available in %3 %4.%5.</source>
+ <translation>&quot;%1.%2&quot; nie jest dostępne w %3 %4.%5.</translation>
+ </message>
+ <message>
+ <source>&quot;%1.%2&quot; is not available due to component versioning.</source>
+ <translation>&quot;%1.%2&quot; nie jest dostępny z powodu niekompatybilności wersji komponentu.</translation>
+ </message>
+ <message>
<source>Incorrectly specified signal assignment</source>
<translation>Przypisanie sygnału błędnie podane</translation>
</message>
@@ -1597,6 +1625,10 @@ na
<translation>Niepoprawne przypisanie wartości: oczekiwano skryptu</translation>
</message>
<message>
+ <source>Cannot assign multiple values to a singular property</source>
+ <translation>Nie można przypisać wielu wartości do pojedynczej właściwości</translation>
+ </message>
+ <message>
<source>Cannot assign object to property</source>
<translation>Nie można przypisać obiektu dla właściwości</translation>
</message>
@@ -1678,7 +1710,7 @@ na
</message>
<message>
<source>ID illegally masks global JavaScript property</source>
- <translation type="unfinished"></translation>
+ <translation>Identyfikator nielegalnie maskuje globalną właściwość JavaScript</translation>
</message>
<message>
<source>No property alias location</source>
@@ -1689,8 +1721,16 @@ na
<translation>Niepoprawne położenie aliasu</translation>
</message>
<message>
+ <source>Invalid alias reference. An alias reference must be specified as &lt;id&gt;, &lt;id&gt;.&lt;property&gt; or &lt;id&gt;.&lt;value property&gt;.&lt;property&gt;</source>
+ <translation>Niepoprawna referencja aliasu. Referencja aliasu musi być podana jako &lt;id&gt;, &lt;id&gt;.&lt;property&gt; lub &lt;id&gt;.&lt;value property&gt;.&lt;property&gt;</translation>
+ </message>
+ <message>
+ <source>Alias property exceeds alias bounds</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Invalid alias reference. An alias reference must be specified as &lt;id&gt; or &lt;id&gt;.&lt;property&gt;</source>
- <translation>Niepoprawna referencja aliasu. Referencja aliasu musi być podana jako &lt;id&gt; lub &lt;id&gt; &lt;property&gt;</translation>
+ <translation type="obsolete">Niepoprawna referencja aliasu. Referencja aliasu musi być podana jako &lt;id&gt; lub &lt;id&gt; &lt;property&gt;</translation>
</message>
<message>
<source>Invalid alias reference. Unable to find id &quot;%1&quot;</source>
@@ -1703,24 +1743,28 @@ na
<source>Invalid empty URL</source>
<translation>Niepoprawny pusty URL</translation>
</message>
+ <message>
+ <source>createObject: value is not an object</source>
+ <translation>&quot;createObject&quot;: wartość nie jest obiektem</translation>
+ </message>
</context>
<context>
<name>QDeclarativeCompositeTypeManager</name>
<message>
<source>Resource %1 unavailable</source>
- <translation>Zasób %1 nie jest dostępny</translation>
+ <translation type="obsolete">Zasób %1 nie jest dostępny</translation>
</message>
<message>
<source>Namespace %1 cannot be used as a type</source>
- <translation>Przestrzeń nazw %1 nie może być użyta jako typ</translation>
+ <translation type="obsolete">Przestrzeń nazw %1 nie może być użyta jako typ</translation>
</message>
<message>
<source>%1 %2</source>
- <translation>%1 %2</translation>
+ <translation type="obsolete">%1 %2</translation>
</message>
<message>
<source>Type %1 unavailable</source>
- <translation>Typ %1 nie jest dostępny</translation>
+ <translation type="obsolete">Typ %1 nie jest dostępny</translation>
</message>
</context>
<context>
@@ -1762,7 +1806,7 @@ na
</message>
<message>
<source>transaction: missing callback</source>
- <translation type="unfinished"></translation>
+ <translation>transakcja: brak wywołania zwrotnego</translation>
</message>
<message>
<source>SQL: database version mismatch</source>
@@ -1783,6 +1827,10 @@ na
<context>
<name>QDeclarativeImportDatabase</name>
<message>
+ <source>cannot load module &quot;%1&quot;: File name case mismatch for &quot;%2&quot;</source>
+ <translation>nie można załadować modułu &quot;%1&quot;: Niezgodność wielkości liter w &quot;%2&quot;</translation>
+ </message>
+ <message>
<source>module &quot;%1&quot; definition &quot;%2&quot; not readable</source>
<translation>definicja &quot;%2&quot; modułu &quot;%1&quot; nie może zostać odczytana</translation>
</message>
@@ -1838,6 +1886,10 @@ na
<source>is not a type</source>
<translation>nie jest typem</translation>
</message>
+ <message>
+ <source>File name case mismatch for &quot;%2&quot;</source>
+ <translation>Niezgodność wielkości liter w &quot;%2&quot;</translation>
+ </message>
</context>
<context>
<name>QDeclarativeKeyNavigationAttached</name>
@@ -1854,6 +1906,17 @@ na
</message>
</context>
<context>
+ <name>QDeclarativeLayoutMirroringAttached</name>
+ <message>
+ <source>LayoutDirection attached property only works with Items</source>
+ <translation>Dołączona właściwość &quot;LayoutDirection&quot; działa tylko z &quot;Item&quot;</translation>
+ </message>
+ <message>
+ <source>LayoutMirroring is only available via attached properties</source>
+ <translation>&quot;LayoutMirroring&quot; dostępny jest tylko poprzez dołączone właściwości</translation>
+ </message>
+</context>
+<context>
<name>QDeclarativeListModel</name>
<message>
<source>remove: index %1 out of range</source>
@@ -1911,37 +1974,37 @@ na
<name>QDeclarativeParentAnimation</name>
<message>
<source>Unable to preserve appearance under complex transform</source>
- <translation type="unfinished"></translation>
+ <translation>Nie można utrzymać wyglądu przy złożonej transformacji</translation>
</message>
<message>
<source>Unable to preserve appearance under non-uniform scale</source>
- <translation type="unfinished"></translation>
+ <translation>Nie można utrzymać wyglądu przy niejednolitej skali</translation>
</message>
<message>
<source>Unable to preserve appearance under scale of 0</source>
- <translation type="unfinished"></translation>
+ <translation>Nie można utrzymać wyglądu przy zerowej skali</translation>
</message>
</context>
<context>
<name>QDeclarativeParentChange</name>
<message>
<source>Unable to preserve appearance under complex transform</source>
- <translation type="unfinished"></translation>
+ <translation>Nie można utrzymać wyglądu przy złożonej transformacji</translation>
</message>
<message>
<source>Unable to preserve appearance under non-uniform scale</source>
- <translation type="unfinished"></translation>
+ <translation>Nie można utrzymać wyglądu przy niejednolitej skali</translation>
</message>
<message>
<source>Unable to preserve appearance under scale of 0</source>
- <translation type="unfinished"></translation>
+ <translation>Nie można utrzymać wyglądu przy zerowej skali</translation>
</message>
</context>
<context>
<name>QDeclarativeParser</name>
<message>
<source>Illegal unicode escape sequence</source>
- <translation type="unfinished"></translation>
+ <translation>Niepoprawny znak w sekwencji escape</translation>
</message>
<message>
<source>Illegal character</source>
@@ -1953,7 +2016,7 @@ na
</message>
<message>
<source>Illegal escape sequence</source>
- <translation type="unfinished"></translation>
+ <translation>Niepoprawna sekwencja escape</translation>
</message>
<message>
<source>Unclosed comment at end of file</source>
@@ -1965,7 +2028,7 @@ na
</message>
<message>
<source>Identifier cannot start with numeric literal</source>
- <translation>Identyfikator nie może rozpoczynać się stałą liczbową</translation>
+ <translation>Identyfikator nie może rozpoczynać się literałem liczbowym</translation>
</message>
<message>
<source>Unterminated regular expression literal</source>
@@ -1977,7 +2040,7 @@ na
</message>
<message>
<source>Unterminated regular expression backslash sequence</source>
- <translation type="unfinished"></translation>
+ <translation>Niedokończone sekwencja backslash wyrażenia regularnego</translation>
</message>
<message>
<source>Unterminated regular expression class</source>
@@ -2005,7 +2068,7 @@ na
</message>
<message>
<source>Invalid import qualifier ID</source>
- <translation type="unfinished"></translation>
+ <translation>Niepoprawny kwalifikator ID importu</translation>
</message>
<message>
<source>Reserved name &quot;Qt&quot; cannot be used as an qualifier</source>
@@ -2115,11 +2178,30 @@ na
<name>QDeclarativeTextInput</name>
<message>
<source>Could not load cursor delegate</source>
- <translation type="unfinished"></translation>
+ <translation>Nie można załadować delegata kursora</translation>
</message>
<message>
<source>Could not instantiate cursor delegate</source>
- <translation type="unfinished"></translation>
+ <translation>Nie można zinstancjonować delegata kursora</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeTypeLoader</name>
+ <message>
+ <source>Script %1 unavailable</source>
+ <translation>Skrypt &quot;%1&quot; nie jest dostępny</translation>
+ </message>
+ <message>
+ <source>Type %1 unavailable</source>
+ <translation>Typ %1 nie jest dostępny</translation>
+ </message>
+ <message>
+ <source>Namespace %1 cannot be used as a type</source>
+ <translation>Przestrzeń nazw %1 nie może być użyta jako typ</translation>
+ </message>
+ <message>
+ <source>%1 %2</source>
+ <translation>%1 %2</translation>
</message>
</context>
<context>
@@ -2142,7 +2224,7 @@ na
</message>
<message>
<source>Cannot assign an object to signal property %1</source>
- <translation type="unfinished"></translation>
+ <translation>Nie można przypisać obiektu do właściwości sygnału %1</translation>
</message>
<message>
<source>Cannot assign object to list</source>
@@ -2150,7 +2232,7 @@ na
</message>
<message>
<source>Cannot assign object to interface property</source>
- <translation type="unfinished"></translation>
+ <translation>Nie można przypisać obiektu do właściwości interfejsu</translation>
</message>
<message>
<source>Unable to create attached object</source>
@@ -2165,7 +2247,7 @@ na
<name>QDeclarativeVisualDataModel</name>
<message>
<source>Delegate component must be Item type.</source>
- <translation type="unfinished"></translation>
+ <translation>Delegat musi być typu &quot;Item&quot;.</translation>
</message>
</context>
<context>
@@ -3343,11 +3425,11 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
<name>QLibrary</name>
<message>
<source>Could not mmap &apos;%1&apos;: %2</source>
- <translation>Nie można wykonać przypisania &apos;%1&apos;: %2</translation>
+ <translation type="obsolete">Nie można wykonać przypisania &apos;%1&apos;: %2</translation>
</message>
<message>
<source>Could not unmap &apos;%1&apos;: %2</source>
- <translation>Nie można usunąć przypisania &apos;%1&apos;: %2</translation>
+ <translation type="obsolete">Nie można usunąć przypisania &apos;%1&apos;: %2</translation>
</message>
<message>
<source>Plugin verification data mismatch in &apos;%1&apos;</source>
@@ -4111,7 +4193,7 @@ Proszę o sprawdzenie podanej nazwy pliku.</translation>
</message>
<message>
<source>&quot;%1&quot; duplicates a previous role name and will be disabled.</source>
- <translation type="unfinished"></translation>
+ <translation>&quot;%1&quot; powiela poprzednią nazwę roli i zostanie wyłączone.</translation>
</message>
<message>
<source>invalid query: &quot;%1&quot;</source>
@@ -5488,7 +5570,7 @@ Proszę wybrać inną nazwę pliku.</translation>
<message>
<source>Media Pause</source>
<extracomment>Media player pause button</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Media pauza</translation>
</message>
<message>
<source>Toggle Media Play/Pause</source>
@@ -5870,27 +5952,27 @@ Proszę wybrać inną nazwę pliku.</translation>
<message>
<source>Toggle Call/Hangup</source>
<extracomment>Button that will hang up if we&apos;re in call, or make a call if we&apos;re not.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Przełącz dzwoń/zawieś</translation>
</message>
<message>
<source>Voice Dial</source>
- <extracomment>Button to trigger voice dialling</extracomment>
- <translation type="unfinished"></translation>
+ <extracomment>Button to trigger voice dialing</extracomment>
+ <translation>Wybieranie głosowe</translation>
</message>
<message>
<source>Last Number Redial</source>
<extracomment>Button to redial the last number called</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Wykręć ostatni numer</translation>
</message>
<message>
<source>Camera Shutter</source>
<extracomment>Button to trigger the camera shutter (take a picture)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Migawka aparatu</translation>
</message>
<message>
<source>Camera Focus</source>
<extracomment>Button to focus the camera</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Ostrość aparatu</translation>
</message>
<message>
<source>Kanji</source>
@@ -6525,6 +6607,10 @@ Proszę wybrać inną nazwę pliku.</translation>
<translation>Błąd tworzenia sesji SSL: %1</translation>
</message>
<message>
+ <source>The peer certificate is blacklisted</source>
+ <translation>Element równorzędny widnieje na czarnej liście</translation>
+ </message>
+ <message>
<source>Cannot provide a certificate with no key, %1</source>
<translation>Nie można dostarczyć certyfikatu bez klucza, %1</translation>
</message>
@@ -7717,7 +7803,7 @@ Proszę wybrać inną nazwę pliku.</translation>
</message>
<message>
<source>external parsed general entity reference not allowed in attribute value</source>
- <translation>odwołanie do jednostki ogólnej zewnętrznie przetworzonej nie dozwolone dla wartości atrybutu </translation>
+ <translation>odwołanie do jednostki ogólnej zewnętrznie przetworzonej nie dozwolone dla wartości atrybutu</translation>
</message>
<message>
<source>external parsed general entity reference not allowed in DTD</source>
@@ -7827,7 +7913,7 @@ Proszę wybrać inną nazwę pliku.</translation>
</message>
<message>
<source>Unexpected character &apos;%1&apos; in public id literal.</source>
- <translation>Nieoczekiwany znak &apos;%1&apos; w publicznej stałej znakowej.</translation>
+ <translation>Nieoczekiwany znak &apos;%1&apos; w publicznym literale.</translation>
</message>
<message>
<source>Invalid XML version string.</source>
@@ -8062,7 +8148,7 @@ Proszę wybrać inną nazwę pliku.</translation>
</message>
<message>
<source>When casting to %1 or types derived from it, the source value must be of the same type, or it must be a string literal. Type %2 is not allowed.</source>
- <translation>Podczas rzutowania na %1 lub na typ pochodny, wartość źródłowa musi być tego samego typu lub musi być stałą znakową. Typ %2 nie jest dozwolony.</translation>
+ <translation>Podczas rzutowania na %1 lub na typ pochodny, wartość źródłowa musi być tego samego typu lub musi być literałem znakowym. Typ %2 nie jest dozwolony.</translation>
</message>
<message>
<source>A comment cannot contain %1</source>
@@ -8150,11 +8236,11 @@ Proszę wybrać inną nazwę pliku.</translation>
</message>
<message>
<source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source>
- <translation type="unfinished">W ciągu zastępczym, po %1 musi następować przynajmniej jedna cyfra</translation>
+ <translation>W ciągu zastępczym, po %1 musi następować przynajmniej jedna cyfra pod warunkiem, że nie jest ona w sekwencji escape.</translation>
</message>
<message>
<source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source>
- <translation type="unfinished">W ciągu zastępczym, %1 może być użyte tylko do zabezpieczenia samej siebie lub %2, nigdy %3</translation>
+ <translation>W ciągu zastępczym, %1 może być użyte tylko do zabezpieczenia samej siebie lub %2, nigdy %3</translation>
</message>
<message>
<source>%1 matches newline characters</source>
@@ -8298,7 +8384,7 @@ Proszę wybrać inną nazwę pliku.</translation>
</message>
<message>
<source>%1 is not a valid numeric literal.</source>
- <translation>%1 nie jest poprawną stałą liczbową.</translation>
+ <translation>%1 nie jest poprawnym literałem liczbowym.</translation>
</message>
<message>
<source>W3C XML Schema identity constraint selector</source>
@@ -8350,15 +8436,15 @@ Proszę wybrać inną nazwę pliku.</translation>
</message>
<message>
<source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source>
- <translation>Gdy funkcja %1 jest wykorzystana do dopasowania wewnątrz wzorca, jej argument musi być referencją do zmiennej lub stałą znakową.</translation>
+ <translation>Gdy funkcja %1 jest wykorzystana do dopasowania wewnątrz wzorca, jej argument musi być referencją do zmiennej lub literałem znakowym.</translation>
</message>
<message>
<source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source>
- <translation>We wzorze XSL-T pierwszy argument w funkcji %1 musi być stałą znakową podczas dopasowywania.</translation>
+ <translation>We wzorze XSL-T pierwszy argument w funkcji %1 musi być literałem znakowym podczas dopasowywania.</translation>
</message>
<message>
<source>In an XSL-T pattern, the first argument to function %1 must be a literal or a variable reference, when used for matching.</source>
- <translation>We wzorze XSL-T pierwszy argument w funkcji %1 musi być stałą znakową lub nazwą zmiennej podczas dopasowywania.</translation>
+ <translation>We wzorze XSL-T pierwszy argument w funkcji %1 musi być literałem znakowym lub nazwą zmiennej podczas dopasowywania.</translation>
</message>
<message>
<source>In an XSL-T pattern, function %1 cannot have a third argument.</source>
@@ -9747,7 +9833,7 @@ Proszę wybrać inną nazwę pliku.</translation>
</message>
<message>
<source>Key constraint %1 contains references nillable element %2.</source>
- <translation type="unfinished"></translation>
+ <translation>Ograniczenie klucza %1 zawiera odwołania do elementu zerowalnego %2.</translation>
</message>
<message>
<source>No referenced value found for key reference %1.</source>
diff --git a/translations/qt_ru.ts b/translations/qt_ru.ts
index e20fc0c..d399b6d 100644
--- a/translations/qt_ru.ts
+++ b/translations/qt_ru.ts
@@ -89,7 +89,7 @@
</message>
<message>
<source>Revert back to device &apos;%1&apos;</source>
- <translation>Возвращение к устройству &quot;%1&quot;</translation>
+ <translation>Возвращение к устройству «%1»</translation>
</message>
<message>
<source>&lt;html&gt;Switching to the audio playback device &lt;b&gt;%1&lt;/b&gt;&lt;br/&gt;which has higher preference or is specifically configured for this stream.&lt;/html&gt;</source>
@@ -188,7 +188,7 @@ have libgstreamer-plugins-base installed.</source>
</message>
<message>
<source>Underflow</source>
- <translation type="unfinished">Переполнение</translation>
+ <translation>Ниже границы</translation>
</message>
<message>
<source>Already exists</source>
@@ -240,7 +240,7 @@ have libgstreamer-plugins-base installed.</source>
</message>
<message>
<source>Server alert</source>
- <translation type="unfinished">Сигнал сервера</translation>
+ <translation>Сигнал сервера</translation>
</message>
<message>
<source>Invalid protocol</source>
@@ -444,6 +444,10 @@ have libgstreamer-plugins-base installed.</source>
<source>Error opening source: media type could not be determined</source>
<translation>Ошибка открытия источника: не удалось определить тип медиа-данных</translation>
</message>
+ <message>
+ <source>Failed to set requested IAP</source>
+ <translation>Не удалось задать указанную точку доступа</translation>
+ </message>
</context>
<context>
<name>Phonon::MMF::StereoWidening</name>
@@ -482,7 +486,7 @@ have libgstreamer-plugins-base installed.</source>
</message>
<message>
<source>Ambiguous %1 not handled</source>
- <translation type="unfinished"></translation>
+ <translation>Неоднозначная комбинация %1 не обработана</translation>
</message>
</context>
<context>
@@ -704,7 +708,7 @@ have libgstreamer-plugins-base installed.</source>
</message>
<message>
<source>&lt;qt&gt;Are you sure you wish to delete %1 &quot;%2&quot;?&lt;/qt&gt;</source>
- <translation>&lt;qt&gt;Вы действительно хотите удалить %1 &quot;%2&quot;?&lt;/qt&gt;</translation>
+ <translation>&lt;qt&gt;Вы действительно хотите удалить %1 «%2»?&lt;/qt&gt;</translation>
</message>
<message>
<source>&amp;Yes</source>
@@ -951,35 +955,35 @@ to
<name>Q3UrlOperator</name>
<message>
<source>The protocol `%1&apos; is not supported</source>
- <translation>Протокол &quot;%1&quot; не поддерживается</translation>
+ <translation>Протокол «%1» не поддерживается</translation>
</message>
<message>
<source>The protocol `%1&apos; does not support listing directories</source>
- <translation>Протокол &quot;%1&quot; не поддерживает просмотр каталогов</translation>
+ <translation>Протокол «%1» не поддерживает просмотр каталогов</translation>
</message>
<message>
<source>The protocol `%1&apos; does not support creating new directories</source>
- <translation>Протокол &quot;%1&quot; не поддерживает создание каталогов</translation>
+ <translation>Протокол «%1» не поддерживает создание каталогов</translation>
</message>
<message>
<source>The protocol `%1&apos; does not support removing files or directories</source>
- <translation>Протокол &quot;%1&quot; не поддерживает удаление файлов или каталогов</translation>
+ <translation>Протокол «%1» не поддерживает удаление файлов или каталогов</translation>
</message>
<message>
<source>The protocol `%1&apos; does not support renaming files or directories</source>
- <translation>Протокол &quot;%1&quot; не поддерживает переименование файлов или каталогов</translation>
+ <translation>Протокол «%1» не поддерживает переименование файлов или каталогов</translation>
</message>
<message>
<source>The protocol `%1&apos; does not support getting files</source>
- <translation>Протокол &quot;%1&quot; не поддерживает доставку файлов</translation>
+ <translation>Протокол «%1» не поддерживает передачу файлов</translation>
</message>
<message>
<source>The protocol `%1&apos; does not support putting files</source>
- <translation>Протокол &quot;%1&quot; не поддерживает отправку файлов</translation>
+ <translation>Протокол «%1» не поддерживает отправку файлов</translation>
</message>
<message>
<source>The protocol `%1&apos; does not support copying or moving files or directories</source>
- <translation>Протокол &quot;%1&quot; не поддерживает копирование или перемещение файлов или каталогов</translation>
+ <translation>Протокол «%1» не поддерживает копирование или перемещение файлов или каталогов</translation>
</message>
<message>
<source>(unknown)</source>
@@ -1066,7 +1070,7 @@ to
<name>QApplication</name>
<message>
<source>Executable &apos;%1&apos; requires Qt %2, found Qt %3.</source>
- <translation>Программный модуль &quot;%1&quot; требует Qt %2, найдена версия %3.</translation>
+ <translation>Программный модуль «%1» требует Qt %2, найдена версия %3.</translation>
</message>
<message>
<source>Incompatible Qt Library Error</source>
@@ -1219,6 +1223,11 @@ to
<translation>%1: недостаточно ресурсов</translation>
</message>
<message>
+ <source>%1: permission denied</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: доступ запрещён</translation>
+ </message>
+ <message>
<source>%1: unknown error %2</source>
<comment>QSystemSemaphore</comment>
<translation>%1: неизвестная ошибка %2</translation>
@@ -1293,11 +1302,11 @@ to
<name>QDeclarativeAbstractAnimation</name>
<message>
<source>Cannot animate non-existent property &quot;%1&quot;</source>
- <translation>Невозможно анимировать несуществуещее свойство &quot;%1&quot;</translation>
+ <translation>Невозможно анимировать несуществуещее свойство «%1»</translation>
</message>
<message>
<source>Cannot animate read-only property &quot;%1&quot;</source>
- <translation>Невозможно анимировать свойство только для чтения &quot;%1&quot;</translation>
+ <translation>Невозможно анимировать свойство только для чтения «%1»</translation>
</message>
<message>
<source>Animation is an abstract class</source>
@@ -1315,51 +1324,51 @@ to
<name>QDeclarativeAnchors</name>
<message>
<source>Possible anchor loop detected on fill.</source>
- <translation type="unfinished">Обнаружена возможная цикличная привязка на fill.</translation>
+ <translation>Обнаружена возможная цикличная привязка на fill.</translation>
</message>
<message>
<source>Possible anchor loop detected on centerIn.</source>
- <translation type="unfinished">Обнаружена возможная цикличная привязка на centerIn.</translation>
+ <translation>Обнаружена возможная цикличная привязка на centerIn.</translation>
</message>
<message>
<source>Cannot anchor to an item that isn&apos;t a parent or sibling.</source>
- <translation type="unfinished">Невозможно установить привязку к элементу, не являющемуся родителем или соседом.</translation>
+ <translation>Невозможно установить привязку к элементу, не являющемуся родителем или соседом.</translation>
</message>
<message>
<source>Possible anchor loop detected on vertical anchor.</source>
- <translation type="unfinished">Обнаружена возможная цикличная привязка к вертикальной привязке.</translation>
+ <translation>Обнаружена возможная цикличная привязка к вертикальной привязке.</translation>
</message>
<message>
<source>Possible anchor loop detected on horizontal anchor.</source>
- <translation type="unfinished">Обнаружена возможная цикличная привязка к горизонтальной привязке.</translation>
+ <translation>Обнаружена возможная цикличная привязка к горизонтальной привязке.</translation>
</message>
<message>
<source>Cannot specify left, right, and hcenter anchors.</source>
- <translation type="unfinished">Невозможно задать левую, правую и среднюю привязки.</translation>
+ <translation>Невозможно задать левую, правую и среднюю привязки.</translation>
</message>
<message>
<source>Cannot anchor to a null item.</source>
- <translation type="unfinished">Невозможно привязаться к нулевому элементу.</translation>
+ <translation>Невозможно привязаться к нулевому элементу.</translation>
</message>
<message>
<source>Cannot anchor a horizontal edge to a vertical edge.</source>
- <translation type="unfinished">Невозможно привязать горизонтальный край к вертикальному.</translation>
+ <translation>Невозможно привязать горизонтальный край к вертикальному.</translation>
</message>
<message>
<source>Cannot anchor item to self.</source>
- <translation type="unfinished">Невозможно привязать элемент к самому себе.</translation>
+ <translation>Невозможно привязать элемент к самому себе.</translation>
</message>
<message>
<source>Cannot specify top, bottom, and vcenter anchors.</source>
- <translation type="unfinished">Невозможно задать верхнюю, нижнюю и среднюю привязки.</translation>
+ <translation>Невозможно задать верхнюю, нижнюю и среднюю привязки.</translation>
</message>
<message>
<source>Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.</source>
- <translation type="unfinished">Невозможно использовать базовую привязку вместе с верхней, нижней и центральной по вертикали.</translation>
+ <translation>Невозможно использовать базовую привязку вместе с верхней, нижней и центральной по вертикали.</translation>
</message>
<message>
<source>Cannot anchor a vertical edge to a horizontal edge.</source>
- <translation type="unfinished">Невозможно привязать вертикальный край к горизонтальному.</translation>
+ <translation>Невозможно привязать вертикальный край к горизонтальному.</translation>
</message>
</context>
<context>
@@ -1370,31 +1379,38 @@ to
</message>
</context>
<context>
+ <name>QDeclarativeApplication</name>
+ <message>
+ <source>Application is an abstract class</source>
+ <translation>Класс Application - абстрактный</translation>
+ </message>
+</context>
+<context>
<name>QDeclarativeBehavior</name>
<message>
<source>Cannot change the animation assigned to a Behavior.</source>
- <translation type="unfinished">Невозможно изменить анимацию, назначенную поведению.</translation>
+ <translation>Невозможно изменить анимацию, назначенную поведению.</translation>
</message>
</context>
<context>
<name>QDeclarativeBinding</name>
<message>
<source>Binding loop detected for property &quot;%1&quot;</source>
- <translation type="unfinished">Обнаружено зацикливание привязки для свойства &quot;%1&quot;</translation>
+ <translation>Обнаружено зацикливание привязки для свойства «%1»</translation>
</message>
</context>
<context>
<name>QDeclarativeCompiledBindings</name>
<message>
<source>Binding loop detected for property &quot;%1&quot;</source>
- <translation type="unfinished">Обнаружена цикличная привязка для свойства &quot;%1&quot;</translation>
+ <translation>Обнаружена цикличная привязка для свойства «%1»</translation>
</message>
</context>
<context>
<name>QDeclarativeCompiler</name>
<message>
<source>Invalid property assignment: &quot;%1&quot; is a read-only property</source>
- <translation>Некорректное присваивание свойства: &quot;%1&quot; свойство только для чтения</translation>
+ <translation>Некорректное присваивание свойства: «%1» свойство только для чтения</translation>
</message>
<message>
<source>Invalid property assignment: unknown enumeration</source>
@@ -1402,19 +1418,19 @@ to
</message>
<message>
<source>Invalid property assignment: string expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;string&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «string»</translation>
</message>
<message>
<source>Invalid property assignment: url expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;url&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «url»</translation>
</message>
<message>
<source>Invalid property assignment: unsigned int expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;unsigned int&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «unsigned int»</translation>
</message>
<message>
<source>Invalid property assignment: int expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;int&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «int»</translation>
</message>
<message>
<source>Invalid property assignment: number expected</source>
@@ -1422,31 +1438,31 @@ to
</message>
<message>
<source>Invalid property assignment: color expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;color&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «color»</translation>
</message>
<message>
<source>Invalid property assignment: date expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;date&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «date»</translation>
</message>
<message>
<source>Invalid property assignment: time expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;time&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «time»</translation>
</message>
<message>
<source>Invalid property assignment: datetime expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;datetime&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «datetime»</translation>
</message>
<message>
<source>Invalid property assignment: point expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;point&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «point»</translation>
</message>
<message>
<source>Invalid property assignment: size expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;size&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «size»</translation>
</message>
<message>
<source>Invalid property assignment: rect expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;rect&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «rect»</translation>
</message>
<message>
<source>Invalid property assignment: boolean expected</source>
@@ -1454,11 +1470,11 @@ to
</message>
<message>
<source>Invalid property assignment: 3D vector expected</source>
- <translation>Некорректное присваивание свойства: ожидается значение типа &quot;трёхмерный вектор&quot;</translation>
+ <translation>Некорректное присваивание свойства: ожидается значение типа «трёхмерный вектор»</translation>
</message>
<message>
<source>Invalid property assignment: unsupported type &quot;%1&quot;</source>
- <translation>Некорректное присваивание свойства: неподдерживаемый тип &quot;%1&quot;</translation>
+ <translation>Некорректное присваивание свойства: неподдерживаемый тип «%1»</translation>
</message>
<message>
<source>Element is not creatable.</source>
@@ -1466,11 +1482,11 @@ to
</message>
<message>
<source>Component elements may not contain properties other than id</source>
- <translation type="unfinished">Элементы Component не могут содержать свойств кроме id</translation>
+ <translation>Элементы Component не могут содержать свойств кроме id</translation>
</message>
<message>
<source>Invalid component id specification</source>
- <translation type="unfinished">Некорректная спецификация id компонента</translation>
+ <translation>Некорректная спецификация id компонента</translation>
</message>
<message>
<source>id is not unique</source>
@@ -1478,60 +1494,68 @@ to
</message>
<message>
<source>Invalid component body specification</source>
- <translation type="unfinished">Некорректная спецификация тела компонента</translation>
+ <translation>Некорректная спецификация тела компонента</translation>
</message>
<message>
<source>Component objects cannot declare new properties.</source>
- <translation type="unfinished">Объекты Component не могут объявлять новые свойства.</translation>
+ <translation>Объекты Component не могут объявлять новые свойства.</translation>
</message>
<message>
<source>Component objects cannot declare new signals.</source>
- <translation type="unfinished">Объекты Component не могут объявлять новые сигналы.</translation>
+ <translation>Объекты Component не могут объявлять новые сигналы.</translation>
</message>
<message>
<source>Component objects cannot declare new functions.</source>
- <translation type="unfinished">Объекты Component не могут объявлять новые функции.</translation>
+ <translation>Объекты Component не могут объявлять новые функции.</translation>
</message>
<message>
<source>Cannot create empty component specification</source>
- <translation type="unfinished">Невозможно создать пустую спецификацю компонента</translation>
+ <translation>Невозможно создать пустую спецификацю компонента</translation>
+ </message>
+ <message>
+ <source>&quot;%1.%2&quot; is not available in %3 %4.%5.</source>
+ <translation>«%1.%2» не доступно в %3 %4.%5.</translation>
+ </message>
+ <message>
+ <source>&quot;%1.%2&quot; is not available due to component versioning.</source>
+ <translation>«%1.%2» не доступно из-за версии компоненты.</translation>
</message>
<message>
<source>Incorrectly specified signal assignment</source>
- <translation type="unfinished">Неверно указано назначение сигнала</translation>
+ <translation>Неверно указано назначение сигнала</translation>
</message>
<message>
<source>Cannot assign a value to a signal (expecting a script to be run)</source>
- <translation type="unfinished">Невозможно назначить значение сигналу (сценарий должен быть запущен)</translation>
+ <translation>Невозможно назначить значение сигналу (сценарий должен быть запущен)</translation>
</message>
<message>
<source>Empty signal assignment</source>
- <translation type="unfinished">Пустое назначение сигнала</translation>
+ <translation>Пустое назначение сигнала</translation>
</message>
<message>
<source>Empty property assignment</source>
- <translation type="unfinished">Пустое назначение свойства</translation>
+ <translation>Пустое назначение свойства</translation>
</message>
<message>
<source>Attached properties cannot be used here</source>
<translatorcomment>здесь - в данном контексте?</translatorcomment>
- <translation type="unfinished">Прикреплённые свойства не могут быть использованы здесь</translation>
+ <translation>Прикреплённые свойства не могут быть использованы здесь</translation>
</message>
<message>
<source>Non-existent attached object</source>
- <translation type="unfinished">Несуществующий прикреплённый объект</translation>
+ <translation>Несуществующий прикреплённый объект</translation>
</message>
<message>
<source>Invalid attached object assignment</source>
- <translation type="unfinished">Некорректное назначение прикреплённого объекта</translation>
+ <translation>Некорректное назначение прикреплённого объекта</translation>
</message>
<message>
<source>Cannot assign to non-existent default property</source>
- <translation type="unfinished">Невозможно назначить несуществующему свойству по умолчанию</translation>
+ <translation>Невозможно назначить несуществующему свойству по умолчанию</translation>
</message>
<message>
<source>Cannot assign to non-existent property &quot;%1&quot;</source>
- <translation type="unfinished">Невозможно назначить несуществующему свойству &quot;%1&quot;</translation>
+ <translation>Невозможно назначить несуществующему свойству «%1»</translation>
</message>
<message>
<source>Invalid use of namespace</source>
@@ -1539,23 +1563,23 @@ to
</message>
<message>
<source>Not an attached property name</source>
- <translation type="unfinished">Не является именем привязанного свойства</translation>
+ <translation>Не является именем привязанного свойства</translation>
</message>
<message>
<source>Invalid use of id property</source>
- <translation type="unfinished">Некорректное использование свойства id</translation>
+ <translation>Некорректное использование свойства id</translation>
</message>
<message>
<source>Property has already been assigned a value</source>
- <translation type="unfinished">Свойству уже назначено значение</translation>
+ <translation>Свойству уже назначено значение</translation>
</message>
<message>
<source>Invalid grouped property access</source>
- <translation type="unfinished">Некорректный доступ к сгруппированному свойству</translation>
+ <translation>Некорректный доступ к сгруппированному свойству</translation>
</message>
<message>
<source>Cannot assign a value directly to a grouped property</source>
- <translation type="unfinished">Невозможно присвоить значение непосредственно сгруппированному свойству</translation>
+ <translation>Невозможно присвоить значение непосредственно сгруппированному свойству</translation>
</message>
<message>
<source>Invalid property use</source>
@@ -1563,55 +1587,55 @@ to
</message>
<message>
<source>Property assignment expected</source>
- <translation type="unfinished">Ожидается назначение свойства</translation>
+ <translation>Ожидается назначение свойства</translation>
</message>
<message>
<source>Single property assignment expected</source>
- <translation type="unfinished">Ожидается одиночное назначение свойства</translation>
+ <translation>Ожидается одиночное назначение свойства</translation>
</message>
<message>
<source>Unexpected object assignment</source>
- <translation type="unfinished">Неожиданное назначение объекта</translation>
+ <translation>Неожиданное назначение объекта</translation>
</message>
<message>
<source>Cannot assign object to list</source>
- <translation type="unfinished">Невозможно назначить объект списку</translation>
+ <translation>Невозможно назначить объект списку</translation>
</message>
<message>
<source>Can only assign one binding to lists</source>
- <translation type="unfinished">Можно назначить только одну связь для списка</translation>
+ <translation>Можно назначить только одну связь для списка</translation>
</message>
<message>
<source>Cannot assign primitives to lists</source>
- <translation type="unfinished">Невозможно назначить примитивы списку</translation>
+ <translation>Невозможно назначить примитивы списку</translation>
</message>
<message>
<source>Cannot assign multiple values to a script property</source>
- <translation type="unfinished">Невозможно назначить множественное значение свойству сценария</translation>
+ <translation>Невозможно назначить множественное значение свойству сценария</translation>
</message>
<message>
<source>Invalid property assignment: script expected</source>
- <translation type="unfinished">Некорректное присваивание свойства: ожидается сценарий</translation>
+ <translation>Некорректное присваивание свойства: ожидается сценарий</translation>
</message>
<message>
<source>Cannot assign multiple values to a singular property</source>
- <translation type="unfinished">Невозможно присвоить множество значений свойству, принимающему только одно</translation>
+ <translation>Невозможно присвоить множество значений свойству, принимающему только одно</translation>
</message>
<message>
<source>Cannot assign object to property</source>
- <translation type="unfinished">Невозможно назначить объектсвойству</translation>
+ <translation>Невозможно назначить объектсвойству</translation>
</message>
<message>
<source>&quot;%1&quot; cannot operate on &quot;%2&quot;</source>
- <translation>&quot;%1&quot; не может воздействовать на &quot;%2&quot;</translation>
+ <translation>«%1» не может воздействовать на «%2»</translation>
</message>
<message>
<source>Duplicate default property</source>
- <translation type="unfinished">Дублирование свойства по умолчанию</translation>
+ <translation>Дублирование свойства по умолчанию</translation>
</message>
<message>
<source>Duplicate property name</source>
- <translation type="unfinished">Дублирование названия свойства</translation>
+ <translation>Дублирование названия свойства</translation>
</message>
<message>
<source>Property names cannot begin with an upper case letter</source>
@@ -1623,7 +1647,7 @@ to
</message>
<message>
<source>Duplicate signal name</source>
- <translation type="unfinished">Дублирование названия сигнала</translation>
+ <translation>Дублирование названия сигнала</translation>
</message>
<message>
<source>Signal names cannot begin with an upper case letter</source>
@@ -1635,7 +1659,7 @@ to
</message>
<message>
<source>Duplicate method name</source>
- <translation type="unfinished">Дублирование название метода</translation>
+ <translation>Дублирование название метода</translation>
</message>
<message>
<source>Method names cannot begin with an upper case letter</source>
@@ -1647,11 +1671,11 @@ to
</message>
<message>
<source>Property value set multiple times</source>
- <translation type="unfinished">Значение свойства задано несколько раз</translation>
+ <translation>Значение свойства задано несколько раз</translation>
</message>
<message>
<source>Invalid property nesting</source>
- <translation type="unfinished">Некорректное вложенность свойств</translation>
+ <translation>Некорректное вложенность свойств</translation>
</message>
<message>
<source>Cannot override FINAL property</source>
@@ -1679,23 +1703,23 @@ to
</message>
<message>
<source>ID illegally masks global JavaScript property</source>
- <translation type="unfinished">Идентификатор неверно маскирует глобальное свойство JavaScript</translation>
+ <translation>Идентификатор неверно маскирует глобальное свойство JavaScript</translation>
</message>
<message>
<source>No property alias location</source>
- <translation type="unfinished">Отсутствует размещение псевдонима свойства</translation>
+ <translation>Отсутствует размещение псевдонима свойства</translation>
</message>
<message>
<source>Invalid alias location</source>
- <translation type="unfinished">Некорректное размещение псевдонима</translation>
+ <translation>Некорректное размещение псевдонима</translation>
</message>
<message>
<source>Invalid alias reference. An alias reference must be specified as &lt;id&gt;, &lt;id&gt;.&lt;property&gt; or &lt;id&gt;.&lt;value property&gt;.&lt;property&gt;</source>
- <translation type="unfinished">Некорректная ссылка на псевдоним. Ссылка на псевдоним должна быть указана, как &lt;id&gt;, &lt;id&gt;.&lt;свойство&gt; или &lt;id&gt;.&lt;свойство значения&gt;.&lt;свойство&gt;</translation>
+ <translation>Некорректная ссылка на псевдоним. Ссылка на псевдоним должна быть указана, как &lt;id&gt;, &lt;id&gt;.&lt;свойство&gt; или &lt;id&gt;.&lt;свойство значения&gt;.&lt;свойство&gt;</translation>
</message>
<message>
<source>Alias property exceeds alias bounds</source>
- <translation type="unfinished">Свойство псевдонима выходит за границы</translation>
+ <translation>Свойство псевдонима выходит за границы</translation>
</message>
<message>
<source>Invalid alias reference. An alias reference must be specified as &lt;id&gt; or &lt;id&gt;.&lt;property&gt;</source>
@@ -1703,7 +1727,7 @@ to
</message>
<message>
<source>Invalid alias reference. Unable to find id &quot;%1&quot;</source>
- <translation type="unfinished">Некорректная ссылка на псевдоним. Не удалось найти id &quot;%1&quot;</translation>
+ <translation>Некорректная ссылка на псевдоним. Не удалось найти id «%1»</translation>
</message>
</context>
<context>
@@ -1712,12 +1736,16 @@ to
<source>Invalid empty URL</source>
<translation>Пустой адрес URL</translation>
</message>
+ <message>
+ <source>createObject: value is not an object</source>
+ <translation>createObject: значение не является объектом</translation>
+ </message>
</context>
<context>
<name>QDeclarativeConnections</name>
<message>
<source>Cannot assign to non-existent property &quot;%1&quot;</source>
- <translation>Невозможно назначить несуществующему свойству &quot;%1&quot;</translation>
+ <translation>Невозможно назначить несуществующему свойству «%1»</translation>
</message>
<message>
<source>Connections: nested objects not allowed</source>
@@ -1774,35 +1802,35 @@ to
<name>QDeclarativeImportDatabase</name>
<message>
<source>cannot load module &quot;%1&quot;: File name case mismatch for &quot;%2&quot;</source>
- <translation type="unfinished">невозможно загрузить модуль &quot;%1&quot;: Регистр имени файла не соответствует &quot;%2&quot;</translation>
+ <translation>невозможно загрузить модуль «%1»: Регистр имени файла не соответствует «%2»</translation>
</message>
<message>
<source>module &quot;%1&quot; definition &quot;%2&quot; not readable</source>
- <translation type="unfinished">невозможно прочитать определение &quot;%2&quot; модуля &quot;%1&quot;</translation>
+ <translation>невозможно прочитать определение «%2» модуля «%1»</translation>
</message>
<message>
<source>plugin cannot be loaded for module &quot;%1&quot;: %2</source>
- <translation type="unfinished">модуль не может быть загружен для подмодуля &quot;%1&quot;: %2</translation>
+ <translation>не удалось загрузить плагин для модуля «%1»: %2</translation>
</message>
<message>
<source>module &quot;%1&quot; plugin &quot;%2&quot; not found</source>
- <translation type="unfinished">подмодуль &quot;%1&quot; модуля &quot;%2&quot; не найден</translation>
+ <translation>модуль «%1» плагина «%2» не найден</translation>
</message>
<message>
<source>module &quot;%1&quot; version %2.%3 is not installed</source>
- <translation>модуль &quot;%1&quot; версии %2.%3 не установлен</translation>
+ <translation>модуль «%1» версии %2.%3 не установлен</translation>
</message>
<message>
<source>module &quot;%1&quot; is not installed</source>
- <translation>модуль &quot;%1&quot; не установлен</translation>
+ <translation>модуль «%1» не установлен</translation>
</message>
<message>
<source>&quot;%1&quot;: no such directory</source>
- <translation>&quot;%1&quot;: каталог не существует</translation>
+ <translation>«%1»: каталог не существует</translation>
</message>
<message>
<source>import &quot;%1&quot; has no qmldir and no namespace</source>
- <translation type="unfinished">каталог &quot;%1&quot; не содержит ни qmldir, ни namespace</translation>
+ <translation>каталог «%1» не содержит ни qmldir, ни namespace</translation>
</message>
<message>
<source>- %1 is not a namespace</source>
@@ -1834,21 +1862,32 @@ to
</message>
<message>
<source>File name case mismatch for &quot;%2&quot;</source>
- <translation type="unfinished">Регистр имени файла не соответствует &quot;%2&quot;</translation>
+ <translation>Регистр имени файла не соответствует «%2»</translation>
</message>
</context>
<context>
<name>QDeclarativeKeyNavigationAttached</name>
<message>
<source>KeyNavigation is only available via attached properties</source>
- <translation type="unfinished">KeyNavigation доступна только через прикреплённые свойства</translation>
+ <translation>KeyNavigation доступна только через прикреплённые свойства</translation>
</message>
</context>
<context>
<name>QDeclarativeKeysAttached</name>
<message>
<source>Keys is only available via attached properties</source>
- <translation type="unfinished">Keys доступны только через прикреплённые свойства</translation>
+ <translation>Keys доступны только через прикреплённые свойства</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeLayoutMirroringAttached</name>
+ <message>
+ <source>LayoutDirection attached property only works with Items</source>
+ <translation>Подключённое свойство LayoutDirection работает только с элементами</translation>
+ </message>
+ <message>
+ <source>LayoutMirroring is only available via attached properties</source>
+ <translation>LayoutMirroring доступно только через подключаемые свойства</translation>
</message>
</context>
<context>
@@ -1887,7 +1926,7 @@ to
</message>
<message>
<source>ListElement: cannot use reserved &quot;id&quot; property</source>
- <translation>ListElement: невозможно использовать зарезервированное свойство &quot;id&quot;</translation>
+ <translation>ListElement: невозможно использовать зарезервированное свойство «id»</translation>
</message>
<message>
<source>ListElement: cannot use script for property value</source>
@@ -1895,7 +1934,7 @@ to
</message>
<message>
<source>ListModel: undefined property &apos;%1&apos;</source>
- <translation>ListModel: неопределённое свойство &quot;%1&quot;</translation>
+ <translation>ListModel: неопределённое свойство «%1»</translation>
</message>
</context>
<context>
@@ -1971,7 +2010,7 @@ to
</message>
<message>
<source>Invalid regular expression flag &apos;%0&apos;</source>
- <translation>Некорректный флаг &quot;%0&quot; в регулярном выражении</translation>
+ <translation>Некорректный флаг «%0» в регулярном выражении</translation>
</message>
<message>
<source>Unterminated regular expression backslash sequence</source>
@@ -1987,15 +2026,15 @@ to
</message>
<message>
<source>Unexpected token `%1&apos;</source>
- <translation>Неожиданный символ &quot;%1&quot;</translation>
+ <translation>Неожиданный символ «%1»</translation>
</message>
<message>
<source>Expected token `%1&apos;</source>
- <translation>Ожидается символ &quot;%1&quot;</translation>
+ <translation>Ожидается символ «%1»</translation>
</message>
<message>
<source>Property value set multiple times</source>
- <translation type="unfinished">Значение свойства установлено несколько раз</translation>
+ <translation>Значение свойства установлено несколько раз</translation>
</message>
<message>
<source>Expected type name</source>
@@ -2003,11 +2042,11 @@ to
</message>
<message>
<source>Invalid import qualifier ID</source>
- <translation type="unfinished">Некорректный ID спецификатора импорта</translation>
+ <translation>Некорректный ID спецификатора импорта</translation>
</message>
<message>
<source>Reserved name &quot;Qt&quot; cannot be used as an qualifier</source>
- <translation>Зарезервированное имя &quot;Qt&quot; не может быть использовано в качестве спецификатора</translation>
+ <translation>Зарезервированное имя «Qt» не может быть использовано в качестве спецификатора</translation>
</message>
<message>
<source>Script import qualifiers must be unique.</source>
@@ -2019,7 +2058,7 @@ to
</message>
<message>
<source>Library import requires a version</source>
- <translation type="unfinished">Импорт библиотеки требует версию</translation>
+ <translation>Импорт библиотеки требует версию</translation>
</message>
<message>
<source>Expected parameter type</source>
@@ -2039,7 +2078,7 @@ to
</message>
<message>
<source>Readonly not yet supported</source>
- <translation type="unfinished">Readonly ещё не поддерживается</translation>
+ <translation>Readonly ещё не поддерживается</translation>
</message>
<message>
<source>JavaScript declaration outside Script element</source>
@@ -2079,26 +2118,26 @@ to
<name>QDeclarativePropertyChanges</name>
<message>
<source>PropertyChanges does not support creating state-specific objects.</source>
- <translation type="unfinished">PropertyChanges не поддерживают создание объектов, зависимых от состояния.</translation>
+ <translation>PropertyChanges не поддерживают создание объектов, зависимых от состояния.</translation>
</message>
<message>
<source>Cannot assign to non-existent property &quot;%1&quot;</source>
- <translation type="unfinished">Невозможно назначить несуществующему свойству &quot;%1&quot;</translation>
+ <translation>Невозможно назначить несуществующему свойству «%1»</translation>
</message>
<message>
<source>Cannot assign to read-only property &quot;%1&quot;</source>
- <translation type="unfinished">Невозможно назначить свойству только для чтения &quot;%1&quot;</translation>
+ <translation>Невозможно назначить свойству только для чтения «%1»</translation>
</message>
</context>
<context>
<name>QDeclarativeTextInput</name>
<message>
<source>Could not load cursor delegate</source>
- <translation type="unfinished">Не удалось загрузить делегат курсора</translation>
+ <translation>Не удалось загрузить делегат курсора</translation>
</message>
<message>
<source>Could not instantiate cursor delegate</source>
- <translation type="unfinished">Не удалось инстанциировать делегат курсора</translation>
+ <translation>Не удалось инстанциировать делегат курсора</translation>
</message>
</context>
<context>
@@ -2109,11 +2148,11 @@ to
</message>
<message>
<source>Type %1 unavailable</source>
- <translation>Тип &quot;%1&quot; недоступен</translation>
+ <translation>Тип «%1» недоступен</translation>
</message>
<message>
<source>Namespace %1 cannot be used as a type</source>
- <translation>Пространство имён &quot;%1&quot; не может быть использовано в качестве типа</translation>
+ <translation>Пространство имён «%1» не может быть использовано в качестве типа</translation>
</message>
<message>
<source>%1 %2</source>
@@ -2124,46 +2163,46 @@ to
<name>QDeclarativeVME</name>
<message>
<source>Unable to create object of type %1</source>
- <translation>Невозможно создать объект типа &quot;%1&quot;</translation>
+ <translation>Невозможно создать объект типа «%1»</translation>
</message>
<message>
<source>Cannot assign value %1 to property %2</source>
- <translation>Невозможно установить значение &quot;%1&quot; свойству &quot;%2&quot;</translation>
+ <translation>Невозможно присвоить значение «%1» свойству «%2»</translation>
</message>
<message>
<source>Cannot assign object type %1 with no default method</source>
- <translation type="unfinished">Невозможно назначить объект типа %1 без метода по умолчанию</translation>
+ <translation>Невозможно присвоить объект типа «%1» без метода по умолчанию</translation>
</message>
<message>
<source>Cannot connect mismatched signal/slot %1 %vs. %2</source>
- <translation type="unfinished">Невозможно подключить отсутствующий сигнал/слот %1 к %2</translation>
+ <translation>Невозможно подключить отсутствующий сигнал/слот %1 к %2</translation>
</message>
<message>
<source>Cannot assign an object to signal property %1</source>
- <translation type="unfinished">Невозможно назначить объект к свойству сигнала %1</translation>
+ <translation>Невозможно назначить объект к свойству сигнала %1</translation>
</message>
<message>
<source>Cannot assign object to list</source>
- <translation type="unfinished">Невозможно назначить объект списку</translation>
+ <translation>Невозможно назначить объект списку</translation>
</message>
<message>
<source>Cannot assign object to interface property</source>
- <translation type="unfinished">Невозможно назначить объект свойству интерфейса</translation>
+ <translation>Невозможно назначить объект свойству интерфейса</translation>
</message>
<message>
<source>Unable to create attached object</source>
- <translation type="unfinished">Не удалось создать вложенный объект</translation>
+ <translation>Не удалось создать вложенный объект</translation>
</message>
<message>
<source>Cannot set properties on %1 as it is null</source>
- <translation type="unfinished">Невозможно установить свойства для %1, так как он нулевой</translation>
+ <translation>Невозможно установить свойства для %1, так как он нулевой</translation>
</message>
</context>
<context>
<name>QDeclarativeVisualDataModel</name>
<message>
<source>Delegate component must be Item type.</source>
- <translation type="unfinished">Компинент делегата должен быть типа Item.</translation>
+ <translation>Компонента делегата должен быть типа Item.</translation>
</message>
</context>
<context>
@@ -2177,14 +2216,14 @@ to
<name>QDeclarativeXmlListModelRole</name>
<message>
<source>An XmlRole query must not start with &apos;/&apos;</source>
- <translation type="unfinished">Запрос XmlRole не должен начинаться с &apos;/&apos;</translation>
+ <translation>Запрос XmlRole не должен начинаться с «/»</translation>
</message>
</context>
<context>
<name>QDeclarativeXmlRoleList</name>
<message>
<source>An XmlListModel query must start with &apos;/&apos; or &quot;//&quot;</source>
- <translation type="unfinished">Запрос XmlListModel должен начинаться с &apos;/&apos; или &quot;//&quot;</translation>
+ <translation>Запрос XmlListModel должен начинаться с «/» или «//»</translation>
</message>
</context>
<context>
@@ -2345,11 +2384,11 @@ to
</message>
<message>
<source>Dock</source>
- <translation type="unfinished">Прикрепить</translation>
+ <translation>Прикрепить</translation>
</message>
<message>
<source>Float</source>
- <translation type="unfinished">Открепить</translation>
+ <translation>Открепить</translation>
</message>
</context>
<context>
@@ -2478,7 +2517,7 @@ to
<message>
<source>&apos;%1&apos; is write protected.
Do you want to delete it anyway?</source>
- <translation>&quot;%1&quot; защищён от записи.
+ <translation>«%1» защищён от записи.
Действительно желаете удалить?</translation>
</message>
<message>
@@ -2553,7 +2592,7 @@ Please verify the correct directory name was given.</source>
</message>
<message>
<source>Are sure you want to delete &apos;%1&apos;?</source>
- <translation>Вы действительно хотите удалить &quot;%1&quot;?</translation>
+ <translation>Вы действительно хотите удалить «%1»?</translation>
</message>
<message>
<source>Could not delete directory.</source>
@@ -2652,7 +2691,7 @@ Please verify the correct directory name was given.</source>
</message>
<message>
<source>&lt;b&gt;The name &quot;%1&quot; can not be used.&lt;/b&gt;&lt;p&gt;Try using another name, with fewer characters or no punctuations marks.</source>
- <translation>&lt;b&gt;Имя &quot;%1&quot; не может быть использовано.&lt;/b&gt;&lt;p&gt;Попробуйте использовать имя меньшей длины и/или без символов пунктуации.</translation>
+ <translation>&lt;b&gt;Имя «%1» не может быть использовано.&lt;/b&gt;&lt;p&gt;Попробуйте использовать имя меньшей длины и/или без символов пунктуации.</translation>
</message>
<message>
<source>Name</source>
@@ -3339,15 +3378,15 @@ Please verify the correct directory name was given.</source>
<name>QLibrary</name>
<message>
<source>Plugin verification data mismatch in &apos;%1&apos;</source>
- <translation>Проверочная информация для модуля &quot;%1&quot; не совпадает</translation>
+ <translation>Проверочная информация для модуля «%1» не совпадает</translation>
</message>
<message>
<source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
- <translation>Модуль &quot;%1&quot; использует несоместимую библиотеку Qt. (%2.%3.%4) [%5]</translation>
+ <translation>Модуль «%1» использует несоместимую библиотеку Qt. (%2.%3.%4) [%5]</translation>
</message>
<message>
<source>The plugin &apos;%1&apos; uses incompatible Qt library. Expected build key &quot;%2&quot;, got &quot;%3&quot;</source>
- <translation>Модуль &quot;%1&quot; использует несоместимую библиотеку Qt. Ожидается ключ &quot;%2&quot;, но получен ключ &quot;%3&quot;</translation>
+ <translation>Модуль «%1» использует несоместимую библиотеку Qt. Ожидается ключ «%2», но получен ключ «%3»</translation>
</message>
<message>
<source>Unknown error</source>
@@ -3359,11 +3398,11 @@ Please verify the correct directory name was given.</source>
</message>
<message>
<source>The file &apos;%1&apos; is not a valid Qt plugin.</source>
- <translation>Файл &quot;%1&quot; - не является корректным модулем Qt.</translation>
+ <translation>Файл «%1» - не является корректным модулем Qt.</translation>
</message>
<message>
<source>The plugin &apos;%1&apos; uses incompatible Qt library. (Cannot mix debug and release libraries.)</source>
- <translation>Модуль &quot;%1&quot; использует несоместимую библиотеку Qt. (Невозможно совместить релизные и отладочные библиотеки.)</translation>
+ <translation>Модуль «%1» использует несоместимую библиотеку Qt. (Невозможно совместить релизные и отладочные библиотеки.)</translation>
</message>
<message>
<source>Cannot load library %1: %2</source>
@@ -3375,7 +3414,7 @@ Please verify the correct directory name was given.</source>
</message>
<message>
<source>Cannot resolve symbol &quot;%1&quot; in %2: %3</source>
- <translation>Невозможно разрешить символ &quot;%1&quot; в %2: %3</translation>
+ <translation>Невозможно разрешить символ «%1» в %2: %3</translation>
</message>
</context>
<context>
@@ -3906,7 +3945,7 @@ Please verify the correct directory name was given.</source>
</message>
<message>
<source>Protocol &quot;%1&quot; is unknown</source>
- <translation>Неизвестный протокол &quot;%1&quot;</translation>
+ <translation>Неизвестный протокол «%1»</translation>
</message>
<message>
<source>Network session error.</source>
@@ -3936,7 +3975,7 @@ Please verify the correct directory name was given.</source>
<message>
<source>Roaming error</source>
<translatorcomment>или перемещения?</translatorcomment>
- <translation type="unfinished">Ошибка роуминга</translation>
+ <translation>Ошибка роуминга</translation>
</message>
<message>
<source>Session aborted by user or system</source>
@@ -3964,7 +4003,7 @@ Please verify the correct directory name was given.</source>
</message>
<message>
<source>Roaming was aborted or is not possible.</source>
- <translation type="unfinished">Роуминг прерван или невозможен.</translation>
+ <translation>Роуминг прерван или невозможен.</translation>
</message>
</context>
<context>
@@ -4057,7 +4096,7 @@ Please verify the correct directory name was given.</source>
<name>QODBCResult</name>
<message>
<source>QODBCResult::reset: Unable to set &apos;SQL_CURSOR_STATIC&apos; as statement attribute. Please check your ODBC driver configuration</source>
- <translation>QODBCResult::reset: Невозможно установить &quot;SQL_CURSOR_STATIC&quot; атрибутом выражение. Проверьте настройки драйвера ODBC</translation>
+ <translation>QODBCResult::reset: Невозможно установить «SQL_CURSOR_STATIC» атрибутом выражение. Проверьте настройки драйвера ODBC</translation>
</message>
<message>
<source>Unable to execute statement</source>
@@ -4096,11 +4135,11 @@ Please verify the correct directory name was given.</source>
<name>QObject</name>
<message>
<source>&quot;%1&quot; duplicates a previous role name and will be disabled.</source>
- <translation>&quot;%1&quot; повторяет имя предыдущей роли и не будет использовано.</translation>
+ <translation>«%1» повторяет имя предыдущей роли и не будет использовано.</translation>
</message>
<message>
<source>invalid query: &quot;%1&quot;</source>
- <translation>Некорректный запрос: &quot;%1&quot;</translation>
+ <translation>Некорректный запрос: «%1»</translation>
</message>
<message>
<source>PulseAudio Sound Server</source>
@@ -4440,7 +4479,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>The &apos;From&apos; value cannot be greater than the &apos;To&apos; value.</source>
- <translation>Значение &quot;с&quot; не может быть больше значения &quot;по&quot;.</translation>
+ <translation>Значение «с» не может быть больше значения «по».</translation>
</message>
<message>
<source>A0</source>
@@ -6187,15 +6226,15 @@ Please choose a different file name.</source>
</message>
<message>
<source>Code input</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Ввод кода</translation>
</message>
<message>
<source>Multiple Candidate</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Несколько вариантов</translation>
</message>
<message>
<source>Previous Candidate</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Предыдущий вариант</translation>
</message>
<message>
<source>Hangul</source>
@@ -6285,23 +6324,23 @@ Please choose a different file name.</source>
</message>
<message>
<source>Ctrl</source>
- <translation type="unfinished">Ctrl</translation>
+ <translation></translation>
</message>
<message>
<source>Shift</source>
- <translation type="unfinished">Shift</translation>
+ <translation></translation>
</message>
<message>
<source>Alt</source>
- <translation type="unfinished">Alt</translation>
+ <translation></translation>
</message>
<message>
<source>Meta</source>
- <translation type="unfinished">Meta</translation>
+ <translation></translation>
</message>
<message>
<source>+</source>
- <translation type="unfinished">+</translation>
+ <translation></translation>
</message>
<message>
<source>F%1</source>
@@ -6514,6 +6553,10 @@ Please choose a different file name.</source>
<translation>Ошибка создания сессии SSL: %1</translation>
</message>
<message>
+ <source>The peer certificate is blacklisted</source>
+ <translation>Сертификат узла в чёрном списке</translation>
+ </message>
+ <message>
<source>Cannot provide a certificate with no key, %1</source>
<translation>Невозможно предоставить сертификат без ключа, %1</translation>
</message>
@@ -6622,15 +6665,15 @@ Please choose a different file name.</source>
<name>QStateMachine</name>
<message>
<source>Missing initial state in compound state &apos;%1&apos;</source>
- <translation>Отсутствует исходное состояние в составном состоянии &quot;%1&quot;</translation>
+ <translation>Отсутствует исходное состояние в составном состоянии «%1»</translation>
</message>
<message>
<source>Missing default state in history state &apos;%1&apos;</source>
- <translation>Отсутствует состояние по умолчанию в историческом состоянии &quot;%1&quot;</translation>
+ <translation>Отсутствует состояние по умолчанию в историческом состоянии «%1»</translation>
</message>
<message>
<source>No common ancestor for targets and source of transition from state &apos;%1&apos;</source>
- <translation>Нет общего предка у источника и цели перехода из состояния &quot;%1&quot;</translation>
+ <translation>Нет общего предка у источника и цели перехода из состояния «%1»</translation>
</message>
<message>
<source>Unknown error</source>
@@ -7122,7 +7165,7 @@ Please choose a different file name.</source>
<message>
<source>Choose File</source>
<comment>title for file button used in HTML forms</comment>
- <translation>Обзор...</translation>
+ <translation>Выбрать файл</translation>
</message>
<message>
<source>No file selected</source>
@@ -7202,13 +7245,13 @@ Please choose a different file name.</source>
<message>
<source>No Guesses Found</source>
<comment>No Guesses Found context menu item</comment>
- <translation type="unfinished">Совпадений не найдено</translation>
+ <translation>Совпадений не найдено</translation>
</message>
<message>
<source>Ignore</source>
<comment>Ignore Spelling context menu item</comment>
<translatorcomment>?Пропускать</translatorcomment>
- <translation type="unfinished">Пропустить</translation>
+ <translation>Пропустить</translation>
</message>
<message>
<source>Add To Dictionary</source>
@@ -7218,12 +7261,12 @@ Please choose a different file name.</source>
<message>
<source>Search The Web</source>
<comment>Search The Web context menu item</comment>
- <translation type="unfinished">Искать в Интернет</translation>
+ <translation>Искать в Интернет</translation>
</message>
<message>
<source>Look Up In Dictionary</source>
<comment>Look Up in Dictionary context menu item</comment>
- <translation type="unfinished">Искать в словаре</translation>
+ <translation>Искать в словаре</translation>
</message>
<message>
<source>Open Link</source>
@@ -7234,7 +7277,7 @@ Please choose a different file name.</source>
<source>Ignore</source>
<comment>Ignore Grammar context menu item</comment>
<translatorcomment>?Пропускать</translatorcomment>
- <translation type="unfinished">Пропустить</translation>
+ <translation>Пропустить</translation>
</message>
<message>
<source>Spelling</source>
@@ -7244,12 +7287,12 @@ Please choose a different file name.</source>
<message>
<source>Show Spelling and Grammar</source>
<comment>menu item title</comment>
- <translation type="unfinished">Показать панель проверки правописания</translation>
+ <translation>Показать панель проверки правописания</translation>
</message>
<message>
<source>Hide Spelling and Grammar</source>
<comment>menu item title</comment>
- <translation type="unfinished">Скрыть панель проверки правописания</translation>
+ <translation>Скрыть панель проверки правописания</translation>
</message>
<message>
<source>Check Spelling</source>
@@ -7374,22 +7417,22 @@ Please choose a different file name.</source>
<message>
<source>Mute Button</source>
<comment>Media controller element</comment>
- <translation>Кнопка &quot;Отключить звук&quot;</translation>
+ <translation>Кнопка «Отключить звук»</translation>
</message>
<message>
<source>Unmute Button</source>
<comment>Media controller element</comment>
- <translation>Кнопка &quot;Включить звук&quot;</translation>
+ <translation>Кнопка «Включить звук»</translation>
</message>
<message>
<source>Play Button</source>
<comment>Media controller element</comment>
- <translation>Кнопка &quot;Воспроизведение&quot;</translation>
+ <translation>Кнопка «Воспроизведение»</translation>
</message>
<message>
<source>Pause Button</source>
<comment>Media controller element</comment>
- <translation>Кнопка &quot;Пауза&quot;</translation>
+ <translation>Кнопка «Пауза»</translation>
</message>
<message>
<source>Slider</source>
@@ -7404,12 +7447,12 @@ Please choose a different file name.</source>
<message>
<source>Rewind Button</source>
<comment>Media controller element</comment>
- <translation>Кнопка &quot;Перемотка назад&quot;</translation>
+ <translation>Кнопка «Перемотка назад»</translation>
</message>
<message>
<source>Return to Real-time Button</source>
<comment>Media controller element</comment>
- <translation type="unfinished">Кнопка &quot;Вернуть в реальное время&quot;</translation>
+ <translation>Кнопка «Вернуть в реальное время»</translation>
</message>
<message>
<source>Elapsed Time</source>
@@ -7429,17 +7472,17 @@ Please choose a different file name.</source>
<message>
<source>Fullscreen Button</source>
<comment>Media controller element</comment>
- <translation>Кнопка &quot;На весь экран&quot;</translation>
+ <translation>Кнопка «На весь экран»</translation>
</message>
<message>
<source>Seek Forward Button</source>
<comment>Media controller element</comment>
- <translation>Кнопка &quot;Перемотка вперёд&quot;</translation>
+ <translation>Кнопка «Перемотка вперёд»</translation>
</message>
<message>
<source>Seek Back Button</source>
<comment>Media controller element</comment>
- <translation>Кнопка &quot;Перемотка назад&quot;</translation>
+ <translation>Кнопка «Перемотка назад»</translation>
</message>
<message>
<source>Audio element playback controls and status display</source>
@@ -7474,12 +7517,12 @@ Please choose a different file name.</source>
<message>
<source>Movie time scrubber</source>
<comment>Media controller element</comment>
- <translation type="unfinished">Перемотка</translation>
+ <translation>Перемотка</translation>
</message>
<message>
<source>Movie time scrubber thumb</source>
<comment>Media controller element</comment>
- <translation type="unfinished">Позиция перемотки</translation>
+ <translation>Позиция перемотки</translation>
</message>
<message>
<source>Rewind movie</source>
@@ -7489,7 +7532,7 @@ Please choose a different file name.</source>
<message>
<source>Return streaming movie to real-time</source>
<comment>Media controller element</comment>
- <translation type="unfinished">Возвращает потоковое видео к воспроизведению в реальном времени</translation>
+ <translation>Возвращает потоковое видео к воспроизведению в реальном времени</translation>
</message>
<message>
<source>Current movie time</source>
@@ -7602,7 +7645,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Commit</source>
- <translation>Передать</translation>
+ <translation>Подтвердить</translation>
</message>
<message>
<source>Done</source>
@@ -7806,11 +7849,11 @@ Please choose a different file name.</source>
</message>
<message>
<source>Sequence &apos;]]&gt;&apos; not allowed in content.</source>
- <translation>Последовательность &quot;]]&gt;&quot; недопустима в содержимом.</translation>
+ <translation>Последовательность «]]&gt;» недопустима в содержимом.</translation>
</message>
<message>
<source>Namespace prefix &apos;%1&apos; not declared</source>
- <translation>Префикс пространства имён &quot;%1&quot; не объявлен</translation>
+ <translation>Префикс пространства имён «%1» не объявлен</translation>
</message>
<message>
<source>Attribute redefined.</source>
@@ -7818,7 +7861,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Unexpected character &apos;%1&apos; in public id literal.</source>
- <translation>Неожиданный символ &quot;%1&quot; в литерале открытого идентификатора.</translation>
+ <translation>Неожиданный символ «%1» в литерале открытого идентификатора.</translation>
</message>
<message>
<source>Invalid XML version string.</source>
@@ -7838,7 +7881,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Standalone accepts only yes or no.</source>
- <translation>Псевдоатрибут &quot;standalone&quot; может принимать только значения &quot;yes&quot; или &quot;no&quot;.</translation>
+ <translation>Псевдоатрибут «standalone» может принимать только значения «yes» или «no».</translation>
</message>
<message>
<source>Invalid attribute in XML declaration.</source>
@@ -7906,15 +7949,15 @@ Please choose a different file name.</source>
</message>
<message>
<source>Reference to unparsed entity &apos;%1&apos;.</source>
- <translation>Ссылка на необработанный объект &quot;%1&quot;.</translation>
+ <translation>Ссылка на необработанный объект «%1».</translation>
</message>
<message>
<source>Entity &apos;%1&apos; not declared.</source>
- <translation>Объект &quot;%1&quot; не объявлен.</translation>
+ <translation>Объект «%1» не объявлен.</translation>
</message>
<message>
<source>Reference to external entity &apos;%1&apos; in attribute value.</source>
- <translation>Ссылка на внешний объект &quot;%1&quot; в значении атрибута.</translation>
+ <translation>Ссылка на внешний объект «%1» в значении атрибута.</translation>
</message>
<message>
<source>Invalid character reference.</source>
@@ -7926,7 +7969,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>The standalone pseudo attribute must appear after the encoding.</source>
- <translation>Псевдоатрибут &quot;standalone&quot; должен находиться после указания кодировки.</translation>
+ <translation>Псевдоатрибут «standalone» должен находиться после указания кодировки.</translation>
</message>
<message>
<source>%1 is an invalid PUBLIC identifier.</source>
@@ -7953,7 +7996,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>The data of a processing instruction cannot contain the string %1</source>
- <translation>Данные обрабатываемой инструкции не могут содержать строку &quot;%1&quot;</translation>
+ <translation>Данные обрабатываемой инструкции не могут содержать строку «%1»</translation>
</message>
<message>
<source>%1 is an invalid %2</source>
@@ -7969,11 +8012,11 @@ Please choose a different file name.</source>
</message>
<message>
<source>In the replacement string, %1 must be followed by at least one digit when not escaped.</source>
- <translation>В замещаемой строке &quot;%1&quot; должно сопровождаться как минимум одной цифрой, если неэкранировано.</translation>
+ <translation>В замещаемой строке «%1» должно сопровождаться как минимум одной цифрой, если неэкранировано.</translation>
</message>
<message>
<source>In the replacement string, %1 can only be used to escape itself or %2, not %3</source>
- <translation>В замещаемой строке символ &quot;%1&quot; может использоваться только для экранирования самого себя или &quot;%2&quot;, но не &quot;%3&quot;</translation>
+ <translation>В замещаемой строке символ «%1» может использоваться только для экранирования самого себя или «%2», но не «%3»</translation>
</message>
<message>
<source>%1 matches newline characters</source>
@@ -8165,7 +8208,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>At least one time component must appear after the %1-delimiter.</source>
- <translation>Как минимум одна компонента времени должна следовать за разделителем &apos;%1&apos;.</translation>
+ <translation>Как минимум одна компонента времени должна следовать за разделителем «%1».</translation>
</message>
<message>
<source>Dividing a value of type %1 by %2 (not-a-number) is not allowed.</source>
@@ -8289,7 +8332,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>%1 must be followed by %2 or %3, not at the end of the replacement string.</source>
- <translation>&quot;%1&quot; должно сопровождаться &quot;%2&quot; или &quot;%3&quot;, но не в конце замещаемой строки.</translation>
+ <translation>«%1» должно сопровождаться «%2» или «%3», но не в конце замещаемой строки.</translation>
</message>
<message>
<source>%1 and %2 match the start and end of a line.</source>
@@ -8689,15 +8732,15 @@ Please choose a different file name.</source>
</message>
<message>
<source>%1 has inheritance loop in its base type %2.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">У %1 зациклено наследование в его базовом типе %2.</translation>
</message>
<message>
<source>Circular inheritance of base type %1.</source>
- <translation type="unfinished"></translation>
+ <translation>Цикличное наследование базового типа %1.</translation>
</message>
<message>
<source>Circular inheritance of union %1.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Цикличное наследование базового объединения %1.</translation>
</message>
<message>
<source>%1 is not allowed to derive from %2 by restriction as the latter defines it as final.</source>
@@ -8709,19 +8752,19 @@ Please choose a different file name.</source>
</message>
<message>
<source>Base type of simple type %1 cannot be complex type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>Базовым простого типа %1 не может быть сложный %2.</translation>
</message>
<message>
<source>Simple type %1 cannot have direct base type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>У простого типа %1 %2 не может быть непосредственным базовым типом.</translation>
</message>
<message>
<source>Simple type %1 is not allowed to have base type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>Недопустимо, чтобы простой тип %1 имел базовым %2.</translation>
</message>
<message>
<source>Simple type %1 can only have simple atomic type as base type.</source>
- <translation type="unfinished"></translation>
+ <translation>У простого типа %1 может быть только простой атомарный базовый тип.</translation>
</message>
<message>
<source>Simple type %1 cannot derive from %2 as the latter defines restriction as final.</source>
@@ -8729,11 +8772,11 @@ Please choose a different file name.</source>
</message>
<message>
<source>Variety of item type of %1 must be either atomic or union.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Виды типов элементов %1 должны быть или атомарными, или объединениями.</translation>
</message>
<message>
<source>Variety of member types of %1 must be atomic.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Виды внутренних типов %1 должны быть атомарными.</translation>
</message>
<message>
<source>%1 is not allowed to derive from %2 by list as the latter defines it as final.</source>
@@ -8741,11 +8784,11 @@ Please choose a different file name.</source>
</message>
<message>
<source>Simple type %1 is only allowed to have %2 facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Простой тип %1 может иметь только фасет %2.</translation>
</message>
<message>
<source>Base type of simple type %1 must have variety of type list.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Базовый тип простого типа %1 должен содержать какой-нибудь список.</translation>
</message>
<message>
<source>Base type of simple type %1 has defined derivation by restriction as final.</source>
@@ -8753,11 +8796,11 @@ Please choose a different file name.</source>
</message>
<message>
<source>Item type of base type does not match item type of %1.</source>
- <translation type="unfinished"></translation>
+ <translation>Тип элемента базового типа не совпадает с типом элемента %1.</translation>
</message>
<message>
<source>Simple type %1 contains not allowed facet type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>Простой тип %1 содержит недопустимый фасет типа %2.</translation>
</message>
<message>
<source>%1 is not allowed to derive from %2 by union as the latter defines it as final.</source>
@@ -8765,11 +8808,11 @@ Please choose a different file name.</source>
</message>
<message>
<source>%1 is not allowed to have any facets.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 не может имет никаких фасетов.</translation>
</message>
<message>
<source>Base type %1 of simple type %2 must have variety of union.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Базовый тип %1 простого типа %2 должен содержать какое-то объединение.</translation>
</message>
<message>
<source>Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute.</source>
@@ -8777,171 +8820,171 @@ Please choose a different file name.</source>
</message>
<message>
<source>Member type %1 cannot be derived from member type %2 of %3&apos;s base type %4.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Внутренний тип %1 не может быть производным от типа %2, определённого в базовом типе типа %3 - %4.</translation>
</message>
<message>
<source>Derivation method of %1 must be extension because the base type %2 is a simple type.</source>
- <translation type="unfinished"></translation>
+ <translation>Метод наследования %1 должен быть «расширение», так как базовый тип %2 является простым.</translation>
</message>
<message>
<source>Complex type %1 has duplicated element %2 in its content model.</source>
- <translation type="unfinished"></translation>
+ <translation>Сложный тип %1 имеет повторяющийся элемент %2 в своей модели содержимого.</translation>
</message>
<message>
<source>Complex type %1 has non-deterministic content.</source>
- <translation type="unfinished"></translation>
+ <translation>Сложный тип %1 имеет недетерминированное содержимое.</translation>
</message>
<message>
<source>Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3.</source>
- <translation type="unfinished"></translation>
+ <translation>Атрибуты сложного типа %1 неверно дополняют атрибуты базового типа %2: %3.</translation>
</message>
<message>
<source>Content model of complex type %1 is not a valid extension of content model of %2.</source>
- <translation type="unfinished"></translation>
+ <translation>Модель содержимого сложного типа %1 неверно дополняет модель содержимого %2.</translation>
</message>
<message>
<source>Complex type %1 must have simple content.</source>
- <translation type="unfinished"></translation>
+ <translation>Сложный тип %1 должен иметь простое содержимое.</translation>
</message>
<message>
<source>Complex type %1 must have the same simple type as its base class %2.</source>
- <translation type="unfinished"></translation>
+ <translation>Сложный тип %1 должен содержать такой же простой тип, как и его базовый класс %2.</translation>
</message>
<message>
<source>Complex type %1 cannot be derived from base type %2%3.</source>
- <translation type="unfinished"></translation>
+ <translation>Сложный тип %1 не может быть производным от %2%3.</translation>
</message>
<message>
<source>Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3.</source>
- <translation type="unfinished"></translation>
+ <translation>Атрибуты сложного типа %1 не являются верным ограничением атрибутов базового типа %2: %3.</translation>
</message>
<message>
<source>Complex type %1 with simple content cannot be derived from complex base type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>Сложный тип %1 с простым содержимым не может быть производным от сложного типа %2.</translation>
</message>
<message>
<source>Item type of simple type %1 cannot be a complex type.</source>
- <translation type="unfinished"></translation>
+ <translation>Простой тип %1 не может содержать элементов сложных типов.</translation>
</message>
<message>
<source>Member type of simple type %1 cannot be a complex type.</source>
- <translation type="unfinished"></translation>
+ <translation>Простой тип %1 не может определять сложные типы.</translation>
</message>
<message>
<source>%1 is not allowed to have a member type with the same name as itself.</source>
- <translation type="unfinished"></translation>
+ <translation>Не допустимо, чтобы %1 определял внутренний тип с таким же именем.</translation>
</message>
<message>
<source>%1 facet collides with %2 facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Фасет %1 противоречит %2.</translation>
</message>
<message>
<source>%1 facet must have the same value as %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>Фасет %1 должен иметь такое же значение, как и фасет %2 базового типа.</translation>
</message>
<message>
<source>%1 facet must be equal or greater than %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>Фасет %1 должен быть не менее фасета %2 базового типа.</translation>
</message>
<message>
<source>%1 facet must be less than or equal to %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>Фасет %1 должен быть не более фасета %2 базового типа.</translation>
</message>
<message>
<source>%1 facet contains invalid regular expression</source>
- <translation type="unfinished"></translation>
+ <translation>Фасет %1 содержит неверное регулярное выражение</translation>
</message>
<message>
<source>Unknown notation %1 used in %2 facet.</source>
- <translation type="unfinished"></translation>
+ <translation>В фасете %2 используется неизвестное обозначение %1.</translation>
</message>
<message>
<source>%1 facet contains invalid value %2: %3.</source>
- <translation type="unfinished"></translation>
+ <translation>Фасет %1 содержит неверное значение %2: %3.</translation>
</message>
<message>
<source>%1 facet cannot be %2 or %3 if %4 facet of base type is %5.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Фасет %1 не может быть %2 или %3, если фасет %4 базового типа равен %5.</translation>
</message>
<message>
<source>%1 facet cannot be %2 if %3 facet of base type is %4.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Фасет %1 не может быть %2, если фасет %3 базового типа равен %4.</translation>
</message>
<message>
<source>%1 facet must be less than or equal to %2 facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Фасет %1 должен быть не более фасета %2.</translation>
</message>
<message>
<source>%1 facet must be less than %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>Фасет %1 должен быть менее фасета %2 базового типа.</translation>
</message>
<message>
<source>%1 facet and %2 facet cannot appear together.</source>
- <translation type="unfinished"></translation>
+ <translation>Фасеты %1 и %2 не могут быть одновременно.</translation>
</message>
<message>
<source>%1 facet must be greater than %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>Фасет %1 должен быть более фасета %2 базового типа.</translation>
</message>
<message>
<source>%1 facet must be less than %2 facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Фасет %1 должен быть менее фасета %2.</translation>
</message>
<message>
<source>%1 facet must be greater than or equal to %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>Фасет %1 должен быть не менее фасета %2 базового типа.</translation>
</message>
<message>
<source>Simple type contains not allowed facet %1.</source>
- <translation type="unfinished"></translation>
+ <translation>Простой тип содержит недопустимый фасет %1.</translation>
</message>
<message>
<source>%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Недопустимы фасеты %1, %2, %3, %4, %5 и %6 при наследовании списком.</translation>
</message>
<message>
<source>Only %1 and %2 facets are allowed when derived by union.</source>
- <translation type="unfinished"></translation>
+ <translation>При наследовании объединением доступны только фасеты %1 и %2.</translation>
</message>
<message>
<source>%1 contains %2 facet with invalid data: %3.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 содержит фасет %2 с неверными данными: %3.</translation>
</message>
<message>
<source>Attribute group %1 contains attribute %2 twice.</source>
- <translation type="unfinished"></translation>
+ <translation>Группа атрибутов %1 содержит два атрибута %2.</translation>
</message>
<message>
<source>Attribute group %1 contains two different attributes that both have types derived from %2.</source>
- <translation type="unfinished"></translation>
+ <translation>Группа атрибутов %1 содержит два разных атрибута, производных от %2.</translation>
</message>
<message>
<source>Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Группа атрибутов %1 содержит атрибут %2, на значение которого наложено ограничение, но тип наследован от %3.</translation>
</message>
<message>
<source>Complex type %1 contains attribute %2 twice.</source>
- <translation type="unfinished"></translation>
+ <translation>Сложный тип %1 содержит два атрибута %2.</translation>
</message>
<message>
<source>Complex type %1 contains two different attributes that both have types derived from %2.</source>
- <translation type="unfinished"></translation>
+ <translation>Сложный тип %1 содержит два разных атрибута, производных от %2.</translation>
</message>
<message>
<source>Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Сложный тип %1 содержит атрибут %2, на значение которого наложено ограничение, но тип наследован от %3.</translation>
</message>
<message>
<source>Element %1 is not allowed to have a value constraint if its base type is complex.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Элементу %1 недопустимо иметь ограничение на значения, если у его базовый тип сложный.</translation>
</message>
<message>
<source>Element %1 is not allowed to have a value constraint if its type is derived from %2.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Элементу %1 недопустимо иметь ограничение на значения, если его тип производный от %2.</translation>
</message>
<message>
<source>Value constraint of element %1 is not of elements type: %2.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Ограничение значения элемента %1 не типа элемента: %2.</translation>
</message>
<message>
<source>Element %1 is not allowed to have substitution group affiliation as it is no global element.</source>
@@ -8953,7 +8996,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Value constraint of attribute %1 is not of attributes type: %2.</source>
- <translation type="unfinished"></translation>
+ <translation>Ограничение значения атрибута %1 не типа атрибута: %2.</translation>
</message>
<message>
<source>Attribute %1 has value constraint but has type derived from %2.</source>
@@ -9369,179 +9412,179 @@ Please choose a different file name.</source>
</message>
<message>
<source>String content does not match the length facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Содержимое строки не соответствует фасету length.</translation>
</message>
<message>
<source>String content does not match the minLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Содержимое строки не соответствует фасету minLength.</translation>
</message>
<message>
<source>String content does not match the maxLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Содержимое строки не соответствует фасету maxLength.</translation>
</message>
<message>
<source>String content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Содержимое строки не соответствует фасету pattern.</translation>
</message>
<message>
<source>String content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Содержимое строки отсутствует в фасете enumeration.</translation>
</message>
<message>
<source>Signed integer content does not match the maxInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Знаковое целое не соответствует фасету maxInclusive.</translation>
</message>
<message>
<source>Signed integer content does not match the maxExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Знаковое целое не соответствует фасету maxExclusive.</translation>
</message>
<message>
<source>Signed integer content does not match the minInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Знаковое целое не соответствует фасету minInclusive.</translation>
</message>
<message>
<source>Signed integer content does not match the minExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Знаковое целое не соответствует фасету minExclusive.</translation>
</message>
<message>
<source>Signed integer content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Знаковое целое отсутствует в фасете enumeration.</translation>
</message>
<message>
<source>Signed integer content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Знаковое целое не соответствует фасету pattern.</translation>
</message>
<message>
<source>Signed integer content does not match in the totalDigits facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Знаковое целое не соответствует фасету totalDigits.</translation>
</message>
<message>
<source>Unsigned integer content does not match the maxInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Беззнаковое целое не соответствует фасету maxInclusive.</translation>
</message>
<message>
<source>Unsigned integer content does not match the maxExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Беззнаковое целое не соответствует фасету maxExclusive.</translation>
</message>
<message>
<source>Unsigned integer content does not match the minInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Беззнаковое целое не соответствует фасету minInclusive.</translation>
</message>
<message>
<source>Unsigned integer content does not match the minExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Беззнаковое целое не соответствует фасету minExclusive.</translation>
</message>
<message>
<source>Unsigned integer content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Беззнаковое целое отсутствует в фасете enumeration.</translation>
</message>
<message>
<source>Unsigned integer content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Беззнаковое целое не соответствует фасету pattern.</translation>
</message>
<message>
<source>Unsigned integer content does not match in the totalDigits facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Беззнаковое целое не соответствует фасету totalDigits.</translation>
</message>
<message>
<source>Double content does not match the maxInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Действительное число не соответствует фасету maxInclusive.</translation>
</message>
<message>
<source>Double content does not match the maxExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Действительное число не соответствует фасету maxExclusive.</translation>
</message>
<message>
<source>Double content does not match the minInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Действительное число не соответствует фасету minInclusive.</translation>
</message>
<message>
<source>Double content does not match the minExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Действительное число не соответствует фасету minExclusive.</translation>
</message>
<message>
<source>Double content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Действительное число отсутствует в фасете enumeration.</translation>
</message>
<message>
<source>Double content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Действительное число не соответствует фасету pattern.</translation>
</message>
<message>
<source>Decimal content does not match in the fractionDigits facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Десятичное не соответствует фасету fractionDigits.</translation>
</message>
<message>
<source>Decimal content does not match in the totalDigits facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Десятичное не соответствует фасету totalDigits.</translation>
</message>
<message>
<source>Date time content does not match the maxInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Дата-время не соответствует фасету maxInclusive.</translation>
</message>
<message>
<source>Date time content does not match the maxExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Дата-время не соответствует фасету maxExclusive.</translation>
</message>
<message>
<source>Date time content does not match the minInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Дата-время не соответствует фасету minInclusive.</translation>
</message>
<message>
<source>Date time content does not match the minExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Дата-время не соответствует фасету minExclusive.</translation>
</message>
<message>
<source>Date time content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Дата-время отсутствует в фасете enumeration.</translation>
</message>
<message>
<source>Date time content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Дата-время не соответствует фасету pattern.</translation>
</message>
<message>
<source>Duration content does not match the maxInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Длительность не соответствует фасету maxInclusive.</translation>
</message>
<message>
<source>Duration content does not match the maxExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Длительность не соответствует фасету maxExclusive.</translation>
</message>
<message>
<source>Duration content does not match the minInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Длительность не соответствует фасету minInclusive.</translation>
</message>
<message>
<source>Duration content does not match the minExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Длительность не соответствует фасету minExclusive.</translation>
</message>
<message>
<source>Duration content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Длительность отсутствует в фасете enumeration.</translation>
</message>
<message>
<source>Duration content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Длительность не соответствует фасету pattern.</translation>
</message>
<message>
<source>Boolean content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Булевое число не соответствует фасету pattern.</translation>
</message>
<message>
<source>Binary content does not match the length facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Двоичные данные не соответствуют фасету length.</translation>
</message>
<message>
<source>Binary content does not match the minLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Двоичные данные не соответствуют фасету minLength.</translation>
</message>
<message>
<source>Binary content does not match the maxLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Двоичные данные не соответствуют фасету maxLength.</translation>
</message>
<message>
<source>Binary content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Двоичные данные отсутствуют в фасете enumeration.</translation>
</message>
<message>
<source>Invalid QName content: %1.</source>
@@ -9549,43 +9592,43 @@ Please choose a different file name.</source>
</message>
<message>
<source>QName content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Содержимое QName отсутствует в фасете enumeration.</translation>
</message>
<message>
<source>QName content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Содержимое QName не соответствует фасету pattern.</translation>
</message>
<message>
<source>Notation content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Содержимое Notation не перечислено в фасете enumeration.</translation>
</message>
<message>
<source>List content does not match length facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Список не соответствует фасету length.</translation>
</message>
<message>
<source>List content does not match minLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Список не соответствует фасету minLength.</translation>
</message>
<message>
<source>List content does not match maxLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Список не соответствует фасету maxLength.</translation>
</message>
<message>
<source>List content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Содержимое списка не перечислено в фасете enumeration.</translation>
</message>
<message>
<source>List content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Содержимое списка не соответствует фасету pattern.</translation>
</message>
<message>
<source>Union content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Объединение не перечислено в фасете enumeration.</translation>
</message>
<message>
<source>Union content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>Объединение не соответствует фасету pattern.</translation>
</message>
<message>
<source>Data of type %1 are not allowed to be empty.</source>
@@ -9753,7 +9796,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>ID value &apos;%1&apos; is not unique.</source>
- <translation>Значение ID &quot;%1&quot; неуникально.</translation>
+ <translation>Значение ID «%1» не уникально.</translation>
</message>
<message>
<source>&apos;%1&apos; attribute contains invalid QName content: %2.</source>
diff --git a/translations/qt_uk.ts b/translations/qt_uk.ts
index 7f396ad..c3cfec0 100644
--- a/translations/qt_uk.ts
+++ b/translations/qt_uk.ts
@@ -321,6 +321,10 @@ have libgstreamer-plugins-base installed.</source>
<source>Playback complete</source>
<translation>Відтворення завершене</translation>
</message>
+ <message>
+ <source>Download error</source>
+ <translation>Помилка звантаження</translation>
+ </message>
</context>
<context>
<name>Phonon::MMF::AbstractVideoPlayer</name>
@@ -440,6 +444,10 @@ have libgstreamer-plugins-base installed.</source>
<source>Error opening source: media type could not be determined</source>
<translation>Помилка відкриття джерела: не вдалося визначити тип медіа-даних</translation>
</message>
+ <message>
+ <source>Failed to set requested IAP</source>
+ <translation>Збій встановлення точки доступу до Інтернет</translation>
+ </message>
</context>
<context>
<name>Phonon::MMF::StereoWidening</name>
@@ -1200,6 +1208,11 @@ to
<translation>%1: недостатньо ресурсів</translation>
</message>
<message>
+ <source>%1: permission denied</source>
+ <comment>QSystemSemaphore</comment>
+ <translation>%1: доступ заборонено</translation>
+ </message>
+ <message>
<source>%1: unknown error %2</source>
<comment>QSystemSemaphore</comment>
<translation>%1: невідома помилка %2</translation>
@@ -1366,6 +1379,13 @@ to
</message>
</context>
<context>
+ <name>QDeclarativeApplication</name>
+ <message>
+ <source>Application is an abstract class</source>
+ <translation>Application - це абстрактний клас</translation>
+ </message>
+</context>
+<context>
<name>QDeclarativeBehavior</name>
<message>
<source>Cannot change the animation assigned to a Behavior.</source>
@@ -1493,6 +1513,14 @@ to
<translation>Неможливо створити порожню специфікацію компоненти</translation>
</message>
<message>
+ <source>&quot;%1.%2&quot; is not available in %3 %4.%5.</source>
+ <translation>&quot;%1.%2&quot; не доступно в %3 %4.%5.</translation>
+ </message>
+ <message>
+ <source>&quot;%1.%2&quot; is not available due to component versioning.</source>
+ <translation>&quot;%1.%2&quot; не доступно через версіювання компонента.</translation>
+ </message>
+ <message>
<source>Incorrectly specified signal assignment</source>
<translation>Неправильно вказане призначення сигналу</translation>
</message>
@@ -1589,6 +1617,10 @@ to
<translation>Неправильне присвоєння властивості: очікувався скрипт</translation>
</message>
<message>
+ <source>Cannot assign multiple values to a singular property</source>
+ <translation>Неможливо присвоїти декілька значенть до одиничної властивості</translation>
+ </message>
+ <message>
<source>Cannot assign object to property</source>
<translation>Неможливо призначити об&apos;єкт властивості</translation>
</message>
@@ -1681,8 +1713,12 @@ to
<translation>Непраильна позиція псевдоніму</translation>
</message>
<message>
- <source>Invalid alias reference. An alias reference must be specified as &lt;id&gt; or &lt;id&gt;.&lt;property&gt;</source>
- <translation>Неправильне посилання на псевдонім. Посилання на псевдонім має бути вказане, як &lt;id&gt; або &lt;id&gt;.&lt;property&gt;</translation>
+ <source>Invalid alias reference. An alias reference must be specified as &lt;id&gt;, &lt;id&gt;.&lt;property&gt; or &lt;id&gt;.&lt;value property&gt;.&lt;property&gt;</source>
+ <translation>Неправильне посилання на псевдонім. Посилання на псевдонім повинно бути вказане як &lt;id&gt;, &lt;id&gt;.&lt;властивість&gt; або &lt;id&gt;.&lt;властивість-значення&gt;.&lt;властивість&gt;</translation>
+ </message>
+ <message>
+ <source>Alias property exceeds alias bounds</source>
+ <translation>Властивість-псевдонім виходить за межі псевдоніму</translation>
</message>
<message>
<source>Invalid alias reference. Unable to find id &quot;%1&quot;</source>
@@ -1695,6 +1731,10 @@ to
<source>Invalid empty URL</source>
<translation>Неправильний порожній URL</translation>
</message>
+ <message>
+ <source>createObject: value is not an object</source>
+ <translation>createObject: значення не є об’єктом</translation>
+ </message>
</context>
<context>
<name>QDeclarativeConnections</name>
@@ -1756,6 +1796,10 @@ to
<context>
<name>QDeclarativeImportDatabase</name>
<message>
+ <source>cannot load module &quot;%1&quot;: File name case mismatch for &quot;%2&quot;</source>
+ <translation>неможливо завантажити модуль &quot;%1&quot;: Регістр імені файлу не збігається для &quot;%2&quot;</translation>
+ </message>
+ <message>
<source>module &quot;%1&quot; definition &quot;%2&quot; not readable</source>
<translation>неможливо прочитати визначення &quot;%2&quot; модуля &quot;%1&quot;</translation>
</message>
@@ -1811,6 +1855,10 @@ to
<source>is not a type</source>
<translation>не є типом</translation>
</message>
+ <message>
+ <source>File name case mismatch for &quot;%2&quot;</source>
+ <translation>Регістр імені файлу не збігається для &quot;%2&quot;</translation>
+ </message>
</context>
<context>
<name>QDeclarativeKeyNavigationAttached</name>
@@ -1827,6 +1875,17 @@ to
</message>
</context>
<context>
+ <name>QDeclarativeLayoutMirroringAttached</name>
+ <message>
+ <source>LayoutDirection attached property only works with Items</source>
+ <translation>Прикріплена властивість LayoutDirection працює лише з Item</translation>
+ </message>
+ <message>
+ <source>LayoutMirroring is only available via attached properties</source>
+ <translation>LayoutMirroring доступна лише через прикріплені властивості</translation>
+ </message>
+</context>
+<context>
<name>QDeclarativeListModel</name>
<message>
<source>remove: index %1 out of range</source>
@@ -6591,6 +6650,10 @@ Do you want to overwrite it?</source>
<source>Error during SSL handshake: %1</source>
<translation>Помилка рукостискання SSL: %1</translation>
</message>
+ <message>
+ <source>The peer certificate is blacklisted</source>
+ <translation>Сертифікат іншої сторони в чорному списку</translation>
+ </message>
</context>
<context>
<name>QStateMachine</name>
diff --git a/translations/qtconfig_ko.ts b/translations/qtconfig_ko.ts
new file mode 100644
index 0000000..9708a22
--- /dev/null
+++ b/translations/qtconfig_ko.ts
@@ -0,0 +1,745 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Appearance&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to customize the appearance of your Qt applications.&lt;/p&gt;&lt;p&gt;You can select the default GUI Style from the drop down list and customize the colors.&lt;/p&gt;&lt;p&gt;Any GUI Style plugins in your plugin path will automatically be added to the list of built-in Qt styles. (See the Library Paths tab for information on adding new plugin paths.)&lt;/p&gt;&lt;p&gt;When you choose 3-D Effects and Window Background colors, the Qt Configuration program will automatically generate a palette for you. To customize colors further, press the Tune Palette button to open the advanced palette editor.&lt;p&gt;The Preview Window shows what the selected Style and colors look like.</source>
+ <translation>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;모양&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;이 탭을 사용하면 Qt 프로그램의 모양을 지정할 수 있습니다.&lt;/p&gt;&lt;p&gt;기본 GUI 스타일을 드롭 다운 목록에서 선택하고 색상을 사용자 정의할 수 있습니다.&lt;/p&gt;&lt;p&gt;플러그인 경로에 있는 GUI 스타일 플러그인이 Qt 내장 스타일과 더불어 추가될 것입니다. (새 플러그인 경로를 추가하려면 라이브러리 경로 탭을 참고하십시오.)&lt;/p&gt;&lt;p&gt;3차원 효과 및 창 배경색을 선택하면 Qt 설정 프로그램에서 자동으로 팔레트를 생성합니다. 색을 더 편집하려면 팔레트 조정 단추를 눌러서 고급 팔레트 편집기를 여십시오.&lt;p&gt;미리 보기 창에서 스타일과 색을 보여 줍니다.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Fonts&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to select the default font for your Qt applications. The selected font is shown (initially as &apos;Sample Text&apos;) in the line edit below the Family, Style and Point Size drop down lists.&lt;/p&gt;&lt;p&gt;Qt has a powerful font substitution feature that allows you to specify a list of substitute fonts. Substitute fonts are used when a font cannot be loaded, or if the specified font doesn&apos;t have a particular character.&lt;p&gt;For example, if you select the font Lucida, which doesn&apos;t have Korean characters, but need to show some Korean text using the Mincho font family you can do so by adding Mincho to the list. Once Mincho is added, any Korean characters that are not found in the Lucida font will be taken from the Mincho font. Because the font substitutions are lists, you can also select multiple families, such as Song Ti (for use with Chinese text).</source>
+ <translation>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;글꼴&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;이 탭에서 Qt 프로그램의 글꼴을 설정할 수 있습니다. 선택한 글꼴은 글꼴 종류, 스타일, 포인트 크기 아래의 라인 편집기에 미리 보여집니다.(기본 텍스트는 &apos;예제 텍스트&apos;)&lt;/p&gt;&lt;p&gt;Qt는 글꼴 대체 목록을 지정하는 기능을 갖추고 있습니다. 글꼴을 불러올 수 없거나 지정한 글꼴에 필요한 문자가 없는 경우 자동적으로 대체됩니다.&lt;p&gt;예를 들어 한글 글자가 없는 Lucida 글꼴을 선택한 경우, 한글을 명조체로 표시하고 싶다면 목록에 명조체를 추가하여 한글을 표시할 수 있습니다. 명조체를 추가하면 Lucida 글꼴에 없는 한글 글자는 명조체로 표시됩니다. 글꼴 대체는 목록으로 관리되므로, 중국어의 한자를 표시하고 싶은 경우에는 다른 글꼴을 추가할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Interface&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to customize the feel of your Qt applications.&lt;/p&gt;&lt;p&gt;If the Resolve Symlinks checkbox is checked Qt will follow symlinks when handling URLs. For example, in the file dialog, if this setting is turned on and /usr/tmp is a symlink to /var/tmp, entering the /usr/tmp directory will cause the file dialog to change to /var/tmp. With this setting turned off, symlinks are not resolved or followed.&lt;/p&gt;&lt;p&gt;The Global Strut setting is useful for people who require a minimum size for all widgets (e.g. when using a touch panel or for users who are visually impaired). Leaving the Global Strut width and height at 0 will disable the Global Strut feature&lt;/p&gt;&lt;p&gt;XIM (Extended Input Methods) are used for entering characters in languages that have large character sets, for example, Chinese and Japanese.</source>
+ <translation>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;인터페이스&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Qt 프로그램의 모습을 바꿀 수 있습니다.&lt;/p&gt;&lt;p&gt;심볼릭 링크 따라가기를 선택하면 Qt에서 URL을 처리할 때 심볼릭 링크를 따라갑니다. 예를 들어 이 설정이 활성화되어 있고 /usr/tmp가 /var/tmp를 향한 심볼릭 링크로 지정되어 있으면 /usr/tmp 디렉터리에 들어갔을 때 /var/tmp 디렉터리로 전환됩니다. 이 설정이 비활성화되어 있으면 심볼릭 링크를 따라가지 않습니다.&lt;/p&gt;&lt;p&gt;크기 제한 설정이 켜져 있으면 위젯의 최소 크기를 설정할 수 있습니다. 시각 장애가 있거나 터치 패널을 사용하는 등 최소 위젯 크기가 필요한 경우 사용할 수 있습니다. 크기 제한 설정을 0으로 설정하면 크기 제한 기능을 사용하지 않습니다.&lt;/p&gt;&lt;p&gt;XIM (X 입력기)는 한국어, 중국어, 일본어 등의 특수한 입력기를 사용하는 언어에 사용합니다.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Printer&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to configure the way Qt generates output for the printer.You can specify if Qt should try to embed fonts into its generated output.If you enable font embedding, the resulting postscript will be more portable and will more accurately reflect the visual output on the screen; however the resulting postscript file size will be bigger.&lt;p&gt;When using font embedding you can select additional directories where Qt should search for embeddable font files. By default, the X server font path is used.</source>
+ <translation>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;프린터&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Qt에서 프린터를 다루는 방식을 설정할 수 있습니다. Qt에서 생성한 출력물에 글꼴을 임베딩할 지 결정할 수 있습니다. 만약 글꼴 임베딩을 사용하면 생성된 포스트스크립트 파일은 지정한 글꼴이 없는 곳에서도 똑같이 출력할 수 있으나, 파일의 크기가 더 커집니다.&lt;p&gt;글꼴 임베딩을 사용하는 경우 Qt가 글꼴 파일을 찾을 추가 디렉터리를 설정할 수 있습니다. 기본적으로 X 글꼴 경로를 사용합니다.</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Phonon&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to configure the Phonon GStreamer multimedia backend. &lt;p&gt;It is reccommended to leave all settings on &quot;Auto&quot; to let Phonon determine your settings automatically.</source>
+ <translation>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Phonon&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;이 탭을 사용하면 Phonon GStreamer 멀티미디어 백엔드를 설정할 수 있습니다.&lt;p&gt;모든 설정을 &quot;자동&quot;으로 설정하여 Phonon에서 자동으로 설정하도록 하는 것을 추천합니다.</translation>
+ </message>
+ <message>
+ <source>Desktop Settings (Default)</source>
+ <translation>데스크톱 설정 (기본값)</translation>
+ </message>
+ <message>
+ <source>Choose style and palette based on your desktop settings.</source>
+ <translation>데스크톱 설정을 기반으로 한 스타일과 팔레트를 선택하십시오.</translation>
+ </message>
+ <message>
+ <source>On The Spot</source>
+ <translation>On The Spot</translation>
+ </message>
+ <message>
+ <source>Auto (default)</source>
+ <translation>자동 (기본값)</translation>
+ </message>
+ <message>
+ <source>Choose audio output automatically.</source>
+ <translation>자동으로 오디오 출력을 선택합니다.</translation>
+ </message>
+ <message>
+ <source>aRts</source>
+ <translation>aRts</translation>
+ </message>
+ <message>
+ <source>Experimental aRts support for GStreamer.</source>
+ <translation>GStreamer의 실험적인 aRts 출력입니다.</translation>
+ </message>
+ <message>
+ <source>Phonon GStreamer backend not available.</source>
+ <translation>Phonon GStreamer 백엔드를 사용할 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>Choose render method automatically</source>
+ <translation>렌더링 방식 자동으로 선택하기</translation>
+ </message>
+ <message>
+ <source>X11</source>
+ <translation>X11</translation>
+ </message>
+ <message>
+ <source>Use X11 Overlays</source>
+ <translation>X11 오버레이 사용하기</translation>
+ </message>
+ <message>
+ <source>OpenGL</source>
+ <translation>OpenGL</translation>
+ </message>
+ <message>
+ <source>Use OpenGL if available</source>
+ <translation>사용 가능한 경우 OpenGL 사용하기</translation>
+ </message>
+ <message>
+ <source>Software</source>
+ <translation>소프트웨어</translation>
+ </message>
+ <message>
+ <source>Use simple software rendering</source>
+ <translation>간단한 소프트웨어 렌더링 사용하기</translation>
+ </message>
+ <message>
+ <source>No changes to be saved.</source>
+ <translation>저장할 변경 사항이 없습니다.</translation>
+ </message>
+ <message>
+ <source>Saving changes...</source>
+ <translation>변경 사항 저장하는 중...</translation>
+ </message>
+ <message>
+ <source>Over The Spot</source>
+ <translation>Over The Spot</translation>
+ </message>
+ <message>
+ <source>Off The Spot</source>
+ <translation>Off The Spot</translation>
+ </message>
+ <message>
+ <source>Root</source>
+ <translation>루트</translation>
+ </message>
+ <message>
+ <source>Select a Directory</source>
+ <translation>디렉터리 선택</translation>
+ </message>
+ <message>
+ <source>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;Version %2&lt;br/&gt;&lt;br/&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source>
+ <translation>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;버전 %2&lt;br/&gt;&lt;br/&gt;저작권자 (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</translation>
+ </message>
+ <message>
+ <source>Qt Configuration</source>
+ <translation>Qt 설정</translation>
+ </message>
+ <message>
+ <source>Save Changes</source>
+ <translation>변경 사항 저장</translation>
+ </message>
+ <message>
+ <source>Save changes to settings?</source>
+ <translation>변경 사항을 저장하시겠습니까?</translation>
+ </message>
+ <message>
+ <source>&amp;Yes</source>
+ <translation>예(&amp;Y)</translation>
+ </message>
+ <message>
+ <source>&amp;No</source>
+ <translation>아니오(&amp;N)</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>취소(&amp;C)</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindowBase</name>
+ <message>
+ <source>Qt Configuration</source>
+ <translation>Qt 설정</translation>
+ </message>
+ <message>
+ <source>Appearance</source>
+ <translation>모양</translation>
+ </message>
+ <message>
+ <source>GUI Style</source>
+ <translation>GUI 스타일</translation>
+ </message>
+ <message>
+ <source>Select GUI &amp;Style:</source>
+ <translation>GUI 스타일 선택(&amp;S):</translation>
+ </message>
+ <message>
+ <source>Preview</source>
+ <translation>미리 보기</translation>
+ </message>
+ <message>
+ <source>Select &amp;Palette:</source>
+ <translation>팔레트 선택(&amp;P):</translation>
+ </message>
+ <message>
+ <source>Active Palette</source>
+ <translation>활성 팔레트</translation>
+ </message>
+ <message>
+ <source>Inactive Palette</source>
+ <translation>비활성 팔레트</translation>
+ </message>
+ <message>
+ <source>Disabled Palette</source>
+ <translation>사용 불가 팔레트</translation>
+ </message>
+ <message>
+ <source>Build Palette</source>
+ <translation>팔레트 생성</translation>
+ </message>
+ <message>
+ <source>&amp;3-D Effects:</source>
+ <translation>3차원 효과(&amp;3):</translation>
+ </message>
+ <message>
+ <source>Window Back&amp;ground:</source>
+ <translation>창 배경(&amp;G):</translation>
+ </message>
+ <message>
+ <source>&amp;Tune Palette...</source>
+ <translation>팔레트 조정(&amp;T)...</translation>
+ </message>
+ <message>
+ <source>Please use the KDE Control Center to set the palette.</source>
+ <translation>KDE 제어판에서 팔레트를 조정하십시오.</translation>
+ </message>
+ <message>
+ <source>Fonts</source>
+ <translation>글꼴</translation>
+ </message>
+ <message>
+ <source>Default Font</source>
+ <translation>기본 글꼴</translation>
+ </message>
+ <message>
+ <source>&amp;Style:</source>
+ <translation>스타일(&amp;S):</translation>
+ </message>
+ <message>
+ <source>&amp;Point Size:</source>
+ <translation>포인트 크기(&amp;P):</translation>
+ </message>
+ <message>
+ <source>F&amp;amily:</source>
+ <translation>종류(&amp;A):</translation>
+ </message>
+ <message>
+ <source>Sample Text</source>
+ <translation>견본 텍스트</translation>
+ </message>
+ <message>
+ <source>Font Substitution</source>
+ <translation>글꼴 대체</translation>
+ </message>
+ <message>
+ <source>S&amp;elect or Enter a Family:</source>
+ <translation>글꼴을 선택하거나 입력하십시오(&amp;E):</translation>
+ </message>
+ <message>
+ <source>Current Substitutions:</source>
+ <translation>현재 대체 목록:</translation>
+ </message>
+ <message>
+ <source>Up</source>
+ <translation>위로</translation>
+ </message>
+ <message>
+ <source>Down</source>
+ <translation>아래로</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>삭제</translation>
+ </message>
+ <message>
+ <source>Select s&amp;ubstitute Family:</source>
+ <translation>대체할 글꼴을 선택하십시오(&amp;U):</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>추가</translation>
+ </message>
+ <message>
+ <source>Interface</source>
+ <translation>인터페이스</translation>
+ </message>
+ <message>
+ <source>Feel Settings</source>
+ <translation>모양 설정</translation>
+ </message>
+ <message>
+ <source> ms</source>
+ <translation> ms</translation>
+ </message>
+ <message>
+ <source>&amp;Double Click Interval:</source>
+ <translation>두 번 누름 간격(&amp;D):</translation>
+ </message>
+ <message>
+ <source>No blinking</source>
+ <translation>깜빡임 없음</translation>
+ </message>
+ <message>
+ <source>&amp;Cursor Flash Time:</source>
+ <translation>커서 깜빡임 시간(&amp;C):</translation>
+ </message>
+ <message>
+ <source> lines</source>
+ <translation> 줄</translation>
+ </message>
+ <message>
+ <source>Wheel &amp;Scroll Lines:</source>
+ <translation>휠 스크롤 줄 수(&amp;S):</translation>
+ </message>
+ <message>
+ <source>Resolve symlinks in URLs</source>
+ <translation>URL의 심볼릭 링크 따라가기</translation>
+ </message>
+ <message>
+ <source>GUI Effects</source>
+ <translation>GUI 효과</translation>
+ </message>
+ <message>
+ <source>&amp;Enable</source>
+ <translation>활성화(&amp;E)</translation>
+ </message>
+ <message>
+ <source>Alt+E</source>
+ <translation>Alt+E</translation>
+ </message>
+ <message>
+ <source>&amp;Menu Effect:</source>
+ <translation>메뉴 효과(&amp;M):</translation>
+ </message>
+ <message>
+ <source>C&amp;omboBox Effect:</source>
+ <translation>콤보 상자 효과(&amp;O):</translation>
+ </message>
+ <message>
+ <source>&amp;ToolTip Effect:</source>
+ <translation>풍선 도움말 효과(&amp;T):</translation>
+ </message>
+ <message>
+ <source>Tool&amp;Box Effect:</source>
+ <translation>도구 상자 효과(&amp;B):</translation>
+ </message>
+ <message>
+ <source>Disable</source>
+ <translation>사용 안함</translation>
+ </message>
+ <message>
+ <source>Animate</source>
+ <translation>애니메이션</translation>
+ </message>
+ <message>
+ <source>Fade</source>
+ <translation>페이드</translation>
+ </message>
+ <message>
+ <source>Global Strut</source>
+ <translation>크기 제한</translation>
+ </message>
+ <message>
+ <source>Minimum &amp;Width:</source>
+ <translation>최소 폭(&amp;W):</translation>
+ </message>
+ <message>
+ <source>Minimum Hei&amp;ght:</source>
+ <translation>최소 높이(&amp;G):</translation>
+ </message>
+ <message>
+ <source> pixels</source>
+ <translation> 픽셀</translation>
+ </message>
+ <message>
+ <source>Enhanced support for languages written right-to-left</source>
+ <translation>오른쪽에서 왼쪽으로 쓰는 언어 지원 향상</translation>
+ </message>
+ <message>
+ <source>XIM Input Style:</source>
+ <translation>XIM 입력 방식:</translation>
+ </message>
+ <message>
+ <source>On The Spot</source>
+ <translation>On The Spot</translation>
+ </message>
+ <message>
+ <source>Over The Spot</source>
+ <translation>Over The Spot</translation>
+ </message>
+ <message>
+ <source>Off The Spot</source>
+ <translation>Off The Spot</translation>
+ </message>
+ <message>
+ <source>Root</source>
+ <translation>루트</translation>
+ </message>
+ <message>
+ <source>Default Input Method:</source>
+ <translation>기본 입력기:</translation>
+ </message>
+ <message>
+ <source>Printer</source>
+ <translation>프린터</translation>
+ </message>
+ <message>
+ <source>Enable Font embedding</source>
+ <translation>글꼴 임베딩 사용하기</translation>
+ </message>
+ <message>
+ <source>Font Paths</source>
+ <translation>글꼴 경로</translation>
+ </message>
+ <message>
+ <source>Browse...</source>
+ <translation>찾아보기...</translation>
+ </message>
+ <message>
+ <source>Press the &lt;b&gt;Browse&lt;/b&gt; button or enter a directory and press Enter to add them to the list.</source>
+ <translation>&lt;b&gt;찾아보기&lt;/b&gt; 단추를 누르거나 디렉터리를 입력하고 Enter 키를 눌러서 목록에 추가할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>Phonon</source>
+ <translation>Phonon</translation>
+ </message>
+ <message>
+ <source>About Phonon</source>
+ <translation>Phonon 정보</translation>
+ </message>
+ <message>
+ <source>Current Version:</source>
+ <translation>현재 버전:</translation>
+ </message>
+ <message>
+ <source>Not available</source>
+ <translation>사용할 수 없음</translation>
+ </message>
+ <message>
+ <source>Website:</source>
+ <translation>웹 사이트:</translation>
+ </message>
+ <message>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://phonon.kde.org&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://phonon.kde.org&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://phonon.kde.org&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://phonon.kde.org&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>About GStreamer</source>
+ <translation>GStreamer 정보</translation>
+ </message>
+ <message>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://gstreamer.freedesktop.org/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://gstreamer.freedesktop.org/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://gstreamer.freedesktop.org/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://gstreamer.freedesktop.org/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>GStreamer backend settings</source>
+ <translation>GStreamer 백엔드 설정</translation>
+ </message>
+ <message>
+ <source>Preferred audio sink:</source>
+ <translation>선호하는 오디오 싱크:</translation>
+ </message>
+ <message>
+ <source>Preferred render method:</source>
+ <translation>선호하는 렌더링 방법:</translation>
+ </message>
+ <message>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Note: changes to these settings may prevent applications from starting up correctly.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;메모: 이 설정을 변경하면 프로그램이 시작되지 않을 수도 있습니다.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <source>&amp;File</source>
+ <translation>파일(&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>도움말(&amp;H)</translation>
+ </message>
+ <message>
+ <source>&amp;Save</source>
+ <translation>저장(&amp;S)</translation>
+ </message>
+ <message>
+ <source>Save</source>
+ <translation>저장</translation>
+ </message>
+ <message>
+ <source>Ctrl+S</source>
+ <translation>Ctrl+S</translation>
+ </message>
+ <message>
+ <source>E&amp;xit</source>
+ <translation>끝내기(&amp;X)</translation>
+ </message>
+ <message>
+ <source>Exit</source>
+ <translation>끝내기</translation>
+ </message>
+ <message>
+ <source>&amp;About</source>
+ <translation>정보(&amp;A)</translation>
+ </message>
+ <message>
+ <source>About</source>
+ <translation>정보</translation>
+ </message>
+ <message>
+ <source>About &amp;Qt</source>
+ <translation>Qt 정보(&amp;Q)</translation>
+ </message>
+ <message>
+ <source>About Qt</source>
+ <translation>Qt 정보</translation>
+ </message>
+</context>
+<context>
+ <name>PaletteEditorAdvancedBase</name>
+ <message>
+ <source>Tune Palette</source>
+ <translation>팔레트 조정</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Edit Palette&lt;/b&gt;&lt;p&gt;Change the palette of the current widget or form.&lt;/p&gt;&lt;p&gt;Use a generated palette or select colors for each color group and each color role.&lt;/p&gt;&lt;p&gt;The palette can be tested with different widget layouts in the preview section.&lt;/p&gt;</source>
+ <translation>&lt;b&gt;팔레트 조정&lt;/b&gt;&lt;p&gt;현재 위젯이나 폼의 팔레트를 변경합니다.&lt;/p&gt;&lt;p&gt;생성된 팔레트를 사용하거나, 각각 색상 그룹과 역할의 색을 선택하십시오.&lt;/p&gt;&lt;p&gt;미리 보기 섹션의 여러 위젯 레이아웃으로 팔레트를 테스트할 수 있습니다.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Select &amp;Palette:</source>
+ <translation>팔레트 선택(&amp;P):</translation>
+ </message>
+ <message>
+ <source>Active Palette</source>
+ <translation>활성 팔레트</translation>
+ </message>
+ <message>
+ <source>Inactive Palette</source>
+ <translation>비활성 팔레트</translation>
+ </message>
+ <message>
+ <source>Disabled Palette</source>
+ <translation>사용 불가 팔레트</translation>
+ </message>
+ <message>
+ <source>Auto</source>
+ <translation>자동</translation>
+ </message>
+ <message>
+ <source>Build inactive palette from active</source>
+ <translation>활성 팔레트에서 비활성 팔레트 생성</translation>
+ </message>
+ <message>
+ <source>Build disabled palette from active</source>
+ <translation>활성 팔레트에서 사용 불가 팔레트 생성</translation>
+ </message>
+ <message>
+ <source>Central color &amp;roles</source>
+ <translation>중심 색상 역할(&amp;R)</translation>
+ </message>
+ <message>
+ <source>Choose central color role</source>
+ <translation>중심 색상 역할 선택</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Select a color role.&lt;/b&gt;&lt;p&gt;Available central roles are: &lt;ul&gt; &lt;li&gt;Window - general background color.&lt;/li&gt; &lt;li&gt;WindowText - general foreground color. &lt;/li&gt; &lt;li&gt;Base - used as background color for e.g. text entry widgets, usually white or another light color. &lt;/li&gt; &lt;li&gt;Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. &lt;/li&gt; &lt;li&gt;Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. &lt;/li&gt; &lt;li&gt;ButtonText - a foreground color used with the Button color. &lt;/li&gt; &lt;li&gt;Highlight - a color to indicate a selected or highlighted item. &lt;/li&gt; &lt;li&gt;HighlightedText - a text color that contrasts to Highlight. &lt;/li&gt; &lt;li&gt;BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. &lt;/li&gt; &lt;/ul&gt; &lt;/p&gt;</source>
+ <translation>&lt;b&gt;색상 역할을 선택하십시오.&lt;/b&gt;&lt;p&gt;사용 가능한 색상 역할 목록: &lt;ul&gt; &lt;li&gt;창 - 일반적인 배경색.&lt;/li&gt; &lt;li&gt;창 텍스트 - 일반적인 전경색. &lt;/li&gt; &lt;li&gt;기본 - 텍스트 입력 위젯과 같은 곳의 배경색. 일반적으로 흰색 또는 밝은 색입니다.&lt;/li&gt; &lt;li&gt;텍스트 - &apos;기본&apos;과 같이 사용되는 전경색입니다. 대개 창 텍스트와 같은 색을 사용합니다.&lt;/li&gt; &lt;li&gt;단추 - 일반적인 단추 배경색. 매킨토시 스타일과 같이 단추와 창의 배경색이 다른 곳에서 사용합니다.&lt;/li&gt; &lt;li&gt;단추 텍스트 - 단추 색과 같이 사용되는 전경색.&lt;/li&gt; &lt;li&gt;강조 - 선택하거나 강조된 항목을 나타내는 색.&lt;/li&gt; &lt;li&gt;강조 텍스트 - &apos;강조&apos;와 같이 사용되는 텍스트 색.&lt;/li&gt; &lt;li&gt;밝은 텍스트 - 창 텍스트와 대조되는 텍스트 색. 예를 들어 검정색입니다.&lt;/li&gt; &lt;/ul&gt; &lt;/p&gt;</translation>
+ </message>
+ <message>
+ <source>Window</source>
+ <translation>창</translation>
+ </message>
+ <message>
+ <source>WindowText</source>
+ <translation>창 텍스트</translation>
+ </message>
+ <message>
+ <source>Button</source>
+ <translation>단추</translation>
+ </message>
+ <message>
+ <source>Base</source>
+ <translation>기본</translation>
+ </message>
+ <message>
+ <source>Text</source>
+ <translation>텍스트</translation>
+ </message>
+ <message>
+ <source>BrightText</source>
+ <translation>밝은 텍스트</translation>
+ </message>
+ <message>
+ <source>ButtonText</source>
+ <translation>단추 텍스트</translation>
+ </message>
+ <message>
+ <source>Highlight</source>
+ <translation>강조</translation>
+ </message>
+ <message>
+ <source>HighlightedText</source>
+ <translation>강조된 텍스트</translation>
+ </message>
+ <message>
+ <source>&amp;Select Color:</source>
+ <translation>색 선택(&amp;S):</translation>
+ </message>
+ <message>
+ <source>Choose a color</source>
+ <translation>색 선택</translation>
+ </message>
+ <message>
+ <source>Choose a color for the selected central color role.</source>
+ <translation>중심 색상 역할에 사용할 색상을 선택하십시오.</translation>
+ </message>
+ <message>
+ <source>3-D shadow &amp;effects</source>
+ <translation>3차원 그림자 효과(&amp;E)</translation>
+ </message>
+ <message>
+ <source>Build &amp;from button color</source>
+ <translation>단추 색상에서 생성(&amp;F)</translation>
+ </message>
+ <message>
+ <source>Generate shadings</source>
+ <translation>그림자 생성</translation>
+ </message>
+ <message>
+ <source>Check to let 3D-effect colors be calculated from button-color.</source>
+ <translation>3차원 효과 색상을 단추 색상에서 생성하려면 누르십시오.</translation>
+ </message>
+ <message>
+ <source>Choose 3D-effect color role</source>
+ <translation>3차원 효과 색상 역할 선택</translation>
+ </message>
+ <message>
+ <source>&lt;b&gt;Select a color role.&lt;/b&gt;&lt;p&gt;Available effect roles are: &lt;ul&gt; &lt;li&gt;Light - lighter than Button color. &lt;/li&gt; &lt;li&gt;Midlight - between Button and Light. &lt;/li&gt; &lt;li&gt;Mid - between Button and Dark. &lt;/li&gt; &lt;li&gt;Dark - darker than Button. &lt;/li&gt; &lt;li&gt;Shadow - a very dark color. &lt;/li&gt; &lt;/ul&gt;</source>
+ <translation>&lt;b&gt;색상 역할을 선택하십시오.&lt;/b&gt;&lt;p&gt;사용 가능한 색상 역할 목록: &lt;ul&gt; &lt;li&gt;밝음 - 단추 색보다 밝음. &lt;/li&gt; &lt;li&gt;약간 밝음 - &apos;밝음&apos;과 &apos;단추 색&apos;의 중간.&lt;/li&gt; &lt;li&gt;중간 - &apos;단추 색&apos;과 &apos;어두움&apos;의 중간.&lt;/li&gt; &lt;li&gt;어두움 - 단추 색보다 어두움.&lt;/li&gt; &lt;li&gt;그림자 - 매우 어두운 색.&lt;/li&gt; &lt;/ul&gt;</translation>
+ </message>
+ <message>
+ <source>Light</source>
+ <translation>밝음</translation>
+ </message>
+ <message>
+ <source>Midlight</source>
+ <translation>약간 밝음</translation>
+ </message>
+ <message>
+ <source>Mid</source>
+ <translation>중간</translation>
+ </message>
+ <message>
+ <source>Dark</source>
+ <translation>어두움</translation>
+ </message>
+ <message>
+ <source>Shadow</source>
+ <translation>그림자</translation>
+ </message>
+ <message>
+ <source>Select Co&amp;lor:</source>
+ <translation>색 선택(&amp;L):</translation>
+ </message>
+ <message>
+ <source>Choose a color for the selected effect color role.</source>
+ <translation>선택한 효과 색상 역할에 사용할 색을 선택하십시오.</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <source>Close dialog and apply all changes.</source>
+ <translation>대화 상자를 닫고 변경 사항을 적용합니다.</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+ <message>
+ <source>Close dialog and discard all changes.</source>
+ <translation>대화 상자를 닫고 변경 사항을 적용하지 않습니다.</translation>
+ </message>
+</context>
+<context>
+ <name>PreviewFrame</name>
+ <message>
+ <source>Desktop settings will only take effect after an application restart.</source>
+ <translation>데스크톱 설정은 프로그램을 다시 시작해야 적용됩니다.</translation>
+ </message>
+</context>
+<context>
+ <name>PreviewWidgetBase</name>
+ <message>
+ <source>Preview Window</source>
+ <translation>미리 보기 창</translation>
+ </message>
+ <message>
+ <source>ButtonGroup</source>
+ <translation>단추 그룹</translation>
+ </message>
+ <message>
+ <source>RadioButton1</source>
+ <translation>라디오 단추 1</translation>
+ </message>
+ <message>
+ <source>RadioButton2</source>
+ <translation>라디오 단추 2</translation>
+ </message>
+ <message>
+ <source>RadioButton3</source>
+ <translation>라디오 단추 3</translation>
+ </message>
+ <message>
+ <source>ButtonGroup2</source>
+ <translation>단추 그룹 2</translation>
+ </message>
+ <message>
+ <source>CheckBox1</source>
+ <translation>체크 상자 1</translation>
+ </message>
+ <message>
+ <source>CheckBox2</source>
+ <translation>체크 상자 2</translation>
+ </message>
+ <message>
+ <source>LineEdit</source>
+ <translation>라인 편집기</translation>
+ </message>
+ <message>
+ <source>ComboBox</source>
+ <translation>콤보 상자</translation>
+ </message>
+ <message>
+ <source>PushButton</source>
+ <translation>누름 단추</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;
+&lt;a href=&quot;http://qt.nokia.com&quot;&gt;http://qt.nokia.com&lt;/a&gt;
+&lt;/p&gt;
+&lt;p&gt;
+&lt;a href=&quot;http://www.kde.org&quot;&gt;http://www.kde.org&lt;/a&gt;
+&lt;/p&gt;</source>
+ <translation>&lt;p&gt;
+&lt;a href=&quot;http://qt.nokia.com&quot;&gt;http://qt.nokia.com&lt;/a&gt;
+&lt;/p&gt;
+&lt;p&gt;
+&lt;a href=&quot;http://www.kde.org&quot;&gt;http://www.kde.org&lt;/a&gt;
+&lt;/p&gt;</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/qtconfig_pl.ts b/translations/qtconfig_pl.ts
index a4719d0..b2a0c52 100644
--- a/translations/qtconfig_pl.ts
+++ b/translations/qtconfig_pl.ts
@@ -4,151 +4,134 @@
<context>
<name>MainWindow</name>
<message>
- <location filename="../tools/qtconfig/mainwindow.cpp" line="+353"/>
<source>On The Spot</source>
<translation>W oknie dokumentu (On-The-Spot)</translation>
</message>
<message>
- <location line="+33"/>
- <location line="+1"/>
- <location line="+40"/>
- <location line="+1"/>
<source>Auto (default)</source>
<translation>Automatyczny (domyślnie)</translation>
</message>
<message>
- <location line="-40"/>
<source>Choose audio output automatically.</source>
<translation>Wybierz automatycznie wyjście dźwiękowe.</translation>
</message>
<message>
- <location line="+1"/>
- <location line="+1"/>
<source>aRts</source>
<translation>aRts</translation>
</message>
<message>
- <location line="+1"/>
<source>Experimental aRts support for GStreamer.</source>
<translation>Eksperymentalna obsługa aRts dla GStreamer.</translation>
</message>
<message>
- <location line="+33"/>
<source>Phonon GStreamer backend not available.</source>
<translation>Końcówka Phonon GStreamer nie jest dostępna.</translation>
</message>
<message>
- <location line="+4"/>
<source>Choose render method automatically</source>
<translation>Wybierz automatycznie metodę renderowania</translation>
</message>
<message>
- <location line="+2"/>
- <location line="+1"/>
<source>X11</source>
<translation>X11</translation>
</message>
<message>
- <location line="+0"/>
<source>Use X11 Overlays</source>
<translation>Użyj warstwy X11</translation>
</message>
<message>
- <location line="+3"/>
- <location line="+1"/>
<source>OpenGL</source>
<translation>OpenGL</translation>
</message>
<message>
- <location line="+2"/>
- <location line="+1"/>
<source>Software</source>
<translation>Oprogramowanie</translation>
</message>
<message>
- <location line="+0"/>
<source>Use simple software rendering</source>
<translation>Użyj prostego oprogramowania renderującego</translation>
</message>
<message>
- <location line="+79"/>
<source>Over The Spot</source>
<translation>Nad oknem dokumentu (Over-The-Spot)</translation>
</message>
<message>
- <location line="+2"/>
<source>Off The Spot</source>
<translation>Na pasku stanu (Off-The-Spot)</translation>
</message>
<message>
- <location line="+2"/>
<source>Root</source>
<translation>W dodatkowym oknie (Root)</translation>
</message>
<message>
- <location line="+466"/>
<source>Select a Directory</source>
<translation>Wybierz katalog</translation>
</message>
<message>
- <location line="+17"/>
<source>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;Version %2&lt;br/&gt;&lt;br/&gt;Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location line="+3"/>
- <location line="+1"/>
- <location line="+8"/>
<source>Qt Configuration</source>
<translation>Konfiguracja Qt</translation>
</message>
<message>
- <location line="+22"/>
<source>Save Changes</source>
<translation>Zapisz zmiany</translation>
</message>
<message>
- <location line="+1"/>
<source>Save changes to settings?</source>
<translation>Zapisać zmiany do ustawień?</translation>
</message>
<message>
- <location line="+1"/>
<source>&amp;Yes</source>
<translation>&amp;Tak</translation>
</message>
<message>
- <location line="+0"/>
<source>&amp;No</source>
<translation>&amp;Nie</translation>
</message>
<message>
- <location line="+0"/>
<source>&amp;Cancel</source>
<translation>&amp;Anuluj</translation>
</message>
<message>
- <location line="-575"/>
<source>No changes to be saved.</source>
<translation>Brak zmian do zapisania.</translation>
</message>
<message>
- <location line="-261"/>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Appearance&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to customize the appearance of your Qt applications.&lt;/p&gt;&lt;p&gt;You can select the default GUI Style from the drop down list and customize the colors.&lt;/p&gt;&lt;p&gt;Any GUI Style plugins in your plugin path will automatically be added to the list of built-in Qt styles. (See the Library Paths tab for information on adding new plugin paths.)&lt;/p&gt;&lt;p&gt;When you choose 3-D Effects and Window Background colors, the Qt Configuration program will automatically generate a palette for you. To customize colors further, press the Tune Palette button to open the advanced palette editor.&lt;p&gt;The Preview Window shows what the selected Style and colors look like.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Fonts&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to select the default font for your Qt applications. The selected font is shown (initially as &apos;Sample Text&apos;) in the line edit below the Family, Style and Point Size drop down lists.&lt;/p&gt;&lt;p&gt;Qt has a powerful font substitution feature that allows you to specify a list of substitute fonts. Substitute fonts are used when a font cannot be loaded, or if the specified font doesn&apos;t have a particular character.&lt;p&gt;For example, if you select the font Lucida, which doesn&apos;t have Korean characters, but need to show some Korean text using the Mincho font family you can do so by adding Mincho to the list. Once Mincho is added, any Korean characters that are not found in the Lucida font will be taken from the Mincho font. Because the font substitutions are lists, you can also select multiple families, such as Song Ti (for use with Chinese text).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Interface&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to customize the feel of your Qt applications.&lt;/p&gt;&lt;p&gt;If the Resolve Symlinks checkbox is checked Qt will follow symlinks when handling URLs. For example, in the file dialog, if this setting is turned on and /usr/tmp is a symlink to /var/tmp, entering the /usr/tmp directory will cause the file dialog to change to /var/tmp. With this setting turned off, symlinks are not resolved or followed.&lt;/p&gt;&lt;p&gt;The Global Strut setting is useful for people who require a minimum size for all widgets (e.g. when using a touch panel or for users who are visually impaired). Leaving the Global Strut width and height at 0 will disable the Global Strut feature&lt;/p&gt;&lt;p&gt;XIM (Extended Input Methods) are used for entering characters in languages that have large character sets, for example, Chinese and Japanese.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Printer&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to configure the way Qt generates output for the printer.You can specify if Qt should try to embed fonts into its generated output.If you enable font embedding, the resulting postscript will be more portable and will more accurately reflect the visual output on the screen; however the resulting postscript file size will be bigger.&lt;p&gt;When using font embedding you can select additional directories where Qt should search for embeddable font files. By default, the X server font path is used.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Phonon&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to configure the Phonon GStreamer multimedia backend. &lt;p&gt;It is reccommended to leave all settings on &quot;Auto&quot; to let Phonon determine your settings automatically.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Desktop Settings (Default)</source>
<translation>Ustawienia pulpitu (domyślne)</translation>
</message>
<message>
- <location line="+5"/>
<source>Choose style and palette based on your desktop settings.</source>
<translation>Wybierz styl i paletę na podstawie ustawień Twojego pulpitu.</translation>
</message>
<message>
- <location line="+226"/>
<source>Use OpenGL if available</source>
<translation>Użyj OpenGL jeśli jest dostępny</translation>
</message>
<message>
- <location line="+34"/>
<source>Saving changes...</source>
<translation>Zapisywanie zmian...</translation>
</message>
@@ -156,347 +139,278 @@
<context>
<name>MainWindowBase</name>
<message>
- <location filename="../tools/qtconfig/mainwindowbase.ui"/>
<source>Qt Configuration</source>
<translation>Konfiguracja Qt</translation>
</message>
<message>
- <location/>
<source>Appearance</source>
<translation>Wygląd</translation>
</message>
<message>
- <location/>
<source>GUI Style</source>
<translation>Styl GUI</translation>
</message>
<message>
- <location/>
<source>Select GUI &amp;Style:</source>
<translation>Wybierz &amp;styl GUI:</translation>
</message>
<message>
- <location/>
<source>Build Palette</source>
<translation>Wersje palety</translation>
</message>
<message>
- <location/>
<source>&amp;3-D Effects:</source>
<translation>&amp;Efekty 3-D:</translation>
</message>
<message>
- <location/>
<source>Window Back&amp;ground:</source>
<translation>&amp;Tło okna:</translation>
</message>
<message>
- <location/>
<source>&amp;Tune Palette...</source>
<translation>&amp;Ustaw paletę...</translation>
</message>
<message>
- <location/>
<source>Please use the KDE Control Center to set the palette.</source>
<translation>Użyj Centrum Kontroli KDE aby zmienić paletę.</translation>
</message>
<message>
- <location/>
<source>Preview</source>
<translation>Podgląd</translation>
</message>
<message>
- <location/>
<source>Select &amp;Palette:</source>
<translation>Wybierz &amp;paletę:</translation>
</message>
<message>
- <location/>
<source>Active Palette</source>
<translation>Aktywna paleta</translation>
</message>
<message>
- <location/>
<source>Inactive Palette</source>
<translation>Nieaktywna paleta</translation>
</message>
<message>
- <location/>
<source>Disabled Palette</source>
<translation>Paleta &quot;zablokowane&quot;</translation>
</message>
<message>
- <location/>
<source>Fonts</source>
<translation>Czcionki</translation>
</message>
<message>
- <location/>
<source>Default Font</source>
<translation>Domyślna czcionka</translation>
</message>
<message>
- <location/>
<source>&amp;Style:</source>
<translation>&amp;Styl:</translation>
</message>
<message>
- <location/>
<source>&amp;Point Size:</source>
<translation>&amp;Rozmiar czcionki:</translation>
</message>
<message>
- <location/>
<source>F&amp;amily:</source>
<translation>&amp;Nazwa czcionki:</translation>
</message>
<message>
- <location/>
<source>Sample Text</source>
<translation>Przykładowy tekst</translation>
</message>
<message>
- <location/>
<source>Font Substitution</source>
<translation>Zamiana czcionki</translation>
</message>
<message>
- <location/>
<source>S&amp;elect or Enter a Family:</source>
<translation>&amp;Wybierz lub wpisz nazwę czcionki:</translation>
</message>
<message>
- <location/>
<source>Current Substitutions:</source>
<translation>Bieżące zamiany:</translation>
</message>
<message>
- <location/>
<source>Up</source>
<translation>W górę</translation>
</message>
<message>
- <location/>
<source>Down</source>
<translation>W dół</translation>
</message>
<message>
- <location/>
<source>Remove</source>
<translation>Usuń</translation>
</message>
<message>
- <location/>
<source>Select s&amp;ubstitute Family:</source>
<translation>Wybierz &amp;nazwę czcionki do zamiany na:</translation>
</message>
<message>
- <location/>
<source>Add</source>
<translation>Dodaj</translation>
</message>
<message>
- <location/>
<source>Interface</source>
<translation>Interfejs</translation>
</message>
<message>
- <location/>
<source>Feel Settings</source>
<translation>Ustawienia działania</translation>
</message>
<message>
- <location/>
<source> ms</source>
<translation> ms</translation>
</message>
<message>
- <location/>
<source>&amp;Double Click Interval:</source>
<translation>&amp;Odstęp pomiędzy dwukrotnym kliknięciem:</translation>
</message>
<message>
- <location/>
<source>No blinking</source>
<translation>Brak migotania</translation>
</message>
<message>
- <location/>
<source>&amp;Cursor Flash Time:</source>
<translation>&amp;Czas zmiany kursora:</translation>
</message>
<message>
- <location/>
<source> lines</source>
<translation> linie</translation>
</message>
<message>
- <location/>
<source>Wheel &amp;Scroll Lines:</source>
<translation>Obrócenie kółkiem powoduje &amp;przesunięcie o tyle linii:</translation>
</message>
<message>
- <location/>
<source>Resolve symlinks in URLs</source>
<translation>Rozwiązuj dowiązania symboliczne w adresach URL</translation>
</message>
<message>
- <location/>
<source>GUI Effects</source>
<translation>Efekty GUI</translation>
</message>
<message>
- <location/>
<source>&amp;Enable</source>
<translation>&amp;Włącz</translation>
</message>
<message>
- <location/>
<source>Alt+E</source>
<translation>Alt+E</translation>
</message>
<message>
- <location/>
<source>&amp;Menu Effect:</source>
<translation>Efekty &amp;menu:</translation>
</message>
<message>
- <location/>
<source>C&amp;omboBox Effect:</source>
<translation>Efekty c&amp;ombobox&apos;a:</translation>
</message>
<message>
- <location/>
<source>&amp;ToolTip Effect:</source>
<translation>Efekt &amp;chmurki:</translation>
</message>
<message>
- <location/>
<source>Tool&amp;Box Effect:</source>
<translation>Efekty &amp;paska narzędzi:</translation>
</message>
<message>
- <location/>
<source>Disable</source>
<translation>Wyłącz</translation>
</message>
<message>
- <location/>
<source>Animate</source>
<translation>Animacja</translation>
</message>
<message>
- <location/>
<source>Fade</source>
<translation>Wyłanianie</translation>
</message>
<message>
- <location/>
<source>Global Strut</source>
<translation>Minimalny rozmiar widżetów</translation>
</message>
<message>
- <location/>
<source>Minimum &amp;Width:</source>
<translation>Minimalna &amp;szerokość:</translation>
</message>
<message>
- <location/>
<source>Minimum Hei&amp;ght:</source>
<translation>Minimalna &amp;wysokość:</translation>
</message>
<message>
- <location/>
<source> pixels</source>
<translation> pikseli</translation>
</message>
<message>
- <location/>
<source>Enhanced support for languages written right-to-left</source>
<translation>Rozszerzona obsługa dla języków pisanych od prawej do lewej</translation>
</message>
<message>
- <location/>
<source>XIM Input Style:</source>
<translation>Rodzaje wprowadzania znaków (XIM):</translation>
</message>
<message>
- <location/>
<source>On The Spot</source>
<translation>W oknie dokumentu (On-The-Spot)</translation>
</message>
<message>
- <location/>
<source>Over The Spot</source>
<translation>Nad oknem dokumentu (Over-The-Spot)</translation>
</message>
<message>
- <location/>
<source>Off The Spot</source>
<translation>Na pasku stanu (Off-The-Spot)</translation>
</message>
<message>
- <location/>
<source>Root</source>
<translation>W dodatkowym oknie (Root)</translation>
</message>
<message>
- <location/>
<source>Default Input Method:</source>
<translation>Domyślna metoda wprowadzania:</translation>
</message>
<message>
- <location/>
<source>Printer</source>
<translation>Drukarka</translation>
</message>
<message>
- <location/>
<source>Enable Font embedding</source>
<translation>Włącz czcionki wbudowane</translation>
</message>
<message>
- <location/>
<source>Font Paths</source>
<translation>Ścieżki czcionek</translation>
</message>
<message>
- <location/>
<source>Browse...</source>
<translation>Przeglądaj...</translation>
</message>
<message>
- <location/>
<source>Press the &lt;b&gt;Browse&lt;/b&gt; button or enter a directory and press Enter to add them to the list.</source>
<translation>Naciśnij przycisk &lt;b&gt;Przeglądaj&lt;/b&gt; lub wpisz nazwę katalogu i naciśnij Enter aby dodać do listy.</translation>
</message>
<message>
- <location/>
<source>Phonon</source>
<translation>Phonon</translation>
</message>
<message>
- <location/>
<source>About Phonon</source>
<translation>Informacje o Phonon</translation>
</message>
<message>
- <location/>
<source>Current Version:</source>
<translation>Bieżąca wersja:</translation>
</message>
<message>
- <location/>
<source>Not available</source>
<translation>Nie dostępne</translation>
</message>
<message>
- <location/>
<source>Website:</source>
<translation>Witryna:</translation>
</message>
<message>
- <location/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -509,12 +423,10 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://phonon.kde.org&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://phonon.kde.org&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location/>
<source>About GStreamer</source>
<translation>Informacje o GStreamer</translation>
</message>
<message>
- <location/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -527,22 +439,18 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://gstreamer.freedesktop.org/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://gstreamer.freedesktop.org/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location/>
<source>GStreamer backend settings</source>
<translation>Ustawienia końcówki GStreamer</translation>
</message>
<message>
- <location/>
<source>Preferred audio sink:</source>
<translation>Preferowane ujście dźwiękowe:</translation>
</message>
<message>
- <location/>
<source>Preferred render method:</source>
<translation>Preferowana metoda renderowania:</translation>
</message>
<message>
- <location/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -555,57 +463,46 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Zwróć uwagę że zmiany dla tych ustawień mogą spowodować nieprawidłowe działanie aplikacji&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location/>
<source>&amp;File</source>
<translation>&amp;Plik</translation>
</message>
<message>
- <location/>
<source>&amp;Help</source>
<translation>&amp;Pomoc</translation>
</message>
<message>
- <location/>
<source>&amp;Save</source>
<translation>&amp;Zapisz</translation>
</message>
<message>
- <location/>
<source>Save</source>
<translation>Zapisz</translation>
</message>
<message>
- <location/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
- <location/>
<source>E&amp;xit</source>
<translation>&amp;Zakończ</translation>
</message>
<message>
- <location/>
<source>Exit</source>
<translation>Zakończ</translation>
</message>
<message>
- <location/>
<source>&amp;About</source>
<translation>&amp;Informacje o</translation>
</message>
<message>
- <location/>
<source>About</source>
<translation>Informacje o</translation>
</message>
<message>
- <location/>
<source>About &amp;Qt</source>
<translation>Informacje o &amp;Qt</translation>
</message>
<message>
- <location/>
<source>About Qt</source>
<translation>Informacje o Qt</translation>
</message>
@@ -613,207 +510,166 @@ p, li { white-space: pre-wrap; }
<context>
<name>PaletteEditorAdvancedBase</name>
<message>
- <location filename="../tools/qtconfig/paletteeditoradvancedbase.ui"/>
<source>Tune Palette</source>
<translation>Ustaw paletę</translation>
</message>
<message>
- <location/>
<source>&lt;b&gt;Edit Palette&lt;/b&gt;&lt;p&gt;Change the palette of the current widget or form.&lt;/p&gt;&lt;p&gt;Use a generated palette or select colors for each color group and each color role.&lt;/p&gt;&lt;p&gt;The palette can be tested with different widget layouts in the preview section.&lt;/p&gt;</source>
<translation>&lt;b&gt;Edycja palety&lt;/b&gt;&lt;p&gt;Zmień paletę bieżącego widżetu lub formularza.&lt;/p&gt;&lt;p&gt;Użyj wygenerowanej palety lub wybierz kolory dla każdej grupy i roli koloru.&lt;/p&gt;&lt;p&gt;Paleta może być przetestowana z różnymi rozmieszczeniami widżetów w sekcji podglądu.&lt;/p&gt;</translation>
</message>
<message>
- <location/>
<source>Select &amp;Palette:</source>
<translation>Wybierz &amp;paletę:</translation>
</message>
<message>
- <location/>
<source>Active Palette</source>
<translation>Paleta &quot;aktywne&quot;</translation>
</message>
<message>
- <location/>
<source>Inactive Palette</source>
<translation>Paleta &quot;nieaktywne&quot;</translation>
</message>
<message>
- <location/>
<source>Disabled Palette</source>
<translation>Paleta &quot;zablokowane&quot;</translation>
</message>
<message>
- <location/>
<source>Auto</source>
<translation>Automatycznie</translation>
</message>
<message>
- <location/>
<source>Build inactive palette from active</source>
<translation>Twórz paletę &quot;nieaktywne&quot; z &quot;aktywne&quot;</translation>
</message>
<message>
- <location/>
<source>Build disabled palette from active</source>
<translation>Twórz paletę &quot;zablokowane&quot; z &quot;aktywne&quot;</translation>
</message>
<message>
- <location/>
<source>Central color &amp;roles</source>
<translation>Główne &amp;role koloru</translation>
</message>
<message>
- <location/>
<source>Choose central color role</source>
<translation>Wybierz główną rolę koloru</translation>
</message>
<message>
- <location/>
<source>&lt;b&gt;Select a color role.&lt;/b&gt;&lt;p&gt;Available central roles are: &lt;ul&gt; &lt;li&gt;Window - general background color.&lt;/li&gt; &lt;li&gt;WindowText - general foreground color. &lt;/li&gt; &lt;li&gt;Base - used as background color for e.g. text entry widgets, usually white or another light color. &lt;/li&gt; &lt;li&gt;Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. &lt;/li&gt; &lt;li&gt;Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. &lt;/li&gt; &lt;li&gt;ButtonText - a foreground color used with the Button color. &lt;/li&gt; &lt;li&gt;Highlight - a color to indicate a selected or highlighted item. &lt;/li&gt; &lt;li&gt;HighlightedText - a text color that contrasts to Highlight. &lt;/li&gt; &lt;li&gt;BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. &lt;/li&gt; &lt;/ul&gt; &lt;/p&gt;</source>
<translation>&lt;b&gt;Wybierz rolę koloru.&lt;/b&gt;&lt;p&gt;Dostępne role główne: &lt;ul&gt; &lt;li&gt;Okno - główny kolor tła.&lt;/li&gt; &lt;li&gt;Tekst Okna - główny kolor pierwszoplanowy. &lt;/li&gt; &lt;li&gt;Bazowy - używany jako kolor tła dla np. widżetów wejściowych, zwykle biały lub inny jasny kolor. &lt;/li&gt; &lt;li&gt;Tekst - kolor pierwszoplanowy używany z Bazowym. Zwykle jest on taki sam jak Tekst Okna i wtedy powinien dobrze kontrastować jednocześnie z Oknem i Bazowym &lt;/li&gt; &lt;li&gt;Przycisk - główny kolor tła przycisku, gdy przyciski potrzebują innego tła niż Okno, jak np. w stylu Macintosh. &lt;/li&gt; &lt;li&gt;Tekst Przycisku - kolor pierwszoplanowy używany z Przyciskiem. &lt;/li&gt; &lt;li&gt;Podświetlony - kolor użyty w zaznaczonych lub podświetlonych elementach. &lt;/li&gt; &lt;li&gt;Podświetlony Tekst - kolor tekstu który kontrastuje z Podświetlonym. &lt;/li&gt; &lt;li&gt;Jasny Tekst - kolor teksty który znacznie różni się od Tekstu Okna i dobrze kontrastuje z np. czarnym. &lt;/li&gt; &lt;/ul&gt; &lt;/p&gt;</translation>
</message>
<message>
- <location/>
<source>Window</source>
<translation>Okno</translation>
</message>
<message>
- <location/>
<source>WindowText</source>
<translation>Tekst Okna</translation>
</message>
<message>
- <location/>
<source>Button</source>
<translation>Przycisk</translation>
</message>
<message>
- <location/>
<source>Base</source>
<translation>Podstawa</translation>
</message>
<message>
- <location/>
<source>Text</source>
<translation>Tekst</translation>
</message>
<message>
- <location/>
<source>BrightText</source>
<translation>Jasny tekst</translation>
</message>
<message>
- <location/>
<source>ButtonText</source>
<translation>Tekst przycisku</translation>
</message>
<message>
- <location/>
<source>Highlight</source>
<translation>Wyróżnienie</translation>
</message>
<message>
- <location/>
<source>HighlightedText</source>
<translation>Tekst wyróżniony</translation>
</message>
<message>
- <location/>
<source>&amp;Select Color:</source>
<translation>&amp;Wybierz kolor:</translation>
</message>
<message>
- <location/>
<source>Choose a color</source>
<translation>Wybierz kolor</translation>
</message>
<message>
- <location/>
<source>Choose a color for the selected central color role.</source>
<translation>Wybierz kolor dla zaznaczonej głównej roli koloru.</translation>
</message>
<message>
- <location/>
<source>3-D shadow &amp;effects</source>
<translation>&amp;Efekty cień 3-D </translation>
</message>
<message>
- <location/>
<source>Build &amp;from button color</source>
<translation>&amp;Zbuduj w oparciu o kolor przycisku</translation>
</message>
<message>
- <location/>
<source>Generate shadings</source>
<translation>Wygeneruj cienie</translation>
</message>
<message>
- <location/>
<source>Check to let 3D-effect colors be calculated from button-color.</source>
<translation>Zaznacz aby kolory efektów trójwymiarowych były obliczone na podstawie koloru przycisku.</translation>
</message>
<message>
- <location/>
<source>Choose 3D-effect color role</source>
<translation>Wybierz rolę koloru efektu trójwymiarowego</translation>
</message>
<message>
- <location/>
<source>&lt;b&gt;Select a color role.&lt;/b&gt;&lt;p&gt;Available effect roles are: &lt;ul&gt; &lt;li&gt;Light - lighter than Button color. &lt;/li&gt; &lt;li&gt;Midlight - between Button and Light. &lt;/li&gt; &lt;li&gt;Mid - between Button and Dark. &lt;/li&gt; &lt;li&gt;Dark - darker than Button. &lt;/li&gt; &lt;li&gt;Shadow - a very dark color. &lt;/li&gt; &lt;/ul&gt;</source>
<translation>&lt;b&gt;Wybierz rolę koloru.&lt;/b&gt;&lt;p&gt;Dostępne role kolorów: &lt;ul&gt; &lt;li&gt;Jasny - jaśniejszy od koloru Przycisku. &lt;/li&gt; &lt;li&gt;Średnio Jasny - pomiędzy kolorem Przycisku i Jasnym. &lt;/li&gt; &lt;li&gt;Średni - pomiędzy kolorem Przycisku i Ciemnym. &lt;/li&gt; &lt;li&gt;Ciemny - ciemniejszy od koloru Przycisku. &lt;/li&gt; &lt;li&gt;Cień - bardzo ciemny kolor. &lt;/li&gt; &lt;/ul&gt;</translation>
</message>
<message>
- <location/>
<source>Light</source>
<translation>Jasny</translation>
</message>
<message>
- <location/>
<source>Midlight</source>
<translation>Średnio jasny</translation>
</message>
<message>
- <location/>
<source>Mid</source>
<translation>Średni</translation>
</message>
<message>
- <location/>
<source>Dark</source>
<translation>Ciemny</translation>
</message>
<message>
- <location/>
<source>Shadow</source>
<translation>Cień</translation>
</message>
<message>
- <location/>
<source>Select Co&amp;lor:</source>
<translation>Wybierz &amp;kolor:</translation>
</message>
<message>
- <location/>
<source>Choose a color for the selected effect color role.</source>
<translation>Wybierz kolor dla zaznaczonej roli koloru dla efektu.</translation>
</message>
<message>
- <location/>
<source>OK</source>
<translation>OK</translation>
</message>
<message>
- <location/>
<source>Close dialog and apply all changes.</source>
<translation>Zamknij okno i zastosuj wszystkie zmiany.</translation>
</message>
<message>
- <location/>
<source>Cancel</source>
<translation>Anuluj</translation>
</message>
<message>
- <location/>
<source>Close dialog and discard all changes.</source>
<translation>Zamknij okno i anuluj wszystkie zmiany.</translation>
</message>
@@ -821,7 +677,6 @@ p, li { white-space: pre-wrap; }
<context>
<name>PreviewFrame</name>
<message>
- <location filename="../tools/qtconfig/previewframe.cpp" line="+81"/>
<source>Desktop settings will only take effect after an application restart.</source>
<translation>Ustawienia pulpitu zostaną zaaplikowane po ponownym uruchomieniu aplikacji.</translation>
</message>
@@ -829,62 +684,50 @@ p, li { white-space: pre-wrap; }
<context>
<name>PreviewWidgetBase</name>
<message>
- <location filename="../tools/qtconfig/previewwidgetbase.ui"/>
<source>Preview Window</source>
<translation>Okno podglądu</translation>
</message>
<message>
- <location/>
<source>ButtonGroup</source>
<translation>ButtonGroup</translation>
</message>
<message>
- <location/>
<source>RadioButton1</source>
<translation>RadioButton1</translation>
</message>
<message>
- <location/>
<source>RadioButton2</source>
<translation>RadioButton2</translation>
</message>
<message>
- <location/>
<source>RadioButton3</source>
<translation>RadioButton3</translation>
</message>
<message>
- <location/>
<source>ButtonGroup2</source>
<translation>ButtonGroup2</translation>
</message>
<message>
- <location/>
<source>CheckBox1</source>
<translation>CheckBox1</translation>
</message>
<message>
- <location/>
<source>CheckBox2</source>
<translation>CheckBox2</translation>
</message>
<message>
- <location/>
<source>LineEdit</source>
<translation>LineEdit</translation>
</message>
<message>
- <location/>
<source>ComboBox</source>
<translation>ComboBox</translation>
</message>
<message>
- <location/>
<source>PushButton</source>
<translation>PushButton</translation>
</message>
<message>
- <location/>
<source>&lt;p&gt;
&lt;a href=&quot;http://qt.nokia.com&quot;&gt;http://qt.nokia.com&lt;/a&gt;
&lt;/p&gt;
diff --git a/translations/qtconfig_uk.ts b/translations/qtconfig_uk.ts
index 3b1e2e5..24a9b7d 100644
--- a/translations/qtconfig_uk.ts
+++ b/translations/qtconfig_uk.ts
@@ -4,6 +4,26 @@
<context>
<name>MainWindow</name>
<message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Appearance&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to customize the appearance of your Qt applications.&lt;/p&gt;&lt;p&gt;You can select the default GUI Style from the drop down list and customize the colors.&lt;/p&gt;&lt;p&gt;Any GUI Style plugins in your plugin path will automatically be added to the list of built-in Qt styles. (See the Library Paths tab for information on adding new plugin paths.)&lt;/p&gt;&lt;p&gt;When you choose 3-D Effects and Window Background colors, the Qt Configuration program will automatically generate a palette for you. To customize colors further, press the Tune Palette button to open the advanced palette editor.&lt;p&gt;The Preview Window shows what the selected Style and colors look like.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Fonts&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to select the default font for your Qt applications. The selected font is shown (initially as &apos;Sample Text&apos;) in the line edit below the Family, Style and Point Size drop down lists.&lt;/p&gt;&lt;p&gt;Qt has a powerful font substitution feature that allows you to specify a list of substitute fonts. Substitute fonts are used when a font cannot be loaded, or if the specified font doesn&apos;t have a particular character.&lt;p&gt;For example, if you select the font Lucida, which doesn&apos;t have Korean characters, but need to show some Korean text using the Mincho font family you can do so by adding Mincho to the list. Once Mincho is added, any Korean characters that are not found in the Lucida font will be taken from the Mincho font. Because the font substitutions are lists, you can also select multiple families, such as Song Ti (for use with Chinese text).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Interface&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to customize the feel of your Qt applications.&lt;/p&gt;&lt;p&gt;If the Resolve Symlinks checkbox is checked Qt will follow symlinks when handling URLs. For example, in the file dialog, if this setting is turned on and /usr/tmp is a symlink to /var/tmp, entering the /usr/tmp directory will cause the file dialog to change to /var/tmp. With this setting turned off, symlinks are not resolved or followed.&lt;/p&gt;&lt;p&gt;The Global Strut setting is useful for people who require a minimum size for all widgets (e.g. when using a touch panel or for users who are visually impaired). Leaving the Global Strut width and height at 0 will disable the Global Strut feature&lt;/p&gt;&lt;p&gt;XIM (Extended Input Methods) are used for entering characters in languages that have large character sets, for example, Chinese and Japanese.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Printer&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to configure the way Qt generates output for the printer.You can specify if Qt should try to embed fonts into its generated output.If you enable font embedding, the resulting postscript will be more portable and will more accurately reflect the visual output on the screen; however the resulting postscript file size will be bigger.&lt;p&gt;When using font embedding you can select additional directories where Qt should search for embeddable font files. By default, the X server font path is used.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;&lt;font size+=2&gt;Phonon&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;Use this tab to configure the Phonon GStreamer multimedia backend. &lt;p&gt;It is reccommended to leave all settings on &quot;Auto&quot; to let Phonon determine your settings automatically.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Desktop Settings (Default)</source>
<translation>Налаштування стільниці (Типово)</translation>
</message>
diff --git a/translations/qvfb_ko.ts b/translations/qvfb_ko.ts
new file mode 100644
index 0000000..3d34090
--- /dev/null
+++ b/translations/qvfb_ko.ts
@@ -0,0 +1,415 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ko_KR">
+<context>
+ <name>AnimationSaveWidget</name>
+ <message>
+ <source>Record</source>
+ <translation>녹화</translation>
+ </message>
+ <message>
+ <source>Reset</source>
+ <translation>초기화</translation>
+ </message>
+ <message>
+ <source>Save</source>
+ <translation>저장</translation>
+ </message>
+ <message>
+ <source>Save in MPEG format (requires netpbm package installed)</source>
+ <translation>MPEG로 저장 (netpbm 패키지가 필요함)</translation>
+ </message>
+ <message>
+ <source>Click record to begin recording.</source>
+ <translation>녹화를 누르면 녹화를 시작합니다.</translation>
+ </message>
+ <message>
+ <source>Finished saving.</source>
+ <translation>저장하였습니다.</translation>
+ </message>
+ <message>
+ <source>Paused. Click record to resume, or save if done.</source>
+ <translation>일시 정지됨. 녹화 단추를 누르면 다시 시작하며, 끝났으면 저장하십시오.</translation>
+ </message>
+ <message>
+ <source>Pause</source>
+ <translation>일시 정지</translation>
+ </message>
+ <message>
+ <source>Recording...</source>
+ <translation>녹화 중...</translation>
+ </message>
+ <message>
+ <source>Saving... </source>
+ <translation>저장 중...</translation>
+ </message>
+ <message>
+ <source>Save animation...</source>
+ <translation>애니메이션 저장 중...</translation>
+ </message>
+ <message>
+ <source>Save canceled.</source>
+ <translation>저장이 취소되었습니다.</translation>
+ </message>
+ <message>
+ <source>Save failed!</source>
+ <translation>저장에 실패하였습니다!</translation>
+ </message>
+</context>
+<context>
+ <name>Config</name>
+ <message>
+ <source>Configure</source>
+ <translation>설정</translation>
+ </message>
+ <message>
+ <source>Size</source>
+ <translation>크기</translation>
+ </message>
+ <message>
+ <source>176x220 &quot;SmartPhone&quot;</source>
+ <translation>176x220 &quot;스마트폰&quot;</translation>
+ </message>
+ <message>
+ <source>240x320 &quot;PDA&quot;</source>
+ <translation>240x320 &quot;PDA&quot;</translation>
+ </message>
+ <message>
+ <source>320x240 &quot;TV&quot; / &quot;QVGA&quot;</source>
+ <translation>320x240 &quot;TV&quot; / &quot;QVGA&quot;</translation>
+ </message>
+ <message>
+ <source>640x480 &quot;VGA&quot;</source>
+ <translation>640x480 &quot;VGA&quot;</translation>
+ </message>
+ <message>
+ <source>800x480</source>
+ <translation>800x480</translation>
+ </message>
+ <message>
+ <source>800x600</source>
+ <translation>800x600</translation>
+ </message>
+ <message>
+ <source>1024x768</source>
+ <translation>1024x768</translation>
+ </message>
+ <message>
+ <source>Custom</source>
+ <translation>사용자 정의</translation>
+ </message>
+ <message>
+ <source>Depth</source>
+ <translation>색 농도</translation>
+ </message>
+ <message>
+ <source>1 bit monochrome</source>
+ <translation>1비트 단색</translation>
+ </message>
+ <message>
+ <source>2 bit grayscale</source>
+ <translation>2비트 그레이스케일</translation>
+ </message>
+ <message>
+ <source>4 bit grayscale</source>
+ <translation>4비트 그레이스케일</translation>
+ </message>
+ <message>
+ <source>8 bit</source>
+ <translation>8비트</translation>
+ </message>
+ <message>
+ <source>12 (16) bit</source>
+ <translation>12(16)비트</translation>
+ </message>
+ <message>
+ <source>15 bit</source>
+ <translation>15비트</translation>
+ </message>
+ <message>
+ <source>16 bit</source>
+ <translation>16비트</translation>
+ </message>
+ <message>
+ <source>18 bit</source>
+ <translation>18비트</translation>
+ </message>
+ <message>
+ <source>24 bit</source>
+ <translation>24비트</translation>
+ </message>
+ <message>
+ <source>32 bit</source>
+ <translation>32비트</translation>
+ </message>
+ <message>
+ <source>32 bit ARGB</source>
+ <translation>32비트 ARGB</translation>
+ </message>
+ <message>
+ <source>Swap red and blue channels</source>
+ <translation>빨간색과 파란색 채널 바꾸기</translation>
+ </message>
+ <message>
+ <source>BGR format</source>
+ <translation>BGR 형식</translation>
+ </message>
+ <message>
+ <source>Skin</source>
+ <translation>스킨</translation>
+ </message>
+ <message>
+ <source>None</source>
+ <translation>없음</translation>
+ </message>
+ <message>
+ <source>Emulate touch screen (no mouse move)</source>
+ <translation>터치스크린 흉내내기 (마우스 이동 없음)</translation>
+ </message>
+ <message>
+ <source>Emulate LCD screen (Only with fixed zoom of 3.0 times magnification)</source>
+ <translation>LCD 스크린 흉내내기 (3배 확대로 고정됨)</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;Note that any applications using the virtual framebuffer will be terminated if you change the Size or Depth &lt;i&gt;above&lt;/i&gt;. You may freely modify the Gamma &lt;i&gt;below&lt;/i&gt;.</source>
+ <translation>&lt;p&gt;&lt;i&gt;위&lt;/i&gt;에 있는 크기나 색 농도 설정을 바꾸면 가상 프레임버퍼를 사용하는 프로그램이 종료됩니다. &lt;i&gt;아래&lt;/i&gt;에 있는 감마 설정은 영향을 받지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Gamma</source>
+ <translation>감마</translation>
+ </message>
+ <message>
+ <source>Blue</source>
+ <translation>파란색</translation>
+ </message>
+ <message>
+ <source>1.0</source>
+ <translation>1.0</translation>
+ </message>
+ <message>
+ <source>Green</source>
+ <translation>녹색</translation>
+ </message>
+ <message>
+ <source>All</source>
+ <translation>모두</translation>
+ </message>
+ <message>
+ <source>Red</source>
+ <translation>빨간색</translation>
+ </message>
+ <message>
+ <source>Set all to 1.0</source>
+ <translation>모두 1.0으로 설정</translation>
+ </message>
+ <message>
+ <source>&amp;OK</source>
+ <translation>확인(&amp;O)</translation>
+ </message>
+ <message>
+ <source>&amp;Cancel</source>
+ <translation>취소(&amp;C)</translation>
+ </message>
+</context>
+<context>
+ <name>DeviceSkin</name>
+ <message>
+ <source>The image file &apos;%1&apos; could not be loaded.</source>
+ <translation>그림 파일 &apos;%1&apos;을(를) 불러올 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The skin directory &apos;%1&apos; does not contain a configuration file.</source>
+ <translation>스킨 디렉터리 &apos;%1&apos;에 설정 파일이 없습니다.</translation>
+ </message>
+ <message>
+ <source>The skin configuration file &apos;%1&apos; could not be opened.</source>
+ <translation>스킨 설정 파일 &apos;%1&apos;을(를) 열 수 없습니다.</translation>
+ </message>
+ <message>
+ <source>The skin configuration file &apos;%1&apos; could not be read: %2</source>
+ <translation>스킨 설정 파일 &apos;%1&apos;을(를) 읽을 수 없습니다: %2</translation>
+ </message>
+ <message>
+ <source>Syntax error: %1</source>
+ <translation>문법 오류: %1</translation>
+ </message>
+ <message>
+ <source>The skin &quot;up&quot; image file &apos;%1&apos; does not exist.</source>
+ <translation>스킨 &quot;up&quot; 그림 파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The skin &quot;down&quot; image file &apos;%1&apos; does not exist.</source>
+ <translation>스킨 &quot;down&quot; 그림 파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The skin &quot;closed&quot; image file &apos;%1&apos; does not exist.</source>
+ <translation>스킨 &quot;closed&quot; 그림 파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>The skin cursor image file &apos;%1&apos; does not exist.</source>
+ <translation>스킨 커서 그림 파일 &apos;%1&apos;이(가) 존재하지 않습니다.</translation>
+ </message>
+ <message>
+ <source>Syntax error in area definition: %1</source>
+ <translation>영역 지정 문법 오류: %1</translation>
+ </message>
+ <message>
+ <source>Mismatch in number of areas, expected %1, got %2.</source>
+ <translation>영역 개수 오류가 일치하지 않음. %1개를 예상하였으나 %2개가 들어옴.</translation>
+ </message>
+</context>
+<context>
+ <name>QVFb</name>
+ <message>
+ <source>&amp;File</source>
+ <translation>파일(&amp;F)</translation>
+ </message>
+ <message>
+ <source>&amp;Configure...</source>
+ <translation>설정(&amp;C)...</translation>
+ </message>
+ <message>
+ <source>&amp;Save image...</source>
+ <translation>그림 저장(&amp;S)...</translation>
+ </message>
+ <message>
+ <source>&amp;Animation...</source>
+ <translation>애니메이션(&amp;A)...</translation>
+ </message>
+ <message>
+ <source>&amp;Quit</source>
+ <translation>끝내기(&amp;Q)</translation>
+ </message>
+ <message>
+ <source>&amp;View</source>
+ <translation>보기(&amp;V)</translation>
+ </message>
+ <message>
+ <source>Show &amp;Cursor</source>
+ <translation>커서 보이기(&amp;C)</translation>
+ </message>
+ <message>
+ <source>&amp;Refresh Rate...</source>
+ <translation>갱신 주기(&amp;R)...</translation>
+ </message>
+ <message>
+ <source>&amp;No rotation</source>
+ <translation>회전 없음(&amp;N)</translation>
+ </message>
+ <message>
+ <source>&amp;90° rotation</source>
+ <translation>90° 회전(&amp;9)</translation>
+ </message>
+ <message>
+ <source>1&amp;80° rotation</source>
+ <translation>180° 회전(&amp;8)</translation>
+ </message>
+ <message>
+ <source>2&amp;70° rotation</source>
+ <translation>270° 회전(&amp;7)</translation>
+ </message>
+ <message>
+ <source>Zoom scale &amp;0.5</source>
+ <translation>0.5배로 축소(&amp;0)</translation>
+ </message>
+ <message>
+ <source>Zoom scale 0.7&amp;5</source>
+ <translation>0.75배로 축소 (&amp;5)</translation>
+ </message>
+ <message>
+ <source>Zoom scale &amp;1</source>
+ <translation>1배로 크기 조정 (&amp;1)</translation>
+ </message>
+ <message>
+ <source>Zoom scale &amp;2</source>
+ <translation>2배로 확대(&amp;2)</translation>
+ </message>
+ <message>
+ <source>Zoom scale &amp;3</source>
+ <translation>3배로 확대(&amp;3)</translation>
+ </message>
+ <message>
+ <source>Zoom scale &amp;4</source>
+ <translation>4배로 확대(&amp;4)</translation>
+ </message>
+ <message>
+ <source>Zoom &amp;scale...</source>
+ <translation>크기 조정(&amp;S)...</translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation>도움말(&amp;H)</translation>
+ </message>
+ <message>
+ <source>&amp;About...</source>
+ <translation>정보(&amp;A)...</translation>
+ </message>
+ <message>
+ <source>Save Main Screen image</source>
+ <translation>주 화면 그림 저장</translation>
+ </message>
+ <message>
+ <source>snapshot.png</source>
+ <translation>snapshot.png</translation>
+ </message>
+ <message>
+ <source>Portable Network Graphics (*.png)</source>
+ <translation>Portable Network Graphics (*.png)</translation>
+ </message>
+ <message>
+ <source>Save Main Screen Image</source>
+ <translation>주 화면 그림 저장</translation>
+ </message>
+ <message>
+ <source>Save failed. Check that you have permission to write to the target directory.</source>
+ <translation>저장하는 데 실패하였습니다. 대상 디렉터리에 쓰기 권한이 있는지 확인하십시오.</translation>
+ </message>
+ <message>
+ <source>Save Second Screen image</source>
+ <translation>두 번째 화면 그림 저장</translation>
+ </message>
+ <message>
+ <source>Save Second Screen Image</source>
+ <translation>두 번째 화면 그림 저장</translation>
+ </message>
+ <message>
+ <source>About QVFB</source>
+ <translation>QVFB 정보</translation>
+ </message>
+ <message>
+ <source>&lt;h2&gt;The Qt for Embedded Linux Virtual X11 Framebuffer&lt;/h2&gt;&lt;p&gt;This application runs under Qt for X11, emulating a simple framebuffer, which the Qt for Embedded Linux server and clients can attach to just as if it was a hardware Linux framebuffer. &lt;p&gt;With the aid of this development tool, you can develop Qt for Embedded Linux applications under X11 without having to switch to a virtual console. This means you can comfortably use your other development tools such as GUI profilers and debuggers.</source>
+ <translation>&lt;h2&gt;Qt for Embedded Linux 가상 X11 프레임버퍼&lt;/h2&gt;&lt;p&gt;이 프로그램은 Qt for X11 하에서 실행되며, Qt for Embedded Linux 서버 및 클라이언트가 하드웨어 리눅스 프레임버퍼처럼 사용할 수 있습니다.&lt;p&gt;이 도구를 사용하면 Qt for Embedded Linux 프로그램을 가상 콘솔 전환 없이 X11에서 개발할 수 있으며, GUI 프로파일러나 디버거를 사용할 수 있습니다.</translation>
+ </message>
+ <message>
+ <source>Browse...</source>
+ <translation>찾아보기...</translation>
+ </message>
+ <message>
+ <source>Load Custom Skin...</source>
+ <translation>사용자 정의 스킨 불러오기...</translation>
+ </message>
+ <message>
+ <source>All QVFB Skins (*.skin)</source>
+ <translation>모든 QVFB 스킨 (*.skin)</translation>
+ </message>
+</context>
+<context>
+ <name>QVFbRateDialog</name>
+ <message>
+ <source>Target frame rate:</source>
+ <translation>대상 프레임 레이트:</translation>
+ </message>
+ <message>
+ <source>%1fps</source>
+ <translation>%1fps</translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation>확인</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>취소</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/qvfb_pl.ts b/translations/qvfb_pl.ts
index 9b85ad9..7c18a5b 100644
--- a/translations/qvfb_pl.ts
+++ b/translations/qvfb_pl.ts
@@ -4,71 +4,54 @@
<context>
<name>AnimationSaveWidget</name>
<message>
- <location filename="../tools/qvfb/qvfb.cpp" line="+868"/>
- <location line="+204"/>
<source>Record</source>
<translation>Nagraj</translation>
</message>
<message>
- <location line="-202"/>
<source>Reset</source>
<translation>Wyzeruj</translation>
</message>
<message>
- <location line="+2"/>
<source>Save</source>
<translation>Zachowaj</translation>
</message>
<message>
- <location line="+18"/>
<source>Save in MPEG format (requires netpbm package installed)</source>
<translation>Zachowaj w formacie MPEG (wymaga zainstalowanego pakietu netpbm)</translation>
</message>
<message>
- <location line="+8"/>
- <location line="+206"/>
<source>Click record to begin recording.</source>
<translation>Kliknij przycisk aby rozpocząć nagrywanie.</translation>
</message>
<message>
- <location line="-115"/>
- <location line="+147"/>
<source>Finished saving.</source>
<translation>Zachowywanie zakończone.</translation>
</message>
<message>
- <location line="-63"/>
<source>Paused. Click record to resume, or save if done.</source>
<translation>Wstrzymany. Kliknij nagrywaj aby powrócić lub zachować jeżeli zakończono.</translation>
</message>
<message>
- <location line="+6"/>
<source>Pause</source>
<translation>Wstrzymaj</translation>
</message>
<message>
- <location line="+1"/>
<source>Recording...</source>
<translation>Nagrywanie...</translation>
</message>
<message>
- <location line="+40"/>
<source>Saving... </source>
<translation>Zapisywanie... </translation>
</message>
<message>
- <location line="+4"/>
- <location line="+4"/>
<source>Save animation...</source>
<translation>Zachowaj animacje...</translation>
</message>
<message>
- <location line="+2"/>
<source>Save canceled.</source>
<translation>Zachowywanie anulowane.</translation>
</message>
<message>
- <location line="+9"/>
<source>Save failed!</source>
<translation>Zachowywanie zakończone błędem!</translation>
</message>
@@ -76,192 +59,154 @@
<context>
<name>Config</name>
<message>
- <location filename="../tools/qvfb/config.ui"/>
<source>Configure</source>
<translation>Skonfiguruj</translation>
</message>
<message>
- <location/>
<source>Size</source>
<translation>Rozmiar</translation>
</message>
<message>
- <location/>
<source>176x220 &quot;SmartPhone&quot;</source>
<translation>176x220 &quot;SmartPhone&quot;</translation>
</message>
<message>
- <location/>
<source>240x320 &quot;PDA&quot;</source>
<translation>240x320 &quot;PDA&quot;</translation>
</message>
<message>
- <location/>
<source>320x240 &quot;TV&quot; / &quot;QVGA&quot;</source>
<translation>320x240 &quot;TV&quot; / &quot;QVGA&quot;</translation>
</message>
<message>
- <location/>
<source>640x480 &quot;VGA&quot;</source>
<translation>640x480 &quot;VGA&quot;</translation>
</message>
<message>
- <location/>
<source>800x600</source>
<translation>800x600</translation>
</message>
<message>
- <location/>
<source>1024x768</source>
<translation>1024x768</translation>
</message>
<message>
- <location/>
<source>Custom</source>
<translation>Niestandardowy</translation>
</message>
<message>
- <location/>
<source>Depth</source>
<translation>Głębokość</translation>
</message>
<message>
- <location/>
<source>1 bit monochrome</source>
<translation>1 bitowa monochromatyczna</translation>
</message>
<message>
- <location/>
<source>4 bit grayscale</source>
<translation>4 bitowa skala szarości</translation>
</message>
<message>
- <location/>
<source>8 bit</source>
<translation>8 bitowa</translation>
</message>
<message>
- <location/>
<source>12 (16) bit</source>
<translation>12 (16) bitowa</translation>
</message>
<message>
- <location/>
<source>16 bit</source>
<translation>16 bitowa</translation>
</message>
<message>
- <location/>
<source>18 bit</source>
<translation>18 bitowa</translation>
</message>
<message>
- <location/>
<source>24 bit</source>
<translation>24 bitowa</translation>
</message>
<message>
- <location/>
<source>32 bit</source>
<translation>32 bitowa</translation>
</message>
<message>
- <location/>
<source>Skin</source>
<translation>Skórka</translation>
</message>
<message>
- <location/>
<source>None</source>
<translation>Brak</translation>
</message>
<message>
- <location/>
<source>Emulate touch screen (no mouse move)</source>
<translation>Symuluj ekran dotykowy (brak ruchu myszy)</translation>
</message>
<message>
- <location/>
<source>Emulate LCD screen (Only with fixed zoom of 3.0 times magnification)</source>
<translation>Symuluj ekran LCD (tylko ze stałym powiększeniem x 3)</translation>
</message>
<message>
- <location/>
<source>&lt;p&gt;Note that any applications using the virtual framebuffer will be terminated if you change the Size or Depth &lt;i&gt;above&lt;/i&gt;. You may freely modify the Gamma &lt;i&gt;below&lt;/i&gt;.</source>
<translation>&lt;p&gt;Uwaga, każda aplikacja korzystająca z virtual framebuffer zostanie zakończona przy zmianie Rozmiaru bądź Głębokości &lt;i&gt;powyżej&lt;/i&gt;. Można swobodnie zmieniać parametr Gamma &lt;i&gt;poniżej&lt;/i&gt;.</translation>
</message>
<message>
- <location/>
<source>Gamma</source>
<translation>Gamma</translation>
</message>
<message>
- <location/>
<source>Blue</source>
<translation>Błękit</translation>
</message>
<message>
- <location/>
<source>1.0</source>
<translation>1.0</translation>
</message>
<message>
- <location/>
<source>Green</source>
<translation>Zieleń</translation>
</message>
<message>
- <location/>
<source>All</source>
<translation>Wszystkie</translation>
</message>
<message>
- <location/>
<source>Red</source>
<translation>Czerwień</translation>
</message>
<message>
- <location/>
<source>Set all to 1.0</source>
<translation>Ustaw wszystkie na 1.0</translation>
</message>
<message>
- <location/>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
</message>
<message>
- <location/>
<source>&amp;Cancel</source>
<translation>&amp;Anuluj</translation>
</message>
<message>
- <location/>
<source>15 bit</source>
<translation>15 bitowa</translation>
</message>
<message>
- <location/>
<source>32 bit ARGB</source>
<translation>32 bitowa ARGB</translation>
</message>
<message>
- <location/>
<source>2 bit grayscale</source>
<translation>2 bitowa skala szarości</translation>
</message>
<message>
- <location/>
<source>Swap red and blue channels</source>
<translation>Zamień kanał czerwony z niebieskim</translation>
</message>
<message>
- <location/>
<source>BGR format</source>
<translation>format BGR</translation>
</message>
<message>
- <location/>
<source>800x480</source>
<translation>800x480</translation>
</message>
@@ -269,57 +214,46 @@
<context>
<name>DeviceSkin</name>
<message>
- <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="+79"/>
<source>The image file &apos;%1&apos; could not be loaded.</source>
<translation>Nie można załadować pliku z obrazkiem &apos;%1&apos;.</translation>
</message>
<message>
- <location line="+64"/>
<source>The skin directory &apos;%1&apos; does not contain a configuration file.</source>
<translation>Katalog ze skórkami &apos;%1&apos; nie zawiera pliku konfiguracyjnego.</translation>
</message>
<message>
- <location line="+5"/>
<source>The skin configuration file &apos;%1&apos; could not be opened.</source>
<translation>Nie można otworzyć pliku konfiguracyjnego skórki &apos;%1&apos;.</translation>
</message>
<message>
- <location line="+6"/>
<source>The skin configuration file &apos;%1&apos; could not be read: %2</source>
<translation>Nie można odczytać pliku konfiguracyjnego skórki &apos;%1&apos;: %2</translation>
</message>
<message>
- <location line="+70"/>
<source>Syntax error: %1</source>
<translation>Błąd składni: %1</translation>
</message>
<message>
- <location line="+21"/>
<source>The skin &quot;up&quot; image file &apos;%1&apos; does not exist.</source>
<translation>Nie istnieje plik &apos;%1&apos; z obrazkiem &quot;góra&quot; dla skórki.</translation>
</message>
<message>
- <location line="+10"/>
<source>The skin &quot;down&quot; image file &apos;%1&apos; does not exist.</source>
<translation>Nie istnieje plik &apos;%1&apos; z obrazkiem &quot;dół&quot; dla skórki.</translation>
</message>
<message>
- <location line="+11"/>
<source>The skin &quot;closed&quot; image file &apos;%1&apos; does not exist.</source>
<translation>Nie istnieje plik &apos;%1&apos; z obrazkiem &quot;zamknij&quot; dla skórki.</translation>
</message>
<message>
- <location line="+12"/>
<source>The skin cursor image file &apos;%1&apos; does not exist.</source>
<translation>Nie istnieje plik &apos;%1&apos; z obrazkiem kursora dla skórki.</translation>
</message>
<message>
- <location line="+25"/>
<source>Syntax error in area definition: %1</source>
<translation>Błąd składni w obszarze definicji: %1</translation>
</message>
<message>
- <location line="+38"/>
<source>Mismatch in number of areas, expected %1, got %2.</source>
<translation>Niezgodność w liczbie obszarów, spodziewano się %1, otrzymano %2.</translation>
</message>
@@ -327,19 +261,155 @@
<context>
<name>QVFb</name>
<message>
- <location filename="../tools/qvfb/qvfb.cpp" line="-504"/>
+ <source>&amp;File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Configure...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Save image...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Animation...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Quit</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;View</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Show &amp;Cursor</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Refresh Rate...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;No rotation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;90° rotation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>1&amp;80° rotation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>2&amp;70° rotation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Zoom scale &amp;0.5</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Zoom scale 0.7&amp;5</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Zoom scale &amp;1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Zoom scale &amp;2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Zoom scale &amp;3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Zoom scale &amp;4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Zoom &amp;scale...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&amp;About...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Main Screen image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>snapshot.png</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Portable Network Graphics (*.png)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Main Screen Image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save failed. Check that you have permission to write to the target directory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Second Screen image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Save Second Screen Image</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>About QVFB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>&lt;h2&gt;The Qt for Embedded Linux Virtual X11 Framebuffer&lt;/h2&gt;&lt;p&gt;This application runs under Qt for X11, emulating a simple framebuffer, which the Qt for Embedded Linux server and clients can attach to just as if it was a hardware Linux framebuffer. &lt;p&gt;With the aid of this development tool, you can develop Qt for Embedded Linux applications under X11 without having to switch to a virtual console. This means you can comfortably use your other development tools such as GUI profilers and debuggers.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Browse...</source>
<translation>Przeglądaj...</translation>
</message>
<message>
- <location line="+143"/>
<source>Load Custom Skin...</source>
<translation>Załaduj skórki użytkownika...</translation>
</message>
<message>
- <location line="+1"/>
<source>All QVFB Skins (*.skin)</source>
<translation>Wszystkie skórki QVFB (*.skin)</translation>
</message>
</context>
+<context>
+ <name>QVFbRateDialog</name>
+ <message>
+ <source>Target frame rate:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>%1fps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>OK</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
</TS>